@khoavu882/doflow 2.0.0-beta.4 → 2.0.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/README.md +12 -11
- package/bin/doflow.js +21 -11
- package/core/.antigravity-plugin/plugin.json +1 -3
- package/core/.claude-plugin/plugin.json +1 -1
- package/core/.codex-plugin/plugin.json +1 -1
- package/core/.plugin/plugin.json +1 -1
- package/core/harnesses/claude/hooks/lib.sh +43 -24
- package/core/harnesses/claude/hooks/mcp-tool-guard.sh +7 -17
- package/core/harnesses/claude/hooks/permission-audit.sh +3 -0
- package/core/harnesses/claude/hooks/post-compact.sh +35 -32
- package/core/harnesses/claude/hooks/post-edit-lint.sh +2 -0
- package/core/harnesses/claude/hooks/post-shell-observe.sh +48 -0
- package/core/harnesses/claude/hooks/post-tool-failure.sh +3 -0
- package/core/harnesses/claude/hooks/pre-bash-guard.sh +7 -17
- package/core/harnesses/claude/hooks/pre-compact.sh +23 -27
- package/core/harnesses/claude/hooks/pre-implement-gate.sh +7 -18
- package/core/harnesses/claude/hooks/session-end.sh +23 -10
- package/core/harnesses/claude/hooks/session-start.sh +5 -3
- package/core/harnesses/claude/hooks/skill-config-audit.sh +3 -0
- package/core/harnesses/claude/hooks/stop-check.sh +5 -3
- package/core/harnesses/claude/hooks/subagent-audit.sh +5 -5
- package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -3
- package/core/harnesses/claude/settings/settings.json +18 -0
- package/core/harnesses/claude/statusline/doflow-statusline.sh +1 -0
- package/core/harnesses/codex/agents/core-implementer.toml +1 -0
- package/core/harnesses/codex/agents/delivery-lead.toml +10 -0
- package/core/harnesses/codex/agents/quality-guardian.toml +1 -1
- package/core/harnesses/codex/agents/research-writer.toml +1 -1
- package/core/harnesses/codex/agents/reviewer.toml +10 -0
- package/core/harnesses/codex/agents/spec-analyst.toml +1 -1
- package/core/harnesses/codex/agents/system-architect.toml +1 -1
- package/core/harnesses/codex/hooks/lib.sh +44 -25
- package/core/harnesses/codex/hooks/mcp-tool-guard.sh +7 -15
- package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +3 -1
- package/core/harnesses/codex/hooks/pre-bash-guard.sh +7 -15
- package/core/harnesses/codex/hooks/pre-compact.impl.sh +29 -26
- package/core/harnesses/codex/hooks/pre-implement-gate.sh +7 -16
- package/core/harnesses/codex/hooks/session-end.impl.sh +23 -10
- package/core/harnesses/codex/hooks/session-start.sh +5 -3
- package/core/harnesses/codex/hooks/stop-check.sh +6 -5
- package/core/harnesses/codex/hooks/subagent-audit.sh +18 -6
- package/core/harnesses/codex/hooks/user-prompt-submit.sh +5 -4
- package/core/harnesses/copilot/hooks/doflow-lib.sh +93 -0
- package/core/harnesses/copilot/hooks/doflow-mcp-tool-guard.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-pre-bash-guard.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-pre-implement-gate.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-session-start.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-stop-check.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-subagent-start.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow-subagent-stop.sh +9 -0
- package/core/harnesses/copilot/hooks/doflow.json +57 -0
- package/core/harnesses/kiro/agents/doflow.json +1 -1
- package/core/harnesses/kiro/hooks/lib.sh +26 -6
- package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +21 -5
- package/core/harnesses/kiro/hooks/pre-bash-guard.sh +21 -5
- package/core/harnesses/kiro/hooks/pre-implement-gate.sh +21 -5
- package/core/harnesses/kiro/hooks/session-start.sh +12 -5
- package/core/harnesses/kiro/hooks/stop-check.sh +22 -30
- package/core/harnesses/pi/extensions/doflow-guard.js +167 -0
- package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +27 -12
- package/core/harnesses/shared/hooks/adapters/antigravity.js +14 -57
- package/core/harnesses/shared/hooks/bridge/bridge.sh +277 -0
- package/core/harnesses/shared/hooks/bridge/envelope.jq +129 -0
- package/core/harnesses/shared/hooks/bridge/observe-model.sh +75 -0
- package/core/harnesses/shared/hooks/bridge/respond.sh +70 -0
- package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +28 -14
- package/core/harnesses/shared/hooks/policies/capture-failure.sh +51 -16
- package/core/harnesses/shared/hooks/policies/compact-text.sh +46 -0
- package/core/harnesses/shared/hooks/policies/contract.sh +78 -0
- package/core/harnesses/shared/hooks/policies/deny-json.sh +35 -9
- package/core/harnesses/shared/hooks/policies/emission-rules.sh +37 -0
- package/core/harnesses/shared/hooks/policies/emission.jq +209 -0
- package/core/harnesses/shared/hooks/policies/emission.sh +383 -0
- package/core/harnesses/shared/hooks/policies/identity.sh +177 -0
- package/core/harnesses/shared/hooks/policies/lib.sh +65 -40
- package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +48 -35
- package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +284 -33
- package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +180 -110
- package/core/harnesses/shared/hooks/policies/session-context.sh +66 -7
- package/core/harnesses/shared/hooks/policies/stop-check.sh +61 -23
- package/core/harnesses/shared/hooks/policies/subagent-audit.sh +39 -6
- package/core/harnesses/shared/hooks/policies/summary-store.sh +347 -0
- package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +97 -159
- package/core/harnesses/shared/hooks/stream-hook-runner.js +114 -187
- package/core/harnesses/shared/locator/doflow-run +2 -3
- package/core/registry/advice.json +3 -3
- package/core/registry/assets.json +72 -80
- package/core/registry/capabilities.json +12 -0
- package/core/registry/contracts.json +60 -33
- package/core/registry/contribution-points.json +32 -0
- package/core/registry/gates.json +32 -0
- package/core/registry/guidance-caps.json +40 -0
- package/core/registry/harnesses.json +1542 -277
- package/core/registry/lifecycle.json +2837 -37
- package/core/registry/mcp.json +5 -1
- package/core/registry/models.json +7 -1
- package/core/registry/package-templates/README.md +19 -0
- package/core/registry/package-templates/agent/files/agent.md +9 -0
- package/core/registry/package-templates/agent/template.json +4 -0
- package/core/registry/package-templates/capability-provider/files/provider.json +9 -0
- package/core/registry/package-templates/capability-provider/template.json +11 -0
- package/core/registry/package-templates/debate-preset/files/preset.json +26 -0
- package/core/registry/package-templates/debate-preset/template.json +4 -0
- package/core/registry/package-templates/review-preset/files/preset.json +30 -0
- package/core/registry/package-templates/review-preset/template.json +4 -0
- package/core/registry/package-templates/skill/files/SKILL.md +8 -0
- package/core/registry/package-templates/skill/template.json +4 -0
- package/core/registry/package-templates/worker/files/worker.json +92 -0
- package/core/registry/package-templates/worker/template.json +11 -0
- package/core/registry/packages/doflow/doflow-package.json +15 -0
- package/core/registry/packages/doflow/presets/debate-3.json +26 -0
- package/core/registry/protocols.json +61 -0
- package/core/registry/routes.json +17 -0
- package/core/registry/rules.json +431 -0
- package/core/registry/settings.json +276 -0
- package/core/registry/storage.json +701 -30
- package/core/registry/telemetry.json +236 -0
- package/core/registry/transcripts.json +142 -0
- package/core/registry/verification.json +76 -1
- package/core/registry/workflows.json +55 -0
- package/core/shared/agent-specs/core-implementer.md +3 -0
- package/core/shared/agent-specs/delivery-lead.md +68 -0
- package/core/shared/agent-specs/quality-guardian.md +5 -1
- package/core/shared/agent-specs/research-writer.md +10 -3
- package/core/shared/agent-specs/reviewer.md +53 -0
- package/core/shared/agent-specs/spec-analyst.md +5 -6
- package/core/shared/agent-specs/system-architect.md +5 -1
- package/core/shared/guidance/DOFLOW_CORE.md +1 -5
- package/core/shared/guidance/modes/MODE_DeepResearch.md +1 -1
- package/core/shared/guidance/modes/MODE_Orchestration.md +4 -3
- package/core/shared/guidance/modes/MODE_Task_Management.md +14 -14
- package/core/shared/guidance/pointers/codex.md +1 -4
- package/core/shared/guidance/references/ARTIFACT_FORMAT.md +30 -16
- package/core/shared/guidance/references/ARTIFACT_VOICE.md +3 -2
- package/core/shared/guidance/references/CONSTITUTION_BASE.md +17 -15
- package/core/shared/guidance/references/DIAGRAM_GUIDE.md +1 -1
- package/core/shared/guidance/references/DOFLOW_CHAIN.md +17 -19
- package/core/shared/guidance/references/EVIDENCE_LEDGER.md +7 -8
- package/core/shared/guidance/references/MODEL_SELECTION.md +5 -3
- package/core/shared/guidance/references/ORCHESTRATION.md +1 -2
- package/core/shared/guidance/rules/RULES.md +45 -0
- package/core/shared/scripts/doflow/bash/do-args.sh +37 -0
- package/core/shared/scripts/doflow/bash/do-exec-paths.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-git-state.sh +15 -4
- package/core/shared/scripts/doflow/bash/do-parallel-check.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-paths.sh +40 -2
- package/core/shared/scripts/doflow/bash/do-prereqs.sh +2 -1
- package/core/shared/scripts/doflow/bash/do-review-package.sh +4 -0
- package/core/shared/scripts/doflow/bash/do-task-brief.sh +58 -16
- package/core/shared/scripts/doflow/bash/render-audit.sh +26 -2
- package/core/shared/scripts/doflow/bash/render-diagrams.sh +1 -0
- package/core/shared/scripts/doflow/bash/render-puml.sh +2 -1
- package/core/shared/scripts/doflow/bash/validate-artifacts.sh +48 -4
- package/core/shared/scripts/doflow/bin/doflow-run +154 -35
- package/core/shared/skills/do/SKILL.md +12 -10
- package/core/shared/skills/do/references/advice_calls.md +26 -0
- package/core/shared/skills/do/references/pm_routing.md +1 -2
- package/core/shared/skills/do/references/program_mode.md +31 -0
- package/core/shared/skills/do-brainstorm/SKILL.md +20 -74
- package/core/shared/skills/do-brainstorm/references/handoff_branches.md +35 -0
- package/core/shared/skills/do-brainstorm/references/intent_seed.md +21 -0
- package/core/shared/skills/do-brainstorm/references/round_log.md +17 -0
- package/core/shared/skills/do-code-review/SKILL.md +41 -144
- package/core/shared/skills/do-code-review/content-types/markdown.md +24 -2
- package/core/shared/skills/do-code-review/references/tools.md +90 -0
- package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +549 -7
- package/core/shared/skills/do-design/SKILL.md +24 -23
- package/core/shared/skills/do-diagnose/SKILL.md +14 -4
- package/core/shared/skills/do-document/SKILL.md +11 -1
- package/core/shared/skills/do-document/references/deep_research.md +1 -2
- package/core/shared/skills/do-document/references/embedded-research.md +18 -6
- package/core/shared/skills/do-document/references/implementation-flow.md +5 -6
- package/core/shared/skills/do-execute-plan/SKILL.md +17 -59
- package/core/shared/skills/do-execute-plan/references/handoff_record.md +7 -2
- package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +13 -0
- package/core/shared/skills/do-execute-plan/references/readiness_gate.md +28 -1
- package/core/shared/skills/do-execute-plan/references/run_position.md +13 -1
- package/core/shared/skills/do-execute-plan/references/scaffold.md +17 -9
- package/core/shared/skills/do-execute-plan/references/state_checkpoint.md +11 -0
- package/core/shared/skills/do-execute-plan/references/task_attempts.md +78 -24
- package/core/shared/skills/do-flow/SKILL.md +8 -9
- package/core/shared/skills/do-flow/references/task_classes.md +2 -2
- package/core/shared/skills/do-git/SKILL.md +4 -0
- package/core/shared/skills/do-implement/SKILL.md +7 -9
- package/core/shared/skills/do-plan/SKILL.md +29 -19
- package/core/shared/skills/do-test/SKILL.md +7 -4
- package/core/shared/templates/doflow/constitution-template.md +9 -3
- package/core/shared/templates/doflow/data-model-template.md +1 -1
- package/core/shared/templates/doflow/design-template.md +113 -16
- package/core/shared/templates/doflow/plan-template.md +11 -10
- package/core/shared/templates/doflow/question-log-template.md +14 -2
- package/core/shared/templates/doflow/requirement-template.md +1 -1
- package/core/worker-evidence/antigravity/checks.json +14 -0
- package/core/worker-evidence/codex/2026-10-18-cli-check.json +107 -0
- package/core/worker-evidence/codex/2026-10-18-live-run-edit.json +73 -0
- package/core/worker-evidence/codex/2026-10-18-live-run-read-only.json +62 -0
- package/core/worker-evidence/codex/2026-10-24-cli-check.json +126 -0
- package/core/worker-evidence/codex/checks.json +38 -0
- package/package.json +10 -6
- package/src/adapters/antigravity/index.js +226 -113
- package/src/adapters/claude/index.js +39 -5
- package/src/adapters/codex/agents.js +25 -15
- package/src/adapters/codex/hooks.js +40 -5
- package/src/adapters/codex/index.js +100 -22
- package/src/adapters/codex/native-projection.js +6 -2
- package/src/adapters/copilot/index.js +58 -23
- package/src/adapters/copy-tree.js +294 -48
- package/src/adapters/guidance-manifest.js +71 -0
- package/src/adapters/guidance-pointer.js +19 -0
- package/src/adapters/hook-commands.js +6 -10
- package/src/adapters/index.js +1 -0
- package/src/adapters/kiro/index.js +38 -13
- package/src/adapters/opencode/index.js +8 -8
- package/src/adapters/pi/hooks.js +120 -0
- package/src/adapters/pi/index.js +48 -16
- package/src/adapters/resolve-source.js +26 -2
- package/src/cli/commands/install.js +3 -2
- package/src/cli/commands/reconcile.js +53 -9
- package/src/cli/commands/remove.js +2 -2
- package/src/cli/commands/rollback.js +6 -3
- package/src/cli/commands/self-update.js +18 -9
- package/src/cli/commands/status.js +21 -2
- package/src/cli/commands/ui.js +99 -0
- package/src/cli/commands/update.js +3 -2
- package/src/cli/index.js +338 -33
- package/src/cli/runtime-commands.js +243 -52
- package/src/cli/shared.js +0 -2
- package/src/helper/git.js +1 -1
- package/src/helper/guardrails.js +1 -1
- package/src/helper/marker-merge.js +31 -13
- package/src/helper/package-ids.js +37 -0
- package/src/helper/semver.js +94 -0
- package/src/install/backup.js +105 -15
- package/src/install/context.js +1 -1
- package/src/install/targets.js +31 -16
- package/src/lifecycle/coverage.js +74 -0
- package/src/lifecycle/hook-step.js +61 -0
- package/src/lifecycle/hook-tier.js +160 -0
- package/src/lifecycle/index.js +434 -86
- package/src/lifecycle/retired-harnesses.js +318 -0
- package/src/lifecycle/view.js +35 -15
- package/src/registry/index.js +686 -32
- package/src/registry/worker-ids.js +45 -0
- package/src/release/build-package.js +0 -3
- package/src/release/docs-blocks.js +492 -0
- package/src/release/preflight.js +425 -0
- package/src/release/rehearse.js +401 -0
- package/src/release/release-workflow.js +733 -0
- package/src/release/sync-plugin-versions.js +43 -7
- package/src/runtime/advice/bench-gate.js +25 -0
- package/src/runtime/advice/cli.js +59 -16
- package/src/runtime/advice/client.js +32 -9
- package/src/runtime/advice/config.js +98 -133
- package/src/runtime/advice/doctor.js +1 -1
- package/src/runtime/advice/elevation.js +97 -0
- package/src/runtime/advice/endpoint-guard.js +9 -3
- package/src/runtime/advice/mode.js +37 -0
- package/src/runtime/advice/record.js +18 -5
- package/src/runtime/advice/registry.js +4 -1
- package/src/runtime/advice/shadow-config.js +229 -0
- package/src/runtime/advice/shadow-dispatcher.js +276 -0
- package/src/runtime/brief-rules.js +81 -0
- package/src/runtime/brief-tools.js +111 -34
- package/src/runtime/candidate.js +514 -0
- package/src/runtime/capabilities/executor.js +450 -0
- package/src/runtime/capabilities/loopback.js +41 -0
- package/src/runtime/capabilities/sanitizer.js +88 -0
- package/src/runtime/capability-router.js +135 -3
- package/src/runtime/checkouts.js +73 -11
- package/src/runtime/claims.js +27 -12
- package/src/runtime/cli-result.js +11 -4
- package/src/runtime/cli.js +221 -277
- package/src/runtime/config-home.js +42 -0
- package/src/runtime/context/arbitrate.js +767 -0
- package/src/runtime/context/budget.js +203 -0
- package/src/runtime/context/compose.js +1367 -0
- package/src/runtime/context/delivery-store.js +100 -0
- package/src/runtime/context/emission-rules.js +118 -0
- package/src/runtime/context/identity.js +227 -0
- package/src/runtime/context/mandatory.js +594 -0
- package/src/runtime/context/pointer.js +142 -0
- package/src/runtime/context/primary-command.js +117 -0
- package/src/runtime/context/primary.js +344 -0
- package/src/runtime/context/summary-store.js +655 -0
- package/src/runtime/context-pack.js +1106 -245
- package/src/runtime/decision-register.js +13 -4
- package/src/runtime/dispatch/admission.js +392 -0
- package/src/runtime/dispatch/attempt-end.js +274 -0
- package/src/runtime/dispatch/command.js +628 -0
- package/src/runtime/dispatch/controls.js +904 -0
- package/src/runtime/dispatch/envelope.js +276 -0
- package/src/runtime/dispatch/grants.js +310 -0
- package/src/runtime/dispatch/integrate.js +617 -0
- package/src/runtime/dispatch/loop.js +1835 -0
- package/src/runtime/dispatch/store.js +352 -0
- package/src/runtime/dispatch/verify-run.js +201 -0
- package/src/runtime/evidence-fields.js +39 -0
- package/src/runtime/evidence-ledger.js +41 -7
- package/src/runtime/failure/capture.js +3 -1
- package/src/runtime/failure/cli.js +25 -9
- package/src/runtime/failure/home.js +57 -30
- package/src/runtime/failure/store.js +7 -2
- package/src/runtime/feature-pointer.js +174 -0
- package/src/runtime/feature-resolve.js +13 -2
- package/src/runtime/fleet/command.js +77 -0
- package/src/runtime/fleet/projects.js +178 -0
- package/src/runtime/fleet/tree.js +383 -0
- package/src/runtime/freshness.js +77 -10
- package/src/runtime/git-memo.js +46 -0
- package/src/runtime/guidance/ablation.js +427 -0
- package/src/runtime/health.js +565 -17
- package/src/runtime/history-compactor.js +13 -3
- package/src/runtime/implementation-gate.js +277 -22
- package/src/runtime/inventory/coverage.js +1 -1
- package/src/runtime/inventory/index.js +1 -1
- package/src/runtime/inventory/precedence.js +2 -2
- package/src/runtime/inventory/siblings.js +6 -4
- package/src/runtime/knowledge/code-corpus.js +277 -0
- package/src/runtime/knowledge/code-lexical.js +130 -0
- package/src/runtime/knowledge/code-retrieval.js +307 -0
- package/src/runtime/knowledge/code-validation.js +106 -0
- package/src/runtime/knowledge/gp3-gate.js +74 -0
- package/src/runtime/knowledge/graph-adapter.js +288 -0
- package/src/runtime/knowledge/graph-fallback.js +394 -0
- package/src/runtime/knowledge/hybrid.js +136 -8
- package/src/runtime/knowledge/retrieval.js +34 -1
- package/src/runtime/knowledge/rtk-compress.js +77 -0
- package/src/runtime/knowledge/semble-bridge.py +106 -0
- package/src/runtime/knowledge/semble-lifecycle.js +114 -0
- package/src/runtime/knowledge/semble-provider.js +365 -0
- package/src/runtime/lifecycle/cli.js +16 -6
- package/src/runtime/lifecycle/event-store.js +8 -6
- package/src/runtime/lifecycle/followup.js +6 -1
- package/src/runtime/lifecycle/overview.js +24 -1
- package/src/runtime/lifecycle/report-store.js +8 -10
- package/src/runtime/lifecycle/retention.js +95 -31
- package/src/runtime/lifecycle/root.js +9 -1
- package/src/runtime/lifecycle/status.js +34 -17
- package/src/runtime/lifecycle/store-upkeep.js +56 -7
- package/src/runtime/mask.js +134 -7
- package/src/runtime/mcp-consultations.js +40 -6
- package/src/runtime/model-router.js +79 -7
- package/src/runtime/models/catalogue.js +191 -0
- package/src/runtime/models/command.js +153 -0
- package/src/runtime/off-words.js +12 -0
- package/src/runtime/outcome.js +3 -3
- package/src/runtime/packages/command.js +1009 -0
- package/src/runtime/packages/contributions.js +116 -0
- package/src/runtime/packages/digest.js +132 -0
- package/src/runtime/packages/fetch.js +182 -0
- package/src/runtime/packages/grants.js +192 -0
- package/src/runtime/packages/index-file.js +134 -0
- package/src/runtime/packages/instruction.js +90 -0
- package/src/runtime/packages/manifest.js +331 -0
- package/src/runtime/packages/points.js +477 -0
- package/src/runtime/packages/programs.js +216 -0
- package/src/runtime/packages/scaffold.js +277 -0
- package/src/runtime/packages/source.js +90 -0
- package/src/runtime/packages/state.js +164 -0
- package/src/runtime/packages/store.js +449 -0
- package/src/runtime/packages/tar.js +106 -0
- package/src/runtime/packages/view.js +406 -0
- package/src/runtime/plan-check.js +59 -0
- package/src/runtime/plan-content.js +324 -0
- package/src/runtime/policy-init.js +118 -0
- package/src/runtime/profiles/doctor.js +96 -0
- package/src/runtime/profiles/resolve.js +244 -0
- package/src/runtime/profiles/rollback.js +254 -0
- package/src/runtime/profiles/sampler.js +41 -0
- package/src/runtime/readiness-record.js +16 -11
- package/src/runtime/readiness.js +127 -16
- package/src/runtime/research-request.js +50 -25
- package/src/runtime/retrieval-plan.js +402 -73
- package/src/runtime/retrieval-record.js +293 -0
- package/src/runtime/review/command.js +246 -0
- package/src/runtime/review/dominance.js +68 -0
- package/src/runtime/review/findings.js +434 -0
- package/src/runtime/review/identity.js +255 -0
- package/src/runtime/review/protocol-command.js +109 -0
- package/src/runtime/review/protocols.js +405 -0
- package/src/runtime/review/resolve-protocol.js +302 -0
- package/src/runtime/review/start.js +530 -0
- package/src/runtime/roadmap/facts.js +479 -0
- package/src/runtime/roadmap/gates.js +270 -0
- package/src/runtime/roadmap/loop.js +1636 -0
- package/src/runtime/roadmap/merge.js +381 -0
- package/src/runtime/roadmap/rows.js +1113 -0
- package/src/runtime/roadmap/seed.js +951 -0
- package/src/runtime/rules-report.js +336 -0
- package/src/runtime/scaffold/artifacts.js +63 -9
- package/src/runtime/scaffold/generate.js +21 -9
- package/src/runtime/settings/autopilot.js +106 -0
- package/src/runtime/settings/cli.js +280 -0
- package/src/runtime/settings/config-write.js +314 -0
- package/src/runtime/settings/files.js +271 -0
- package/src/runtime/settings/legacy.js +154 -0
- package/src/runtime/settings/lexical.js +56 -0
- package/src/runtime/settings/prepared-run.js +269 -0
- package/src/runtime/settings/project-layers.js +118 -0
- package/src/runtime/settings/refs.js +288 -0
- package/src/runtime/settings/registry.js +553 -0
- package/src/runtime/settings/resolve.js +713 -0
- package/src/runtime/settings/shared.js +37 -0
- package/src/runtime/settings/worker-billing.js +107 -0
- package/src/runtime/settings/write.js +269 -0
- package/src/runtime/slot-command.js +78 -0
- package/src/runtime/slots.js +671 -0
- package/src/runtime/source-version.js +290 -0
- package/src/runtime/state-root.js +217 -0
- package/src/runtime/storage/cli.js +12 -5
- package/src/runtime/storage/engine.js +9 -2
- package/src/runtime/storage/registry.js +14 -1
- package/src/runtime/storage/roots.js +66 -16
- package/src/runtime/storage/rules.js +82 -10
- package/src/runtime/storage/upkeep.js +10 -2
- package/src/runtime/storage/work-status.js +245 -26
- package/src/runtime/task-attempts.js +589 -69
- package/src/runtime/task-classifier.js +47 -11
- package/src/runtime/task-graph.js +373 -0
- package/src/runtime/task-run.js +778 -0
- package/src/runtime/task-scope.js +202 -56
- package/src/runtime/task-sources.js +147 -0
- package/src/runtime/task-state.js +440 -65
- package/src/runtime/team/admission.js +301 -0
- package/src/runtime/team/envelope.js +324 -0
- package/src/runtime/team/review-guard.js +156 -0
- package/src/runtime/trace/analyze.js +427 -0
- package/src/runtime/trace/baseline.js +770 -0
- package/src/runtime/trace/ledger.js +63 -140
- package/src/runtime/trace/otlp-export.js +568 -0
- package/src/runtime/trace/otlp-map.js +481 -0
- package/src/runtime/trace/spans.js +745 -0
- package/src/runtime/trace/telemetry.js +225 -0
- package/src/runtime/trace/views.js +1 -0
- package/src/runtime/transcripts/command.js +98 -0
- package/src/runtime/transcripts/cursor.js +326 -0
- package/src/runtime/transcripts/read.js +126 -0
- package/src/runtime/transcripts/readers/claude-jsonl.js +74 -0
- package/src/runtime/transcripts/readers/codex-rollout.js +70 -0
- package/src/runtime/transcripts/readers/copilot-events.js +90 -0
- package/src/runtime/transcripts/readers/kiro-jsonl.js +77 -0
- package/src/runtime/transcripts/readers/pi-jsonl.js +59 -0
- package/src/runtime/transcripts/registry.js +161 -0
- package/src/runtime/transcripts/stats.js +161 -0
- package/src/runtime/verification/check-key.js +628 -0
- package/src/runtime/verification/contract-runner.js +546 -11
- package/src/runtime/verification/engine.js +499 -9
- package/src/runtime/verification/impact.js +617 -0
- package/src/runtime/verification/inflight.js +205 -0
- package/src/runtime/verification/registry.js +176 -0
- package/src/runtime/verification/reuse.js +184 -0
- package/src/runtime/verification/telemetry-emit.js +254 -0
- package/src/runtime/verification/test-selection.js +67 -7
- package/src/runtime/worker/active.js +90 -0
- package/src/runtime/worker/cancel.js +222 -0
- package/src/runtime/worker/catalogue.js +122 -0
- package/src/runtime/worker/command.js +677 -0
- package/src/runtime/worker/evidence.js +288 -0
- package/src/runtime/worker/launch.js +288 -0
- package/src/runtime/worker/models.js +137 -0
- package/src/runtime/worker/parsers.js +218 -0
- package/src/runtime/worker/probes/index.js +706 -0
- package/src/runtime/worker/process-tree.js +415 -0
- package/src/runtime/worker/quota.js +43 -0
- package/src/runtime/worker/readiness.js +713 -0
- package/src/runtime/worker/run-store.js +166 -0
- package/src/runtime/worker/supervisor.js +541 -0
- package/src/runtime/worker/worktree-check.js +252 -0
- package/src/runtime/workflow-engine.js +5 -1
- package/src/runtime/workflow-orchestrator.js +578 -63
- package/src/runtime/worktree.js +149 -22
- package/src/state/index.js +1 -1
- package/src/state/lockfile.js +64 -10
- package/src/state/run-lock.js +1 -1
- package/types/node-commonjs.d.ts +106 -7
- package/core/.antigravity-plugin/hooks.json +0 -39
- package/core/harnesses/gemini/hooks/hooks.json +0 -77
- package/core/harnesses/gemini/hooks/lib.sh +0 -302
- package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +0 -21
- package/core/harnesses/gemini/hooks/post-edit-lint.sh +0 -39
- package/core/harnesses/gemini/hooks/pre-bash-guard.sh +0 -21
- package/core/harnesses/gemini/hooks/pre-compact.sh +0 -38
- package/core/harnesses/gemini/hooks/pre-implement-gate.sh +0 -22
- package/core/harnesses/gemini/hooks/session-end.impl.sh +0 -89
- package/core/harnesses/gemini/hooks/session-end.sh +0 -5
- package/core/harnesses/gemini/hooks/session-start.sh +0 -5
- package/core/harnesses/gemini/settings/adapter-defaults.json +0 -4
- package/core/harnesses/shared/hooks/adapters/arg-fields.js +0 -19
- package/core/harnesses/shared/hooks/adapters/gemini.js +0 -114
- package/core/harnesses/shared/hooks/hooks.json +0 -47
- package/core/shared/guidance/FLAGS.md +0 -25
- package/core/shared/guidance/rules/RULE_01_SAFETY.md +0 -25
- package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +0 -23
- package/core/shared/guidance/rules/RULE_03_QUALITY.md +0 -14
- package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +0 -46
- package/src/adapters/gemini/hooks.js +0 -210
- package/src/adapters/gemini/index.js +0 -390
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex front door:
|
|
3
|
-
|
|
4
|
-
set -euo pipefail
|
|
2
|
+
# Codex front door: user-prompt-submit through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
5
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
6
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge codex UserPromptSubmit user-prompt-submit
|
|
7
|
+
exit $?
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front-door helpers: translate a camelCase Copilot hook payload into the canonical
|
|
3
|
+
# Claude-style payload the shared lifecycle bridge and policies read, and render nothing else.
|
|
4
|
+
# Installed by the doflow CLI and overwritten on update; do not edit an installed copy.
|
|
5
|
+
#
|
|
6
|
+
# Payload facts are from the live capture of 2026-10-27 (Copilot CLI 1.0.103), not the docs alone:
|
|
7
|
+
# - camelCase fields: sessionId, toolName, toolArgs, transcriptPath, agentId, agentType, parentAgentId
|
|
8
|
+
# - toolArgs arrives as a JSON OBJECT for bash/skill/task and as a raw STRING for apply_patch (the
|
|
9
|
+
# freeform patch text). The docs type it `unknown`; this accepts an object, a JSON string and a
|
|
10
|
+
# raw string.
|
|
11
|
+
# - tool names are lowercase: bash, apply_patch, edit, task, skill
|
|
12
|
+
|
|
13
|
+
# copilot_bridge_payload <event>: native payload on stdin, canonical payload on stdout. <event> is
|
|
14
|
+
# the PascalCase name the bridge and policies know (PreToolUse, Stop, SessionStart, ...). When jq is
|
|
15
|
+
# missing or rejects the payload the original payload is printed unchanged.
|
|
16
|
+
# - tool_name: bash|powershell -> Bash, edit -> Edit, create -> Write, apply_patch stays; any
|
|
17
|
+
# other name passes through unchanged, so an unmapped tool fails open as it does without a bridge
|
|
18
|
+
# - tool_input: toolArgs as an object (a JSON string is parsed; any other string becomes
|
|
19
|
+
# {command: <string>}, which is where the shared policies read an apply_patch body); for Edit
|
|
20
|
+
# and Write tool_input.file_path is copied from path, filePath, filename or target_file when
|
|
21
|
+
# absent (only path and file_path are captured; an edit whose target is still undecodable is
|
|
22
|
+
# denied by the bridge, not allowed)
|
|
23
|
+
# - response (subagentStop) -> last_assistant_message
|
|
24
|
+
copilot_bridge_payload() {
|
|
25
|
+
local event="${1:-}" payload rewritten
|
|
26
|
+
payload=$(cat)
|
|
27
|
+
if command -v jq >/dev/null 2>&1 \
|
|
28
|
+
&& rewritten=$(printf '%s' "$payload" | jq -c --arg event "$event" '
|
|
29
|
+
(.toolName // .tool_name // "") as $raw
|
|
30
|
+
| ($raw | ascii_downcase) as $t
|
|
31
|
+
| (if $t == "bash" or $t == "powershell" then "Bash"
|
|
32
|
+
elif $t == "edit" then "Edit"
|
|
33
|
+
elif $t == "create" then "Write"
|
|
34
|
+
else $raw end) as $name
|
|
35
|
+
| ((.toolArgs // .tool_input) as $a
|
|
36
|
+
| if $a == null then null
|
|
37
|
+
elif ($a | type) == "object" then $a
|
|
38
|
+
elif ($a | type) == "string" then ((try ($a | fromjson) catch $a) | if type == "object" then . else {command: $a} end)
|
|
39
|
+
else {command: ($a | tostring)} end) as $input
|
|
40
|
+
| (if ($name == "Edit" or $name == "Write") and ($input | type) == "object" and ($input.file_path == null) and (($input.path // $input.filePath // $input.filename // $input.target_file) != null)
|
|
41
|
+
then $input + {file_path: ($input.path // $input.filePath // $input.filename // $input.target_file)} else $input end) as $input
|
|
42
|
+
| {
|
|
43
|
+
hook_event_name: $event,
|
|
44
|
+
session_id: (.sessionId // .session_id),
|
|
45
|
+
cwd: .cwd,
|
|
46
|
+
transcript_path: (.transcriptPath // .transcript_path),
|
|
47
|
+
stop_hook_active: .stop_hook_active,
|
|
48
|
+
stop_reason: (.stopReason // .stop_reason),
|
|
49
|
+
source: .source,
|
|
50
|
+
reason: .reason,
|
|
51
|
+
prompt: .prompt,
|
|
52
|
+
initial_prompt: (.initialPrompt // .initial_prompt),
|
|
53
|
+
agent_id: (.agentId // .agent_id),
|
|
54
|
+
agent_type: (.agentType // .agent_type),
|
|
55
|
+
agent_name: (.agentName // .agent_name),
|
|
56
|
+
parent_agent_id: (.parentAgentId // .parent_agent_id),
|
|
57
|
+
last_assistant_message: (.response // .last_assistant_message),
|
|
58
|
+
tool_name: (if $raw == "" then null else $name end),
|
|
59
|
+
tool_input: $input,
|
|
60
|
+
tool_result: (.toolResult // .tool_result)
|
|
61
|
+
}
|
|
62
|
+
| with_entries(select(.value != null))
|
|
63
|
+
' 2>/dev/null) \
|
|
64
|
+
&& [ -n "$rewritten" ]; then
|
|
65
|
+
printf '%s\n' "$rewritten"
|
|
66
|
+
else
|
|
67
|
+
printf '%s\n' "$payload"
|
|
68
|
+
fi
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# copilot_front_door <script-dir> <event> <policy> <fail>: run one shared policy through the bridge.
|
|
72
|
+
# <fail> is `deny` for a pre-tool policy (a missing bridge denies the tool call, as Copilot's
|
|
73
|
+
# preToolUse hooks are fail-closed on a non-zero exit anyway) or `open` for every other event.
|
|
74
|
+
copilot_front_door() {
|
|
75
|
+
local dir="$1" event="$2" policy="$3" fail="${4:-open}" raw payload bridge status=0
|
|
76
|
+
raw=$(cat)
|
|
77
|
+
if [ "$event" = Stop ] && command -v jq >/dev/null 2>&1 \
|
|
78
|
+
&& [ -n "$(printf '%s' "$raw" | jq -r '.agentId // .agent_id // empty' 2>/dev/null)" ]; then
|
|
79
|
+
return 0 # a subagent's own stop; SubagentStop covers it, as it does for Claude
|
|
80
|
+
fi
|
|
81
|
+
payload=$(copilot_bridge_payload "$event" <<<"$raw")
|
|
82
|
+
bridge="$dir/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
83
|
+
# User hooks under a custom $COPILOT_HOME sit beside no .doflow; the bridge is then in $HOME/.doflow.
|
|
84
|
+
[ -f "$bridge" ] || bridge="${HOME:-}/.doflow/shared/hooks/bridge/bridge.sh"
|
|
85
|
+
if [ ! -f "$bridge" ] || ! . "$bridge" 2>/dev/null; then
|
|
86
|
+
if [ "$fail" = deny ]; then
|
|
87
|
+
printf '%s\n' '{"permissionDecision":"deny","permissionDecisionReason":"[doflow] shared hooks lack the bridge; run: doflow update -t copilot"}'
|
|
88
|
+
fi
|
|
89
|
+
return 0
|
|
90
|
+
fi
|
|
91
|
+
doflow_bridge copilot "$event" "$policy" <<<"$payload" || status=$?
|
|
92
|
+
return "$status"
|
|
93
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: mcp-tool-guard through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" PreToolUse mcp-tool-guard deny
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: pre-bash-guard through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" PreToolUse pre-bash-guard deny
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: pre-implementation-gate through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" PreToolUse pre-implementation-gate deny
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: session-context through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" SessionStart session-context open
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: stop-check through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" Stop stop-check open
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: subagent-audit (start) through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" SubagentStart subagent-audit open
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copilot CLI front door: subagent-audit (stop) through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
|
+
export DOFLOW_AGENT="${DOFLOW_AGENT:-copilot}"
|
|
5
|
+
here="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
+
# shellcheck source=doflow-lib.sh
|
|
7
|
+
. "$here/doflow-lib.sh"
|
|
8
|
+
copilot_front_door "$here" SubagentStop subagent-audit open
|
|
9
|
+
exit $?
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"hooks": {
|
|
4
|
+
"sessionStart": [
|
|
5
|
+
{
|
|
6
|
+
"type": "command",
|
|
7
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-session-start.sh\" ] && printf '%s/.github/hooks/doflow-session-start.sh' \"$root\" || printf '%s/hooks/doflow-session-start.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
8
|
+
"cwd": ".",
|
|
9
|
+
"timeoutSec": 10
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
"preToolUse": [
|
|
13
|
+
{
|
|
14
|
+
"type": "command",
|
|
15
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-pre-implement-gate.sh\" ] && printf '%s/.github/hooks/doflow-pre-implement-gate.sh' \"$root\" || printf '%s/hooks/doflow-pre-implement-gate.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
16
|
+
"cwd": ".",
|
|
17
|
+
"timeoutSec": 20
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"type": "command",
|
|
21
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-pre-bash-guard.sh\" ] && printf '%s/.github/hooks/doflow-pre-bash-guard.sh' \"$root\" || printf '%s/hooks/doflow-pre-bash-guard.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
22
|
+
"cwd": ".",
|
|
23
|
+
"timeoutSec": 20
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "command",
|
|
27
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-mcp-tool-guard.sh\" ] && printf '%s/.github/hooks/doflow-mcp-tool-guard.sh' \"$root\" || printf '%s/hooks/doflow-mcp-tool-guard.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
28
|
+
"cwd": ".",
|
|
29
|
+
"timeoutSec": 20
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"agentStop": [
|
|
33
|
+
{
|
|
34
|
+
"type": "command",
|
|
35
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-stop-check.sh\" ] && printf '%s/.github/hooks/doflow-stop-check.sh' \"$root\" || printf '%s/hooks/doflow-stop-check.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
36
|
+
"cwd": ".",
|
|
37
|
+
"timeoutSec": 30
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"subagentStart": [
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-subagent-start.sh\" ] && printf '%s/.github/hooks/doflow-subagent-start.sh' \"$root\" || printf '%s/hooks/doflow-subagent-start.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
44
|
+
"cwd": ".",
|
|
45
|
+
"timeoutSec": 10
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"subagentStop": [
|
|
49
|
+
{
|
|
50
|
+
"type": "command",
|
|
51
|
+
"bash": "bash \"$(root=$(git rev-parse --show-toplevel 2>/dev/null) && [ -f \"$root/.github/hooks/doflow-subagent-stop.sh\" ] && printf '%s/.github/hooks/doflow-subagent-stop.sh' \"$root\" || printf '%s/hooks/doflow-subagent-stop.sh' \"${COPILOT_HOME:-$HOME/.copilot}\")\"",
|
|
52
|
+
"cwd": ".",
|
|
53
|
+
"timeoutSec": 10
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "doflow",
|
|
3
3
|
"description": "DoFlow main session: spec-driven delivery with lifecycle hooks and specialist dispatch",
|
|
4
|
-
"prompt": "You are the DoFlow main session. Follow the DoFlow steering files under .kiro/steering (principles, rules, the spec-driven chain) and the skills under .kiro/skills. Dispatch specialist work by role to core-implementer, quality-guardian, spec-analyst, system-architect or research-writer, and keep decisions, verification and records in this session.\n",
|
|
4
|
+
"prompt": "You are the DoFlow main session. Follow the DoFlow steering files under .kiro/steering (principles, rules, the spec-driven chain) and the skills under .kiro/skills. Dispatch specialist work by role to core-implementer, delivery-lead, quality-guardian, reviewer, spec-analyst, system-architect or research-writer, and keep decisions, verification and records in this session.\n",
|
|
5
5
|
"tools": [
|
|
6
6
|
"*"
|
|
7
7
|
],
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
2
3
|
# lib.sh — shared constants and helpers for session lifecycle hooks
|
|
3
4
|
#
|
|
4
5
|
# Usage: source "$(dirname "$0")/lib.sh"
|
|
@@ -17,13 +18,30 @@ set -euo pipefail
|
|
|
17
18
|
|
|
18
19
|
# ── State directories ────────────────────────────────────────────────────────
|
|
19
20
|
|
|
20
|
-
# XDG-compliant, agent-agnostic store shared by
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
# XDG-compliant, agent-agnostic store shared by every harness DoFlow supports, under the config home
|
|
22
|
+
# (doflow_config_home: an absolute XDG_CONFIG_HOME, else an absolute HOME + /.config, else none). With
|
|
23
|
+
# no config home every state path below is empty, sourcing this file still never exits, and each state
|
|
24
|
+
# function returns 0 at once: session work is skipped and a guard reaches its own decision (086 IC-010).
|
|
25
|
+
# BEGIN doflow-config-home v1 (rule: src/runtime/config-home.js; checked by test/guards/settings.test.js)
|
|
26
|
+
doflow_config_home() {
|
|
27
|
+
DOFLOW_HOME=""
|
|
28
|
+
case "${XDG_CONFIG_HOME:-}" in
|
|
29
|
+
/*) DOFLOW_HOME="${XDG_CONFIG_HOME}/doflow"; return 0 ;;
|
|
30
|
+
[A-Za-z]:[\\/]*) case "${OSTYPE:-}" in msys*|cygwin*|win32*) DOFLOW_HOME="${XDG_CONFIG_HOME}/doflow"; return 0 ;; esac ;;
|
|
31
|
+
esac
|
|
32
|
+
case "${HOME:-}" in
|
|
33
|
+
/*) DOFLOW_HOME="${HOME}/.config/doflow" ;;
|
|
34
|
+
[A-Za-z]:[\\/]*) case "${OSTYPE:-}" in msys*|cygwin*|win32*) DOFLOW_HOME="${HOME}/.config/doflow" ;; esac ;;
|
|
35
|
+
esac
|
|
36
|
+
return 0
|
|
37
|
+
}
|
|
38
|
+
# END doflow-config-home v1
|
|
39
|
+
doflow_config_home
|
|
40
|
+
STATE_DIR="${DOFLOW_HOME:+$DOFLOW_HOME/session-env}"
|
|
41
|
+
SESSION_DIR="${STATE_DIR:+$STATE_DIR/sessions}"
|
|
42
|
+
PROJECTS_DIR="${STATE_DIR:+$STATE_DIR/projects}"
|
|
25
43
|
# shellcheck disable=SC2034 # used by session-start.sh and session-end.sh which source this file
|
|
26
|
-
SESSIONS_LOG="$DOFLOW_HOME/sessions.log"
|
|
44
|
+
SESSIONS_LOG="${DOFLOW_HOME:+$DOFLOW_HOME/sessions.log}"
|
|
27
45
|
|
|
28
46
|
# Identifies which agent is running. Override via env var for non-Claude agents.
|
|
29
47
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-unknown}"
|
|
@@ -246,6 +264,7 @@ cwd_hash() {
|
|
|
246
264
|
# Safe to call multiple times (mkdir -p is idempotent).
|
|
247
265
|
ensure_session_dir() {
|
|
248
266
|
local session_id="$1"
|
|
267
|
+
[ -n "$SESSION_DIR" ] || return 0
|
|
249
268
|
mkdir -p "$SESSION_DIR/$session_id"
|
|
250
269
|
echo "$SESSION_DIR/$session_id"
|
|
251
270
|
}
|
|
@@ -255,6 +274,7 @@ ensure_session_dir() {
|
|
|
255
274
|
ensure_project_dir() {
|
|
256
275
|
local cwd="$1"
|
|
257
276
|
local hash
|
|
277
|
+
[ -n "$PROJECTS_DIR" ] || return 0
|
|
258
278
|
hash=$(cwd_hash "$cwd")
|
|
259
279
|
mkdir -p "$PROJECTS_DIR/$hash"
|
|
260
280
|
echo "$PROJECTS_DIR/$hash"
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
3
|
+
# Kiro front door: mcp-tool-guard through the shared lifecycle bridge.
|
|
3
4
|
set -euo pipefail
|
|
4
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-kiro}"
|
|
6
|
+
here="$(dirname "$0")"
|
|
5
7
|
# shellcheck source=lib.sh
|
|
6
|
-
source "$
|
|
7
|
-
|
|
8
|
-
payload=$(kiro_bridge_payload)
|
|
9
|
-
|
|
8
|
+
source "$here/lib.sh"
|
|
9
|
+
raw=$(cat)
|
|
10
|
+
payload=$(kiro_bridge_payload <<<"$raw")
|
|
11
|
+
event="PreToolUse"
|
|
12
|
+
if command -v jq >/dev/null 2>&1; then event=$(printf '%s' "$raw" | jq -r '.hook_event_name // "PreToolUse"' 2>/dev/null) || event="PreToolUse"; fi
|
|
13
|
+
bridge="$here/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
14
|
+
if [ ! -f "$bridge" ]; then
|
|
15
|
+
printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
. "$bridge" 2>/dev/null || { printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2; exit 2; }
|
|
19
|
+
if doflow_bridge kiro "$event" mcp-tool-guard <<<"$payload"; then
|
|
20
|
+
status=0
|
|
21
|
+
else
|
|
22
|
+
status=$?
|
|
23
|
+
fi
|
|
24
|
+
if [ "$status" -eq 2 ]; then printf '\n' >&2; fi
|
|
25
|
+
exit "$status"
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
3
|
+
# Kiro front door: pre-bash-guard through the shared lifecycle bridge.
|
|
3
4
|
set -euo pipefail
|
|
4
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-kiro}"
|
|
6
|
+
here="$(dirname "$0")"
|
|
5
7
|
# shellcheck source=lib.sh
|
|
6
|
-
source "$
|
|
7
|
-
|
|
8
|
-
payload=$(kiro_bridge_payload)
|
|
9
|
-
|
|
8
|
+
source "$here/lib.sh"
|
|
9
|
+
raw=$(cat)
|
|
10
|
+
payload=$(kiro_bridge_payload <<<"$raw")
|
|
11
|
+
event="PreToolUse"
|
|
12
|
+
if command -v jq >/dev/null 2>&1; then event=$(printf '%s' "$raw" | jq -r '.hook_event_name // "PreToolUse"' 2>/dev/null) || event="PreToolUse"; fi
|
|
13
|
+
bridge="$here/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
14
|
+
if [ ! -f "$bridge" ]; then
|
|
15
|
+
printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
. "$bridge" 2>/dev/null || { printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2; exit 2; }
|
|
19
|
+
if doflow_bridge kiro "$event" pre-bash-guard <<<"$payload"; then
|
|
20
|
+
status=0
|
|
21
|
+
else
|
|
22
|
+
status=$?
|
|
23
|
+
fi
|
|
24
|
+
if [ "$status" -eq 2 ]; then printf '\n' >&2; fi
|
|
25
|
+
exit "$status"
|
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
3
|
+
# Kiro front door: pre-implementation-gate through the shared lifecycle bridge.
|
|
3
4
|
set -euo pipefail
|
|
4
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-kiro}"
|
|
6
|
+
here="$(dirname "$0")"
|
|
5
7
|
# shellcheck source=lib.sh
|
|
6
|
-
source "$
|
|
7
|
-
|
|
8
|
-
payload=$(kiro_bridge_payload)
|
|
9
|
-
|
|
8
|
+
source "$here/lib.sh"
|
|
9
|
+
raw=$(cat)
|
|
10
|
+
payload=$(kiro_bridge_payload <<<"$raw")
|
|
11
|
+
event="PreToolUse"
|
|
12
|
+
if command -v jq >/dev/null 2>&1; then event=$(printf '%s' "$raw" | jq -r '.hook_event_name // "PreToolUse"' 2>/dev/null) || event="PreToolUse"; fi
|
|
13
|
+
bridge="$here/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
14
|
+
if [ ! -f "$bridge" ]; then
|
|
15
|
+
printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2
|
|
16
|
+
exit 2
|
|
17
|
+
fi
|
|
18
|
+
. "$bridge" 2>/dev/null || { printf '%s\n' '[doflow] shared hooks lack the bridge; run: doflow update -t kiro' >&2; exit 2; }
|
|
19
|
+
if doflow_bridge kiro "$event" pre-implementation-gate <<<"$payload"; then
|
|
20
|
+
status=0
|
|
21
|
+
else
|
|
22
|
+
status=$?
|
|
23
|
+
fi
|
|
24
|
+
if [ "$status" -eq 2 ]; then printf '\n' >&2; fi
|
|
25
|
+
exit "$status"
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
3
|
+
# Kiro front door: session-context through the shared lifecycle bridge.
|
|
3
4
|
set -euo pipefail
|
|
4
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-kiro}"
|
|
6
|
+
here="$(dirname "$0")"
|
|
5
7
|
# shellcheck source=lib.sh
|
|
6
|
-
source "$
|
|
7
|
-
|
|
8
|
-
payload=$(kiro_bridge_payload)
|
|
9
|
-
|
|
8
|
+
source "$here/lib.sh"
|
|
9
|
+
raw=$(cat)
|
|
10
|
+
payload=$(kiro_bridge_payload <<<"$raw")
|
|
11
|
+
event="SessionStart"
|
|
12
|
+
if command -v jq >/dev/null 2>&1; then event=$(printf '%s' "$raw" | jq -r '.hook_event_name // "SessionStart"' 2>/dev/null) || event="SessionStart"; fi
|
|
13
|
+
bridge="$here/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
14
|
+
if [ ! -f "$bridge" ]; then exit 0; fi
|
|
15
|
+
. "$bridge" 2>/dev/null || exit 0
|
|
16
|
+
doflow_bridge kiro "$event" session-context <<<"$payload"
|
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# The policy exits 2 to deny the stop. Kiro engines read a Stop hook differently:
|
|
5
|
-
# - Kiro CLI V3 / IDE (payload carries session_id): exit 0 finishes the turn; exit 0 with stdout
|
|
6
|
-
# JSON {"decision":"block","reason":"..."} starts another turn with that reason; exit 1 also
|
|
7
|
-
# starts another turn; other codes finish without forwarding output. Exit 2 does NOT block.
|
|
8
|
-
# So a policy deny becomes the JSON block on stdout with exit 0.
|
|
9
|
-
# - Kiro CLI 2.x (payload has no session_id): exit 0 succeeded, any other code shows stderr to the
|
|
10
|
-
# user as a warning. A policy deny is passed through as stderr with exit 2.
|
|
11
|
-
# Every other policy outcome exits 0, never 1: V3 treats exit 1 as "continue another turn".
|
|
12
|
-
# The policy blocks a given message once, so the continuation turn is not blocked again.
|
|
13
|
-
# Docs: https://kiro.dev/docs/hooks/types/ , https://kiro.dev/docs/cli/v3/hooks-migration/
|
|
2
|
+
case "${OSTYPE:-}" in msys*|cygwin*|win32*) if command -v jq >/dev/null 2>&1; then jq() { command jq -b "$@"; }; fi ;; esac # native jq.exe ends lines with CRLF unless -b
|
|
3
|
+
# Kiro Stop front door: translate the native payload, then render the bridge verdict for its engine.
|
|
14
4
|
set -uo pipefail
|
|
15
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-kiro}"
|
|
16
6
|
here="$(dirname "$0")"
|
|
17
7
|
# shellcheck source=lib.sh
|
|
18
8
|
source "$here/lib.sh"
|
|
19
|
-
set +e # lib.sh enables errexit; the policy exit code is handled explicitly below
|
|
20
|
-
|
|
21
9
|
raw=$(cat)
|
|
22
|
-
# Translate Kiro's payload (tool names, KIRO_SESSION_ID, assistant_response) to the canonical one.
|
|
23
10
|
payload=$(kiro_bridge_payload <<<"$raw")
|
|
24
|
-
|
|
25
|
-
# V3 and the IDE send session_id in the payload; 2.x does not (the bridge injects it from the env).
|
|
26
11
|
raw_sid=""
|
|
12
|
+
event="Stop"
|
|
27
13
|
if command -v jq >/dev/null 2>&1; then
|
|
28
14
|
raw_sid=$(printf '%s' "$raw" | jq -r '.session_id // empty' 2>/dev/null) || raw_sid=""
|
|
15
|
+
event=$(printf '%s' "$raw" | jq -r '.hook_event_name // "Stop"' 2>/dev/null) || event="Stop"
|
|
29
16
|
fi
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if [ "$rc" -eq 2 ]; then
|
|
36
|
-
if [ -n "$raw_sid" ] && command -v jq >/dev/null 2>&1; then
|
|
37
|
-
jq -n --arg reason "$errtext" '{decision: "block", reason: $reason}'
|
|
38
|
-
exit 0
|
|
39
|
-
fi
|
|
40
|
-
printf '%s\n' "$errtext" >&2
|
|
41
|
-
exit 2
|
|
17
|
+
if [ -n "$raw_sid" ]; then
|
|
18
|
+
export DOFLOW_KIRO_ENGINE=v3
|
|
19
|
+
else
|
|
20
|
+
export DOFLOW_KIRO_ENGINE=2x
|
|
42
21
|
fi
|
|
43
|
-
|
|
22
|
+
bridge="$here/../../.doflow/shared/hooks/bridge/bridge.sh"
|
|
23
|
+
if [ ! -f "$bridge" ]; then exit 0; fi
|
|
24
|
+
. "$bridge" 2>/dev/null || exit 0
|
|
25
|
+
exec 4>&1
|
|
26
|
+
if bridge_stderr=$(doflow_bridge kiro "$event" stop-check <<<"$payload" 2>&1 1>&4); then
|
|
27
|
+
status=0
|
|
28
|
+
else
|
|
29
|
+
status=$?
|
|
30
|
+
fi
|
|
31
|
+
exec 4>&-
|
|
32
|
+
if [ "$status" -eq 2 ] && [ "$DOFLOW_KIRO_ENGINE" = 2x ]; then
|
|
33
|
+
printf '%s\n' "$bridge_stderr" >&2
|
|
34
|
+
fi
|
|
35
|
+
exit "$status"
|