@kontourai/flow-agents 2.3.0 → 2.4.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/.github/CODEOWNERS +8 -0
- package/.github/workflows/ci.yml +32 -0
- package/AGENTS.md +4 -4
- package/CHANGELOG.md +39 -0
- package/CONTEXT.md +14 -0
- package/README.md +9 -3
- package/agents/dev.json +1 -1
- package/agents/tool-code-reviewer.json +1 -1
- package/agents/tool-planner.json +3 -3
- package/agents/tool-verifier.json +3 -3
- package/build/src/cli/console-learning-projection.js +3 -2
- package/build/src/cli/init.js +104 -21
- package/build/src/cli/kit.js +37 -6
- package/build/src/cli/pull-work-provider.js +1 -1
- package/build/src/cli/usage-feedback.js +3 -3
- package/build/src/cli/validate-hook-influence.js +1 -0
- package/build/src/cli/validate-workflow-artifacts.js +22 -6
- package/build/src/cli/workflow-artifact-cleanup-audit.js +36 -2
- package/build/src/cli/workflow-sidecar.d.ts +14 -7
- package/build/src/cli/workflow-sidecar.js +792 -69
- package/build/src/flow-kit/validate.d.ts +23 -0
- package/build/src/flow-kit/validate.js +67 -1
- package/build/src/index.d.ts +1 -1
- package/build/src/index.js +1 -1
- package/build/src/lib/flow-resolver.d.ts +6 -4
- package/build/src/lib/flow-resolver.js +125 -58
- package/build/src/lib/local-artifact-root.d.ts +14 -2
- package/build/src/lib/local-artifact-root.js +22 -5
- package/build/src/lib/workflow-learning-projection.js +2 -2
- package/build/src/runtime-adapters.d.ts +12 -0
- package/build/src/runtime-adapters.js +56 -16
- package/build/src/tools/build-universal-bundles.js +49 -16
- package/build/src/tools/generate-context-map.js +10 -8
- package/build/src/tools/validate-source-tree.js +23 -1
- package/console.telemetry.json +22 -0
- package/context/contracts/artifact-contract.md +38 -7
- package/context/contracts/builder-kit-workflow-state-contract.md +3 -2
- package/context/contracts/decision-registry-contract.md +263 -0
- package/context/contracts/delivery-contract.md +1 -1
- package/context/contracts/planning-contract.md +2 -1
- package/context/contracts/review-contract.md +5 -3
- package/context/contracts/verification-contract.md +9 -1
- package/context/contracts/work-item-contract.md +1 -1
- package/context/deferred/parallelization.md +1 -1
- package/context/gate-awareness.md +4 -4
- package/context/scripts/git-status.sh +2 -2
- package/context/scripts/hooks/config-protection.js +502 -2
- package/context/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/context/scripts/hooks/run-hook.js +14 -1
- package/context/scripts/hooks/stop-goal-fit.js +1140 -99
- package/context/scripts/hooks/workflow-steering.js +212 -6
- package/docs/adr/0007-flow-skill-kit-tool-boundary.md +2 -0
- package/docs/adr/0015-flow-flow-agents-boundary-reconciliation.md +35 -0
- package/docs/adr/0019-kit-dependency-ownership.md +62 -0
- package/docs/adr/0020-trust-reconcile-manifest-and-claim-classification.md +290 -0
- package/docs/adr/0021-assignment-leases-and-stale-claim-takeover.md +221 -0
- package/docs/adr/0022-fail-closed-delivery-reconciliation-with-governed-exemptions.md +283 -0
- package/docs/agent-system-guidebook.md +3 -3
- package/docs/agent-usage-feedback-loop.md +6 -6
- package/docs/context-map.md +9 -7
- package/docs/decisions/decision-records.md +57 -0
- package/docs/decisions/index.md +14 -0
- package/docs/decisions/promotion-gate.md +52 -0
- package/docs/developer-architecture.md +1 -1
- package/docs/fixture-ownership.md +3 -0
- package/docs/flow-kit-repository-contract.md +5 -5
- package/docs/getting-started.md +12 -2
- package/docs/integrations/harness-install.md +2 -1
- package/docs/kit-authoring-guide.md +64 -5
- package/docs/knowledge-kit.md +5 -1
- package/docs/learnings/2026-07-improvement-program.md +203 -0
- package/docs/migrations.md +6 -5
- package/docs/north-star.md +2 -2
- package/docs/operating-layers.md +4 -3
- package/docs/repository-structure.md +5 -5
- package/docs/skills-map.md +8 -8
- package/docs/spec/runtime-hook-surface.md +19 -15
- package/docs/spikes/graph-provider-2026-07.md +155 -0
- package/docs/standards-register.md +7 -7
- package/docs/trust-anchor-adoption.md +105 -4
- package/docs/work-item-adapters.md +1 -1
- package/docs/workflow-artifact-lifecycle.md +72 -9
- package/docs/workflow-eval-strategy.md +3 -3
- package/docs/workflow-shared-contracts.md +1 -1
- package/docs/workflow-usage-guide.md +254 -21
- package/evals/acceptance/DEMO-false-completion.md +20 -11
- package/evals/acceptance/prove-capture-teeth-declared.sh +15 -15
- package/evals/acceptance/prove-capture-teeth.sh +11 -11
- package/evals/acceptance/test_kiro_harness.sh +1 -1
- package/evals/ci/antigaming-suite.sh +5 -0
- package/evals/ci/run-baseline.sh +65 -1
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/invalid-bad-dependency/kit.json +13 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/valid-with-dependency/kit.json +13 -0
- package/evals/fixtures/hook-influence/cases.json +32 -0
- package/evals/fixtures/pull-work-provider/github-issues.json +6 -6
- package/evals/fixtures/trust-reconcile-exploits/fabricated-attestation.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/no-label-bypass.json +36 -0
- package/evals/fixtures/trust-reconcile-exploits/skip-assumed-bypass.json +59 -0
- package/evals/fixtures/trust-reconcile-exploits/status-misassertion.json +48 -0
- package/evals/fixtures/trust-reconcile-exploits/waived-command-check.json +44 -0
- package/evals/fixtures/trust-reconcile-mixed-bundle/mixed-bundle.json +159 -0
- package/evals/fixtures/trust-reconcile-ws3/ws3-bundle.json +920 -0
- package/evals/integration/test_actor_identity.sh +254 -0
- package/evals/integration/test_builder_step_producers.sh +33 -23
- package/evals/integration/test_bundle_install.sh +22 -16
- package/evals/integration/test_bundle_lifecycle.sh +11 -11
- package/evals/integration/test_captured_fail_reconciliation.sh +50 -50
- package/evals/integration/test_checkpoint_signing.sh +43 -0
- package/evals/integration/test_claim_lookup.sh +4 -4
- package/evals/integration/test_codex_hook_resolution.sh +114 -0
- package/evals/integration/test_command_log_concurrency.sh +8 -8
- package/evals/integration/test_command_log_fork_classification.sh +3 -3
- package/evals/integration/test_command_log_integrity.sh +16 -16
- package/evals/integration/test_console_learning_projection.sh +1 -1
- package/evals/integration/test_dual_emit_flow_step.sh +145 -0
- package/evals/integration/test_enforcer_expects_driven.sh +12 -12
- package/evals/integration/test_evidence_capture_hook.sh +14 -13
- package/evals/integration/test_fixture_retirement_audit.sh +2 -2
- package/evals/integration/test_flow_agents_statusline.sh +2 -2
- package/evals/integration/test_flow_kit_install_git.sh +52 -0
- package/evals/integration/test_flow_kit_repository.sh +2 -0
- package/evals/integration/test_flowdef_session_activation.sh +6 -6
- package/evals/integration/test_flowdef_union_floor_regression.sh +429 -0
- package/evals/integration/test_gate_bypass_chain.sh +52 -40
- package/evals/integration/test_gate_lockdown.sh +97 -73
- package/evals/integration/test_gate_review_inquiry_records.sh +3 -3
- package/evals/integration/test_goal_fit_escape_hatch.sh +10 -10
- package/evals/integration/test_goal_fit_ghost_session.sh +104 -0
- package/evals/integration/test_goal_fit_hook.sh +32 -32
- package/evals/integration/test_goal_fit_rederive.sh +9 -9
- package/evals/integration/test_hook_category_behaviors.sh +103 -0
- package/evals/integration/test_hook_influence_cases.sh +1 -0
- package/evals/integration/test_install_merge.sh +262 -1
- package/evals/integration/test_kit_identity_trust.sh +6 -6
- package/evals/integration/test_liveness_conflict_injection.sh +587 -0
- package/evals/integration/test_liveness_heartbeat.sh +677 -0
- package/evals/integration/test_liveness_verdict.sh +394 -0
- package/evals/integration/test_local_flow_kit_install.sh +15 -0
- package/evals/integration/test_phase_map_and_gate_claim.sh +63 -11
- package/evals/integration/test_promote_gate.sh +178 -0
- package/evals/integration/test_publish_delivery.sh +2 -2
- package/evals/integration/test_pull_work_liveness_preflight.sh +386 -0
- package/evals/integration/test_pull_work_provider.sh +2 -2
- package/evals/integration/test_reconcile_soundness.sh +4 -4
- package/evals/integration/test_resolvefirststep_security.sh +22 -0
- package/evals/integration/test_runtime_adapter_activation.sh +87 -18
- package/evals/integration/test_session_resume_roundtrip.sh +147 -0
- package/evals/integration/test_sidecar_field_preservation.sh +249 -0
- package/evals/integration/test_trust_reconcile.sh +2 -2
- package/evals/integration/test_trust_reconcile_manifest.sh +79 -0
- package/evals/integration/test_trust_reconcile_mixed_bundle.sh +96 -0
- package/evals/integration/test_trust_reconcile_negatives.sh +151 -0
- package/evals/integration/test_usage_feedback_global.sh +5 -5
- package/evals/integration/test_validate_artifacts_portability.sh +60 -0
- package/evals/integration/test_verify_cli.sh +2 -2
- package/evals/integration/test_veritas_governance_kit.sh +117 -0
- package/evals/integration/test_workflow_artifact_cleanup_audit.sh +26 -1
- package/evals/integration/test_workflow_artifacts.sh +33 -0
- package/evals/integration/test_workflow_sidecar_writer.sh +723 -74
- package/evals/integration/test_workflow_steering_hook.sh +175 -5
- package/evals/lib/codex-provider.sh +1 -1
- package/evals/lib/node.sh +19 -1
- package/evals/run.sh +22 -0
- package/evals/static/test_decisions.sh +150 -0
- package/evals/static/test_flowdef_codeowners_coverage.sh +56 -0
- package/evals/static/test_package.sh +19 -10
- package/evals/static/test_universal_bundles.sh +48 -3
- package/evals/static/test_workflow_skills.sh +41 -8
- package/kits/builder/flows/build.flow.json +3 -74
- package/kits/builder/flows/publish-learn.flow.json +90 -0
- package/kits/builder/kit.json +11 -0
- package/kits/builder/skills/builder-shape/SKILL.md +1 -1
- package/kits/builder/skills/deliver/SKILL.md +13 -11
- package/kits/builder/skills/design-probe/SKILL.md +4 -4
- package/kits/builder/skills/evidence-gate/SKILL.md +26 -1
- package/kits/builder/skills/execute-plan/SKILL.md +2 -2
- package/kits/builder/skills/fix-bug/SKILL.md +2 -0
- package/kits/builder/skills/gate-review/SKILL.md +6 -6
- package/kits/builder/skills/idea-to-backlog/SKILL.md +1 -1
- package/kits/builder/skills/learning-review/SKILL.md +7 -7
- package/kits/builder/skills/pickup-probe/SKILL.md +5 -4
- package/kits/builder/skills/plan-work/SKILL.md +27 -5
- package/kits/builder/skills/pull-work/SKILL.md +80 -5
- package/kits/builder/skills/release-readiness/SKILL.md +4 -4
- package/kits/builder/skills/review-work/SKILL.md +24 -1
- package/kits/builder/skills/tdd-workflow/SKILL.md +2 -0
- package/kits/builder/skills/verify-work/SKILL.md +8 -1
- package/kits/catalog.json +6 -0
- package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +178 -0
- package/kits/veritas-governance/docs/README.md +75 -0
- package/kits/veritas-governance/fixtures/readiness/not-ready.readiness-report.json +4645 -0
- package/kits/veritas-governance/fixtures/readiness/ready.readiness-report.json +4403 -0
- package/kits/veritas-governance/flows/readiness-check.flow.json +35 -0
- package/kits/veritas-governance/kit.json +16 -0
- package/package.json +8 -4
- package/packaging/README.md +2 -2
- package/packaging/conformance/fixtures/config-protection--allow-read-state-json.json +20 -0
- package/packaging/conformance/fixtures/config-protection--block-write-state-json.json +20 -0
- package/packaging/conformance/fixtures/stop-goal-fit--block-bundle-disputed-claim.json +1 -1
- package/packaging/conformance/fixtures/stop-goal-fit--block-capture-contradicts-claimed-pass.json +1 -1
- package/packaging/manifest.json +9 -10
- package/schemas/decision-record.schema.json +109 -0
- package/schemas/workflow-evidence.schema.json +1 -1
- package/schemas/workflow-state.schema.json +5 -0
- package/scripts/README.md +8 -3
- package/scripts/check-content-boundary.cjs +1 -1
- package/scripts/check-decisions.cjs +356 -0
- package/scripts/ci/derive-claim-status.mjs +74 -0
- package/scripts/ci/trust-reconcile.js +436 -79
- package/scripts/git-status.sh +2 -2
- package/scripts/hooks/claude-telemetry-hook.js +37 -3
- package/scripts/hooks/codex-telemetry-hook.js +36 -2
- package/scripts/hooks/config-protection.js +102 -30
- package/scripts/hooks/evidence-capture.js +3 -3
- package/scripts/hooks/lib/actor-identity.js +368 -0
- package/scripts/hooks/lib/config-protection-remedies.js +69 -0
- package/scripts/hooks/lib/liveness-heartbeat.js +361 -0
- package/scripts/hooks/lib/liveness-policy.js +127 -0
- package/scripts/hooks/lib/liveness-read.js +105 -12
- package/scripts/hooks/lib/liveness-write.js +46 -0
- package/scripts/hooks/lib/local-artifact-paths.js +12 -6
- package/scripts/hooks/opencode-telemetry-hook.js +27 -1
- package/scripts/hooks/pi-telemetry-hook.js +27 -1
- package/scripts/hooks/stop-goal-fit.js +157 -26
- package/scripts/hooks/workflow-steering.js +77 -3
- package/scripts/install-codex-home.sh +138 -38
- package/scripts/statusline/flow-agents-statusline.js +2 -2
- package/src/cli/console-learning-projection.ts +3 -2
- package/src/cli/init.ts +101 -21
- package/src/cli/kit.ts +37 -6
- package/src/cli/public-api.test.mjs +58 -6
- package/src/cli/pull-work-provider.ts +1 -1
- package/src/cli/trust-bundle-policy-order.test.mjs +87 -0
- package/src/cli/usage-feedback.ts +3 -3
- package/src/cli/validate-hook-influence.ts +1 -0
- package/src/cli/validate-workflow-artifacts.ts +22 -6
- package/src/cli/veritas-readiness-adapter.test.mjs +267 -0
- package/src/cli/workflow-artifact-cleanup-audit.ts +35 -2
- package/src/cli/workflow-sidecar.ts +795 -71
- package/src/flow-kit/validate.ts +74 -1
- package/src/index.ts +6 -2
- package/src/lib/flow-resolver.ts +123 -55
- package/src/lib/local-artifact-root.ts +24 -5
- package/src/lib/workflow-learning-projection.ts +2 -2
- package/src/runtime-adapters.ts +61 -15
- package/src/tools/build-universal-bundles.ts +49 -16
- package/src/tools/generate-context-map.ts +10 -8
- package/src/tools/validate-source-tree.ts +23 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "veritas-governance.readiness-check",
|
|
3
|
+
"version": "1.0",
|
|
4
|
+
"steps": [
|
|
5
|
+
{ "id": "readiness", "next": "gate-check" },
|
|
6
|
+
{ "id": "gate-check", "next": null }
|
|
7
|
+
],
|
|
8
|
+
"gates": {
|
|
9
|
+
"gate-check-gate": {
|
|
10
|
+
"step": "gate-check",
|
|
11
|
+
"expects": [
|
|
12
|
+
{
|
|
13
|
+
"id": "readiness-verdict",
|
|
14
|
+
"kind": "trust.bundle",
|
|
15
|
+
"required": true,
|
|
16
|
+
"description": "A `veritas readiness --check evidence --working-tree` run, projected by the kit adapter (adapter/readiness-to-trust-bundle.mjs) into a Hachure trust.bundle, produced a verified software-readiness-verdict claim for this change.",
|
|
17
|
+
"explore_hint": "Run `veritas readiness --check evidence --working-tree`, project its evidence report with adapter/readiness-to-trust-bundle.mjs, then `flow attach-evidence <run> --gate gate-check-gate --file <bundle> --bundle`.",
|
|
18
|
+
"bundle_claim": {
|
|
19
|
+
"claimType": "software-readiness-verdict",
|
|
20
|
+
"subjectType": "repository-change",
|
|
21
|
+
"accepted_statuses": ["verified"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"on_route_back": {
|
|
26
|
+
"missing_evidence": "gate-check",
|
|
27
|
+
"default": "gate-check"
|
|
28
|
+
},
|
|
29
|
+
"route_back_policy": {
|
|
30
|
+
"max_attempts": 3,
|
|
31
|
+
"on_exceeded": "block"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": "1.0",
|
|
3
|
+
"id": "veritas-governance",
|
|
4
|
+
"name": "Veritas Governance Kit",
|
|
5
|
+
"description": "Turns a repo's Veritas-governed Repo Standards into deterministic, agentless gate evidence: a single flow gates a real `veritas readiness` run as a trust.bundle software-readiness-verdict claim. Wraps @kontourai/veritas via CLI invocation and a kit-local trust.bundle adapter; does not fork or reimplement standards evaluation.",
|
|
6
|
+
"flows": [
|
|
7
|
+
{
|
|
8
|
+
"id": "veritas-governance.readiness-check",
|
|
9
|
+
"path": "flows/readiness-check.flow.json",
|
|
10
|
+
"description": "Single-gate agentless flow: requires a verified software-readiness-verdict trust.bundle claim (projected from `veritas readiness --check evidence --working-tree`) before the gate-check step can pass. CI-callable, K0."
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"docs": [
|
|
14
|
+
{ "id": "veritas-governance.readme", "path": "docs/README.md" }
|
|
15
|
+
]
|
|
16
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kontourai/flow-agents",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Flow Agents — a Kontour product that applies Flow and Veritas discipline as a portable process layer inside the agent tools you already use: Claude Code, Codex, Kiro, opencode, pi, and GitHub Actions — with framework adapters (AWS Strands preview) on the same policy-engine contract.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agents",
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"!evals/results/",
|
|
92
92
|
"!**/.DS_Store",
|
|
93
93
|
"!**/.flow-agents/",
|
|
94
|
+
"!**/.kontourai/",
|
|
94
95
|
"!**/.surface/",
|
|
95
96
|
"!**/.telemetry/",
|
|
96
97
|
"!**/.veritas/",
|
|
@@ -126,6 +127,7 @@
|
|
|
126
127
|
"eval:static": "bash evals/run.sh static",
|
|
127
128
|
"eval:integration": "bash evals/run.sh integration",
|
|
128
129
|
"trust-reconcile-verify": "npm run build && npm run eval:static",
|
|
130
|
+
"trust-reconcile-manifest": "bash evals/ci/run-baseline.sh --manifest-json",
|
|
129
131
|
"eval:acceptance": "bash evals/run.sh acceptance",
|
|
130
132
|
"eval:llm": "bash evals/run.sh llm",
|
|
131
133
|
"eval:llm:codex": "bash evals/run.sh llm dev --runtime codex",
|
|
@@ -133,6 +135,8 @@
|
|
|
133
135
|
"promptfoo": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true PROMPTFOO_DISABLE_TELEMETRY=true promptfoo",
|
|
134
136
|
"promptfoo:view": "PROMPTFOO_CONFIG_DIR=.promptfoo PROMPTFOO_DISABLE_WAL_MODE=true PROMPTFOO_DISABLE_TELEMETRY=true promptfoo view",
|
|
135
137
|
"check:content-boundary": "node scripts/check-content-boundary.cjs",
|
|
138
|
+
"check:decisions": "node scripts/check-decisions.cjs check",
|
|
139
|
+
"gen:decisions-index": "node scripts/check-decisions.cjs gen-index",
|
|
136
140
|
"prepack": "npm run build --silent && npm run validate:source --",
|
|
137
141
|
"kit": "npm run build --silent && node build/src/cli.js kit"
|
|
138
142
|
},
|
|
@@ -142,10 +146,10 @@
|
|
|
142
146
|
"typescript": "^6.0.3"
|
|
143
147
|
},
|
|
144
148
|
"dependencies": {
|
|
145
|
-
"@kontourai/flow": "
|
|
149
|
+
"@kontourai/flow": "^2.0.0"
|
|
146
150
|
},
|
|
147
151
|
"optionalDependencies": {
|
|
148
|
-
"
|
|
149
|
-
"
|
|
152
|
+
"@kontourai/surface": "^2.0.0",
|
|
153
|
+
"hachure": "^0.9.0"
|
|
150
154
|
}
|
|
151
155
|
}
|
package/packaging/README.md
CHANGED
|
@@ -19,7 +19,7 @@ For the full source/generated/runtime inventory, see [Repository Structure](../d
|
|
|
19
19
|
|
|
20
20
|
- `dist/kiro/` keeps native Kiro JSON agents and rewrites path-bound config through the install token.
|
|
21
21
|
- `dist/claude-code/` exports `.claude/agents/*.md` and `.claude/skills/*/SKILL.md`.
|
|
22
|
-
- `dist/codex/` exports `.codex/agents/*.toml`, `.codex/skills/*/SKILL.md`, and profile config for `
|
|
22
|
+
- `dist/codex/` exports `.codex/agents/*.toml`, `.codex/skills/*/SKILL.md`, and generated profile config for operating intents such as `builder` and `personal`.
|
|
23
23
|
|
|
24
24
|
All targets also receive shared canonical directories where supported: `context/`, `powers/`, `prompts/`, `scripts/`, and `evals/`.
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ All targets also receive shared canonical directories where supported: `context/
|
|
|
29
29
|
|
|
30
30
|
`dist/` is a generated export surface, not the source of truth. Installed runtime directories such as `.codex/` and `.claude/` are also not source. They are created from the generated target bundle and installer scripts. If generated or installed hook config is wrong, fix the canonical source, rebuild `dist/`, and reinstall the runtime config.
|
|
31
31
|
|
|
32
|
-
Runtime workflow state under `.flow-agents/<slug>/` is local working memory. Packaging should copy canonical workflow contracts and skills, but it should not publish local task artifacts as product source. Durable outcomes must be promoted into docs, source, schemas, or provider records before merge.
|
|
32
|
+
Runtime workflow state under `.kontourai/flow-agents/<slug>/` is local working memory. Packaging should copy canonical workflow contracts and skills, but it should not publish local task artifacts as product source. Durable outcomes must be promoted into docs, source, schemas, or provider records before merge.
|
|
33
33
|
|
|
34
34
|
## Validation And Build
|
|
35
35
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "config-protection allows a read-only tool (Read) on a sidecar state.json — path protection must not block reads",
|
|
3
|
+
"policy_class": "config-protection",
|
|
4
|
+
"canonical_event": "preToolUse",
|
|
5
|
+
"conformance_level": "L2",
|
|
6
|
+
"hook_id": "config-protection",
|
|
7
|
+
"hook_script": "config-protection.js",
|
|
8
|
+
"payload": {
|
|
9
|
+
"hook_event_name": "PreToolUse",
|
|
10
|
+
"tool_name": "Read",
|
|
11
|
+
"tool_input": {
|
|
12
|
+
"path": "/repo/.kontourai/flow-agents/my-slug/state.json"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"expected": {
|
|
16
|
+
"exit_code": 0,
|
|
17
|
+
"stderr_is_empty": true,
|
|
18
|
+
"stdout_echoes_input": true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "config-protection blocks a Write to a sidecar state.json and routes to the sanctioned sidecar writer (never advising the hook be disabled)",
|
|
3
|
+
"policy_class": "config-protection",
|
|
4
|
+
"canonical_event": "preToolUse",
|
|
5
|
+
"conformance_level": "L2",
|
|
6
|
+
"hook_id": "config-protection",
|
|
7
|
+
"hook_script": "config-protection.js",
|
|
8
|
+
"payload": {
|
|
9
|
+
"hook_event_name": "PreToolUse",
|
|
10
|
+
"tool_name": "Write",
|
|
11
|
+
"tool_input": {
|
|
12
|
+
"path": "/repo/.kontourai/flow-agents/my-slug/state.json"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"expected": {
|
|
16
|
+
"exit_code": 2,
|
|
17
|
+
"stderr_contains": ["BLOCKED", "advance-state", "Never disable this hook"],
|
|
18
|
+
"stdout_is_empty": true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"AGENTS.md": "# Test Repo\n",
|
|
14
14
|
".flow-agents/false-bundle/false-bundle--deliver.md": "# False Bundle\n\nbranch: main\nstatus: delivered\ntype: deliver\n\n## Definition Of Done\n- [x] tests pass\n\n## Goal Fit Gate\n- [x] acceptance verified\n\n### Verdict: PASS\n",
|
|
15
15
|
".flow-agents/false-bundle/state.json": "{\"schema_version\":\"1.0\",\"task_slug\":\"false-bundle\",\"status\":\"delivered\",\"phase\":\"done\",\"updated_at\":\"2026-06-23T00:00:00Z\",\"next_action\":{\"status\":\"done\",\"summary\":\"done\"}}",
|
|
16
|
-
".flow-agents/false-bundle/trust.bundle": "{\"schemaVersion\":
|
|
16
|
+
".flow-agents/false-bundle/trust.bundle": "{\"schemaVersion\":5,\"source\":\"flow-agents/workflow-sidecar\",\"claims\":[{\"id\":\"c1\",\"subjectId\":\"false-bundle/unit-tests\",\"claimType\":\"workflow.check.command\",\"fieldOrBehavior\":\"unit tests\",\"value\":\"fail\",\"impactLevel\":\"high\",\"status\":\"disputed\",\"createdAt\":\"2026-06-23T00:00:00Z\",\"updatedAt\":\"2026-06-23T00:00:00Z\"}],\"evidence\":[],\"policies\":[],\"events\":[]}"
|
|
17
17
|
},
|
|
18
18
|
"env": {
|
|
19
19
|
"FLOW_AGENTS_GOAL_FIT_MODE": "block",
|
package/packaging/conformance/fixtures/stop-goal-fit--block-capture-contradicts-claimed-pass.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
".flow-agents/false-pass/false-pass--deliver.md": "# False Pass\n\nbranch: main\nstatus: delivered\ntype: deliver\n\n## Definition Of Done\n- [x] tests pass\n\n## Goal Fit Gate\n- [x] acceptance verified\n\n### Verdict: PASS\n",
|
|
15
15
|
".flow-agents/false-pass/state.json": "{\"schema_version\":\"1.0\",\"task_slug\":\"false-pass\",\"status\":\"delivered\",\"phase\":\"done\",\"updated_at\":\"2026-06-23T00:00:00Z\",\"next_action\":{\"status\":\"done\",\"summary\":\"done\"}}",
|
|
16
16
|
".flow-agents/false-pass/command-log.jsonl": "{\"command\":\"npm test\",\"observedResult\":\"fail\",\"exitCode\":1,\"capturedAt\":\"2026-06-23T00:00:00Z\",\"source\":\"postToolUse-capture\"}\n",
|
|
17
|
-
".flow-agents/false-pass/trust.bundle": "{\"schemaVersion\":
|
|
17
|
+
".flow-agents/false-pass/trust.bundle": "{\"schemaVersion\": 5, \"source\": \"flow-agents/workflow-sidecar\", \"claims\": [{\"id\": \"c1\", \"subjectId\": \"false-pass/unit-tests\", \"claimType\": \"workflow.check.command\", \"fieldOrBehavior\": \"unit tests\", \"value\": \"pass\", \"impactLevel\": \"high\", \"status\": \"verified\", \"createdAt\": \"2026-06-23T00:00:00Z\", \"updatedAt\": \"2026-06-23T00:00:00Z\"}], \"evidence\": [{\"id\": \"ev:c1\", \"claimId\": \"c1\", \"evidenceType\": \"test_output\", \"method\": \"validation\", \"sourceRef\": \"false-pass/command-log.jsonl\", \"excerptOrSummary\": \"unit tests\", \"observedAt\": \"2026-06-23T00:00:00Z\", \"collectedBy\": \"flow-agents/workflow-sidecar\", \"passing\": true, \"execution\": {\"runner\": \"bash\", \"label\": \"npm test\", \"isError\": false}}], \"policies\": [], \"events\": [{\"id\": \"evt:c1\", \"claimId\": \"c1\", \"status\": \"verified\", \"actor\": \"flow-agents/workflow-sidecar\", \"method\": \"validation\", \"evidenceIds\": [\"ev:c1\"], \"createdAt\": \"2026-06-23T00:00:00Z\", \"verifiedAt\": \"2026-06-23T00:00:00Z\"}]}"
|
|
18
18
|
},
|
|
19
19
|
"env": {
|
|
20
20
|
"FLOW_AGENTS_GOAL_FIT_MODE": "block",
|
package/packaging/manifest.json
CHANGED
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
"install_default": "~/.flow-agents"
|
|
26
26
|
},
|
|
27
27
|
"claude_code": {
|
|
28
|
-
"task_dir": ".flow-agents",
|
|
28
|
+
"task_dir": ".kontourai/flow-agents",
|
|
29
29
|
"permissions": {
|
|
30
30
|
"defaultMode": "auto"
|
|
31
31
|
},
|
|
32
32
|
"skipDangerousModePermissionPrompt": true
|
|
33
33
|
},
|
|
34
34
|
"codex": {
|
|
35
|
-
"task_dir": ".flow-agents",
|
|
35
|
+
"task_dir": ".kontourai/flow-agents",
|
|
36
36
|
"settings": {
|
|
37
37
|
"approvals_reviewer": "auto_review"
|
|
38
38
|
},
|
|
@@ -57,22 +57,21 @@
|
|
|
57
57
|
"dev"
|
|
58
58
|
],
|
|
59
59
|
"profiles": {
|
|
60
|
-
"
|
|
60
|
+
"builder": {
|
|
61
61
|
"model": "gpt-5.5",
|
|
62
62
|
"model_reasoning_effort": "medium",
|
|
63
63
|
"approval_policy": "on-request",
|
|
64
64
|
"sandbox_mode": "workspace-write",
|
|
65
65
|
"web_search": "cached",
|
|
66
|
-
"developer_instructions": "You are operating in Flow Agents
|
|
66
|
+
"developer_instructions": "You are operating in Flow Agents Builder mode. You write and modify code, validate it works, and deliver clean results. You own the code; specialist tool-* subagents provide bounded context, review, verification, or parallel implementation support. Use deliver for feature work, fix-bug for bug fixes, plan-work for planning, execute-plan for approved plans, review-work for critique, verify-work for evidence collection, search-first for unfamiliar external APIs, and context-budget when context grows. When a workflow skill or shared contract names a delegate, that delegate is a required gate, not an optional optimization: plan-work must delegate to tool-planner, execute-plan to tool-worker, review-work to tool-code-reviewer and conditionally tool-security-reviewer, verify-work to tool-verifier, and browser/UI verification to tool-playwright when those agents are available. Attempt required delegation even in read-only or partially blocked environments; if blocked, report the blocked gate as NOT_VERIFIED or incomplete with evidence instead of replacing it with a local summary. In progress and final reports, name exact delegate ids such as tool-planner, tool-worker, tool-code-reviewer, tool-security-reviewer, tool-verifier, and tool-playwright so text-only evals remain auditable when telemetry is unavailable. In Codex, required specialist delegation must pass the role through the spawn tool, for example agent_type=tool-worker; do not spawn unnamed/default subagents for Flow Agents worker, planner, reviewer, verifier, or Playwright gates."
|
|
67
67
|
},
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"model": "amazon.nova-pro-v1:0",
|
|
68
|
+
"personal": {
|
|
69
|
+
"model": "gpt-5.4-mini",
|
|
71
70
|
"model_reasoning_effort": "medium",
|
|
72
71
|
"approval_policy": "on-request",
|
|
73
72
|
"sandbox_mode": "workspace-write",
|
|
74
73
|
"web_search": "cached",
|
|
75
|
-
"developer_instructions": "You are operating in Flow Agents
|
|
74
|
+
"developer_instructions": "You are operating in Flow Agents Personal mode for email, knowledge work, research, writing, and lightweight automation. Keep durable notes and decisions easy to recover across sessions. Use knowledge-capture when the user asks you to remember, save, capture, file, or bookmark context, or when a source, decision, relationship detail, or reusable lesson should be indexed. Prefer concise synthesis, explicit source attribution when web research is used, and reversible changes to local files. For software work, switch back to Builder mode or explicitly use the Builder workflow skills so planning, review, and verification gates remain intact."
|
|
76
75
|
}
|
|
77
76
|
},
|
|
78
77
|
"model_providers": {
|
|
@@ -223,10 +222,10 @@
|
|
|
223
222
|
]
|
|
224
223
|
},
|
|
225
224
|
"opencode": {
|
|
226
|
-
"task_dir": ".flow-agents",
|
|
225
|
+
"task_dir": ".kontourai/flow-agents",
|
|
227
226
|
"default_agent_mode": "subagent"
|
|
228
227
|
},
|
|
229
228
|
"pi": {
|
|
230
|
-
"task_dir": ".flow-agents"
|
|
229
|
+
"task_dir": ".kontourai/flow-agents"
|
|
231
230
|
}
|
|
232
231
|
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://flow-agents.dev/schemas/decision-record.schema.json",
|
|
4
|
+
"title": "Flow Agents Decision Record",
|
|
5
|
+
"description": "YAML frontmatter for a topic-keyed living decision record at docs/decisions/<topic-slug>.md. One file per decision SUBJECT. Supersession is an edit to this file; tombstones (superseded_by / merged_into) point at the slug that carries the current answer. Numbered ADRs under docs/adr are frozen history and are NOT validated by this schema.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": ["status", "subject", "decided", "evidence"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"status": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"enum": ["current", "superseded", "merged", "needs-decision"],
|
|
13
|
+
"description": "current: this file holds the live answer for its subject. superseded: the subject moved to another topic slug (see superseded_by); this file is a tombstone. merged: the subject was folded into another topic slug (see merged_into); this file is a tombstone. needs-decision: a stub topic that names an open subject with no ratified answer yet (used by ADR freeze tooling, issue #314, to record that a frozen ADR's subject still needs a living decision). A needs-decision stub carries provenance evidence but no live decision body."
|
|
14
|
+
},
|
|
15
|
+
"subject": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"description": "The decision SUBJECT, a noun phrase drawn from the repository's CONTEXT.md domain vocabulary. The subject is the topic namespace; if the term is absent from CONTEXT.md, add it there first."
|
|
19
|
+
},
|
|
20
|
+
"decided": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
23
|
+
"description": "ISO date (YYYY-MM-DD) the current decision was ratified. For needs-decision stubs, the date the stub was recorded."
|
|
24
|
+
},
|
|
25
|
+
"evidence": {
|
|
26
|
+
"type": "array",
|
|
27
|
+
"minItems": 1,
|
|
28
|
+
"description": "Derivation context is LINKED here, never inlined. Each ref points at durable provenance: an issue, a PR, an archived session artifact, or a frozen ADR. Secret-shaped literals are refused.",
|
|
29
|
+
"items": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"additionalProperties": false,
|
|
32
|
+
"required": ["kind", "ref"],
|
|
33
|
+
"properties": {
|
|
34
|
+
"kind": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"enum": ["issue", "pr", "commit", "session-archive", "adr", "doc", "url"],
|
|
37
|
+
"description": "issue/pr/commit: a GitHub reference (number, URL, or SHA). session-archive: a path to an archived session artifact under .kontourai/ that was promoted at retirement. adr: a frozen numbered ADR under docs/adr that is provenance for this decision. doc: a repository document path. url: an external permalink."
|
|
38
|
+
},
|
|
39
|
+
"ref": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1,
|
|
42
|
+
"description": "The reference literal. Must not contain secret-shaped material (access keys, tokens, private keys, JWTs).",
|
|
43
|
+
"not": {
|
|
44
|
+
"pattern": "(AKIA[A-Z0-9]{16}|ASIA[A-Z0-9]{16}|gh[pousr]_[A-Za-z0-9_]{36,}|BEGIN[A-Z ]*PRIVATE KEY|eyJ[A-Za-z0-9_-]{10,}\\.eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,})"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"supersedes": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"description": "Optional. Topic slugs whose subjects this file absorbed (e.g. the surviving file of a merge lists the slugs it merged in). Each item must be a valid topic slug.",
|
|
53
|
+
"items": { "$ref": "#/$defs/slug" }
|
|
54
|
+
},
|
|
55
|
+
"superseded_by": {
|
|
56
|
+
"allOf": [{ "$ref": "#/$defs/slug" }],
|
|
57
|
+
"description": "Present only when status is superseded. The topic slug that now carries the current answer for this subject (the subject was renamed or split to a different topic)."
|
|
58
|
+
},
|
|
59
|
+
"merged_into": {
|
|
60
|
+
"allOf": [{ "$ref": "#/$defs/slug" }],
|
|
61
|
+
"description": "Present only when status is merged. The topic slug this subject was folded into."
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"allOf": [
|
|
65
|
+
{
|
|
66
|
+
"if": { "properties": { "status": { "const": "current" } } },
|
|
67
|
+
"then": {
|
|
68
|
+
"not": {
|
|
69
|
+
"anyOf": [
|
|
70
|
+
{ "required": ["superseded_by"] },
|
|
71
|
+
{ "required": ["merged_into"] }
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"if": { "properties": { "status": { "const": "superseded" } } },
|
|
78
|
+
"then": {
|
|
79
|
+
"required": ["superseded_by"],
|
|
80
|
+
"not": { "required": ["merged_into"] }
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"if": { "properties": { "status": { "const": "merged" } } },
|
|
85
|
+
"then": {
|
|
86
|
+
"required": ["merged_into"],
|
|
87
|
+
"not": { "required": ["superseded_by"] }
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"if": { "properties": { "status": { "const": "needs-decision" } } },
|
|
92
|
+
"then": {
|
|
93
|
+
"not": {
|
|
94
|
+
"anyOf": [
|
|
95
|
+
{ "required": ["superseded_by"] },
|
|
96
|
+
{ "required": ["merged_into"] }
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"$defs": {
|
|
103
|
+
"slug": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
|
|
106
|
+
"description": "A topic slug: lowercase kebab-case nouns from CONTEXT.md vocabulary. Resolves to docs/decisions/<slug>.md."
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -174,7 +174,7 @@
|
|
|
174
174
|
},
|
|
175
175
|
"kind": {
|
|
176
176
|
"type": "string",
|
|
177
|
-
"enum": ["build", "types", "lint", "test", "security", "diff", "browser", "runtime", "policy", "external"]
|
|
177
|
+
"enum": ["build", "types", "lint", "test", "command", "security", "diff", "browser", "runtime", "policy", "external"]
|
|
178
178
|
},
|
|
179
179
|
"status": {
|
|
180
180
|
"type": "string",
|
|
@@ -36,6 +36,11 @@
|
|
|
36
36
|
"owner": {
|
|
37
37
|
"type": "string"
|
|
38
38
|
},
|
|
39
|
+
"branch": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"minLength": 1,
|
|
42
|
+
"description": "Routing branch for this session, e.g. agent/<actor>/<slug> (ADR 0021 \u00a73/\u00a75, issue #289). Optional for migration honesty: legacy/in-flight sessions predate this field. ensure-session always writes it for newly created sessions; validate-workflow-artifacts warns (does not fail) when it is absent."
|
|
43
|
+
},
|
|
39
44
|
"created_at": {
|
|
40
45
|
"type": "string",
|
|
41
46
|
"format": "date-time"
|
package/scripts/README.md
CHANGED
|
@@ -52,7 +52,7 @@ renamed, or changes category, update the table and the validator together.
|
|
|
52
52
|
| `codex-telemetry-hook.js` | telemetry shim | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Captures Codex hook telemetry and fails open. |
|
|
53
53
|
| `run-hook.js` | hook runner | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_goal_fit_hook.sh`, `evals/integration/test_workflow_steering_hook.sh` | Applies profile/disable flags, traversal checks, and hook execution. |
|
|
54
54
|
| `config-protection.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Blocks unsafe runtime config edits. |
|
|
55
|
-
| `evidence-capture.js` | policy hook | `evals/integration/test_evidence_capture_hook.sh` | Deterministically captures command executions to `.flow-agents/<slug>/command-log.jsonl` so evidence is machine-recorded, not model-claimed (cross-referenced by stop-goal-fit). |
|
|
55
|
+
| `evidence-capture.js` | policy hook | `evals/integration/test_evidence_capture_hook.sh` | Deterministically captures command executions to `.kontourai/flow-agents/<slug>/command-log.jsonl` so evidence is machine-recorded, not model-claimed (cross-referenced by stop-goal-fit). |
|
|
56
56
|
| `governance-audit.sh` | policy hook | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Emits governance/Veritas audit context when configured. |
|
|
57
57
|
| `opencode-hook-adapter.js` | runtime adapter | `evals/integration/test_bundle_install.sh` | Translates opencode plugin events into the shared hook runner contract. |
|
|
58
58
|
| `opencode-telemetry-hook.js` | telemetry shim | `evals/integration/test_bundle_install.sh` | Captures opencode plugin telemetry and fails open. |
|
|
@@ -67,10 +67,15 @@ renamed, or changes category, update the table and the validator together.
|
|
|
67
67
|
| `workflow-steering.js` | policy hook | `evals/integration/test_workflow_steering_hook.sh` | Provides workflow guidance from current artifact state. |
|
|
68
68
|
| `pre-commit-quality.js` | repo guardrail hook | `evals/integration/test_hook_category_behaviors.sh` | Supports repository Git hook checks, not installed runtime hooks. |
|
|
69
69
|
| `desktop-notify.sh` | local notification helper | `evals/integration/test_hook_category_behaviors.sh` | Optional local desktop notification helper. |
|
|
70
|
+
| `lib/actor-identity.js` | shared hook library | `evals/integration/test_actor_identity.sh` | Shared runtime-agnostic actor identity resolver (`resolveActor`) consumed by `workflow-steering.js` and `workflow-sidecar.js` to retire the shared `"local"` liveness-actor default (issue #287). |
|
|
70
71
|
| `lib/audit-transport.sh` | shared hook library | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Shared audit event transport functions. |
|
|
72
|
+
| `lib/config-protection-remedies.js` | shared hook library | `evals/integration/test_hook_category_behaviors.sh` | Sanctioned-remedy table for `config-protection.js` (WS8/ADR 0020 extraction). |
|
|
71
73
|
| `lib/hook-flags.js` | shared hook library | `evals/integration/test_hook_category_behaviors.sh` | Shared profile/disable flag parsing. |
|
|
74
|
+
| `lib/liveness-heartbeat.js` | shared hook library | `evals/integration/test_liveness_heartbeat.sh` | Shared tool-activity liveness heartbeat (`maybeEmitHeartbeat`); rides `postToolUse` across all four telemetry hook wrappers, throttled and fail-open (issue #288). |
|
|
75
|
+
| `lib/liveness-policy.js` | shared hook library | `evals/integration/test_workflow_sidecar_writer.sh`, `evals/integration/test_liveness_heartbeat.sh` | Shared liveness on/off predicate (`isLivenessEnabled`, default-on/opt-out) and TTL/heartbeat-throttle default resolution (issue #288). |
|
|
72
76
|
| `lib/liveness-read.js` | shared hook library | `evals/integration/test_session_resume_roundtrip.sh` | Shared liveness event reader + freshness check (`readLivenessEvents`, `freshHolders`); consumed by the reground hook and `workflow-sidecar liveness status`. |
|
|
73
|
-
| `lib/
|
|
77
|
+
| `lib/liveness-write.js` | shared hook library | `evals/integration/test_workflow_sidecar_writer.sh`, `evals/integration/test_liveness_heartbeat.sh` | Shared liveness event stream writer (`livenessStreamFile`, `appendLivenessEvent`), lifted from `workflow-sidecar.ts` so the CLI and hook wrappers share one writer (issue #288). |
|
|
78
|
+
| `lib/local-artifact-paths.js` | shared hook library | `evals/integration/test_migrate_local_artifacts.sh`, `evals/integration/test_workflow_sidecar_writer.sh` | Shared `.kontourai/flow-agents` artifact-root helpers for CJS hooks. |
|
|
74
79
|
| `lib/patterns.sh` | shared hook library | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Shared shell pattern constants. |
|
|
75
80
|
| `lib/resolve-formatter.js` | shared hook library | `evals/integration/test_hook_category_behaviors.sh` | Shared formatter resolution helper. |
|
|
76
81
|
|
|
@@ -103,7 +108,7 @@ prompting. Add `--allow-network` to probe a non-local HTTPS Console endpoint.
|
|
|
103
108
|
|
|
104
109
|
## Install And Repo Utilities
|
|
105
110
|
|
|
106
|
-
- `install-codex-home.sh`: installs the
|
|
111
|
+
- `install-codex-home.sh`: installs the generated Codex bundle into `CODEX_HOME`, or `~/.codex` when `CODEX_HOME` is unset. A positional destination argument is the explicit override for isolated homes and tests.
|
|
107
112
|
- `setup-repo-hooks.sh`: configures this clone's Git hook path.
|
|
108
113
|
- `check-content-boundary.cjs`, `detect-tools.sh`, `discover-agents.sh`, `git-status.sh`: repo-local helper commands.
|
|
109
114
|
- `context-budget/` and `statusline/`: specialized support tooling copied into bundles where needed.
|
|
@@ -42,7 +42,7 @@ function isIgnoredPath(filePath) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function isWorkflowRuntimeArtifact(filePath) {
|
|
45
|
-
return filePath.startsWith(".flow-agents/");
|
|
45
|
+
return filePath.startsWith(".kontourai/flow-agents/") || filePath.startsWith(".flow-agents/");
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
function lineNumberFor(content, index) {
|