@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,63 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# session.sh — Session lifecycle management
|
|
3
|
+
|
|
4
|
+
session_start() {
|
|
5
|
+
local agent_name="$1"
|
|
6
|
+
local session_id start_time pid tty
|
|
7
|
+
|
|
8
|
+
session_id=$(uuidgen 2>/dev/null || echo "s-$(date +%s)-$$")
|
|
9
|
+
start_time=$(date +%s)
|
|
10
|
+
pid="${PPID:-$$}"
|
|
11
|
+
tty=$(ps -o tty= -p "$pid" 2>/dev/null | tr -d ' ' || echo "unknown")
|
|
12
|
+
|
|
13
|
+
local session_file="${TELEMETRY_SESSION_DIR}/${session_id}.session"
|
|
14
|
+
jq -nc \
|
|
15
|
+
--arg sid "$session_id" \
|
|
16
|
+
--arg an "$agent_name" \
|
|
17
|
+
--argjson st "$start_time" \
|
|
18
|
+
--argjson pid "$pid" \
|
|
19
|
+
--arg tty "$tty" \
|
|
20
|
+
'{
|
|
21
|
+
session_id: $sid,
|
|
22
|
+
agent_name: $an,
|
|
23
|
+
start_time: $st,
|
|
24
|
+
pid: $pid,
|
|
25
|
+
tty: $tty
|
|
26
|
+
}' > "$session_file"
|
|
27
|
+
|
|
28
|
+
echo "$session_id"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
session_get() {
|
|
32
|
+
local latest_session
|
|
33
|
+
latest_session=$(ls -t "${TELEMETRY_SESSION_DIR}"/*.session 2>/dev/null | head -n1)
|
|
34
|
+
[[ -f "$latest_session" ]] && jq -r '.session_id' "$latest_session" 2>/dev/null
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
session_get_tty() {
|
|
38
|
+
local latest_session
|
|
39
|
+
latest_session=$(ls -t "${TELEMETRY_SESSION_DIR}"/*.session 2>/dev/null | head -n1)
|
|
40
|
+
[[ -f "$latest_session" ]] && jq -r '.tty // "unknown"' "$latest_session" 2>/dev/null
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
session_end() {
|
|
44
|
+
local session_id
|
|
45
|
+
session_id=$(session_get)
|
|
46
|
+
[[ -z "$session_id" ]] && return
|
|
47
|
+
|
|
48
|
+
local session_file="${TELEMETRY_SESSION_DIR}/${session_id}.session"
|
|
49
|
+
[[ ! -f "$session_file" ]] && return
|
|
50
|
+
|
|
51
|
+
local start_time end_time duration_s
|
|
52
|
+
start_time=$(jq -r '.start_time' "$session_file" 2>/dev/null)
|
|
53
|
+
end_time=$(date +%s)
|
|
54
|
+
duration_s=$((end_time - start_time))
|
|
55
|
+
|
|
56
|
+
jq --argjson et "$end_time" --argjson ds "$duration_s" \
|
|
57
|
+
'. + {end_time: $et, duration_s: $ds}' \
|
|
58
|
+
"$session_file" > "${session_file}.tmp" && mv "${session_file}.tmp" "$session_file"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
session_cleanup() {
|
|
62
|
+
find "${TELEMETRY_SESSION_DIR}" -name "*.session" -mtime +1 -delete 2>/dev/null || true
|
|
63
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# transport.sh — Dual-channel telemetry transport
|
|
3
|
+
|
|
4
|
+
source "${TELEMETRY_DIR}/lib/redact.sh"
|
|
5
|
+
|
|
6
|
+
console_telemetry_endpoint_url() {
|
|
7
|
+
if [[ -n "${CONSOLE_TELEMETRY_ENDPOINT_URL:-}" ]]; then
|
|
8
|
+
echo "$CONSOLE_TELEMETRY_ENDPOINT_URL"
|
|
9
|
+
return
|
|
10
|
+
fi
|
|
11
|
+
[[ -z "${CONSOLE_TELEMETRY_URL:-}" ]] && return
|
|
12
|
+
local base="${CONSOLE_TELEMETRY_URL%/}"
|
|
13
|
+
case "$base" in
|
|
14
|
+
*/api/telemetry/records) echo "$base" ;;
|
|
15
|
+
*/api/telemetry) echo "${base}/records" ;;
|
|
16
|
+
*) echo "${base}/api/telemetry/records" ;;
|
|
17
|
+
esac
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
console_telemetry_endpoint_allowed() {
|
|
21
|
+
local endpoint_url="$1"
|
|
22
|
+
[[ -z "$endpoint_url" || "$endpoint_url" == *$'\n'* || "$endpoint_url" == *$'\r'* || "$endpoint_url" == *'"'* ]] && return 1
|
|
23
|
+
case "$endpoint_url" in
|
|
24
|
+
https://*) return 0 ;;
|
|
25
|
+
http://127.0.0.1|http://127.0.0.1/*|http://127.0.0.1:*|http://localhost|http://localhost/*|http://localhost:*) return 0 ;;
|
|
26
|
+
*) return 1 ;;
|
|
27
|
+
esac
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
console_telemetry_safe_token() {
|
|
31
|
+
local value="$1"
|
|
32
|
+
[[ ${#value} -ge 1 && ${#value} -le 4096 && "$value" =~ ^[A-Za-z0-9._~+/=-]+$ ]]
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console_telemetry_safe_tenant() {
|
|
36
|
+
local value="$1"
|
|
37
|
+
[[ ${#value} -ge 1 && ${#value} -le 128 && "$value" =~ ^[A-Za-z0-9._:-]+$ ]]
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
console_telemetry_timeout_seconds() {
|
|
41
|
+
local value="$1" fallback="$2" max="$3"
|
|
42
|
+
if [[ "$value" =~ ^[0-9]+$ ]] && [[ "$value" -ge 1 && "$value" -le "$max" ]]; then
|
|
43
|
+
echo "$value"
|
|
44
|
+
else
|
|
45
|
+
echo "$fallback"
|
|
46
|
+
fi
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
console_telemetry_emit() {
|
|
50
|
+
local event="$1"
|
|
51
|
+
local endpoint_url
|
|
52
|
+
endpoint_url=$(console_telemetry_endpoint_url)
|
|
53
|
+
[[ -z "$endpoint_url" ]] && return
|
|
54
|
+
console_telemetry_endpoint_allowed "$endpoint_url" || return
|
|
55
|
+
|
|
56
|
+
local processed_event
|
|
57
|
+
processed_event=$(redact_event "$event" "${CONSOLE_TELEMETRY_REDACT:-${TELEMETRY_CHANNEL_ANALYTICS_REDACT:-}}")
|
|
58
|
+
|
|
59
|
+
local curl_config curl_body connect_timeout max_time
|
|
60
|
+
connect_timeout=$(console_telemetry_timeout_seconds "${CONSOLE_TELEMETRY_CONNECT_TIMEOUT_SECONDS:-2}" 2 30)
|
|
61
|
+
max_time=$(console_telemetry_timeout_seconds "${CONSOLE_TELEMETRY_MAX_TIME_SECONDS:-5}" 5 60)
|
|
62
|
+
curl_config=$(mktemp "${TELEMETRY_SESSION_DIR}/console-curl.XXXXXX") || return
|
|
63
|
+
curl_body=$(mktemp "${TELEMETRY_SESSION_DIR}/console-body.XXXXXX") || {
|
|
64
|
+
rm -f "$curl_config"
|
|
65
|
+
return
|
|
66
|
+
}
|
|
67
|
+
chmod 600 "$curl_config" "$curl_body" 2>/dev/null
|
|
68
|
+
printf '%s' "$processed_event" > "$curl_body" || {
|
|
69
|
+
rm -f "$curl_config" "$curl_body"
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
{
|
|
74
|
+
printf 'url = "%s"\n' "$endpoint_url"
|
|
75
|
+
printf 'request = "POST"\n'
|
|
76
|
+
printf 'connect-timeout = "%s"\n' "$connect_timeout"
|
|
77
|
+
printf 'max-time = "%s"\n' "$max_time"
|
|
78
|
+
printf 'header = "Content-Type: application/json"\n'
|
|
79
|
+
if [[ -n "${CONSOLE_TELEMETRY_TOKEN:-}" ]] && console_telemetry_safe_token "$CONSOLE_TELEMETRY_TOKEN"; then
|
|
80
|
+
printf 'header = "Authorization: Bearer %s"\n' "$CONSOLE_TELEMETRY_TOKEN"
|
|
81
|
+
fi
|
|
82
|
+
if [[ -n "${CONSOLE_TENANT_ID:-}" ]] && console_telemetry_safe_tenant "$CONSOLE_TENANT_ID"; then
|
|
83
|
+
printf 'header = "x-console-tenant-id: %s"\n' "$CONSOLE_TENANT_ID"
|
|
84
|
+
fi
|
|
85
|
+
printf 'data-binary = "@%s"\n' "$curl_body"
|
|
86
|
+
} > "$curl_config" || {
|
|
87
|
+
rm -f "$curl_config" "$curl_body"
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
(
|
|
92
|
+
curl -s --proto =https,http --proto-redir =https,http --config "$curl_config" >/dev/null 2>&1
|
|
93
|
+
rm -f "$curl_config" "$curl_body"
|
|
94
|
+
) &
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
transport_emit() {
|
|
98
|
+
local event="$1"
|
|
99
|
+
[[ -z "$event" ]] && return
|
|
100
|
+
|
|
101
|
+
# Process each channel
|
|
102
|
+
IFS=',' read -ra channels <<< "$TELEMETRY_CHANNELS"
|
|
103
|
+
for channel in "${channels[@]}"; do
|
|
104
|
+
channel=$(echo "$channel" | tr -d ' ')
|
|
105
|
+
[[ -z "$channel" ]] && continue
|
|
106
|
+
|
|
107
|
+
# Get channel config
|
|
108
|
+
channel_upper=$(echo "$channel" | tr '[:lower:]' '[:upper:]')
|
|
109
|
+
log_file_var="TELEMETRY_CHANNEL_${channel_upper}_LOG_FILE"
|
|
110
|
+
redact_var="TELEMETRY_CHANNEL_${channel_upper}_REDACT"
|
|
111
|
+
endpoint_var="TELEMETRY_CHANNEL_${channel_upper}_ENDPOINT_URL"
|
|
112
|
+
|
|
113
|
+
local log_file="${!log_file_var}"
|
|
114
|
+
local redact_fields="${!redact_var}"
|
|
115
|
+
local endpoint_url="${!endpoint_var}"
|
|
116
|
+
|
|
117
|
+
[[ -z "$log_file" ]] && continue
|
|
118
|
+
|
|
119
|
+
# Apply redaction
|
|
120
|
+
local processed_event
|
|
121
|
+
processed_event=$(redact_event "$event" "$redact_fields")
|
|
122
|
+
|
|
123
|
+
# Write to log file
|
|
124
|
+
echo "$processed_event" >> "$log_file" 2>/dev/null
|
|
125
|
+
|
|
126
|
+
# POST to endpoint if configured
|
|
127
|
+
if [[ -n "$endpoint_url" ]]; then
|
|
128
|
+
curl -s --connect-timeout 2 --max-time 5 -X POST \
|
|
129
|
+
-H "Content-Type: application/json" \
|
|
130
|
+
-d "$processed_event" \
|
|
131
|
+
"$endpoint_url" >/dev/null 2>&1 &
|
|
132
|
+
fi
|
|
133
|
+
done
|
|
134
|
+
|
|
135
|
+
console_telemetry_emit "$event"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
transport_maybe_rotate() {
|
|
139
|
+
# Only rotate if no active sessions
|
|
140
|
+
local active_sessions
|
|
141
|
+
active_sessions=$(ls "${TELEMETRY_SESSION_DIR}"/*.session 2>/dev/null | wc -l | tr -d ' ')
|
|
142
|
+
[[ "$active_sessions" -gt 0 ]] && return
|
|
143
|
+
|
|
144
|
+
IFS=',' read -ra channels <<< "$TELEMETRY_CHANNELS"
|
|
145
|
+
for channel in "${channels[@]}"; do
|
|
146
|
+
channel=$(echo "$channel" | tr -d ' ')
|
|
147
|
+
[[ -z "$channel" ]] && continue
|
|
148
|
+
|
|
149
|
+
channel_upper=$(echo "$channel" | tr '[:lower:]' '[:upper:]')
|
|
150
|
+
log_file_var="TELEMETRY_CHANNEL_${channel_upper}_LOG_FILE"
|
|
151
|
+
local log_file="${!log_file_var}"
|
|
152
|
+
[[ ! -f "$log_file" ]] && continue
|
|
153
|
+
|
|
154
|
+
# Check file size - try GNU stat first, then BSD
|
|
155
|
+
local file_size_bytes=0
|
|
156
|
+
if stat -c %s "$log_file" >/dev/null 2>&1; then
|
|
157
|
+
file_size_bytes=$(stat -c %s "$log_file")
|
|
158
|
+
else
|
|
159
|
+
file_size_bytes=$(stat -f %z "$log_file" 2>/dev/null || echo "0")
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
local file_size_mb=$((file_size_bytes / 1024 / 1024))
|
|
163
|
+
[[ "$file_size_mb" -lt "$TELEMETRY_MAX_LOG_SIZE_MB" ]] && continue
|
|
164
|
+
|
|
165
|
+
# Rotate logs
|
|
166
|
+
local base_name="${log_file%.*}"
|
|
167
|
+
local extension="${log_file##*.}"
|
|
168
|
+
|
|
169
|
+
# Remove oldest log if at limit
|
|
170
|
+
local oldest_log="${base_name}.$((TELEMETRY_MAX_LOG_FILES - 1)).${extension}"
|
|
171
|
+
[[ -f "$oldest_log" ]] && rm -f "$oldest_log"
|
|
172
|
+
|
|
173
|
+
# Shift existing logs
|
|
174
|
+
for ((i = TELEMETRY_MAX_LOG_FILES - 2; i >= 1; i--)); do
|
|
175
|
+
local current_log="${base_name}.${i}.${extension}"
|
|
176
|
+
local next_log="${base_name}.$((i + 1)).${extension}"
|
|
177
|
+
[[ -f "$current_log" ]] && mv "$current_log" "$next_log"
|
|
178
|
+
done
|
|
179
|
+
|
|
180
|
+
# Move current log to .1
|
|
181
|
+
mv "$log_file" "${base_name}.1.${extension}"
|
|
182
|
+
done
|
|
183
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# usage.sh — Session usage metric functions
|
|
3
|
+
|
|
4
|
+
# Resolve model from agent-spec.json
|
|
5
|
+
usage_get_model() {
|
|
6
|
+
local agent_name="$1"
|
|
7
|
+
local agents_dir="${HOME}/.kiro/agents"
|
|
8
|
+
# Try exact match first, then glob for package-prefixed names
|
|
9
|
+
local spec_file="${agents_dir}/${agent_name}.json"
|
|
10
|
+
if [[ ! -f "$spec_file" ]]; then
|
|
11
|
+
spec_file=$(ls "${agents_dir}"/*-"${agent_name}.json" 2>/dev/null | head -n1)
|
|
12
|
+
fi
|
|
13
|
+
[[ -n "$spec_file" && -f "$spec_file" ]] && jq -r '.model // "unknown"' "$spec_file" 2>/dev/null && return
|
|
14
|
+
echo "unknown"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# Count tool invocations for a session
|
|
18
|
+
usage_count_tool_calls() {
|
|
19
|
+
local session_id="$1" jsonl_path="$2"
|
|
20
|
+
[[ ! -f "$jsonl_path" ]] && echo 0 && return
|
|
21
|
+
grep -c "\"session_id\":\"${session_id}\".*\"event_type\":\"tool.invoke\"" "$jsonl_path" 2>/dev/null || echo 0
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
# Count subagent delegations for a session
|
|
25
|
+
usage_count_delegations() {
|
|
26
|
+
local session_id="$1" jsonl_path="$2"
|
|
27
|
+
[[ ! -f "$jsonl_path" ]] && echo 0 && return
|
|
28
|
+
grep -c "\"session_id\":\"${session_id}\".*\"event_type\":\"agent.delegate\"" "$jsonl_path" 2>/dev/null || echo 0
|
|
29
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# sync-agents.sh — Inject telemetry hooks into matching agent configs
|
|
3
|
+
# Usage: bash sync-agents.sh [--dry-run] [--restore]
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
TELEMETRY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
source "${TELEMETRY_DIR}/lib/config.sh"
|
|
8
|
+
|
|
9
|
+
MODE="apply"
|
|
10
|
+
[[ "${1:-}" == "--dry-run" ]] && MODE="dry-run"
|
|
11
|
+
[[ "${1:-}" == "--restore" ]] && MODE="restore"
|
|
12
|
+
|
|
13
|
+
AGENTS_DIR="${HOME}/.kiro/agents"
|
|
14
|
+
MARKER="telemetry.sh"
|
|
15
|
+
NOTIFY_MARKER="desktop-notify.sh"
|
|
16
|
+
GOVERNANCE_MARKER="governance-audit.sh"
|
|
17
|
+
HOOKS_DIR="$(cd "${TELEMETRY_DIR}/../hooks" && pwd)"
|
|
18
|
+
|
|
19
|
+
# Check if agent name matches any pattern in a comma-separated list
|
|
20
|
+
_matches_any() {
|
|
21
|
+
local name="$1" patterns="$2"
|
|
22
|
+
local old_ifs="$IFS" pat
|
|
23
|
+
IFS=','
|
|
24
|
+
set -f
|
|
25
|
+
for pat in $patterns; do
|
|
26
|
+
pat="${pat## }"; pat="${pat%% }"
|
|
27
|
+
case "$name" in $pat) IFS="$old_ifs"; set +f; return 0 ;; esac
|
|
28
|
+
done
|
|
29
|
+
IFS="$old_ifs"
|
|
30
|
+
set +f
|
|
31
|
+
return 1
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# Build the telemetry hook entry for a given hook type and agent
|
|
35
|
+
_hook_entry() {
|
|
36
|
+
local hook_type="$1" agent_name="$2"
|
|
37
|
+
local cmd="bash ${TELEMETRY_DIR}/telemetry.sh ${hook_type} ${agent_name}"
|
|
38
|
+
case "$hook_type" in
|
|
39
|
+
preToolUse|postToolUse)
|
|
40
|
+
jq -nc --arg c "$cmd" '{matcher:"*",command:$c,timeout_ms:10000}'
|
|
41
|
+
;;
|
|
42
|
+
*)
|
|
43
|
+
jq -nc --arg c "$cmd" '{command:$c,timeout_ms:10000}'
|
|
44
|
+
;;
|
|
45
|
+
esac
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# Build desktop notification hook entry (stop only)
|
|
49
|
+
_notify_hook_entry() {
|
|
50
|
+
local agent_name="$1"
|
|
51
|
+
local cmd="bash ${HOOKS_DIR}/desktop-notify.sh stop ${agent_name}"
|
|
52
|
+
jq -nc --arg c "$cmd" '{command:$c,timeout_ms:5000}'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Build governance hook entry (preToolUse/postToolUse only)
|
|
56
|
+
_governance_hook_entry() {
|
|
57
|
+
local hook_type="$1" agent_name="$2"
|
|
58
|
+
local cmd="bash ${HOOKS_DIR}/governance-audit.sh ${hook_type} ${agent_name}"
|
|
59
|
+
jq -nc --arg c "$cmd" '{matcher:"*",command:$c,timeout_ms:5000}'
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# Merge all hooks into an agent's existing hooks
|
|
63
|
+
_merge_hooks() {
|
|
64
|
+
local agent_file="$1" agent_name="$2"
|
|
65
|
+
local hook_types=("agentSpawn" "userPromptSubmit" "preToolUse" "postToolUse" "stop")
|
|
66
|
+
|
|
67
|
+
# Build the telemetry hooks object
|
|
68
|
+
local all_hooks='{}'
|
|
69
|
+
for ht in "${hook_types[@]}"; do
|
|
70
|
+
local entry
|
|
71
|
+
entry=$(_hook_entry "$ht" "$agent_name")
|
|
72
|
+
all_hooks=$(echo "$all_hooks" | jq --arg ht "$ht" --argjson e "$entry" '.[$ht] = (.[$ht] // []) + [$e]')
|
|
73
|
+
done
|
|
74
|
+
|
|
75
|
+
# Add desktop notification hook to stop
|
|
76
|
+
if [[ "$TELEMETRY_NOTIFICATIONS" == "true" ]]; then
|
|
77
|
+
local notify_entry
|
|
78
|
+
notify_entry=$(_notify_hook_entry "$agent_name")
|
|
79
|
+
all_hooks=$(echo "$all_hooks" | jq --argjson e "$notify_entry" '.stop = (.stop // []) + [$e]')
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Add governance hooks to preToolUse and postToolUse
|
|
83
|
+
if [[ "$TELEMETRY_GOVERNANCE" == "true" ]]; then
|
|
84
|
+
for ht in preToolUse postToolUse; do
|
|
85
|
+
local gov_entry
|
|
86
|
+
gov_entry=$(_governance_hook_entry "$ht" "$agent_name")
|
|
87
|
+
all_hooks=$(echo "$all_hooks" | jq --arg ht "$ht" --argjson e "$gov_entry" '.[$ht] = (.[$ht] // []) + [$e]')
|
|
88
|
+
done
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# Read existing agent JSON, merge hooks (preserve non-managed entries)
|
|
92
|
+
local m1="$MARKER" m2="$NOTIFY_MARKER" m3="$GOVERNANCE_MARKER"
|
|
93
|
+
jq --argjson th "$all_hooks" --arg m1 "$m1" --arg m2 "$m2" --arg m3 "$m3" '
|
|
94
|
+
.hooks //= {} |
|
|
95
|
+
.hooks = reduce ($th | keys[]) as $ht (
|
|
96
|
+
.hooks;
|
|
97
|
+
.[$ht] = (
|
|
98
|
+
([.[$ht] // [] | .[] | select(
|
|
99
|
+
(.command | contains($m1) | not) and
|
|
100
|
+
(.command | contains($m2) | not) and
|
|
101
|
+
(.command | contains($m3) | not)
|
|
102
|
+
)])
|
|
103
|
+
+ $th[$ht]
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
' "$agent_file"
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
# Remove all managed hooks from an agent
|
|
110
|
+
_strip_hooks() {
|
|
111
|
+
local agent_file="$1"
|
|
112
|
+
local m1="$MARKER" m2="$NOTIFY_MARKER" m3="$GOVERNANCE_MARKER"
|
|
113
|
+
jq --arg m1 "$m1" --arg m2 "$m2" --arg m3 "$m3" '
|
|
114
|
+
if .hooks then
|
|
115
|
+
.hooks |= with_entries(
|
|
116
|
+
.value |= map(select(
|
|
117
|
+
(.command | contains($m1) | not) and
|
|
118
|
+
(.command | contains($m2) | not) and
|
|
119
|
+
(.command | contains($m3) | not)
|
|
120
|
+
))
|
|
121
|
+
)
|
|
122
|
+
else . end
|
|
123
|
+
' "$agent_file"
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
# Main
|
|
127
|
+
echo "Telemetry Hook Sync — mode: ${MODE}"
|
|
128
|
+
echo "Include: ${TELEMETRY_SYNC_INCLUDE}"
|
|
129
|
+
echo "Exclude: ${TELEMETRY_SYNC_EXCLUDE}"
|
|
130
|
+
echo "---"
|
|
131
|
+
|
|
132
|
+
synced=0
|
|
133
|
+
skipped=0
|
|
134
|
+
|
|
135
|
+
for agent_file in "${AGENTS_DIR}"/*.json; do
|
|
136
|
+
[[ -f "$agent_file" ]] || continue
|
|
137
|
+
fname=$(basename "$agent_file" .json)
|
|
138
|
+
|
|
139
|
+
# Apply include/exclude
|
|
140
|
+
if ! _matches_any "$fname" "$TELEMETRY_SYNC_INCLUDE"; then
|
|
141
|
+
skipped=$((skipped + 1))
|
|
142
|
+
continue
|
|
143
|
+
fi
|
|
144
|
+
if _matches_any "$fname" "$TELEMETRY_SYNC_EXCLUDE"; then
|
|
145
|
+
skipped=$((skipped + 1))
|
|
146
|
+
continue
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
# Get agent name from JSON or filename
|
|
150
|
+
agent_name=$(jq -r '.name // ""' "$agent_file" 2>/dev/null)
|
|
151
|
+
[[ -z "$agent_name" ]] && agent_name="$fname"
|
|
152
|
+
|
|
153
|
+
case "$MODE" in
|
|
154
|
+
dry-run)
|
|
155
|
+
echo "[DRY-RUN] Would update: ${fname} (agent: ${agent_name})"
|
|
156
|
+
;;
|
|
157
|
+
restore)
|
|
158
|
+
result=$(_strip_hooks "$agent_file")
|
|
159
|
+
echo "$result" > "${agent_file}.tmp" && mv "${agent_file}.tmp" "$agent_file"
|
|
160
|
+
echo "[RESTORED] ${fname} — telemetry hooks removed"
|
|
161
|
+
synced=$((synced + 1))
|
|
162
|
+
;;
|
|
163
|
+
apply)
|
|
164
|
+
result=$(_merge_hooks "$agent_file" "$agent_name")
|
|
165
|
+
echo "$result" > "${agent_file}.tmp" && mv "${agent_file}.tmp" "$agent_file"
|
|
166
|
+
echo "[SYNCED] ${fname} (agent: ${agent_name})"
|
|
167
|
+
synced=$((synced + 1))
|
|
168
|
+
;;
|
|
169
|
+
esac
|
|
170
|
+
done
|
|
171
|
+
|
|
172
|
+
echo "---"
|
|
173
|
+
echo "Done. ${synced} synced, ${skipped} skipped."
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
enabled=true
|
|
2
|
+
channels=full,analytics
|
|
3
|
+
channel.full.redact=hook.raw_input,turn.prompt_text,tool.input,tool.output
|
|
4
|
+
channel.full.endpoint_url=http://localhost:3141/v1/agent-events
|
|
5
|
+
channel.analytics.redact=tool.input,tool.output,turn.prompt_text,delegation.targets.query,context.cwd,hook.raw_input,hook.last_assistant_message,hook.transcript_path
|
|
6
|
+
# Console mirror is opt-in. Prefer installer telemetry sinks such as
|
|
7
|
+
# local-kontour-console, kontour-hosted-console, or user-hosted-console.
|
|
8
|
+
# The transport derives /api/telemetry/records from console_telemetry_url.
|
|
9
|
+
# console_telemetry_token=
|
|
10
|
+
# console_tenant_id=
|
|
11
|
+
enrich_system=true
|
|
12
|
+
enrich_workspace=true
|
|
13
|
+
enrich_auth=true
|
|
14
|
+
max_log_size_mb=50
|
|
15
|
+
max_log_files=3
|
|
16
|
+
sync_include=*
|
|
17
|
+
sync_exclude=neo-*,Neo,local-gamma-*
|
|
18
|
+
usage_tracking=true
|
|
19
|
+
notifications=true
|
|
20
|
+
notification_profile=standard
|
|
21
|
+
governance=true
|
|
22
|
+
governance_audit_max_size_mb=25
|
|
23
|
+
governance_audit_max_files=5
|