@kontourai/flow-agents 4.0.0 → 4.2.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/workflows/ci.yml +8 -0
- package/CHANGELOG.md +34 -0
- package/CONTEXT.md +5 -0
- package/agents/tool-security-reviewer.json +1 -1
- package/build/src/cli/init.js +35 -3
- package/build/src/cli/kit.js +95 -2
- package/build/src/cli/pull-work-provider.js +7 -1
- package/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/build/src/cli/workflow.js +5 -1
- package/build/src/flow-kit/provision.d.ts +23 -0
- package/build/src/flow-kit/provision.js +99 -0
- package/build/src/flow-kit/validate.d.ts +52 -0
- package/build/src/flow-kit/validate.js +214 -9
- package/build/src/runtime-adapters.js +1 -1
- package/context/contracts/execution-contract.md +30 -1
- package/context/contracts/review-contract.md +4 -0
- package/context/contracts/trigger-guards.md +73 -0
- package/context/scripts/telemetry/lib/config.sh +29 -0
- package/context/settings/backlog-provider-settings.json +1 -1
- package/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/base/build/package.json +1 -1
- package/dist/base/build/src/cli/init.js +35 -3
- package/dist/base/build/src/cli/kit.js +95 -2
- package/dist/base/build/src/cli/pull-work-provider.js +7 -1
- package/dist/base/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/base/build/src/cli/workflow.js +5 -1
- package/dist/base/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/base/build/src/flow-kit/provision.js +99 -0
- package/dist/base/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/base/build/src/flow-kit/validate.js +214 -9
- package/dist/base/build/src/runtime-adapters.js +1 -1
- package/dist/base/context/contracts/execution-contract.md +30 -1
- package/dist/base/context/contracts/review-contract.md +4 -0
- package/dist/base/context/contracts/trigger-guards.md +73 -0
- package/dist/base/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/base/context/settings/backlog-provider-settings.json +1 -1
- package/dist/base/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/base/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/base/docs/adr/index.md +1 -0
- package/dist/base/docs/architecture-engine-and-kits.md +17 -0
- package/dist/base/docs/context-map.md +3 -0
- package/dist/base/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/base/docs/decisions/index.md +1 -0
- package/dist/base/docs/developer-architecture.md +3 -3
- package/dist/base/docs/flow-kit-repository-contract.md +34 -3
- package/dist/base/docs/kit-authoring-guide.md +1 -1
- package/dist/base/docs/veritas-integration.md +12 -0
- package/dist/base/evals/ci/run-baseline.sh +4 -0
- package/dist/base/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/base/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/base/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/base/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/base/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/base/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/base/evals/static/test_package.sh +6 -0
- package/dist/base/evals/static/test_workflow_skills.sh +16 -0
- package/dist/base/install.sh +1 -1
- package/dist/base/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/base/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/base/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/base/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/base/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/base/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/base/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/base/kits/veritas-governance/docs/README.md +141 -10
- package/dist/base/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/base/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/base/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/base/kits/veritas-governance/kit.json +65 -0
- package/dist/base/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/base/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/base/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/base/schemas/workflow-waves.schema.json +347 -0
- package/dist/base/scripts/check-layer-boundary.mjs +98 -0
- package/dist/base/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/base/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/base/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/base/scripts/liveness/relay.sh +23 -11
- package/dist/base/scripts/telemetry/lib/config.sh +29 -0
- package/dist/catalog.json +2 -0
- package/dist/claude-code/.claude/agents/tool-security-reviewer.md +2 -1
- package/dist/claude-code/.claude/skills/consult-standards/SKILL.md +73 -0
- package/dist/claude-code/.claude/skills/execute-plan/SKILL.md +4 -3
- package/dist/claude-code/.claude/skills/pull-work/SKILL.md +12 -0
- package/dist/claude-code/.claude/skills/review-work/SKILL.md +11 -0
- package/dist/claude-code/.claude/skills/standards-authoring/SKILL.md +87 -0
- package/dist/claude-code/build/package.json +1 -1
- package/dist/claude-code/build/src/cli/init.js +35 -3
- package/dist/claude-code/build/src/cli/kit.js +95 -2
- package/dist/claude-code/build/src/cli/pull-work-provider.js +7 -1
- package/dist/claude-code/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/claude-code/build/src/cli/workflow.js +5 -1
- package/dist/claude-code/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/claude-code/build/src/flow-kit/provision.js +99 -0
- package/dist/claude-code/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/claude-code/build/src/flow-kit/validate.js +214 -9
- package/dist/claude-code/build/src/runtime-adapters.js +1 -1
- package/dist/claude-code/context/contracts/execution-contract.md +30 -1
- package/dist/claude-code/context/contracts/review-contract.md +4 -0
- package/dist/claude-code/context/contracts/trigger-guards.md +73 -0
- package/dist/claude-code/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/claude-code/context/settings/backlog-provider-settings.json +1 -1
- package/dist/claude-code/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/claude-code/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/claude-code/docs/adr/index.md +1 -0
- package/dist/claude-code/docs/architecture-engine-and-kits.md +17 -0
- package/dist/claude-code/docs/context-map.md +3 -0
- package/dist/claude-code/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/claude-code/docs/decisions/index.md +1 -0
- package/dist/claude-code/docs/developer-architecture.md +3 -3
- package/dist/claude-code/docs/flow-kit-repository-contract.md +34 -3
- package/dist/claude-code/docs/kit-authoring-guide.md +1 -1
- package/dist/claude-code/docs/veritas-integration.md +12 -0
- package/dist/claude-code/evals/ci/run-baseline.sh +4 -0
- package/dist/claude-code/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/claude-code/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/claude-code/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/claude-code/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/claude-code/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/claude-code/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/claude-code/evals/static/test_package.sh +6 -0
- package/dist/claude-code/evals/static/test_workflow_skills.sh +16 -0
- package/dist/claude-code/install.sh +1 -1
- package/dist/claude-code/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/claude-code/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/claude-code/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/claude-code/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/claude-code/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/claude-code/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/claude-code/kits/veritas-governance/docs/README.md +141 -10
- package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/claude-code/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/claude-code/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/claude-code/kits/veritas-governance/kit.json +65 -0
- package/dist/claude-code/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/claude-code/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/claude-code/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/claude-code/schemas/workflow-waves.schema.json +347 -0
- package/dist/claude-code/scripts/check-layer-boundary.mjs +98 -0
- package/dist/claude-code/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/claude-code/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/claude-code/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/claude-code/scripts/liveness/relay.sh +23 -11
- package/dist/claude-code/scripts/telemetry/lib/config.sh +29 -0
- package/dist/codex/.agents/skills/builder-shape/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/consult-standards/SKILL.md +73 -0
- package/dist/codex/.agents/skills/deliver/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/design-probe/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/execute-plan/SKILL.md +4 -3
- package/dist/codex/.agents/skills/execute-plan/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/fix-bug/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/idea-to-backlog/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/plan-work/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/pull-work/SKILL.md +12 -0
- package/dist/codex/.agents/skills/pull-work/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/review-work/SKILL.md +11 -0
- package/dist/codex/.agents/skills/review-work/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/standards-authoring/SKILL.md +87 -0
- package/dist/codex/.agents/skills/tdd-workflow/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.agents/skills/verify-work/context/contracts/execution-contract.md +30 -1
- package/dist/codex/.codex/agents/tool-security-reviewer.toml +1 -1
- package/dist/codex/build/package.json +1 -1
- package/dist/codex/build/src/cli/init.js +35 -3
- package/dist/codex/build/src/cli/kit.js +95 -2
- package/dist/codex/build/src/cli/pull-work-provider.js +7 -1
- package/dist/codex/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/codex/build/src/cli/workflow.js +5 -1
- package/dist/codex/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/codex/build/src/flow-kit/provision.js +99 -0
- package/dist/codex/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/codex/build/src/flow-kit/validate.js +214 -9
- package/dist/codex/build/src/runtime-adapters.js +1 -1
- package/dist/codex/context/contracts/execution-contract.md +30 -1
- package/dist/codex/context/contracts/review-contract.md +4 -0
- package/dist/codex/context/contracts/trigger-guards.md +73 -0
- package/dist/codex/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/codex/context/settings/backlog-provider-settings.json +1 -1
- package/dist/codex/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/codex/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/codex/docs/adr/index.md +1 -0
- package/dist/codex/docs/architecture-engine-and-kits.md +17 -0
- package/dist/codex/docs/context-map.md +3 -0
- package/dist/codex/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/codex/docs/decisions/index.md +1 -0
- package/dist/codex/docs/developer-architecture.md +3 -3
- package/dist/codex/docs/flow-kit-repository-contract.md +34 -3
- package/dist/codex/docs/kit-authoring-guide.md +1 -1
- package/dist/codex/docs/veritas-integration.md +12 -0
- package/dist/codex/evals/ci/run-baseline.sh +4 -0
- package/dist/codex/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/codex/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/codex/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/codex/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/codex/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/codex/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/codex/evals/static/test_package.sh +6 -0
- package/dist/codex/evals/static/test_workflow_skills.sh +16 -0
- package/dist/codex/install.sh +1 -1
- package/dist/codex/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/codex/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/codex/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/codex/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/codex/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/codex/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/codex/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/codex/kits/veritas-governance/docs/README.md +141 -10
- package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/codex/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/codex/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/codex/kits/veritas-governance/kit.json +65 -0
- package/dist/codex/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/codex/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/codex/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/codex/schemas/workflow-waves.schema.json +347 -0
- package/dist/codex/scripts/check-layer-boundary.mjs +98 -0
- package/dist/codex/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/codex/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/codex/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/codex/scripts/liveness/relay.sh +23 -11
- package/dist/codex/scripts/telemetry/lib/config.sh +29 -0
- package/dist/kiro/agents/tool-security-reviewer.json +1 -1
- package/dist/kiro/build/package.json +1 -1
- package/dist/kiro/build/src/cli/init.js +35 -3
- package/dist/kiro/build/src/cli/kit.js +95 -2
- package/dist/kiro/build/src/cli/pull-work-provider.js +7 -1
- package/dist/kiro/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/kiro/build/src/cli/workflow.js +5 -1
- package/dist/kiro/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/kiro/build/src/flow-kit/provision.js +99 -0
- package/dist/kiro/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/kiro/build/src/flow-kit/validate.js +214 -9
- package/dist/kiro/build/src/runtime-adapters.js +1 -1
- package/dist/kiro/context/contracts/execution-contract.md +30 -1
- package/dist/kiro/context/contracts/review-contract.md +4 -0
- package/dist/kiro/context/contracts/trigger-guards.md +73 -0
- package/dist/kiro/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/kiro/context/settings/backlog-provider-settings.json +1 -1
- package/dist/kiro/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/kiro/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/kiro/docs/adr/index.md +1 -0
- package/dist/kiro/docs/architecture-engine-and-kits.md +17 -0
- package/dist/kiro/docs/context-map.md +3 -0
- package/dist/kiro/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/kiro/docs/decisions/index.md +1 -0
- package/dist/kiro/docs/developer-architecture.md +3 -3
- package/dist/kiro/docs/flow-kit-repository-contract.md +34 -3
- package/dist/kiro/docs/kit-authoring-guide.md +1 -1
- package/dist/kiro/docs/veritas-integration.md +12 -0
- package/dist/kiro/evals/ci/run-baseline.sh +4 -0
- package/dist/kiro/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/kiro/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/kiro/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/kiro/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/kiro/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/kiro/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/kiro/evals/static/test_package.sh +6 -0
- package/dist/kiro/evals/static/test_workflow_skills.sh +16 -0
- package/dist/kiro/install.sh +1 -1
- package/dist/kiro/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/kiro/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/kiro/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/kiro/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/kiro/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/kiro/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/kiro/kits/veritas-governance/docs/README.md +141 -10
- package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/kiro/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/kiro/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/kiro/kits/veritas-governance/kit.json +65 -0
- package/dist/kiro/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/kiro/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/kiro/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/kiro/schemas/workflow-waves.schema.json +347 -0
- package/dist/kiro/scripts/check-layer-boundary.mjs +98 -0
- package/dist/kiro/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/kiro/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/kiro/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/kiro/scripts/liveness/relay.sh +23 -11
- package/dist/kiro/scripts/telemetry/lib/config.sh +29 -0
- package/dist/opencode/.opencode/agents/tool-security-reviewer.md +2 -1
- package/dist/opencode/.opencode/skills/consult-standards/SKILL.md +73 -0
- package/dist/opencode/.opencode/skills/execute-plan/SKILL.md +4 -3
- package/dist/opencode/.opencode/skills/pull-work/SKILL.md +12 -0
- package/dist/opencode/.opencode/skills/review-work/SKILL.md +11 -0
- package/dist/opencode/.opencode/skills/standards-authoring/SKILL.md +87 -0
- package/dist/opencode/build/package.json +1 -1
- package/dist/opencode/build/src/cli/init.js +35 -3
- package/dist/opencode/build/src/cli/kit.js +95 -2
- package/dist/opencode/build/src/cli/pull-work-provider.js +7 -1
- package/dist/opencode/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/opencode/build/src/cli/workflow.js +5 -1
- package/dist/opencode/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/opencode/build/src/flow-kit/provision.js +99 -0
- package/dist/opencode/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/opencode/build/src/flow-kit/validate.js +214 -9
- package/dist/opencode/build/src/runtime-adapters.js +1 -1
- package/dist/opencode/context/contracts/execution-contract.md +30 -1
- package/dist/opencode/context/contracts/review-contract.md +4 -0
- package/dist/opencode/context/contracts/trigger-guards.md +73 -0
- package/dist/opencode/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/opencode/context/settings/backlog-provider-settings.json +1 -1
- package/dist/opencode/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/opencode/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/opencode/docs/adr/index.md +1 -0
- package/dist/opencode/docs/architecture-engine-and-kits.md +17 -0
- package/dist/opencode/docs/context-map.md +3 -0
- package/dist/opencode/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/opencode/docs/decisions/index.md +1 -0
- package/dist/opencode/docs/developer-architecture.md +3 -3
- package/dist/opencode/docs/flow-kit-repository-contract.md +34 -3
- package/dist/opencode/docs/kit-authoring-guide.md +1 -1
- package/dist/opencode/docs/veritas-integration.md +12 -0
- package/dist/opencode/evals/ci/run-baseline.sh +4 -0
- package/dist/opencode/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/opencode/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/opencode/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/opencode/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/opencode/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/opencode/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/opencode/evals/static/test_package.sh +6 -0
- package/dist/opencode/evals/static/test_workflow_skills.sh +16 -0
- package/dist/opencode/install.sh +1 -1
- package/dist/opencode/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/opencode/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/opencode/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/opencode/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/opencode/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/opencode/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/opencode/kits/veritas-governance/docs/README.md +141 -10
- package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/opencode/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/opencode/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/opencode/kits/veritas-governance/kit.json +65 -0
- package/dist/opencode/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/opencode/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/opencode/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/opencode/schemas/workflow-waves.schema.json +347 -0
- package/dist/opencode/scripts/check-layer-boundary.mjs +98 -0
- package/dist/opencode/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/opencode/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/opencode/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/opencode/scripts/liveness/relay.sh +23 -11
- package/dist/opencode/scripts/telemetry/lib/config.sh +29 -0
- package/dist/pi/.pi/skills/consult-standards/SKILL.md +73 -0
- package/dist/pi/.pi/skills/execute-plan/SKILL.md +4 -3
- package/dist/pi/.pi/skills/pull-work/SKILL.md +12 -0
- package/dist/pi/.pi/skills/review-work/SKILL.md +11 -0
- package/dist/pi/.pi/skills/standards-authoring/SKILL.md +87 -0
- package/dist/pi/build/package.json +1 -1
- package/dist/pi/build/src/cli/init.js +35 -3
- package/dist/pi/build/src/cli/kit.js +95 -2
- package/dist/pi/build/src/cli/pull-work-provider.js +7 -1
- package/dist/pi/build/src/cli/validate-workflow-artifacts.js +53 -0
- package/dist/pi/build/src/cli/workflow.js +5 -1
- package/dist/pi/build/src/flow-kit/provision.d.ts +23 -0
- package/dist/pi/build/src/flow-kit/provision.js +99 -0
- package/dist/pi/build/src/flow-kit/validate.d.ts +52 -0
- package/dist/pi/build/src/flow-kit/validate.js +214 -9
- package/dist/pi/build/src/runtime-adapters.js +1 -1
- package/dist/pi/context/contracts/execution-contract.md +30 -1
- package/dist/pi/context/contracts/review-contract.md +4 -0
- package/dist/pi/context/contracts/trigger-guards.md +73 -0
- package/dist/pi/context/scripts/telemetry/lib/config.sh +29 -0
- package/dist/pi/context/settings/backlog-provider-settings.json +1 -1
- package/dist/pi/context/settings/workspace-backlog-provider-settings.example.json +1 -1
- package/dist/pi/docs/adr/0023-kit-provisioning.md +47 -0
- package/dist/pi/docs/adr/index.md +1 -0
- package/dist/pi/docs/architecture-engine-and-kits.md +17 -0
- package/dist/pi/docs/context-map.md +3 -0
- package/dist/pi/docs/decisions/backlog-readiness-source.md +89 -0
- package/dist/pi/docs/decisions/index.md +1 -0
- package/dist/pi/docs/developer-architecture.md +3 -3
- package/dist/pi/docs/flow-kit-repository-contract.md +34 -3
- package/dist/pi/docs/kit-authoring-guide.md +1 -1
- package/dist/pi/docs/veritas-integration.md +12 -0
- package/dist/pi/evals/ci/run-baseline.sh +4 -0
- package/dist/pi/evals/integration/test_kit_provisioning.sh +112 -0
- package/dist/pi/evals/integration/test_liveness_console_relay.sh +91 -1
- package/dist/pi/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/dist/pi/evals/integration/test_pull_work_provider.sh +18 -0
- package/dist/pi/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/dist/pi/evals/integration/test_workflow_artifacts.sh +257 -0
- package/dist/pi/evals/static/test_package.sh +6 -0
- package/dist/pi/evals/static/test_workflow_skills.sh +16 -0
- package/dist/pi/install.sh +1 -1
- package/dist/pi/kits/builder/flows/publish-learn.flow.json +9 -1
- package/dist/pi/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/dist/pi/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/dist/pi/kits/builder/skills/review-work/SKILL.md +11 -0
- package/dist/pi/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/dist/pi/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/dist/pi/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/dist/pi/kits/veritas-governance/docs/README.md +141 -10
- package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/dist/pi/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/dist/pi/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/dist/pi/kits/veritas-governance/kit.json +65 -0
- package/dist/pi/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/dist/pi/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/dist/pi/schemas/backlog-provider-settings.schema.json +1 -1
- package/dist/pi/schemas/workflow-waves.schema.json +347 -0
- package/dist/pi/scripts/check-layer-boundary.mjs +98 -0
- package/dist/pi/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/dist/pi/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/dist/pi/scripts/hooks/lib/liveness-write.js +109 -9
- package/dist/pi/scripts/liveness/relay.sh +23 -11
- package/dist/pi/scripts/telemetry/lib/config.sh +29 -0
- package/docs/adr/0023-kit-provisioning.md +47 -0
- package/docs/adr/index.md +1 -0
- package/docs/architecture-engine-and-kits.md +17 -0
- package/docs/context-map.md +3 -0
- package/docs/decisions/backlog-readiness-source.md +89 -0
- package/docs/decisions/index.md +1 -0
- package/docs/developer-architecture.md +3 -3
- package/docs/flow-kit-repository-contract.md +34 -3
- package/docs/kit-authoring-guide.md +1 -1
- package/docs/veritas-integration.md +12 -0
- package/evals/ci/run-baseline.sh +4 -0
- package/evals/integration/test_kit_provisioning.sh +112 -0
- package/evals/integration/test_liveness_console_relay.sh +91 -1
- package/evals/integration/test_liveness_heartbeat.sh +66 -0
- package/evals/integration/test_pull_work_provider.sh +18 -0
- package/evals/integration/test_veritas_governance_kit.sh +256 -0
- package/evals/integration/test_workflow_artifacts.sh +257 -0
- package/evals/static/test_package.sh +6 -0
- package/evals/static/test_workflow_skills.sh +16 -0
- package/kits/builder/flows/publish-learn.flow.json +9 -1
- package/kits/builder/skills/execute-plan/SKILL.md +4 -3
- package/kits/builder/skills/pull-work/SKILL.md +12 -0
- package/kits/builder/skills/review-work/SKILL.md +11 -0
- package/kits/veritas-governance/adapter/readiness-to-trust-bundle.mjs +19 -20
- package/kits/veritas-governance/assets/starter-hooks/githooks/post-commit +13 -0
- package/kits/veritas-governance/assets/starter-hooks/githooks/pre-push +13 -0
- package/kits/veritas-governance/assets/starter-standards/veritas/GOVERNANCE.md +23 -0
- package/kits/veritas-governance/assets/starter-standards/veritas/README.md +58 -0
- package/kits/veritas-governance/assets/starter-standards/veritas/authority/default.authority-settings.json +30 -0
- package/kits/veritas-governance/assets/starter-standards/veritas/repo-map.json +115 -0
- package/kits/veritas-governance/assets/starter-standards/veritas/repo-standards/default.repo-standards.json +54 -0
- package/kits/veritas-governance/assets/starter-standards/veritas.claims.json +179 -0
- package/kits/veritas-governance/docs/README.md +141 -10
- package/kits/veritas-governance/fixtures/standards-authoring/approved.trust-bundle.json +74 -0
- package/kits/veritas-governance/fixtures/standards-authoring/not-approved.trust-bundle.json +74 -0
- package/kits/veritas-governance/flows/standards-authoring.flow.json +35 -0
- package/kits/veritas-governance/kit.json +65 -0
- package/kits/veritas-governance/skills/consult-standards/SKILL.md +73 -0
- package/kits/veritas-governance/skills/standards-authoring/SKILL.md +87 -0
- package/package.json +2 -1
- package/schemas/backlog-provider-settings.schema.json +1 -1
- package/schemas/workflow-waves.schema.json +347 -0
- package/scripts/check-layer-boundary.mjs +98 -0
- package/scripts/hooks/claude-telemetry-hook.js +6 -0
- package/scripts/hooks/lib/liveness-heartbeat.js +42 -1
- package/scripts/hooks/lib/liveness-write.js +109 -9
- package/scripts/liveness/relay.sh +23 -11
- package/scripts/telemetry/lib/config.sh +29 -0
- package/src/cli/builder-flow-runtime.test.mjs +86 -0
- package/src/cli/flow-resolver-composition.test.mjs +20 -1
- package/src/cli/init.ts +31 -3
- package/src/cli/kit-metadata-security.test.mjs +163 -1
- package/src/cli/kit-provisioning.test.mjs +122 -0
- package/src/cli/kit.ts +83 -2
- package/src/cli/pull-work-provider.ts +7 -1
- package/src/cli/validate-waves.test.mjs +134 -0
- package/src/cli/validate-workflow-artifacts.ts +47 -0
- package/src/cli/workflow.ts +7 -1
- package/src/flow-kit/provision.ts +118 -0
- package/src/flow-kit/validate.ts +233 -10
- package/src/runtime-adapters.ts +1 -1
package/src/flow-kit/validate.ts
CHANGED
|
@@ -7,27 +7,40 @@ export { isObservableBuilderArtifactRef, isSafeBuilderArtifactRef, parseKitFlowS
|
|
|
7
7
|
export type { KitFlowStepActionEntry, KitFlowStepArtifactBinding, KitFlowStepExpectationBinding } from "./action-metadata.js";
|
|
8
8
|
|
|
9
9
|
// Extension-only asset classes: validated by Flow Agents. Flows are validated by @kontourai/flow.
|
|
10
|
-
const EXTENSION_ASSET_CLASSES = ["skills", "docs", "adapters", "evals", "assets"] as const;
|
|
10
|
+
const EXTENSION_ASSET_CLASSES = ["skills", "docs", "adapters", "evals", "assets", "provisions"] as const;
|
|
11
11
|
|
|
12
12
|
// Core container fields owned by kontourai/flow (flow-kit-container.schema.json).
|
|
13
13
|
// agent-extension fields are skills, docs, adapters, evals, assets.
|
|
14
14
|
const CORE_CONTAINER_FIELDS = new Set(["schema_version", "id", "name", "description", "product_name", "flows"]);
|
|
15
|
-
const AGENT_EXTENSION_CLASSES = new Set(["skills", "docs", "adapters", "evals", "assets"]);
|
|
15
|
+
const AGENT_EXTENSION_CLASSES = new Set(["skills", "docs", "adapters", "evals", "assets", "provisions"]);
|
|
16
16
|
|
|
17
17
|
// Flow Agents-recognized metadata fields that are neither core container fields nor
|
|
18
18
|
// agent-extension asset classes. Recognized here so they are never misreported as
|
|
19
19
|
// unknown third-party extension namespaces. `dependencies` declares cross-kit skill
|
|
20
20
|
// dependencies (extension-layer ownership; see docs/adr/0019-kit-dependency-ownership.md),
|
|
21
21
|
// workflow_triggers / hook_influence_expectations declare kit-owned runtime influence,
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
|
|
22
|
+
// agent_spawn_triggers declares perimeter trigger surfaces that spawn agent runs plus
|
|
23
|
+
// their guard config (context/contracts/trigger-guards.md), and first_party is legacy
|
|
24
|
+
// catalog/marketplace metadata. It does not grant runtime capability or steering privilege.
|
|
25
|
+
const KNOWN_METADATA_FIELDS = new Set(["dependencies", "workflow_triggers", "hook_influence_expectations", "flow_step_actions", "skill_roles", "first_party", "agent_spawn_triggers"]);
|
|
25
26
|
|
|
26
27
|
export interface KitDependencyEntry {
|
|
27
28
|
kit_id: string;
|
|
28
29
|
reason?: string;
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
export interface KitProvisionEntry {
|
|
33
|
+
id: string;
|
|
34
|
+
path: string;
|
|
35
|
+
target: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Consumer-repo-relative directory (posix, lowercase) where the engine writes its own
|
|
40
|
+
// per-kit provision manifest. Reserved: a provision may not target inside it. Shared with
|
|
41
|
+
// provision.ts so the reservation and the actual manifest write stay in agreement.
|
|
42
|
+
export const PROVISION_MANIFEST_DIR = ".kontourai/flow-agents/provisions";
|
|
43
|
+
|
|
31
44
|
export interface KitWorkflowTriggerEntry {
|
|
32
45
|
id: string;
|
|
33
46
|
when: string;
|
|
@@ -48,6 +61,20 @@ export interface KitHookInfluenceExpectationEntry {
|
|
|
48
61
|
must_include_actions: string[];
|
|
49
62
|
}
|
|
50
63
|
|
|
64
|
+
export interface KitAgentSpawnTriggerGuards {
|
|
65
|
+
dedup_key: string;
|
|
66
|
+
cooldown_seconds: number;
|
|
67
|
+
daily_cap: number;
|
|
68
|
+
max_concurrent: number;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface KitAgentSpawnTriggerEntry {
|
|
72
|
+
id: string;
|
|
73
|
+
description: string;
|
|
74
|
+
spawns_agent_runs: boolean;
|
|
75
|
+
guards?: KitAgentSpawnTriggerGuards;
|
|
76
|
+
}
|
|
77
|
+
|
|
51
78
|
export type KitSkillRole = "entrypoint" | "profile" | "step" | "shared-primitive" | "extension";
|
|
52
79
|
|
|
53
80
|
export interface KitSkillRoleEntry {
|
|
@@ -266,6 +293,120 @@ export function parseKitHookInfluenceExpectations(manifest: Record<string, unkno
|
|
|
266
293
|
return { entries, errors };
|
|
267
294
|
}
|
|
268
295
|
|
|
296
|
+
const AGENT_SPAWN_TRIGGER_GUARD_FIELDS = ["dedup_key", "cooldown_seconds", "daily_cap", "max_concurrent"] as const;
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* Parse and shape-validate a kit manifest's optional `agent_spawn_triggers` field:
|
|
300
|
+
* perimeter trigger surfaces (check failures, schedules, watchers) that spawn agent
|
|
301
|
+
* runs, plus their guard config. Contract: context/contracts/trigger-guards.md.
|
|
302
|
+
*
|
|
303
|
+
* Shape rules (ERRORS):
|
|
304
|
+
* - `agent_spawn_triggers` (if present) must be an array of objects.
|
|
305
|
+
* - `id` must match the workflow-trigger identifier pattern and be unique.
|
|
306
|
+
* - `description` must be a non-empty string.
|
|
307
|
+
* - `spawns_agent_runs` must be a boolean.
|
|
308
|
+
* - `guards` (if present) must be an object with exactly the four guard fields when
|
|
309
|
+
* complete: `dedup_key` non-empty string; `cooldown_seconds`, `daily_cap`,
|
|
310
|
+
* `max_concurrent` integers >= 1. Unknown guard fields are errors.
|
|
311
|
+
*
|
|
312
|
+
* Guard-completeness (WARNINGS, never errors — declaration-first rollout, #664):
|
|
313
|
+
* - an entry with `spawns_agent_runs: true` and missing or incomplete `guards`
|
|
314
|
+
* produces a warning naming the missing guard fields and the contract doc.
|
|
315
|
+
*/
|
|
316
|
+
export function parseKitAgentSpawnTriggers(manifest: Record<string, unknown>, manifestPath: string): { entries: KitAgentSpawnTriggerEntry[]; errors: string[]; warnings: string[] } {
|
|
317
|
+
const entries: KitAgentSpawnTriggerEntry[] = [];
|
|
318
|
+
const errors: string[] = [];
|
|
319
|
+
const warnings: string[] = [];
|
|
320
|
+
const raw = manifest.agent_spawn_triggers;
|
|
321
|
+
if (raw === undefined) return { entries, errors, warnings };
|
|
322
|
+
if (!Array.isArray(raw)) {
|
|
323
|
+
errors.push(`${manifestPath}: .agent_spawn_triggers must be a list`);
|
|
324
|
+
return { entries, errors, warnings };
|
|
325
|
+
}
|
|
326
|
+
const fields = new Set(["id", "description", "spawns_agent_runs", "guards"]);
|
|
327
|
+
const seen = new Set<string>();
|
|
328
|
+
raw.forEach((entry, index) => {
|
|
329
|
+
if (typeof entry !== "object" || entry === null) {
|
|
330
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}] must be an object`);
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
const record = entry as Record<string, unknown>;
|
|
334
|
+
const unknown = Object.keys(record).filter((field) => !fields.has(field));
|
|
335
|
+
if (unknown.length > 0) {
|
|
336
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}] contains unsupported field(s): ${unknown.join(", ")}`);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const id = record.id;
|
|
340
|
+
if (!workflowTriggerIdentifier(id)) {
|
|
341
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].id must match ^[a-z0-9]+(?:[.-][a-z0-9]+)*$`);
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (seen.has(id)) {
|
|
345
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].id duplicates '${id}'`);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
seen.add(id);
|
|
349
|
+
if (typeof record.description !== "string" || !record.description.trim()) {
|
|
350
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].description must be a non-empty string`);
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (typeof record.spawns_agent_runs !== "boolean") {
|
|
354
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].spawns_agent_runs must be a boolean`);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
let guards: KitAgentSpawnTriggerGuards | undefined;
|
|
358
|
+
let guardsShapeValid = true;
|
|
359
|
+
const missingGuardFields: string[] = [];
|
|
360
|
+
if (record.guards !== undefined) {
|
|
361
|
+
if (typeof record.guards !== "object" || record.guards === null || Array.isArray(record.guards)) {
|
|
362
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].guards must be an object when present`);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
const guardRecord = record.guards as Record<string, unknown>;
|
|
366
|
+
const guardFieldSet = new Set<string>(AGENT_SPAWN_TRIGGER_GUARD_FIELDS);
|
|
367
|
+
const unknownGuards = Object.keys(guardRecord).filter((field) => !guardFieldSet.has(field));
|
|
368
|
+
if (unknownGuards.length > 0) {
|
|
369
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].guards contains unsupported field(s): ${unknownGuards.join(", ")}`);
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (guardRecord.dedup_key !== undefined && (typeof guardRecord.dedup_key !== "string" || !guardRecord.dedup_key.trim())) {
|
|
373
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].guards.dedup_key must be a non-empty string`);
|
|
374
|
+
guardsShapeValid = false;
|
|
375
|
+
}
|
|
376
|
+
for (const field of ["cooldown_seconds", "daily_cap", "max_concurrent"] as const) {
|
|
377
|
+
const value = guardRecord[field];
|
|
378
|
+
if (value !== undefined && (typeof value !== "number" || !Number.isInteger(value) || value < 1)) {
|
|
379
|
+
errors.push(`${manifestPath}: agent_spawn_triggers[${index}].guards.${field} must be an integer >= 1`);
|
|
380
|
+
guardsShapeValid = false;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
if (!guardsShapeValid) return;
|
|
384
|
+
for (const field of AGENT_SPAWN_TRIGGER_GUARD_FIELDS) {
|
|
385
|
+
if (guardRecord[field] === undefined) missingGuardFields.push(field);
|
|
386
|
+
}
|
|
387
|
+
if (missingGuardFields.length === 0) {
|
|
388
|
+
guards = {
|
|
389
|
+
dedup_key: guardRecord.dedup_key as string,
|
|
390
|
+
cooldown_seconds: guardRecord.cooldown_seconds as number,
|
|
391
|
+
daily_cap: guardRecord.daily_cap as number,
|
|
392
|
+
max_concurrent: guardRecord.max_concurrent as number,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
} else {
|
|
396
|
+
missingGuardFields.push(...AGENT_SPAWN_TRIGGER_GUARD_FIELDS);
|
|
397
|
+
}
|
|
398
|
+
if (record.spawns_agent_runs === true && missingGuardFields.length > 0) {
|
|
399
|
+
warnings.push(
|
|
400
|
+
`${manifestPath}: agent_spawn_triggers[${index}] ('${id}') spawns agent runs without complete guard config` +
|
|
401
|
+
` (missing: ${missingGuardFields.join(", ")}); declare dedup_key, cooldown_seconds, daily_cap, and max_concurrent` +
|
|
402
|
+
` per context/contracts/trigger-guards.md`,
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
entries.push({ id, description: record.description, spawns_agent_runs: record.spawns_agent_runs, ...(guards ? { guards } : {}) });
|
|
406
|
+
});
|
|
407
|
+
return { entries, errors, warnings };
|
|
408
|
+
}
|
|
409
|
+
|
|
269
410
|
export function parseKitSkillRoles(manifest: Record<string, unknown>, manifestPath: string): { entries: KitSkillRoleEntry[]; errors: string[] } {
|
|
270
411
|
const entries: KitSkillRoleEntry[] = [];
|
|
271
412
|
const errors: string[] = [];
|
|
@@ -493,21 +634,34 @@ export async function deriveKitTargets(manifest: Record<string, unknown>, kitDir
|
|
|
493
634
|
}
|
|
494
635
|
|
|
495
636
|
export async function validateKitRepository(kitDir: string): Promise<string[]> {
|
|
637
|
+
return (await validateKitRepositoryDiagnostics(kitDir)).errors;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
/**
|
|
641
|
+
* Repository validation with a non-blocking warnings channel alongside the blocking
|
|
642
|
+
* errors `validateKitRepository` has always returned. Warnings are advisory quality
|
|
643
|
+
* findings (today: an agent-spawning trigger surface declared without complete guard
|
|
644
|
+
* config — context/contracts/trigger-guards.md); they never fail validation.
|
|
645
|
+
*/
|
|
646
|
+
export async function validateKitRepositoryDiagnostics(kitDir: string): Promise<{ errors: string[]; warnings: string[] }> {
|
|
496
647
|
const errors: string[] = [];
|
|
648
|
+
const warnings: string[] = [];
|
|
497
649
|
const manifestPath = path.join(kitDir, "kit.json");
|
|
498
650
|
let manifest: Record<string, unknown>;
|
|
499
651
|
try {
|
|
500
652
|
manifest = readJson(manifestPath) as Record<string, unknown>;
|
|
501
653
|
} catch (error) {
|
|
502
654
|
errors.push(`${manifestPath}: invalid JSON: ${(error as Error).message}`);
|
|
503
|
-
return errors;
|
|
655
|
+
return { errors, warnings };
|
|
504
656
|
}
|
|
505
657
|
|
|
506
658
|
errors.push(...await delegateCoreContainerValidation(kitDir, manifest));
|
|
507
659
|
errors.push(...validateExtensionAssets(kitDir, manifestPath, manifest));
|
|
508
|
-
|
|
660
|
+
const metadata = validateAgentMetadata(kitDir, manifestPath, manifest);
|
|
661
|
+
errors.push(...metadata.errors);
|
|
662
|
+
warnings.push(...metadata.warnings);
|
|
509
663
|
if (manifest.first_party !== undefined && typeof manifest.first_party !== "boolean") errors.push(`${manifestPath}: .first_party must be a boolean when present`);
|
|
510
|
-
return errors;
|
|
664
|
+
return { errors, warnings };
|
|
511
665
|
}
|
|
512
666
|
|
|
513
667
|
function validateExtensionAssets(kitDir: string, manifestPath: string, manifest: Record<string, unknown>): string[] {
|
|
@@ -528,10 +682,14 @@ function validateExtensionAssets(kitDir: string, manifestPath: string, manifest:
|
|
|
528
682
|
const record = entry as Record<string, unknown>;
|
|
529
683
|
const id = record.id;
|
|
530
684
|
const rel = record.path;
|
|
685
|
+
const kitId = typeof manifest.id === "string" ? manifest.id : "";
|
|
531
686
|
if (typeof id === "string") {
|
|
532
687
|
if (seen.has(id)) errors.push(`${manifestPath}: ${section}[${index}].id duplicates`);
|
|
533
688
|
seen.add(id);
|
|
534
689
|
}
|
|
690
|
+
if (section === "provisions" && (typeof id !== "string" || !kitId || !id.startsWith(`${kitId}.`))) {
|
|
691
|
+
errors.push(`${manifestPath}: provisions[${index}].id must be prefixed with '${kitId}.'`);
|
|
692
|
+
}
|
|
535
693
|
if (typeof rel !== "string" || !rel) {
|
|
536
694
|
errors.push(`${manifestPath}: ${section}[${index}].path must be a string`);
|
|
537
695
|
return;
|
|
@@ -540,6 +698,10 @@ function validateExtensionAssets(kitDir: string, manifestPath: string, manifest:
|
|
|
540
698
|
errors.push(`${manifestPath}: ${section}[${index}].path must be relative`);
|
|
541
699
|
return;
|
|
542
700
|
}
|
|
701
|
+
if (rel.replace(/\\/g, "/").split("/").includes("..")) {
|
|
702
|
+
errors.push(`${manifestPath}: ${section}[${index}].path must not contain traversal segments`);
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
543
705
|
const resolved = path.resolve(kitDir, rel);
|
|
544
706
|
const root = path.resolve(kitDir);
|
|
545
707
|
if (resolved !== root && !resolved.startsWith(`${root}${path.sep}`)) {
|
|
@@ -548,21 +710,82 @@ function validateExtensionAssets(kitDir: string, manifestPath: string, manifest:
|
|
|
548
710
|
}
|
|
549
711
|
if (!fs.existsSync(resolved)) {
|
|
550
712
|
errors.push(`${manifestPath}: ${section}[${index}].path points at missing asset: ${rel}`);
|
|
713
|
+
} else if (section === "provisions") {
|
|
714
|
+
if (!fs.statSync(resolved).isFile()) {
|
|
715
|
+
errors.push(`${manifestPath}: provisions[${index}].path must point at a file: ${rel}`);
|
|
716
|
+
} else {
|
|
717
|
+
// A provisioned source is copied byte-for-byte into a consumer repo, so a symlink that
|
|
718
|
+
// resolves outside the kit would exfiltrate arbitrary readable host files. Require the
|
|
719
|
+
// link-resolved real path to stay inside the kit.
|
|
720
|
+
const realResolved = fs.realpathSync(resolved);
|
|
721
|
+
const realRoot = fs.realpathSync(root);
|
|
722
|
+
if (realResolved !== realRoot && !realResolved.startsWith(`${realRoot}${path.sep}`)) {
|
|
723
|
+
errors.push(`${manifestPath}: provisions[${index}].path must not resolve outside the kit directory`);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
551
726
|
}
|
|
552
727
|
});
|
|
553
728
|
}
|
|
554
729
|
|
|
730
|
+
const rawProvisions = manifest.provisions;
|
|
731
|
+
if (Array.isArray(rawProvisions)) {
|
|
732
|
+
const targets = new Set<string>();
|
|
733
|
+
rawProvisions.forEach((entry, index) => {
|
|
734
|
+
if (typeof entry !== "object" || entry === null) return;
|
|
735
|
+
const record = entry as Record<string, unknown>;
|
|
736
|
+
if (record.description !== undefined && typeof record.description !== "string") {
|
|
737
|
+
errors.push(`${manifestPath}: provisions[${index}].description must be a string when present`);
|
|
738
|
+
}
|
|
739
|
+
const target = record.target;
|
|
740
|
+
if (typeof target !== "string" || target.trim().length === 0) {
|
|
741
|
+
errors.push(`${manifestPath}: provisions[${index}].target must be a non-empty string`);
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
if (path.isAbsolute(target) || path.win32.isAbsolute(target)) {
|
|
745
|
+
errors.push(`${manifestPath}: provisions[${index}].target must be relative`);
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
const segments = target.replace(/\\/g, "/").split("/");
|
|
749
|
+
if (segments.includes("..")) {
|
|
750
|
+
errors.push(`${manifestPath}: provisions[${index}].target must not contain traversal segments`);
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
const normalized = path.posix.normalize(segments.join("/"));
|
|
754
|
+
if (normalized === "." || normalized.startsWith("..")) {
|
|
755
|
+
errors.push(`${manifestPath}: provisions[${index}].target must stay inside the consumer repository`);
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
758
|
+
// Case-fold reserved-directory and collision checks: on a case-insensitive filesystem
|
|
759
|
+
// `.GIT/` still lands in the real `.git`, and README.md/readme.md still collide.
|
|
760
|
+
const lowered = normalized.toLowerCase();
|
|
761
|
+
if (lowered === ".git" || lowered.startsWith(".git/")) {
|
|
762
|
+
errors.push(`${manifestPath}: provisions[${index}].target must not be inside .git`);
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
765
|
+
if (lowered === PROVISION_MANIFEST_DIR || lowered.startsWith(`${PROVISION_MANIFEST_DIR}/`)) {
|
|
766
|
+
errors.push(`${manifestPath}: provisions[${index}].target must not be inside the provision manifest namespace (${PROVISION_MANIFEST_DIR}/)`);
|
|
767
|
+
return;
|
|
768
|
+
}
|
|
769
|
+
if (targets.has(lowered)) errors.push(`${manifestPath}: provisions[${index}].target duplicates '${normalized}'`);
|
|
770
|
+
targets.add(lowered);
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
|
|
555
774
|
return errors;
|
|
556
775
|
}
|
|
557
776
|
|
|
558
|
-
function validateAgentMetadata(kitDir: string, manifestPath: string, manifest: Record<string, unknown>): string[] {
|
|
777
|
+
function validateAgentMetadata(kitDir: string, manifestPath: string, manifest: Record<string, unknown>): { errors: string[]; warnings: string[] } {
|
|
559
778
|
const errors: string[] = [];
|
|
779
|
+
const warnings: string[] = [];
|
|
560
780
|
const depResult = parseKitDependencies(manifest, manifestPath);
|
|
561
781
|
for (const err of depResult.errors) errors.push(err);
|
|
562
782
|
const workflowTriggerResult = parseKitWorkflowTriggers(manifest, manifestPath);
|
|
563
783
|
for (const err of workflowTriggerResult.errors) errors.push(err);
|
|
564
784
|
const hookExpectationResult = parseKitHookInfluenceExpectations(manifest, manifestPath);
|
|
565
785
|
for (const err of hookExpectationResult.errors) errors.push(err);
|
|
786
|
+
const agentSpawnTriggerResult = parseKitAgentSpawnTriggers(manifest, manifestPath);
|
|
787
|
+
for (const err of agentSpawnTriggerResult.errors) errors.push(err);
|
|
788
|
+
for (const warning of agentSpawnTriggerResult.warnings) warnings.push(warning);
|
|
566
789
|
const flowStepActionResult = parseKitFlowStepActions(manifest, manifestPath);
|
|
567
790
|
for (const err of flowStepActionResult.errors) errors.push(err);
|
|
568
791
|
const skillRoleResult = parseKitSkillRoles(manifest, manifestPath);
|
|
@@ -570,7 +793,7 @@ function validateAgentMetadata(kitDir: string, manifestPath: string, manifest: R
|
|
|
570
793
|
if ((manifest.skill_roles !== undefined || manifest.flow_step_actions !== undefined) && skillRoleResult.errors.length === 0) {
|
|
571
794
|
errors.push(...validateActionRepositoryMetadata({ kitDir, manifestPath, manifest, actions: flowStepActionResult.entries, skillRoles: skillRoleResult.entries }));
|
|
572
795
|
}
|
|
573
|
-
return errors;
|
|
796
|
+
return { errors, warnings };
|
|
574
797
|
}
|
|
575
798
|
|
|
576
799
|
export async function assertKitRepository(kitDir: string): Promise<Record<string, unknown>> {
|
package/src/runtime-adapters.ts
CHANGED
|
@@ -59,7 +59,7 @@ export type LoadedKit = {
|
|
|
59
59
|
hook_influence_expectations: KitHookInfluenceExpectationRef[];
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
const ASSET_CLASSES = ["flows", "skills", "docs", "adapters", "evals", "assets"];
|
|
62
|
+
const ASSET_CLASSES = ["flows", "skills", "docs", "adapters", "evals", "assets", "provisions"];
|
|
63
63
|
const KIT_ID_RE = /^[a-z][a-z0-9-]*$/;
|
|
64
64
|
|
|
65
65
|
function assetPath(root: string, value: string): string | null {
|