@kontourai/flow-agents 0.1.1
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/.githooks/pre-push +11 -0
- package/.github/workflows/ci.yml +210 -0
- package/.github/workflows/docs-pages.yml +52 -0
- package/.github/workflows/publish-npm.yml +104 -0
- package/AGENTS.md +26 -0
- package/CHANGELOG.md +66 -0
- package/CODE_OF_CONDUCT.md +25 -0
- package/CONTEXT.md +300 -0
- package/CONTRIBUTING.md +44 -0
- package/LICENSE +201 -0
- package/README.md +129 -0
- package/SECURITY.md +33 -0
- package/agent-cards/dev.json +19 -0
- package/agents/dev.json +127 -0
- package/agents/tool-code-reviewer.json +61 -0
- package/agents/tool-dependencies-updater.json +118 -0
- package/agents/tool-explore-config.json +92 -0
- package/agents/tool-explore-deps.json +92 -0
- package/agents/tool-explore-entry.json +92 -0
- package/agents/tool-explore-patterns.json +92 -0
- package/agents/tool-explore-structure.json +92 -0
- package/agents/tool-explore-tests.json +92 -0
- package/agents/tool-planner.json +57 -0
- package/agents/tool-playwright.json +145 -0
- package/agents/tool-security-reviewer.json +56 -0
- package/agents/tool-verifier.json +61 -0
- package/agents/tool-worker.json +58 -0
- package/build/src/cli/console-learning-projection.js +123 -0
- package/build/src/cli/docs-preview.js +39 -0
- package/build/src/cli/effective-backlog-settings.js +102 -0
- package/build/src/cli/export-bookmarks.js +38 -0
- package/build/src/cli/fixture-retirement-audit.js +140 -0
- package/build/src/cli/flow-kit.js +138 -0
- package/build/src/cli/import-bookmarks.js +50 -0
- package/build/src/cli/init.js +239 -0
- package/build/src/cli/instinct-cli.js +93 -0
- package/build/src/cli/promote-workflow-artifact.js +63 -0
- package/build/src/cli/publish-change-helper.js +154 -0
- package/build/src/cli/pull-work-provider.js +469 -0
- package/build/src/cli/runtime-adapter.js +23 -0
- package/build/src/cli/telemetry-doctor.js +221 -0
- package/build/src/cli/usage-feedback.js +443 -0
- package/build/src/cli/validate-hook-influence.js +152 -0
- package/build/src/cli/validate-source-tree.js +31 -0
- package/build/src/cli/validate-workflow-artifacts.js +486 -0
- package/build/src/cli/veritas-governance.js +262 -0
- package/build/src/cli/workflow-artifact-cleanup-audit.js +272 -0
- package/build/src/cli/workflow-sidecar.js +816 -0
- package/build/src/cli.js +89 -0
- package/build/src/flow-kit/validate.js +75 -0
- package/build/src/lib/args.js +45 -0
- package/build/src/lib/fs.js +62 -0
- package/build/src/lib/workflow-learning-projection.js +334 -0
- package/build/src/runtime-adapters.js +146 -0
- package/build/src/tools/build-universal-bundles.js +397 -0
- package/build/src/tools/common.js +56 -0
- package/build/src/tools/filter-installed-packs.js +132 -0
- package/build/src/tools/generate-context-map.js +198 -0
- package/build/src/tools/validate-package.js +64 -0
- package/build/src/tools/validate-source-tree.js +622 -0
- package/console.telemetry.json +176 -0
- package/context/base-rules.md +17 -0
- package/context/code-review-standards.md +62 -0
- package/context/coding-standards.md +42 -0
- package/context/common/orchestrators.md +12 -0
- package/context/common/subagents.md +28 -0
- package/context/contracts/artifact-contract.md +182 -0
- package/context/contracts/builder-kit-workflow-state-contract.md +319 -0
- package/context/contracts/delivery-contract.md +69 -0
- package/context/contracts/execution-contract.md +53 -0
- package/context/contracts/governance-adapter-contract.md +67 -0
- package/context/contracts/planning-contract.md +85 -0
- package/context/contracts/review-contract.md +104 -0
- package/context/contracts/sandbox-policy.md +52 -0
- package/context/contracts/verification-contract.md +134 -0
- package/context/contracts/work-item-contract.md +215 -0
- package/context/deferred/demo-mode.md +33 -0
- package/context/deferred/languages/go.md +31 -0
- package/context/deferred/languages/python.md +31 -0
- package/context/deferred/languages/typescript.md +34 -0
- package/context/deferred/parallelization.md +35 -0
- package/context/deferred/worktree-isolation.md +24 -0
- package/context/development-workflow.md +50 -0
- package/context/scripts/context-budget/budget-scan.sh +166 -0
- package/context/scripts/detect-tools.sh +3 -0
- package/context/scripts/discover-agents.sh +28 -0
- package/context/scripts/git-status.sh +49 -0
- package/context/scripts/hooks/config-protection.js +79 -0
- package/context/scripts/hooks/desktop-notify.sh +39 -0
- package/context/scripts/hooks/governance-audit.sh +135 -0
- package/context/scripts/hooks/lib/audit-transport.sh +40 -0
- package/context/scripts/hooks/lib/hook-flags.js +49 -0
- package/context/scripts/hooks/lib/patterns.sh +57 -0
- package/context/scripts/hooks/lib/resolve-formatter.js +80 -0
- package/context/scripts/hooks/post-edit-accumulator.js +66 -0
- package/context/scripts/hooks/pre-commit-quality.js +194 -0
- package/context/scripts/hooks/quality-gate.js +93 -0
- package/context/scripts/hooks/report-only-guard.js +21 -0
- package/context/scripts/hooks/run-hook.js +136 -0
- package/context/scripts/hooks/stop-format-typecheck.js +141 -0
- package/context/scripts/hooks/stop-goal-fit.js +337 -0
- package/context/scripts/hooks/workflow-steering.js +250 -0
- package/context/scripts/telemetry/console-presets.sh +14 -0
- package/context/scripts/telemetry/install-console-config.sh +214 -0
- package/context/scripts/telemetry/lib/config.sh +85 -0
- package/context/scripts/telemetry/lib/enrich.sh +115 -0
- package/context/scripts/telemetry/lib/redact.sh +22 -0
- package/context/scripts/telemetry/lib/session.sh +63 -0
- package/context/scripts/telemetry/lib/transport.sh +183 -0
- package/context/scripts/telemetry/lib/usage.sh +29 -0
- package/context/scripts/telemetry/sync-agents.sh +173 -0
- package/context/scripts/telemetry/telemetry.conf +23 -0
- package/context/scripts/telemetry/telemetry.sh +387 -0
- package/context/scripts/validate-package.sh +89 -0
- package/context/settings/backlog-provider-settings.json +54 -0
- package/context/templates/core/identity.md +26 -0
- package/context/templates/core/user.md +15 -0
- package/docs/_config.yml +15 -0
- package/docs/_layouts/default.html +87 -0
- package/docs/adr/0001-flow-agents-consumes-flow.md +77 -0
- package/docs/adr/0002-flow-kits-as-extension-unit.md +13 -0
- package/docs/adr/0003-flow-agents-coordinates-kits-and-adapters.md +13 -0
- package/docs/adr/0004-gates-expect-surface-claims.md +15 -0
- package/docs/adr/0005-kubernetes-inspired-resource-contracts.md +48 -0
- package/docs/adr/0006-typescript-first-source-policy.md +98 -0
- package/docs/agent-system-guidebook.md +391 -0
- package/docs/agent-usage-feedback-loop.md +351 -0
- package/docs/assets/favicon.svg +13 -0
- package/docs/assets/og-image.png +0 -0
- package/docs/assets/site.css +774 -0
- package/docs/assets/site.js +139 -0
- package/docs/configurable-workflow-routing.md +174 -0
- package/docs/context-map.md +145 -0
- package/docs/developer-architecture.md +145 -0
- package/docs/developer-hook-setup.md +61 -0
- package/docs/fixture-ownership.md +44 -0
- package/docs/flow-kit-repository-contract.md +180 -0
- package/docs/index.md +129 -0
- package/docs/kontour-resource-contract.md +358 -0
- package/docs/migrations.md +64 -0
- package/docs/north-star.md +322 -0
- package/docs/operating-layers.md +110 -0
- package/docs/repository-structure.md +132 -0
- package/docs/sandbox-policy.md +56 -0
- package/docs/skills-map.md +203 -0
- package/docs/standards-register.md +96 -0
- package/docs/veritas-integration.md +165 -0
- package/docs/work-item-adapters.md +72 -0
- package/docs/workflow-artifact-lifecycle.md +141 -0
- package/docs/workflow-eval-strategy.md +295 -0
- package/docs/workflow-shared-contracts.md +51 -0
- package/docs/workflow-usage-guide.md +443 -0
- package/evals/ARCHITECTURE.md +143 -0
- package/evals/CONVENTIONS.md +58 -0
- package/evals/README.md +128 -0
- package/evals/acceptance/run.sh +29 -0
- package/evals/acceptance/test_claude_harness.sh +242 -0
- package/evals/acceptance/test_codex_harness.sh +108 -0
- package/evals/acceptance/test_kiro_harness.sh +128 -0
- package/evals/cases/dev/404.html +97 -0
- package/evals/cases/dev/code-review.yaml +44 -0
- package/evals/cases/dev/dashboard.html +300 -0
- package/evals/cases/dev/deliver.yaml +66 -0
- package/evals/cases/dev/dependency-update.yaml +16 -0
- package/evals/cases/dev/explore.yaml +20 -0
- package/evals/cases/dev/index.html +370 -0
- package/evals/cases/dev/package-lock.json +28 -0
- package/evals/cases/dev/package.json +16 -0
- package/evals/cases/dev/plan-work.yaml +20 -0
- package/evals/cases/dev/promptfooconfig.yaml +666 -0
- package/evals/cases/dev/search-first.yaml +20 -0
- package/evals/cases/dev/tdd-workflow.yaml +48 -0
- package/evals/cases/dev/verify-work.yaml +44 -0
- package/evals/cases/dev/workflow.yaml +34 -0
- package/evals/ci/run-baseline.sh +283 -0
- package/evals/fixtures/backlog-provider-settings/global-default.json +44 -0
- package/evals/fixtures/backlog-provider-settings/project-override.json +53 -0
- package/evals/fixtures/builder-kit-workflow-state/baseline-freshness-resolution-hint.json +139 -0
- package/evals/fixtures/builder-kit-workflow-state/direct-primitive-stop.json +59 -0
- package/evals/fixtures/builder-kit-workflow-state/empty-board-route-shape.json +55 -0
- package/evals/fixtures/builder-kit-workflow-state/happy-path.json +71 -0
- package/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json +80 -0
- package/evals/fixtures/builder-kit-workflow-state/missing-prestep-recovery.json +65 -0
- package/evals/fixtures/builder-kit-workflow-state/product-build-chaining.json +60 -0
- package/evals/fixtures/builder-kit-workflow-state/stale-continuation-requires-new-probe.json +57 -0
- package/evals/fixtures/console-learning-projection/artifacts/console-learning-correction/learning.json +50 -0
- package/evals/fixtures/console-learning-projection/artifacts/console-learning-open-route/learning.json +41 -0
- package/evals/fixtures/flow-kit-repository/invalid-absolute-path/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-asset-section/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-asset-section/kit.json +11 -0
- package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/kit.json +9 -0
- package/evals/fixtures/flow-kit-repository/invalid-id/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-id/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-malformed-json/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-flow/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-id/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-id/kit.json +7 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/kit.json +7 -0
- package/evals/fixtures/flow-kit-repository/invalid-name/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-name/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-schema-version/flows/review.flow.json +6 -0
- package/evals/fixtures/flow-kit-repository/invalid-schema-version/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/invalid-traversal/kit.json +8 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/adapters/example.json +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/assets/example.txt +1 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/docs/README.md +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/flows/runtime.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-evals/example.json +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-skills/mixed/SKILL.md +3 -0
- package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit.json +44 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/docs/README.md +3 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/flows/review.flow.json +26 -0
- package/evals/fixtures/flow-kit-repository/valid-local-kit/kit.json +20 -0
- package/evals/fixtures/hook-influence/cases.json +336 -0
- package/evals/fixtures/pull-work-provider/github-issues.json +170 -0
- package/evals/fixtures/pull-work-wip-shepherding/global-wip-informs.json +43 -0
- package/evals/fixtures/pull-work-wip-shepherding/personal-wip-blocks.json +42 -0
- package/evals/fixtures/surface-trust/accepted-claim-trust-report.json +31 -0
- package/evals/fixtures/surface-trust/artifact-absent.json +19 -0
- package/evals/fixtures/surface-trust/integrity-mismatch-trust-report.json +32 -0
- package/evals/fixtures/surface-trust/missing-authority-trust-report.json +27 -0
- package/evals/fixtures/surface-trust/provider-absent.json +19 -0
- package/evals/fixtures/surface-trust/rejected-claim-trust-report.json +30 -0
- package/evals/fixtures/surface-trust/stale-claim-trust-snapshot.json +31 -0
- package/evals/fixtures/usage-feedback/sample-full.jsonl +11 -0
- package/evals/fixtures/usage-feedback/sample-outcomes.jsonl +1 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-pass.sh +18 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-secret-fail.sh +10 -0
- package/evals/fixtures/veritas-governance-adapter/fake-veritas-unconfigured.sh +4 -0
- package/evals/integration/test_bundle_install.sh +541 -0
- package/evals/integration/test_console_learning_projection.sh +192 -0
- package/evals/integration/test_context_map.sh +65 -0
- package/evals/integration/test_effective_backlog_settings.sh +58 -0
- package/evals/integration/test_fixture_retirement_audit.sh +58 -0
- package/evals/integration/test_flow_agents_statusline.sh +93 -0
- package/evals/integration/test_flow_kit_repository.sh +90 -0
- package/evals/integration/test_goal_fit_hook.sh +482 -0
- package/evals/integration/test_hook_category_behaviors.sh +190 -0
- package/evals/integration/test_hook_influence_cases.sh +69 -0
- package/evals/integration/test_local_flow_kit_install.sh +145 -0
- package/evals/integration/test_publish_change_helper.sh +176 -0
- package/evals/integration/test_pull_work_provider.sh +140 -0
- package/evals/integration/test_runtime_adapter_activation.sh +106 -0
- package/evals/integration/test_telemetry.sh +485 -0
- package/evals/integration/test_telemetry_doctor.sh +193 -0
- package/evals/integration/test_usage_feedback_dashboard.sh +169 -0
- package/evals/integration/test_usage_feedback_global.sh +117 -0
- package/evals/integration/test_usage_feedback_import.sh +227 -0
- package/evals/integration/test_usage_feedback_outcomes.sh +165 -0
- package/evals/integration/test_usage_feedback_report.sh +263 -0
- package/evals/integration/test_veritas_governance_adapter.sh +235 -0
- package/evals/integration/test_workflow_artifact_cleanup_audit.sh +287 -0
- package/evals/integration/test_workflow_artifacts.sh +1247 -0
- package/evals/integration/test_workflow_sidecar_writer.sh +2112 -0
- package/evals/integration/test_workflow_steering_hook.sh +337 -0
- package/evals/lib/assertions/delegated-to.js +40 -0
- package/evals/lib/assertions/max-tool-calls.js +15 -0
- package/evals/lib/assertions/no-write-tools.js +27 -0
- package/evals/lib/assertions/pass-at-k.js +39 -0
- package/evals/lib/assertions/telemetry-utils.js +105 -0
- package/evals/lib/assertions/tool-called.js +39 -0
- package/evals/lib/assertions/verify-after-fix.js +61 -0
- package/evals/lib/claude-judge.sh +40 -0
- package/evals/lib/claude-provider.sh +74 -0
- package/evals/lib/codex-judge.sh +39 -0
- package/evals/lib/codex-provider.sh +81 -0
- package/evals/lib/eval-dev.sh +5 -0
- package/evals/lib/eval-judge.sh +22 -0
- package/evals/lib/eval-provider.sh +26 -0
- package/evals/lib/eval-report.sh +73 -0
- package/evals/lib/kiro-dev.sh +4 -0
- package/evals/lib/kiro-judge.sh +17 -0
- package/evals/lib/kiro-provider.sh +62 -0
- package/evals/lib/node.sh +111 -0
- package/evals/promptfooconfig.yaml +70 -0
- package/evals/run.sh +309 -0
- package/evals/static/test_evidence_refs.sh +141 -0
- package/evals/static/test_package.sh +407 -0
- package/evals/static/test_repo_hooks.sh +68 -0
- package/evals/static/test_universal_bundles.sh +274 -0
- package/evals/static/test_workflow_skills.sh +1207 -0
- package/install.sh +64 -0
- package/integrations/veritas/flow-agents.adapter.json +138 -0
- package/integrations/veritas/flow-agents.authority-settings.json +26 -0
- package/integrations/veritas/flow-agents.repo-standards.json +82 -0
- package/kits/builder/flows/build.flow.json +218 -0
- package/kits/builder/flows/shape.flow.json +127 -0
- package/kits/builder/kit.json +19 -0
- package/kits/catalog.json +11 -0
- package/package.json +130 -0
- package/packaging/README.md +60 -0
- package/packaging/manifest.json +173 -0
- package/packaging/packs.json +69 -0
- package/powers/dependency-checker/POWER.md +20 -0
- package/powers/dependency-checker/mcp.json +20 -0
- package/powers/playwright/POWER.md +25 -0
- package/powers/playwright/mcp.json +12 -0
- package/prompts/code-audit.md +123 -0
- package/prompts/kcommit.md +88 -0
- package/schemas/backlog-provider-settings.schema.json +138 -0
- package/schemas/workflow-acceptance.schema.json +216 -0
- package/schemas/workflow-critique.schema.json +113 -0
- package/schemas/workflow-evidence.schema.json +357 -0
- package/schemas/workflow-handoff.schema.json +52 -0
- package/schemas/workflow-learning.schema.json +223 -0
- package/schemas/workflow-release.schema.json +172 -0
- package/schemas/workflow-state.schema.json +80 -0
- package/scripts/README.md +111 -0
- package/scripts/build-universal-bundles.js +3 -0
- package/scripts/check-content-boundary.cjs +99 -0
- package/scripts/context-budget/budget-scan.sh +166 -0
- package/scripts/detect-tools.sh +3 -0
- package/scripts/discover-agents.sh +28 -0
- package/scripts/effective-backlog-settings.js +2 -0
- package/scripts/filter-installed-packs.js +2 -0
- package/scripts/flow-kit.js +2 -0
- package/scripts/generate-context-map.js +2 -0
- package/scripts/git-status.sh +49 -0
- package/scripts/hooks/claude-hook-adapter.js +174 -0
- package/scripts/hooks/claude-telemetry-hook.js +115 -0
- package/scripts/hooks/codex-hook-adapter.js +176 -0
- package/scripts/hooks/codex-telemetry-hook.js +95 -0
- package/scripts/hooks/config-protection.js +79 -0
- package/scripts/hooks/desktop-notify.sh +39 -0
- package/scripts/hooks/governance-audit.sh +135 -0
- package/scripts/hooks/lib/audit-transport.sh +40 -0
- package/scripts/hooks/lib/hook-flags.js +49 -0
- package/scripts/hooks/lib/patterns.sh +57 -0
- package/scripts/hooks/lib/resolve-formatter.js +80 -0
- package/scripts/hooks/post-edit-accumulator.js +66 -0
- package/scripts/hooks/pre-commit-quality.js +194 -0
- package/scripts/hooks/quality-gate.js +93 -0
- package/scripts/hooks/report-only-guard.js +21 -0
- package/scripts/hooks/run-hook.js +136 -0
- package/scripts/hooks/stop-format-typecheck.js +141 -0
- package/scripts/hooks/stop-goal-fit.js +337 -0
- package/scripts/hooks/workflow-steering.js +250 -0
- package/scripts/install-codex-home.sh +106 -0
- package/scripts/package.json +3 -0
- package/scripts/promote-workflow-artifact.js +2 -0
- package/scripts/publish-change-helper.js +2 -0
- package/scripts/pull-work-provider.js +2 -0
- package/scripts/setup-repo-hooks.sh +8 -0
- package/scripts/statusline/flow-agents-statusline.js +157 -0
- package/scripts/telemetry/console-presets.sh +14 -0
- package/scripts/telemetry/install-console-config.sh +214 -0
- package/scripts/telemetry/lib/config.sh +85 -0
- package/scripts/telemetry/lib/enrich.sh +115 -0
- package/scripts/telemetry/lib/redact.sh +22 -0
- package/scripts/telemetry/lib/session.sh +63 -0
- package/scripts/telemetry/lib/transport.sh +183 -0
- package/scripts/telemetry/lib/usage.sh +29 -0
- package/scripts/telemetry/sync-agents.sh +173 -0
- package/scripts/telemetry/telemetry.conf +23 -0
- package/scripts/telemetry/telemetry.sh +387 -0
- package/scripts/usage-feedback.js +2 -0
- package/scripts/validate-hook-influence-cases.js +2 -0
- package/scripts/validate-package.sh +89 -0
- package/scripts/validate-source-tree.js +9 -0
- package/skills/agentic-engineering/SKILL.md +62 -0
- package/skills/browser-test/SKILL.md +51 -0
- package/skills/builder-shape/SKILL.md +76 -0
- package/skills/context-budget/SKILL.md +40 -0
- package/skills/deliver/SKILL.md +241 -0
- package/skills/dependency-update/SKILL.md +68 -0
- package/skills/design-probe/SKILL.md +107 -0
- package/skills/eval-rebuild/SKILL.md +39 -0
- package/skills/evidence-gate/SKILL.md +186 -0
- package/skills/execute-plan/SKILL.md +110 -0
- package/skills/explore/SKILL.md +137 -0
- package/skills/feedback-loop/SKILL.md +87 -0
- package/skills/fix-bug/SKILL.md +133 -0
- package/skills/frontend-design/SKILL.md +80 -0
- package/skills/github-cli/SKILL.md +63 -0
- package/skills/idea-to-backlog/SKILL.md +267 -0
- package/skills/knowledge-capture/SKILL.md +55 -0
- package/skills/learning-review/SKILL.md +115 -0
- package/skills/pickup-probe/SKILL.md +114 -0
- package/skills/plan-work/SKILL.md +176 -0
- package/skills/pull-work/SKILL.md +309 -0
- package/skills/release-readiness/SKILL.md +121 -0
- package/skills/review-work/SKILL.md +161 -0
- package/skills/search-first/SKILL.md +66 -0
- package/skills/tdd-workflow/SKILL.md +140 -0
- package/skills/verify-work/SKILL.md +109 -0
- package/src/cli/console-learning-projection.ts +140 -0
- package/src/cli/effective-backlog-settings.ts +99 -0
- package/src/cli/fixture-retirement-audit.ts +154 -0
- package/src/cli/flow-kit.ts +139 -0
- package/src/cli/init.ts +248 -0
- package/src/cli/promote-workflow-artifact.ts +64 -0
- package/src/cli/publish-change-helper.ts +143 -0
- package/src/cli/pull-work-provider.ts +481 -0
- package/src/cli/runtime-adapter.ts +24 -0
- package/src/cli/telemetry-doctor.ts +243 -0
- package/src/cli/usage-feedback.ts +418 -0
- package/src/cli/validate-hook-influence.ts +119 -0
- package/src/cli/validate-source-tree.ts +30 -0
- package/src/cli/validate-workflow-artifacts.ts +411 -0
- package/src/cli/veritas-governance.ts +322 -0
- package/src/cli/workflow-artifact-cleanup-audit.ts +281 -0
- package/src/cli/workflow-sidecar.ts +676 -0
- package/src/cli.ts +95 -0
- package/src/flow-kit/validate.ts +74 -0
- package/src/lib/args.ts +43 -0
- package/src/lib/fs.ts +62 -0
- package/src/lib/workflow-learning-projection.ts +491 -0
- package/src/runtime-adapters.ts +154 -0
- package/src/tools/build-universal-bundles.ts +366 -0
- package/src/tools/common.ts +61 -0
- package/src/tools/filter-installed-packs.ts +129 -0
- package/src/tools/generate-context-map.ts +199 -0
- package/src/tools/validate-package.ts +57 -0
- package/src/tools/validate-source-tree.ts +488 -0
- package/tsconfig.json +19 -0
- package/veritas.claims.json +6 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
DIST_DIR="$ROOT_DIR/dist"
|
|
6
|
+
REPRO_FIRST_DIR="$(mktemp -d "${TMPDIR:-/tmp}/flow-agents-bundle-repro-a.XXXXXX")"
|
|
7
|
+
REPRO_SECOND_DIR="$(mktemp -d "${TMPDIR:-/tmp}/flow-agents-bundle-repro-b.XXXXXX")"
|
|
8
|
+
REPRO_DIFF_FILE="${TMPDIR:-/tmp}/universal-bundle-reproducibility.diff"
|
|
9
|
+
pass=0
|
|
10
|
+
fail=0
|
|
11
|
+
|
|
12
|
+
cleanup() {
|
|
13
|
+
rm -rf "$REPRO_FIRST_DIR" "$REPRO_SECOND_DIR"
|
|
14
|
+
}
|
|
15
|
+
trap cleanup EXIT
|
|
16
|
+
|
|
17
|
+
_pass() { echo " ✓ $1"; pass=$((pass + 1)); }
|
|
18
|
+
_fail() { echo " ✗ $1"; fail=$((fail + 1)); }
|
|
19
|
+
|
|
20
|
+
echo "=== Layer 1B: Universal Bundle Validation ==="
|
|
21
|
+
echo ""
|
|
22
|
+
|
|
23
|
+
echo "--- Source Tree ---"
|
|
24
|
+
if (cd "$ROOT_DIR" && npm run validate:source >/tmp/source-tree-validation.txt 2>&1); then
|
|
25
|
+
_pass "source tree validation passed"
|
|
26
|
+
else
|
|
27
|
+
_fail "source tree validation failed (see /tmp/source-tree-validation.txt)"
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
if (cd "$ROOT_DIR" && npm run typecheck >/tmp/source-tree-typecheck.txt 2>&1); then
|
|
31
|
+
_pass "source tree validator typechecks"
|
|
32
|
+
else
|
|
33
|
+
_fail "source tree validator does not typecheck"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
echo ""
|
|
37
|
+
echo "--- Build ---"
|
|
38
|
+
if (cd "$ROOT_DIR" && npm run build:bundles >/dev/null); then
|
|
39
|
+
_pass "bundle build completed"
|
|
40
|
+
else
|
|
41
|
+
_fail "bundle build failed"
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
if (cd "$ROOT_DIR" && FLOW_AGENTS_DIST_DIR="$REPRO_FIRST_DIR" npm run build:bundles >/dev/null) \
|
|
45
|
+
&& (cd "$ROOT_DIR" && FLOW_AGENTS_DIST_DIR="$REPRO_SECOND_DIR" npm run build:bundles >/dev/null) \
|
|
46
|
+
&& diff -ru "$REPRO_FIRST_DIR" "$REPRO_SECOND_DIR" >"$REPRO_DIFF_FILE"; then
|
|
47
|
+
_pass "bundle generation is reproducible from clean output directories"
|
|
48
|
+
else
|
|
49
|
+
_fail "bundle generation is not reproducible from clean output directories (see $REPRO_DIFF_FILE)"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if (cd "$ROOT_DIR" && npm run typecheck >/tmp/bundle-builder-typecheck.txt 2>&1); then
|
|
53
|
+
_pass "bundle builder typechecks"
|
|
54
|
+
else
|
|
55
|
+
_fail "bundle builder does not typecheck"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo ""
|
|
59
|
+
echo "--- Bundle Layout ---"
|
|
60
|
+
for dir in "$DIST_DIR/kiro" "$DIST_DIR/claude-code" "$DIST_DIR/codex"; do
|
|
61
|
+
if [[ -d "$dir" ]]; then
|
|
62
|
+
_pass "$(basename "$dir") bundle exists"
|
|
63
|
+
else
|
|
64
|
+
_fail "$(basename "$dir") bundle missing"
|
|
65
|
+
fi
|
|
66
|
+
done
|
|
67
|
+
|
|
68
|
+
source_agents=$(find "$ROOT_DIR/agents" -maxdepth 1 -name '*.json' | wc -l | tr -d ' ')
|
|
69
|
+
codex_excluded_agents=$(node - "$ROOT_DIR/packaging/manifest.json" <<'NODE'
|
|
70
|
+
const fs = require("node:fs");
|
|
71
|
+
const data = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
72
|
+
console.log((data.codex?.excluded_agents || []).length);
|
|
73
|
+
NODE
|
|
74
|
+
)
|
|
75
|
+
expected_codex_agents=$((source_agents - codex_excluded_agents))
|
|
76
|
+
kiro_agents=$(find "$DIST_DIR/kiro/agents" -maxdepth 1 -name '*.json' 2>/dev/null | wc -l | tr -d ' ')
|
|
77
|
+
claude_agents=$(find "$DIST_DIR/claude-code/.claude/agents" -maxdepth 1 -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
|
|
78
|
+
codex_agents=$(find "$DIST_DIR/codex/.codex/agents" -maxdepth 1 -name '*.toml' 2>/dev/null | wc -l | tr -d ' ')
|
|
79
|
+
|
|
80
|
+
[[ "$kiro_agents" == "$source_agents" ]] && _pass "Kiro agent count matches source ($kiro_agents)" || _fail "Kiro agent count mismatch: source=$source_agents dist=$kiro_agents"
|
|
81
|
+
[[ "$claude_agents" == "$source_agents" ]] && _pass "Claude agent count matches source ($claude_agents)" || _fail "Claude agent count mismatch: source=$source_agents dist=$claude_agents"
|
|
82
|
+
[[ "$codex_agents" == "$expected_codex_agents" ]] && _pass "Codex agent count matches source minus manifest exclusions ($codex_agents)" || _fail "Codex agent count mismatch: expected=$expected_codex_agents dist=$codex_agents"
|
|
83
|
+
|
|
84
|
+
echo ""
|
|
85
|
+
echo "--- Kiro JSON ---"
|
|
86
|
+
if node - "$DIST_DIR/kiro/agents" <<'NODE'
|
|
87
|
+
const fs = require("node:fs");
|
|
88
|
+
const path = require("node:path");
|
|
89
|
+
for (const name of fs.readdirSync(process.argv[2]).filter((file) => file.endsWith(".json"))) {
|
|
90
|
+
const data = JSON.parse(fs.readFileSync(path.join(process.argv[2], name), "utf8"));
|
|
91
|
+
for (const key of ["name", "description", "prompt", "model"]) {
|
|
92
|
+
if (!(key in data)) throw new Error(`${name}: missing ${key}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
console.log("ok");
|
|
96
|
+
NODE
|
|
97
|
+
then
|
|
98
|
+
_pass "Kiro agent JSON parses with required fields"
|
|
99
|
+
else
|
|
100
|
+
_fail "Kiro agent JSON parse/shape check failed"
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
echo ""
|
|
104
|
+
echo "--- Claude Export Shape ---"
|
|
105
|
+
if node - "$DIST_DIR/claude-code/.claude/agents" <<'NODE'
|
|
106
|
+
const fs = require("node:fs");
|
|
107
|
+
const path = require("node:path");
|
|
108
|
+
const required = new Set(["name", "description", "tools", "model"]);
|
|
109
|
+
for (const name of fs.readdirSync(process.argv[2]).filter((file) => file.endsWith(".md"))) {
|
|
110
|
+
const text = fs.readFileSync(path.join(process.argv[2], name), "utf8");
|
|
111
|
+
if (!text.startsWith("---\n")) throw new Error(`${name}: missing frontmatter start`);
|
|
112
|
+
const parts = text.split("\n---\n");
|
|
113
|
+
if (parts.length < 2) throw new Error(`${name}: missing frontmatter end`);
|
|
114
|
+
const keys = new Set(parts[0].replace("---\n", "").split(/\r?\n/).filter((line) => line.includes(":")).map((line) => line.split(":", 1)[0].trim()));
|
|
115
|
+
const missing = [...required].filter((key) => !keys.has(key));
|
|
116
|
+
if (missing.length) throw new Error(`${name}: missing frontmatter keys ${missing.join(", ")}`);
|
|
117
|
+
if (!parts.slice(1).join("\n---\n").trim()) throw new Error(`${name}: empty body`);
|
|
118
|
+
}
|
|
119
|
+
console.log("ok");
|
|
120
|
+
NODE
|
|
121
|
+
then
|
|
122
|
+
_pass "Claude agent markdown has valid frontmatter/body shape"
|
|
123
|
+
else
|
|
124
|
+
_fail "Claude agent markdown shape check failed"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
if node - "$DIST_DIR/claude-code/.claude/settings.json" <<'NODE'
|
|
128
|
+
const fs = require("node:fs");
|
|
129
|
+
const data = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
130
|
+
const statusLine = data.statusLine || {};
|
|
131
|
+
if (statusLine.type !== "command" || !String(statusLine.command || "").includes("flow-agents-statusline.js")) throw new Error("Claude statusLine command missing Flow Agents statusline");
|
|
132
|
+
if (data.permissions?.defaultMode !== "auto") throw new Error("Claude permissions.defaultMode should default to auto");
|
|
133
|
+
if (data.skipDangerousModePermissionPrompt !== true) throw new Error("Claude dangerous-mode prompt skip fallback should be enabled");
|
|
134
|
+
const hooks = data.hooks || {};
|
|
135
|
+
const required = ["SessionStart", "UserPromptSubmit", "PreToolUse", "PermissionRequest", "PostToolUse", "Stop", "SessionEnd"];
|
|
136
|
+
const missing = required.filter((event) => !(event in hooks));
|
|
137
|
+
if (missing.length) throw new Error(`missing Claude hook events: ${missing.join(", ")}`);
|
|
138
|
+
for (const event of required) {
|
|
139
|
+
if (!(hooks[event] || []).some((group) => (group.hooks || []).some((hook) => String(hook.command || "").includes("claude-telemetry-hook.js")))) throw new Error(`${event} telemetry hook missing`);
|
|
140
|
+
}
|
|
141
|
+
if (!(hooks.Stop || []).some((group) => (group.hooks || []).some((hook) => String(hook.command || "").includes("claude-hook-adapter.js") && String(hook.command || "").includes("stop-goal-fit.js")))) throw new Error("Stop goal-fit policy hook missing");
|
|
142
|
+
if (!(hooks.UserPromptSubmit || []).some((group) => [undefined, null, "*"].includes(group.matcher) && (group.hooks || []).some((hook) => String(hook.command || "").includes("claude-hook-adapter.js") && String(hook.command || "").includes("workflow-steering.js")))) throw new Error("prompt-submit workflow-steering policy hook missing");
|
|
143
|
+
console.log("ok");
|
|
144
|
+
NODE
|
|
145
|
+
then
|
|
146
|
+
_pass "Claude settings include auto permissions, dangerous prompt fallback, statusLine, telemetry, and policy hooks"
|
|
147
|
+
else
|
|
148
|
+
_fail "Claude settings auto permissions, dangerous prompt fallback, statusLine, or telemetry/policy hooks missing"
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
echo ""
|
|
152
|
+
echo "--- Codex Export Shape ---"
|
|
153
|
+
if node - "$DIST_DIR/codex/.codex/config.toml" <<'NODE'
|
|
154
|
+
const fs = require("node:fs");
|
|
155
|
+
const text = fs.readFileSync(process.argv[2], "utf8");
|
|
156
|
+
if (text.includes("codex_hooks")) throw new Error("deprecated codex_hooks feature flag exported");
|
|
157
|
+
if (!text.includes("hooks = true")) throw new Error("current hooks feature flag missing");
|
|
158
|
+
if (!text.includes('approvals_reviewer = "auto_review"')) throw new Error("top-level auto-review approval reviewer missing");
|
|
159
|
+
if (!text.includes("[tui]") || !text.includes('status_line = ["model-with-reasoning", "project-name", "git-branch", "task-progress", "context-remaining", "run-state"]')) throw new Error("Codex TUI status_line missing workflow progress items");
|
|
160
|
+
if (text.includes("[profiles.") || text.includes("\nprofile = ")) throw new Error("Codex base config contains legacy profile config");
|
|
161
|
+
console.log("ok");
|
|
162
|
+
NODE
|
|
163
|
+
then
|
|
164
|
+
_pass "Codex config uses profile-v2 base shape, current hooks feature flag, auto-review reviewer, and status line"
|
|
165
|
+
else
|
|
166
|
+
_fail "Codex config profile-v2 shape, hook feature flag, auto-review reviewer, or status line is stale"
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
if node - "$DIST_DIR/codex/.codex" <<'NODE'
|
|
170
|
+
const fs = require("node:fs");
|
|
171
|
+
const path = require("node:path");
|
|
172
|
+
const root = process.argv[2];
|
|
173
|
+
const expected = ["kdev", "kdev-br"];
|
|
174
|
+
const missingFiles = expected.filter((name) => !fs.existsSync(path.join(root, `${name}.config.toml`)));
|
|
175
|
+
if (missingFiles.length) throw new Error(`profile-v2 config files missing: ${missingFiles.join(", ")}`);
|
|
176
|
+
const missing = expected.filter((name) => !fs.readFileSync(path.join(root, `${name}.config.toml`), "utf8").includes('approvals_reviewer = "auto_review"'));
|
|
177
|
+
if (missing.length) throw new Error(`profile auto-review approval reviewer missing: ${missing.join(", ")}`);
|
|
178
|
+
console.log("ok");
|
|
179
|
+
NODE
|
|
180
|
+
then
|
|
181
|
+
_pass "Codex profile-v2 files select auto-review reviewer"
|
|
182
|
+
else
|
|
183
|
+
_fail "Codex profile-v2 auto-review reviewer check failed"
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
if node - "$DIST_DIR/codex/.codex/agents" <<'NODE'
|
|
187
|
+
const fs = require("node:fs");
|
|
188
|
+
const path = require("node:path");
|
|
189
|
+
const root = process.argv[2];
|
|
190
|
+
const required = ['name = "', 'description = "', 'model = "', 'model_reasoning_effort = "', 'developer_instructions = '];
|
|
191
|
+
for (const name of fs.readdirSync(root).filter((file) => file.endsWith(".toml"))) {
|
|
192
|
+
const text = fs.readFileSync(path.join(root, name), "utf8");
|
|
193
|
+
for (const needle of required) if (!text.includes(needle)) throw new Error(`${name}: missing ${needle}`);
|
|
194
|
+
}
|
|
195
|
+
console.log("ok");
|
|
196
|
+
NODE
|
|
197
|
+
then
|
|
198
|
+
_pass "Codex agent TOML has required fields"
|
|
199
|
+
else
|
|
200
|
+
_fail "Codex agent TOML required-field check failed"
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
if node - "$DIST_DIR/codex/.codex/hooks.json" <<'NODE'
|
|
204
|
+
const fs = require("node:fs");
|
|
205
|
+
const hooks = JSON.parse(fs.readFileSync(process.argv[2], "utf8")).hooks || {};
|
|
206
|
+
const required = ["SessionStart", "UserPromptSubmit", "PreToolUse", "PermissionRequest", "PostToolUse", "Stop"];
|
|
207
|
+
const missing = required.filter((event) => !(event in hooks));
|
|
208
|
+
if (missing.length) throw new Error(`missing Codex hook events: ${missing.join(", ")}`);
|
|
209
|
+
if (!(hooks.PermissionRequest || []).some((group) => (group.hooks || []).some((hook) => String(hook.command || "").includes("telemetry.sh")))) throw new Error("PermissionRequest telemetry hook missing");
|
|
210
|
+
if (!(hooks.Stop || []).some((group) => (group.hooks || []).some((hook) => String(hook.command || "").includes("codex-hook-adapter.js") && String(hook.command || "").includes("stop-goal-fit.js")))) throw new Error("Stop goal-fit policy hook missing");
|
|
211
|
+
if (!(hooks.UserPromptSubmit || []).some((group) => [undefined, null, "*"].includes(group.matcher) && (group.hooks || []).some((hook) => String(hook.command || "").includes("codex-hook-adapter.js") && String(hook.command || "").includes("workflow-steering.js")))) throw new Error("prompt-submit workflow-steering policy hook missing");
|
|
212
|
+
for (const groups of Object.values(hooks)) {
|
|
213
|
+
for (const group of groups || []) {
|
|
214
|
+
for (const hook of group.hooks || []) {
|
|
215
|
+
const command = String(hook.command || "");
|
|
216
|
+
if (!command.includes('root="${CODEX_HOME:-}"')) throw new Error(`Codex hook does not prefer CODEX_HOME: ${command}`);
|
|
217
|
+
if (command.includes("'root=$(git rev-parse --show-toplevel")) throw new Error(`Codex hook uses stale repo-root-only resolver: ${command}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
console.log("ok");
|
|
222
|
+
NODE
|
|
223
|
+
then
|
|
224
|
+
_pass "Codex hooks cover telemetry and policy lifecycle events with CODEX_HOME root resolution"
|
|
225
|
+
else
|
|
226
|
+
_fail "Codex hooks missing telemetry/policy lifecycle coverage or CODEX_HOME root resolution"
|
|
227
|
+
fi
|
|
228
|
+
|
|
229
|
+
echo ""
|
|
230
|
+
echo "--- Shared Task Dirs ---"
|
|
231
|
+
for dir in "$DIST_DIR/claude-code/.flow-agents" "$DIST_DIR/codex/.flow-agents"; do
|
|
232
|
+
if [[ -d "$dir" ]]; then
|
|
233
|
+
_pass "$(realpath "$dir" 2>/dev/null || echo "$dir") exists"
|
|
234
|
+
else
|
|
235
|
+
_fail "$dir missing"
|
|
236
|
+
fi
|
|
237
|
+
done
|
|
238
|
+
|
|
239
|
+
echo ""
|
|
240
|
+
echo "--- Portability Leaks ---"
|
|
241
|
+
if rg -n '/Users/[^/]+/\.flow-agents|~/\.flow-agents' "$DIST_DIR" --glob '!**/evals/**' >/tmp/universal-bundle-leaks.txt 2>/dev/null; then
|
|
242
|
+
_fail "machine-local absolute paths leaked into dist (see /tmp/universal-bundle-leaks.txt)"
|
|
243
|
+
else
|
|
244
|
+
_pass "no machine-local absolute paths leaked into dist"
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
if rg -n '\.kiro/cli_todos/|\.ai/cli_todos/' "$DIST_DIR/claude-code" "$DIST_DIR/codex" --glob '!**/evals/**' >/tmp/universal-bundle-taskdir-leaks.txt 2>/dev/null; then
|
|
248
|
+
_fail "non-Kiro bundles still reference legacy task dirs (see /tmp/universal-bundle-taskdir-leaks.txt)"
|
|
249
|
+
else
|
|
250
|
+
_pass "non-Kiro bundles use Flow Agents task dir paths"
|
|
251
|
+
fi
|
|
252
|
+
|
|
253
|
+
echo ""
|
|
254
|
+
echo "--- Catalog ---"
|
|
255
|
+
if node - "$DIST_DIR/catalog.json" "$source_agents" <<'NODE'
|
|
256
|
+
const fs = require("node:fs");
|
|
257
|
+
const data = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
258
|
+
const expectedAgents = Number(process.argv[3]);
|
|
259
|
+
if (data.source_root !== ".") throw new Error("catalog source_root should be '.'");
|
|
260
|
+
if ((data.agents || []).length !== expectedAgents) throw new Error("catalog agent count mismatch");
|
|
261
|
+
console.log("ok");
|
|
262
|
+
NODE
|
|
263
|
+
then
|
|
264
|
+
_pass "catalog metadata is sane"
|
|
265
|
+
else
|
|
266
|
+
_fail "catalog metadata check failed"
|
|
267
|
+
fi
|
|
268
|
+
|
|
269
|
+
echo ""
|
|
270
|
+
echo "==========================="
|
|
271
|
+
total=$((pass + fail))
|
|
272
|
+
echo "Results: ${pass}/${total} passed, ${fail} failed"
|
|
273
|
+
[[ "$fail" -gt 0 ]] && exit 1
|
|
274
|
+
exit 0
|