@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,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,54 @@
1
+ {
2
+ "$schema": "../../schemas/backlog-provider-settings.schema.json",
3
+ "schema_version": "1.0",
4
+ "projects": [
5
+ {
6
+ "project": {
7
+ "repo": {
8
+ "owner": "kontourai",
9
+ "name": "flow-agents",
10
+ "url": "https://github.com/kontourai/flow-agents"
11
+ }
12
+ },
13
+ "work_item_provider": {
14
+ "role": "WorkItemProvider",
15
+ "kind": "github",
16
+ "repo": {
17
+ "owner": "kontourai",
18
+ "name": "flow-agents",
19
+ "url": "https://github.com/kontourai/flow-agents"
20
+ },
21
+ "capabilities": ["issues", "labels", "assignees", "pr_links", "comments"]
22
+ },
23
+ "board_provider": {
24
+ "role": "BoardProvider",
25
+ "kind": "github",
26
+ "repo": {
27
+ "owner": "kontourai",
28
+ "name": "flow-agents",
29
+ "url": "https://github.com/kontourai/flow-agents"
30
+ },
31
+ "board": {
32
+ "type": "github_project",
33
+ "owner": "kontourai",
34
+ "number": 1,
35
+ "url": "https://github.com/orgs/kontourai/projects/1"
36
+ },
37
+ "capabilities": ["projects_boards", "status_fields", "custom_fields"]
38
+ },
39
+ "selection": {
40
+ "filters": {
41
+ "issue_state": "open",
42
+ "include_labels": [],
43
+ "ready_statuses": ["ready"],
44
+ "exclude_statuses": ["in_progress", "blocked", "review", "verification", "done"]
45
+ },
46
+ "wip_policy": {
47
+ "prefer_finishing_active_work": true,
48
+ "active_statuses": ["in_progress", "review", "verification"],
49
+ "block_new_work_when_active_count_exceeds": 0
50
+ }
51
+ }
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,26 @@
1
+ # Identity
2
+
3
+ ## Name
4
+
5
+ Flow Agent
6
+
7
+ ## Role
8
+
9
+ A professional collaborator running inside Kiro.
10
+
11
+ ## Personality
12
+
13
+ <!-- Fill in as the agent develops a sense of self -->
14
+
15
+ ## Values
16
+
17
+ - Accuracy over speed
18
+ - Honesty over comfort
19
+ - Autonomy over hand-holding
20
+ - Substance over performance
21
+
22
+ ## Boundaries
23
+
24
+ - NEVER fabricate citations, sources, or file operations.
25
+ - NEVER pretend to have done something that wasn't done.
26
+ - IF unsure about a destructive action, ask first.
@@ -0,0 +1,15 @@
1
+ # User Profile
2
+
3
+ <!--
4
+ Persistent profile of the user. Updated as the agent learns.
5
+ Ask before writing here the first time.
6
+ -->
7
+
8
+ ## Basics
9
+ - **Name:**
10
+ - **Role:**
11
+ - **Location:**
12
+
13
+ ## Communication Style
14
+
15
+ ## Work Context
@@ -0,0 +1,15 @@
1
+ title: Kontour Flow Agents
2
+ description: Structured, evidence-backed workflows for coding agents. Flow Agents keeps Codex, Claude Code, Kiro, and CI agents inspectable from idea to release readiness.
3
+ markdown: kramdown
4
+
5
+ defaults:
6
+ - scope:
7
+ path: ""
8
+ values:
9
+ layout: default
10
+
11
+ plugins:
12
+ - jekyll-optional-front-matter
13
+ - jekyll-relative-links
14
+ - jekyll-readme-index
15
+ - jekyll-titles-from-headings