Test
5c0eb2b66a
feat: wire GraphRAG API handlers, activities, and database layer
ci / test (push) Failing after 2m9s
2026-09-05 06:00:58 -07:00
Test
447951daca
feat: GraphRAG query API handlers and activities
ci / test (push) Failing after 2m6s
2026-09-05 05:58:18 -07:00
Test
e01dad4e8c
feat: GraphRAG query workflow and indexing
ci / test (push) Failing after 2m5s
2026-09-05 05:52:56 -07:00
Test
84b4ca120f
feat: add relation wording schema
ci / test (push) Failing after 2m24s
2026-09-05 05:45:47 -07:00
Test
9624f0e18d
feat: add canvas compatibility checking for connection validation
ci / test (push) Failing after 2m46s
2026-09-05 01:01:01 -07:00
Test
2a3b080e29
feat: add CanvasReasonerActivity for auto-inferring workflow connections
ci / test (push) Failing after 6m2s
2026-09-05 00:54:22 -07:00
Test
00fc83c081
feat: add JWT auth token support to LLM inference activities
ci / test (push) Failing after 2m14s
2026-09-05 00:47:22 -07:00
Test
0da90fdd7a
feat: database layer + canvas validator/converter + LLM inference activities
...
ci / test (push) Failing after 2m11s
- Add pkg/db models and CRUD methods for workflows
- Add internal/routing canvas validator (DAG check, connectivity)
- Add internal/routing canvas converter (Canvas → WorkflowSpec)
- Register LLMInferenceActivity and LLMBatchInferenceActivity
- Update api/server and cmd/server with database integration
- Add K8s environment variable support
- Update activity knowledge base with LLM activities
- Add .env.example configuration template
2026-09-05 00:43:30 -07:00
Test
924aa398b6
refactor: improve AssumeRoleActivity code quality (CRAP/DRY/SOLID)
...
ci / test (push) Failing after 1m23s
- Extract validateAssumeRoleInput() - CRAP ~2
- Extract resolveAssumeRoleConfig() with getOrEnv() helper - CRAP ~4
* Fixes DRY violation (config resolution was repeated 3x)
- Extract requestAuthToken() - CRAP ~4 (sequential, easy to test)
- Extract buildAssumeRoleOutput() - CRAP ~1
- Main AssumeRoleActivity now ~CRAP 3 (orchestrates high-level flow)
Overall CRAP reduction: 40+ → 6-8 total complexity
Improves:
- Single Responsibility: Each function does one thing
- DRY: Config resolution centralized
- Testability: Each step independently unit-testable
- Readability: Main function reads like pseudocode
2026-09-04 14:13:47 -07:00
Test
4a34c8e672
feat: add AssumeRoleActivity for temporary LLM API token grants
...
Implements AWS AssumeRole-like pattern for Poimen:
- User/service requests temporary access with identity + scope
- AssumeRoleActivity exchanges credentials with OAuth2 auth server
- Returns JWT token valid for limited time (default: 1hr, max: 24hrs)
- Token used in all subsequent LLM API calls to api.riotpiao.com
Key features:
- Credentials from vault/K8s secrets (never hardcoded)
- Scope-based access control (llm:read, llm:read llm:write, llm:admin)
- Automatic token expiration tracking
- Retry support for transient auth failures (2x, 1.5s backoff)
- Configurable auth server endpoint
Usage pattern:
1. AssumeRoleActivity(identity, scope) → JWT token
2. LLMRouter uses token in LLMAuth config
3. All activity calls validated against token + scopes
4. Workflow optionally refreshes token before expiry
Security:
- No credentials in code/logs (env or vault only)
- Short-lived tokens (1hr default, 24hr max)
- Server-enforced scope validation
- Token revocation support
Activity registered: #10 (authentication category)
Knowledge base updated with full activity spec
New file: action/assume_role.go (5.2 KB)
2026-09-04 14:11:58 -07:00
Test
e8984b055c
fix: update LLMRouter callers after API refactor to use NewLLMRouterDefault
ci / test (push) Successful in 1m44s
2026-09-03 09:42:56 -07:00
Test
1c16869126
refactor: reduce CRAP scores in router/workflow/notification
...
ci / test (push) Successful in 3m42s
- llm_router.go: Extract getStringFromMap, firstNonEmpty, paramResolver
- buildCronSpec: 12 → 4 complexity
- buildParameters: 9 → 5 complexity
- routing_workflow.go: Extract stateMachine, stateResult types
- RoutingWorkflow: 11 → 6 complexity
- Separate executeTask/executePass/executeFail
- notification.go: Extract checker interface pattern
- DeploymentPreCheckActivity: 10 → 5 complexity
- goCheckers() returns language-specific checkers
- Added 7 new test cases for helper functions
- Coverage: internal/routing 63.6% → 66.0%
2026-09-03 08:50:21 -07:00
Test
a0e64224a7
feat: RoutingWorkflow + LLM Router + Memory Activity
...
ci / test (push) Successful in 2m12s
- Add RoutingWorkflow: generic state machine executor for WorkflowSpec
- Add LLM Router: natural language → WorkflowSpec generation
- Add RetrieveMemoryActivity: query poimen-memory for context
- Add activities: AnalyzeCode, SecurityScan, GenerateReport, Notify, etc.
- Add agent-prompts/router: LLM prompt documentation
- Extend starter with --route flag for routing workflows
- Remove orchestrator job (trigger via API/message instead)
- Clean up: move docs to Desktop, add .gitignore for *.md
2026-09-02 19:21:53 -07:00
Test
db71919207
fix(llm): make API URL configurable for Kubernetes internal service
...
ci / test (push) Successful in 1m51s
Issue: Orchestrator pods failing with 'api.riotpiao.com is unreachable'
- URL was hardcoded to external hostname
- Inside Kubernetes cluster, needs to use internal service DNS
Changes:
- Make LocalLLMBaseURL read from LOCAL_LLM_BASE_URL env var
- Default to 'https://api.riotpiao.com ' for external deployments
- Update orchestrator-job.yaml to pass internal service: http://api-gateway.api:8080
- Update worker-deployment.yaml to use same internal service URL
This allows pods to reach the LLM API via Kubernetes DNS without external network access.
2026-08-31 14:49:30 -07:00
Test
6a87833c7f
feat: implement proper orchestrator workflow with reconciliation loop
...
ci / test (push) Failing after 1m2s
Rewrite OrchestratorWorkflow as true reconciliation loop:
- PlanningActivity decides what tasks to dispatch
- Fan-out TaskUnit workflows for parallel execution
- Each TaskUnit runs Implementer → Test → Judge → Commit
- Judge reviews code quality, retries on failure with lessons
- Fan-in waits for all TaskUnits
- Board update and squash merge on success
- continue-as-new for long-running workflows
- Proper error handling and signal support
Key changes:
- statemachine/orchestrator.go: Reconciliation loop (Plan → Dispatch → Review → Repeat)
- statemachine/taskunit.go: Task execution with retry loop & judge review
- statemachine/types.go: Updated TaskUnitInput/Output for new workflow
- cmd/worker/main.go: Register RunIntegrationTestActivity
- action/integration.go: Renamed from integration_test.go (fix Go build issue)
Models:
- Planner: reasoning (OpenAI-compatible from local LLM API)
- Judge: reasoning (reviews diff + tests, gates success)
- Implementer: ornith:35b (executes tasks)
Verification: go build ./cmd/worker ./cmd/starter ✓
2026-08-26 15:00:42 -07:00
Test
121cad1ad5
feat: integrate local LLM API (homelab-frontend) + Pi skills
...
ci / test (push) Successful in 1m14s
Replace Anthropic client with OpenAI-compatible client targeting https://api.riotpiao.com .
Configure models: reasoning (Planner/Judge), ornith:35b (Implementer).
Add health check on startup.
Add Pi provider support for skill preparation (--pi-provider=local-llm).
Files changed:
- action/llm/client.go: OpenAI-compatible HTTP client + HealthCheck()
- action/llm/client_test.go: Unit tests for model validation & health
- cmd/starter/main.go: Health check before workflow, local model defaults
- statemachine/types.go: PiProvider field for OrchestratorInput
Models:
- Planner: reasoning (smart decisions)
- Judge: reasoning (quality review)
- Implementer: ornith:35b (cheap execution)
Skills: pi clone-or-fetch --provider=local-llm with 504 timeout learning.
Verification: go build ./cmd/starter ./cmd/worker ./action/llm ✓
Tests: go test -v ./action/llm ✓ (all passing)
2026-08-26 14:54:34 -07:00
Story Crater Bot
03c8ae6168
fix(action): remove unused fmt import
...
ci / test (push) Failing after 33s
Fixes build failure: action/integration_test.go uses only context and exec,
not fmt. Import was unused and causing build failure.
2026-08-22 01:01:32 -07:00
Story Crater Bot
d74644d197
fix(action): configure git user in worktree before commit
...
ci / test (push) Failing after 35s
Worktrees don't inherit git config from main repo, causing 'git commit'
to fail with exit status 128 when user.name/user.email are not set.
Configure with poimen agent identity before each commit.
2026-08-22 00:57:57 -07:00
Test
002fe98e17
feat(workflows): wire TaskUnit/Orchestrator activities, add k8s deploy manifests
...
ci / test (push) Failing after 5s
Implements real activity-calling logic in OrchestratorWorkflow and
TaskUnitWorkflow (previously stubs), adds GitDiffActivity, and expands
PlanningActivity's I/O to carry repo path and prior task results.
Adds k8s/ deployment manifests (worker Deployment, orchestrator Job,
Kustomize base) for the poimen-workflows Temporal worker, using a
dedicated Kubernetes namespace `poimen` and Temporal namespace
`poimen-harness` rather than sharing the Temporal server's own
`temporal`/`production` namespaces.
2026-08-21 21:57:01 -07:00
Test
5b8d3df01e
(workflow) add simple harness workflow for manual testing
2026-08-21 18:07:12 -07:00
Test
769e56d33d
Add new file
2026-08-21 15:58:46 -07:00