@claude-flow/cli 3.10.45 → 3.11.0

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 (560) hide show
  1. package/.claude/agents/analysis/analyze-code-quality.md +178 -178
  2. package/.claude/agents/analysis/code-analyzer.md +209 -209
  3. package/.claude/agents/analysis/code-review/analyze-code-quality.md +178 -178
  4. package/.claude/agents/architecture/arch-system-design.md +156 -156
  5. package/.claude/agents/architecture/system-design/arch-system-design.md +154 -154
  6. package/.claude/agents/browser/browser-agent.yaml +182 -182
  7. package/.claude/agents/consensus/byzantine-coordinator.md +62 -62
  8. package/.claude/agents/consensus/crdt-synchronizer.md +996 -996
  9. package/.claude/agents/consensus/gossip-coordinator.md +62 -62
  10. package/.claude/agents/consensus/performance-benchmarker.md +850 -850
  11. package/.claude/agents/consensus/quorum-manager.md +822 -822
  12. package/.claude/agents/consensus/raft-manager.md +62 -62
  13. package/.claude/agents/consensus/security-manager.md +621 -621
  14. package/.claude/agents/core/planner.md +374 -374
  15. package/.claude/agents/custom/test-long-runner.md +44 -44
  16. package/.claude/agents/data/data-ml-model.md +444 -444
  17. package/.claude/agents/data/ml/data-ml-model.md +192 -192
  18. package/.claude/agents/development/backend/dev-backend-api.md +141 -141
  19. package/.claude/agents/development/dev-backend-api.md +344 -344
  20. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +163 -163
  21. package/.claude/agents/devops/ops-cicd-github.md +164 -164
  22. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +173 -173
  23. package/.claude/agents/documentation/docs-api-openapi.md +354 -354
  24. package/.claude/agents/flow-nexus/app-store.md +87 -87
  25. package/.claude/agents/flow-nexus/authentication.md +68 -68
  26. package/.claude/agents/flow-nexus/challenges.md +80 -80
  27. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  28. package/.claude/agents/flow-nexus/payments.md +82 -82
  29. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  30. package/.claude/agents/flow-nexus/swarm.md +75 -75
  31. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  32. package/.claude/agents/flow-nexus/workflow.md +83 -83
  33. package/.claude/agents/github/code-review-swarm.md +377 -377
  34. package/.claude/agents/github/github-modes.md +172 -172
  35. package/.claude/agents/github/issue-tracker.md +575 -575
  36. package/.claude/agents/github/multi-repo-swarm.md +552 -552
  37. package/.claude/agents/github/pr-manager.md +437 -437
  38. package/.claude/agents/github/project-board-sync.md +508 -508
  39. package/.claude/agents/github/release-manager.md +604 -604
  40. package/.claude/agents/github/release-swarm.md +582 -582
  41. package/.claude/agents/github/repo-architect.md +397 -397
  42. package/.claude/agents/github/swarm-issue.md +572 -572
  43. package/.claude/agents/github/swarm-pr.md +427 -427
  44. package/.claude/agents/github/sync-coordinator.md +451 -451
  45. package/.claude/agents/github/workflow-automation.md +902 -902
  46. package/.claude/agents/goal/agent.md +815 -815
  47. package/.claude/agents/optimization/benchmark-suite.md +664 -664
  48. package/.claude/agents/optimization/load-balancer.md +430 -430
  49. package/.claude/agents/optimization/performance-monitor.md +671 -671
  50. package/.claude/agents/optimization/resource-allocator.md +673 -673
  51. package/.claude/agents/optimization/topology-optimizer.md +807 -807
  52. package/.claude/agents/payments/agentic-payments.md +126 -126
  53. package/.claude/agents/sona/sona-learning-optimizer.md +74 -74
  54. package/.claude/agents/sparc/architecture.md +698 -698
  55. package/.claude/agents/sparc/pseudocode.md +519 -519
  56. package/.claude/agents/sparc/refinement.md +801 -801
  57. package/.claude/agents/sparc/specification.md +477 -477
  58. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +224 -224
  59. package/.claude/agents/specialized/spec-mobile-react-native.md +226 -226
  60. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  61. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  62. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  63. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  64. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  65. package/.claude/agents/swarm/adaptive-coordinator.md +1126 -1126
  66. package/.claude/agents/swarm/hierarchical-coordinator.md +709 -709
  67. package/.claude/agents/swarm/mesh-coordinator.md +962 -962
  68. package/.claude/agents/templates/automation-smart-agent.md +204 -204
  69. package/.claude/agents/templates/base-template-generator.md +289 -289
  70. package/.claude/agents/templates/coordinator-swarm-init.md +89 -89
  71. package/.claude/agents/templates/github-pr-manager.md +176 -176
  72. package/.claude/agents/templates/implementer-sparc-coder.md +258 -258
  73. package/.claude/agents/templates/memory-coordinator.md +186 -186
  74. package/.claude/agents/templates/orchestrator-task.md +138 -138
  75. package/.claude/agents/templates/performance-analyzer.md +198 -198
  76. package/.claude/agents/templates/sparc-coordinator.md +513 -513
  77. package/.claude/agents/testing/production-validator.md +394 -394
  78. package/.claude/agents/testing/tdd-london-swarm.md +243 -243
  79. package/.claude/agents/v3/aidefence-guardian.md +282 -282
  80. package/.claude/agents/v3/claims-authorizer.md +208 -208
  81. package/.claude/agents/v3/collective-intelligence-coordinator.md +993 -993
  82. package/.claude/agents/v3/ddd-domain-expert.md +220 -220
  83. package/.claude/agents/v3/injection-analyst.md +236 -236
  84. package/.claude/agents/v3/performance-engineer.md +1233 -1233
  85. package/.claude/agents/v3/pii-detector.md +151 -151
  86. package/.claude/agents/v3/reasoningbank-learner.md +213 -213
  87. package/.claude/agents/v3/security-architect-aidefence.md +410 -410
  88. package/.claude/agents/v3/security-architect.md +867 -867
  89. package/.claude/agents/v3/swarm-memory-manager.md +157 -157
  90. package/.claude/agents/v3/v3-integration-architect.md +205 -205
  91. package/.claude/commands/agents/README.md +50 -50
  92. package/.claude/commands/agents/agent-capabilities.md +140 -140
  93. package/.claude/commands/agents/agent-coordination.md +28 -28
  94. package/.claude/commands/agents/agent-spawning.md +28 -28
  95. package/.claude/commands/agents/agent-types.md +216 -216
  96. package/.claude/commands/agents/health.md +139 -139
  97. package/.claude/commands/agents/list.md +100 -100
  98. package/.claude/commands/agents/logs.md +130 -130
  99. package/.claude/commands/agents/metrics.md +122 -122
  100. package/.claude/commands/agents/pool.md +127 -127
  101. package/.claude/commands/agents/spawn.md +140 -140
  102. package/.claude/commands/agents/status.md +115 -115
  103. package/.claude/commands/agents/stop.md +102 -102
  104. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  105. package/.claude/commands/analysis/README.md +9 -9
  106. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  107. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  108. package/.claude/commands/analysis/performance-report.md +25 -25
  109. package/.claude/commands/analysis/token-efficiency.md +44 -44
  110. package/.claude/commands/analysis/token-usage.md +25 -25
  111. package/.claude/commands/automation/README.md +9 -9
  112. package/.claude/commands/automation/auto-agent.md +122 -122
  113. package/.claude/commands/automation/self-healing.md +105 -105
  114. package/.claude/commands/automation/session-memory.md +89 -89
  115. package/.claude/commands/automation/smart-agents.md +72 -72
  116. package/.claude/commands/automation/smart-spawn.md +25 -25
  117. package/.claude/commands/automation/workflow-select.md +25 -25
  118. package/.claude/commands/claude-flow-help.md +103 -103
  119. package/.claude/commands/claude-flow-memory.md +107 -107
  120. package/.claude/commands/claude-flow-swarm.md +205 -205
  121. package/.claude/commands/coordination/README.md +9 -9
  122. package/.claude/commands/coordination/agent-spawn.md +25 -25
  123. package/.claude/commands/coordination/init.md +44 -44
  124. package/.claude/commands/coordination/orchestrate.md +43 -43
  125. package/.claude/commands/coordination/spawn.md +45 -45
  126. package/.claude/commands/coordination/swarm-init.md +85 -85
  127. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  128. package/.claude/commands/github/README.md +11 -11
  129. package/.claude/commands/github/code-review-swarm.md +513 -513
  130. package/.claude/commands/github/code-review.md +25 -25
  131. package/.claude/commands/github/github-modes.md +146 -146
  132. package/.claude/commands/github/github-swarm.md +121 -121
  133. package/.claude/commands/github/issue-tracker.md +291 -291
  134. package/.claude/commands/github/issue-triage.md +25 -25
  135. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  136. package/.claude/commands/github/pr-enhance.md +26 -26
  137. package/.claude/commands/github/pr-manager.md +169 -169
  138. package/.claude/commands/github/project-board-sync.md +470 -470
  139. package/.claude/commands/github/release-manager.md +339 -339
  140. package/.claude/commands/github/release-swarm.md +543 -543
  141. package/.claude/commands/github/repo-analyze.md +25 -25
  142. package/.claude/commands/github/repo-architect.md +366 -366
  143. package/.claude/commands/github/swarm-issue.md +484 -484
  144. package/.claude/commands/github/swarm-pr.md +287 -287
  145. package/.claude/commands/github/sync-coordinator.md +302 -302
  146. package/.claude/commands/github/workflow-automation.md +441 -441
  147. package/.claude/commands/hive-mind/README.md +17 -17
  148. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  149. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  150. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  151. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  152. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  153. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  154. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  155. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  156. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  157. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  158. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  159. package/.claude/commands/hooks/README.md +11 -11
  160. package/.claude/commands/hooks/overview.md +57 -57
  161. package/.claude/commands/hooks/post-edit.md +117 -117
  162. package/.claude/commands/hooks/post-task.md +112 -112
  163. package/.claude/commands/hooks/pre-edit.md +113 -113
  164. package/.claude/commands/hooks/pre-task.md +111 -111
  165. package/.claude/commands/hooks/session-end.md +118 -118
  166. package/.claude/commands/hooks/setup.md +102 -102
  167. package/.claude/commands/memory/README.md +9 -9
  168. package/.claude/commands/memory/memory-persist.md +25 -25
  169. package/.claude/commands/memory/memory-search.md +25 -25
  170. package/.claude/commands/memory/memory-usage.md +25 -25
  171. package/.claude/commands/memory/neural.md +47 -47
  172. package/.claude/commands/monitoring/README.md +9 -9
  173. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  174. package/.claude/commands/monitoring/agents.md +44 -44
  175. package/.claude/commands/monitoring/real-time-view.md +25 -25
  176. package/.claude/commands/monitoring/status.md +46 -46
  177. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  178. package/.claude/commands/optimization/README.md +9 -9
  179. package/.claude/commands/optimization/auto-topology.md +61 -61
  180. package/.claude/commands/optimization/cache-manage.md +25 -25
  181. package/.claude/commands/optimization/parallel-execute.md +25 -25
  182. package/.claude/commands/optimization/parallel-execution.md +49 -49
  183. package/.claude/commands/optimization/topology-optimize.md +25 -25
  184. package/.claude/commands/pair/README.md +260 -260
  185. package/.claude/commands/pair/commands.md +545 -545
  186. package/.claude/commands/pair/config.md +509 -509
  187. package/.claude/commands/pair/examples.md +511 -511
  188. package/.claude/commands/pair/modes.md +347 -347
  189. package/.claude/commands/pair/session.md +406 -406
  190. package/.claude/commands/pair/start.md +208 -208
  191. package/.claude/commands/sparc/analyzer.md +51 -51
  192. package/.claude/commands/sparc/architect.md +53 -53
  193. package/.claude/commands/sparc/ask.md +97 -97
  194. package/.claude/commands/sparc/batch-executor.md +54 -54
  195. package/.claude/commands/sparc/code.md +89 -89
  196. package/.claude/commands/sparc/coder.md +54 -54
  197. package/.claude/commands/sparc/debug.md +83 -83
  198. package/.claude/commands/sparc/debugger.md +54 -54
  199. package/.claude/commands/sparc/designer.md +53 -53
  200. package/.claude/commands/sparc/devops.md +109 -109
  201. package/.claude/commands/sparc/docs-writer.md +80 -80
  202. package/.claude/commands/sparc/documenter.md +54 -54
  203. package/.claude/commands/sparc/innovator.md +54 -54
  204. package/.claude/commands/sparc/integration.md +83 -83
  205. package/.claude/commands/sparc/mcp.md +117 -117
  206. package/.claude/commands/sparc/memory-manager.md +54 -54
  207. package/.claude/commands/sparc/optimizer.md +54 -54
  208. package/.claude/commands/sparc/orchestrator.md +131 -131
  209. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  210. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  211. package/.claude/commands/sparc/researcher.md +54 -54
  212. package/.claude/commands/sparc/reviewer.md +54 -54
  213. package/.claude/commands/sparc/security-review.md +80 -80
  214. package/.claude/commands/sparc/sparc-modes.md +174 -174
  215. package/.claude/commands/sparc/sparc.md +111 -111
  216. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  217. package/.claude/commands/sparc/supabase-admin.md +348 -348
  218. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  219. package/.claude/commands/sparc/tdd.md +54 -54
  220. package/.claude/commands/sparc/tester.md +54 -54
  221. package/.claude/commands/sparc/tutorial.md +79 -79
  222. package/.claude/commands/sparc/workflow-manager.md +54 -54
  223. package/.claude/commands/sparc.md +166 -166
  224. package/.claude/commands/stream-chain/pipeline.md +120 -120
  225. package/.claude/commands/stream-chain/run.md +69 -69
  226. package/.claude/commands/swarm/README.md +15 -15
  227. package/.claude/commands/swarm/analysis.md +95 -95
  228. package/.claude/commands/swarm/development.md +96 -96
  229. package/.claude/commands/swarm/examples.md +168 -168
  230. package/.claude/commands/swarm/maintenance.md +102 -102
  231. package/.claude/commands/swarm/optimization.md +117 -117
  232. package/.claude/commands/swarm/research.md +136 -136
  233. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  234. package/.claude/commands/swarm/swarm-background.md +8 -8
  235. package/.claude/commands/swarm/swarm-init.md +19 -19
  236. package/.claude/commands/swarm/swarm-modes.md +8 -8
  237. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  238. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  239. package/.claude/commands/swarm/swarm-status.md +8 -8
  240. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  241. package/.claude/commands/swarm/swarm.md +87 -87
  242. package/.claude/commands/swarm/testing.md +131 -131
  243. package/.claude/commands/training/README.md +9 -9
  244. package/.claude/commands/training/model-update.md +25 -25
  245. package/.claude/commands/training/neural-patterns.md +107 -107
  246. package/.claude/commands/training/neural-train.md +75 -75
  247. package/.claude/commands/training/pattern-learn.md +25 -25
  248. package/.claude/commands/training/specialization.md +62 -62
  249. package/.claude/commands/truth/start.md +142 -142
  250. package/.claude/commands/verify/check.md +49 -49
  251. package/.claude/commands/verify/start.md +127 -127
  252. package/.claude/commands/workflows/README.md +9 -9
  253. package/.claude/commands/workflows/development.md +77 -77
  254. package/.claude/commands/workflows/research.md +62 -62
  255. package/.claude/commands/workflows/workflow-create.md +25 -25
  256. package/.claude/commands/workflows/workflow-execute.md +25 -25
  257. package/.claude/commands/workflows/workflow-export.md +25 -25
  258. package/.claude/helpers/README.md +96 -96
  259. package/.claude/helpers/adr-compliance.sh +186 -186
  260. package/.claude/helpers/auto-commit.sh +178 -178
  261. package/.claude/helpers/auto-memory-hook.mjs +368 -368
  262. package/.claude/helpers/checkpoint-manager.sh +251 -251
  263. package/.claude/helpers/daemon-manager.sh +252 -252
  264. package/.claude/helpers/ddd-tracker.sh +144 -144
  265. package/.claude/helpers/github-safe.js +156 -156
  266. package/.claude/helpers/github-setup.sh +45 -45
  267. package/.claude/helpers/guidance-hook.sh +13 -13
  268. package/.claude/helpers/guidance-hooks.sh +102 -102
  269. package/.claude/helpers/health-monitor.sh +108 -108
  270. package/.claude/helpers/hook-handler.cjs +286 -286
  271. package/.claude/helpers/intelligence.cjs +1031 -1031
  272. package/.claude/helpers/learning-hooks.sh +329 -329
  273. package/.claude/helpers/learning-optimizer.sh +127 -127
  274. package/.claude/helpers/learning-service.mjs +1144 -1144
  275. package/.claude/helpers/memory.js +83 -83
  276. package/.claude/helpers/metrics-db.mjs +488 -488
  277. package/.claude/helpers/pattern-consolidator.sh +86 -86
  278. package/.claude/helpers/perf-worker.sh +160 -160
  279. package/.claude/helpers/post-commit +16 -16
  280. package/.claude/helpers/pre-commit +26 -26
  281. package/.claude/helpers/quick-start.sh +19 -19
  282. package/.claude/helpers/router.js +105 -105
  283. package/.claude/helpers/security-scanner.sh +127 -127
  284. package/.claude/helpers/session.js +157 -157
  285. package/.claude/helpers/setup-mcp.sh +18 -18
  286. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  287. package/.claude/helpers/statusline-hook.sh +21 -21
  288. package/.claude/helpers/statusline.cjs +604 -604
  289. package/.claude/helpers/statusline.js +352 -352
  290. package/.claude/helpers/swarm-comms.sh +353 -353
  291. package/.claude/helpers/swarm-hooks.sh +761 -761
  292. package/.claude/helpers/swarm-monitor.sh +210 -210
  293. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  294. package/.claude/helpers/update-v3-progress.sh +165 -165
  295. package/.claude/helpers/v3-quick-status.sh +57 -57
  296. package/.claude/helpers/v3.sh +110 -110
  297. package/.claude/helpers/validate-v3-config.sh +215 -215
  298. package/.claude/helpers/worker-manager.sh +170 -170
  299. package/.claude/settings.json +182 -182
  300. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  301. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  302. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  303. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  304. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  305. package/.claude/skills/browser/SKILL.md +204 -204
  306. package/.claude/skills/dual-mode/README.md +71 -71
  307. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  308. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  309. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  310. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  311. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  312. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  313. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  314. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  315. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  316. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  317. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  318. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  319. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  320. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  321. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  322. package/.claude/skills/skill-builder/SKILL.md +910 -910
  323. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  324. package/.claude/skills/stream-chain/SKILL.md +560 -560
  325. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  326. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  327. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  328. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  329. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  330. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  331. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  332. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  333. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  334. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  335. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  336. package/.claude/skills/verification-quality/SKILL.md +691 -691
  337. package/README.md +412 -412
  338. package/bin/cli.js +314 -314
  339. package/bin/mcp-server.js +224 -224
  340. package/bin/preinstall.cjs +2 -2
  341. package/dist/src/benchmarks/capability-tasks.d.ts +126 -0
  342. package/dist/src/benchmarks/capability-tasks.d.ts.map +1 -0
  343. package/dist/src/benchmarks/capability-tasks.js +147 -0
  344. package/dist/src/benchmarks/capability-tasks.js.map +1 -0
  345. package/dist/src/benchmarks/gaia-agent-contrastive.d.ts +53 -0
  346. package/dist/src/benchmarks/gaia-agent-contrastive.d.ts.map +1 -0
  347. package/dist/src/benchmarks/gaia-agent-contrastive.js +177 -0
  348. package/dist/src/benchmarks/gaia-agent-contrastive.js.map +1 -0
  349. package/dist/src/benchmarks/gaia-agent-gemini.d.ts +51 -0
  350. package/dist/src/benchmarks/gaia-agent-gemini.d.ts.map +1 -0
  351. package/dist/src/benchmarks/gaia-agent-gemini.js +352 -0
  352. package/dist/src/benchmarks/gaia-agent-gemini.js.map +1 -0
  353. package/dist/src/benchmarks/gaia-claude-p.d.ts +105 -0
  354. package/dist/src/benchmarks/gaia-claude-p.d.ts.map +1 -0
  355. package/dist/src/benchmarks/gaia-claude-p.js +269 -0
  356. package/dist/src/benchmarks/gaia-claude-p.js.map +1 -0
  357. package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts +20 -0
  358. package/dist/src/benchmarks/gaia-claude-p.smoke.d.ts.map +1 -0
  359. package/dist/src/benchmarks/gaia-claude-p.smoke.js +168 -0
  360. package/dist/src/benchmarks/gaia-claude-p.smoke.js.map +1 -0
  361. package/dist/src/benchmarks/gaia-codeagent-runner.py +556 -0
  362. package/dist/src/benchmarks/gaia-codeagent.d.ts +129 -0
  363. package/dist/src/benchmarks/gaia-codeagent.d.ts.map +1 -0
  364. package/dist/src/benchmarks/gaia-codeagent.js +590 -0
  365. package/dist/src/benchmarks/gaia-codeagent.js.map +1 -0
  366. package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts +33 -0
  367. package/dist/src/benchmarks/gaia-codeagent.smoke.d.ts.map +1 -0
  368. package/dist/src/benchmarks/gaia-codeagent.smoke.js +241 -0
  369. package/dist/src/benchmarks/gaia-codeagent.smoke.js.map +1 -0
  370. package/dist/src/benchmarks/gaia-critic.js +24 -24
  371. package/dist/src/benchmarks/gaia-dag-pilot.d.ts +22 -0
  372. package/dist/src/benchmarks/gaia-dag-pilot.d.ts.map +1 -0
  373. package/dist/src/benchmarks/gaia-dag-pilot.js +158 -0
  374. package/dist/src/benchmarks/gaia-dag-pilot.js.map +1 -0
  375. package/dist/src/benchmarks/gaia-dag.d.ts +110 -0
  376. package/dist/src/benchmarks/gaia-dag.d.ts.map +1 -0
  377. package/dist/src/benchmarks/gaia-dag.js +658 -0
  378. package/dist/src/benchmarks/gaia-dag.js.map +1 -0
  379. package/dist/src/benchmarks/gaia-dag.smoke.d.ts +21 -0
  380. package/dist/src/benchmarks/gaia-dag.smoke.d.ts.map +1 -0
  381. package/dist/src/benchmarks/gaia-dag.smoke.js +290 -0
  382. package/dist/src/benchmarks/gaia-dag.smoke.js.map +1 -0
  383. package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts +17 -0
  384. package/dist/src/benchmarks/gaia-ensemble-pilot.d.ts.map +1 -0
  385. package/dist/src/benchmarks/gaia-ensemble-pilot.js +106 -0
  386. package/dist/src/benchmarks/gaia-ensemble-pilot.js.map +1 -0
  387. package/dist/src/benchmarks/gaia-ensemble.d.ts +103 -0
  388. package/dist/src/benchmarks/gaia-ensemble.d.ts.map +1 -0
  389. package/dist/src/benchmarks/gaia-ensemble.js +462 -0
  390. package/dist/src/benchmarks/gaia-ensemble.js.map +1 -0
  391. package/dist/src/benchmarks/gaia-gemini-pilot.d.ts +17 -0
  392. package/dist/src/benchmarks/gaia-gemini-pilot.d.ts.map +1 -0
  393. package/dist/src/benchmarks/gaia-gemini-pilot.js +168 -0
  394. package/dist/src/benchmarks/gaia-gemini-pilot.js.map +1 -0
  395. package/dist/src/benchmarks/gaia-mode-router.d.ts +67 -0
  396. package/dist/src/benchmarks/gaia-mode-router.d.ts.map +1 -0
  397. package/dist/src/benchmarks/gaia-mode-router.js +126 -0
  398. package/dist/src/benchmarks/gaia-mode-router.js.map +1 -0
  399. package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts +15 -0
  400. package/dist/src/benchmarks/gaia-mode-router.smoke.d.ts.map +1 -0
  401. package/dist/src/benchmarks/gaia-mode-router.smoke.js +131 -0
  402. package/dist/src/benchmarks/gaia-mode-router.smoke.js.map +1 -0
  403. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts +24 -0
  404. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.d.ts.map +1 -0
  405. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js +276 -0
  406. package/dist/src/benchmarks/gaia-tools/grounded_query.smoke.js.map +1 -0
  407. package/dist/src/benchmarks/gaia-tools/image_describe.d.ts +45 -0
  408. package/dist/src/benchmarks/gaia-tools/image_describe.d.ts.map +1 -0
  409. package/dist/src/benchmarks/gaia-tools/image_describe.js +222 -0
  410. package/dist/src/benchmarks/gaia-tools/image_describe.js.map +1 -0
  411. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts +24 -0
  412. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.d.ts.map +1 -0
  413. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js +169 -0
  414. package/dist/src/benchmarks/gaia-tools/image_describe.smoke.js.map +1 -0
  415. package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts +27 -0
  416. package/dist/src/benchmarks/gaia-tools/pdf_read.d.ts.map +1 -0
  417. package/dist/src/benchmarks/gaia-tools/pdf_read.js +226 -0
  418. package/dist/src/benchmarks/gaia-tools/pdf_read.js.map +1 -0
  419. package/dist/src/benchmarks/gaia-tools/python_exec.d.ts +31 -0
  420. package/dist/src/benchmarks/gaia-tools/python_exec.d.ts.map +1 -0
  421. package/dist/src/benchmarks/gaia-tools/python_exec.js +94 -0
  422. package/dist/src/benchmarks/gaia-tools/python_exec.js.map +1 -0
  423. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts +13 -0
  424. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.d.ts.map +1 -0
  425. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js +98 -0
  426. package/dist/src/benchmarks/gaia-tools/python_exec.smoke.js.map +1 -0
  427. package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts +52 -0
  428. package/dist/src/benchmarks/gaia-tools/visit_webpage.d.ts.map +1 -0
  429. package/dist/src/benchmarks/gaia-tools/visit_webpage.js +304 -0
  430. package/dist/src/benchmarks/gaia-tools/visit_webpage.js.map +1 -0
  431. package/dist/src/benchmarks/gaia-tools/web_browse.d.ts +61 -0
  432. package/dist/src/benchmarks/gaia-tools/web_browse.d.ts.map +1 -0
  433. package/dist/src/benchmarks/gaia-tools/web_browse.js +217 -0
  434. package/dist/src/benchmarks/gaia-tools/web_browse.js.map +1 -0
  435. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts +26 -0
  436. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.d.ts.map +1 -0
  437. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js +152 -0
  438. package/dist/src/benchmarks/gaia-tools/web_browse.smoke.js.map +1 -0
  439. package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts +24 -0
  440. package/dist/src/benchmarks/gaia-tools/web_search.smoke.d.ts.map +1 -0
  441. package/dist/src/benchmarks/gaia-tools/web_search.smoke.js +311 -0
  442. package/dist/src/benchmarks/gaia-tools/web_search.smoke.js.map +1 -0
  443. package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts +25 -0
  444. package/dist/src/benchmarks/gaia-visit-webpage.smoke.d.ts.map +1 -0
  445. package/dist/src/benchmarks/gaia-visit-webpage.smoke.js +304 -0
  446. package/dist/src/benchmarks/gaia-visit-webpage.smoke.js.map +1 -0
  447. package/dist/src/commands/completions.js +409 -409
  448. package/dist/src/commands/daemon.js +44 -44
  449. package/dist/src/commands/embeddings.js +26 -26
  450. package/dist/src/commands/hive-mind.js +97 -97
  451. package/dist/src/commands/hooks.js +9 -9
  452. package/dist/src/commands/neural.d.ts.map +1 -1
  453. package/dist/src/commands/neural.js +2351 -1
  454. package/dist/src/commands/neural.js.map +1 -1
  455. package/dist/src/commands/performance-capability.d.ts +30 -0
  456. package/dist/src/commands/performance-capability.d.ts.map +1 -0
  457. package/dist/src/commands/performance-capability.js +349 -0
  458. package/dist/src/commands/performance-capability.js.map +1 -0
  459. package/dist/src/commands/ruvector/backup.js +23 -23
  460. package/dist/src/commands/ruvector/benchmark.js +31 -31
  461. package/dist/src/commands/ruvector/import.js +14 -14
  462. package/dist/src/commands/ruvector/init.js +115 -115
  463. package/dist/src/commands/ruvector/migrate.js +99 -99
  464. package/dist/src/commands/ruvector/optimize.js +51 -51
  465. package/dist/src/commands/ruvector/setup.js +624 -624
  466. package/dist/src/commands/ruvector/status.js +38 -38
  467. package/dist/src/commands/swarm.d.ts.map +1 -1
  468. package/dist/src/commands/swarm.js +5 -1
  469. package/dist/src/commands/swarm.js.map +1 -1
  470. package/dist/src/init/claudemd-generator.js +231 -231
  471. package/dist/src/init/executor.d.ts.map +1 -1
  472. package/dist/src/init/executor.js +487 -455
  473. package/dist/src/init/executor.js.map +1 -1
  474. package/dist/src/init/helpers-generator.js +727 -727
  475. package/dist/src/init/statusline-generator.js +717 -717
  476. package/dist/src/mcp-tools/agent-execute-core.d.ts +23 -1
  477. package/dist/src/mcp-tools/agent-execute-core.d.ts.map +1 -1
  478. package/dist/src/mcp-tools/agent-execute-core.js +136 -9
  479. package/dist/src/mcp-tools/agent-execute-core.js.map +1 -1
  480. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  481. package/dist/src/mcp-tools/agent-tools.js +48 -4
  482. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  483. package/dist/src/mcp-tools/agentdb-tools.js +15 -15
  484. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  485. package/dist/src/mcp-tools/hooks-tools.js +196 -0
  486. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  487. package/dist/src/memory/graph-edge-writer.js +18 -18
  488. package/dist/src/memory/memory-bridge.js +84 -84
  489. package/dist/src/memory/memory-initializer.js +393 -393
  490. package/dist/src/memory/rabitq-index.js +5 -5
  491. package/dist/src/runtime/headless.js +28 -28
  492. package/dist/src/ruvector/enhanced-model-router.d.ts +5 -0
  493. package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -1
  494. package/dist/src/ruvector/enhanced-model-router.js +18 -1
  495. package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
  496. package/dist/src/ruvector/model-prices.d.ts +50 -0
  497. package/dist/src/ruvector/model-prices.d.ts.map +1 -0
  498. package/dist/src/ruvector/model-prices.js +72 -0
  499. package/dist/src/ruvector/model-prices.js.map +1 -0
  500. package/dist/src/ruvector/model-router.d.ts +147 -8
  501. package/dist/src/ruvector/model-router.d.ts.map +1 -1
  502. package/dist/src/ruvector/model-router.js +418 -18
  503. package/dist/src/ruvector/model-router.js.map +1 -1
  504. package/dist/src/ruvector/neural-router.d.ts +172 -39
  505. package/dist/src/ruvector/neural-router.d.ts.map +1 -1
  506. package/dist/src/ruvector/neural-router.js +780 -91
  507. package/dist/src/ruvector/neural-router.js.map +1 -1
  508. package/dist/src/ruvector/router-calibrator.d.ts +65 -0
  509. package/dist/src/ruvector/router-calibrator.d.ts.map +1 -0
  510. package/dist/src/ruvector/router-calibrator.js +120 -0
  511. package/dist/src/ruvector/router-calibrator.js.map +1 -0
  512. package/dist/src/ruvector/router-trajectory.d.ts +137 -45
  513. package/dist/src/ruvector/router-trajectory.d.ts.map +1 -1
  514. package/dist/src/ruvector/router-trajectory.js +226 -63
  515. package/dist/src/ruvector/router-trajectory.js.map +1 -1
  516. package/dist/src/ruvector/task-embedder.d.ts +56 -0
  517. package/dist/src/ruvector/task-embedder.d.ts.map +1 -0
  518. package/dist/src/ruvector/task-embedder.js +237 -0
  519. package/dist/src/ruvector/task-embedder.js.map +1 -0
  520. package/dist/src/services/container-worker-pool.d.ts +8 -1
  521. package/dist/src/services/container-worker-pool.d.ts.map +1 -1
  522. package/dist/src/services/container-worker-pool.js +9 -3
  523. package/dist/src/services/container-worker-pool.js.map +1 -1
  524. package/dist/src/services/headless-worker-executor.js +84 -84
  525. package/dist/src/transfer/deploy-seraphine.js +23 -23
  526. package/dist/tsconfig.tsbuildinfo +1 -1
  527. package/package.json +136 -134
  528. package/scripts/beir-bootstrap-significance.mjs +162 -162
  529. package/scripts/bench-rvagent.mjs +312 -312
  530. package/scripts/benchmark-codemods.mjs +127 -127
  531. package/scripts/benchmark-cross-repo.mjs +206 -206
  532. package/scripts/benchmark-pretrained-retrieval.mjs +305 -305
  533. package/scripts/benchmark-self-learning.mjs +241 -241
  534. package/scripts/benchmark-trajectory-mrr.mjs +191 -191
  535. package/scripts/deploy-ipfs-node.sh +153 -153
  536. package/scripts/grid-search-retrieval.mjs +216 -216
  537. package/scripts/postinstall.cjs +153 -153
  538. package/scripts/pretrain-from-github.mjs +358 -358
  539. package/scripts/publish-registry.ts +345 -345
  540. package/scripts/publish.sh +57 -57
  541. package/scripts/run-beir-bge.mjs +324 -324
  542. package/scripts/run-beir-hybrid.mjs +261 -261
  543. package/scripts/run-beir-lucene-bm25.mjs +154 -154
  544. package/scripts/run-beir-nfcorpus.mjs +231 -231
  545. package/scripts/run-beir-rrf-ablation.mjs +221 -221
  546. package/scripts/setup-ipfs-registry.md +366 -366
  547. package/dist/src/ruvector/flash-attention.d.ts +0 -195
  548. package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
  549. package/dist/src/ruvector/flash-attention.js +0 -643
  550. package/dist/src/ruvector/flash-attention.js.map +0 -1
  551. package/dist/src/ruvector/moe-router.d.ts +0 -206
  552. package/dist/src/ruvector/moe-router.d.ts.map +0 -1
  553. package/dist/src/ruvector/moe-router.js +0 -626
  554. package/dist/src/ruvector/moe-router.js.map +0 -1
  555. package/dist/src/services/event-stream.d.ts +0 -25
  556. package/dist/src/services/event-stream.js +0 -27
  557. package/dist/src/services/loop-worker-runner.d.ts +0 -16
  558. package/dist/src/services/loop-worker-runner.js +0 -34
  559. package/dist/src/services/runtime-capabilities.d.ts +0 -22
  560. package/dist/src/services/runtime-capabilities.js +0 -45
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Smoke tests for image_describe — ADR-133-PR5
3
+ *
4
+ * Run with:
5
+ * cd v3/@claude-flow/cli
6
+ * npx tsx src/benchmarks/gaia-tools/image_describe.smoke.ts
7
+ *
8
+ * Tests:
9
+ * 1. URL image (Wikipedia logo PNG) — description contains 'wiki' or 'logo' or 'W'
10
+ * 2. Missing API key — returns error string, does not crash
11
+ * 3. Non-existent local file — returns error string, does not crash
12
+ * 4. Invalid source (empty) — throws (caught by test harness)
13
+ *
14
+ * If ANTHROPIC_API_KEY is not set and gcloud is not available, Test 1 is
15
+ * marked SKIP (not FAIL) — the tool's graceful error path is validated in
16
+ * Test 2 instead.
17
+ *
18
+ * Cost estimate: ~$0.001 per live API call (Haiku vision, single small image).
19
+ * Total smoke cost: ≤$0.001 (only Test 1 makes a live call).
20
+ *
21
+ * Refs: ADR-133, #2156
22
+ */
23
+ import { createImageDescribeTool } from './image_describe.js';
24
+ async function runTest(name, fn) {
25
+ try {
26
+ await fn();
27
+ return { name, status: 'PASS', message: 'OK' };
28
+ }
29
+ catch (e) {
30
+ return { name, status: 'FAIL', message: String(e) };
31
+ }
32
+ }
33
+ function assert(condition, msg) {
34
+ if (!condition)
35
+ throw new Error(`Assertion failed: ${msg}`);
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Tests
39
+ // ---------------------------------------------------------------------------
40
+ // Test 1: Live API call — describe Wikipedia logo via URL.
41
+ // SKIP if no API key is available (avoids failing in CI without credentials).
42
+ async function testWikipediaLogo() {
43
+ const hasApiKey = (process.env.ANTHROPIC_API_KEY ?? '').trim().length > 0;
44
+ if (!hasApiKey) {
45
+ // Try gcloud as a secondary check — if both are unavailable, skip.
46
+ let gcpAvailable = false;
47
+ try {
48
+ const { execSync } = await import('node:child_process');
49
+ const key = execSync('gcloud secrets versions access latest --secret=ANTHROPIC_API_KEY 2>/dev/null', { encoding: 'utf-8', timeout: 5_000 }).trim();
50
+ gcpAvailable = key.length > 0;
51
+ }
52
+ catch {
53
+ gcpAvailable = false;
54
+ }
55
+ if (!gcpAvailable) {
56
+ // Signal SKIP by throwing a message the runner recognises.
57
+ throw new Error('SKIP: ANTHROPIC_API_KEY not available — set env var to run live tests');
58
+ }
59
+ }
60
+ const tool = createImageDescribeTool();
61
+ const out = await tool.execute({
62
+ // Small, stable public PNG — Wikipedia's logo.
63
+ source: 'https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Wikipedia-logo-v2.svg/200px-Wikipedia-logo-v2.svg.png',
64
+ prompt: 'Describe the logo in one sentence.',
65
+ });
66
+ // Accept a graceful API error (e.g., rate limit) rather than failing the smoke.
67
+ if (out.startsWith('[image_describe error]')) {
68
+ // Surface as a warning but not a hard failure for CI without credentials.
69
+ console.log(` [warn] API call returned error: ${out}`);
70
+ return;
71
+ }
72
+ assert(out.includes('[image_describe:'), `Expected model tag in output, got:\n${out.slice(0, 300)}`);
73
+ const lowerOut = out.toLowerCase();
74
+ assert(lowerOut.includes('wiki') ||
75
+ lowerOut.includes('logo') ||
76
+ lowerOut.includes('globe') ||
77
+ lowerOut.includes('puzzle') ||
78
+ lowerOut.includes('encyclopedia'), `Expected description to mention logo/wiki/globe, got:\n${out.slice(0, 300)}`);
79
+ }
80
+ // Test 2: No API key supplied → returns error string without crashing.
81
+ async function testMissingApiKey() {
82
+ // Temporarily shadow the env var to simulate missing key.
83
+ const savedKey = process.env.ANTHROPIC_API_KEY;
84
+ delete process.env.ANTHROPIC_API_KEY;
85
+ try {
86
+ // Create tool with a dummy key that will be rejected by the API — but
87
+ // the resolve step won't throw because we pass an explicit (invalid) key.
88
+ // We want to confirm that a missing key returns an error string, not an
89
+ // exception. To test the "no key at all" path we must clear env AND pass
90
+ // no key.
91
+ // Use a blank API key — resolveAnthropicApiKey should throw internally,
92
+ // which execute() catches and returns as a string.
93
+ const tool = createImageDescribeTool({ apiKey: '' });
94
+ const out = await tool.execute({
95
+ source: 'https://example.com/image.png',
96
+ prompt: 'Describe.',
97
+ });
98
+ assert(typeof out === 'string', 'Expected string output when key is missing');
99
+ // Either an error message or a valid description — both are acceptable.
100
+ // The key assertion is that execute() did NOT throw.
101
+ }
102
+ finally {
103
+ if (savedKey !== undefined)
104
+ process.env.ANTHROPIC_API_KEY = savedKey;
105
+ }
106
+ }
107
+ // Test 3: Non-existent local file → returns error string without crashing.
108
+ async function testMissingLocalFile() {
109
+ const tool = createImageDescribeTool();
110
+ const out = await tool.execute({
111
+ source: '/tmp/__gaia_nonexistent_image_abc123.png',
112
+ });
113
+ assert(typeof out === 'string', 'Expected string output for missing file');
114
+ assert(out.startsWith('[image_describe error]'), `Expected error prefix for missing file, got:\n${out}`);
115
+ assert(out.includes('not found') || out.includes('Cannot read'), `Expected "not found" or "Cannot read" in error, got:\n${out}`);
116
+ }
117
+ // Test 4: Empty source → throws (caller contract violation).
118
+ async function testEmptySource() {
119
+ const tool = createImageDescribeTool();
120
+ let threw = false;
121
+ try {
122
+ await tool.execute({ source: '' });
123
+ }
124
+ catch {
125
+ threw = true;
126
+ }
127
+ assert(threw, 'Expected execute() to throw for empty source');
128
+ }
129
+ // ---------------------------------------------------------------------------
130
+ // Runner
131
+ // ---------------------------------------------------------------------------
132
+ async function main() {
133
+ console.log('image_describe smoke tests — ADR-133-PR5\n');
134
+ const tests = [
135
+ runTest('Test 1: URL image — Wikipedia logo (live API)', testWikipediaLogo),
136
+ runTest('Test 2: Missing API key — graceful error string', testMissingApiKey),
137
+ runTest('Test 3: Non-existent local file — graceful error', testMissingLocalFile),
138
+ runTest('Test 4: Empty source — throws', testEmptySource),
139
+ ];
140
+ const results = await Promise.all(tests);
141
+ let passed = 0;
142
+ let failed = 0;
143
+ let skipped = 0;
144
+ for (const r of results) {
145
+ // Tests that throw 'SKIP:' are shown as skipped.
146
+ const isSkip = r.status === 'FAIL' && r.message.startsWith('SKIP:');
147
+ const displayStatus = isSkip ? 'SKIP' : r.status;
148
+ console.log(`[${displayStatus}] ${r.name}`);
149
+ if (displayStatus !== 'PASS') {
150
+ console.log(` ${r.message.slice(0, 300)}`);
151
+ }
152
+ if (isSkip)
153
+ skipped++;
154
+ else if (r.status === 'PASS')
155
+ passed++;
156
+ else
157
+ failed++;
158
+ }
159
+ console.log(`\nResults: ${passed} passed, ${failed} failed, ${skipped} skipped`);
160
+ console.log(`Cost estimate: ≤$0.001 per run (single Haiku vision call for Test 1)`);
161
+ if (failed > 0) {
162
+ process.exit(1);
163
+ }
164
+ }
165
+ main().catch((e) => {
166
+ console.error('Fatal:', e);
167
+ process.exit(1);
168
+ });
169
+ //# sourceMappingURL=image_describe.smoke.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image_describe.smoke.js","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/image_describe.smoke.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * GAIA Tool: pdf_read — ADR-138 iter 54
3
+ *
4
+ * Extracts text content from a PDF file using a Python subprocess.
5
+ * GAIA L1 has ~20-30% of questions with PDF attachments; without this,
6
+ * ruflo is functionally blind on those questions.
7
+ *
8
+ * Extraction chain (tries in order, returns first success):
9
+ * 1. pdfminer.six — best quality, handles most text PDFs
10
+ * 2. pdfplumber — good alternative, especially for tables
11
+ * 3. PyPDF2/pypdf — fallback, lower quality but widely available
12
+ * 4. pdftotext — CLI tool (poppler-utils), if installed
13
+ * 5. Stub — returns a note that extraction failed
14
+ *
15
+ * For image-only (scanned) PDFs, all text extractors return empty.
16
+ * In that case we return a note so the agent can try describe_image.
17
+ *
18
+ * Refs: ADR-138, #2156, iter 54
19
+ */
20
+ import { GaiaTool, ToolDefinition } from './types.js';
21
+ export declare class PdfReadTool implements GaiaTool {
22
+ readonly name = "pdf_read";
23
+ readonly definition: ToolDefinition;
24
+ execute(input: Record<string, unknown>): Promise<string>;
25
+ }
26
+ export declare function createPdfReadTool(): PdfReadTool;
27
+ //# sourceMappingURL=pdf_read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf_read.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/pdf_read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwJtD,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,IAAI,cAAc;IAE3B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAkBjC;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAsC/D;AAMD,wBAAgB,iBAAiB,IAAI,WAAW,CAE/C"}
@@ -0,0 +1,226 @@
1
+ /**
2
+ * GAIA Tool: pdf_read — ADR-138 iter 54
3
+ *
4
+ * Extracts text content from a PDF file using a Python subprocess.
5
+ * GAIA L1 has ~20-30% of questions with PDF attachments; without this,
6
+ * ruflo is functionally blind on those questions.
7
+ *
8
+ * Extraction chain (tries in order, returns first success):
9
+ * 1. pdfminer.six — best quality, handles most text PDFs
10
+ * 2. pdfplumber — good alternative, especially for tables
11
+ * 3. PyPDF2/pypdf — fallback, lower quality but widely available
12
+ * 4. pdftotext — CLI tool (poppler-utils), if installed
13
+ * 5. Stub — returns a note that extraction failed
14
+ *
15
+ * For image-only (scanned) PDFs, all text extractors return empty.
16
+ * In that case we return a note so the agent can try describe_image.
17
+ *
18
+ * Refs: ADR-138, #2156, iter 54
19
+ */
20
+ import { execFileSync } from 'node:child_process';
21
+ import * as path from 'node:path';
22
+ import * as fs from 'node:fs';
23
+ // ---------------------------------------------------------------------------
24
+ // Constants
25
+ // ---------------------------------------------------------------------------
26
+ const EXEC_TIMEOUT_MS = 30_000;
27
+ const MAX_OUTPUT_CHARS = 8_000;
28
+ // ---------------------------------------------------------------------------
29
+ // Extraction helpers
30
+ // ---------------------------------------------------------------------------
31
+ /**
32
+ * Try to extract PDF text using Python pdfminer.six (best quality).
33
+ */
34
+ function extractViaPdfminer(filePath) {
35
+ const script = `
36
+ import sys
37
+ try:
38
+ from pdfminer.high_level import extract_text
39
+ text = extract_text(sys.argv[1])
40
+ print(text[:12000] if text else '')
41
+ except ImportError:
42
+ print('[pdfminer_not_installed]')
43
+ except Exception as e:
44
+ print('[pdfminer_error:' + str(e) + ']')
45
+ `.trim();
46
+ try {
47
+ const out = execFileSync('python3', ['-', filePath], {
48
+ input: script,
49
+ encoding: 'utf-8',
50
+ timeout: EXEC_TIMEOUT_MS,
51
+ }).trim();
52
+ if (out && !out.startsWith('[pdfminer_not_installed]') && !out.startsWith('[pdfminer_error:')) {
53
+ return out;
54
+ }
55
+ }
56
+ catch { /* fall through */ }
57
+ return '';
58
+ }
59
+ /**
60
+ * Try to extract PDF text using pdfplumber (good for tables).
61
+ */
62
+ function extractViaPdfplumber(filePath) {
63
+ const script = `
64
+ import sys
65
+ try:
66
+ import pdfplumber
67
+ with pdfplumber.open(sys.argv[1]) as pdf:
68
+ texts = []
69
+ for page in pdf.pages:
70
+ t = page.extract_text()
71
+ if t:
72
+ texts.append(t)
73
+ print('\\n\\n'.join(texts)[:12000])
74
+ except ImportError:
75
+ print('[pdfplumber_not_installed]')
76
+ except Exception as e:
77
+ print('[pdfplumber_error:' + str(e) + ']')
78
+ `.trim();
79
+ try {
80
+ const out = execFileSync('python3', ['-', filePath], {
81
+ input: script,
82
+ encoding: 'utf-8',
83
+ timeout: EXEC_TIMEOUT_MS,
84
+ }).trim();
85
+ if (out && !out.startsWith('[pdfplumber_not_installed]') && !out.startsWith('[pdfplumber_error:')) {
86
+ return out;
87
+ }
88
+ }
89
+ catch { /* fall through */ }
90
+ return '';
91
+ }
92
+ /**
93
+ * Try to extract PDF text using pypdf (widely available, lower quality).
94
+ */
95
+ function extractViaPypdf(filePath) {
96
+ const script = `
97
+ import sys
98
+ try:
99
+ try:
100
+ import pypdf as pdf_lib
101
+ except ImportError:
102
+ import PyPDF2 as pdf_lib
103
+ with open(sys.argv[1], 'rb') as f:
104
+ reader = pdf_lib.PdfReader(f)
105
+ texts = []
106
+ for page in reader.pages:
107
+ t = page.extract_text()
108
+ if t:
109
+ texts.append(t)
110
+ print('\\n\\n'.join(texts)[:12000])
111
+ except ImportError:
112
+ print('[pypdf_not_installed]')
113
+ except Exception as e:
114
+ print('[pypdf_error:' + str(e) + ']')
115
+ `.trim();
116
+ try {
117
+ const out = execFileSync('python3', ['-', filePath], {
118
+ input: script,
119
+ encoding: 'utf-8',
120
+ timeout: EXEC_TIMEOUT_MS,
121
+ }).trim();
122
+ if (out && !out.startsWith('[pypdf_not_installed]') && !out.startsWith('[pypdf_error:')) {
123
+ return out;
124
+ }
125
+ }
126
+ catch { /* fall through */ }
127
+ return '';
128
+ }
129
+ /**
130
+ * Try to extract PDF text using the `pdftotext` CLI tool (poppler-utils).
131
+ */
132
+ function extractViaPdftotext(filePath) {
133
+ try {
134
+ const out = execFileSync('pdftotext', [filePath, '-'], {
135
+ encoding: 'utf-8',
136
+ timeout: EXEC_TIMEOUT_MS,
137
+ }).trim();
138
+ return out.slice(0, 12000);
139
+ }
140
+ catch { /* fall through */ }
141
+ return '';
142
+ }
143
+ // ---------------------------------------------------------------------------
144
+ // Path validation (mirrors file_read.ts)
145
+ // ---------------------------------------------------------------------------
146
+ function validatePdfPath(filePath) {
147
+ if (!filePath || typeof filePath !== 'string') {
148
+ throw new Error('pdf_read: `path` must be a non-empty string.');
149
+ }
150
+ if (!path.isAbsolute(filePath)) {
151
+ throw new Error(`pdf_read: path must be absolute. Got: "${filePath}".`);
152
+ }
153
+ if (filePath.includes('\0')) {
154
+ throw new Error('pdf_read: path contains null byte — rejected.');
155
+ }
156
+ const ext = path.extname(filePath).toLowerCase();
157
+ if (ext !== '.pdf') {
158
+ throw new Error(`pdf_read: expected a .pdf file, got extension "${ext}". Use file_read for other formats.`);
159
+ }
160
+ }
161
+ // ---------------------------------------------------------------------------
162
+ // GaiaTool implementation
163
+ // ---------------------------------------------------------------------------
164
+ export class PdfReadTool {
165
+ name = 'pdf_read';
166
+ definition = {
167
+ name: 'pdf_read',
168
+ description: 'Extract text content from a PDF file. ' +
169
+ 'Path must be absolute. ' +
170
+ 'Tries pdfminer.six, pdfplumber, pypdf, and pdftotext in order. ' +
171
+ 'Returns extracted text or a note if the PDF is image-only (scanned). ' +
172
+ `Output truncated to ${MAX_OUTPUT_CHARS} characters.`,
173
+ input_schema: {
174
+ type: 'object',
175
+ properties: {
176
+ path: {
177
+ type: 'string',
178
+ description: 'Absolute path to the PDF file.',
179
+ },
180
+ },
181
+ required: ['path'],
182
+ },
183
+ };
184
+ async execute(input) {
185
+ const filePath = String(input['path'] ?? '').trim();
186
+ validatePdfPath(filePath);
187
+ // Check existence
188
+ try {
189
+ const stat = fs.statSync(filePath);
190
+ if (!stat.isFile())
191
+ throw new Error(`pdf_read: "${filePath}" is not a regular file.`);
192
+ }
193
+ catch (e) {
194
+ const err = e;
195
+ if (err.code === 'ENOENT')
196
+ throw new Error(`pdf_read: file not found: ${filePath}`);
197
+ throw e;
198
+ }
199
+ const filename = path.basename(filePath);
200
+ // Try extractors in order
201
+ let text = extractViaPdfminer(filePath);
202
+ if (!text)
203
+ text = extractViaPdfplumber(filePath);
204
+ if (!text)
205
+ text = extractViaPypdf(filePath);
206
+ if (!text)
207
+ text = extractViaPdftotext(filePath);
208
+ if (!text || text.length < 20) {
209
+ return (`[PDF: ${filename}]\n` +
210
+ `Text extraction returned no content. This may be a scanned/image-only PDF.\n` +
211
+ `If the PDF contains images, consider using describe_image on specific pages.\n` +
212
+ `File: ${filePath}`);
213
+ }
214
+ const truncated = text.length > MAX_OUTPUT_CHARS;
215
+ const output = text.slice(0, MAX_OUTPUT_CHARS);
216
+ return (`[PDF: ${filename}]\n\n${output}` +
217
+ (truncated ? `\n\n[... truncated at ${MAX_OUTPUT_CHARS} chars ...]` : ''));
218
+ }
219
+ }
220
+ // ---------------------------------------------------------------------------
221
+ // Convenience factory
222
+ // ---------------------------------------------------------------------------
223
+ export function createPdfReadTool() {
224
+ return new PdfReadTool();
225
+ }
226
+ //# sourceMappingURL=pdf_read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf_read.js","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/pdf_read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * GAIA Tool: python_exec — DAG actor catalogue (iter-65 Fix 1)
3
+ *
4
+ * Executes a Python script in a sandboxed subprocess and returns stdout.
5
+ * Designed for use by DAG actors that need to simulate probabilities,
6
+ * run numeric computations, or process data programmatically.
7
+ *
8
+ * Security:
9
+ * - Code is passed via stdin (not shell args) to avoid injection.
10
+ * - Hard timeout: 30 seconds.
11
+ * - No network access inside the script (subprocess environment is the
12
+ * same user-level Python, not a full sandbox — adequate for GAIA L1
13
+ * computations which are math/logic only, not I/O heavy).
14
+ *
15
+ * Input schema:
16
+ * code — Python source to execute (passed via stdin to python3 -)
17
+ *
18
+ * Output:
19
+ * stdout of the script, trimmed.
20
+ * On non-zero exit or timeout, returns a descriptive error string.
21
+ *
22
+ * Refs: ADR-139, iter-65, #2156
23
+ */
24
+ import { GaiaTool, ToolDefinition } from './types.js';
25
+ export declare class PythonExecTool implements GaiaTool {
26
+ readonly name = "python_exec";
27
+ readonly definition: ToolDefinition;
28
+ execute(input: Record<string, unknown>): Promise<string>;
29
+ }
30
+ export declare function createPythonExecTool(): PythonExecTool;
31
+ //# sourceMappingURL=python_exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python_exec.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/python_exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAatD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,QAAQ,CAAC,UAAU,EAAE,cAAc,CAmBjC;IAEI,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAiC/D;AAMD,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * GAIA Tool: python_exec — DAG actor catalogue (iter-65 Fix 1)
3
+ *
4
+ * Executes a Python script in a sandboxed subprocess and returns stdout.
5
+ * Designed for use by DAG actors that need to simulate probabilities,
6
+ * run numeric computations, or process data programmatically.
7
+ *
8
+ * Security:
9
+ * - Code is passed via stdin (not shell args) to avoid injection.
10
+ * - Hard timeout: 30 seconds.
11
+ * - No network access inside the script (subprocess environment is the
12
+ * same user-level Python, not a full sandbox — adequate for GAIA L1
13
+ * computations which are math/logic only, not I/O heavy).
14
+ *
15
+ * Input schema:
16
+ * code — Python source to execute (passed via stdin to python3 -)
17
+ *
18
+ * Output:
19
+ * stdout of the script, trimmed.
20
+ * On non-zero exit or timeout, returns a descriptive error string.
21
+ *
22
+ * Refs: ADR-139, iter-65, #2156
23
+ */
24
+ import { execFileSync } from 'node:child_process';
25
+ // ---------------------------------------------------------------------------
26
+ // Constants
27
+ // ---------------------------------------------------------------------------
28
+ const PYTHON_EXEC_TIMEOUT_MS = 30_000;
29
+ const PYTHON_OUTPUT_MAX_CHARS = 4_000;
30
+ // ---------------------------------------------------------------------------
31
+ // PythonExecTool
32
+ // ---------------------------------------------------------------------------
33
+ export class PythonExecTool {
34
+ name = 'python_exec';
35
+ definition = {
36
+ name: 'python_exec',
37
+ description: 'Execute a Python 3 script and return its stdout output. ' +
38
+ 'Use this for mathematical calculations, probability simulations, ' +
39
+ 'data processing, or any computation that requires running Python code. ' +
40
+ 'The code is passed via stdin to python3. ' +
41
+ 'Print your result to stdout. ' +
42
+ 'Timeout: 30 seconds. Maximum output: 4000 characters.',
43
+ input_schema: {
44
+ type: 'object',
45
+ properties: {
46
+ code: {
47
+ type: 'string',
48
+ description: 'Python 3 source code to execute. Use print() to output results.',
49
+ },
50
+ },
51
+ required: ['code'],
52
+ },
53
+ };
54
+ async execute(input) {
55
+ const code = String(input['code'] ?? '').trim();
56
+ if (!code) {
57
+ return 'python_exec: empty code — nothing to execute.';
58
+ }
59
+ let stdout;
60
+ try {
61
+ stdout = execFileSync('python3', ['-'], {
62
+ input: code,
63
+ encoding: 'utf-8',
64
+ timeout: PYTHON_EXEC_TIMEOUT_MS,
65
+ }).trim();
66
+ }
67
+ catch (err) {
68
+ if (err instanceof Error) {
69
+ // Include stderr in the error output so actors can diagnose
70
+ const spawnErr = err;
71
+ const stderr = String(spawnErr.stderr ?? '').trim();
72
+ const partial = String(spawnErr.stdout ?? '').trim();
73
+ const parts = [`python_exec error: ${err.message}`];
74
+ if (stderr)
75
+ parts.push(`stderr: ${stderr.slice(0, 1000)}`);
76
+ if (partial)
77
+ parts.push(`partial stdout: ${partial.slice(0, 500)}`);
78
+ return parts.join('\n');
79
+ }
80
+ return `python_exec error: ${String(err)}`;
81
+ }
82
+ if (!stdout) {
83
+ return '(no output — script produced no stdout)';
84
+ }
85
+ return stdout.slice(0, PYTHON_OUTPUT_MAX_CHARS);
86
+ }
87
+ }
88
+ // ---------------------------------------------------------------------------
89
+ // Convenience factory
90
+ // ---------------------------------------------------------------------------
91
+ export function createPythonExecTool() {
92
+ return new PythonExecTool();
93
+ }
94
+ //# sourceMappingURL=python_exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python_exec.js","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/python_exec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,aAAa,CAAC;IAErB,UAAU,GAAmB;QACpC,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,0DAA0D;YAC1D,mEAAmE;YACnE,yEAAyE;YACzE,2CAA2C;YAC3C,+BAA+B;YAC/B,uDAAuD;QACzD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iEAAiE;iBAC/E;aACF;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACnB;KACF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,KAA8B;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,+CAA+C,CAAC;QACzD,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE;gBACtC,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACzB,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,GAAmE,CAAC;gBACrF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACrD,MAAM,KAAK,GAAa,CAAC,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9D,IAAI,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3D,IAAI,OAAO;oBAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,sBAAsB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,yCAAyC,CAAC;QACnD,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;IAClD,CAAC;CACF;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Smoke tests for python_exec — ADR-133-PR4
3
+ *
4
+ * Run with:
5
+ * cd v3/@claude-flow/cli
6
+ * npx tsx src/benchmarks/gaia-tools/python_exec.smoke.ts
7
+ *
8
+ * Expects python3 to be installed and on PATH.
9
+ *
10
+ * Refs: ADR-133, #2156
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=python_exec.smoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python_exec.smoke.d.ts","sourceRoot":"","sources":["../../../../src/benchmarks/gaia-tools/python_exec.smoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}