@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,387 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# telemetry.sh — Kiro adapter for generic agent telemetry schema v0.3.0
|
|
3
|
+
# Usage: echo '<hook_event_json>' | bash telemetry.sh <event_type> <agent_name>
|
|
4
|
+
set -o pipefail
|
|
5
|
+
|
|
6
|
+
TELEMETRY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
|
|
8
|
+
source "${TELEMETRY_DIR}/lib/config.sh"
|
|
9
|
+
source "${TELEMETRY_DIR}/lib/session.sh"
|
|
10
|
+
source "${TELEMETRY_DIR}/lib/enrich.sh"
|
|
11
|
+
source "${TELEMETRY_DIR}/lib/transport.sh"
|
|
12
|
+
source "${TELEMETRY_DIR}/lib/usage.sh"
|
|
13
|
+
|
|
14
|
+
normalize_tool_name() {
|
|
15
|
+
case "$1" in
|
|
16
|
+
Bash|bash|shell|execute_bash) echo "execute_bash" ;;
|
|
17
|
+
apply_patch|Edit|Write|fs_write|write|code) echo "fs_write" ;;
|
|
18
|
+
spawn_agent|use_subagent|InvokeSubagents|Task|Agent|"delegate to a specialist agent") echo "use_subagent" ;;
|
|
19
|
+
Read|read|fs_read) echo "fs_read" ;;
|
|
20
|
+
*) echo "$1" ;;
|
|
21
|
+
esac
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
telemetry_session_id() {
|
|
25
|
+
local event_type="$1" agent_name="$2"
|
|
26
|
+
local session_id=""
|
|
27
|
+
case "$event_type" in
|
|
28
|
+
agentSpawn)
|
|
29
|
+
session_id=$(session_start "$agent_name")
|
|
30
|
+
session_cleanup
|
|
31
|
+
;;
|
|
32
|
+
stop)
|
|
33
|
+
session_id=$(session_get)
|
|
34
|
+
session_end
|
|
35
|
+
;;
|
|
36
|
+
*)
|
|
37
|
+
session_id=$(session_get)
|
|
38
|
+
# Touch session file so mtime reflects last activity
|
|
39
|
+
local _sf="${TELEMETRY_SESSION_DIR}/telemetry-${PPID}"
|
|
40
|
+
[[ -f "$_sf" ]] && touch "$_sf" 2>/dev/null
|
|
41
|
+
;;
|
|
42
|
+
esac
|
|
43
|
+
echo "${session_id:-no-session}"
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
schema_event_type() {
|
|
47
|
+
local event_type="$1"
|
|
48
|
+
case "$event_type" in
|
|
49
|
+
agentSpawn|SessionStart) echo "session.start" ;;
|
|
50
|
+
stop|Stop|SessionEnd) echo "session.end" ;;
|
|
51
|
+
userPromptSubmit|UserPromptSubmit) echo "turn.user" ;;
|
|
52
|
+
preToolUse|PreToolUse) echo "tool.invoke" ;;
|
|
53
|
+
permissionRequest|PermissionRequest) echo "tool.permission_request" ;;
|
|
54
|
+
postToolUse|PostToolUse|PostToolUseFailure) echo "tool.result" ;;
|
|
55
|
+
*) echo "unknown" ;;
|
|
56
|
+
esac
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
runtime_version() {
|
|
60
|
+
local runtime_name runtime_binary runtime_version
|
|
61
|
+
runtime_name="$1"
|
|
62
|
+
case "$runtime_name" in
|
|
63
|
+
codex) runtime_binary="codex" ;;
|
|
64
|
+
claude|claude-code) runtime_binary="claude"; runtime_name="claude-code" ;;
|
|
65
|
+
kiro|kiro-cli) runtime_binary="kiro-cli"; runtime_name="kiro-cli" ;;
|
|
66
|
+
*) runtime_binary="$runtime_name" ;;
|
|
67
|
+
esac
|
|
68
|
+
runtime_version=$(
|
|
69
|
+
"$runtime_binary" --version 2>/dev/null &
|
|
70
|
+
_pid=$!; ( sleep 2; kill $_pid 2>/dev/null ) &
|
|
71
|
+
_guard=$!; wait $_pid 2>/dev/null; kill $_guard 2>/dev/null
|
|
72
|
+
wait $_pid 2>/dev/null
|
|
73
|
+
) 2>/dev/null
|
|
74
|
+
runtime_version=$(echo "$runtime_version" | head -n1)
|
|
75
|
+
echo "${runtime_version:-unknown}"
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
build_base_event() {
|
|
79
|
+
local session_id="$1" schema_event_type="$2" agent_name="$3"
|
|
80
|
+
local runtime_name="${FLOW_AGENTS_TELEMETRY_RUNTIME:-kiro-cli}"
|
|
81
|
+
case "$runtime_name" in
|
|
82
|
+
claude|claude-code) runtime_name="claude-code" ;;
|
|
83
|
+
kiro|kiro-cli) runtime_name="kiro-cli" ;;
|
|
84
|
+
esac
|
|
85
|
+
jq -nc \
|
|
86
|
+
--arg sv "0.3.0" \
|
|
87
|
+
--arg ts "$(date +%s)000" \
|
|
88
|
+
--arg sid "$session_id" \
|
|
89
|
+
--arg eid "$(uuidgen 2>/dev/null || echo "e-$(date +%s)-$$")" \
|
|
90
|
+
--arg et "$schema_event_type" \
|
|
91
|
+
--arg an "$agent_name" \
|
|
92
|
+
--arg rv "$(runtime_version "$runtime_name")" \
|
|
93
|
+
--arg rn "$runtime_name" \
|
|
94
|
+
'{
|
|
95
|
+
schema_version: $sv,
|
|
96
|
+
timestamp: $ts,
|
|
97
|
+
session_id: $sid,
|
|
98
|
+
event_id: $eid,
|
|
99
|
+
event_type: $et,
|
|
100
|
+
agent: {
|
|
101
|
+
name: $an,
|
|
102
|
+
runtime: $rn,
|
|
103
|
+
version: $rv
|
|
104
|
+
}
|
|
105
|
+
}'
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
add_hook_context() {
|
|
109
|
+
local event="$1" event_type="$2" stdin_json="$3"
|
|
110
|
+
local cwd tty_name pid runtime_session_id runtime_turn_id transcript_path hook_event_name model_name source stop_hook_active last_assistant_message raw_hook_input
|
|
111
|
+
cwd=$(echo "$stdin_json" | jq -r '.cwd // ""')
|
|
112
|
+
runtime_session_id=$(echo "$stdin_json" | jq -r '.session_id // ""')
|
|
113
|
+
runtime_turn_id=$(echo "$stdin_json" | jq -r '.turn_id // ""')
|
|
114
|
+
transcript_path=$(echo "$stdin_json" | jq -r '.transcript_path // ""')
|
|
115
|
+
hook_event_name=$(echo "$stdin_json" | jq -r '.hook_event_name // ""')
|
|
116
|
+
model_name=$(echo "$stdin_json" | jq -r '.model // ""')
|
|
117
|
+
source=$(echo "$stdin_json" | jq -r '.source // ""')
|
|
118
|
+
stop_hook_active=$(echo "$stdin_json" | jq -r '.stop_hook_active // empty')
|
|
119
|
+
last_assistant_message=$(echo "$stdin_json" | jq -r '.last_assistant_message // ""')
|
|
120
|
+
if [[ "$FLOW_AGENTS_TELEMETRY_CAPTURE_RAW_HOOK_INPUT" == "true" ]]; then
|
|
121
|
+
raw_hook_input="$stdin_json"
|
|
122
|
+
else
|
|
123
|
+
raw_hook_input="null"
|
|
124
|
+
fi
|
|
125
|
+
tty_name=$(session_get_tty)
|
|
126
|
+
pid=$(cat "${TELEMETRY_SESSION_DIR}/${session_id}.session" 2>/dev/null | jq -r '.pid // empty')
|
|
127
|
+
echo "$event" | jq -c \
|
|
128
|
+
--arg event_name "${hook_event_name:-$event_type}" \
|
|
129
|
+
--arg runtime_session_id "$runtime_session_id" \
|
|
130
|
+
--arg turn_id "$runtime_turn_id" \
|
|
131
|
+
--arg transcript_path "$transcript_path" \
|
|
132
|
+
--arg model "$model_name" \
|
|
133
|
+
--arg source "$source" \
|
|
134
|
+
--arg stop_hook_active "$stop_hook_active" \
|
|
135
|
+
--arg last_assistant_message "$last_assistant_message" \
|
|
136
|
+
--argjson raw "$raw_hook_input" \
|
|
137
|
+
'. + {
|
|
138
|
+
hook: {
|
|
139
|
+
event_name: $event_name,
|
|
140
|
+
runtime_session_id: $runtime_session_id,
|
|
141
|
+
turn_id: $turn_id,
|
|
142
|
+
transcript_path: $transcript_path,
|
|
143
|
+
model: $model,
|
|
144
|
+
source: $source,
|
|
145
|
+
stop_hook_active: (if $stop_hook_active == "" then null else ($stop_hook_active == "true") end),
|
|
146
|
+
last_assistant_message: $last_assistant_message,
|
|
147
|
+
raw_input: $raw
|
|
148
|
+
}
|
|
149
|
+
}'
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
add_runtime_context() {
|
|
153
|
+
local event="$1" event_type="$2" stdin_json="$3"
|
|
154
|
+
local cwd tty_name pid
|
|
155
|
+
cwd=$(echo "$stdin_json" | jq -r '.cwd // ""')
|
|
156
|
+
tty_name=$(session_get_tty)
|
|
157
|
+
pid=$(cat "${TELEMETRY_SESSION_DIR}/${session_id}.session" 2>/dev/null | jq -r '.pid // empty')
|
|
158
|
+
if [[ "$event_type" == "agentSpawn" ]]; then
|
|
159
|
+
local sys_json ws_json auth_json
|
|
160
|
+
sys_json=$(enrich_system)
|
|
161
|
+
ws_json=$(enrich_workspace)
|
|
162
|
+
auth_json=$(enrich_auth)
|
|
163
|
+
|
|
164
|
+
local os shell
|
|
165
|
+
os=$(echo "$sys_json" | jq -r '.os // "unknown"')
|
|
166
|
+
shell=$(echo "$sys_json" | jq -r '.shell // "unknown"')
|
|
167
|
+
|
|
168
|
+
echo "$event" | jq -c \
|
|
169
|
+
--arg cwd "$cwd" \
|
|
170
|
+
--arg tty "$tty_name" \
|
|
171
|
+
--arg os "$os" \
|
|
172
|
+
--arg shell "$shell" \
|
|
173
|
+
--argjson pid "${pid:-0}" \
|
|
174
|
+
--argjson sys "$sys_json" \
|
|
175
|
+
--argjson ws "$ws_json" \
|
|
176
|
+
--argjson auth "$auth_json" \
|
|
177
|
+
'. + {
|
|
178
|
+
context: {cwd: $cwd, tty: $tty, os: $os, shell: $shell, pid: $pid},
|
|
179
|
+
enrichment: {system: $sys, workspace: $ws, auth: $auth}
|
|
180
|
+
}'
|
|
181
|
+
else
|
|
182
|
+
echo "$event" | jq -c \
|
|
183
|
+
--arg cwd "$cwd" \
|
|
184
|
+
--arg tty "$tty_name" \
|
|
185
|
+
--argjson pid "${pid:-0}" \
|
|
186
|
+
'. + {context: {cwd: $cwd, tty: $tty, pid: $pid}}'
|
|
187
|
+
fi
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
add_user_prompt_data() {
|
|
191
|
+
local event="$1" stdin_json="$2"
|
|
192
|
+
local prompt_text prompt_length
|
|
193
|
+
prompt_text=$(echo "$stdin_json" | jq -r '.prompt // ""')
|
|
194
|
+
prompt_length=${#prompt_text}
|
|
195
|
+
echo "$event" | jq -c \
|
|
196
|
+
--arg pt "$prompt_text" \
|
|
197
|
+
--argjson pl "$prompt_length" \
|
|
198
|
+
'. + {turn: {prompt_text: $pt, prompt_length: $pl}}'
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
add_tool_event_data() {
|
|
202
|
+
local event="$1" event_type="$2" stdin_json="$3"
|
|
203
|
+
local tool_name tool_normalized_name tool_input tool_output permission_description
|
|
204
|
+
tool_name=$(echo "$stdin_json" | jq -r '.tool_name // ""')
|
|
205
|
+
tool_normalized_name=$(normalize_tool_name "$tool_name")
|
|
206
|
+
tool_input=$(echo "$stdin_json" | jq -c '.tool_input // null')
|
|
207
|
+
tool_output=$(echo "$stdin_json" | jq -c '.tool_response // null')
|
|
208
|
+
permission_description=$(echo "$stdin_json" | jq -r '.tool_input.description // ""')
|
|
209
|
+
|
|
210
|
+
if [[ "$event_type" == "preToolUse" ]]; then
|
|
211
|
+
event=$(echo "$event" | jq -c \
|
|
212
|
+
--arg tn "$tool_name" \
|
|
213
|
+
--arg nn "$tool_normalized_name" \
|
|
214
|
+
--argjson ti "$tool_input" \
|
|
215
|
+
'. + {tool: {name: $tn, normalized_name: $nn, input: $ti}}')
|
|
216
|
+
elif [[ "$event_type" == "permissionRequest" || "$event_type" == "PermissionRequest" ]]; then
|
|
217
|
+
event=$(echo "$event" | jq -c \
|
|
218
|
+
--arg tn "$tool_name" \
|
|
219
|
+
--arg nn "$tool_normalized_name" \
|
|
220
|
+
--argjson ti "$tool_input" \
|
|
221
|
+
--arg desc "$permission_description" \
|
|
222
|
+
'. + {tool: {name: $tn, normalized_name: $nn, input: $ti}, permission: {description: $desc}}')
|
|
223
|
+
else
|
|
224
|
+
event=$(echo "$event" | jq -c \
|
|
225
|
+
--arg tn "$tool_name" \
|
|
226
|
+
--arg nn "$tool_normalized_name" \
|
|
227
|
+
--argjson to "$tool_output" \
|
|
228
|
+
'. + {tool: {name: $tn, normalized_name: $nn, output: $to}}')
|
|
229
|
+
fi
|
|
230
|
+
|
|
231
|
+
echo "$event"
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
emit_delegation_event() {
|
|
235
|
+
local event="$1" event_type="$2" stdin_json="$3"
|
|
236
|
+
local tool_name tool_input
|
|
237
|
+
tool_name=$(echo "$stdin_json" | jq -r '.tool_name // ""')
|
|
238
|
+
tool_input=$(echo "$stdin_json" | jq -c '.tool_input // null')
|
|
239
|
+
|
|
240
|
+
if [[ "$tool_name" == "InvokeSubagents" && "$event_type" == "preToolUse" ]]; then
|
|
241
|
+
local targets
|
|
242
|
+
targets=$(echo "$tool_input" | jq -c '.targets // []')
|
|
243
|
+
if [[ "$targets" != "[]" ]]; then
|
|
244
|
+
local delegate_event
|
|
245
|
+
delegate_event=$(echo "$event" | jq -c \
|
|
246
|
+
--argjson targets "$targets" \
|
|
247
|
+
'.event_type = "agent.delegate" | . + {delegation: {targets: $targets}} | del(.tool)')
|
|
248
|
+
transport_emit "$delegate_event"
|
|
249
|
+
fi
|
|
250
|
+
elif [[ "$tool_name" == "spawn_agent" && "$event_type" == "preToolUse" ]]; then
|
|
251
|
+
local target
|
|
252
|
+
target=$(echo "$tool_input" | jq -r '.agent_type // "default"')
|
|
253
|
+
if [[ -n "$target" && "$target" != "null" ]]; then
|
|
254
|
+
local delegate_event
|
|
255
|
+
delegate_event=$(echo "$event" | jq -c \
|
|
256
|
+
--arg target "$target" \
|
|
257
|
+
'.event_type = "agent.delegate" | . + {delegation: {targets: [$target]}} | del(.tool)')
|
|
258
|
+
transport_emit "$delegate_event"
|
|
259
|
+
fi
|
|
260
|
+
elif [[ "$tool_name" == "use_subagent" || "$tool_name" == "subagent" || "$tool_name" == "delegate to a specialist agent" ]] && [[ "$event_type" == "preToolUse" ]]; then
|
|
261
|
+
local targets
|
|
262
|
+
targets=$(echo "$tool_input" | jq -c '
|
|
263
|
+
if (.targets? | type) == "array" then .targets
|
|
264
|
+
elif (.subagents? | type) == "array" then .subagents | map(.agent_name // .agent // .subagent_type // .name // "subagent")
|
|
265
|
+
elif (.content.subagents? | type) == "array" then .content.subagents | map(.agent_name // .agent // .subagent_type // .name // "subagent")
|
|
266
|
+
elif (.agent_name? // .agent? // .subagent_type? // empty) != "" then [(.agent_name // .agent // .subagent_type)]
|
|
267
|
+
else ["subagent"]
|
|
268
|
+
end
|
|
269
|
+
')
|
|
270
|
+
if [[ "$targets" != "[]" ]]; then
|
|
271
|
+
local delegate_event
|
|
272
|
+
delegate_event=$(echo "$event" | jq -c \
|
|
273
|
+
--argjson targets "$targets" \
|
|
274
|
+
'.event_type = "agent.delegate" | . + {delegation: {targets: $targets}} | del(.tool)')
|
|
275
|
+
transport_emit "$delegate_event"
|
|
276
|
+
fi
|
|
277
|
+
elif [[ "$tool_name" == "Task" || "$tool_name" == "Agent" ]] && [[ "$event_type" == "preToolUse" ]]; then
|
|
278
|
+
local target
|
|
279
|
+
target=$(echo "$tool_input" | jq -r '.subagent_type // .agent_type // .agent // "general-purpose"')
|
|
280
|
+
if [[ -n "$target" && "$target" != "null" ]]; then
|
|
281
|
+
local delegate_event
|
|
282
|
+
delegate_event=$(echo "$event" | jq -c \
|
|
283
|
+
--arg target "$target" \
|
|
284
|
+
'.event_type = "agent.delegate" | . + {delegation: {targets: [$target]}} | del(.tool)')
|
|
285
|
+
transport_emit "$delegate_event"
|
|
286
|
+
fi
|
|
287
|
+
fi
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
add_tool_data_and_emit_delegation() {
|
|
291
|
+
local event="$1" event_type="$2" stdin_json="$3"
|
|
292
|
+
event=$(add_tool_event_data "$event" "$event_type" "$stdin_json")
|
|
293
|
+
emit_delegation_event "$event" "$event_type" "$stdin_json"
|
|
294
|
+
echo "$event"
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
add_stop_data_and_emit_usage() {
|
|
298
|
+
local event="$1" agent_name="$2"
|
|
299
|
+
local duration_s
|
|
300
|
+
duration_s=$(cat "${TELEMETRY_SESSION_DIR}/${session_id}.session" 2>/dev/null | jq -r '.duration_s // 0')
|
|
301
|
+
event=$(echo "$event" | jq -c \
|
|
302
|
+
--argjson ds "$duration_s" \
|
|
303
|
+
'. + {session: {duration_s: $ds}}')
|
|
304
|
+
|
|
305
|
+
if [[ "$TELEMETRY_USAGE_TRACKING" == "true" ]]; then
|
|
306
|
+
local model tool_count delegation_count
|
|
307
|
+
model=$(usage_get_model "$agent_name")
|
|
308
|
+
local full_log="${TELEMETRY_CHANNEL_FULL_LOG_FILE}"
|
|
309
|
+
tool_count=$(usage_count_tool_calls "$session_id" "$full_log")
|
|
310
|
+
delegation_count=$(usage_count_delegations "$session_id" "$full_log")
|
|
311
|
+
|
|
312
|
+
local usage_event
|
|
313
|
+
usage_event=$(echo "$event" | jq -c \
|
|
314
|
+
--arg m "$model" \
|
|
315
|
+
--argjson tc "$tool_count" \
|
|
316
|
+
--argjson dc "$delegation_count" \
|
|
317
|
+
'.event_type = "session.usage" | .event_id = (.event_id + "-usage") | . + {
|
|
318
|
+
usage: {model: $m, duration_s: .session.duration_s, tool_invocations: $tc, delegations: $dc, input_tokens: null, output_tokens: null, estimated_cost_usd: null}
|
|
319
|
+
}')
|
|
320
|
+
transport_emit "$usage_event"
|
|
321
|
+
fi
|
|
322
|
+
|
|
323
|
+
echo "$event"
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
add_event_specific_data() {
|
|
327
|
+
local event="$1" event_type="$2" agent_name="$3" stdin_json="$4"
|
|
328
|
+
case "$event_type" in
|
|
329
|
+
userPromptSubmit|UserPromptSubmit)
|
|
330
|
+
add_user_prompt_data "$event" "$stdin_json"
|
|
331
|
+
;;
|
|
332
|
+
preToolUse|PreToolUse|permissionRequest|PermissionRequest|postToolUse|PostToolUse|PostToolUseFailure)
|
|
333
|
+
add_tool_data_and_emit_delegation "$event" "$event_type" "$stdin_json"
|
|
334
|
+
;;
|
|
335
|
+
stop|Stop|SessionEnd)
|
|
336
|
+
add_stop_data_and_emit_usage "$event" "$agent_name"
|
|
337
|
+
;;
|
|
338
|
+
*)
|
|
339
|
+
echo "$event"
|
|
340
|
+
;;
|
|
341
|
+
esac
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
main() {
|
|
345
|
+
[[ "$TELEMETRY_ENABLED" != "true" ]] && return 0
|
|
346
|
+
|
|
347
|
+
local event_type="${1:-unknown}" agent_name="${2:-unknown}"
|
|
348
|
+
local stdin_json="${3:-}"
|
|
349
|
+
[[ -z "$stdin_json" ]] && stdin_json='{}'
|
|
350
|
+
|
|
351
|
+
session_id=$(telemetry_session_id "$event_type" "$agent_name")
|
|
352
|
+
local event
|
|
353
|
+
event=$(build_base_event "$session_id" "$(schema_event_type "$event_type")" "$agent_name")
|
|
354
|
+
event=$(add_hook_context "$event" "$event_type" "$stdin_json")
|
|
355
|
+
event=$(add_runtime_context "$event" "$event_type" "$stdin_json")
|
|
356
|
+
event=$(add_event_specific_data "$event" "$event_type" "$agent_name" "$stdin_json")
|
|
357
|
+
|
|
358
|
+
transport_emit "$event"
|
|
359
|
+
|
|
360
|
+
[[ "$event_type" == "stop" ]] && transport_maybe_rotate
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
# Capture stdin before backgrounding (background subshell gets /dev/null)
|
|
364
|
+
_stdin=$(cat)
|
|
365
|
+
if [[ "${FLOW_AGENTS_TELEMETRY_FOREGROUND:-false}" == "true" ]]; then
|
|
366
|
+
main "$@" "$_stdin"
|
|
367
|
+
else
|
|
368
|
+
(main "$@" "$_stdin") </dev/null &>/dev/null &
|
|
369
|
+
disown 2>/dev/null
|
|
370
|
+
fi
|
|
371
|
+
|
|
372
|
+
if [[ "${FLOW_AGENTS_TELEMETRY_RUNTIME:-kiro-cli}" == "codex" ]]; then
|
|
373
|
+
_hook_event_name=$(printf '%s' "$_stdin" | jq -r '.hook_event_name // ""' 2>/dev/null)
|
|
374
|
+
case "$_hook_event_name" in
|
|
375
|
+
SessionStart)
|
|
376
|
+
printf '{"continue":true,"hookSpecificOutput":{"hookEventName":"SessionStart","additionalContext":"Flow Agents telemetry hooks are active for this session."}}\n'
|
|
377
|
+
;;
|
|
378
|
+
UserPromptSubmit)
|
|
379
|
+
printf '{"continue":true,"hookSpecificOutput":{"hookEventName":"UserPromptSubmit","additionalContext":"Flow Agents telemetry captured this prompt."}}\n'
|
|
380
|
+
;;
|
|
381
|
+
Stop)
|
|
382
|
+
printf '{"continue":true}\n'
|
|
383
|
+
;;
|
|
384
|
+
esac
|
|
385
|
+
fi
|
|
386
|
+
|
|
387
|
+
exit 0
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# validate-package.sh — Validate an installed Flow Agents bundle
|
|
3
|
+
# Usage: bash validate-package.sh <package-prefix> [--local]
|
|
4
|
+
set -uo pipefail
|
|
5
|
+
|
|
6
|
+
PREFIX="${1:?Usage: validate-package.sh <package-prefix> [--local]}"
|
|
7
|
+
[[ "${2:-}" == "--local" ]] && PREFIX="local-${PREFIX}"
|
|
8
|
+
|
|
9
|
+
AGENTS_DIR="$HOME/.kiro/agents"
|
|
10
|
+
errors=0
|
|
11
|
+
|
|
12
|
+
echo "Package: ${PREFIX}"
|
|
13
|
+
echo ""
|
|
14
|
+
|
|
15
|
+
# Find agents
|
|
16
|
+
count=$(ls "$AGENTS_DIR/${PREFIX}-"*.json 2>/dev/null | wc -l | tr -d ' ')
|
|
17
|
+
echo "Agents: ${count} found"
|
|
18
|
+
[[ "$count" -eq 0 ]] && echo "✗ No agents found" && exit 1
|
|
19
|
+
echo ""
|
|
20
|
+
|
|
21
|
+
# 1. Well-formedness
|
|
22
|
+
spec_ok=0; spec_fail=0
|
|
23
|
+
for f in "$AGENTS_DIR/${PREFIX}-"*.json; do
|
|
24
|
+
name=$(jq -r '.name // empty' "$f")
|
|
25
|
+
has_all=$(jq -r 'if .name and .prompt and .model and .description then "yes" else "no" end' "$f")
|
|
26
|
+
if [[ "$has_all" != "yes" ]]; then
|
|
27
|
+
echo " ✗ $(basename $f): missing required field(s)"
|
|
28
|
+
spec_fail=$((spec_fail + 1))
|
|
29
|
+
elif ! echo "$name" | grep -qE '^[a-z][a-z0-9-]*$'; then
|
|
30
|
+
echo " ✗ $name: invalid name format"
|
|
31
|
+
spec_fail=$((spec_fail + 1))
|
|
32
|
+
else
|
|
33
|
+
spec_ok=$((spec_ok + 1))
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
echo "$([ $spec_fail -eq 0 ] && echo ✓ || echo ✗) Agent specs: ${spec_ok}/${count} well-formed"
|
|
37
|
+
errors=$((errors + spec_fail))
|
|
38
|
+
|
|
39
|
+
# 2. Hook scripts
|
|
40
|
+
hook_total=0; hook_fail=0
|
|
41
|
+
for f in "$AGENTS_DIR/${PREFIX}-"*.json; do
|
|
42
|
+
name=$(jq -r '.name' "$f")
|
|
43
|
+
for cmd in $(jq -r '.hooks // {} | .[] | .[] | .command // empty' "$f" 2>/dev/null); do
|
|
44
|
+
: # jq gives full command, need line-by-line
|
|
45
|
+
done
|
|
46
|
+
jq -r '.hooks // {} | to_entries[] | .key as $t | .value[] | "\($t)|\(.command // empty)"' "$f" 2>/dev/null | while IFS='|' read -r htype cmd; do
|
|
47
|
+
[[ -z "$cmd" ]] && continue
|
|
48
|
+
script=$(echo "$cmd" | sed 's/^bash //' | awk '{print $1}')
|
|
49
|
+
script="${script/#\~/$HOME}"
|
|
50
|
+
if [[ ! -f "$script" ]]; then
|
|
51
|
+
echo " ✗ $name → $htype: $(basename $script) (not found)"
|
|
52
|
+
fi
|
|
53
|
+
done
|
|
54
|
+
done
|
|
55
|
+
hook_total=$(for f in "$AGENTS_DIR/${PREFIX}-"*.json; do jq '[.hooks // {} | .[] | .[]] | length' "$f" 2>/dev/null; done | awk '{s+=$1}END{print s}')
|
|
56
|
+
hook_fail=$(for f in "$AGENTS_DIR/${PREFIX}-"*.json; do
|
|
57
|
+
jq -r '.hooks // {} | .[] | .[] | .command // empty' "$f" 2>/dev/null | while read cmd; do
|
|
58
|
+
[[ -z "$cmd" ]] && continue
|
|
59
|
+
script=$(echo "$cmd" | sed 's/^bash //' | awk '{print $1}')
|
|
60
|
+
script="${script/#\~/$HOME}"
|
|
61
|
+
[[ ! -f "$script" ]] && echo "x"
|
|
62
|
+
done
|
|
63
|
+
done | wc -l | tr -d ' ')
|
|
64
|
+
hook_ok=$((hook_total - hook_fail))
|
|
65
|
+
echo "$([ $hook_fail -eq 0 ] && echo ✓ || echo ✗) Hook scripts: ${hook_ok}/${hook_total} resolved"
|
|
66
|
+
errors=$((errors + hook_fail))
|
|
67
|
+
|
|
68
|
+
# 3. Absolute resource paths
|
|
69
|
+
res_fail=0
|
|
70
|
+
for f in "$AGENTS_DIR/${PREFIX}-"*.json; do
|
|
71
|
+
name=$(jq -r '.name' "$f")
|
|
72
|
+
jq -r '.resources // [] | .[] | select(startswith("file://"))' "$f" 2>/dev/null | while read res; do
|
|
73
|
+
path="${res#file://}"
|
|
74
|
+
path="${path/#\~/$HOME}"
|
|
75
|
+
[[ "$path" == *"*"* || "$path" != /* ]] && continue
|
|
76
|
+
if [[ ! -f "$path" && ! -d "$path" ]]; then
|
|
77
|
+
echo " ✗ $name: missing $path"
|
|
78
|
+
fi
|
|
79
|
+
done
|
|
80
|
+
done
|
|
81
|
+
echo "✓ Resources: checked"
|
|
82
|
+
|
|
83
|
+
# 4. Summary
|
|
84
|
+
echo ""
|
|
85
|
+
if [[ $errors -eq 0 ]]; then
|
|
86
|
+
echo "Result: PASS"
|
|
87
|
+
else
|
|
88
|
+
echo "Result: FAIL ($errors error(s))"
|
|
89
|
+
fi
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import("node:child_process").then(({ spawnSync }) => {
|
|
3
|
+
const result = spawnSync("npm", ["run", "validate:source", "--silent", "--", ...process.argv.slice(2)], {
|
|
4
|
+
cwd: new URL("..", import.meta.url),
|
|
5
|
+
encoding: "utf8",
|
|
6
|
+
stdio: "inherit",
|
|
7
|
+
});
|
|
8
|
+
process.exit(result.status ?? 1);
|
|
9
|
+
});
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentic-engineering
|
|
3
|
+
description: "Eval-first execution, task decomposition, and cost-aware model routing for AI-driven development workflows."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agentic Engineering
|
|
7
|
+
|
|
8
|
+
Principles for AI-driven development: eval-first loops, disciplined decomposition, and cost-aware model selection.
|
|
9
|
+
|
|
10
|
+
## Eval-First Loop
|
|
11
|
+
|
|
12
|
+
Every implementation follows this cycle:
|
|
13
|
+
|
|
14
|
+
1. **Define eval** — write the acceptance criteria as a runnable check (test, script, assertion)
|
|
15
|
+
2. **Run baseline** — capture current behavior against the eval
|
|
16
|
+
3. **Implement** — make the change
|
|
17
|
+
4. **Re-run eval** — verify improvement
|
|
18
|
+
5. **Check regressions** — run the full suite, not just the new eval
|
|
19
|
+
|
|
20
|
+
Never ship without steps 4-5. If you can't define an eval, the requirement isn't clear enough.
|
|
21
|
+
|
|
22
|
+
## 15-Minute Unit Rule
|
|
23
|
+
|
|
24
|
+
Decompose every task into units where each:
|
|
25
|
+
- Is **independently verifiable** — has its own eval or test
|
|
26
|
+
- Has a **single dominant risk** — one thing that could go wrong
|
|
27
|
+
- Has a **clear done condition** — unambiguous pass/fail
|
|
28
|
+
- Takes **~15 minutes** of focused agent work
|
|
29
|
+
|
|
30
|
+
If a unit can't be verified independently, it's too coupled. If it has multiple risks, split it.
|
|
31
|
+
|
|
32
|
+
## Model Routing
|
|
33
|
+
|
|
34
|
+
Match model tier to task complexity:
|
|
35
|
+
|
|
36
|
+
| Tier | Model class | Use for |
|
|
37
|
+
|------|-------------|---------|
|
|
38
|
+
| Fast | Haiku | Boilerplate, narrow edits, formatting, simple transforms |
|
|
39
|
+
| Standard | Sonnet | Implementation, refactors, test writing, code review |
|
|
40
|
+
| Reasoning | Opus | Architecture decisions, root-cause analysis, complex debugging |
|
|
41
|
+
|
|
42
|
+
### Cost Discipline
|
|
43
|
+
- Start at the lowest tier that could work
|
|
44
|
+
- Escalate only when the lower tier fails with a **clear reasoning gap** (not just a wrong answer — a structural inability to solve the problem)
|
|
45
|
+
- Document the escalation reason: "Sonnet couldn't hold the full dependency graph → escalated to Opus"
|
|
46
|
+
- Never use Opus for tasks Sonnet handles correctly
|
|
47
|
+
|
|
48
|
+
## Session Strategy
|
|
49
|
+
|
|
50
|
+
- **Continue** session for coupled units within the same phase
|
|
51
|
+
- **Fresh** session after phase transitions (plan → implement, implement → verify)
|
|
52
|
+
- **Compact** after milestones — summarize context, drop intermediate artifacts
|
|
53
|
+
|
|
54
|
+
## Review Focus for AI-Generated Code
|
|
55
|
+
|
|
56
|
+
AI code passes syntax checks easily but fails on subtler dimensions. Prioritize reviewing:
|
|
57
|
+
|
|
58
|
+
- **Invariants** — are assumptions about state actually enforced?
|
|
59
|
+
- **Edge cases** — empty inputs, boundary values, concurrent access
|
|
60
|
+
- **Error boundaries** — does the error surface or get swallowed?
|
|
61
|
+
- **Security assumptions** — auth checks, input sanitization, secret handling
|
|
62
|
+
- **Hidden coupling** — does this change break something non-obvious elsewhere?
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "browser-test"
|
|
3
|
+
description: "Headless browser automation via Playwright — screenshots, accessibility checks, form filling, UI testing, DOM inspection."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Browser Testing
|
|
7
|
+
|
|
8
|
+
Delegate browser automation and testing tasks to `tool-playwright` for real browser interaction — page loading, accessibility snapshots, form filling, screenshots, and user flow testing.
|
|
9
|
+
|
|
10
|
+
## Trigger Patterns
|
|
11
|
+
|
|
12
|
+
This skill activates when the user:
|
|
13
|
+
|
|
14
|
+
- Wants to load a URL and inspect the page
|
|
15
|
+
- Wants to test a user flow (click, type, navigate)
|
|
16
|
+
- Wants to check accessibility (ARIA roles, tab order, snapshots)
|
|
17
|
+
- Wants a screenshot for visual verification
|
|
18
|
+
- Wants to fill forms or interact with UI elements
|
|
19
|
+
- Mentions Playwright, browser testing, or DOM inspection
|
|
20
|
+
- Needs to debug frontend behavior in a live browser
|
|
21
|
+
|
|
22
|
+
## Workflow
|
|
23
|
+
|
|
24
|
+
### Step 1: CLARIFY TARGET
|
|
25
|
+
Identify what the user wants tested — a URL, a local dev server, a specific flow. If a local server is needed and not running, tell the user to start it first and provide the URL.
|
|
26
|
+
|
|
27
|
+
### Step 2: DELEGATE
|
|
28
|
+
Hand off to `tool-playwright` with a clear prompt describing:
|
|
29
|
+
- The URL to load
|
|
30
|
+
- What to inspect or test (accessibility, visual, flow)
|
|
31
|
+
- Any specific interactions (click X, fill Y, navigate to Z)
|
|
32
|
+
|
|
33
|
+
### Step 3: REPORT
|
|
34
|
+
Relay `tool-playwright`'s findings back to the user. Highlight:
|
|
35
|
+
- Accessibility issues found via snapshots
|
|
36
|
+
- Visual anomalies from screenshots
|
|
37
|
+
- Flow failures or unexpected behavior
|
|
38
|
+
- Suggested fixes if applicable
|
|
39
|
+
|
|
40
|
+
## NOT For
|
|
41
|
+
|
|
42
|
+
- General web search or fetching page content for research — use web search tools instead
|
|
43
|
+
- Scraping data from websites
|
|
44
|
+
- API testing — use curl or httpie directly
|
|
45
|
+
|
|
46
|
+
## Key Principles
|
|
47
|
+
|
|
48
|
+
- ALWAYS delegate to `tool-playwright` — do not attempt browser interaction directly
|
|
49
|
+
- Prefer accessibility snapshots (`browser_snapshot`) over screenshots for understanding page structure
|
|
50
|
+
- If the user provides a localhost URL, confirm the dev server is running before delegating
|
|
51
|
+
- Close the browser when done
|