session-orchestrator 3.16.0
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/.claude-plugin/marketplace.json +29 -0
- package/.claude-plugin/plugin.json +18 -0
- package/.codex-plugin/agents/explorer.toml +14 -0
- package/.codex-plugin/agents/session-reviewer.toml +23 -0
- package/.codex-plugin/agents/wave-worker.toml +15 -0
- package/.codex-plugin/config.toml +20 -0
- package/.codex-plugin/plugin.json +37 -0
- package/.cursor/rules/000-session-orchestrator.mdc +73 -0
- package/.cursor/rules/010-session-workflow.mdc +170 -0
- package/.cursor/rules/020-quality-gates.mdc +128 -0
- package/.cursor/rules/030-wave-execution.mdc +216 -0
- package/.cursor/rules/040-discovery.mdc +242 -0
- package/.cursor/rules/050-plan.mdc +235 -0
- package/.cursor/rules/060-evolve.mdc +232 -0
- package/.cursor/rules/070-gitlab-ops.mdc +246 -0
- package/.cursor/rules/080-ecosystem-health.mdc +145 -0
- package/.mcp.json +8 -0
- package/CHANGELOG.md +1544 -0
- package/LICENSE +21 -0
- package/NOTICE +64 -0
- package/README.md +242 -0
- package/SECURITY.md +90 -0
- package/agents/AGENTS.md +136 -0
- package/agents/analyst.md +99 -0
- package/agents/architect-reviewer.md +93 -0
- package/agents/code-implementer.md +106 -0
- package/agents/db-specialist.md +104 -0
- package/agents/dialectic-deriver.md +139 -0
- package/agents/docs-writer.md +113 -0
- package/agents/eval-judge.md +146 -0
- package/agents/memory-proposal-collector.md +297 -0
- package/agents/qa-strategist.md +102 -0
- package/agents/schemas/analyst.schema.json +46 -0
- package/agents/schemas/architect-reviewer.schema.json +50 -0
- package/agents/schemas/code-implementer.schema.json +61 -0
- package/agents/schemas/db-specialist.schema.json +80 -0
- package/agents/schemas/docs-writer.schema.json +56 -0
- package/agents/schemas/persona-panel-sidecar.schema.json +245 -0
- package/agents/schemas/qa-strategist.schema.json +46 -0
- package/agents/schemas/security-reviewer.schema.json +86 -0
- package/agents/schemas/session-reviewer.schema.json +69 -0
- package/agents/schemas/test-writer.schema.json +69 -0
- package/agents/schemas/ui-developer.schema.json +90 -0
- package/agents/schemas/ux-evaluator.schema.json +51 -0
- package/agents/security-reviewer.md +236 -0
- package/agents/session-reviewer.md +201 -0
- package/agents/skill-applied-judge.md +122 -0
- package/agents/test-writer.md +123 -0
- package/agents/ui-developer.md +109 -0
- package/agents/ux-evaluator.md +161 -0
- package/assets/icon.svg +11 -0
- package/assets/og-card.png +0 -0
- package/assets/og-card.svg +47 -0
- package/commands/autopilot-multi.md +74 -0
- package/commands/autopilot.md +80 -0
- package/commands/bootstrap.md +56 -0
- package/commands/brainstorm.md +48 -0
- package/commands/close.md +24 -0
- package/commands/debug.md +36 -0
- package/commands/discovery.md +32 -0
- package/commands/dispatcher.md +59 -0
- package/commands/eval.md +28 -0
- package/commands/evolve.md +10 -0
- package/commands/go.md +41 -0
- package/commands/grill.md +45 -0
- package/commands/harness-audit.md +26 -0
- package/commands/memory-cleanup.md +25 -0
- package/commands/persona-panel.md +121 -0
- package/commands/plan.md +15 -0
- package/commands/portfolio.md +97 -0
- package/commands/reconcile.md +23 -0
- package/commands/repo-audit.md +24 -0
- package/commands/session.md +30 -0
- package/commands/spinout.md +15 -0
- package/commands/sunset-review.md +27 -0
- package/commands/templates-ack.md +96 -0
- package/commands/test.md +97 -0
- package/docs/README.md +105 -0
- package/docs/USER-GUIDE.md +1403 -0
- package/docs/ci-setup.md +81 -0
- package/docs/codex-setup.md +142 -0
- package/docs/components.md +74 -0
- package/docs/cursor-setup.md +104 -0
- package/docs/events-schema.md +81 -0
- package/docs/migration-v3.md +148 -0
- package/docs/owner-config-schema.md +154 -0
- package/docs/persona-panel.md +433 -0
- package/docs/pi-setup.md +115 -0
- package/docs/plugin-architecture-v3.md +296 -0
- package/docs/pm-skills-marketplace.md +114 -0
- package/docs/policy-cache-validation-2026-04-28.md +118 -0
- package/docs/rule-authoring.md +316 -0
- package/docs/session-config-reference.md +1439 -0
- package/docs/session-config-template.md +961 -0
- package/docs/vault-docs-architecture.md +297 -0
- package/hooks/_lib/lock-bootstrap.mjs +272 -0
- package/hooks/_lib/lock-reconcile.mjs +93 -0
- package/hooks/_lib/profile-gate.mjs +95 -0
- package/hooks/_lib/transcript-history.mjs +211 -0
- package/hooks/agent-teams-h3-test.sh +362 -0
- package/hooks/config-protection.mjs +0 -0
- package/hooks/cwd-change-restore.mjs +131 -0
- package/hooks/enforce-commands.mjs +179 -0
- package/hooks/enforce-scope.mjs +273 -0
- package/hooks/hooks-codex.json +60 -0
- package/hooks/hooks-cursor.json +15 -0
- package/hooks/hooks-pi.json +115 -0
- package/hooks/hooks.json +215 -0
- package/hooks/loop-guard.mjs +260 -0
- package/hooks/on-session-end.mjs +217 -0
- package/hooks/on-session-start.mjs +660 -0
- package/hooks/on-stop.mjs +294 -0
- package/hooks/operator-steer.mjs +64 -0
- package/hooks/post-edit-validate.mjs +225 -0
- package/hooks/post-subagent-discovery-validator.mjs +398 -0
- package/hooks/post-tool-batch-wave-signal.mjs +328 -0
- package/hooks/post-tool-failure-corrective-context.mjs +248 -0
- package/hooks/post-tooluse-frontend-slop.mjs +184 -0
- package/hooks/pre-bash-destructive-guard.mjs +515 -0
- package/hooks/pre-bash-memory-propose-audit.mjs +206 -0
- package/hooks/pre-bash-staging-fence.mjs +223 -0
- package/hooks/pre-bash-templates-first.mjs +404 -0
- package/hooks/run-node.sh +72 -0
- package/hooks/skill-invocation-telemetry.mjs +99 -0
- package/hooks/subagent-telemetry.mjs +249 -0
- package/hooks/wave-scope-commit-guard.mjs +191 -0
- package/monitors/monitors.json +14 -0
- package/output-styles/finding-report.md +48 -0
- package/output-styles/session-report.md +53 -0
- package/output-styles/wave-summary.md +38 -0
- package/package.json +94 -0
- package/pi/extensions/session-orchestrator.ts +25 -0
- package/pi/prompts/autopilot-multi.md +12 -0
- package/pi/prompts/autopilot.md +12 -0
- package/pi/prompts/bootstrap.md +12 -0
- package/pi/prompts/brainstorm.md +12 -0
- package/pi/prompts/close.md +11 -0
- package/pi/prompts/debug.md +12 -0
- package/pi/prompts/discovery.md +12 -0
- package/pi/prompts/dispatcher.md +12 -0
- package/pi/prompts/eval.md +12 -0
- package/pi/prompts/evolve.md +12 -0
- package/pi/prompts/go.md +12 -0
- package/pi/prompts/grill.md +12 -0
- package/pi/prompts/harness-audit.md +12 -0
- package/pi/prompts/memory-cleanup.md +12 -0
- package/pi/prompts/persona-panel.md +12 -0
- package/pi/prompts/plan.md +12 -0
- package/pi/prompts/portfolio.md +12 -0
- package/pi/prompts/reconcile.md +12 -0
- package/pi/prompts/repo-audit.md +12 -0
- package/pi/prompts/session.md +12 -0
- package/pi/prompts/spinout.md +12 -0
- package/pi/prompts/sunset-review.md +12 -0
- package/pi/prompts/templates-ack.md +12 -0
- package/pi/prompts/test.md +12 -0
- package/rules/_index.md +51 -0
- package/rules/always-on/commit-discipline.md +26 -0
- package/rules/always-on/npm-quality-gates.md +26 -0
- package/rules/always-on/parallel-sessions.md +43 -0
- package/rules/opt-in-domain/prompt-caching.md +270 -0
- package/rules/opt-in-stack/backend-data.md +188 -0
- package/rules/opt-in-stack/backend.md +390 -0
- package/rules/opt-in-stack/frontend.md +98 -0
- package/rules/opt-in-stack/security-web.md +194 -0
- package/rules/opt-in-stack/swift.md +65 -0
- package/scripts/archive-closed-prds.mjs +416 -0
- package/scripts/autopilot-multi.mjs +802 -0
- package/scripts/autopilot.mjs +383 -0
- package/scripts/backfill-abandoned-sessions.mjs +265 -0
- package/scripts/backfill-learnings-expires.mjs +196 -0
- package/scripts/backfill-learnings.mjs +203 -0
- package/scripts/backfill-sessions.mjs +282 -0
- package/scripts/check-doc-consistency.sh +279 -0
- package/scripts/check-package-manager.mjs +445 -0
- package/scripts/ci/assert-vitest-green.mjs +267 -0
- package/scripts/codex-install.mjs +435 -0
- package/scripts/compute-grounding-injection.sh +186 -0
- package/scripts/cursor-install.mjs +113 -0
- package/scripts/dialectic-deriver.mjs +573 -0
- package/scripts/emit-event.mjs +160 -0
- package/scripts/emit-session.mjs +212 -0
- package/scripts/eval-session.mjs +262 -0
- package/scripts/export-hw-learnings.mjs +437 -0
- package/scripts/gc-stale-worktrees.mjs +666 -0
- package/scripts/generate-pi-prompts.mjs +127 -0
- package/scripts/harness-audit.mjs +287 -0
- package/scripts/lib/agent-frontmatter.mjs +266 -0
- package/scripts/lib/agent-output-schema.mjs +166 -0
- package/scripts/lib/agent-status.mjs +303 -0
- package/scripts/lib/ajv-loader.mjs +34 -0
- package/scripts/lib/auto-dialectic.mjs +382 -0
- package/scripts/lib/auto-dream.mjs +471 -0
- package/scripts/lib/autonomy/suitability.mjs +212 -0
- package/scripts/lib/autopilot/dep-graph.mjs +417 -0
- package/scripts/lib/autopilot/durable-telemetry.mjs +121 -0
- package/scripts/lib/autopilot/flags.mjs +104 -0
- package/scripts/lib/autopilot/kill-switches.mjs +174 -0
- package/scripts/lib/autopilot/loop.mjs +320 -0
- package/scripts/lib/autopilot/mr-draft.mjs +520 -0
- package/scripts/lib/autopilot/multi-killswitch.mjs +184 -0
- package/scripts/lib/autopilot/recent-runs.mjs +106 -0
- package/scripts/lib/autopilot/stall-sampler.mjs +97 -0
- package/scripts/lib/autopilot/telemetry.mjs +224 -0
- package/scripts/lib/autopilot/worktree-pipeline.mjs +605 -0
- package/scripts/lib/autopilot-telemetry.mjs +11 -0
- package/scripts/lib/autopilot.mjs +39 -0
- package/scripts/lib/backlog-scan.mjs +179 -0
- package/scripts/lib/bootstrap-lock-freshness.mjs +260 -0
- package/scripts/lib/bootstrap-lock-refresh.mjs +186 -0
- package/scripts/lib/build-live-signals.mjs +150 -0
- package/scripts/lib/ci-status-banner.mjs +425 -0
- package/scripts/lib/claude-md-budget-lint.mjs +246 -0
- package/scripts/lib/cli-flags.mjs +158 -0
- package/scripts/lib/codex/plugin-contract.mjs +610 -0
- package/scripts/lib/cold-start-detector.mjs +240 -0
- package/scripts/lib/command-blocker.mjs +458 -0
- package/scripts/lib/common.mjs +333 -0
- package/scripts/lib/config/auto-dream.mjs +77 -0
- package/scripts/lib/config/block-header.mjs +94 -0
- package/scripts/lib/config/broken-window.mjs +114 -0
- package/scripts/lib/config/coercers.mjs +248 -0
- package/scripts/lib/config/cold-start.mjs +92 -0
- package/scripts/lib/config/config-protection.mjs +120 -0
- package/scripts/lib/config/cross-repo.mjs +104 -0
- package/scripts/lib/config/custom-phases.mjs +213 -0
- package/scripts/lib/config/dialectic.mjs +92 -0
- package/scripts/lib/config/discovery-validator.mjs +75 -0
- package/scripts/lib/config/dispatcher-autonomy-capture.mjs +240 -0
- package/scripts/lib/config/dispatcher-autonomy.mjs +152 -0
- package/scripts/lib/config/docs-orchestrator.mjs +90 -0
- package/scripts/lib/config/docs-staleness.mjs +96 -0
- package/scripts/lib/config/drift-check.mjs +155 -0
- package/scripts/lib/config/eval.mjs +130 -0
- package/scripts/lib/config/events-rotation.mjs +74 -0
- package/scripts/lib/config/evolve.mjs +308 -0
- package/scripts/lib/config/frontend-slop-hook.mjs +104 -0
- package/scripts/lib/config/gitlab-portfolio.mjs +150 -0
- package/scripts/lib/config/handover-gate.mjs +106 -0
- package/scripts/lib/config/host-paths.mjs +76 -0
- package/scripts/lib/config/io.mjs +54 -0
- package/scripts/lib/config/loop-guard.mjs +117 -0
- package/scripts/lib/config/memory.mjs +150 -0
- package/scripts/lib/config/persona-gate-wave.mjs +258 -0
- package/scripts/lib/config/reconcile.mjs +205 -0
- package/scripts/lib/config/section-extractor.mjs +100 -0
- package/scripts/lib/config/skill-evolution.mjs +112 -0
- package/scripts/lib/config/slopcheck.mjs +99 -0
- package/scripts/lib/config/state-md-lock.mjs +83 -0
- package/scripts/lib/config/templates-first.mjs +94 -0
- package/scripts/lib/config/test.mjs +113 -0
- package/scripts/lib/config/vault-integration.mjs +201 -0
- package/scripts/lib/config/vault-mirror-quality.mjs +99 -0
- package/scripts/lib/config/vault-staleness.mjs +84 -0
- package/scripts/lib/config/vault-sync.mjs +96 -0
- package/scripts/lib/config/verification-auto-fix.mjs +84 -0
- package/scripts/lib/config/wave-reviewers.mjs +133 -0
- package/scripts/lib/config-schema.mjs +345 -0
- package/scripts/lib/config.mjs +474 -0
- package/scripts/lib/convergence-monitor.mjs +389 -0
- package/scripts/lib/coordinator-snapshot.mjs +371 -0
- package/scripts/lib/crypto-digest-utils.mjs +91 -0
- package/scripts/lib/discovery/helpers.mjs +127 -0
- package/scripts/lib/discovery/triage-state.mjs +279 -0
- package/scripts/lib/dispatcher/cli.mjs +257 -0
- package/scripts/lib/dispatcher/enumerate.mjs +243 -0
- package/scripts/lib/dispatcher/rank.mjs +363 -0
- package/scripts/lib/ecosystem-health.mjs +224 -0
- package/scripts/lib/ecosystem-wizard/ci-detector.mjs +18 -0
- package/scripts/lib/ecosystem-wizard/config-parser.mjs +54 -0
- package/scripts/lib/ecosystem-wizard/config-writer.mjs +287 -0
- package/scripts/lib/ecosystem-wizard/package-manager-detector.mjs +42 -0
- package/scripts/lib/ecosystem-wizard/wizard-prompt.mjs +246 -0
- package/scripts/lib/ecosystem-wizard.mjs +48 -0
- package/scripts/lib/env-check.mjs +89 -0
- package/scripts/lib/eval/engine.mjs +605 -0
- package/scripts/lib/eval/judge.mjs +433 -0
- package/scripts/lib/eval/report.mjs +367 -0
- package/scripts/lib/eval/schema.mjs +618 -0
- package/scripts/lib/eval/session-resolve.mjs +137 -0
- package/scripts/lib/eval/sink.mjs +77 -0
- package/scripts/lib/events-rotation.mjs +86 -0
- package/scripts/lib/events-schema.mjs +81 -0
- package/scripts/lib/events.mjs +80 -0
- package/scripts/lib/evolve/autonomy-verdict.mjs +461 -0
- package/scripts/lib/evolve/autopilot-effectiveness.mjs +293 -0
- package/scripts/lib/exclusivity-matrix.mjs +68 -0
- package/scripts/lib/fetch-baseline.mjs +311 -0
- package/scripts/lib/file-lock.mjs +512 -0
- package/scripts/lib/frontend-detect/detect.mjs +138 -0
- package/scripts/lib/frontend-detect/rules.mjs +295 -0
- package/scripts/lib/frontmatter-guard.mjs +241 -0
- package/scripts/lib/gates/echo-stub-detect.mjs +39 -0
- package/scripts/lib/gates/gate-baseline.mjs +42 -0
- package/scripts/lib/gates/gate-full.mjs +85 -0
- package/scripts/lib/gates/gate-helpers.mjs +231 -0
- package/scripts/lib/gates/gate-incremental.mjs +76 -0
- package/scripts/lib/gates/gate-per-file.mjs +55 -0
- package/scripts/lib/gitlab-ops/stale-mr-sweep.mjs +447 -0
- package/scripts/lib/gitlab-portfolio/aggregator.mjs +383 -0
- package/scripts/lib/gitlab-portfolio/cli.mjs +428 -0
- package/scripts/lib/gitlab-portfolio/markdown-writer.mjs +289 -0
- package/scripts/lib/gitlab-portfolio/vcs-detect.mjs +182 -0
- package/scripts/lib/handover-gate.mjs +222 -0
- package/scripts/lib/hardening.mjs +43 -0
- package/scripts/lib/hardware-pattern-detector.mjs +238 -0
- package/scripts/lib/harness-audit/categories/category1.mjs +123 -0
- package/scripts/lib/harness-audit/categories/category2.mjs +145 -0
- package/scripts/lib/harness-audit/categories/category3.mjs +143 -0
- package/scripts/lib/harness-audit/categories/category4.mjs +202 -0
- package/scripts/lib/harness-audit/categories/category5.mjs +152 -0
- package/scripts/lib/harness-audit/categories/category6.mjs +211 -0
- package/scripts/lib/harness-audit/categories/category7.mjs +125 -0
- package/scripts/lib/harness-audit/categories/category8.mjs +328 -0
- package/scripts/lib/harness-audit/categories/category9.mjs +294 -0
- package/scripts/lib/harness-audit/categories/helpers.mjs +165 -0
- package/scripts/lib/harness-audit/categories.mjs +19 -0
- package/scripts/lib/historical-guard.mjs +15 -0
- package/scripts/lib/host-identity.mjs +262 -0
- package/scripts/lib/instruction-budget-guard.mjs +332 -0
- package/scripts/lib/io.mjs +304 -0
- package/scripts/lib/issue-close-strip-labels.mjs +161 -0
- package/scripts/lib/language-mappers/README.md +57 -0
- package/scripts/lib/language-mappers/index.mjs +165 -0
- package/scripts/lib/language-mappers/markdown.mjs +149 -0
- package/scripts/lib/language-mappers/python.mjs +249 -0
- package/scripts/lib/language-mappers/swift.mjs +201 -0
- package/scripts/lib/language-mappers/typescript.mjs +433 -0
- package/scripts/lib/learnings/expiry-sweep.mjs +164 -0
- package/scripts/lib/learnings/filters.mjs +43 -0
- package/scripts/lib/learnings/io.mjs +255 -0
- package/scripts/lib/learnings/schema.mjs +518 -0
- package/scripts/lib/learnings/surface.mjs +207 -0
- package/scripts/lib/learnings.mjs +42 -0
- package/scripts/lib/lock-reaper.mjs +648 -0
- package/scripts/lib/locks/index.mjs +31 -0
- package/scripts/lib/locks/lock-body.mjs +62 -0
- package/scripts/lib/locks/staging-fence-lock.mjs +267 -0
- package/scripts/lib/locks/state-md-lock.mjs +351 -0
- package/scripts/lib/loop-readiness-banner.mjs +144 -0
- package/scripts/lib/memory-banner.mjs +478 -0
- package/scripts/lib/memory-cleanup/worktree-sweep.mjs +108 -0
- package/scripts/lib/memory-cleanup-stamp.mjs +56 -0
- package/scripts/lib/memory-paths.mjs +31 -0
- package/scripts/lib/memory-proposals/collector.mjs +334 -0
- package/scripts/lib/memory-proposals/schema.mjs +289 -0
- package/scripts/lib/memory-proposals/sink.mjs +507 -0
- package/scripts/lib/memory-proposals/store.mjs +441 -0
- package/scripts/lib/mission-status-schema.mjs +114 -0
- package/scripts/lib/mode-selector/alternatives.mjs +64 -0
- package/scripts/lib/mode-selector/constants.mjs +29 -0
- package/scripts/lib/mode-selector/context-pressure.mjs +157 -0
- package/scripts/lib/mode-selector/rationale.mjs +55 -0
- package/scripts/lib/mode-selector/scoring.mjs +221 -0
- package/scripts/lib/mode-selector-accuracy.mjs +121 -0
- package/scripts/lib/mode-selector.mjs +160 -0
- package/scripts/lib/multi-provider-build/providers.mjs +64 -0
- package/scripts/lib/multi-provider-build/templating.mjs +130 -0
- package/scripts/lib/named-baseline-resolver.mjs +233 -0
- package/scripts/lib/named-vault-resolver.mjs +433 -0
- package/scripts/lib/owner-config/coerce.mjs +29 -0
- package/scripts/lib/owner-config/constants.mjs +21 -0
- package/scripts/lib/owner-config/defaults.mjs +50 -0
- package/scripts/lib/owner-config/error.mjs +19 -0
- package/scripts/lib/owner-config/index.mjs +13 -0
- package/scripts/lib/owner-config/merge.mjs +52 -0
- package/scripts/lib/owner-config/validate.mjs +259 -0
- package/scripts/lib/owner-config-banner.mjs +126 -0
- package/scripts/lib/owner-config-loader.mjs +159 -0
- package/scripts/lib/owner-config.example.yaml +72 -0
- package/scripts/lib/owner-config.mjs +28 -0
- package/scripts/lib/owner-interview.mjs +243 -0
- package/scripts/lib/owner-yaml.mjs +571 -0
- package/scripts/lib/package-manager.mjs +160 -0
- package/scripts/lib/path-utils.mjs +217 -0
- package/scripts/lib/peer-cards/merger.mjs +310 -0
- package/scripts/lib/peer-cards/reader.mjs +125 -0
- package/scripts/lib/peer-cards/schema.mjs +230 -0
- package/scripts/lib/peer-cards/staleness-banner.mjs +86 -0
- package/scripts/lib/peer-cards/writer.mjs +138 -0
- package/scripts/lib/peer-discovery.mjs +200 -0
- package/scripts/lib/persona-panel/catalog-loader.mjs +577 -0
- package/scripts/lib/persona-panel/consolidator.mjs +370 -0
- package/scripts/lib/persona-panel/persona-runner.mjs +375 -0
- package/scripts/lib/persona-panel/threshold.mjs +130 -0
- package/scripts/lib/pi-hook-bridge.mjs +328 -0
- package/scripts/lib/platform.mjs +266 -0
- package/scripts/lib/playwright-driver/runner.mjs +297 -0
- package/scripts/lib/plugin-root.mjs +210 -0
- package/scripts/lib/pre-dispatch-check.mjs +126 -0
- package/scripts/lib/product-repo-detect.mjs +121 -0
- package/scripts/lib/profiles/registry.mjs +176 -0
- package/scripts/lib/profiles/schema.mjs +209 -0
- package/scripts/lib/qg-command-drift-banner.mjs +88 -0
- package/scripts/lib/quality-gate/diagnostics.mjs +92 -0
- package/scripts/lib/quality-gate.mjs +536 -0
- package/scripts/lib/quality-gates-cache.mjs +228 -0
- package/scripts/lib/quality-gates-policy.mjs +95 -0
- package/scripts/lib/recommendations-v0.mjs +156 -0
- package/scripts/lib/reconcile/eligibility.mjs +203 -0
- package/scripts/lib/reconcile/emitter.mjs +244 -0
- package/scripts/lib/reconcile/engine.mjs +412 -0
- package/scripts/lib/reconcile/idempotency.mjs +239 -0
- package/scripts/lib/reconcile/renderer.mjs +211 -0
- package/scripts/lib/reconcile/writer.mjs +293 -0
- package/scripts/lib/reconcile-nudge-banner.mjs +284 -0
- package/scripts/lib/resource-probe/evaluate.mjs +190 -0
- package/scripts/lib/resource-probe/parsers.mjs +181 -0
- package/scripts/lib/resource-probe/probe-platform.mjs +300 -0
- package/scripts/lib/resource-probe.mjs +95 -0
- package/scripts/lib/rule-loader.mjs +552 -0
- package/scripts/lib/rules-sync.mjs +439 -0
- package/scripts/lib/scope-gate.mjs +496 -0
- package/scripts/lib/session-close-backfill.mjs +539 -0
- package/scripts/lib/session-discovery.mjs +256 -0
- package/scripts/lib/session-end/phase-skip.mjs +357 -0
- package/scripts/lib/session-end/worktree-cleanup.mjs +112 -0
- package/scripts/lib/session-id.mjs +362 -0
- package/scripts/lib/session-lock.mjs +703 -0
- package/scripts/lib/session-registry.mjs +355 -0
- package/scripts/lib/session-schema/aliases.mjs +71 -0
- package/scripts/lib/session-schema/constants.mjs +115 -0
- package/scripts/lib/session-schema/normalizer.mjs +66 -0
- package/scripts/lib/session-schema/timestamps.mjs +64 -0
- package/scripts/lib/session-schema/validator.mjs +453 -0
- package/scripts/lib/session-schema.mjs +71 -0
- package/scripts/lib/session-token-rollup.mjs +137 -0
- package/scripts/lib/sessions-staleness-banner.mjs +247 -0
- package/scripts/lib/skill-evolution/blast-radius-classifier.mjs +114 -0
- package/scripts/lib/skill-evolution/candidate-intake.mjs +270 -0
- package/scripts/lib/skill-evolution/config-validation-gate.mjs +279 -0
- package/scripts/lib/skill-evolution/engine.mjs +719 -0
- package/scripts/lib/skill-evolution/idempotency.mjs +279 -0
- package/scripts/lib/skill-evolution/mr-opener.mjs +507 -0
- package/scripts/lib/skill-health/join.mjs +181 -0
- package/scripts/lib/skill-health/score.mjs +123 -0
- package/scripts/lib/skill-invocations-schema.mjs +214 -0
- package/scripts/lib/skill-judge.mjs +348 -0
- package/scripts/lib/skill-judgments-schema.mjs +264 -0
- package/scripts/lib/slopcheck.mjs +501 -0
- package/scripts/lib/soul-resolve.mjs +118 -0
- package/scripts/lib/spiral-carryover.mjs +495 -0
- package/scripts/lib/state-md/body-sections.mjs +851 -0
- package/scripts/lib/state-md/frontmatter-mutators.mjs +453 -0
- package/scripts/lib/state-md/mission-status.mjs +247 -0
- package/scripts/lib/state-md/recommendations.mjs +57 -0
- package/scripts/lib/state-md/yaml-parser.mjs +234 -0
- package/scripts/lib/state-md-peer-guard.mjs +232 -0
- package/scripts/lib/state-md.mjs +53 -0
- package/scripts/lib/subagents-schema.mjs +309 -0
- package/scripts/lib/sunset/walker.mjs +1192 -0
- package/scripts/lib/test-runner/artifact-paths.mjs +94 -0
- package/scripts/lib/test-runner/fingerprint.mjs +33 -0
- package/scripts/lib/test-runner/issue-reconcile.mjs +770 -0
- package/scripts/lib/tmux-layout/layouts.mjs +224 -0
- package/scripts/lib/tmux-layout/telemetry-stats.mjs +100 -0
- package/scripts/lib/tmux-layout/telemetry.mjs +88 -0
- package/scripts/lib/tmux-layout/tmux-shell.mjs +82 -0
- package/scripts/lib/tmux-layout/vcs-detector.mjs +88 -0
- package/scripts/lib/validate/check-agents.mjs +457 -0
- package/scripts/lib/validate/check-codex-plugin.mjs +37 -0
- package/scripts/lib/validate/check-commands.mjs +148 -0
- package/scripts/lib/validate/check-component-paths.mjs +112 -0
- package/scripts/lib/validate/check-dead-bridge.mjs +180 -0
- package/scripts/lib/validate/check-hooks-symmetry.mjs +258 -0
- package/scripts/lib/validate/check-json-files.mjs +116 -0
- package/scripts/lib/validate/check-owner-leakage.mjs +1011 -0
- package/scripts/lib/validate/check-path-utils-canary.mjs +175 -0
- package/scripts/lib/validate/check-peekaboo-driver-canary.mjs +201 -0
- package/scripts/lib/validate/check-pi-package.mjs +110 -0
- package/scripts/lib/validate/check-pi-prompts.mjs +43 -0
- package/scripts/lib/validate/check-playwright-mcp-canary.mjs +154 -0
- package/scripts/lib/validate/check-plugin-json.mjs +96 -0
- package/scripts/lib/validate/check-plugin-monitors.mjs +206 -0
- package/scripts/lib/validate/check-plugin-schema.mjs +137 -0
- package/scripts/lib/validate/check-rules.mjs +143 -0
- package/scripts/lib/validate/check-session-plan-routing.mjs +154 -0
- package/scripts/lib/validate/check-test-fixture-shapes.mjs +280 -0
- package/scripts/lib/validate/check-unicode-safety.mjs +533 -0
- package/scripts/lib/validate/confidential-names.mjs +169 -0
- package/scripts/lib/validate/dead-bridge-corpus.mjs +141 -0
- package/scripts/lib/validate/dead-bridge-detectors.mjs +568 -0
- package/scripts/lib/validate/tier-inference.mjs +100 -0
- package/scripts/lib/validate-vendored-rules.mjs +519 -0
- package/scripts/lib/vault-archive.mjs +404 -0
- package/scripts/lib/vault-backfill/glab.mjs +164 -0
- package/scripts/lib/vault-backfill/manifest.mjs +75 -0
- package/scripts/lib/vault-backfill/template.mjs +130 -0
- package/scripts/lib/vault-consolidate-fs.mjs +331 -0
- package/scripts/lib/vault-migration-rules.mjs +155 -0
- package/scripts/lib/vault-mirror/auto-commit.mjs +203 -0
- package/scripts/lib/vault-mirror/namespace.mjs +152 -0
- package/scripts/lib/vault-mirror/process.mjs +567 -0
- package/scripts/lib/vault-mirror/pseudonym-map.mjs +164 -0
- package/scripts/lib/vault-mirror/render-learnings.mjs +201 -0
- package/scripts/lib/vault-mirror/render-sessions.mjs +367 -0
- package/scripts/lib/vault-mirror/render.mjs +8 -0
- package/scripts/lib/vault-mirror/utils.mjs +217 -0
- package/scripts/lib/vault-relocation-rules.mjs +555 -0
- package/scripts/lib/vault-repo-backfill.mjs +235 -0
- package/scripts/lib/vault-staleness-banner.mjs +142 -0
- package/scripts/lib/vault-status/board-writer.mjs +769 -0
- package/scripts/lib/vault-status/narrative-mirror.mjs +544 -0
- package/scripts/lib/vault-sync-baseline.mjs +152 -0
- package/scripts/lib/wave-context.mjs +29 -0
- package/scripts/lib/wave-executor/pool.mjs +248 -0
- package/scripts/lib/wave-resource-gate.mjs +204 -0
- package/scripts/lib/wave-sizing.mjs +75 -0
- package/scripts/lib/webhook-url.mjs +105 -0
- package/scripts/lib/workspace.mjs +198 -0
- package/scripts/lib/worktree/constants.mjs +35 -0
- package/scripts/lib/worktree/index.mjs +17 -0
- package/scripts/lib/worktree/lifecycle.mjs +287 -0
- package/scripts/lib/worktree/listing.mjs +118 -0
- package/scripts/lib/worktree/meta.mjs +64 -0
- package/scripts/lib/worktree-freshness.mjs +313 -0
- package/scripts/lib/worktree.mjs +15 -0
- package/scripts/lifecycle-sim-v6.mjs +347 -0
- package/scripts/lock-reaper.mjs +185 -0
- package/scripts/mcp-server.sh +241 -0
- package/scripts/measure-policy-cache-effectiveness.mjs +427 -0
- package/scripts/memory-propose.mjs +464 -0
- package/scripts/migrate-cold-start-seed.mjs +404 -0
- package/scripts/migrate-learnings-jsonl.mjs +189 -0
- package/scripts/migrate-legacy-learnings.sh +61 -0
- package/scripts/migrate-sessions-jsonl.mjs +448 -0
- package/scripts/migrate-subagents-jsonl.mjs +196 -0
- package/scripts/migrate-vault-paths.mjs +796 -0
- package/scripts/parse-config.mjs +149 -0
- package/scripts/pi-install.mjs +117 -0
- package/scripts/print-applicable-rules.mjs +247 -0
- package/scripts/promote-vault-strict.mjs +496 -0
- package/scripts/relocate-vault-corpus.mjs +1178 -0
- package/scripts/run-migrate-v2-cross-repo.mjs +385 -0
- package/scripts/run-quality-gate.mjs +216 -0
- package/scripts/spikes/h3-agent-teams/preflight.sh +53 -0
- package/scripts/spikes/h3-agent-teams/run-h3.sh +112 -0
- package/scripts/spikes/h3-agent-teams/setup.sh +137 -0
- package/scripts/spikes/h3-agent-teams/toggle.sh +38 -0
- package/scripts/sweep-expired-learnings.mjs +135 -0
- package/scripts/sync-vault-schema.mjs +376 -0
- package/scripts/tests/fixtures/fetch-baseline/sample-rule.md +8 -0
- package/scripts/tmux-layout.mjs +245 -0
- package/scripts/token-audit.sh +191 -0
- package/scripts/typecheck.mjs +42 -0
- package/scripts/upload-social-preview.mjs +316 -0
- package/scripts/validate-config.mjs +46 -0
- package/scripts/validate-plugin-manifests.mjs +163 -0
- package/scripts/validate-plugin.mjs +264 -0
- package/scripts/validate-wave-scope.mjs +289 -0
- package/scripts/vault-backfill.mjs +404 -0
- package/scripts/vault-consolidate.mjs +596 -0
- package/scripts/vault-integration-watcher.mjs +394 -0
- package/scripts/vault-mirror.mjs +430 -0
- package/skills/_shared/bootstrap-gate.md +111 -0
- package/skills/_shared/config-reading.md +226 -0
- package/skills/_shared/instruction-file-resolution.md +79 -0
- package/skills/_shared/model-selection.md +64 -0
- package/skills/_shared/monitor-patterns.md +300 -0
- package/skills/_shared/parallel-aware-auq.md +121 -0
- package/skills/_shared/parallel-aware-preamble.md +185 -0
- package/skills/_shared/platform-tools.md +96 -0
- package/skills/_shared/state-ownership.md +221 -0
- package/skills/architecture/DEEPENING.md +37 -0
- package/skills/architecture/INTERFACE-DESIGN.md +44 -0
- package/skills/architecture/LANGUAGE.md +53 -0
- package/skills/architecture/SKILL.md +92 -0
- package/skills/autopilot/SKILL.md +419 -0
- package/skills/bootstrap/SKILL.md +592 -0
- package/skills/bootstrap/STATE.md.template +24 -0
- package/skills/bootstrap/_shared-template.md +243 -0
- package/skills/bootstrap/deep-template.md +659 -0
- package/skills/bootstrap/fast-template.md +251 -0
- package/skills/bootstrap/intensity-heuristic.md +80 -0
- package/skills/bootstrap/public-fallback.md +342 -0
- package/skills/bootstrap/standard-template.md +736 -0
- package/skills/bootstrap/templates/agents/project-code-review.md +18 -0
- package/skills/bootstrap/templates/agents/project-discovery.md +18 -0
- package/skills/bootstrap/templates/agents/project-quality-gate.md +18 -0
- package/skills/brainstorm/SKILL.md +268 -0
- package/skills/brainstorm/soul.md +49 -0
- package/skills/claude-md-drift-check/SKILL.md +186 -0
- package/skills/claude-md-drift-check/checker.mjs +1380 -0
- package/skills/claude-md-drift-check/checker.sh +37 -0
- package/skills/claude-md-drift-check/package.json +16 -0
- package/skills/convergence-monitoring/README.md +39 -0
- package/skills/convergence-monitoring/SIGNALS.md +246 -0
- package/skills/convergence-monitoring/SKILL.md +285 -0
- package/skills/daily/SKILL.md +222 -0
- package/skills/daily/generate.sh +92 -0
- package/skills/daily/templates/daily.md.tpl +36 -0
- package/skills/debug/SKILL.md +188 -0
- package/skills/debug/soul.md +35 -0
- package/skills/discovery/SKILL.md +567 -0
- package/skills/discovery/issue-templates.md +237 -0
- package/skills/discovery/probes/docs-staleness.mjs +195 -0
- package/skills/discovery/probes/frontend-slop.mjs +186 -0
- package/skills/discovery/probes/ssot-code-diff.mjs +310 -0
- package/skills/discovery/probes/supply-chain-slopcheck.mjs +440 -0
- package/skills/discovery/probes/vault-narrative-staleness.mjs +355 -0
- package/skills/discovery/probes/vault-staleness.mjs +272 -0
- package/skills/discovery/probes-arch.md +252 -0
- package/skills/discovery/probes-audit.md +95 -0
- package/skills/discovery/probes-code.md +329 -0
- package/skills/discovery/probes-docs.md +76 -0
- package/skills/discovery/probes-feature.md +150 -0
- package/skills/discovery/probes-infra.md +138 -0
- package/skills/discovery/probes-intro.md +25 -0
- package/skills/discovery/probes-session.md +495 -0
- package/skills/discovery/probes-supply-chain.md +94 -0
- package/skills/discovery/probes-ui.md +147 -0
- package/skills/discovery/probes-vault.md +64 -0
- package/skills/discovery/slop-patterns.md +115 -0
- package/skills/dispatcher/SKILL.md +173 -0
- package/skills/docs-orchestrator/SKILL.md +362 -0
- package/skills/docs-orchestrator/audience-mapping.md +140 -0
- package/skills/domain-model/ADR-FORMAT.md +47 -0
- package/skills/domain-model/CONTEXT-FORMAT.md +77 -0
- package/skills/domain-model/SKILL.md +85 -0
- package/skills/ecosystem-health/SKILL.md +119 -0
- package/skills/ecosystem-health/wizard.md +193 -0
- package/skills/eval/SKILL.md +293 -0
- package/skills/eval/rubric-v1.md +218 -0
- package/skills/evolve/SKILL.md +546 -0
- package/skills/frontmatter-guard/SKILL.md +126 -0
- package/skills/gitlab-ops/SKILL.md +368 -0
- package/skills/gitlab-portfolio/SKILL.md +196 -0
- package/skills/grill/SKILL.md +185 -0
- package/skills/grill/soul.md +55 -0
- package/skills/hook-development/SKILL.md +413 -0
- package/skills/mcp-builder/SKILL.md +260 -0
- package/skills/memory-cleanup/SKILL.md +310 -0
- package/skills/mode-selector/SKILL.md +226 -0
- package/skills/peekaboo-driver/SKILL.md +237 -0
- package/skills/peekaboo-driver/soul.md +32 -0
- package/skills/persona-panel/SKILL.md +365 -0
- package/skills/persona-panel/persona-format.md +205 -0
- package/skills/persona-panel/presets/designer-lens.md +87 -0
- package/skills/persona-panel/presets/engineer-lens.md +88 -0
- package/skills/persona-panel/presets/pm-lens.md +86 -0
- package/skills/plan/SKILL.md +496 -0
- package/skills/plan/mode-feature.md +141 -0
- package/skills/plan/mode-new.md +297 -0
- package/skills/plan/mode-retro.md +271 -0
- package/skills/plan/prd-feature-template.md +132 -0
- package/skills/plan/prd-full-template.md +151 -0
- package/skills/plan/prd-reviewer-prompt.md +103 -0
- package/skills/plan/retro-template.md +75 -0
- package/skills/plan/soul.md +62 -0
- package/skills/playwright-driver/SKILL.md +226 -0
- package/skills/playwright-driver/soul.md +30 -0
- package/skills/quality-gates/SKILL.md +212 -0
- package/skills/reconcile/SKILL.md +324 -0
- package/skills/repo-audit/SKILL.md +272 -0
- package/skills/session-end/SKILL.md +1044 -0
- package/skills/session-end/discovery-scan.md +37 -0
- package/skills/session-end/drift-operations.md +97 -0
- package/skills/session-end/learning-patterns.md +78 -0
- package/skills/session-end/metrics-collection.md +175 -0
- package/skills/session-end/phase-3-2-docs-verification.md +148 -0
- package/skills/session-end/phase-3-6-tail.md +344 -0
- package/skills/session-end/phase-3-7a-recommendations.md +86 -0
- package/skills/session-end/plan-verification.md +288 -0
- package/skills/session-end/session-metrics-write.md +223 -0
- package/skills/session-end/vault-operations.md +50 -0
- package/skills/session-end/verification-checklist.md +20 -0
- package/skills/session-plan/SKILL.md +554 -0
- package/skills/session-plan/wave-template.md +37 -0
- package/skills/session-start/SKILL.md +1043 -0
- package/skills/session-start/phase-2-5-docs-planning.md +119 -0
- package/skills/session-start/phase-4-5-resource-health.md +49 -0
- package/skills/session-start/phase-7-1-premise-check.md +47 -0
- package/skills/session-start/phase-7-5-mode-selector.md +237 -0
- package/skills/session-start/phase-8-5-express-path.md +61 -0
- package/skills/session-start/presentation-format.md +81 -0
- package/skills/session-start/soul.md +57 -0
- package/skills/skill-creator/SKILL.md +168 -0
- package/skills/spinout/SKILL.md +76 -0
- package/skills/sunset-review/SKILL.md +96 -0
- package/skills/test-runner/SKILL.md +362 -0
- package/skills/test-runner/rubric-v1.md +388 -0
- package/skills/test-runner/soul.md +46 -0
- package/skills/tmux-layout/SKILL.md +104 -0
- package/skills/ubiquitous-language/SKILL.md +97 -0
- package/skills/using-orchestrator/SKILL.md +144 -0
- package/skills/vault-mirror/SKILL.md +234 -0
- package/skills/vault-sync/SKILL.md +319 -0
- package/skills/vault-sync/package-lock.json +40 -0
- package/skills/vault-sync/package.json +11 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/90-archive/bad-archived.md +8 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/archive-test-vault/live-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/bad-type.md +8 -0
- package/skills/vault-sync/tests/fixtures/broken-frontmatter-vault/good-note.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/.obsidian/config.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/01-projects/foo/projects-baseline.md +10 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/03-daily/daily-2026-04-13.md +8 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/clean-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/has-dangling.md +9 -0
- package/skills/vault-sync/tests/fixtures/dangling-link-vault/real-target.md +8 -0
- package/skills/vault-sync/tests/fixtures/empty-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/missing-field-vault/missing-id.md +7 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/03-daily/daily-2026-04-13.md +9 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/nested-tag-vault/nested-tags-note.md +11 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/README.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_MOC.md +3 -0
- package/skills/vault-sync/tests/fixtures/no-frontmatter-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_MOC.md +11 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/_meta/.gitkeep +0 -0
- package/skills/vault-sync/tests/fixtures/with-moc-vault/hello-world.md +11 -0
- package/skills/vault-sync/tests/schema-drift.test.mjs +133 -0
- package/skills/vault-sync/validator.mjs +658 -0
- package/skills/vault-sync/validator.sh +55 -0
- package/skills/wave-executor/SKILL.md +496 -0
- package/skills/wave-executor/circuit-breaker.md +169 -0
- package/skills/wave-executor/wave-loop.md +1043 -0
- package/skills/write-executable-plan/SKILL.md +237 -0
- package/skills/write-executable-plan/plan-template.md +154 -0
- package/templates/_minimal/CLAUDE.md.tmpl +41 -0
- package/templates/_minimal/README.md.tmpl +15 -0
- package/templates/_minimal/gitignore.tmpl +47 -0
- package/templates/_shared/harte-regeln.md +16 -0
- package/templates/_shared/loop.md +90 -0
- package/templates/_shared/rules/parallel-sessions.md +77 -0
- package/templates/nextjs-minimal/README.md +30 -0
- package/templates/nextjs-minimal/app/layout.tsx +18 -0
- package/templates/nextjs-minimal/app/page.tsx +7 -0
- package/templates/nextjs-minimal/eslint.config.mjs +16 -0
- package/templates/nextjs-minimal/next.config.mjs +4 -0
- package/templates/nextjs-minimal/package.json +27 -0
- package/templates/nextjs-minimal/tsconfig.json +23 -0
- package/templates/node-minimal/README.md +33 -0
- package/templates/node-minimal/eslint.config.mjs +10 -0
- package/templates/node-minimal/package.json +21 -0
- package/templates/node-minimal/src/index.ts +1 -0
- package/templates/node-minimal/tests/sanity.test.ts +5 -0
- package/templates/node-minimal/tsconfig.json +17 -0
- package/templates/personas/README.md +150 -0
- package/templates/personas/accounting-compliance.v1.md +120 -0
- package/templates/personas/accounting-tax-advisor.v1.md +116 -0
- package/templates/personas/buyer-p1-cto.v1.md +125 -0
- package/templates/personas/buyer-p2-kanzlei.v1.md +134 -0
- package/templates/personas/buyer-p3-build.v1.md +130 -0
- package/templates/personas/buyer-p4-tech-veto.v1.md +130 -0
- package/templates/personas/buyer-p5-solo.v1.md +132 -0
- package/templates/personas/buyer-p6-ld.v1.md +130 -0
- package/templates/personas/klima-ai-expert.v1.md +114 -0
- package/templates/personas/klima-physicist.v1.md +117 -0
- package/templates/python-uv/README.md +28 -0
- package/templates/python-uv/pyproject.toml +32 -0
- package/templates/python-uv/src/__PROJECT_NAME__/__init__.py +0 -0
- package/templates/python-uv/src/__PROJECT_NAME__/main.py +6 -0
- package/templates/python-uv/tests/test_sanity.py +2 -0
- package/templates/static-html/README.md +19 -0
- package/templates/static-html/index.html +15 -0
- package/templates/static-html/script.js +1 -0
- package/templates/static-html/styles.css +26 -0
package/docs/ci-setup.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# CI Setup — session-orchestrator
|
|
2
|
+
|
|
3
|
+
> **Maintainer-internal.** This document describes the maintainer's private CI mirror setup. It is not required for using the plugin.
|
|
4
|
+
|
|
5
|
+
## schema-drift-check job
|
|
6
|
+
|
|
7
|
+
The `schema-drift-check` job compares the vendored `vault-frontmatter` schema
|
|
8
|
+
in this repo against the canonical source in
|
|
9
|
+
`infrastructure/projects-baseline` (project ID 52, private).
|
|
10
|
+
|
|
11
|
+
Because the target repo is on the same private GitLab instance but is a
|
|
12
|
+
**different project**, `CI_JOB_TOKEN` is rejected with HTTP 403 unless
|
|
13
|
+
project-level Job Token allowlists are explicitly configured — an admin action
|
|
14
|
+
in the foreign project that cannot be scripted from here. The fix is a deploy
|
|
15
|
+
token or PAT stored as the masked CI variable `SCHEMA_DRIFT_TOKEN`.
|
|
16
|
+
|
|
17
|
+
### Required CI variable
|
|
18
|
+
|
|
19
|
+
| Variable | Type | Mask | Protect | Value |
|
|
20
|
+
|---|---|---|---|---|
|
|
21
|
+
| `SCHEMA_DRIFT_TOKEN` | Variable | Yes | Optional | deploy token or PAT (see below) |
|
|
22
|
+
|
|
23
|
+
If `SCHEMA_DRIFT_TOKEN` is **not set**, the job prints a warning and exits 0
|
|
24
|
+
(no pipeline failure). Set the variable to activate the real drift check.
|
|
25
|
+
|
|
26
|
+
### Option A — Deploy Token (recommended, least-privilege)
|
|
27
|
+
|
|
28
|
+
1. Open `infrastructure/projects-baseline` on your GitLab instance.
|
|
29
|
+
2. Go to **Settings → Repository → Deploy tokens**.
|
|
30
|
+
3. Click **Add token**:
|
|
31
|
+
- **Name:** `session-orchestrator-ci-schema-drift`
|
|
32
|
+
- **Expires at:** set a reminder (e.g. 1 year); rotate before expiry
|
|
33
|
+
- **Scopes:** check `read_repository` only
|
|
34
|
+
4. Copy the generated token value (shown once).
|
|
35
|
+
5. Open `session-orchestrator` on GitLab.
|
|
36
|
+
6. Go to **Settings → CI/CD → Variables → Add variable**:
|
|
37
|
+
- **Key:** `SCHEMA_DRIFT_TOKEN`
|
|
38
|
+
- **Value:** paste the deploy token
|
|
39
|
+
- **Type:** Variable
|
|
40
|
+
- **Masked:** Yes
|
|
41
|
+
- **Protected:** Optional (enable if you only need it on protected branches)
|
|
42
|
+
7. Save.
|
|
43
|
+
|
|
44
|
+
### Option B — Personal Access Token (fallback)
|
|
45
|
+
|
|
46
|
+
Use this if a deploy token is not available for the target project.
|
|
47
|
+
|
|
48
|
+
1. Go to your GitLab profile → **Access Tokens**.
|
|
49
|
+
2. Create a token with scope `read_repository` and a reasonable expiry.
|
|
50
|
+
3. Store it in `session-orchestrator` CI/CD variables as `SCHEMA_DRIFT_TOKEN`
|
|
51
|
+
(Masked: Yes) — same steps 5–7 above.
|
|
52
|
+
|
|
53
|
+
Note: a PAT is scoped to the creating user's access; prefer a deploy token so
|
|
54
|
+
the CI credential survives staff changes.
|
|
55
|
+
|
|
56
|
+
### Verification path
|
|
57
|
+
|
|
58
|
+
After setting the variable:
|
|
59
|
+
|
|
60
|
+
1. Push to a feature branch or open an MR against `main`.
|
|
61
|
+
2. Observe the `schema-drift-check` job in the pipeline — it should now clone
|
|
62
|
+
`infrastructure/projects-baseline` and run the sync check instead of
|
|
63
|
+
printing the skip warning.
|
|
64
|
+
3. A passing job (exit 0) means the vendored schema matches the canonical
|
|
65
|
+
source. A failing job (exit 1) means drift was detected — run
|
|
66
|
+
`node scripts/sync-vault-schema.mjs --update` locally and commit the
|
|
67
|
+
refreshed copy.
|
|
68
|
+
|
|
69
|
+
### Why not configure the CI Job Token allowlist in projects-baseline?
|
|
70
|
+
|
|
71
|
+
That approach (Settings → CI/CD → Token Access in the foreign project) is
|
|
72
|
+
equally valid and may be preferable if you manage `projects-baseline`.
|
|
73
|
+
Documenting it here for completeness:
|
|
74
|
+
|
|
75
|
+
- Go to `infrastructure/projects-baseline → Settings → CI/CD → Token Access`.
|
|
76
|
+
- Under "Allow CI job tokens from the following projects", add
|
|
77
|
+
`infrastructure/session-orchestrator`.
|
|
78
|
+
- Once the allowlist entry is saved, the job can use `CI_JOB_TOKEN` directly
|
|
79
|
+
and `SCHEMA_DRIFT_TOKEN` is not needed.
|
|
80
|
+
- Issue #279 chose the deploy-token path because it requires no admin action
|
|
81
|
+
in the foreign project and works immediately after variable creation.
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Codex Setup Guide
|
|
2
|
+
|
|
3
|
+
Guide for using Session Orchestrator with OpenAI Codex through Codex's public plugin lifecycle.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- Codex CLI 0.144.4 or newer
|
|
8
|
+
- Node.js 24 or newer
|
|
9
|
+
- Git and an initialized project repository
|
|
10
|
+
- `plugins` and `hooks` reported as `stable true` by `codex features list`
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
Clone the repository, install its runtime dependencies, and run the installer from the plugin root:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
git clone https://github.com/Kanevry/session-orchestrator.git
|
|
18
|
+
cd session-orchestrator
|
|
19
|
+
npm install
|
|
20
|
+
node scripts/codex-install.mjs
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The installer validates the local Codex manifest and hook contract, then uses the same public commands an operator can run manually:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
codex plugin marketplace add "$PWD"
|
|
27
|
+
codex plugin add session-orchestrator@kanevry
|
|
28
|
+
codex plugin list --available --json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
It operates only through public Codex plugin commands; hook trust remains untouched.
|
|
32
|
+
|
|
33
|
+
## Understand the Three States
|
|
34
|
+
|
|
35
|
+
Codex reports three distinct states that must not be conflated:
|
|
36
|
+
|
|
37
|
+
1. **Marketplace configured** — `kanevry` points at this clone, so the plugin is discoverable. This alone does not install or enable the plugin.
|
|
38
|
+
2. **Plugin installed and enabled** — `codex plugin list --available --json` shows exactly one `session-orchestrator@kanevry` entry with `installed: true`, `enabled: true`, and the version from `.codex-plugin/plugin.json`.
|
|
39
|
+
3. **Hooks trusted and executing** — after installation, start a fresh Codex task or fully restart Codex, run `/hooks`, review the Session Orchestrator hook bundle, and approve it if appropriate. Hook trust remains operator-controlled; the installer never writes or bypasses it.
|
|
40
|
+
|
|
41
|
+
## Refresh and Explicit Cache Invalidation
|
|
42
|
+
|
|
43
|
+
After pulling changes, rerun the installer:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
git pull
|
|
47
|
+
npm install
|
|
48
|
+
node scripts/codex-install.mjs
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Every installer run executes `codex plugin marketplace add` and `codex plugin add`, even when the marketplace is already configured. The repeated `plugin add` refreshes Codex's installed bundle from the current clone instead of treating installation as a one-time copy.
|
|
52
|
+
|
|
53
|
+
The tracked Codex manifest uses a version such as `3.14.0+codex.20260717175716`. The base must match `package.json`; the `+codex.<YYYYMMDDHHmmss>` UTC suffix is the repository's explicit invalidation marker. When a shipped bundle needs a new cache identity, maintainers commit a new timestamp in `.codex-plugin/plugin.json`. The installer validates that committed value and never mutates the tracked manifest.
|
|
54
|
+
|
|
55
|
+
## Configuration
|
|
56
|
+
|
|
57
|
+
### Session Config in AGENTS.md
|
|
58
|
+
|
|
59
|
+
Add a `## Session Config` section to your project's `AGENTS.md`. The format is identical to the Claude Code `CLAUDE.md` config:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## Session Config
|
|
63
|
+
|
|
64
|
+
test-command: npm test
|
|
65
|
+
typecheck-command: npm run typecheck
|
|
66
|
+
lint-command: npm run lint
|
|
67
|
+
agents-per-wave: 6
|
|
68
|
+
waves: 5
|
|
69
|
+
persistence: true
|
|
70
|
+
enforcement: warn
|
|
71
|
+
vcs: github
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
See `docs/templates/AGENTS-session-config.md` for a complete template.
|
|
75
|
+
|
|
76
|
+
### Agent Roles
|
|
77
|
+
|
|
78
|
+
The plugin bundle includes the Codex role definitions under `.codex-plugin/agents/`. Project-level roles under the project's `.codex/agents/` may override or extend them when a repository needs more specialized prompts.
|
|
79
|
+
|
|
80
|
+
## Hook Surface and Trust
|
|
81
|
+
|
|
82
|
+
`hooks/hooks-codex.json` declares the curated six-event Codex project subset:
|
|
83
|
+
|
|
84
|
+
- `SessionStart`
|
|
85
|
+
- `PreToolUse`
|
|
86
|
+
- `PostToolUse`
|
|
87
|
+
- `SubagentStart`
|
|
88
|
+
- `SubagentStop`
|
|
89
|
+
- `Stop`
|
|
90
|
+
|
|
91
|
+
The Codex hook command uses Codex's native `${PLUGIN_ROOT}` expansion. The wrapper also exports `CODEX_PLUGIN_ROOT="${PLUGIN_ROOT}"` for shared compatibility code and sets `SO_PLATFORM=codex` so Codex wins when multiple harness variables are present.
|
|
92
|
+
|
|
93
|
+
Claude-only events (`SessionEnd`, `PostToolUseFailure`, `PostToolBatch`, and `CwdChanged`) are intentionally absent because Codex 0.144.4 does not expose them as supported project events. Claude Edit/Write payload handlers are also absent: Codex emits canonical `apply_patch` data, while those handlers currently expect Claude's Edit/Write payload shape. They will remain unwired until a real `apply_patch` adapter exists; pretending the payloads are compatible would create false enforcement.
|
|
94
|
+
|
|
95
|
+
An empty `PreToolUse` or `SubagentStart` array means the event belongs to the validated Codex surface but currently has no payload-compatible handler. It does not mean installation or hook trust failed.
|
|
96
|
+
|
|
97
|
+
## Usage
|
|
98
|
+
|
|
99
|
+
After installation and hook review, start a fresh task. Session Orchestrator exposes the shared skill surface, including:
|
|
100
|
+
|
|
101
|
+
- `/session [housekeeping|feature|deep]` — start a session
|
|
102
|
+
- `/go` — execute the agreed plan
|
|
103
|
+
- `/close` — end the session with verification
|
|
104
|
+
- `/plan [new|feature|retro]` — plan a project or feature
|
|
105
|
+
- `/discovery [scope]` — run quality probes
|
|
106
|
+
- `/evolve [analyze|review|list]` — manage learnings
|
|
107
|
+
|
|
108
|
+
## Key Differences from Claude Code
|
|
109
|
+
|
|
110
|
+
| Aspect | Claude Code | Codex |
|
|
111
|
+
|--------|-------------|-------|
|
|
112
|
+
| Interactive choices | AskUserQuestion tool | Numbered Markdown lists |
|
|
113
|
+
| Agent dispatch | Agent tool | Codex subagents / typed roles |
|
|
114
|
+
| State directory | `.claude/` | `.codex/` |
|
|
115
|
+
| Config file | `CLAUDE.md` | `AGENTS.md` |
|
|
116
|
+
| Task tracking | TaskCreate/TaskUpdate | Text-based checklists |
|
|
117
|
+
| Hook root | `$CLAUDE_PLUGIN_ROOT` | native `${PLUGIN_ROOT}` plus `CODEX_PLUGIN_ROOT` compatibility export |
|
|
118
|
+
|
|
119
|
+
Both platforms share session history and learnings through `.orchestrator/metrics/`.
|
|
120
|
+
|
|
121
|
+
## Platform Limitations
|
|
122
|
+
|
|
123
|
+
Claude Code dispatches role-specialized agents with dedicated definitions. Codex maps implementation work through its configured roles, so task prompts carry specialization that is not represented by a dedicated role. A project can add more specific TOML definitions under `.codex/agents/` when needed.
|
|
124
|
+
|
|
125
|
+
Hook enforcement is limited to the validated payload-compatible Codex subset described above. In particular, the absence of Claude-only events and Edit/Write handlers is deliberate rather than an installation workaround.
|
|
126
|
+
|
|
127
|
+
## Troubleshooting
|
|
128
|
+
|
|
129
|
+
Start every Codex plugin diagnosis with the public state view:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
codex plugin list --available --json
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
- **Marketplace is configured but the plugin is only available:** run `codex plugin add session-orchestrator@kanevry`, then run the plugin list again.
|
|
136
|
+
- **The target is missing, disabled, duplicated, or at the wrong version:** run `codex plugin marketplace list --json`, remove the exact target with `codex plugin remove session-orchestrator@kanevry` when present, and rerun `node scripts/codex-install.mjs` to reinstall and verify it.
|
|
137
|
+
- **A `session-orchestrator@openai-curated` or `session-orchestrator@local` installation remains:** these are the only allowlisted legacy IDs. Remove the exact stale ID with `codex plugin remove session-orchestrator@openai-curated` or `codex plugin remove session-orchestrator@local`; unrelated plugins remain untouched.
|
|
138
|
+
- **The `kanevry` marketplace points at another source:** confirm the conflict with `codex plugin marketplace list --json`, run `codex plugin marketplace remove kanevry`, then rerun the installer from the intended clone so it performs the public marketplace add and plugin add lifecycle.
|
|
139
|
+
- **Plugin is installed and enabled but hooks do not fire:** start a fresh task or fully restart Codex, run `/hooks`, and review the trust state. Installation does not imply hook approval.
|
|
140
|
+
- **Other pre-public plugin/config/cache/hook-state residue is suspected:** this state is unsupported. Do not modify private Codex files. File an issue with `codex --version`, `codex plugin list --available --json`, and `codex plugin marketplace list --json` output so the public recovery path can be diagnosed.
|
|
141
|
+
- **Agent dispatch fails:** verify Codex multi-agent support and inspect the bundled or project-level role TOMLs.
|
|
142
|
+
- **Hooks report that Node is unavailable:** expose Node 24+ on the Codex hook PATH or set `SO_NODE_BIN` to the absolute Node executable.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Components & Reference
|
|
2
|
+
|
|
3
|
+
Detailed component inventory and architecture reference for Session Orchestrator. The [README](../README.md) keeps the landing page lean; the full inventory lives here.
|
|
4
|
+
|
|
5
|
+
## Repository anatomy
|
|
6
|
+
|
|
7
|
+
```mermaid
|
|
8
|
+
flowchart LR
|
|
9
|
+
USER([Operator]) -->|invokes /session| COORD[Coordinator]
|
|
10
|
+
COORD -->|reads| SK[Skills<br/>44 user-facing]
|
|
11
|
+
COORD -->|invokes| CMD[Commands<br/>24 slash-cmds]
|
|
12
|
+
COORD -->|dispatches| AG[Agents<br/>15 typed sub-agents]
|
|
13
|
+
AG -.->|parallel waves| W1[code-implementer]
|
|
14
|
+
AG -.-> W2[test-writer]
|
|
15
|
+
AG -.-> W3[security-reviewer]
|
|
16
|
+
AG -.-> W4[session-reviewer]
|
|
17
|
+
HOOK[Hooks<br/>10 event types] -.->|enforce scope + commands| COORD
|
|
18
|
+
COORD -->|writes| METRIC[.orchestrator/metrics/<br/>sessions · learnings · events]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Skills (44 user-facing)
|
|
22
|
+
|
|
23
|
+
- **Lifecycle:** `session-start`, `session-plan`, `wave-executor`, `session-end`, `quality-gates`, `using-orchestrator`
|
|
24
|
+
- **Authoring:** `skill-creator`, `mcp-builder`, `hook-development`, `frontmatter-guard`
|
|
25
|
+
- **Planning & discovery:** `plan`, `discovery`, `repo-audit`, `brainstorm`, `write-executable-plan`, `debug`, `claude-md-drift-check`, `grill`
|
|
26
|
+
- **Architecture:** `architecture`, `domain-model`, `ubiquitous-language`
|
|
27
|
+
- **Cross-session:** `evolve`, `convergence-monitoring`, `memory-cleanup`, `reconcile`, `sunset-review`, `eval`
|
|
28
|
+
- **Vault & docs:** `vault-sync`, `vault-mirror`, `daily`, `docs-orchestrator`
|
|
29
|
+
- **Ecosystem:** `bootstrap`, `gitlab-ops`, `gitlab-portfolio`, `ecosystem-health`, `mode-selector`, `autopilot`, `dispatcher`, `spinout`
|
|
30
|
+
- **Testing:** `test-runner`, `playwright-driver`, `peekaboo-driver`
|
|
31
|
+
- **Content review:** `persona-panel`
|
|
32
|
+
- **Visualization:** `tmux-layout` (opt-in operator side-channel — [ADR-0007](adr/0007-tmux-visualization-substrate.md))
|
|
33
|
+
|
|
34
|
+
## Commands (24)
|
|
35
|
+
|
|
36
|
+
`/session`, `/go`, `/close`, `/discovery`, `/plan`, `/evolve`, `/bootstrap`, `/harness-audit`, `/autopilot`, `/autopilot-multi`, `/repo-audit`, `/test`, `/memory-cleanup`, `/portfolio`, `/brainstorm`, `/debug`, `/persona-panel`, `/grill`, `/sunset-review`, `/templates-ack`, `/dispatcher`, `/reconcile`, `/spinout`, `/eval`.
|
|
37
|
+
|
|
38
|
+
## Agents (15 typed sub-agents)
|
|
39
|
+
|
|
40
|
+
`code-implementer`, `test-writer`, `ui-developer`, `db-specialist`, `security-reviewer`, `session-reviewer`, `docs-writer`, `architect-reviewer`, `qa-strategist`, `analyst`, `ux-evaluator`, `dialectic-deriver`, `memory-proposal-collector`, `skill-applied-judge`, `eval-judge`.
|
|
41
|
+
|
|
42
|
+
Custom agents live in `agents/` (plugin) or `.claude/agents/` (project) as Markdown with YAML frontmatter. The authoring spec — required fields, body conventions, validation commands — is in [`agents/AGENTS.md`](../agents/AGENTS.md), following the canonical [code.claude.com/sub-agents](https://code.claude.com/docs/en/sub-agents) contract.
|
|
43
|
+
|
|
44
|
+
## Hook event types (10)
|
|
45
|
+
|
|
46
|
+
The full Claude wiring uses: `SessionStart` (banner + init), `SessionEnd` (close events), `PreToolUse/Edit|Write` (scope enforcement), `PreToolUse/Bash` (destructive-command guard + enforce-commands + templates-first + staging-fence + memory-propose audit), `PostToolUse` (edit validation + opt-in frontend-slop detection + loop-guard), `Stop` (session events), `SubagentStop` (telemetry), `PostToolUseFailure` (corrective context), `PostToolBatch` (wave signal + operator-steer), `SubagentStart` (telemetry), `CwdChanged` (cwd-change record).
|
|
47
|
+
|
|
48
|
+
Codex uses the curated six-event project subset `SessionStart`, `PreToolUse`, `PostToolUse`, `SubagentStart`, `SubagentStop`, and `Stop`. Claude-only events are not exposed there, and Claude Edit/Write handlers remain unwired until a real adapter translates Codex's canonical `apply_patch` payload. The manifest uses native `${PLUGIN_ROOT}` while exporting `CODEX_PLUGIN_ROOT` plus `SO_PLATFORM=codex` for shared compatibility code.
|
|
49
|
+
|
|
50
|
+
## Other surfaces
|
|
51
|
+
|
|
52
|
+
- **Output Styles (3):** `session-report`, `wave-summary`, `finding-report`.
|
|
53
|
+
- **Policy & rules:** `.orchestrator/policy/blocked-commands.json` (destructive-command rules); `.claude/rules/parallel-sessions.md` (PSA-001..PSA-004).
|
|
54
|
+
- **Codex:** `.codex-plugin/plugin.json` (tracked `+codex.<UTC timestamp>` version), compatibility config, agent role definitions, and the public marketplace/add/list lifecycle implemented by `scripts/codex-install.mjs`. Every run refreshes via `plugin add`; hook trust remains an operator decision in a fresh task through `/hooks`.
|
|
55
|
+
- **Pi:** `package.json` `pi` manifest, `pi/extensions/session-orchestrator.ts` bridge, `hooks/hooks-pi.json`, `scripts/pi-install.mjs`.
|
|
56
|
+
- **Scripts:** deterministic CLI tools (parse-config, run-quality-gate, validate-wave-scope, validate-plugin, token-audit, autopilot) plus shared lib under `scripts/lib/*.mjs`, all covered by the vitest suite.
|
|
57
|
+
|
|
58
|
+
## `/harness-audit` — Anthropic large-codebase rubric
|
|
59
|
+
|
|
60
|
+
`scripts/harness-audit.mjs` runs **9 deterministic categories / 38 checks** over a repo and emits `.orchestrator/metrics/audit.jsonl`. Category 8 ("Large-Codebase Readiness") operationalises Anthropic's [Claude Code large-codebase best-practices](https://claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start) checklist — layered `CLAUDE.md` (or `AGENTS.md`), codebase-map presence, LSP/code-intelligence wiring, scoped test/lint commands, `permissions.deny`, and root-file leanness — as scored signals you can run on yourself and on consumer repos. Category 9 ("Skill-Health Surfacing") surfaces the #648 per-skill health pipeline — telemetry hygiene, scorer wiring, and an advisory-only verdict tally that never affects points; non-adoption always scores full points. These checks are intentionally orthogonal to repo-audit's baseline-compliance pass/fail; both surfaces ship.
|
|
61
|
+
|
|
62
|
+
## Comparison vs. maestro-orchestrate
|
|
63
|
+
|
|
64
|
+
Both [`maestro-orchestrate`](https://github.com/josstei/maestro-orchestrate) and session-orchestrator coordinate multi-agent work in long-running AI coding sessions. They differ in scope and execution model:
|
|
65
|
+
|
|
66
|
+
| Axis | session-orchestrator | maestro-orchestrate |
|
|
67
|
+
|---|---|---|
|
|
68
|
+
| Execution model | 5 typed waves (Discovery → Impl-Core → Impl-Polish → Quality → Finalization) with inter-wave quality gates and confidence-scored session-reviewer | 4-phase sequential model with parallel subagents |
|
|
69
|
+
| Runtime coverage | Claude Code + Codex CLI + Cursor IDE + Pi (4) | Gemini CLI + Claude Code + Codex + Qwen Code (4) |
|
|
70
|
+
| VCS integration | GitLab + GitHub (auto-detected); hook events + commands wire to both | Runtime-agnostic; VCS work delegated to user |
|
|
71
|
+
| Cross-session learning | Confidence-scored entries surfaced at session-start; opt-in `/evolve` review | Session archival without explicit learning extraction |
|
|
72
|
+
| Specialist agents | 15 typed agents | 39 specialist agents across design/impl/review/debugging/security/compliance |
|
|
73
|
+
|
|
74
|
+
The two plugins are complementary rather than competing: session-orchestrator focuses on a single wave-based lifecycle with VCS + learning integration, while maestro-orchestrate optimises for multi-runtime parallel specialist delivery.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Cursor IDE Setup Guide
|
|
2
|
+
|
|
3
|
+
Guide for using Session Orchestrator with Cursor IDE.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
- [Cursor IDE](https://cursor.com) installed (version 1.7+ recommended for hooks support)
|
|
8
|
+
- jq installed (`brew install jq` / `apt install jq`)
|
|
9
|
+
- A project repository with git initialized
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
### Option 1: Clone and symlink (recommended)
|
|
14
|
+
```bash
|
|
15
|
+
# 1. Clone the session-orchestrator repo and install its dependencies
|
|
16
|
+
git clone https://github.com/Kanevry/session-orchestrator.git ~/Projects/session-orchestrator
|
|
17
|
+
cd ~/Projects/session-orchestrator && npm install
|
|
18
|
+
|
|
19
|
+
# 2. Symlink Cursor rules into your project
|
|
20
|
+
node ~/Projects/session-orchestrator/scripts/cursor-install.mjs /path/to/your/project
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Option 2: Manual copy
|
|
24
|
+
```bash
|
|
25
|
+
# Copy .cursor/rules/ into your project
|
|
26
|
+
cp -r path/to/session-orchestrator/.cursor/rules/ .cursor/rules/
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Configuration
|
|
30
|
+
|
|
31
|
+
### Session Config in CLAUDE.md
|
|
32
|
+
|
|
33
|
+
Cursor reads CLAUDE.md natively — no separate config file needed! Add a `## Session Config` section to your project's `CLAUDE.md`:
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
## Session Config
|
|
37
|
+
|
|
38
|
+
test-command: npm test
|
|
39
|
+
typecheck-command: npm run typecheck
|
|
40
|
+
lint-command: npm run lint
|
|
41
|
+
agents-per-wave: 6
|
|
42
|
+
waves: 5
|
|
43
|
+
persistence: true
|
|
44
|
+
enforcement: warn
|
|
45
|
+
vcs: github
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Note: `agents-per-wave` is ignored on Cursor since tasks execute sequentially (no parallel Agent dispatch).
|
|
49
|
+
|
|
50
|
+
### Hooks (Optional)
|
|
51
|
+
|
|
52
|
+
Cursor supports hooks via Settings > Hooks. Configure:
|
|
53
|
+
|
|
54
|
+
- **afterFileEdit**: Run `hooks/enforce-scope.sh` for scope enforcement (post-hoc warning)
|
|
55
|
+
- **beforeShellExecution**: Run `hooks/enforce-commands.sh` to block dangerous commands
|
|
56
|
+
|
|
57
|
+
See `hooks/hooks-cursor.json` for the hook mapping reference.
|
|
58
|
+
|
|
59
|
+
## Usage
|
|
60
|
+
|
|
61
|
+
Commands work the same as in Claude Code:
|
|
62
|
+
- `/session [housekeeping|feature|deep]` — Start a session
|
|
63
|
+
- `/go` — Execute the agreed plan
|
|
64
|
+
- `/close` — End session with verification
|
|
65
|
+
- `/plan [new|feature|retro]` — Plan a project/feature
|
|
66
|
+
- `/discovery [scope]` — Run quality probes
|
|
67
|
+
- `/evolve [analyze|review|list]` — Manage learnings
|
|
68
|
+
|
|
69
|
+
## Key Differences from Claude Code
|
|
70
|
+
|
|
71
|
+
| Aspect | Claude Code | Cursor IDE |
|
|
72
|
+
|--------|------------|------------|
|
|
73
|
+
| Interactive choices | AskUserQuestion tool | Numbered Markdown lists |
|
|
74
|
+
| Agent dispatch | Agent() tool (parallel) | Sequential execution (no subagents) |
|
|
75
|
+
| State directory | .claude/ | .cursor/ |
|
|
76
|
+
| Config file | CLAUDE.md | CLAUDE.md (same!) |
|
|
77
|
+
| Task tracking | TaskCreate/TaskUpdate | Text-based checklists |
|
|
78
|
+
| Pre-edit enforcement | PreToolUse hook (blocks) | afterFileEdit hook (warns after) |
|
|
79
|
+
| Command enforcement | PreToolUse hook (blocks) | beforeShellExecution hook (blocks) |
|
|
80
|
+
| Model | Claude via API | Model selected in Cursor settings |
|
|
81
|
+
| Plan mode | EnterPlanMode tool | Instruction-based |
|
|
82
|
+
|
|
83
|
+
## Limitations
|
|
84
|
+
|
|
85
|
+
1. **No parallel agents** — All wave tasks execute sequentially. Sessions take longer than in Claude Code.
|
|
86
|
+
2. **Post-hoc scope enforcement** — Cursor's `afterFileEdit` fires after the edit, not before. It can warn but not prevent out-of-scope edits.
|
|
87
|
+
3. **Model preference advisory** — The `model-preference-cursor` frontmatter in skills is advisory only. Select your model in Cursor settings.
|
|
88
|
+
4. **No native plugin loader** — Skills are delivered as `.cursor/rules/*.mdc` files, not loaded from a plugin directory.
|
|
89
|
+
|
|
90
|
+
## Shared Knowledge
|
|
91
|
+
|
|
92
|
+
All platforms share knowledge via `.orchestrator/metrics/`:
|
|
93
|
+
- `sessions.jsonl` — Session history (all platforms write here with a `platform` field)
|
|
94
|
+
- `learnings.jsonl` — Cross-session intelligence
|
|
95
|
+
|
|
96
|
+
Switch freely between Claude Code, Codex, and Cursor on the same project — all benefit from accumulated learnings.
|
|
97
|
+
|
|
98
|
+
## Troubleshooting
|
|
99
|
+
|
|
100
|
+
- **Rules not loading**: Ensure `.cursor/rules/` exists in your project root with `.mdc` files
|
|
101
|
+
- **Commands not recognized**: Check that `000-session-orchestrator.mdc` has `alwaysApply: true`
|
|
102
|
+
- **Hooks not firing**: Verify hooks are configured in Cursor Settings > Hooks
|
|
103
|
+
- **jq not found**: Install jq for scope enforcement hooks
|
|
104
|
+
- **State files not created**: Check `.cursor/` directory exists and is writable
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Events Schema & Naming Convention
|
|
2
|
+
|
|
3
|
+
The orchestrator emits **one** structured telemetry stream:
|
|
4
|
+
`.orchestrator/metrics/events.jsonl` (append-only NDJSON). There is no second
|
|
5
|
+
stream — `actions.jsonl` does not exist. Size-based rotation is handled once per
|
|
6
|
+
session at SessionStart (`events-rotation.mjs`).
|
|
7
|
+
|
|
8
|
+
## Canonical record shape
|
|
9
|
+
|
|
10
|
+
Every record is a single JSON line of the form:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{ "timestamp": "2026-05-28T14:35:13.123Z", "event": "orchestrator.session.ended", "...": "payload" }
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- `timestamp` — ISO-8601 UTC string (trailing `Z`). Generated by `emitEvent()`.
|
|
17
|
+
- `event` — the event name (see convention below).
|
|
18
|
+
- remaining keys — event-specific payload, shallow-merged.
|
|
19
|
+
|
|
20
|
+
## Single emission path
|
|
21
|
+
|
|
22
|
+
**All orchestrator events MUST be emitted via `emitEvent(type, payload)` from
|
|
23
|
+
`scripts/lib/events.mjs`** — never by hand-writing JSONL with `appendFile`/`jq`.
|
|
24
|
+
`emitEvent()` writes the canonical record AND fires the optional Clank Event Bus
|
|
25
|
+
webhook (when `CLANK_EVENT_SECRET` + `CLANK_EVENT_URL` are set) with the **same**
|
|
26
|
+
event name on both sides. Hand-rolled appenders drift: the JSONL and the webhook
|
|
27
|
+
end up with different names (the `stop` vs `orchestrator.session.stopped`
|
|
28
|
+
divergence that issue #609 fixed).
|
|
29
|
+
|
|
30
|
+
Shell and other non-Node emitters MUST route through the **`scripts/emit-event.mjs`**
|
|
31
|
+
CLI (`--type <name> --payload <json>` + optional `--file <path>`, plus `--json`/`--help`),
|
|
32
|
+
which wraps `emitEvent()` so they inherit the same canonical record + webhook fan-out
|
|
33
|
+
instead of `jq >> events.jsonl`. For callers that manage their own stream path,
|
|
34
|
+
`emitEvent(type, payload, { filePath })` accepts an additive optional path override
|
|
35
|
+
(default = the resolved `eventsFilePath()`); existing two-argument callers are unchanged.
|
|
36
|
+
|
|
37
|
+
## Naming convention
|
|
38
|
+
|
|
39
|
+
Orchestrator-owned events use a dotted namespace:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
orchestrator.<domain>.<verb>[.<sub>]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
- lowercase alphanumeric segments; `_` allowed *within* a segment (`quality_gate`, `propose_invoked`);
|
|
46
|
+
- at least three segments (`orchestrator` + domain + verb).
|
|
47
|
+
|
|
48
|
+
Third-party / IDE events (e.g. `tmux-layout.*`) and not-yet-migrated legacy names
|
|
49
|
+
are accepted as-is — the convention is enforced only on the `orchestrator.`
|
|
50
|
+
namespace we own. The validator + regex live in `scripts/lib/events-schema.mjs`
|
|
51
|
+
(`validateEventRecord`, `ORCHESTRATOR_EVENT_RE`), covered by
|
|
52
|
+
`tests/lib/events-schema.test.mjs`.
|
|
53
|
+
|
|
54
|
+
## Event catalog
|
|
55
|
+
|
|
56
|
+
| Event | Emitter | Hook / trigger |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| `orchestrator.session.started` | `hooks/on-session-start.mjs` | SessionStart |
|
|
59
|
+
| `orchestrator.session.ended` | `hooks/on-session-end.mjs` | SessionEnd |
|
|
60
|
+
| `orchestrator.session.stopped` | `hooks/on-stop.mjs` | Stop |
|
|
61
|
+
| `orchestrator.session.lock.acquired` | `hooks/_lib/lock-bootstrap.mjs` | SessionStart |
|
|
62
|
+
| `orchestrator.agent.stopped` | `hooks/on-stop.mjs` | SubagentStop |
|
|
63
|
+
| `orchestrator.memory.propose_invoked` | `hooks/pre-bash-memory-propose-audit.mjs` | PreToolUse(Bash) |
|
|
64
|
+
| `orchestrator.wave.started` / `.completed` | `hooks/post-tool-batch-wave-signal.mjs` | PostToolBatch — fires live via `.claude/wave-scope.json` `.wave` increase (mechanical fallback, #612); an explicit injected `wave_signal` still takes precedence |
|
|
65
|
+
| `orchestrator.quality_gate.passed` / `.failed` | `scripts/run-quality-gate.mjs` | per gate-CLI run (live) |
|
|
66
|
+
| `orchestrator.grounding.injected` | `scripts/compute-grounding-injection.sh` (via `scripts/emit-event.mjs`) | grounding injection, when `PERSISTENCE=true` |
|
|
67
|
+
| `orchestrator.handover.gated` | `skills/session-end/SKILL.md` Phase 1.65 (skill-prose, via `scripts/emit-event.mjs`) | Handover-Alignment-Gate outcome (#773). Payload: `candidates_total`, `auto_carry`, `asked`, `dropped`, `questions_asked`, `questions_answered`, `questions_deferred`, `path` (`fast_path`\|`triage`\|`weiterarbeiten`\|`fail_open`). Emitted exactly once per close — including the fail-open skip and the "Weiterarbeiten" abort — so never-measured paths become observable |
|
|
68
|
+
|
|
69
|
+
Non-orchestrator names still present in the stream: `tmux-layout.{invoked,completed,degraded}`
|
|
70
|
+
(tmux-layout skill) and `stagnation_detected`. (`grounding_injected` was migrated to
|
|
71
|
+
the dotted `orchestrator.grounding.injected` in #611 — see the catalog above.)
|
|
72
|
+
|
|
73
|
+
## Consumers
|
|
74
|
+
|
|
75
|
+
- `scripts/lib/convergence-monitor.mjs` — tails events.jsonl; reads `event_type ?? event`.
|
|
76
|
+
- `scripts/lib/tmux-layout/telemetry-stats.mjs` — filters `event.startsWith('tmux-layout.')`.
|
|
77
|
+
- `scripts/lib/events-rotation.mjs` — size-based archival.
|
|
78
|
+
- `skills/session-end/metrics-collection.md` — jq roll-ups (incl. `orchestrator.grounding.injected`).
|
|
79
|
+
|
|
80
|
+
Renaming an existing event name is a breaking change to the stream + these
|
|
81
|
+
consumers — verify with `grep` (PSA-006) and update consumers in lockstep.
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Migrating to Session Orchestrator v3.0.0
|
|
2
|
+
|
|
3
|
+
v3.0.0 swaps the Bash/zx runtime for Node.js 24+ and adds native Windows support without WSL. This guide walks through the upgrade step-by-step for each supported platform (Claude Code, Codex, Cursor IDE) and each OS (macOS, Linux, Windows).
|
|
4
|
+
|
|
5
|
+
Epic reference: [#124](https://github.com/Kanevry/session-orchestrator/issues/124). Full change list: [CHANGELOG.md](../CHANGELOG.md).
|
|
6
|
+
|
|
7
|
+
## 1. What Changes
|
|
8
|
+
|
|
9
|
+
| Area | v2.x | v3.0.0 |
|
|
10
|
+
|------|------|--------|
|
|
11
|
+
| Runtime | Bash + `jq` + zx via Bash | Node.js 24+ + zx (native `import`) |
|
|
12
|
+
| Hooks | `.sh` files in `hooks/` | `.mjs` files (ES modules) |
|
|
13
|
+
| Install step | `git clone` only | `git clone` **then** `npm install` |
|
|
14
|
+
| Windows support | Implicit via WSL / Git-Bash | Native (no wrapper shell) |
|
|
15
|
+
| CI | Ubuntu-only | Ubuntu + macOS matrix |
|
|
16
|
+
| Test framework | `bats` shell harness | `vitest` |
|
|
17
|
+
| Dependencies | `jq`, `bash`, `git` hard deps | Node 24+, `git`; `jq` optional |
|
|
18
|
+
|
|
19
|
+
Nothing about skills, commands, or session flow changes. `/session`, `/go`, `/close`, `/discovery`, `/plan`, `/evolve`, `/bootstrap`, and 17 more (see [`docs/components.md`](./components.md#commands-24)) work the same.
|
|
20
|
+
|
|
21
|
+
## 2. Prerequisites
|
|
22
|
+
|
|
23
|
+
- **Node.js 24 or later.** Check with `node --version`. Install from [nodejs.org](https://nodejs.org/) or via your package manager (`brew install node`, `winget install OpenJS.NodeJS`, `apt install nodejs`).
|
|
24
|
+
- **Git.** Any recent version.
|
|
25
|
+
- **`jq` (optional, recommended).** The scope and command enforcement policies are edited as JSON — `jq` makes that easier. No hook invokes `jq` at runtime in v3.
|
|
26
|
+
|
|
27
|
+
Optional but recommended:
|
|
28
|
+
- **`glab`** (GitLab CLI) or **`gh`** (GitHub CLI) for VCS operations — same as v2.
|
|
29
|
+
|
|
30
|
+
## 3. Upgrade Steps
|
|
31
|
+
|
|
32
|
+
### 3a. Claude Code
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 1. Pull the latest plugin
|
|
36
|
+
cd "$(claude plugin dir session-orchestrator 2>/dev/null || echo ~/.claude/plugins/session-orchestrator)"
|
|
37
|
+
git pull
|
|
38
|
+
|
|
39
|
+
# 2. Install Node dependencies
|
|
40
|
+
npm install
|
|
41
|
+
|
|
42
|
+
# 3. Restart Claude Code so hooks.json is re-read
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If you installed via `/plugin marketplace add Kanevry/session-orchestrator`, the plugin lives under `~/.claude/plugins/session-orchestrator`. If you installed from a local clone, use the clone path.
|
|
46
|
+
|
|
47
|
+
### 3b. Codex
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
cd ~/Projects/session-orchestrator
|
|
51
|
+
git pull
|
|
52
|
+
npm install
|
|
53
|
+
node scripts/codex-install.mjs
|
|
54
|
+
codex plugin list --available --json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The installer now uses Codex's public marketplace/add/list lifecycle; it does not rewrite private catalogs, configuration, caches, or hook state. It repeats `codex plugin add` on every run to refresh the installed bundle. Explicit invalidation comes from the committed `.codex-plugin/plugin.json` version suffix `+codex.<YYYYMMDDHHmmss>`, which the installer validates but never mutates.
|
|
58
|
+
|
|
59
|
+
After the list shows `session-orchestrator@kanevry` installed and enabled, start a fresh task or restart Codex, run `/hooks`, and review the bundle. Marketplace configuration, plugin installation, and hook trust remain separate states.
|
|
60
|
+
|
|
61
|
+
### 3c. Cursor IDE
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
cd ~/Projects/session-orchestrator
|
|
65
|
+
git pull
|
|
66
|
+
npm install
|
|
67
|
+
node scripts/cursor-install.mjs /path/to/your/project # re-syncs rules
|
|
68
|
+
# Restart Cursor
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 3d. Verify
|
|
72
|
+
|
|
73
|
+
After restart, run `/session housekeeping` in any configured repo. On session start you should see the host + resource health banner (new in v3). If the banner is missing or hooks report errors, see [Known Issues](#5-known-issues--workarounds) below.
|
|
74
|
+
|
|
75
|
+
## 4. What Stays the Same
|
|
76
|
+
|
|
77
|
+
None of the following change in v3. Existing data migrates transparently.
|
|
78
|
+
|
|
79
|
+
- **`.orchestrator/metrics/*.jsonl`** — learnings, sessions, events files are read-write compatible.
|
|
80
|
+
- **`<state-dir>/STATE.md`** — schema v1 frontmatter unchanged.
|
|
81
|
+
- **Session memory** (`~/.claude/projects/<project>/memory/`) — untouched.
|
|
82
|
+
- **Session Config** in `CLAUDE.md` / `AGENTS.md` / Cursor rules — same field names and defaults. New optional fields (`resource-awareness`, `resource-thresholds`, `allow-destructive-ops`, `worktree-exclude`) default to safe values.
|
|
83
|
+
- **All 24 slash commands** — same arguments, same flow. See [`docs/components.md`](./components.md#commands-24) for the full list.
|
|
84
|
+
- **Skill Markdown** — skills are still pure Markdown with YAML frontmatter; no build step.
|
|
85
|
+
- **VCS integration** — `glab` / `gh` commands, label taxonomy, issue templates.
|
|
86
|
+
|
|
87
|
+
## 5. Known Issues & Workarounds
|
|
88
|
+
|
|
89
|
+
### `npm install` fails with `ERESOLVE` or peer-dep warnings
|
|
90
|
+
|
|
91
|
+
Use Node.js 24 or later, matching `package.json` (`engines.node: ">=24.0.0"`). Confirm `node --version` reports a supported runtime before retrying. If the error persists:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm install --legacy-peer-deps
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Windows: hooks silently no-op after install
|
|
98
|
+
|
|
99
|
+
Make sure `node` is on your `PATH` inside the editor process (not just in your terminal). On Windows, Claude Code inherits PATH from the launching shell — if you installed Node via nvm-windows or fnm, relaunch the editor from a shell that has the runtime on PATH.
|
|
100
|
+
|
|
101
|
+
Verify from inside Claude Code: `!node --version` should print `v24.x` or later.
|
|
102
|
+
|
|
103
|
+
### EOL issues on Windows (autocrlf)
|
|
104
|
+
|
|
105
|
+
v3 ships `.gitattributes` with explicit LF rules for `.sh`, `.mjs`, `.md`, `.json`, and `.yaml`. If you cloned before v3, run:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
git config core.autocrlf false
|
|
109
|
+
git rm --cached -r .
|
|
110
|
+
git reset --hard
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
This re-checks out every file with the correct line endings. Back up any uncommitted work first.
|
|
114
|
+
|
|
115
|
+
### Permission errors on hook scripts (macOS / Linux)
|
|
116
|
+
|
|
117
|
+
Pre-v3, hook `.sh` files needed `+x`. v3 `.mjs` files are invoked via `node <path>`, so the executable bit is not required. If your editor reports `Permission denied` on a hook, it is pointing at a stale `.sh` path — re-run the install script for your platform (`scripts/codex-install.mjs`, `scripts/cursor-install.mjs`) or re-add the plugin in Claude Code.
|
|
118
|
+
|
|
119
|
+
### `zx` not found
|
|
120
|
+
|
|
121
|
+
Run `npm install` from the plugin root. The `zx` package is listed under `dependencies` (not `devDependencies`), so it installs in production trees too. If you run `npm install --production` explicitly, zx is still installed — it is only missing if you ran `npm ci --only=dev` or manually pruned runtime deps.
|
|
122
|
+
|
|
123
|
+
### Hooks report `SyntaxError: Cannot use import statement outside a module`
|
|
124
|
+
|
|
125
|
+
Your Node version is below 24 or your `package.json` is missing `"type": "module"`. Verify that `node --version` satisfies `engines.node >=24` and that `jq '.type' package.json` returns `"module"`.
|
|
126
|
+
|
|
127
|
+
## 6. Rollback
|
|
128
|
+
|
|
129
|
+
If v3 causes blocking problems and you need to revert to v2.x:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
cd /path/to/session-orchestrator
|
|
133
|
+
git fetch --tags
|
|
134
|
+
git checkout v2.0.0
|
|
135
|
+
rm -rf node_modules package-lock.json # v2 does not use these
|
|
136
|
+
# Restart your editor
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
v2.x state files (`STATE.md`, `sessions.jsonl`, `learnings.jsonl`) remain readable on rollback — the formats are stable across the 2.x → 3.0 transition.
|
|
140
|
+
|
|
141
|
+
Please open an issue (link below) describing the blocker so we can address it in a v3.0.x patch.
|
|
142
|
+
|
|
143
|
+
## 7. Support
|
|
144
|
+
|
|
145
|
+
- **GitHub:** [Kanevry/session-orchestrator/issues](https://github.com/Kanevry/session-orchestrator/issues) — preferred for bugs and feature requests.
|
|
146
|
+
- **Homepage:** [session-orchestrator.example.com](https://session-orchestrator.example.com)
|
|
147
|
+
|
|
148
|
+
Please include `node --version`, your OS + arch, the editor (Claude Code / Codex / Cursor), and a minimal reproduction when filing a bug. For hook failures, attach the relevant entries from `.orchestrator/metrics/events.jsonl`.
|