@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.
Files changed (418) hide show
  1. package/.githooks/pre-push +11 -0
  2. package/.github/workflows/ci.yml +210 -0
  3. package/.github/workflows/docs-pages.yml +52 -0
  4. package/.github/workflows/publish-npm.yml +104 -0
  5. package/AGENTS.md +26 -0
  6. package/CHANGELOG.md +66 -0
  7. package/CODE_OF_CONDUCT.md +25 -0
  8. package/CONTEXT.md +300 -0
  9. package/CONTRIBUTING.md +44 -0
  10. package/LICENSE +201 -0
  11. package/README.md +129 -0
  12. package/SECURITY.md +33 -0
  13. package/agent-cards/dev.json +19 -0
  14. package/agents/dev.json +127 -0
  15. package/agents/tool-code-reviewer.json +61 -0
  16. package/agents/tool-dependencies-updater.json +118 -0
  17. package/agents/tool-explore-config.json +92 -0
  18. package/agents/tool-explore-deps.json +92 -0
  19. package/agents/tool-explore-entry.json +92 -0
  20. package/agents/tool-explore-patterns.json +92 -0
  21. package/agents/tool-explore-structure.json +92 -0
  22. package/agents/tool-explore-tests.json +92 -0
  23. package/agents/tool-planner.json +57 -0
  24. package/agents/tool-playwright.json +145 -0
  25. package/agents/tool-security-reviewer.json +56 -0
  26. package/agents/tool-verifier.json +61 -0
  27. package/agents/tool-worker.json +58 -0
  28. package/build/src/cli/console-learning-projection.js +123 -0
  29. package/build/src/cli/docs-preview.js +39 -0
  30. package/build/src/cli/effective-backlog-settings.js +102 -0
  31. package/build/src/cli/export-bookmarks.js +38 -0
  32. package/build/src/cli/fixture-retirement-audit.js +140 -0
  33. package/build/src/cli/flow-kit.js +138 -0
  34. package/build/src/cli/import-bookmarks.js +50 -0
  35. package/build/src/cli/init.js +239 -0
  36. package/build/src/cli/instinct-cli.js +93 -0
  37. package/build/src/cli/promote-workflow-artifact.js +63 -0
  38. package/build/src/cli/publish-change-helper.js +154 -0
  39. package/build/src/cli/pull-work-provider.js +469 -0
  40. package/build/src/cli/runtime-adapter.js +23 -0
  41. package/build/src/cli/telemetry-doctor.js +221 -0
  42. package/build/src/cli/usage-feedback.js +443 -0
  43. package/build/src/cli/validate-hook-influence.js +152 -0
  44. package/build/src/cli/validate-source-tree.js +31 -0
  45. package/build/src/cli/validate-workflow-artifacts.js +486 -0
  46. package/build/src/cli/veritas-governance.js +262 -0
  47. package/build/src/cli/workflow-artifact-cleanup-audit.js +272 -0
  48. package/build/src/cli/workflow-sidecar.js +816 -0
  49. package/build/src/cli.js +89 -0
  50. package/build/src/flow-kit/validate.js +75 -0
  51. package/build/src/lib/args.js +45 -0
  52. package/build/src/lib/fs.js +62 -0
  53. package/build/src/lib/workflow-learning-projection.js +334 -0
  54. package/build/src/runtime-adapters.js +146 -0
  55. package/build/src/tools/build-universal-bundles.js +397 -0
  56. package/build/src/tools/common.js +56 -0
  57. package/build/src/tools/filter-installed-packs.js +132 -0
  58. package/build/src/tools/generate-context-map.js +198 -0
  59. package/build/src/tools/validate-package.js +64 -0
  60. package/build/src/tools/validate-source-tree.js +622 -0
  61. package/console.telemetry.json +176 -0
  62. package/context/base-rules.md +17 -0
  63. package/context/code-review-standards.md +62 -0
  64. package/context/coding-standards.md +42 -0
  65. package/context/common/orchestrators.md +12 -0
  66. package/context/common/subagents.md +28 -0
  67. package/context/contracts/artifact-contract.md +182 -0
  68. package/context/contracts/builder-kit-workflow-state-contract.md +319 -0
  69. package/context/contracts/delivery-contract.md +69 -0
  70. package/context/contracts/execution-contract.md +53 -0
  71. package/context/contracts/governance-adapter-contract.md +67 -0
  72. package/context/contracts/planning-contract.md +85 -0
  73. package/context/contracts/review-contract.md +104 -0
  74. package/context/contracts/sandbox-policy.md +52 -0
  75. package/context/contracts/verification-contract.md +134 -0
  76. package/context/contracts/work-item-contract.md +215 -0
  77. package/context/deferred/demo-mode.md +33 -0
  78. package/context/deferred/languages/go.md +31 -0
  79. package/context/deferred/languages/python.md +31 -0
  80. package/context/deferred/languages/typescript.md +34 -0
  81. package/context/deferred/parallelization.md +35 -0
  82. package/context/deferred/worktree-isolation.md +24 -0
  83. package/context/development-workflow.md +50 -0
  84. package/context/scripts/context-budget/budget-scan.sh +166 -0
  85. package/context/scripts/detect-tools.sh +3 -0
  86. package/context/scripts/discover-agents.sh +28 -0
  87. package/context/scripts/git-status.sh +49 -0
  88. package/context/scripts/hooks/config-protection.js +79 -0
  89. package/context/scripts/hooks/desktop-notify.sh +39 -0
  90. package/context/scripts/hooks/governance-audit.sh +135 -0
  91. package/context/scripts/hooks/lib/audit-transport.sh +40 -0
  92. package/context/scripts/hooks/lib/hook-flags.js +49 -0
  93. package/context/scripts/hooks/lib/patterns.sh +57 -0
  94. package/context/scripts/hooks/lib/resolve-formatter.js +80 -0
  95. package/context/scripts/hooks/post-edit-accumulator.js +66 -0
  96. package/context/scripts/hooks/pre-commit-quality.js +194 -0
  97. package/context/scripts/hooks/quality-gate.js +93 -0
  98. package/context/scripts/hooks/report-only-guard.js +21 -0
  99. package/context/scripts/hooks/run-hook.js +136 -0
  100. package/context/scripts/hooks/stop-format-typecheck.js +141 -0
  101. package/context/scripts/hooks/stop-goal-fit.js +337 -0
  102. package/context/scripts/hooks/workflow-steering.js +250 -0
  103. package/context/scripts/telemetry/console-presets.sh +14 -0
  104. package/context/scripts/telemetry/install-console-config.sh +214 -0
  105. package/context/scripts/telemetry/lib/config.sh +85 -0
  106. package/context/scripts/telemetry/lib/enrich.sh +115 -0
  107. package/context/scripts/telemetry/lib/redact.sh +22 -0
  108. package/context/scripts/telemetry/lib/session.sh +63 -0
  109. package/context/scripts/telemetry/lib/transport.sh +183 -0
  110. package/context/scripts/telemetry/lib/usage.sh +29 -0
  111. package/context/scripts/telemetry/sync-agents.sh +173 -0
  112. package/context/scripts/telemetry/telemetry.conf +23 -0
  113. package/context/scripts/telemetry/telemetry.sh +387 -0
  114. package/context/scripts/validate-package.sh +89 -0
  115. package/context/settings/backlog-provider-settings.json +54 -0
  116. package/context/templates/core/identity.md +26 -0
  117. package/context/templates/core/user.md +15 -0
  118. package/docs/_config.yml +15 -0
  119. package/docs/_layouts/default.html +87 -0
  120. package/docs/adr/0001-flow-agents-consumes-flow.md +77 -0
  121. package/docs/adr/0002-flow-kits-as-extension-unit.md +13 -0
  122. package/docs/adr/0003-flow-agents-coordinates-kits-and-adapters.md +13 -0
  123. package/docs/adr/0004-gates-expect-surface-claims.md +15 -0
  124. package/docs/adr/0005-kubernetes-inspired-resource-contracts.md +48 -0
  125. package/docs/adr/0006-typescript-first-source-policy.md +98 -0
  126. package/docs/agent-system-guidebook.md +391 -0
  127. package/docs/agent-usage-feedback-loop.md +351 -0
  128. package/docs/assets/favicon.svg +13 -0
  129. package/docs/assets/og-image.png +0 -0
  130. package/docs/assets/site.css +774 -0
  131. package/docs/assets/site.js +139 -0
  132. package/docs/configurable-workflow-routing.md +174 -0
  133. package/docs/context-map.md +145 -0
  134. package/docs/developer-architecture.md +145 -0
  135. package/docs/developer-hook-setup.md +61 -0
  136. package/docs/fixture-ownership.md +44 -0
  137. package/docs/flow-kit-repository-contract.md +180 -0
  138. package/docs/index.md +129 -0
  139. package/docs/kontour-resource-contract.md +358 -0
  140. package/docs/migrations.md +64 -0
  141. package/docs/north-star.md +322 -0
  142. package/docs/operating-layers.md +110 -0
  143. package/docs/repository-structure.md +132 -0
  144. package/docs/sandbox-policy.md +56 -0
  145. package/docs/skills-map.md +203 -0
  146. package/docs/standards-register.md +96 -0
  147. package/docs/veritas-integration.md +165 -0
  148. package/docs/work-item-adapters.md +72 -0
  149. package/docs/workflow-artifact-lifecycle.md +141 -0
  150. package/docs/workflow-eval-strategy.md +295 -0
  151. package/docs/workflow-shared-contracts.md +51 -0
  152. package/docs/workflow-usage-guide.md +443 -0
  153. package/evals/ARCHITECTURE.md +143 -0
  154. package/evals/CONVENTIONS.md +58 -0
  155. package/evals/README.md +128 -0
  156. package/evals/acceptance/run.sh +29 -0
  157. package/evals/acceptance/test_claude_harness.sh +242 -0
  158. package/evals/acceptance/test_codex_harness.sh +108 -0
  159. package/evals/acceptance/test_kiro_harness.sh +128 -0
  160. package/evals/cases/dev/404.html +97 -0
  161. package/evals/cases/dev/code-review.yaml +44 -0
  162. package/evals/cases/dev/dashboard.html +300 -0
  163. package/evals/cases/dev/deliver.yaml +66 -0
  164. package/evals/cases/dev/dependency-update.yaml +16 -0
  165. package/evals/cases/dev/explore.yaml +20 -0
  166. package/evals/cases/dev/index.html +370 -0
  167. package/evals/cases/dev/package-lock.json +28 -0
  168. package/evals/cases/dev/package.json +16 -0
  169. package/evals/cases/dev/plan-work.yaml +20 -0
  170. package/evals/cases/dev/promptfooconfig.yaml +666 -0
  171. package/evals/cases/dev/search-first.yaml +20 -0
  172. package/evals/cases/dev/tdd-workflow.yaml +48 -0
  173. package/evals/cases/dev/verify-work.yaml +44 -0
  174. package/evals/cases/dev/workflow.yaml +34 -0
  175. package/evals/ci/run-baseline.sh +283 -0
  176. package/evals/fixtures/backlog-provider-settings/global-default.json +44 -0
  177. package/evals/fixtures/backlog-provider-settings/project-override.json +53 -0
  178. package/evals/fixtures/builder-kit-workflow-state/baseline-freshness-resolution-hint.json +139 -0
  179. package/evals/fixtures/builder-kit-workflow-state/direct-primitive-stop.json +59 -0
  180. package/evals/fixtures/builder-kit-workflow-state/empty-board-route-shape.json +55 -0
  181. package/evals/fixtures/builder-kit-workflow-state/happy-path.json +71 -0
  182. package/evals/fixtures/builder-kit-workflow-state/mid-work-resume.json +80 -0
  183. package/evals/fixtures/builder-kit-workflow-state/missing-prestep-recovery.json +65 -0
  184. package/evals/fixtures/builder-kit-workflow-state/product-build-chaining.json +60 -0
  185. package/evals/fixtures/builder-kit-workflow-state/stale-continuation-requires-new-probe.json +57 -0
  186. package/evals/fixtures/console-learning-projection/artifacts/console-learning-correction/learning.json +50 -0
  187. package/evals/fixtures/console-learning-projection/artifacts/console-learning-open-route/learning.json +41 -0
  188. package/evals/fixtures/flow-kit-repository/invalid-absolute-path/kit.json +8 -0
  189. package/evals/fixtures/flow-kit-repository/invalid-asset-section/flows/review.flow.json +6 -0
  190. package/evals/fixtures/flow-kit-repository/invalid-asset-section/kit.json +11 -0
  191. package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/flows/review.flow.json +6 -0
  192. package/evals/fixtures/flow-kit-repository/invalid-duplicate-flow/kit.json +9 -0
  193. package/evals/fixtures/flow-kit-repository/invalid-id/flows/review.flow.json +6 -0
  194. package/evals/fixtures/flow-kit-repository/invalid-id/kit.json +8 -0
  195. package/evals/fixtures/flow-kit-repository/invalid-malformed-json/kit.json +8 -0
  196. package/evals/fixtures/flow-kit-repository/invalid-missing-flow/kit.json +8 -0
  197. package/evals/fixtures/flow-kit-repository/invalid-missing-id/flows/review.flow.json +6 -0
  198. package/evals/fixtures/flow-kit-repository/invalid-missing-id/kit.json +7 -0
  199. package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/flows/review.flow.json +6 -0
  200. package/evals/fixtures/flow-kit-repository/invalid-missing-schema-version/kit.json +7 -0
  201. package/evals/fixtures/flow-kit-repository/invalid-name/flows/review.flow.json +6 -0
  202. package/evals/fixtures/flow-kit-repository/invalid-name/kit.json +8 -0
  203. package/evals/fixtures/flow-kit-repository/invalid-schema-version/flows/review.flow.json +6 -0
  204. package/evals/fixtures/flow-kit-repository/invalid-schema-version/kit.json +8 -0
  205. package/evals/fixtures/flow-kit-repository/invalid-traversal/kit.json +8 -0
  206. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/adapters/example.json +3 -0
  207. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/assets/example.txt +1 -0
  208. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/docs/README.md +3 -0
  209. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/flows/runtime.flow.json +26 -0
  210. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-evals/example.json +3 -0
  211. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit-skills/mixed/SKILL.md +3 -0
  212. package/evals/fixtures/flow-kit-repository/mixed-runtime-kit/kit.json +44 -0
  213. package/evals/fixtures/flow-kit-repository/valid-local-kit/docs/README.md +3 -0
  214. package/evals/fixtures/flow-kit-repository/valid-local-kit/flows/review.flow.json +26 -0
  215. package/evals/fixtures/flow-kit-repository/valid-local-kit/kit.json +20 -0
  216. package/evals/fixtures/hook-influence/cases.json +336 -0
  217. package/evals/fixtures/pull-work-provider/github-issues.json +170 -0
  218. package/evals/fixtures/pull-work-wip-shepherding/global-wip-informs.json +43 -0
  219. package/evals/fixtures/pull-work-wip-shepherding/personal-wip-blocks.json +42 -0
  220. package/evals/fixtures/surface-trust/accepted-claim-trust-report.json +31 -0
  221. package/evals/fixtures/surface-trust/artifact-absent.json +19 -0
  222. package/evals/fixtures/surface-trust/integrity-mismatch-trust-report.json +32 -0
  223. package/evals/fixtures/surface-trust/missing-authority-trust-report.json +27 -0
  224. package/evals/fixtures/surface-trust/provider-absent.json +19 -0
  225. package/evals/fixtures/surface-trust/rejected-claim-trust-report.json +30 -0
  226. package/evals/fixtures/surface-trust/stale-claim-trust-snapshot.json +31 -0
  227. package/evals/fixtures/usage-feedback/sample-full.jsonl +11 -0
  228. package/evals/fixtures/usage-feedback/sample-outcomes.jsonl +1 -0
  229. package/evals/fixtures/veritas-governance-adapter/fake-veritas-pass.sh +18 -0
  230. package/evals/fixtures/veritas-governance-adapter/fake-veritas-secret-fail.sh +10 -0
  231. package/evals/fixtures/veritas-governance-adapter/fake-veritas-unconfigured.sh +4 -0
  232. package/evals/integration/test_bundle_install.sh +541 -0
  233. package/evals/integration/test_console_learning_projection.sh +192 -0
  234. package/evals/integration/test_context_map.sh +65 -0
  235. package/evals/integration/test_effective_backlog_settings.sh +58 -0
  236. package/evals/integration/test_fixture_retirement_audit.sh +58 -0
  237. package/evals/integration/test_flow_agents_statusline.sh +93 -0
  238. package/evals/integration/test_flow_kit_repository.sh +90 -0
  239. package/evals/integration/test_goal_fit_hook.sh +482 -0
  240. package/evals/integration/test_hook_category_behaviors.sh +190 -0
  241. package/evals/integration/test_hook_influence_cases.sh +69 -0
  242. package/evals/integration/test_local_flow_kit_install.sh +145 -0
  243. package/evals/integration/test_publish_change_helper.sh +176 -0
  244. package/evals/integration/test_pull_work_provider.sh +140 -0
  245. package/evals/integration/test_runtime_adapter_activation.sh +106 -0
  246. package/evals/integration/test_telemetry.sh +485 -0
  247. package/evals/integration/test_telemetry_doctor.sh +193 -0
  248. package/evals/integration/test_usage_feedback_dashboard.sh +169 -0
  249. package/evals/integration/test_usage_feedback_global.sh +117 -0
  250. package/evals/integration/test_usage_feedback_import.sh +227 -0
  251. package/evals/integration/test_usage_feedback_outcomes.sh +165 -0
  252. package/evals/integration/test_usage_feedback_report.sh +263 -0
  253. package/evals/integration/test_veritas_governance_adapter.sh +235 -0
  254. package/evals/integration/test_workflow_artifact_cleanup_audit.sh +287 -0
  255. package/evals/integration/test_workflow_artifacts.sh +1247 -0
  256. package/evals/integration/test_workflow_sidecar_writer.sh +2112 -0
  257. package/evals/integration/test_workflow_steering_hook.sh +337 -0
  258. package/evals/lib/assertions/delegated-to.js +40 -0
  259. package/evals/lib/assertions/max-tool-calls.js +15 -0
  260. package/evals/lib/assertions/no-write-tools.js +27 -0
  261. package/evals/lib/assertions/pass-at-k.js +39 -0
  262. package/evals/lib/assertions/telemetry-utils.js +105 -0
  263. package/evals/lib/assertions/tool-called.js +39 -0
  264. package/evals/lib/assertions/verify-after-fix.js +61 -0
  265. package/evals/lib/claude-judge.sh +40 -0
  266. package/evals/lib/claude-provider.sh +74 -0
  267. package/evals/lib/codex-judge.sh +39 -0
  268. package/evals/lib/codex-provider.sh +81 -0
  269. package/evals/lib/eval-dev.sh +5 -0
  270. package/evals/lib/eval-judge.sh +22 -0
  271. package/evals/lib/eval-provider.sh +26 -0
  272. package/evals/lib/eval-report.sh +73 -0
  273. package/evals/lib/kiro-dev.sh +4 -0
  274. package/evals/lib/kiro-judge.sh +17 -0
  275. package/evals/lib/kiro-provider.sh +62 -0
  276. package/evals/lib/node.sh +111 -0
  277. package/evals/promptfooconfig.yaml +70 -0
  278. package/evals/run.sh +309 -0
  279. package/evals/static/test_evidence_refs.sh +141 -0
  280. package/evals/static/test_package.sh +407 -0
  281. package/evals/static/test_repo_hooks.sh +68 -0
  282. package/evals/static/test_universal_bundles.sh +274 -0
  283. package/evals/static/test_workflow_skills.sh +1207 -0
  284. package/install.sh +64 -0
  285. package/integrations/veritas/flow-agents.adapter.json +138 -0
  286. package/integrations/veritas/flow-agents.authority-settings.json +26 -0
  287. package/integrations/veritas/flow-agents.repo-standards.json +82 -0
  288. package/kits/builder/flows/build.flow.json +218 -0
  289. package/kits/builder/flows/shape.flow.json +127 -0
  290. package/kits/builder/kit.json +19 -0
  291. package/kits/catalog.json +11 -0
  292. package/package.json +130 -0
  293. package/packaging/README.md +60 -0
  294. package/packaging/manifest.json +173 -0
  295. package/packaging/packs.json +69 -0
  296. package/powers/dependency-checker/POWER.md +20 -0
  297. package/powers/dependency-checker/mcp.json +20 -0
  298. package/powers/playwright/POWER.md +25 -0
  299. package/powers/playwright/mcp.json +12 -0
  300. package/prompts/code-audit.md +123 -0
  301. package/prompts/kcommit.md +88 -0
  302. package/schemas/backlog-provider-settings.schema.json +138 -0
  303. package/schemas/workflow-acceptance.schema.json +216 -0
  304. package/schemas/workflow-critique.schema.json +113 -0
  305. package/schemas/workflow-evidence.schema.json +357 -0
  306. package/schemas/workflow-handoff.schema.json +52 -0
  307. package/schemas/workflow-learning.schema.json +223 -0
  308. package/schemas/workflow-release.schema.json +172 -0
  309. package/schemas/workflow-state.schema.json +80 -0
  310. package/scripts/README.md +111 -0
  311. package/scripts/build-universal-bundles.js +3 -0
  312. package/scripts/check-content-boundary.cjs +99 -0
  313. package/scripts/context-budget/budget-scan.sh +166 -0
  314. package/scripts/detect-tools.sh +3 -0
  315. package/scripts/discover-agents.sh +28 -0
  316. package/scripts/effective-backlog-settings.js +2 -0
  317. package/scripts/filter-installed-packs.js +2 -0
  318. package/scripts/flow-kit.js +2 -0
  319. package/scripts/generate-context-map.js +2 -0
  320. package/scripts/git-status.sh +49 -0
  321. package/scripts/hooks/claude-hook-adapter.js +174 -0
  322. package/scripts/hooks/claude-telemetry-hook.js +115 -0
  323. package/scripts/hooks/codex-hook-adapter.js +176 -0
  324. package/scripts/hooks/codex-telemetry-hook.js +95 -0
  325. package/scripts/hooks/config-protection.js +79 -0
  326. package/scripts/hooks/desktop-notify.sh +39 -0
  327. package/scripts/hooks/governance-audit.sh +135 -0
  328. package/scripts/hooks/lib/audit-transport.sh +40 -0
  329. package/scripts/hooks/lib/hook-flags.js +49 -0
  330. package/scripts/hooks/lib/patterns.sh +57 -0
  331. package/scripts/hooks/lib/resolve-formatter.js +80 -0
  332. package/scripts/hooks/post-edit-accumulator.js +66 -0
  333. package/scripts/hooks/pre-commit-quality.js +194 -0
  334. package/scripts/hooks/quality-gate.js +93 -0
  335. package/scripts/hooks/report-only-guard.js +21 -0
  336. package/scripts/hooks/run-hook.js +136 -0
  337. package/scripts/hooks/stop-format-typecheck.js +141 -0
  338. package/scripts/hooks/stop-goal-fit.js +337 -0
  339. package/scripts/hooks/workflow-steering.js +250 -0
  340. package/scripts/install-codex-home.sh +106 -0
  341. package/scripts/package.json +3 -0
  342. package/scripts/promote-workflow-artifact.js +2 -0
  343. package/scripts/publish-change-helper.js +2 -0
  344. package/scripts/pull-work-provider.js +2 -0
  345. package/scripts/setup-repo-hooks.sh +8 -0
  346. package/scripts/statusline/flow-agents-statusline.js +157 -0
  347. package/scripts/telemetry/console-presets.sh +14 -0
  348. package/scripts/telemetry/install-console-config.sh +214 -0
  349. package/scripts/telemetry/lib/config.sh +85 -0
  350. package/scripts/telemetry/lib/enrich.sh +115 -0
  351. package/scripts/telemetry/lib/redact.sh +22 -0
  352. package/scripts/telemetry/lib/session.sh +63 -0
  353. package/scripts/telemetry/lib/transport.sh +183 -0
  354. package/scripts/telemetry/lib/usage.sh +29 -0
  355. package/scripts/telemetry/sync-agents.sh +173 -0
  356. package/scripts/telemetry/telemetry.conf +23 -0
  357. package/scripts/telemetry/telemetry.sh +387 -0
  358. package/scripts/usage-feedback.js +2 -0
  359. package/scripts/validate-hook-influence-cases.js +2 -0
  360. package/scripts/validate-package.sh +89 -0
  361. package/scripts/validate-source-tree.js +9 -0
  362. package/skills/agentic-engineering/SKILL.md +62 -0
  363. package/skills/browser-test/SKILL.md +51 -0
  364. package/skills/builder-shape/SKILL.md +76 -0
  365. package/skills/context-budget/SKILL.md +40 -0
  366. package/skills/deliver/SKILL.md +241 -0
  367. package/skills/dependency-update/SKILL.md +68 -0
  368. package/skills/design-probe/SKILL.md +107 -0
  369. package/skills/eval-rebuild/SKILL.md +39 -0
  370. package/skills/evidence-gate/SKILL.md +186 -0
  371. package/skills/execute-plan/SKILL.md +110 -0
  372. package/skills/explore/SKILL.md +137 -0
  373. package/skills/feedback-loop/SKILL.md +87 -0
  374. package/skills/fix-bug/SKILL.md +133 -0
  375. package/skills/frontend-design/SKILL.md +80 -0
  376. package/skills/github-cli/SKILL.md +63 -0
  377. package/skills/idea-to-backlog/SKILL.md +267 -0
  378. package/skills/knowledge-capture/SKILL.md +55 -0
  379. package/skills/learning-review/SKILL.md +115 -0
  380. package/skills/pickup-probe/SKILL.md +114 -0
  381. package/skills/plan-work/SKILL.md +176 -0
  382. package/skills/pull-work/SKILL.md +309 -0
  383. package/skills/release-readiness/SKILL.md +121 -0
  384. package/skills/review-work/SKILL.md +161 -0
  385. package/skills/search-first/SKILL.md +66 -0
  386. package/skills/tdd-workflow/SKILL.md +140 -0
  387. package/skills/verify-work/SKILL.md +109 -0
  388. package/src/cli/console-learning-projection.ts +140 -0
  389. package/src/cli/effective-backlog-settings.ts +99 -0
  390. package/src/cli/fixture-retirement-audit.ts +154 -0
  391. package/src/cli/flow-kit.ts +139 -0
  392. package/src/cli/init.ts +248 -0
  393. package/src/cli/promote-workflow-artifact.ts +64 -0
  394. package/src/cli/publish-change-helper.ts +143 -0
  395. package/src/cli/pull-work-provider.ts +481 -0
  396. package/src/cli/runtime-adapter.ts +24 -0
  397. package/src/cli/telemetry-doctor.ts +243 -0
  398. package/src/cli/usage-feedback.ts +418 -0
  399. package/src/cli/validate-hook-influence.ts +119 -0
  400. package/src/cli/validate-source-tree.ts +30 -0
  401. package/src/cli/validate-workflow-artifacts.ts +411 -0
  402. package/src/cli/veritas-governance.ts +322 -0
  403. package/src/cli/workflow-artifact-cleanup-audit.ts +281 -0
  404. package/src/cli/workflow-sidecar.ts +676 -0
  405. package/src/cli.ts +95 -0
  406. package/src/flow-kit/validate.ts +74 -0
  407. package/src/lib/args.ts +43 -0
  408. package/src/lib/fs.ts +62 -0
  409. package/src/lib/workflow-learning-projection.ts +491 -0
  410. package/src/runtime-adapters.ts +154 -0
  411. package/src/tools/build-universal-bundles.ts +366 -0
  412. package/src/tools/common.ts +61 -0
  413. package/src/tools/filter-installed-packs.ts +129 -0
  414. package/src/tools/generate-context-map.ts +199 -0
  415. package/src/tools/validate-package.ts +57 -0
  416. package/src/tools/validate-source-tree.ts +488 -0
  417. package/tsconfig.json +19 -0
  418. package/veritas.claims.json +6 -0
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ # redact.sh — Field redaction for telemetry events
3
+
4
+ redact_event() {
5
+ local event="$1"
6
+ local redact_fields="$2"
7
+
8
+ [[ -z "$event" || "$redact_fields" == "none" ]] && echo "$event" && return
9
+
10
+ local result="$event"
11
+ IFS=',' read -ra fields <<< "$redact_fields"
12
+
13
+ for field in "${fields[@]}"; do
14
+ field=$(echo "$field" | tr -d ' ')
15
+ [[ -z "$field" ]] && continue
16
+
17
+ # Use jq to null out the field
18
+ result=$(echo "$result" | jq -c ".$field = null" 2>/dev/null || echo "$result")
19
+ done
20
+
21
+ echo "$result"
22
+ }
@@ -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