@yemi33/minions 0.1.2448 → 0.1.2449
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli-api-client.js +1 -1
- package/bin/install-internal-minions.js +1382 -44
- package/bin/install-layout.js +150 -0
- package/bin/minions.js +460 -167
- package/dashboard/docs/typography.md +65 -12
- package/dashboard/js/command-center.js +58 -4
- package/dashboard/js/detail-panel.js +36 -0
- package/dashboard/js/memory-panel.js +59 -12
- package/dashboard/js/qa.js +179 -20
- package/dashboard/js/refresh.js +148 -12
- package/dashboard/js/render-dispatch.js +3 -4
- package/dashboard/js/render-inbox.js +2 -2
- package/dashboard/js/render-other.js +3 -3
- package/dashboard/js/render-pipelines.js +14 -0
- package/dashboard/js/render-plans.js +57 -9
- package/dashboard/js/render-prd.js +132 -23
- package/dashboard/js/render-prs.js +195 -166
- package/dashboard/js/render-schedules.js +63 -3
- package/dashboard/js/render-utils.js +3 -3
- package/dashboard/js/render-watches.js +19 -3
- package/dashboard/js/render-work-items.js +238 -30
- package/dashboard/js/settings.js +205 -54
- package/dashboard/js/utils.js +51 -1
- package/dashboard/pages/home.html +1 -1
- package/dashboard/pages/qa.html +1 -16
- package/dashboard/pages/work.html +40 -0
- package/dashboard/shared/cc-limits.js +79 -0
- package/dashboard/shared/pr-filters.js +21 -38
- package/dashboard/shared/project-git-summary.js +1 -1
- package/dashboard/shared/record-filters.js +169 -0
- package/dashboard/shared/watches-source.js +1 -1
- package/dashboard/shared/welcome-popup.js +1 -1
- package/dashboard/shared/wi-filters.js +302 -0
- package/dashboard/slim/body.html +1 -0
- package/dashboard/slim/js/command-send.js +26 -0
- package/dashboard/slim/js/modals-tiles.js +380 -39
- package/dashboard/slim/js/status.js +13 -21
- package/dashboard/slim/layout.html +1 -0
- package/dashboard/slim/panel-bootstrap.js +6 -2
- package/dashboard/slim/styles.css +38 -0
- package/dashboard/styles.css +159 -55
- package/dashboard-build.js +13 -2
- package/dashboard.js +956 -423
- package/docs/README.md +11 -6
- package/docs/api-errors.md +2 -2
- package/docs/architecture-review-2026-07-09.md +1 -1
- package/docs/architecture.excalidraw +2 -2
- package/docs/auto-discovery.md +18 -9
- package/docs/branch-derivation.md +4 -4
- package/docs/capture-demos.js +39 -2
- package/docs/ci-runner-canary.md +123 -0
- package/docs/claude-md-propagation.md +2 -2
- package/docs/cloud-agent-dispatch.md +204 -0
- package/docs/command-center.md +7 -7
- package/docs/completion-reports.md +43 -20
- package/docs/constants.md +10 -3
- package/docs/constellation-bridge.md +134 -6
- package/docs/constellation-style-telemetry.md +4 -4
- package/docs/contracts/capability-protocol.v1.json +165 -0
- package/docs/cooldown-merge-semantics.md +12 -12
- package/docs/copilot-cli-schema.md +7 -7
- package/docs/cross-repo-plans.md +10 -10
- package/docs/dead-code-audit-retractions.md +5 -5
- package/docs/default-branch-ci.md +173 -0
- package/docs/deprecated.json +31 -31
- package/docs/design-inbox-entries-schema.md +3 -3
- package/docs/design-language.md +1051 -0
- package/docs/design-state-storage.md +11 -11
- package/docs/diagnostics-crash-reports.md +9 -9
- package/docs/diagnostics-memory.md +5 -5
- package/docs/documentation-audit-2026-07-09.md +7 -7
- package/docs/engine-restart.md +90 -5
- package/docs/harness-mode.md +1 -1
- package/docs/internal-install.md +338 -39
- package/docs/kb-dedup-duplicate-pair-investigation.md +5 -5
- package/docs/kb-pr3223-cascade-archiving.md +1 -1
- package/docs/kb-pr696-merge-conflict-docs.md +6 -6
- package/docs/kb-sweep.md +35 -35
- package/docs/keep-processes.md +1 -1
- package/docs/live-checkout-mode.md +30 -30
- package/docs/managed-spawn.md +18 -14
- package/docs/named-agents.md +7 -7
- package/docs/plan-lifecycle.md +69 -2
- package/docs/pr-author-identity.md +114 -0
- package/docs/pr-auto-fix-dispatch.md +19 -4
- package/docs/pr-comment-followup.md +6 -6
- package/docs/pr-review-fix-loop.md +59 -10
- package/docs/process-termination.md +40 -0
- package/docs/proposals/repo-pool-for-live-checkout.md +13 -13
- package/docs/qa-runbook-lifecycle.md +367 -17
- package/docs/qa-runbooks.md +3 -3
- package/docs/rfc-completion-json.md +18 -18
- package/docs/runtime-adapters.md +26 -21
- package/docs/security.md +6 -6
- package/docs/self-improvement.md +4 -4
- package/docs/shared-lifecycle-module-map.md +473 -472
- package/docs/skills.md +52 -3
- package/docs/slim-ux/concepts.md +121 -116
- package/docs/specs/agent-configurability.md +18 -18
- package/docs/specs/agent-rename.md +18 -18
- package/docs/team-memory.md +38 -21
- package/docs/timeouts-and-liveness.md +118 -10
- package/docs/tutorials/01-install-and-connect.md +1 -1
- package/docs/watches.md +40 -39
- package/docs/workspace-manifests.md +4 -4
- package/docs/worktree-lifecycle.md +293 -14
- package/engine/README.md +46 -0
- package/engine/{ado-comment.js → ado/comment.js} +8 -8
- package/engine/{ado-git-auth.js → ado/git-auth.js} +4 -4
- package/engine/{ado.js → ado/index.js} +417 -63
- package/engine/{ado-status.js → ado/status.js} +6 -8
- package/engine/{ado-token.js → ado/token.js} +1 -1
- package/engine/{acp-transport.js → agents/acp-transport.js} +62 -22
- package/engine/{agent-worker-pool.js → agents/agent-worker-pool.js} +17 -8
- package/engine/{cc-worker-pool.js → agents/cc-worker-pool.js} +16 -6
- package/engine/{claude-md-context.js → agents/claude-md-context.js} +5 -5
- package/engine/{harness-context.js → agents/harness-context.js} +5 -5
- package/engine/{harness.js → agents/harness.js} +3 -3
- package/engine/{llm.js → agents/llm.js} +18 -14
- package/engine/{model-discovery.js → agents/model-discovery.js} +2 -2
- package/engine/{playbook.js → agents/playbook.js} +155 -22
- package/engine/{pooled-agent-process.js → agents/pooled-agent-process.js} +14 -12
- package/engine/{preflight.js → agents/preflight.js} +29 -10
- package/engine/{spawn-agent.js → agents/spawn-agent.js} +25 -14
- package/engine/{spawn-phase-watchdog.js → agents/spawn-phase-watchdog.js} +16 -7
- package/engine/{steering.js → agents/steering.js} +5 -5
- package/engine/{tools-inventory.js → agents/tools-inventory.js} +2 -2
- package/engine/{agent-api-validation.js → api/agent-api-validation.js} +2 -2
- package/engine/{api-validation.js → api/api-validation.js} +1 -1
- package/engine/api/bridge.js +787 -0
- package/engine/{cc-api-validation.js → api/cc-api-validation.js} +1 -1
- package/engine/api/companion.js +560 -0
- package/engine/{content-api-validation.js → api/content-api-validation.js} +2 -2
- package/engine/{pr-issue-validation.js → api/pr-issue-validation.js} +33 -6
- package/engine/{settings-validation.js → api/settings-validation.js} +32 -4
- package/engine/api-contracts/agent-content.js +4 -4
- package/engine/api-contracts/capability-manifest.js +236 -0
- package/engine/api-contracts/capability-protocol.js +333 -0
- package/engine/api-contracts/cc-ops.js +1 -1
- package/engine/api-contracts/config-runtime.js +5 -0
- package/engine/api-contracts/core.js +28 -1
- package/engine/api-contracts/index.js +100 -0
- package/engine/api-contracts/orchestration.js +18 -5
- package/engine/api-contracts/pull-requests.js +37 -6
- package/engine/api-contracts/qa-process.js +29 -6
- package/engine/api-contracts/work-plan-prd.js +21 -1
- package/engine/cloud/contract.js +212 -0
- package/engine/cloud/index.js +159 -0
- package/engine/{execution-model.js → core/execution-model.js} +1 -1
- package/engine/{features.js → core/features.js} +4 -4
- package/engine/{operator-identity.js → core/operator-identity.js} +1 -1
- package/engine/{queries.js → core/queries.js} +201 -36
- package/engine/{safe-expr.js → core/safe-expr.js} +1 -1
- package/engine/{shared.js → core/shared.js} +1637 -175
- package/engine/{stdio-timestamps.js → core/stdio-timestamps.js} +1 -1
- package/engine/{untrusted-fence.js → core/untrusted-fence.js} +3 -3
- package/engine/db/index.js +11 -2
- package/engine/db/migrations/002-dispatches.js +3 -3
- package/engine/db/migrations/003-work-items.js +1 -1
- package/engine/db/migrations/004-pull-requests.js +1 -1
- package/engine/db/migrations/006-metrics.js +1 -1
- package/engine/db/migrations/007-watches.js +2 -2
- package/engine/db/migrations/008-small-state.js +1 -1
- package/engine/db/migrations/009-qa.js +1 -1
- package/engine/db/migrations/010-pr-links.js +1 -1
- package/engine/db/migrations/011-remaining-state.js +1 -1
- package/engine/db/migrations/012-steering-deliveries.js +2 -2
- package/engine/db/migrations/013-backfill-broken-note-links.js +1 -1
- package/engine/db/migrations/014-pr-fix-target-prefs.js +2 -2
- package/engine/db/migrations/015-plans-prds.js +0 -0
- package/engine/db/migrations/018-sql-only-cutover.js +2 -2
- package/engine/db/migrations/021-archived-work-items.js +1 -1
- package/engine/db/migrations/022-global-cc-session.js +1 -1
- package/engine/db/migrations/023-engine-state.js +1 -1
- package/engine/db/migrations/025-malformed-work-item-phantoms.js +1 -1
- package/engine/db/migrations/027-review-learning-lifecycle.js +1 -1
- package/engine/db/migrations/029-repair-reused-versions.js +20 -0
- package/engine/db/migrations/031-pr-author-identity.js +137 -0
- package/engine/{consolidation.js → memory/consolidation.js} +6 -6
- package/engine/{kb-sweep-runner.js → memory/kb-sweep-runner.js} +2 -2
- package/engine/{kb-sweep.js → memory/kb-sweep.js} +9 -7
- package/engine/{memory-retrieval.js → memory/memory-retrieval.js} +46 -4
- package/engine/{memory-store.js → memory/memory-store.js} +3 -3
- package/engine/{promotion.js → memory/promotion.js} +3 -3
- package/engine/{review-learning-backfill.js → memory/review-learning-backfill.js} +6 -6
- package/engine/{review-learning.js → memory/review-learning.js} +10 -5
- package/engine/{diagnostics-memory.js → observability/diagnostics-memory.js} +1 -1
- package/engine/{logs-store.js → observability/logs-store.js} +5 -5
- package/engine/{metrics-store.js → observability/metrics-store.js} +4 -4
- package/engine/{check-status.js → operations/check-status.js} +3 -3
- package/engine/{cli.js → operations/cli.js} +271 -113
- package/engine/{distribution.js → operations/distribution.js} +5 -6
- package/engine/{cleanup.js → orchestration/cleanup.js} +72 -45
- package/engine/{cooldown.js → orchestration/cooldown.js} +5 -5
- package/engine/{dispatch-events.js → orchestration/dispatch-events.js} +2 -2
- package/engine/{dispatch.js → orchestration/dispatch.js} +129 -36
- package/engine/orchestration/failed-scheduled-cleanup.js +274 -0
- package/engine/{lifecycle.js → orchestration/lifecycle.js} +198 -90
- package/engine/{meeting.js → orchestration/meeting.js} +6 -16
- package/engine/{pipeline.js → orchestration/pipeline.js} +12 -12
- package/engine/{pre-dispatch-eval.js → orchestration/pre-dispatch-eval.js} +10 -9
- package/engine/{routing.js → orchestration/routing.js} +3 -3
- package/engine/{schedule-bootstrap.js → orchestration/schedule-bootstrap.js} +4 -4
- package/engine/{scheduler.js → orchestration/scheduler.js} +38 -8
- package/engine/{timeout.js → orchestration/timeout.js} +158 -109
- package/engine/{db-events.js → persistence/db-events.js} +2 -2
- package/engine/{dispatch-store.js → persistence/dispatch-store.js} +7 -7
- package/engine/{inbox-store.js → persistence/inbox-store.js} +2 -2
- package/engine/{note-link-backfill.js → persistence/note-link-backfill.js} +4 -4
- package/engine/{pr-fix-target-store.js → persistence/pr-fix-target-store.js} +8 -8
- package/engine/{pull-requests-store.js → persistence/pull-requests-store.js} +21 -7
- package/engine/{small-state-store.js → persistence/small-state-store.js} +31 -31
- package/engine/persistence/state-operations.js +350 -0
- package/engine/{steering-store.js → persistence/steering-store.js} +6 -6
- package/engine/{issues.js → planning/issues.js} +2 -2
- package/engine/{plan-prd-validation.js → planning/plan-prd-validation.js} +8 -2
- package/engine/planning/prd-result-sidecar.js +190 -0
- package/engine/{prd-store.js → planning/prd-store.js} +17 -17
- package/engine/{project-discovery.js → planning/project-discovery.js} +5 -5
- package/engine/{projects.js → planning/projects.js} +10 -10
- package/engine/{resolve-area.js → planning/resolve-area.js} +1 -1
- package/engine/{work-item-validation.js → planning/work-item-validation.js} +39 -3
- package/engine/{work-items-store.js → planning/work-items-store.js} +29 -21
- package/engine/{keep-process-sweep.js → processes/keep-process-sweep.js} +57 -17
- package/engine/{managed-spawn-launcher.js → processes/managed-spawn-launcher.js} +3 -3
- package/engine/{managed-spawn.js → processes/managed-spawn.js} +97 -46
- package/engine/{process-utils.js → processes/process-utils.js} +599 -55
- package/engine/{abandoned-pr-reconciliation.js → providers/abandoned-pr-reconciliation.js} +17 -7
- package/engine/{comment-classifier.js → providers/comment-classifier.js} +85 -17
- package/engine/{comment-format.js → providers/comment-format.js} +5 -5
- package/engine/{gh-comment.js → providers/gh-comment.js} +15 -15
- package/engine/{gh-token.js → providers/gh-token.js} +4 -4
- package/engine/{github.js → providers/github.js} +131 -54
- package/engine/{pr-action.js → providers/pr-action.js} +13 -12
- package/engine/{pr-clone-keep.js → providers/pr-clone-keep.js} +7 -7
- package/engine/{pr-devbox.js → providers/pr-devbox.js} +6 -6
- package/engine/{pr-fix-target.js → providers/pr-fix-target.js} +13 -13
- package/engine/{pr-remote-patch.js → providers/pr-remote-patch.js} +4 -4
- package/engine/{pr-resolve.js → providers/pr-resolve.js} +7 -7
- package/engine/{pr-temp-clone.js → providers/pr-temp-clone.js} +5 -5
- package/engine/{pr-track.js → providers/pr-track.js} +11 -13
- package/engine/{shared-branch-pr-reconcile.js → providers/shared-branch-pr-reconcile.js} +4 -4
- package/engine/qa/auto-prd-qa.js +313 -0
- package/engine/{qa-from-prd.js → qa/from-prd.js} +42 -12
- package/engine/qa/prd-session.js +240 -0
- package/engine/{qa-process-validation.js → qa/process-validation.js} +14 -9
- package/engine/{qa-runbooks.js → qa/runbooks.js} +1 -1
- package/engine/{qa-runs.js → qa/runs.js} +286 -15
- package/engine/{qa-sessions.js → qa/sessions.js} +595 -49
- package/engine/qa/visual-journey.js +654 -0
- package/engine/{qa-runners.js → qa-runners/index.js} +7 -7
- package/engine/qa-runners/maestro.js +3 -3
- package/engine/qa-runners/playwright.js +2 -2
- package/engine/{restart-health.js → recovery/restart-health.js} +48 -4
- package/engine/recovery/stop-stack.js +607 -0
- package/engine/{supervisor.js → recovery/supervisor.js} +105 -175
- package/engine/{watchdog.js → recovery/watchdog.js} +136 -13
- package/engine/runtimes/claude.js +14 -12
- package/engine/runtimes/codex.js +8 -6
- package/engine/runtimes/copilot.js +17 -16
- package/engine/{watch-actions.js → watches/actions.js} +13 -13
- package/engine/{watches.js → watches/index.js} +43 -32
- package/engine/{watches-store.js → watches/store.js} +4 -4
- package/engine/{create-pr-worktree.js → worktrees/create-pr.js} +1 -1
- package/engine/{worktree-gc.js → worktrees/gc.js} +70 -22
- package/engine/worktrees/inventory.js +671 -0
- package/engine/{live-checkout.js → worktrees/live-checkout.js} +4 -4
- package/engine/{worktree-pool.js → worktrees/pool.js} +2 -2
- package/engine/{worktree-preflight.js → worktrees/preflight.js} +1 -0
- package/engine/worktrees/quarantine-refs.js +173 -0
- package/engine.js +1137 -208
- package/minions.js +147 -77
- package/package.json +10 -6
- package/playbooks/_pr-description-audit.md +110 -78
- package/playbooks/build-fix-complex.md +2 -0
- package/playbooks/fix.md +16 -12
- package/playbooks/implement-shared.md +2 -0
- package/playbooks/implement.md +19 -20
- package/playbooks/plan-to-prd.md +18 -3
- package/playbooks/qa-session-draft.md +136 -1
- package/playbooks/qa-session-execute.md +80 -2
- package/playbooks/qa-session-setup.md +17 -1
- package/playbooks/qa-validate.md +1 -1
- package/playbooks/setup.md +2 -0
- package/playbooks/shared-rules.md +25 -32
- package/playbooks/templates/followup-dispatch.md +4 -3
- package/playbooks/verify.md +1 -1
- package/prompts/cc-system.md +19 -27
- package/watch-plugins/README.md +92 -0
- package/watch-plugins/ado-author-prs.js +336 -0
- package/watch-plugins/gh-author-prs.js +375 -0
- package/watch-plugins/http.js +474 -0
- package/watch-plugins/teams-channel.js +869 -0
- package/docs/dev-composite-workflow.md +0 -101
- package/docs/pr-screenshots/pr-886/after-single-header.png +0 -0
- package/docs/pr-screenshots/pr-886/before-duplicate-header.png +0 -0
- package/docs/pr-screenshots/pr-895/01-cancellation-reason-detail.png +0 -0
- package/docs/pr-screenshots/pr-899/worker-pool-worktrees-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-899/worker-pool-worktrees-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-901/projects-tab-default.png +0 -0
- package/docs/pr-screenshots/pr-901/projects-tab-fmf-selected.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-AFTER-crop.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-BEFORE-crop.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-916/model-picker-dropdown-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-979/auto-fix-pane-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-979/auto-fix-pane-BEFORE.png +0 -0
- package/docs/pr-screenshots/pr-985/pr-column-em-dash-AFTER.png +0 -0
- package/docs/pr-screenshots/pr-985/pr-column-em-dash-BEFORE.png +0 -0
- package/docs/visual-evidence-ci.md +0 -103
- package/engine/bridge.js +0 -379
- package/engine/quarantine-refs.js +0 -103
- package/engine/state-operations.js +0 -178
- /package/engine/{steering-constraints.js → agents/steering-constraints.js} +0 -0
package/docs/skills.md
CHANGED
|
@@ -4,7 +4,7 @@ Agents emit a fenced `skill` block when they discover a durable, reusable workfl
|
|
|
4
4
|
|
|
5
5
|
The engine extracts valid blocks from agent stdout and from inbox findings (`notes/inbox/*.md`) and writes them into the selected runtime's native personal skills directory (e.g. `~/.claude/skills/<name>/SKILL.md` for Claude, the equivalent personal skills directory for Copilot). Project-scoped skills queue a work item that lands the file by PR in the selected runtime's native project skill root.
|
|
6
6
|
|
|
7
|
-
Packaged `scope: minions` skills are synchronized into every registered runtime's personal skill directory during `minions init` and upgrades. A packaged skill replaces an existing same-name personal copy so contract fixes take effect immediately.
|
|
7
|
+
Packaged `scope: minions` skills are synchronized into every registered runtime's personal skill directory during `minions init` and upgrades (the sync source is the repo-root `skills/` directory, scanned by `shared.syncBundledPersonalSkills`). A packaged skill replaces an existing same-name personal copy so contract fixes take effect immediately. The bundled `scope: minions` skill under that sync source today is `check-self-authored-review-comment`. Separately, `capture-web-evidence` (`.claude/skills/capture-web-evidence/SKILL.md`) — a **project-agnostic** Playwright flow for capturing BEFORE/AFTER screenshots and screen recordings for a web or mobile-webview UI change in ANY project — is the fallback when the target repo has no visual-evidence instructions of its own (harness-first resolution; see `playbooks/_pr-description-audit.md` → "Visual evidence handling"). It lives under `.claude/skills/` (not the `skills/` sync source), so it is not copied into personal skill dirs by the bundled-skill sync; instead it is discovered natively from `.claude/skills/` and its recipe is inlined in the always-injected PR-description-audit playbook.
|
|
8
8
|
|
|
9
9
|
## Block format
|
|
10
10
|
|
|
@@ -44,6 +44,55 @@ Plain Markdown. Include the steps, commands, file paths, and notes another agent
|
|
|
44
44
|
|
|
45
45
|
See [`playbooks/shared-rules.md`](../playbooks/shared-rules.md) for the full threshold. In short: do not emit a skill for one-off bug fixes, isolated command output, obvious repo facts, or anything already covered by existing docs, playbooks, or skills.
|
|
46
46
|
|
|
47
|
+
## Skill discovery (read side)
|
|
48
|
+
|
|
49
|
+
Discovery is how already-on-disk skills are surfaced to the registry so agents
|
|
50
|
+
and Command Center (CC) can resolve a named skill instead of grepping the
|
|
51
|
+
filesystem. It is separate from the write path (the ` ```skill ` block above).
|
|
52
|
+
|
|
53
|
+
- **Inventory** — `engine/core/queries.js#collectSkillFiles` / `getSkills` (consumed by
|
|
54
|
+
`/api/tools` in a child process, and by the CC registry) unions:
|
|
55
|
+
- runtime-native user/plugin roots from each adapter's `getSkillRoots`
|
|
56
|
+
(`~/.copilot/skills`, `~/.claude/skills`, `~/.agents/skills`, installed plugins);
|
|
57
|
+
- project skill roots for every configured project. In addition to the
|
|
58
|
+
repo-root roots the adapters expose (`<repo>/.claude/skills`,
|
|
59
|
+
`<repo>/.github/skills`, `<repo>/.agents/skills`), a **bounded walk** finds
|
|
60
|
+
**project-embedded skills nested anywhere under the checkout** — e.g.
|
|
61
|
+
`loop/app/android/android/.claude/skills/*` in a monorepo. Each discovered
|
|
62
|
+
skill is tagged with its `projectName` and on-disk `dir`.
|
|
63
|
+
- **CC `<available_skills>` registry** — the Command Center system prompt block is
|
|
64
|
+
built by `engine/core/shared.js#buildAvailableSkillsBlock`. It merges the
|
|
65
|
+
user/plugin skills from `listCopilotSkills` with the **project-embedded skills**
|
|
66
|
+
discovered above (passed as `renderCcSystemPrompt({ projectSkills })` from
|
|
67
|
+
`dashboard.js#collectCcProjectSkills`, sourced from the child-process-backed
|
|
68
|
+
`/api/tools` inventory — see "Bounds & safety" below).
|
|
69
|
+
Project skills render a `<path>` element so CC can open the `SKILL.md`
|
|
70
|
+
directly: CC's runtime never registered them, so they are **read**, not
|
|
71
|
+
invoked with the `skill` tool (`prompts/cc-system.md` teaches the split).
|
|
72
|
+
User/plugin skills win a name collision (matches Copilot CLI's
|
|
73
|
+
user-wins precedence). The static/legacy CC prompt keeps user/plugin-only
|
|
74
|
+
discovery so dashboard boot never triggers a cold monorepo walk.
|
|
75
|
+
|
|
76
|
+
**Bounds & safety** — the nested walk is breadth-first (shallowest-first, so the
|
|
77
|
+
budget is spent on the levels most likely to hold repo-root skills) and bounded
|
|
78
|
+
so a massive monorepo can't stall discovery (caps in `engine/core/queries.js`): max
|
|
79
|
+
directory depth (`SKILL_WALK_MAX_DEPTH = 12`), a directory-dirent cap
|
|
80
|
+
(`SKILL_WALK_MAX_ENTRIES = 40000` — only directory entries count; files are free
|
|
81
|
+
and never starve the walk), and a heavy-dir prune set
|
|
82
|
+
(`SKILL_WALK_PRUNE_DIRS`: `.git`, `node_modules`, `bin`, `obj`, `build`, `dist`,
|
|
83
|
+
`out`, `target`, `.gradle`, `vendor`, `DerivedData`, …). Marker dir names
|
|
84
|
+
(`.claude` / `.github` / `.agents`) are derived from the adapter-provided project
|
|
85
|
+
roots — discovery never branches on runtime names. Results are memoized by the
|
|
86
|
+
shared 30s skills cache (`SKILLS_CACHE_TTL`, keyed on home dir + project
|
|
87
|
+
localPaths; flushed by `invalidateSkillsCache`), so the walk runs at most once
|
|
88
|
+
per cache window and stays off the `/api/status` hot path. Crucially the walk
|
|
89
|
+
runs **in the `/api/tools` child process** (`engine/agents/tools-inventory.js`), never in
|
|
90
|
+
the dashboard process: the CC turn path reads that child-backed inventory cache
|
|
91
|
+
only and, on a cold or stale cache, kicks off `_refreshToolsInventory()` and
|
|
92
|
+
degrades the turn to user/plugin skills. Deferring an in-process walk with
|
|
93
|
+
`setImmediate` would not be enough — it runs in the check phase of the *same*
|
|
94
|
+
event loop and would still stall `/api/status` polling and every open SSE stream.
|
|
95
|
+
|
|
47
96
|
## Human-approved promotion of review lessons (P-192d3660)
|
|
48
97
|
|
|
49
98
|
Verified **review lessons** captured in structured memory (`sourceType: review-learning`,
|
|
@@ -53,7 +102,7 @@ Copilot/Claude pick them up through native instruction/skill discovery. Promotio
|
|
|
53
102
|
checkout. It queues a normal project-bound work item that follows the usual branch → PR →
|
|
54
103
|
review → merge lifecycle.
|
|
55
104
|
|
|
56
|
-
- **Eligibility** (`engine/promotion.js#evaluateLessonPromotionEligibility`): the lesson must be
|
|
105
|
+
- **Eligibility** (`engine/memory/promotion.js#evaluateLessonPromotionEligibility`): the lesson must be
|
|
57
106
|
`active`, high-confidence (`confidence >= 0.8`), and backed by **at least two distinct valid
|
|
58
107
|
findings** (its own finding plus repeated-finding recurrences, counted by
|
|
59
108
|
`memory-store.js#getReviewLearningFindingSupport`). The search API annotates eligible lessons
|
|
@@ -63,7 +112,7 @@ review → merge lifecycle.
|
|
|
63
112
|
`<slug>/SKILL.md` (the runtime's native skill root); or
|
|
64
113
|
- `repository-instruction` — an allowlisted file (`CLAUDE.md`, `AGENTS.md` at any depth, or
|
|
65
114
|
`.github/copilot-instructions.md`) queued as a `docs` work item.
|
|
66
|
-
- **Queueing** goes through `engine/promotion.js#queuePromotion`, which reuses the same
|
|
115
|
+
- **Queueing** goes through `engine/memory/promotion.js#queuePromotion`, which reuses the same
|
|
67
116
|
project-bound work-item queueing extracted from `lifecycle.js#extractSkillsFromOutput`
|
|
68
117
|
(`queueProjectSkillWorkItem`). The queued work item cites the stable originating memory IDs, the
|
|
69
118
|
bounded proposed rule(s), and the target project/path in `meta.promotion`.
|
package/docs/slim-ux/concepts.md
CHANGED
|
@@ -36,8 +36,8 @@ dashboard then builds synthetic action results for the UI.
|
|
|
36
36
|
|
|
37
37
|
- System prompt: `prompts/cc-system.md`
|
|
38
38
|
- Session records: `engine/state.db` table `cc_sessions`
|
|
39
|
-
- Shared invocation path: `dashboard.js#ccCall` and `engine/llm.js#callLLM`
|
|
40
|
-
- Runtime selection: `engine/shared.js#resolveCcCli` and `engine/runtimes/index.js#resolveRuntime`
|
|
39
|
+
- Shared invocation path: `dashboard.js#ccCall` and `engine/agents/llm.js#callLLM`
|
|
40
|
+
- Runtime selection: `engine/core/shared.js#resolveCcCli` and `engine/runtimes/index.js#resolveRuntime`
|
|
41
41
|
|
|
42
42
|
**Backing symbols.**
|
|
43
43
|
|
|
@@ -45,8 +45,8 @@ dashboard then builds synthetic action results for the UI.
|
|
|
45
45
|
`dashboard.js#handleCommandCenterStream`
|
|
46
46
|
- Turn/action correlation: `dashboard.js#_ccTurnCreations` and
|
|
47
47
|
`dashboard.js#_buildSyntheticActionResultsForTurn`
|
|
48
|
-
- Session persistence: `engine/small-state-store.js` CC-session helpers
|
|
49
|
-
- Per-response tool-turn cap: `engine/shared.js#ENGINE_DEFAULTS.ccMaxTurns` (default 50)
|
|
48
|
+
- Session persistence: `engine/persistence/small-state-store.js` CC-session helpers
|
|
49
|
+
- Per-response tool-turn cap: `engine/core/shared.js#ENGINE_DEFAULTS.ccMaxTurns` (default 50)
|
|
50
50
|
|
|
51
51
|
**Existing dashboard.** `dashboard/pages/home.html` contains the classic CC surface; the Slim home
|
|
52
52
|
surface uses the same server handlers and sessions.
|
|
@@ -80,15 +80,15 @@ dependencies, and lifecycle state.
|
|
|
80
80
|
|
|
81
81
|
- Durable records: `engine/state.db` table `work_items`
|
|
82
82
|
- In-flight execution records: `engine/state.db` table `dispatches`
|
|
83
|
-
- Read/write facade: `engine/work-items-store.js`
|
|
83
|
+
- Read/write facade: `engine/planning/work-items-store.js`
|
|
84
84
|
|
|
85
85
|
**Backing symbols.**
|
|
86
86
|
|
|
87
|
-
- Statuses: `engine/shared.js#WI_STATUS`
|
|
88
|
-
- Work types: `engine/shared.js#WORK_TYPE`
|
|
89
|
-
- Queue admission: `engine/dispatch.js#addToDispatch`
|
|
90
|
-
- Lifecycle updates: `engine/lifecycle.js#updateWorkItemStatus`
|
|
91
|
-
- Completion predicate: `engine/lifecycle.js#isItemCompleted`
|
|
87
|
+
- Statuses: `engine/core/shared.js#WI_STATUS`
|
|
88
|
+
- Work types: `engine/core/shared.js#WORK_TYPE`
|
|
89
|
+
- Queue admission: `engine/orchestration/dispatch.js#addToDispatch`
|
|
90
|
+
- Lifecycle updates: `engine/orchestration/lifecycle.js#updateWorkItemStatus`
|
|
91
|
+
- Completion predicate: `engine/orchestration/lifecycle.js#isItemCompleted`
|
|
92
92
|
|
|
93
93
|
The common path is `pending` (or `queued`) -> `dispatched` -> `done` or `failed`. `paused`,
|
|
94
94
|
`decomposed`, and `cancelled` are also canonical states. Failures can retry up to
|
|
@@ -125,8 +125,13 @@ Plan Markdown -> plan-to-prd Work Item -> PRD rows -> Work Items -> verify Work
|
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
The `plan-to-prd` agent writes `agents/<id>/prd-result.json`. On successful completion,
|
|
128
|
-
`engine/lifecycle.js` validates that sidecar against the expected plan and imports it into the SQL
|
|
129
|
-
PRD store before the plan-to-PRD Work Item can finish.
|
|
128
|
+
`engine/orchestration/lifecycle.js` validates that sidecar against the expected plan and imports it into the SQL
|
|
129
|
+
PRD store before the plan-to-PRD Work Item can finish. The expected result identity
|
|
130
|
+
(`_prdFilename`) is pinned on the Work Item and is **retry-stable**, so a valid sidecar left
|
|
131
|
+
behind by an interrupted attempt is recoverable: the next tick imports it (pre-spawn, in
|
|
132
|
+
`engine.js#discoverCentralWorkItems`) instead of dispatching a second conversion. Validation
|
|
133
|
+
and the atomic one-shot consume live in `engine/planning/prd-result-sidecar.js` — both import
|
|
134
|
+
sites share it. See [plan-lifecycle.md](../plan-lifecycle.md#plan-to-prd-result-sidecar).
|
|
130
135
|
|
|
131
136
|
**Where it lives.**
|
|
132
137
|
|
|
@@ -139,12 +144,12 @@ Executable lifecycle state is SQL-backed. Manual archive moves the Markdown sour
|
|
|
139
144
|
|
|
140
145
|
**Backing symbols.**
|
|
141
146
|
|
|
142
|
-
- Plan statuses: `engine/shared.js#PLAN_STATUS`
|
|
143
|
-
- Atomic conversion enqueue: `engine/shared.js#queuePlanToPrd`
|
|
144
|
-
- Completion gate: `engine/lifecycle.js#checkPlanCompletion`
|
|
145
|
-
- Manual archive: `engine/lifecycle.js#archivePlan`
|
|
146
|
-
- Plan worktree cleanup: `engine/lifecycle.js#cleanupPlanWorktrees`
|
|
147
|
-
- PRD sidecar import: `engine/lifecycle.js#runPostCompletionHooks`
|
|
147
|
+
- Plan statuses: `engine/core/shared.js#PLAN_STATUS`
|
|
148
|
+
- Atomic conversion enqueue: `engine/core/shared.js#queuePlanToPrd`
|
|
149
|
+
- Completion gate: `engine/orchestration/lifecycle.js#checkPlanCompletion`
|
|
150
|
+
- Manual archive: `engine/orchestration/lifecycle.js#archivePlan`
|
|
151
|
+
- Plan worktree cleanup: `engine/orchestration/lifecycle.js#cleanupPlanWorktrees`
|
|
152
|
+
- PRD sidecar import: `engine/orchestration/lifecycle.js#runPostCompletionHooks`
|
|
148
153
|
|
|
149
154
|
**Existing dashboard.** `dashboard/pages/plans.html` owns the classic Plans and PRD tabs and all
|
|
150
155
|
lifecycle actions.
|
|
@@ -185,18 +190,18 @@ complexity, dependencies, project, type, and a status of `missing`, `updated`, o
|
|
|
185
190
|
- Parent records: `engine/state.db` table `prds`
|
|
186
191
|
- Item records: `engine/state.db` table `prd_items`
|
|
187
192
|
- Verify-PR links: `engine/state.db` table `prd_verify_prs`
|
|
188
|
-
- Read/write facade: `engine/prd-store.js`
|
|
193
|
+
- Read/write facade: `engine/planning/prd-store.js`
|
|
189
194
|
|
|
190
195
|
Archived PRDs remain in SQL. Current manual archive sets the PRD's archive metadata in place.
|
|
191
196
|
|
|
192
197
|
**Backing symbols.**
|
|
193
198
|
|
|
194
|
-
- Item statuses: `engine/shared.js#PRD_ITEM_STATUS`
|
|
195
|
-
- Materializable statuses: `engine/shared.js#PRD_MATERIALIZABLE`
|
|
196
|
-
- SQL writes and item upserts: `engine/prd-store.js#writePrd` and `#_upsertPrd`
|
|
197
|
-
- Reads: `engine/prd-store.js#readPrd` and `#listPrdRows`
|
|
198
|
-
- Work Item -> PRD status sync: `engine/lifecycle.js#syncPrdItemStatus`
|
|
199
|
-
- Reconciliation sweep: `engine/lifecycle.js#reconcilePrdStatuses`
|
|
199
|
+
- Item statuses: `engine/core/shared.js#PRD_ITEM_STATUS`
|
|
200
|
+
- Materializable statuses: `engine/core/shared.js#PRD_MATERIALIZABLE`
|
|
201
|
+
- SQL writes and item upserts: `engine/planning/prd-store.js#writePrd` and `#_upsertPrd`
|
|
202
|
+
- Reads: `engine/planning/prd-store.js#readPrd` and `#listPrdRows`
|
|
203
|
+
- Work Item -> PRD status sync: `engine/orchestration/lifecycle.js#syncPrdItemStatus`
|
|
204
|
+
- Reconciliation sweep: `engine/orchestration/lifecycle.js#reconcilePrdStatuses`
|
|
200
205
|
- Stable Work Item join: `work_items.prd_item_id -> prd_items.id`
|
|
201
206
|
|
|
202
207
|
**Existing dashboard.** `dashboard/pages/plans.html` renders the PRD graph/list. The Slim Plans tile
|
|
@@ -229,11 +234,11 @@ information belongs in team `notes.md`, the Knowledge Base, or both.
|
|
|
229
234
|
|
|
230
235
|
**Backing symbols.**
|
|
231
236
|
|
|
232
|
-
- Writer and ID parser: `engine/shared.js#writeToInbox` and `#parseNoteId`
|
|
233
|
-
- Consolidation entry point: `engine/consolidation.js#consolidateInbox`
|
|
234
|
-
- LLM merge: `engine/consolidation.js#consolidateWithLLM`
|
|
235
|
-
- Classification: `engine/consolidation.js#classifyToKnowledgeBase`
|
|
236
|
-
- Source archival: `engine/consolidation.js#archiveInboxFiles`
|
|
237
|
+
- Writer and ID parser: `engine/core/shared.js#writeToInbox` and `#parseNoteId`
|
|
238
|
+
- Consolidation entry point: `engine/memory/consolidation.js#consolidateInbox`
|
|
239
|
+
- LLM merge: `engine/memory/consolidation.js#consolidateWithLLM`
|
|
240
|
+
- Classification: `engine/memory/consolidation.js#classifyToKnowledgeBase`
|
|
241
|
+
- Source archival: `engine/memory/consolidation.js#archiveInboxFiles`
|
|
237
242
|
|
|
238
243
|
**Existing dashboard.** `dashboard/pages/inbox.html` surfaces Notes, the inbox, and KB controls.
|
|
239
244
|
|
|
@@ -264,10 +269,10 @@ agent memory is kept separately under `knowledge/agents/`.
|
|
|
264
269
|
|
|
265
270
|
**Backing symbols.**
|
|
266
271
|
|
|
267
|
-
- Canonical categories: `engine/shared.js#KB_CATEGORIES`
|
|
268
|
-
- Query/read layer: `engine/queries.js#KNOWLEDGE_DIR` and KB readers
|
|
269
|
-
- Classification: `engine/consolidation.js#classifyToKnowledgeBase`
|
|
270
|
-
- Compaction and TTL sweep: `engine/kb-sweep.js`
|
|
272
|
+
- Canonical categories: `engine/core/shared.js#KB_CATEGORIES`
|
|
273
|
+
- Query/read layer: `engine/core/queries.js#KNOWLEDGE_DIR` and KB readers
|
|
274
|
+
- Classification: `engine/memory/consolidation.js#classifyToKnowledgeBase`
|
|
275
|
+
- Compaction and TTL sweep: `engine/memory/kb-sweep.js`
|
|
271
276
|
|
|
272
277
|
**Existing dashboard.** `dashboard/pages/inbox.html` contains the KB browser and sweep controls.
|
|
273
278
|
|
|
@@ -299,10 +304,10 @@ layer, while `kb-pins.json` protects selected KB entries from sweep removal.
|
|
|
299
304
|
|
|
300
305
|
**Backing symbols.**
|
|
301
306
|
|
|
302
|
-
- Pin-index path: `engine/shared.js#PINNED_ITEMS_PATH`
|
|
303
|
-
- Pin-index reader: `engine/shared.js#getPinnedItems`
|
|
307
|
+
- Pin-index path: `engine/core/shared.js#PINNED_ITEMS_PATH`
|
|
308
|
+
- Pin-index reader: `engine/core/shared.js#getPinnedItems`
|
|
304
309
|
- Markdown parser: `dashboard.js#parsePinnedEntries`
|
|
305
|
-
- Prompt injection and untrusted-input fencing: `engine/playbook.js`
|
|
310
|
+
- Prompt injection and untrusted-input fencing: `engine/agents/playbook.js`
|
|
306
311
|
|
|
307
312
|
**Existing dashboard.** The home and Knowledge surfaces expose pinned context and pin/unpin
|
|
308
313
|
controls.
|
|
@@ -331,9 +336,9 @@ agents, and engine alerts.
|
|
|
331
336
|
|
|
332
337
|
**Backing symbols.**
|
|
333
338
|
|
|
334
|
-
- Directory: `engine/queries.js#INBOX_DIR`
|
|
335
|
-
- Writer: `engine/shared.js#writeToInbox`
|
|
336
|
-
- Consolidation: `engine/consolidation.js#consolidateInbox`
|
|
339
|
+
- Directory: `engine/core/queries.js#INBOX_DIR`
|
|
340
|
+
- Writer: `engine/core/shared.js#writeToInbox`
|
|
341
|
+
- Consolidation: `engine/memory/consolidation.js#consolidateInbox`
|
|
337
342
|
- Manual handlers: `dashboard.js#handleInboxPersist`, `#handleInboxPromoteKb`,
|
|
338
343
|
`#handleInboxOpen`, and `#handleInboxDelete`
|
|
339
344
|
|
|
@@ -366,12 +371,12 @@ Item enters the queue, including nested string fields.
|
|
|
366
371
|
|
|
367
372
|
**Backing symbols.**
|
|
368
373
|
|
|
369
|
-
- Cron parsing: `engine/scheduler.js#parseCronField` and `#parseCronExpr`
|
|
370
|
-
- Match decision: `engine/scheduler.js#shouldRunNow`
|
|
371
|
-
- Variable map: `engine/scheduler.js#buildScheduleTemplateVars`
|
|
372
|
-
- Recursive substitution: `engine/scheduler.js#applyScheduleTemplateVarsRecursive`
|
|
373
|
-
- Work Item factory: `engine/scheduler.js#createScheduledWorkItem`
|
|
374
|
-
- Discovery: `engine/scheduler.js#discoverScheduledWork`
|
|
374
|
+
- Cron parsing: `engine/orchestration/scheduler.js#parseCronField` and `#parseCronExpr`
|
|
375
|
+
- Match decision: `engine/orchestration/scheduler.js#shouldRunNow`
|
|
376
|
+
- Variable map: `engine/orchestration/scheduler.js#buildScheduleTemplateVars`
|
|
377
|
+
- Recursive substitution: `engine/orchestration/scheduler.js#applyScheduleTemplateVarsRecursive`
|
|
378
|
+
- Work Item factory: `engine/orchestration/scheduler.js#createScheduledWorkItem`
|
|
379
|
+
- Discovery: `engine/orchestration/scheduler.js#discoverScheduledWork`
|
|
375
380
|
|
|
376
381
|
**Existing dashboard.** `dashboard/pages/schedule.html` provides definition CRUD, run-now, and
|
|
377
382
|
natural-language-to-cron assistance.
|
|
@@ -397,21 +402,21 @@ notifies or runs a configured follow-up action. The eight built-in target types
|
|
|
397
402
|
|
|
398
403
|
`pr`, `work-item`, `meeting`, `plan`, `schedule`, `pipeline`, `dispatch`, and `agent`.
|
|
399
404
|
|
|
400
|
-
Additional target types can be loaded from `<MINIONS_DIR>/
|
|
405
|
+
Additional target types can be loaded from `<MINIONS_DIR>/watch-plugins/*.js`.
|
|
401
406
|
|
|
402
407
|
**Where it lives.** `engine/state.db` table `watches`.
|
|
403
408
|
|
|
404
409
|
**Backing symbols.**
|
|
405
410
|
|
|
406
|
-
- Statuses and built-in target names: `engine/shared.js#WATCH_STATUS` and
|
|
411
|
+
- Statuses and built-in target names: `engine/core/shared.js#WATCH_STATUS` and
|
|
407
412
|
`#WATCH_TARGET_TYPE`
|
|
408
|
-
- Conditions: `engine/shared.js#WATCH_CONDITION`
|
|
409
|
-
- Fire-once fallback set: `engine/shared.js#WATCH_ABSOLUTE_CONDITIONS`
|
|
410
|
-
- Target registry: `engine/watches.js#TARGET_TYPES` and `#registerTargetType`
|
|
411
|
-
- CRUD: `engine/watches.js#createWatch`, `#updateWatch`, and `#deleteWatch`
|
|
412
|
-
- Evaluation: `engine/watches.js#evaluateWatch` and `#checkWatches`
|
|
413
|
-
- Plugin loader: `engine/watches.js#_loadPluginTargetTypes`
|
|
414
|
-
- Follow-up action registry: `engine/
|
|
413
|
+
- Conditions: `engine/core/shared.js#WATCH_CONDITION`
|
|
414
|
+
- Fire-once fallback set: `engine/core/shared.js#WATCH_ABSOLUTE_CONDITIONS`
|
|
415
|
+
- Target registry: `engine/watches/index.js#TARGET_TYPES` and `#registerTargetType`
|
|
416
|
+
- CRUD: `engine/watches/index.js#createWatch`, `#updateWatch`, and `#deleteWatch`
|
|
417
|
+
- Evaluation: `engine/watches/index.js#evaluateWatch` and `#checkWatches`
|
|
418
|
+
- Plugin loader: `engine/watches/index.js#_loadPluginTargetTypes`
|
|
419
|
+
- Follow-up action registry: `engine/watches/actions.js`
|
|
415
420
|
|
|
416
421
|
The engine schedules `checkWatches` every `ENGINE_DEFAULTS.watchPollEvery` ticks. The default is 18
|
|
417
422
|
ticks, approximately three minutes at the default 10-second engine tick. Each watch can impose a
|
|
@@ -450,13 +455,13 @@ Definitions intentionally remain file-backed; run history is SQL-backed.
|
|
|
450
455
|
|
|
451
456
|
**Backing symbols.**
|
|
452
457
|
|
|
453
|
-
- Definition directory and CRUD: `engine/pipeline.js#PIPELINES_DIR`, `#getPipelines`,
|
|
458
|
+
- Definition directory and CRUD: `engine/orchestration/pipeline.js#PIPELINES_DIR`, `#getPipelines`,
|
|
454
459
|
`#getPipeline`, `#savePipeline`, and `#deletePipeline`
|
|
455
|
-
- Stage/status enums: `engine/shared.js#STAGE_TYPE` and `#PIPELINE_STATUS`
|
|
456
|
-
- Run reads: `engine/pipeline.js#getPipelineRuns` ->
|
|
457
|
-
`engine/small-state-store.js#readPipelineRuns`
|
|
458
|
-
- Run mutations: `engine/shared.js#mutatePipelineRuns`
|
|
459
|
-
- Lifecycle: `engine/pipeline.js#startRun`, `#updateRunStage`, `#upsertRunStage`, and
|
|
460
|
+
- Stage/status enums: `engine/core/shared.js#STAGE_TYPE` and `#PIPELINE_STATUS`
|
|
461
|
+
- Run reads: `engine/orchestration/pipeline.js#getPipelineRuns` ->
|
|
462
|
+
`engine/persistence/small-state-store.js#readPipelineRuns`
|
|
463
|
+
- Run mutations: `engine/core/shared.js#mutatePipelineRuns`
|
|
464
|
+
- Lifecycle: `engine/orchestration/pipeline.js#startRun`, `#updateRunStage`, `#upsertRunStage`, and
|
|
460
465
|
`#completeRun`
|
|
461
466
|
|
|
462
467
|
**Existing dashboard.** `dashboard/pages/pipelines.html` provides definition editing, triggering,
|
|
@@ -487,12 +492,12 @@ runtime, prompt sidecar, process/session metadata, worktree, branch/PR locks, an
|
|
|
487
492
|
|
|
488
493
|
**Backing symbols.**
|
|
489
494
|
|
|
490
|
-
- Transactional mutation: `engine/dispatch.js#mutateDispatch`
|
|
491
|
-
- Queue insertion and dedupe: `engine/dispatch.js#addToDispatch`
|
|
492
|
-
- PR/branch lock detection: `engine/dispatch.js#findActivePrOrBranchLock`
|
|
493
|
-
- Completion: `engine/dispatch.js#completeDispatch`
|
|
494
|
-
- Result enum: `engine/shared.js#DISPATCH_RESULT`
|
|
495
|
-
- Store implementation: `engine/dispatch-store.js`
|
|
495
|
+
- Transactional mutation: `engine/orchestration/dispatch.js#mutateDispatch`
|
|
496
|
+
- Queue insertion and dedupe: `engine/orchestration/dispatch.js#addToDispatch`
|
|
497
|
+
- PR/branch lock detection: `engine/orchestration/dispatch.js#findActivePrOrBranchLock`
|
|
498
|
+
- Completion: `engine/orchestration/dispatch.js#completeDispatch`
|
|
499
|
+
- Result enum: `engine/core/shared.js#DISPATCH_RESULT`
|
|
500
|
+
- Store implementation: `engine/persistence/dispatch-store.js`
|
|
496
501
|
|
|
497
502
|
**Existing dashboard.** `dashboard/pages/engine.html` shows dispatch history and logs; home/work
|
|
498
503
|
surfaces show active execution context.
|
|
@@ -515,14 +520,14 @@ execution workspace. A **Completion** report is its trusted exit contract.
|
|
|
515
520
|
- `review[]` -- candidates rejected by the optional pre-dispatch acceptance gate
|
|
516
521
|
|
|
517
522
|
**Where it lives.** `engine/state.db` table `dispatches`, reconstructed by
|
|
518
|
-
`engine/dispatch-store.js#readDispatchSectioned`.
|
|
523
|
+
`engine/persistence/dispatch-store.js#readDispatchSectioned`.
|
|
519
524
|
|
|
520
525
|
**Backing symbols.**
|
|
521
526
|
|
|
522
|
-
- Dashboard/query view: `engine/queries.js#getDispatchQueue`
|
|
523
|
-
- Queue mutation: `engine/dispatch.js#mutateDispatch`
|
|
524
|
-
- Acceptance-review routing: `engine/dispatch.js#_routeToReviewQueue`
|
|
525
|
-
- Concurrency default: `engine/shared.js#ENGINE_DEFAULTS.maxConcurrent` (default 5)
|
|
527
|
+
- Dashboard/query view: `engine/core/queries.js#getDispatchQueue`
|
|
528
|
+
- Queue mutation: `engine/orchestration/dispatch.js#mutateDispatch`
|
|
529
|
+
- Acceptance-review routing: `engine/orchestration/dispatch.js#_routeToReviewQueue`
|
|
530
|
+
- Concurrency default: `engine/core/shared.js#ENGINE_DEFAULTS.maxConcurrent` (default 5)
|
|
526
531
|
|
|
527
532
|
The queue enforces Work Item and dispatch-key dedupe, fix-target and branch locks, dependency
|
|
528
533
|
readiness, concurrency, retry policy, and budget/cooldown gates.
|
|
@@ -553,11 +558,11 @@ a mismatch invalidates every reported signal and fails the dispatch as
|
|
|
553
558
|
|
|
554
559
|
**Backing symbols.**
|
|
555
560
|
|
|
556
|
-
- Path builder: `engine/shared.js#dispatchCompletionReportPath`
|
|
557
|
-
- Recognized core fields: `engine/shared.js#COMPLETION_FIELDS`
|
|
558
|
-
- File parsing: `engine/lifecycle.js#parseCompletionReportFile`
|
|
559
|
-
- Required-report gate: `engine/lifecycle.js#requiredCompletionReportFailure`
|
|
560
|
-
- Dispatch terminalization: `engine/dispatch.js#completeDispatch`
|
|
561
|
+
- Path builder: `engine/core/shared.js#dispatchCompletionReportPath`
|
|
562
|
+
- Recognized core fields: `engine/core/shared.js#COMPLETION_FIELDS`
|
|
563
|
+
- File parsing: `engine/orchestration/lifecycle.js#parseCompletionReportFile`
|
|
564
|
+
- Required-report gate: `engine/orchestration/lifecycle.js#requiredCompletionReportFailure`
|
|
565
|
+
- Dispatch terminalization: `engine/orchestration/dispatch.js#completeDispatch`
|
|
561
566
|
|
|
562
567
|
Core fields include `status`, `summary`, `files_changed`, `tests`, `pr`, `not_changed`,
|
|
563
568
|
`failure_class`, `retryable`, `needs_rerun`, `verdict`, `artifacts`, `nonce`, and
|
|
@@ -582,16 +587,16 @@ review verdict, and Minions linkage. It is not the host PR itself.
|
|
|
582
587
|
|
|
583
588
|
- PR records: `engine/state.db` table `pull_requests`
|
|
584
589
|
- Cross-record links: `engine/state.db` table `pr_links`
|
|
585
|
-
- Store facade: `engine/pull-requests-store.js`
|
|
590
|
+
- Store facade: `engine/persistence/pull-requests-store.js`
|
|
586
591
|
|
|
587
592
|
**Backing symbols.**
|
|
588
593
|
|
|
589
|
-
- Statuses and polling eligibility: `engine/shared.js#PR_STATUS` and
|
|
594
|
+
- Statuses and polling eligibility: `engine/core/shared.js#PR_STATUS` and
|
|
590
595
|
`#PR_POLLABLE_STATUSES`
|
|
591
|
-
- GitHub integration: `engine/github.js`
|
|
592
|
-
- Azure DevOps integration: `engine/ado.js`
|
|
593
|
-
- Agent-output/report sync: `engine/lifecycle.js#syncPrsFromOutput`
|
|
594
|
-
- Required-attachment gate: `engine/lifecycle.js#isPrAttachmentRequired`
|
|
596
|
+
- GitHub integration: `engine/providers/github.js`
|
|
597
|
+
- Azure DevOps integration: `engine/ado/index.js`
|
|
598
|
+
- Agent-output/report sync: `engine/orchestration/lifecycle.js#syncPrsFromOutput`
|
|
599
|
+
- Required-attachment gate: `engine/orchestration/lifecycle.js#isPrAttachmentRequired`
|
|
595
600
|
|
|
596
601
|
**Existing dashboard.** `dashboard/pages/prs.html` is the classic PR screen; Slim embeds that same
|
|
597
602
|
screen for PR details.
|
|
@@ -622,18 +627,18 @@ constraint. The legacy config key `skills` is accepted only as a compatibility f
|
|
|
622
627
|
|
|
623
628
|
**Where it lives.**
|
|
624
629
|
|
|
625
|
-
- Default roster: `engine/shared.js#DEFAULT_AGENTS`
|
|
630
|
+
- Default roster: `engine/core/shared.js#DEFAULT_AGENTS`
|
|
626
631
|
- Per-agent config: `config.json` under `agents.<id>`
|
|
627
632
|
- Charter: `agents/<id>/charter.md`
|
|
628
633
|
- Metrics and dispatch history: SQL-backed runtime state
|
|
629
634
|
|
|
630
635
|
**Backing symbols.**
|
|
631
636
|
|
|
632
|
-
- Roster/status projection: `engine/queries.js#getAgents`
|
|
633
|
-
- Detail projection: `engine/queries.js#getAgentDetail`
|
|
634
|
-
- Identity/charter prompt: `engine/playbook.js#buildSystemPrompt`
|
|
635
|
-
- Soft re-review preference: `engine/lifecycle.js#pickReReviewAgentHints`
|
|
636
|
-
- Runtime selection: `engine/shared.js#resolveAgentCli`
|
|
637
|
+
- Roster/status projection: `engine/core/queries.js#getAgents`
|
|
638
|
+
- Detail projection: `engine/core/queries.js#getAgentDetail`
|
|
639
|
+
- Identity/charter prompt: `engine/agents/playbook.js#buildSystemPrompt`
|
|
640
|
+
- Soft re-review preference: `engine/orchestration/lifecycle.js#pickReReviewAgentHints`
|
|
641
|
+
- Runtime selection: `engine/core/shared.js#resolveAgentCli`
|
|
637
642
|
- Bundled adapters: `engine/runtimes/index.js` (`claude`, `copilot`, `codex`)
|
|
638
643
|
|
|
639
644
|
**Existing dashboard.** Agent cards and detail views show status, runtime/model, charter, output,
|
|
@@ -672,11 +677,11 @@ work sources.
|
|
|
672
677
|
|
|
673
678
|
**Backing symbols.**
|
|
674
679
|
|
|
675
|
-
- Config projection: `engine/shared.js#getProjects`
|
|
676
|
-
- Scope helpers: `engine/shared.js#stateScope`, `#readWorkItems`, and
|
|
680
|
+
- Config projection: `engine/core/shared.js#getProjects`
|
|
681
|
+
- Scope helpers: `engine/core/shared.js#stateScope`, `#readWorkItems`, and
|
|
677
682
|
`#readPullRequests`
|
|
678
|
-
- Checkout mode: `engine/shared.js#resolveCheckoutMode`
|
|
679
|
-
- Canonical removal: `engine/projects.js#removeProject`
|
|
683
|
+
- Checkout mode: `engine/core/shared.js#resolveCheckoutMode`
|
|
684
|
+
- Canonical removal: `engine/planning/projects.js#removeProject`
|
|
680
685
|
|
|
681
686
|
`checkoutMode: "worktree"` is the default isolated execution model.
|
|
682
687
|
`checkoutMode: "live"` opts a project into guarded in-place execution.
|
|
@@ -715,10 +720,10 @@ Adapters may discover additional compatible roots without changing orchestration
|
|
|
715
720
|
|
|
716
721
|
**Backing symbols.**
|
|
717
722
|
|
|
718
|
-
- Frontmatter parser: `engine/shared.js#parseSkillFrontmatter`
|
|
719
|
-
- Discovery: `engine/queries.js#collectSkillFiles`
|
|
720
|
-
- Dashboard projections: `engine/queries.js#getSkills` and `#getSkillIndex`
|
|
721
|
-
- Extraction: `engine/lifecycle.js#extractSkillsFromOutput`
|
|
723
|
+
- Frontmatter parser: `engine/core/shared.js#parseSkillFrontmatter`
|
|
724
|
+
- Discovery: `engine/core/queries.js#collectSkillFiles`
|
|
725
|
+
- Dashboard projections: `engine/core/queries.js#getSkills` and `#getSkillIndex`
|
|
726
|
+
- Extraction: `engine/orchestration/lifecycle.js#extractSkillsFromOutput`
|
|
722
727
|
- Adapter contract: `getSkillRoots()` and `getSkillWriteTargets()` in
|
|
723
728
|
`engine/runtimes/{claude,copilot,codex}.js`
|
|
724
729
|
|
|
@@ -748,7 +753,7 @@ configuration is runtime-native; repository/user harness files are not merged in
|
|
|
748
753
|
**Backing symbols.**
|
|
749
754
|
|
|
750
755
|
- Dashboard inventory: `dashboard.js#getMcpServers`
|
|
751
|
-
- Watched config paths: `engine/queries.js` slow-state dependency collector
|
|
756
|
+
- Watched config paths: `engine/core/queries.js` slow-state dependency collector
|
|
752
757
|
- Runtime preparation/discovery: `engine/runtimes/*`
|
|
753
758
|
- Copilot built-in suppression: `engine.copilotDisableBuiltinMcps`
|
|
754
759
|
|
|
@@ -780,10 +785,10 @@ dispatch, work discovery, snapshots, and diagnostics.
|
|
|
780
785
|
**Backing symbols.**
|
|
781
786
|
|
|
782
787
|
- Tick: `engine.js#tick` / `#tickInner`
|
|
783
|
-
- Defaults: `engine/shared.js#ENGINE_DEFAULTS`
|
|
788
|
+
- Defaults: `engine/core/shared.js#ENGINE_DEFAULTS`
|
|
784
789
|
- Watch cadence: `ENGINE_DEFAULTS.watchPollEvery` (18 ticks by default)
|
|
785
|
-
- Cold-process reattachment: `engine/cli.js` startup reattachment path
|
|
786
|
-
- Stale-orphan grace: `engine/timeout.js` with `ENGINE_DEFAULTS.heartbeatTimeout`
|
|
790
|
+
- Cold-process reattachment: `engine/operations/cli.js` startup reattachment path
|
|
791
|
+
- Stale-orphan grace: `engine/orchestration/timeout.js` with `ENGINE_DEFAULTS.heartbeatTimeout`
|
|
787
792
|
|
|
788
793
|
Tracked live agents are not killed merely for output silence. Cold agents can be reattached after
|
|
789
794
|
an engine restart through persisted PID/session data and `agents/<id>/live-output.log`; pooled ACP
|
|
@@ -823,8 +828,8 @@ MCP/skill configuration remain owned and discovered by the selected CLI.
|
|
|
823
828
|
|
|
824
829
|
**Backing symbols.**
|
|
825
830
|
|
|
826
|
-
- Loader: `engine/queries.js#getConfig`
|
|
827
|
-
- Defaults: `engine/shared.js#ENGINE_DEFAULTS`
|
|
831
|
+
- Loader: `engine/core/queries.js#getConfig`
|
|
832
|
+
- Defaults: `engine/core/shared.js#ENGINE_DEFAULTS`
|
|
828
833
|
- Settings handlers: `dashboard.js#handleSettingsRead`, `#handleSettingsUpdate`,
|
|
829
834
|
`#handleSettingsReset`, and `#handleSettingsRouting`
|
|
830
835
|
|
|
@@ -845,20 +850,20 @@ resolution are intentionally independent.
|
|
|
845
850
|
|
|
846
851
|
## 22. Feature Flag
|
|
847
852
|
|
|
848
|
-
**What it is.** A temporary product/UX gate registered in `engine/features.js`. Resolution order
|
|
853
|
+
**What it is.** A temporary product/UX gate registered in `engine/core/features.js`. Resolution order
|
|
849
854
|
is environment override (`MINIONS_FEATURE_<ID>`) -> `config.features[id]` -> registry default.
|
|
850
855
|
Unknown flag IDs fail loudly.
|
|
851
856
|
|
|
852
857
|
Feature flags are not a substitute for permanent `engine.*` configuration. The `slim-ux` flag gates
|
|
853
858
|
the redesigned dashboard.
|
|
854
859
|
|
|
855
|
-
**Where it lives.** `engine/features.js#FEATURES`.
|
|
860
|
+
**Where it lives.** `engine/core/features.js#FEATURES`.
|
|
856
861
|
|
|
857
862
|
**Backing symbols.**
|
|
858
863
|
|
|
859
|
-
- Resolver: `engine/features.js#isFeatureOn`
|
|
860
|
-
- Listing: `engine/features.js#listFeatures`
|
|
861
|
-
- Registry check: `engine/features.js#hasFeature`
|
|
864
|
+
- Resolver: `engine/core/features.js#isFeatureOn`
|
|
865
|
+
- Listing: `engine/core/features.js#listFeatures`
|
|
866
|
+
- Registry check: `engine/core/features.js#hasFeature`
|
|
862
867
|
|
|
863
868
|
**Existing dashboard.** Settings exposes registered experimental flags and their current values.
|
|
864
869
|
|
|
@@ -884,11 +889,11 @@ uses the single global `ROUTING_PATH`.
|
|
|
884
889
|
|
|
885
890
|
**Backing symbols.**
|
|
886
891
|
|
|
887
|
-
- Path and reader: `engine/routing.js#ROUTING_PATH` and `#getRouting`
|
|
888
|
-
- Parser: `engine/routing.js#parseRoutingTable`
|
|
889
|
-
- Cache: `engine/routing.js#getRoutingTableCached`
|
|
890
|
-
- Work-type lookup: `engine/routing.js#routeForWorkType`
|
|
891
|
-
- Final resolution: `engine/routing.js#resolveAgent`
|
|
892
|
+
- Path and reader: `engine/orchestration/routing.js#ROUTING_PATH` and `#getRouting`
|
|
893
|
+
- Parser: `engine/orchestration/routing.js#parseRoutingTable`
|
|
894
|
+
- Cache: `engine/orchestration/routing.js#getRoutingTableCached`
|
|
895
|
+
- Work-type lookup: `engine/orchestration/routing.js#routeForWorkType`
|
|
896
|
+
- Final resolution: `engine/orchestration/routing.js#resolveAgent`
|
|
892
897
|
|
|
893
898
|
**Existing dashboard.** Settings exposes the routing table editor.
|
|
894
899
|
|
|
@@ -910,8 +915,8 @@ of engagement. It is loaded into that Agent's system prompt for each dispatch.
|
|
|
910
915
|
|
|
911
916
|
**Backing symbols.**
|
|
912
917
|
|
|
913
|
-
- Prompt loading/injection: `engine/playbook.js#buildSystemPrompt`
|
|
914
|
-
- Dashboard detail read: `engine/queries.js#getAgentDetail`
|
|
918
|
+
- Prompt loading/injection: `engine/agents/playbook.js#buildSystemPrompt`
|
|
919
|
+
- Dashboard detail read: `engine/core/queries.js#getAgentDetail`
|
|
915
920
|
- Dashboard write handler: the `/api/agents/charter` route in `dashboard.js`
|
|
916
921
|
|
|
917
922
|
The prompt and detail surfaces each read the charter at their respective system-prompt/detail
|
|
@@ -942,7 +947,7 @@ outcomes or the operator explicitly intervenes.
|
|
|
942
947
|
|
|
943
948
|
**Backing symbols.**
|
|
944
949
|
|
|
945
|
-
- Paths/status maps: `engine/meeting.js#MEETINGS_DIR`,
|
|
950
|
+
- Paths/status maps: `engine/orchestration/meeting.js#MEETINGS_DIR`,
|
|
946
951
|
`#MEETING_NOTE_ARTIFACT_ROOT`, `#ROUND_STATUS_BY_NAME`, and
|
|
947
952
|
`#ROUND_NUMBER_BY_NAME`
|
|
948
953
|
- Round outcome helpers: `#getRoundFailures` and `#allParticipantsFinishedRound`
|