@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,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
|
# session-end.sh — SessionEnd hook
|
|
3
4
|
#
|
|
4
5
|
# Runs when Claude Code closes a session. Responsibilities:
|
|
@@ -23,6 +24,27 @@ CWD=$(json_field "$INPUT" ".cwd")
|
|
|
23
24
|
|
|
24
25
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
25
26
|
|
|
27
|
+
# Start storage cleanup without changing the hook's output, status, or latency.
|
|
28
|
+
start_storage_upkeep() {
|
|
29
|
+
(
|
|
30
|
+
SHARED_POLICY_LIB="$(dirname "$0")/../../.doflow/shared/hooks/policies/lib.sh"
|
|
31
|
+
if [[ ! -f "$SHARED_POLICY_LIB" ]]; then
|
|
32
|
+
SHARED_POLICY_LIB="$(dirname "$0")/../../shared/hooks/policies/lib.sh"
|
|
33
|
+
fi
|
|
34
|
+
if [[ -f "$SHARED_POLICY_LIB" ]]; then
|
|
35
|
+
source "$SHARED_POLICY_LIB"
|
|
36
|
+
storage_upkeep_async "$CWD"
|
|
37
|
+
fi
|
|
38
|
+
) >/dev/null 2>&1 || true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# No config home (lib.sh leaves the state paths empty): no session store to write, but the
|
|
42
|
+
# storage upkeep still starts (086 IC-010).
|
|
43
|
+
if [[ -z "$STATE_DIR" ]]; then
|
|
44
|
+
start_storage_upkeep
|
|
45
|
+
exit 0
|
|
46
|
+
fi
|
|
47
|
+
|
|
26
48
|
# ── 1. Log session end ────────────────────────────────────────────────────────
|
|
27
49
|
|
|
28
50
|
mkdir -p "$(dirname "$SESSIONS_LOG")"
|
|
@@ -59,16 +81,7 @@ if [[ -n "$SESSION_ID" ]]; then
|
|
|
59
81
|
rm -rf "$SESSION_PATH" 2>/dev/null || true
|
|
60
82
|
fi
|
|
61
83
|
|
|
62
|
-
|
|
63
|
-
SHARED_POLICY_LIB="$(dirname "$0")/../../.doflow/shared/hooks/policies/lib.sh"
|
|
64
|
-
if [[ ! -f "$SHARED_POLICY_LIB" ]]; then
|
|
65
|
-
SHARED_POLICY_LIB="$(dirname "$0")/../../shared/hooks/policies/lib.sh"
|
|
66
|
-
fi
|
|
67
|
-
if [[ -f "$SHARED_POLICY_LIB" ]]; then
|
|
68
|
-
source "$SHARED_POLICY_LIB"
|
|
69
|
-
storage_upkeep_async "$CWD"
|
|
70
|
-
fi
|
|
71
|
-
) >/dev/null 2>&1 || true
|
|
84
|
+
start_storage_upkeep
|
|
72
85
|
|
|
73
86
|
# ── 4. Trim sessions.log (lock-guarded) ───────────────────────────────────────
|
|
74
87
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Claude
|
|
3
|
-
set -
|
|
2
|
+
# Claude front door: session-context through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-claude}"
|
|
5
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge claude SessionStart session-context
|
|
7
|
+
exit $?
|
|
@@ -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
|
# skill-config-audit.sh — ConfigChange(skills) hook (pure observability, no deny path)
|
|
3
4
|
#
|
|
4
5
|
# Logs skill-file mutations regardless of which tool made them (a subagent's Bash heredoc-to-file
|
|
@@ -26,6 +27,8 @@ SESSION_ID=$(json_field "$INPUT" ".session_id")
|
|
|
26
27
|
|
|
27
28
|
# Guard: if we can't determine the session, nothing to do
|
|
28
29
|
[[ -z "$SESSION_ID" ]] && exit 0
|
|
30
|
+
# No config home (lib.sh leaves the state paths empty): no session store to write (086 IC-010).
|
|
31
|
+
[[ -n "$SESSION_DIR" ]] || exit 0
|
|
29
32
|
|
|
30
33
|
TIMESTAMP=$(date -u +%FT%TZ)
|
|
31
34
|
SESSION_PATH=$(ensure_session_dir "$SESSION_ID")
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Claude
|
|
3
|
-
set -
|
|
2
|
+
# Claude front door: stop-check through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-claude}"
|
|
5
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge claude Stop stop-check
|
|
7
|
+
exit $?
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Claude front door:
|
|
3
|
-
|
|
4
|
-
# (022-hooks-remaining-duplication).
|
|
5
|
-
set -euo pipefail
|
|
2
|
+
# Claude front door: subagent-audit through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
6
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-claude}"
|
|
7
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge claude SubagentStart subagent-audit
|
|
7
|
+
exit $?
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Claude front door:
|
|
3
|
-
set -
|
|
2
|
+
# Claude front door: user-prompt-submit through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-claude}"
|
|
5
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge claude UserPromptSubmit user-prompt-submit
|
|
7
|
+
exit $?
|
|
@@ -116,6 +116,15 @@
|
|
|
116
116
|
}
|
|
117
117
|
],
|
|
118
118
|
"PostToolUse": [
|
|
119
|
+
{
|
|
120
|
+
"matcher": "Bash",
|
|
121
|
+
"hooks": [
|
|
122
|
+
{
|
|
123
|
+
"type": "command",
|
|
124
|
+
"command": "~/.claude/hooks/post-shell-observe.sh PostToolUse"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
},
|
|
119
128
|
{
|
|
120
129
|
"matcher": "Edit",
|
|
121
130
|
"hooks": [
|
|
@@ -176,6 +185,15 @@
|
|
|
176
185
|
}
|
|
177
186
|
],
|
|
178
187
|
"PostToolUseFailure": [
|
|
188
|
+
{
|
|
189
|
+
"matcher": "Bash",
|
|
190
|
+
"hooks": [
|
|
191
|
+
{
|
|
192
|
+
"type": "command",
|
|
193
|
+
"command": "~/.claude/hooks/post-shell-observe.sh PostToolUseFailure"
|
|
194
|
+
}
|
|
195
|
+
]
|
|
196
|
+
},
|
|
179
197
|
{
|
|
180
198
|
"matcher": ".*",
|
|
181
199
|
"hooks": [
|
|
@@ -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
|
# doflow-statusline — Claude Code status line fed by DoFlow's neutral state.
|
|
3
4
|
#
|
|
4
5
|
# Claude Code pipes one session-state JSON document to stdin; whatever this script prints becomes
|
|
@@ -4,4 +4,5 @@ developer_instructions = """
|
|
|
4
4
|
Implement features and refactor code strictly according to approved designs and task checklists.
|
|
5
5
|
Optimize algorithms, reduce complexity, and maintain polyglot code quality across the codebase.
|
|
6
6
|
Ensure changes pass all existing tests and conform to language-specific standards.
|
|
7
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
7
8
|
"""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
name = "delivery-lead"
|
|
2
|
+
description = "Delivery lead that plans a feature's tasks, briefs and dispatches workers, verifies their evidence, and commits."
|
|
3
|
+
developer_instructions = """
|
|
4
|
+
Plan the tasks of one feature or package, brief each worker with goal, context, write set, rules, acceptance command and report format, and dispatch in parallel only when write sets are disjoint.
|
|
5
|
+
Accept a fix only with a test red on the base and green after, plus a negative control; never weaken an assertion.
|
|
6
|
+
Commit one logical item at a time with explicit paths; stop and return options on an unrequested contract change or a permission denial.
|
|
7
|
+
Write no product code and no tests yourself: workers do.
|
|
8
|
+
Branch on each hand-back's status: `needs-context` resend with the missing context; `blocked` stop and surface it; `done-with-concerns` verify the concerns before accepting; `done` accept.
|
|
9
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
10
|
+
"""
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
name = "quality-guardian"
|
|
2
2
|
description = "Specialist quality and security engineer for automated testing, security audits, and root cause analysis."
|
|
3
|
-
sandbox_mode = "read-only"
|
|
4
3
|
developer_instructions = """
|
|
5
4
|
Author and run comprehensive test suites, audit code for security vulnerabilities, and diagnose root causes.
|
|
6
5
|
Verify adherence to SOLID principles, check error handling boundaries, and analyze reproduction traces.
|
|
7
6
|
Stay in audit mode: do not modify business logic code directly without an approved fix plan.
|
|
7
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
8
8
|
"""
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
name = "research-writer"
|
|
2
2
|
description = "Specialist research and technical writing agent for documentation, architecture indices, and web research."
|
|
3
|
-
sandbox_mode = "read-only"
|
|
4
3
|
developer_instructions = """
|
|
5
4
|
Conduct deep web research with cited sources and write comprehensive technical documentation.
|
|
6
5
|
Create project architecture indices and implementation flow summaries capturing architectural trade-offs.
|
|
7
6
|
Stay in documentation mode: do not modify workspace source code.
|
|
7
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
8
8
|
"""
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
name = "reviewer"
|
|
2
|
+
description = "Read-only reviewer of a change it did not write: evidenced defects, severity, and round-two replies."
|
|
3
|
+
sandbox_mode = "read-only"
|
|
4
|
+
developer_instructions = """
|
|
5
|
+
Review a change written by another agent and model; decline work your own model or agent wrote.
|
|
6
|
+
Back each defect with path:line plus a reproducer you ran or an exact input-to-wrong-output chain, else report it as a note; mark SOURCE or INFERENCE and severity blocker, should-fix or note.
|
|
7
|
+
Run tests only in a scratch copy of the reviewed head and kill every process you start.
|
|
8
|
+
Stay in review mode: do not modify repository files; write only your own report.
|
|
9
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
10
|
+
"""
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
name = "spec-analyst"
|
|
2
2
|
description = "Specialist agent for requirements discovery, user story breakdown, and estimation."
|
|
3
|
-
sandbox_mode = "read-only"
|
|
4
3
|
developer_instructions = """
|
|
5
4
|
Elicit requirements through Socratic dialogue focusing on user value and business goals.
|
|
6
5
|
Decompose initiatives into user stories with testable acceptance criteria and estimate effort.
|
|
7
6
|
Stay in planning mode: do not implement code or modify workspace files.
|
|
7
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
8
8
|
"""
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
name = "system-architect"
|
|
2
2
|
description = "Specialist architect agent for system design, API contracts, and infrastructure."
|
|
3
|
-
sandbox_mode = "read-only"
|
|
4
3
|
developer_instructions = """
|
|
5
4
|
Design scalable systems with explicit component boundaries, interfaces, dependencies, and trade-offs.
|
|
6
5
|
Evaluate architecture decisions for maintainability, resilience, operational impact, and future change.
|
|
7
6
|
Document clear recommendations with alternatives and validation criteria.
|
|
8
7
|
Stay in planning mode: do not implement code or modify workspace files.
|
|
8
|
+
End the report with one line `Status: <status>`, where the status is one of `done`, `done-with-concerns`, `needs-context`, `blocked`.
|
|
9
9
|
"""
|
|
@@ -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}"
|
|
@@ -278,6 +296,7 @@ has_uncommitted_changes() {
|
|
|
278
296
|
# Safe to call multiple times (mkdir -p is idempotent).
|
|
279
297
|
ensure_session_dir() {
|
|
280
298
|
local session_id="$1"
|
|
299
|
+
[ -n "$SESSION_DIR" ] || return 0
|
|
281
300
|
mkdir -p "$SESSION_DIR/$session_id"
|
|
282
301
|
echo "$SESSION_DIR/$session_id"
|
|
283
302
|
}
|
|
@@ -287,6 +306,7 @@ ensure_session_dir() {
|
|
|
287
306
|
ensure_project_dir() {
|
|
288
307
|
local cwd="$1"
|
|
289
308
|
local hash
|
|
309
|
+
[ -n "$PROJECTS_DIR" ] || return 0
|
|
290
310
|
hash=$(cwd_hash "$cwd")
|
|
291
311
|
mkdir -p "$PROJECTS_DIR/$hash"
|
|
292
312
|
echo "$PROJECTS_DIR/$hash"
|
|
@@ -314,22 +334,21 @@ require_jq() {
|
|
|
314
334
|
fi
|
|
315
335
|
}
|
|
316
336
|
|
|
317
|
-
# ── Session role
|
|
318
|
-
|
|
319
|
-
#
|
|
320
|
-
#
|
|
321
|
-
#
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
""
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
}
|
|
337
|
+
# ── Session role and identity ─────────────────────────────────────────────────
|
|
338
|
+
|
|
339
|
+
# doflow_session_role comes from the shared identity.sh, its only definition (IC-009). When an
|
|
340
|
+
# install lacks that file, the session is a worker and the broken install is captured as
|
|
341
|
+
# identity-missing: a worker writes and claims nothing, so a broken install cannot leak context.
|
|
342
|
+
if [ -f "${BASH_SOURCE[0]%/*}/../../.doflow/shared/hooks/policies/identity.sh" ]; then
|
|
343
|
+
. "${BASH_SOURCE[0]%/*}/../../.doflow/shared/hooks/policies/identity.sh"
|
|
344
|
+
else
|
|
345
|
+
doflow_session_role() {
|
|
346
|
+
local policy="${0##*/}"
|
|
347
|
+
policy="${policy%.sh}"
|
|
348
|
+
policy="${policy%.impl}"
|
|
349
|
+
( . "${BASH_SOURCE[0]%/*}/../../.doflow/shared/hooks/policies/capture-failure.sh" \
|
|
350
|
+
&& doflow_capture_failure "$policy" identity-missing ) >/dev/null 2>&1 || true
|
|
351
|
+
printf 'worker\n'
|
|
352
|
+
return 0
|
|
353
|
+
}
|
|
354
|
+
fi
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex front door:
|
|
3
|
-
# Library, then translates it into the hookSpecificOutput.permissionDecision deny
|
|
4
|
-
# contract this script's Codex/Claude originals both used — exit code alone is
|
|
5
|
-
# not sufficient here, so this front door is a translator, not a bare exec
|
|
6
|
-
# (unlike session-context/stop-check, which never need this translation).
|
|
2
|
+
# Codex front door: mcp-tool-guard through the shared lifecycle bridge.
|
|
7
3
|
set -uo pipefail
|
|
8
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
CODE=$?
|
|
16
|
-
|
|
17
|
-
[ "$CODE" -ne 0 ] && emit_pretooluse_deny_nested "${REASON:-MCP tool call blocked by mcp-tool-guard}"
|
|
18
|
-
exit 0
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then
|
|
6
|
+
printf '%s\n' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"[doflow] shared hooks lack the bridge; run: doflow update -t codex"}}'
|
|
7
|
+
exit 0
|
|
8
|
+
fi
|
|
9
|
+
doflow_bridge codex PreToolUse mcp-tool-guard
|
|
10
|
+
exit $?
|
|
@@ -19,11 +19,13 @@ INPUT=$(cat)
|
|
|
19
19
|
SESSION_ID=$(json_field "$INPUT" ".session_id")
|
|
20
20
|
TOOL_NAME=$(json_field "$INPUT" ".tool_name")
|
|
21
21
|
|
|
22
|
-
# Only handle Edit/Write (Claude
|
|
22
|
+
# Only handle Edit/Write (Claude) and apply_patch (Codex's edit tool name)
|
|
23
23
|
[[ "$TOOL_NAME" != "Edit" && "$TOOL_NAME" != "Write" && "$TOOL_NAME" != "apply_patch" ]] && exit 0
|
|
24
24
|
|
|
25
25
|
# Guard: if we can't determine the session, nothing to do
|
|
26
26
|
[[ -z "$SESSION_ID" ]] && exit 0
|
|
27
|
+
# No config home (lib.sh leaves the state paths empty): no session store to write (086 IC-010).
|
|
28
|
+
[[ -n "$SESSION_DIR" ]] || exit 0
|
|
27
29
|
|
|
28
30
|
SESSION_PATH=$(ensure_session_dir "$SESSION_ID")
|
|
29
31
|
|
|
@@ -1,18 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex front door:
|
|
3
|
-
# Library, then translates it into the hookSpecificOutput.permissionDecision deny
|
|
4
|
-
# contract this script's Codex/Claude originals both used — exit code alone is
|
|
5
|
-
# not sufficient here, so this front door is a translator, not a bare exec
|
|
6
|
-
# (unlike session-context/stop-check, which never need this translation).
|
|
2
|
+
# Codex front door: pre-bash-guard through the shared lifecycle bridge.
|
|
7
3
|
set -uo pipefail
|
|
8
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
CODE=$?
|
|
16
|
-
|
|
17
|
-
[ "$CODE" -ne 0 ] && emit_pretooluse_deny_nested "${REASON:-Command blocked by pre-bash-guard}"
|
|
18
|
-
exit 0
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then
|
|
6
|
+
printf '%s\n' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"[doflow] shared hooks lack the bridge; run: doflow update -t codex"}}'
|
|
7
|
+
exit 0
|
|
8
|
+
fi
|
|
9
|
+
doflow_bridge codex PreToolUse pre-bash-guard
|
|
10
|
+
exit $?
|
|
@@ -1,16 +1,20 @@
|
|
|
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
|
# pre-compact.impl.sh — PreCompact hook (Codex-specific output shape)
|
|
3
4
|
#
|
|
4
5
|
# Codex's PreCompact output schema (codex-rs/hooks/src/schema.rs::PreCompactCommandOutputWire)
|
|
5
6
|
# flattens only HookUniversalOutputWire (continue/stopReason/suppressOutput/systemMessage) and
|
|
6
7
|
# rejects unknown fields — there is no additionalContext-style field for PreCompact, and the
|
|
7
|
-
# output MUST be valid JSON, unlike Claude's PreCompact hook,
|
|
8
|
-
#
|
|
9
|
-
# does, but emits it as a JSON
|
|
10
|
-
# systemMessage
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
8
|
+
# output MUST be valid JSON, unlike Claude's PreCompact hook, whose plain stdout was observed in
|
|
9
|
+
# Claude Code 2.1.304 and 2.1.308 to be read as custom_instructions, undocumented (FU-w563w2). This script
|
|
10
|
+
# gathers the same git-state context Claude's pre-compact.sh does, but emits it as a JSON
|
|
11
|
+
# systemMessage instead — the closest available field, though systemMessage's exact downstream
|
|
12
|
+
# effect on compaction content is not confirmed (that Claude's custom_instructions reach the
|
|
13
|
+
# compaction LLM call is observed in Claude Code 2.1.304 and 2.1.308, undocumented (FU-w563w2); Codex's docs
|
|
14
|
+
# do not state that systemMessage receives the same treatment). Treat this as best-effort context
|
|
15
|
+
# surfacing, not a guaranteed compaction-summary injection, until verified against a live Codex
|
|
16
|
+
# session.
|
|
17
|
+
# The shared compaction text comes from compact-text.sh (IC-001/IC-002).
|
|
14
18
|
#
|
|
15
19
|
# Must never exit non-zero or block (PreCompact hooks do not support a block decision in Codex).
|
|
16
20
|
|
|
@@ -22,25 +26,24 @@ require_jq
|
|
|
22
26
|
INPUT=$(cat)
|
|
23
27
|
CWD=$(json_field "$INPUT" ".cwd")
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
else
|
|
38
|
-
MSG=$(printf 'Include in compact summary:\n- cwd: %s (not a git repository)\nPreserve: decisions made, files modified, open questions, planned next steps.' \
|
|
39
|
-
"${CWD:-unknown}")
|
|
29
|
+
# Rule compact-instructions.instructions (DEC-023) decides whether this hook emits; it is
|
|
30
|
+
# `include` for both roles, so the output below is unchanged. The role comes from the shared
|
|
31
|
+
# identity.sh, read silently: this hook never wrote the role diagnostic and does not start now.
|
|
32
|
+
POLICIES="$(dirname "$0")/../../.doflow/shared/hooks/policies"
|
|
33
|
+
[[ -f "$POLICIES/emission-rules.sh" ]] || POLICIES="$(dirname "$0")/../../shared/hooks/policies"
|
|
34
|
+
_DF_ROLE=worker
|
|
35
|
+
if declare -F _doflow_role_resolve >/dev/null 2>&1; then _doflow_role_resolve 2>/dev/null; fi
|
|
36
|
+
DF_ACTION=skip
|
|
37
|
+
if [[ -f "$POLICIES/emission-rules.sh" ]]; then
|
|
38
|
+
# shellcheck source=/dev/null
|
|
39
|
+
. "$POLICIES/emission-rules.sh"
|
|
40
|
+
doflow_emission_rule compact-instructions.instructions "$_DF_ROLE"
|
|
40
41
|
fi
|
|
42
|
+
[[ "$DF_ACTION" == include ]] || exit 0
|
|
41
43
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
[[ -f "$POLICIES/compact-text.sh" ]] || exit 0
|
|
45
|
+
# shellcheck source=/dev/null
|
|
46
|
+
source "$POLICIES/compact-text.sh"
|
|
47
|
+
doflow_compact_text "$CWD"
|
|
48
|
+
jq -n --arg systemMessage "$DF_COMPACT_TEXT" '{systemMessage: $systemMessage}'
|
|
46
49
|
exit 0
|
|
@@ -1,19 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex front door:
|
|
3
|
-
# Canonical Policy Library, then translates it into the
|
|
4
|
-
# hookSpecificOutput.permissionDecision deny contract this script's Codex/Claude
|
|
5
|
-
# originals both used — exit code alone is not sufficient here, so this front
|
|
6
|
-
# door is a translator, not a bare exec (unlike session-context/stop-check,
|
|
7
|
-
# which never need this translation).
|
|
2
|
+
# Codex front door: pre-implementation-gate through the shared lifecycle bridge.
|
|
8
3
|
set -uo pipefail
|
|
9
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
CODE=$?
|
|
17
|
-
|
|
18
|
-
[ "$CODE" -ne 0 ] && emit_pretooluse_deny_nested "${REASON:-Implementation requires an approved plan.md}"
|
|
19
|
-
exit 0
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then
|
|
6
|
+
printf '%s\n' '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"[doflow] shared hooks lack the bridge; run: doflow update -t codex"}}'
|
|
7
|
+
exit 0
|
|
8
|
+
fi
|
|
9
|
+
doflow_bridge codex PreToolUse pre-implementation-gate
|
|
10
|
+
exit $?
|
|
@@ -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
|
# session-end.sh — SessionEnd hook
|
|
3
4
|
#
|
|
4
5
|
# Runs when Claude Code closes a session. Responsibilities:
|
|
@@ -24,6 +25,27 @@ CWD=$(json_field "$INPUT" ".cwd")
|
|
|
24
25
|
|
|
25
26
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
26
27
|
|
|
28
|
+
# Start storage cleanup without changing the hook's output, status, or latency.
|
|
29
|
+
start_storage_upkeep() {
|
|
30
|
+
(
|
|
31
|
+
SHARED_POLICY_LIB="$(dirname "$0")/../../.doflow/shared/hooks/policies/lib.sh"
|
|
32
|
+
if [[ ! -f "$SHARED_POLICY_LIB" ]]; then
|
|
33
|
+
SHARED_POLICY_LIB="$(dirname "$0")/../../shared/hooks/policies/lib.sh"
|
|
34
|
+
fi
|
|
35
|
+
if [[ -f "$SHARED_POLICY_LIB" ]]; then
|
|
36
|
+
source "$SHARED_POLICY_LIB"
|
|
37
|
+
storage_upkeep_async "$CWD"
|
|
38
|
+
fi
|
|
39
|
+
) >/dev/null 2>&1 || true
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# No config home (lib.sh leaves the state paths empty): no session store to write, but the
|
|
43
|
+
# storage upkeep still starts (086 IC-010).
|
|
44
|
+
if [[ -z "$STATE_DIR" ]]; then
|
|
45
|
+
start_storage_upkeep
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
|
|
27
49
|
# ── 1. Log session end ────────────────────────────────────────────────────────
|
|
28
50
|
|
|
29
51
|
mkdir -p "$(dirname "$SESSIONS_LOG")"
|
|
@@ -60,16 +82,7 @@ if [[ -n "$SESSION_ID" ]]; then
|
|
|
60
82
|
rm -rf "$SESSION_PATH" 2>/dev/null || true
|
|
61
83
|
fi
|
|
62
84
|
|
|
63
|
-
|
|
64
|
-
SHARED_POLICY_LIB="$(dirname "$0")/../../.doflow/shared/hooks/policies/lib.sh"
|
|
65
|
-
if [[ ! -f "$SHARED_POLICY_LIB" ]]; then
|
|
66
|
-
SHARED_POLICY_LIB="$(dirname "$0")/../../shared/hooks/policies/lib.sh"
|
|
67
|
-
fi
|
|
68
|
-
if [[ -f "$SHARED_POLICY_LIB" ]]; then
|
|
69
|
-
source "$SHARED_POLICY_LIB"
|
|
70
|
-
storage_upkeep_async "$CWD"
|
|
71
|
-
fi
|
|
72
|
-
) >/dev/null 2>&1 || true
|
|
85
|
+
start_storage_upkeep
|
|
73
86
|
|
|
74
87
|
# ── 4. Trim sessions.log (lock-guarded) ───────────────────────────────────────
|
|
75
88
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex
|
|
3
|
-
set -
|
|
2
|
+
# Codex front door: session-context through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
5
|
-
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
6
|
+
doflow_bridge codex SessionStart session-context
|
|
7
|
+
exit $?
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Codex
|
|
3
|
-
set -
|
|
2
|
+
# Codex front door: stop-check through the shared lifecycle bridge.
|
|
3
|
+
set -uo pipefail
|
|
4
4
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
5
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then printf '{}\n'; exit 0; fi
|
|
5
6
|
rc=0
|
|
6
|
-
|
|
7
|
-
[ "$rc" -eq
|
|
8
|
-
|
|
7
|
+
output="$(doflow_bridge codex Stop stop-check)" || rc=$?
|
|
8
|
+
if [ "$rc" -eq 0 ]; then printf '%s\n' "$output"; fi
|
|
9
|
+
exit "$rc"
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
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
|
+
# Codex front door: subagent-audit through the shared lifecycle bridge.
|
|
4
|
+
set -uo pipefail
|
|
6
5
|
export DOFLOW_AGENT="${DOFLOW_AGENT:-codex}"
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
if ! . "$(dirname "$0")/../../.doflow/shared/hooks/bridge/bridge.sh" 2>/dev/null; then exit 0; fi
|
|
7
|
+
payload=$(cat)
|
|
8
|
+
event=$(printf '%s' "$payload" | jq -r '.hook_event_name // "SubagentStart"' 2>/dev/null || printf 'SubagentStart')
|
|
9
|
+
has_jq=1
|
|
10
|
+
command -v jq >/dev/null 2>&1 || has_jq=0
|
|
11
|
+
rc=0
|
|
12
|
+
doflow_bridge codex "$event" subagent-audit <<<"$payload" || rc=$?
|
|
13
|
+
if [ "$has_jq" -eq 0 ]; then
|
|
14
|
+
printf '{}\n'
|
|
15
|
+
exit 0
|
|
16
|
+
fi
|
|
17
|
+
if [ "$rc" -eq 0 ]; then
|
|
18
|
+
case "$DF_BRIDGE_OUTCOME" in allow|advisory) printf '{}\n' ;; esac
|
|
19
|
+
fi
|
|
20
|
+
exit "$rc"
|