@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,172 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://flow-agents.dev/schemas/workflow-release.schema.json",
4
+ "title": "Flow Agents Workflow Release Readiness",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "task_slug",
10
+ "decision",
11
+ "updated_at",
12
+ "scope",
13
+ "evidence_ref",
14
+ "gates",
15
+ "rollback_plan",
16
+ "observability_plan",
17
+ "post_deploy_checks",
18
+ "docs"
19
+ ],
20
+ "properties": {
21
+ "schema_version": {
22
+ "type": "string",
23
+ "const": "1.0"
24
+ },
25
+ "task_slug": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "repo": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "decision": {
34
+ "type": "string",
35
+ "enum": ["merge", "release", "deploy", "hold", "rollback_required"]
36
+ },
37
+ "updated_at": {
38
+ "type": "string",
39
+ "format": "date-time"
40
+ },
41
+ "scope": {
42
+ "type": "string",
43
+ "minLength": 1
44
+ },
45
+ "evidence_ref": {
46
+ "type": "string",
47
+ "minLength": 1
48
+ },
49
+ "gates": {
50
+ "type": "array",
51
+ "minItems": 1,
52
+ "items": {
53
+ "type": "object",
54
+ "additionalProperties": false,
55
+ "required": ["name", "status", "summary"],
56
+ "properties": {
57
+ "name": {
58
+ "type": "string",
59
+ "enum": ["merge", "release", "deploy", "post_deploy", "docs"]
60
+ },
61
+ "status": {
62
+ "type": "string",
63
+ "enum": ["pass", "hold", "not_required", "not_verified"]
64
+ },
65
+ "summary": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "evidence_refs": {
70
+ "type": "array",
71
+ "items": {
72
+ "type": "string"
73
+ },
74
+ "uniqueItems": true
75
+ }
76
+ }
77
+ }
78
+ },
79
+ "rollback_plan": {
80
+ "type": "object",
81
+ "additionalProperties": false,
82
+ "required": ["status", "summary", "owner"],
83
+ "properties": {
84
+ "status": {
85
+ "type": "string",
86
+ "enum": ["ready", "not_required", "missing"]
87
+ },
88
+ "summary": {
89
+ "type": "string",
90
+ "minLength": 1
91
+ },
92
+ "owner": {
93
+ "type": "string",
94
+ "minLength": 1
95
+ }
96
+ }
97
+ },
98
+ "observability_plan": {
99
+ "type": "object",
100
+ "additionalProperties": false,
101
+ "required": ["status", "summary"],
102
+ "properties": {
103
+ "status": {
104
+ "type": "string",
105
+ "enum": ["ready", "not_required", "missing"]
106
+ },
107
+ "summary": {
108
+ "type": "string",
109
+ "minLength": 1
110
+ },
111
+ "signals": {
112
+ "type": "array",
113
+ "items": {
114
+ "type": "string"
115
+ },
116
+ "uniqueItems": true
117
+ }
118
+ }
119
+ },
120
+ "post_deploy_checks": {
121
+ "type": "array",
122
+ "items": {
123
+ "type": "object",
124
+ "additionalProperties": false,
125
+ "required": ["id", "status", "summary"],
126
+ "properties": {
127
+ "id": {
128
+ "type": "string",
129
+ "minLength": 1
130
+ },
131
+ "status": {
132
+ "type": "string",
133
+ "enum": ["planned", "pass", "fail", "not_required", "not_verified"]
134
+ },
135
+ "summary": {
136
+ "type": "string",
137
+ "minLength": 1
138
+ },
139
+ "evidence_refs": {
140
+ "type": "array",
141
+ "items": {
142
+ "type": "string"
143
+ },
144
+ "uniqueItems": true
145
+ }
146
+ }
147
+ }
148
+ },
149
+ "docs": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": ["status", "summary"],
153
+ "properties": {
154
+ "status": {
155
+ "type": "string",
156
+ "enum": ["updated", "not_needed", "followup_required", "missing"]
157
+ },
158
+ "summary": {
159
+ "type": "string",
160
+ "minLength": 1
161
+ },
162
+ "refs": {
163
+ "type": "array",
164
+ "items": {
165
+ "type": "string"
166
+ },
167
+ "uniqueItems": true
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://flow-agents.dev/schemas/workflow-state.schema.json",
4
+ "title": "Flow Agents Workflow State",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schema_version",
9
+ "task_slug",
10
+ "status",
11
+ "phase",
12
+ "updated_at",
13
+ "next_action"
14
+ ],
15
+ "properties": {
16
+ "schema_version": {
17
+ "type": "string",
18
+ "const": "1.0"
19
+ },
20
+ "task_slug": {
21
+ "type": "string",
22
+ "minLength": 1
23
+ },
24
+ "repo": {
25
+ "type": "string",
26
+ "minLength": 1
27
+ },
28
+ "status": {
29
+ "type": "string",
30
+ "enum": ["new", "planning", "planned", "in_progress", "blocked", "verifying", "verified", "needs_decision", "not_verified", "failed", "delivered", "accepted", "archived"]
31
+ },
32
+ "phase": {
33
+ "type": "string",
34
+ "enum": ["idea", "backlog", "pickup", "planning", "execution", "verification", "goal_fit", "evidence", "release", "learning", "done"]
35
+ },
36
+ "owner": {
37
+ "type": "string"
38
+ },
39
+ "created_at": {
40
+ "type": "string",
41
+ "format": "date-time"
42
+ },
43
+ "updated_at": {
44
+ "type": "string",
45
+ "format": "date-time"
46
+ },
47
+ "source_request": {
48
+ "type": "string"
49
+ },
50
+ "artifact_paths": {
51
+ "type": "array",
52
+ "items": {
53
+ "type": "string"
54
+ },
55
+ "uniqueItems": true
56
+ },
57
+ "next_action": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "required": ["status", "summary"],
61
+ "properties": {
62
+ "status": {
63
+ "type": "string",
64
+ "enum": ["continue", "needs_user", "blocked", "done"]
65
+ },
66
+ "summary": {
67
+ "type": "string",
68
+ "minLength": 1
69
+ },
70
+ "target_phase": {
71
+ "type": "string",
72
+ "enum": ["idea", "backlog", "pickup", "planning", "execution", "verification", "goal_fit", "evidence", "release", "learning", "done"]
73
+ },
74
+ "target_artifact": {
75
+ "type": "string"
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,111 @@
1
+ # Scripts Directory
2
+
3
+ `scripts/` is the public compatibility and shell-runtime surface for Flow Agents. Keep command paths stable unless a migration includes wrappers, docs updates, and bundle/install validation.
4
+
5
+ ## Public Wrappers
6
+
7
+ These files are stable launchers for TypeScript code compiled under `build/src/`:
8
+
9
+ | Wrapper | Compiled implementation |
10
+ | --- | --- |
11
+ | `build-universal-bundles.js` | `build/src/tools/build-universal-bundles.js` |
12
+ | `filter-installed-packs.js` | `build/src/tools/filter-installed-packs.js` |
13
+ | `generate-context-map.js` | `build/src/tools/generate-context-map.js` |
14
+ | `flow-kit.js` | `build/src/cli/flow-kit.js` |
15
+ | `pull-work-provider.js` | `build/src/cli/pull-work-provider.js` |
16
+ | `effective-backlog-settings.js` | `build/src/cli/effective-backlog-settings.js` |
17
+ | `publish-change-helper.js` | `build/src/cli/publish-change-helper.js` |
18
+ | `promote-workflow-artifact.js` | `build/src/cli/promote-workflow-artifact.js` |
19
+ | `usage-feedback.js` | `build/src/cli/usage-feedback.js` |
20
+ | `validate-hook-influence-cases.js` | `build/src/cli/validate-hook-influence.js` |
21
+ | `validate-source-tree.js` | `build/src/cli.js validate-source` through package command wiring |
22
+
23
+ If implementation moves, update these wrappers rather than breaking callers.
24
+ `npm run validate:source --` enforces this table: public wrappers must remain
25
+ thin launchers, and implementation logic belongs under `src/cli/` or
26
+ `src/tools/`.
27
+
28
+ ## Package Command Surface
29
+
30
+ `package.json` exposes command names through npm scripts and package bins.
31
+ Commands that run `node build/src/cli.js <command>` must be registered in
32
+ `src/cli.ts`; bins that point at `build/src/cli.js` must have a matching
33
+ `flow-agents-*` alias in `src/cli.ts`. Direct bins may point at compiled
34
+ single-command entry points such as `build/src/cli/workflow-sidecar.js` when
35
+ callers need a stable executable name without the multiplexer.
36
+
37
+ `npm run validate:source --` checks this command surface and rejects stale
38
+ migration scaffolding such as pending command registries. Add a real command,
39
+ document a compatibility wrapper, or delete the stale surface.
40
+
41
+ ## Runtime Hooks
42
+
43
+ `scripts/hooks/` contains runtime hook adapters and policies for Claude Code, Codex, Kiro-style hooks, and repo guardrails. Canonical hook behavior lives here and in TypeScript bundle generation, not in local `.codex/` or `.claude/` installs.
44
+
45
+ `npm run validate:source --` enforces this inventory. If a hook moves, is
46
+ renamed, or changes category, update the table and the validator together.
47
+
48
+ | Hook file | Category | Owning checks | Purpose |
49
+ | --- | --- | --- | --- |
50
+ | `claude-hook-adapter.js` | runtime adapter | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_runtime_adapter_activation.sh` | Translates Claude hook events into the shared hook runner contract. |
51
+ | `codex-hook-adapter.js` | runtime adapter | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_runtime_adapter_activation.sh` | Translates Codex hook events into the shared hook runner contract. |
52
+ | `claude-telemetry-hook.js` | telemetry shim | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Captures Claude hook telemetry and fails open. |
53
+ | `codex-telemetry-hook.js` | telemetry shim | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Captures Codex hook telemetry and fails open. |
54
+ | `run-hook.js` | hook runner | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_goal_fit_hook.sh`, `evals/integration/test_workflow_steering_hook.sh` | Applies profile/disable flags, traversal checks, and hook execution. |
55
+ | `config-protection.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Blocks unsafe runtime config edits. |
56
+ | `governance-audit.sh` | policy hook | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Emits governance/Veritas audit context when configured. |
57
+ | `post-edit-accumulator.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Tracks edited files across a turn for later quality hooks. |
58
+ | `quality-gate.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Runs configured quality checks as hook policy. |
59
+ | `report-only-guard.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Protects report-only specialist roles from production edits. |
60
+ | `stop-format-typecheck.js` | policy hook | `evals/integration/test_hook_category_behaviors.sh` | Runs stop-time format/typecheck feedback. |
61
+ | `stop-goal-fit.js` | policy hook | `evals/integration/test_goal_fit_hook.sh` | Warns when a workflow is about to stop short of Goal Fit. |
62
+ | `workflow-steering.js` | policy hook | `evals/integration/test_workflow_steering_hook.sh` | Provides workflow guidance from current artifact state. |
63
+ | `pre-commit-quality.js` | repo guardrail hook | `evals/integration/test_hook_category_behaviors.sh` | Supports repository Git hook checks, not installed runtime hooks. |
64
+ | `desktop-notify.sh` | local notification helper | `evals/integration/test_hook_category_behaviors.sh` | Optional local desktop notification helper. |
65
+ | `lib/audit-transport.sh` | shared hook library | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Shared audit event transport functions. |
66
+ | `lib/hook-flags.js` | shared hook library | `evals/integration/test_hook_category_behaviors.sh` | Shared profile/disable flag parsing. |
67
+ | `lib/patterns.sh` | shared hook library | `evals/integration/test_hook_category_behaviors.sh`, `evals/integration/test_telemetry.sh` | Shared shell pattern constants. |
68
+ | `lib/resolve-formatter.js` | shared hook library | `evals/integration/test_hook_category_behaviors.sh` | Shared formatter resolution helper. |
69
+
70
+ ## Telemetry
71
+
72
+ `scripts/telemetry/` contains shell telemetry collection and redaction helpers. Runtime hook wrappers call these scripts; generated bundles copy them for installed runtime use.
73
+
74
+ Set `CONSOLE_TELEMETRY_URL` or `CONSOLE_URL` to mirror redacted runtime
75
+ telemetry to a Console API. The transport derives `/api/telemetry/records`
76
+ unless `CONSOLE_TELEMETRY_ENDPOINT_URL` is set explicitly. Hosted Console URLs
77
+ must use `https://`; `http://` is accepted only for `localhost` or `127.0.0.1`
78
+ local development. Use `CONSOLE_TELEMETRY_TOKEN` or `CONSOLE_AUTH_TOKEN` for
79
+ bearer auth, and `CONSOLE_TENANT_ID` for hosted tenant routing. Leaving the
80
+ Console URL unset keeps telemetry local-only.
81
+
82
+ Installers persist telemetry sink choices into the installed
83
+ `scripts/telemetry/telemetry.conf`. `local-files` is the default and requires no
84
+ Console. Add `--telemetry-sink local-kontour-console` for a separately running
85
+ local Console, `--telemetry-sink kontour-hosted-console` for Kontour's hosted
86
+ Console, or `--telemetry-sink user-hosted-console --console-url ...` for a
87
+ self-hosted Console. Legacy `kontour-cloud` and `hosted-kontour-console` names
88
+ remain accepted. `--console-token-file` and `--console-tenant` can be used with
89
+ any Console sink. Prefer `flow-agents init` for a prompted setup; use `--yes`
90
+ with the same flags for CI/headless installs.
91
+
92
+ Run `flow-agents telemetry-doctor --dest PATH --json --headless` to inspect an
93
+ installed telemetry configuration. It reports active sinks, local JSONL paths,
94
+ Console target settings, and bounded local Console reachability without
95
+ prompting. Add `--allow-network` to probe a non-local HTTPS Console endpoint.
96
+
97
+ ## Install And Repo Utilities
98
+
99
+ - `install-codex-home.sh`: installs the isolated generated Codex home.
100
+ - `setup-repo-hooks.sh`: configures this clone's Git hook path.
101
+ - `check-content-boundary.cjs`, `detect-tools.sh`, `discover-agents.sh`, `git-status.sh`: repo-local helper commands.
102
+ - `context-budget/` and `statusline/`: specialized support tooling copied into bundles where needed.
103
+
104
+ ## Bundle Policy
105
+
106
+ `scripts/` is copied into generated bundles intentionally. Do not remove scripts from bundle output only to reduce size unless the corresponding source, generated install behavior, docs, and evals are updated together.
107
+
108
+ `evals/static/test_universal_bundles.sh` rebuilds bundles and checks the output
109
+ shape. It also verifies reproducibility by building the same source into two
110
+ fresh output directories and diffing the results. A failure means generated
111
+ content is non-deterministic or a bundle build step is carrying stale state.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ // Supports FLOW_AGENTS_PACKS through the TypeScript bundle builder.
3
+ import("../build/src/tools/build-universal-bundles.js").then(({ main }) => process.exit(main()));
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { execFileSync } = require("node:child_process");
4
+ const { readFileSync } = require("node:fs");
5
+
6
+ const SELF = "scripts/check-content-boundary.cjs";
7
+
8
+ const bannedTerms = [
9
+ {
10
+ label: "private vertical product name",
11
+ pattern: new RegExp(["c", "a", "m", "p", "f", "i", "t"].join(""), "i"),
12
+ },
13
+ {
14
+ label: "private regulated vertical repository name",
15
+ pattern: new RegExp("\\b" + ["t", "a", "x", "e", "s"].join("") + "\\b", "i"),
16
+ },
17
+ {
18
+ label: "private regulated vertical term",
19
+ pattern: new RegExp("\\b" + ["t", "a", "x"].join("") + "\\b", "i"),
20
+ },
21
+ ];
22
+
23
+ const ignoredPathPatterns = [
24
+ /^node_modules\//,
25
+ /^dist\//,
26
+ /^build\//,
27
+ /^\.git\//,
28
+ /^\.astro\//,
29
+ /^test-results\//,
30
+ /^\.omx\//,
31
+ ];
32
+
33
+ function trackedFiles() {
34
+ const injected = process.env.FLOW_AGENTS_CONTENT_BOUNDARY_FILES;
35
+ if (injected) return injected.split(/\r?\n/).filter(Boolean);
36
+ const output = execFileSync("git", ["ls-files", "-z"], { encoding: "utf8" });
37
+ return output.split("\0").filter(Boolean);
38
+ }
39
+
40
+ function isIgnoredPath(filePath) {
41
+ return filePath === SELF || ignoredPathPatterns.some((pattern) => pattern.test(filePath));
42
+ }
43
+
44
+ function isWorkflowRuntimeArtifact(filePath) {
45
+ return filePath.startsWith(".flow-agents/");
46
+ }
47
+
48
+ function lineNumberFor(content, index) {
49
+ return content.slice(0, index).split("\n").length;
50
+ }
51
+
52
+ const findings = [];
53
+
54
+ for (const filePath of trackedFiles()) {
55
+ if (isWorkflowRuntimeArtifact(filePath)) {
56
+ findings.push({
57
+ filePath,
58
+ line: 1,
59
+ label: "Flow Agents runtime artifact must not be tracked in this repo",
60
+ });
61
+ continue;
62
+ }
63
+
64
+ if (isIgnoredPath(filePath)) {
65
+ continue;
66
+ }
67
+
68
+ let content;
69
+ try {
70
+ content = readFileSync(filePath, "utf8");
71
+ } catch {
72
+ continue;
73
+ }
74
+
75
+ if (content.includes("\0")) {
76
+ continue;
77
+ }
78
+
79
+ for (const term of bannedTerms) {
80
+ const match = term.pattern.exec(content);
81
+ if (match) {
82
+ findings.push({
83
+ filePath,
84
+ line: lineNumberFor(content, match.index),
85
+ label: term.label,
86
+ });
87
+ }
88
+ }
89
+ }
90
+
91
+ if (findings.length > 0) {
92
+ console.error("Content boundary check failed:");
93
+ for (const finding of findings) {
94
+ console.error(`- ${finding.filePath}:${finding.line} ${finding.label}`);
95
+ }
96
+ process.exit(1);
97
+ }
98
+
99
+ console.log("Content boundary check passed.");
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env bash
2
+ # budget-scan.sh — Scan Flow Agents bundles for token overhead estimation
3
+ # Usage: bash budget-scan.sh [--verbose]
4
+ set -euo pipefail
5
+
6
+ BUNDLE_DIR="${FLOW_AGENTS_BUNDLE_DIR:-${HOME}/.flow-agents}"
7
+ VERBOSE=false
8
+ [[ "${1:-}" == "--verbose" ]] && VERBOSE=true
9
+
10
+ # Handle missing bundle dir gracefully
11
+ if [[ ! -d "$BUNDLE_DIR" ]]; then
12
+ echo '{"packages":[],"issues":[],"totals":{"context":0,"skills":0,"agents":0,"total":0}}'
13
+ exit 0
14
+ fi
15
+
16
+ # Collect all bundle directories (top-level + local/)
17
+ _pkg_dirs=()
18
+ for d in "${BUNDLE_DIR}"/*/; do
19
+ [[ ! -d "$d" ]] && continue
20
+ base=$(basename "$d")
21
+ if [[ "$base" == "local" ]]; then
22
+ for ld in "${d}"*/; do
23
+ [[ -d "$ld" ]] && _pkg_dirs+=("$ld")
24
+ done
25
+ else
26
+ _pkg_dirs+=("$d")
27
+ fi
28
+ done
29
+
30
+ estimate_tokens() {
31
+ local file="$1"
32
+ [[ ! -f "$file" ]] && echo 0 && return
33
+ local words chars
34
+ words=$(wc -w < "$file" 2>/dev/null | tr -d ' ')
35
+ chars=$(wc -c < "$file" 2>/dev/null | tr -d ' ')
36
+ case "$file" in
37
+ *.sh|*.json) echo $(( chars / 4 )) ;;
38
+ *) echo $(( (words * 13 + 9) / 10 )) ;;
39
+ esac
40
+ }
41
+
42
+ count_lines() {
43
+ local file="$1"
44
+ [[ ! -f "$file" ]] && echo 0 && return
45
+ wc -l < "$file" 2>/dev/null | tr -d ' '
46
+ }
47
+
48
+ skill_desc_words() {
49
+ local file="$1"
50
+ [[ ! -f "$file" ]] && echo 0 && return
51
+ sed -n '/^---$/,/^---$/p' "$file" | grep -i 'description' | head -1 | wc -w | tr -d ' '
52
+ }
53
+
54
+ count_mcp_servers() {
55
+ local file="$1"
56
+ jq '[.mcpServers // {} | keys | length] | add // 0' "$file" 2>/dev/null || echo 0
57
+ }
58
+
59
+ count_tools() {
60
+ local file="$1"
61
+ jq '[.tools // [] | length] | add // 0' "$file" 2>/dev/null || echo 0
62
+ }
63
+
64
+ prompt_lines() {
65
+ local file="$1"
66
+ case "$file" in
67
+ *.json)
68
+ jq -r '.systemPrompt // .prompt // .developer_instructions // ""' "$file" 2>/dev/null | wc -l | tr -d ' '
69
+ ;;
70
+ *.toml)
71
+ # Codex agent TOML stores instructions as escaped newlines in one string.
72
+ awk -F' = ' '/^(developer_instructions|instructions|prompt) = / {print $2}' "$file" \
73
+ | sed 's/^"//; s/"$//' \
74
+ | perl -pe 's/\\n/\n/g' \
75
+ | wc -l | tr -d ' '
76
+ ;;
77
+ *)
78
+ echo 0
79
+ ;;
80
+ esac
81
+ }
82
+
83
+ packages_json='[]'
84
+ issues_json='[]'
85
+
86
+ for pkg_dir in "${_pkg_dirs[@]}"; do
87
+ [[ ! -d "$pkg_dir" ]] && continue
88
+ pkg_name=$(basename "$pkg_dir")
89
+
90
+ context_tokens=0
91
+ skill_tokens=0
92
+ agent_tokens=0
93
+ files_json='[]'
94
+
95
+ # Scan context files
96
+ while IFS= read -r -d '' f; do
97
+ tokens=$(estimate_tokens "$f")
98
+ lines=$(count_lines "$f")
99
+ context_tokens=$((context_tokens + tokens))
100
+ rel="${f#"$pkg_dir"}"
101
+ if $VERBOSE; then
102
+ files_json=$(echo "$files_json" | jq -c --arg p "$rel" --argjson t "$tokens" --argjson l "$lines" '. + [{path:$p,tokens:$t,lines:$l,type:"context"}]')
103
+ fi
104
+ if [[ "$lines" -gt 100 ]]; then
105
+ issues_json=$(echo "$issues_json" | jq -c --arg p "${pkg_name}/${rel}" --argjson l "$lines" '. + [{type:"context_bloat",path:$p,lines:$l,suggestion:"Consider moving to context/deferred/ or splitting"}]')
106
+ fi
107
+ done < <(find "${pkg_dir}context" -name '*.md' -print0 2>/dev/null || true)
108
+
109
+ # Scan skills
110
+ while IFS= read -r -d '' f; do
111
+ tokens=$(estimate_tokens "$f")
112
+ desc_words=$(skill_desc_words "$f")
113
+ skill_tokens=$((skill_tokens + tokens))
114
+ rel="${f#"$pkg_dir"}"
115
+ if $VERBOSE; then
116
+ files_json=$(echo "$files_json" | jq -c --arg p "$rel" --argjson t "$tokens" --argjson dw "$desc_words" '. + [{path:$p,tokens:$t,desc_words:$dw,type:"skill"}]')
117
+ fi
118
+ if [[ "$desc_words" -gt 30 ]]; then
119
+ issues_json=$(echo "$issues_json" | jq -c --arg p "${pkg_name}/${rel}" --argjson w "$desc_words" '. + [{type:"bloated_skill_desc",path:$p,words:$w,suggestion:"Trim description to under 30 words"}]')
120
+ fi
121
+ done < <(find "${pkg_dir}skills" -name 'SKILL.md' -print0 2>/dev/null || true)
122
+
123
+ # Scan agent specs
124
+ while IFS= read -r -d '' f; do
125
+ tokens=$(estimate_tokens "$f")
126
+ pl=$(prompt_lines "$f")
127
+ mcp=$(count_mcp_servers "$f")
128
+ tools=$(count_tools "$f")
129
+ agent_tokens=$((agent_tokens + tokens))
130
+ rel="${f#"$pkg_dir"}"
131
+ if $VERBOSE; then
132
+ files_json=$(echo "$files_json" | jq -c --arg p "$rel" --argjson t "$tokens" --argjson pl "$pl" --argjson mcp "$mcp" --argjson tools "$tools" '. + [{path:$p,tokens:$t,prompt_lines:$pl,mcp_servers:$mcp,tools:$tools,type:"agent"}]')
133
+ fi
134
+ if [[ "$pl" -gt 200 ]]; then
135
+ issues_json=$(echo "$issues_json" | jq -c --arg p "${pkg_name}/${rel}" --argjson l "$pl" '. + [{type:"heavy_agent_spec",path:$p,prompt_lines:$l,suggestion:"Reduce systemPrompt or move to context file"}]')
136
+ fi
137
+ if [[ "$mcp" -gt 10 ]] || [[ "$tools" -gt 50 ]]; then
138
+ issues_json=$(echo "$issues_json" | jq -c --arg p "${pkg_name}/${rel}" --argjson m "$mcp" --argjson t "$tools" '. + [{type:"mcp_oversubscription",path:$p,mcp_servers:$m,tools:$t,suggestion:"Reduce MCP servers or tools per agent"}]')
139
+ fi
140
+ done < <(find "${pkg_dir}agents" \( -name '*agent-spec.json' -o -name '*.json' -o -name '*.toml' \) -print0 2>/dev/null || true)
141
+
142
+ total=$((context_tokens + skill_tokens + agent_tokens))
143
+ pkg_entry=$(jq -nc \
144
+ --arg name "$pkg_name" \
145
+ --argjson context "$context_tokens" \
146
+ --argjson skills "$skill_tokens" \
147
+ --argjson agents "$agent_tokens" \
148
+ --argjson total "$total" \
149
+ --argjson files "$files_json" \
150
+ '{name:$name,tokens:{context:$context,skills:$skills,agents:$agents,total:$total},files:$files}')
151
+ packages_json=$(echo "$packages_json" | jq -c --argjson p "$pkg_entry" '. + [$p]')
152
+ done
153
+
154
+ total_context=$(echo "$packages_json" | jq '[.[].tokens.context] | add // 0')
155
+ total_skills=$(echo "$packages_json" | jq '[.[].tokens.skills] | add // 0')
156
+ total_agents=$(echo "$packages_json" | jq '[.[].tokens.agents] | add // 0')
157
+ total_all=$(echo "$packages_json" | jq '[.[].tokens.total] | add // 0')
158
+
159
+ jq -nc \
160
+ --argjson packages "$packages_json" \
161
+ --argjson issues "$issues_json" \
162
+ --argjson tc "$total_context" \
163
+ --argjson ts "$total_skills" \
164
+ --argjson ta "$total_agents" \
165
+ --argjson tt "$total_all" \
166
+ '{packages:$packages,issues:$issues,totals:{context:$tc,skills:$ts,agents:$ta,total:$tt}}'
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+ # Detect optional CLI tools. Output is injected into agent context at spawn.
3
+
@@ -0,0 +1,28 @@
1
+ #!/bin/bash
2
+ # Spawn hook: discover agent cards from the repo, installed bundle, or legacy root file.
3
+ echo "=== Agent Card Discovery ==="
4
+ FOUND=0
5
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
7
+ shopt -s nullglob
8
+ cards=(
9
+ "$ROOT_DIR"/agent-cards/*.json
10
+ "$HOME"/.flow-agents/agent-cards/*.json
11
+ "$HOME"/.flow-agents/agent-card.json
12
+ )
13
+ for card in "${cards[@]}"; do
14
+ [ -f "$card" ] || continue
15
+ FOUND=$((FOUND + 1))
16
+ name=$(node -e "const d=require(process.argv[1]); process.stdout.write(d.name||'?')" "$card" 2>/dev/null)
17
+ agent=$(node -e "const d=require(process.argv[1]); process.stdout.write(d.agent||'?')" "$card" 2>/dev/null)
18
+ desc=$(node -e "const d=require(process.argv[1]); process.stdout.write(d.description||'')" "$card" 2>/dev/null)
19
+ echo ""
20
+ echo "📋 $name (agent: $agent)"
21
+ echo " $desc"
22
+ done
23
+ if [ "$FOUND" -eq 0 ]; then
24
+ echo "No agent cards found."
25
+ else
26
+ echo ""
27
+ echo "Discovered $FOUND orchestrator(s)."
28
+ fi
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import("../build/src/cli/effective-backlog-settings.js").then(({ main }) => process.exit(main()));
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import("../build/src/tools/filter-installed-packs.js").then(({ main }) => process.exit(main(process.argv.slice(2))));