@hivehub/rulebook 1.2.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 (379) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +539 -0
  3. package/dist/agents/claude-code.d.ts +69 -0
  4. package/dist/agents/claude-code.d.ts.map +1 -0
  5. package/dist/agents/claude-code.js +180 -0
  6. package/dist/agents/claude-code.js.map +1 -0
  7. package/dist/agents/cursor-agent.d.ts +184 -0
  8. package/dist/agents/cursor-agent.d.ts.map +1 -0
  9. package/dist/agents/cursor-agent.js +299 -0
  10. package/dist/agents/cursor-agent.js.map +1 -0
  11. package/dist/agents/gemini-cli.d.ts +69 -0
  12. package/dist/agents/gemini-cli.d.ts.map +1 -0
  13. package/dist/agents/gemini-cli.js +180 -0
  14. package/dist/agents/gemini-cli.js.map +1 -0
  15. package/dist/cli/commands.d.ts +57 -0
  16. package/dist/cli/commands.d.ts.map +1 -0
  17. package/dist/cli/commands.js +1370 -0
  18. package/dist/cli/commands.js.map +1 -0
  19. package/dist/cli/docs-prompts.d.ts +3 -0
  20. package/dist/cli/docs-prompts.d.ts.map +1 -0
  21. package/dist/cli/docs-prompts.js +45 -0
  22. package/dist/cli/docs-prompts.js.map +1 -0
  23. package/dist/cli/prompts.d.ts +6 -0
  24. package/dist/cli/prompts.d.ts.map +1 -0
  25. package/dist/cli/prompts.js +376 -0
  26. package/dist/cli/prompts.js.map +1 -0
  27. package/dist/core/agent-manager.d.ts +89 -0
  28. package/dist/core/agent-manager.d.ts.map +1 -0
  29. package/dist/core/agent-manager.js +546 -0
  30. package/dist/core/agent-manager.js.map +1 -0
  31. package/dist/core/auto-fixer.d.ts +14 -0
  32. package/dist/core/auto-fixer.d.ts.map +1 -0
  33. package/dist/core/auto-fixer.js +207 -0
  34. package/dist/core/auto-fixer.js.map +1 -0
  35. package/dist/core/changelog-generator.d.ts +44 -0
  36. package/dist/core/changelog-generator.d.ts.map +1 -0
  37. package/dist/core/changelog-generator.js +222 -0
  38. package/dist/core/changelog-generator.js.map +1 -0
  39. package/dist/core/cli-bridge.d.ts +113 -0
  40. package/dist/core/cli-bridge.d.ts.map +1 -0
  41. package/dist/core/cli-bridge.js +1094 -0
  42. package/dist/core/cli-bridge.js.map +1 -0
  43. package/dist/core/config-manager.d.ts +65 -0
  44. package/dist/core/config-manager.d.ts.map +1 -0
  45. package/dist/core/config-manager.js +266 -0
  46. package/dist/core/config-manager.js.map +1 -0
  47. package/dist/core/coverage-checker.d.ts +14 -0
  48. package/dist/core/coverage-checker.d.ts.map +1 -0
  49. package/dist/core/coverage-checker.js +176 -0
  50. package/dist/core/coverage-checker.js.map +1 -0
  51. package/dist/core/custom-templates.d.ts +27 -0
  52. package/dist/core/custom-templates.d.ts.map +1 -0
  53. package/dist/core/custom-templates.js +122 -0
  54. package/dist/core/custom-templates.js.map +1 -0
  55. package/dist/core/dependency-checker.d.ts +21 -0
  56. package/dist/core/dependency-checker.d.ts.map +1 -0
  57. package/dist/core/dependency-checker.js +247 -0
  58. package/dist/core/dependency-checker.js.map +1 -0
  59. package/dist/core/detector.d.ts +3 -0
  60. package/dist/core/detector.d.ts.map +1 -0
  61. package/dist/core/detector.js +1443 -0
  62. package/dist/core/detector.js.map +1 -0
  63. package/dist/core/docs-generator.d.ts +9 -0
  64. package/dist/core/docs-generator.d.ts.map +1 -0
  65. package/dist/core/docs-generator.js +531 -0
  66. package/dist/core/docs-generator.js.map +1 -0
  67. package/dist/core/generator.d.ts +16 -0
  68. package/dist/core/generator.d.ts.map +1 -0
  69. package/dist/core/generator.js +561 -0
  70. package/dist/core/generator.js.map +1 -0
  71. package/dist/core/gitignore-generator.d.ts +13 -0
  72. package/dist/core/gitignore-generator.d.ts.map +1 -0
  73. package/dist/core/gitignore-generator.js +307 -0
  74. package/dist/core/gitignore-generator.js.map +1 -0
  75. package/dist/core/health-scorer.d.ts +22 -0
  76. package/dist/core/health-scorer.d.ts.map +1 -0
  77. package/dist/core/health-scorer.js +395 -0
  78. package/dist/core/health-scorer.js.map +1 -0
  79. package/dist/core/logger.d.ts +116 -0
  80. package/dist/core/logger.d.ts.map +1 -0
  81. package/dist/core/logger.js +289 -0
  82. package/dist/core/logger.js.map +1 -0
  83. package/dist/core/merger.d.ts +6 -0
  84. package/dist/core/merger.d.ts.map +1 -0
  85. package/dist/core/merger.js +131 -0
  86. package/dist/core/merger.js.map +1 -0
  87. package/dist/core/migrator.d.ts +19 -0
  88. package/dist/core/migrator.d.ts.map +1 -0
  89. package/dist/core/migrator.js +102 -0
  90. package/dist/core/migrator.js.map +1 -0
  91. package/dist/core/minimal-scaffolder.d.ts +8 -0
  92. package/dist/core/minimal-scaffolder.d.ts.map +1 -0
  93. package/dist/core/minimal-scaffolder.js +51 -0
  94. package/dist/core/minimal-scaffolder.js.map +1 -0
  95. package/dist/core/modern-console-new.d.ts +81 -0
  96. package/dist/core/modern-console-new.d.ts.map +1 -0
  97. package/dist/core/modern-console-new.js +340 -0
  98. package/dist/core/modern-console-new.js.map +1 -0
  99. package/dist/core/modern-console.d.ts +99 -0
  100. package/dist/core/modern-console.d.ts.map +1 -0
  101. package/dist/core/modern-console.js +568 -0
  102. package/dist/core/modern-console.js.map +1 -0
  103. package/dist/core/openspec-manager.d.ts +133 -0
  104. package/dist/core/openspec-manager.d.ts.map +1 -0
  105. package/dist/core/openspec-manager.js +605 -0
  106. package/dist/core/openspec-manager.js.map +1 -0
  107. package/dist/core/openspec-migrator.d.ts +27 -0
  108. package/dist/core/openspec-migrator.d.ts.map +1 -0
  109. package/dist/core/openspec-migrator.js +255 -0
  110. package/dist/core/openspec-migrator.js.map +1 -0
  111. package/dist/core/task-manager.d.ts +65 -0
  112. package/dist/core/task-manager.d.ts.map +1 -0
  113. package/dist/core/task-manager.js +318 -0
  114. package/dist/core/task-manager.js.map +1 -0
  115. package/dist/core/test-task-manager.d.ts +49 -0
  116. package/dist/core/test-task-manager.d.ts.map +1 -0
  117. package/dist/core/test-task-manager.js +121 -0
  118. package/dist/core/test-task-manager.js.map +1 -0
  119. package/dist/core/validator.d.ts +21 -0
  120. package/dist/core/validator.d.ts.map +1 -0
  121. package/dist/core/validator.js +177 -0
  122. package/dist/core/validator.js.map +1 -0
  123. package/dist/core/version-bumper.d.ts +19 -0
  124. package/dist/core/version-bumper.d.ts.map +1 -0
  125. package/dist/core/version-bumper.js +180 -0
  126. package/dist/core/version-bumper.js.map +1 -0
  127. package/dist/core/watcher.d.ts +9 -0
  128. package/dist/core/watcher.d.ts.map +1 -0
  129. package/dist/core/watcher.js +22 -0
  130. package/dist/core/watcher.js.map +1 -0
  131. package/dist/core/workflow-generator.d.ts +10 -0
  132. package/dist/core/workflow-generator.d.ts.map +1 -0
  133. package/dist/core/workflow-generator.js +279 -0
  134. package/dist/core/workflow-generator.js.map +1 -0
  135. package/dist/index.d.ts +3 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +159 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/mcp/handlers/archive-task.d.ts +17 -0
  140. package/dist/mcp/handlers/archive-task.d.ts.map +1 -0
  141. package/dist/mcp/handlers/archive-task.js +36 -0
  142. package/dist/mcp/handlers/archive-task.js.map +1 -0
  143. package/dist/mcp/handlers/create-task.d.ts +17 -0
  144. package/dist/mcp/handlers/create-task.d.ts.map +1 -0
  145. package/dist/mcp/handlers/create-task.js +56 -0
  146. package/dist/mcp/handlers/create-task.js.map +1 -0
  147. package/dist/mcp/handlers/list-tasks.d.ts +22 -0
  148. package/dist/mcp/handlers/list-tasks.d.ts.map +1 -0
  149. package/dist/mcp/handlers/list-tasks.js +42 -0
  150. package/dist/mcp/handlers/list-tasks.js.map +1 -0
  151. package/dist/mcp/handlers/show-task.d.ts +25 -0
  152. package/dist/mcp/handlers/show-task.d.ts.map +1 -0
  153. package/dist/mcp/handlers/show-task.js +43 -0
  154. package/dist/mcp/handlers/show-task.js.map +1 -0
  155. package/dist/mcp/handlers/update-task.d.ts +17 -0
  156. package/dist/mcp/handlers/update-task.d.ts.map +1 -0
  157. package/dist/mcp/handlers/update-task.js +35 -0
  158. package/dist/mcp/handlers/update-task.js.map +1 -0
  159. package/dist/mcp/handlers/validate-task.d.ts +15 -0
  160. package/dist/mcp/handlers/validate-task.d.ts.map +1 -0
  161. package/dist/mcp/handlers/validate-task.js +27 -0
  162. package/dist/mcp/handlers/validate-task.js.map +1 -0
  163. package/dist/mcp/rulebook-config.d.ts +22 -0
  164. package/dist/mcp/rulebook-config.d.ts.map +1 -0
  165. package/dist/mcp/rulebook-config.js +65 -0
  166. package/dist/mcp/rulebook-config.js.map +1 -0
  167. package/dist/mcp/rulebook-server.d.ts +4 -0
  168. package/dist/mcp/rulebook-server.d.ts.map +1 -0
  169. package/dist/mcp/rulebook-server.js +246 -0
  170. package/dist/mcp/rulebook-server.js.map +1 -0
  171. package/dist/types.d.ts +190 -0
  172. package/dist/types.d.ts.map +1 -0
  173. package/dist/types.js +2 -0
  174. package/dist/types.js.map +1 -0
  175. package/dist/utils/file-system.d.ts +9 -0
  176. package/dist/utils/file-system.d.ts.map +1 -0
  177. package/dist/utils/file-system.js +51 -0
  178. package/dist/utils/file-system.js.map +1 -0
  179. package/dist/utils/git-hooks.d.ts +8 -0
  180. package/dist/utils/git-hooks.d.ts.map +1 -0
  181. package/dist/utils/git-hooks.js +440 -0
  182. package/dist/utils/git-hooks.js.map +1 -0
  183. package/dist/utils/rulesignore.d.ts +9 -0
  184. package/dist/utils/rulesignore.d.ts.map +1 -0
  185. package/dist/utils/rulesignore.js +42 -0
  186. package/dist/utils/rulesignore.js.map +1 -0
  187. package/package.json +106 -0
  188. package/templates/cli/AIDER.md +49 -0
  189. package/templates/cli/AMAZON_Q.md +25 -0
  190. package/templates/cli/AUGGIE.md +32 -0
  191. package/templates/cli/CLAUDE.md +32 -0
  192. package/templates/cli/CLAUDE_CODE.md +35 -0
  193. package/templates/cli/CLINE.md +32 -0
  194. package/templates/cli/CODEBUDDY.md +20 -0
  195. package/templates/cli/CODEIUM.md +20 -0
  196. package/templates/cli/CODEX.md +21 -0
  197. package/templates/cli/CONTINUE.md +34 -0
  198. package/templates/cli/CURSOR_CLI.md +28 -0
  199. package/templates/cli/FACTORY.md +18 -0
  200. package/templates/cli/GEMINI.md +35 -0
  201. package/templates/cli/KILOCODE.md +18 -0
  202. package/templates/cli/OPENCODE.md +18 -0
  203. package/templates/cli/_GENERIC_TEMPLATE.md +29 -0
  204. package/templates/commands/rulebook-task-apply.md +67 -0
  205. package/templates/commands/rulebook-task-archive.md +70 -0
  206. package/templates/commands/rulebook-task-create.md +93 -0
  207. package/templates/commands/rulebook-task-list.md +42 -0
  208. package/templates/commands/rulebook-task-show.md +52 -0
  209. package/templates/commands/rulebook-task-validate.md +53 -0
  210. package/templates/core/AGENT_AUTOMATION.md +184 -0
  211. package/templates/core/DAG.md +304 -0
  212. package/templates/core/DOCUMENTATION_RULES.md +37 -0
  213. package/templates/core/QUALITY_ENFORCEMENT.md +68 -0
  214. package/templates/core/RULEBOOK.md +1874 -0
  215. package/templates/frameworks/ANGULAR.md +36 -0
  216. package/templates/frameworks/DJANGO.md +83 -0
  217. package/templates/frameworks/ELECTRON.md +147 -0
  218. package/templates/frameworks/FLASK.md +38 -0
  219. package/templates/frameworks/FLUTTER.md +55 -0
  220. package/templates/frameworks/JQUERY.md +32 -0
  221. package/templates/frameworks/LARAVEL.md +38 -0
  222. package/templates/frameworks/NESTJS.md +43 -0
  223. package/templates/frameworks/NEXTJS.md +127 -0
  224. package/templates/frameworks/NUXT.md +40 -0
  225. package/templates/frameworks/RAILS.md +66 -0
  226. package/templates/frameworks/REACT.md +38 -0
  227. package/templates/frameworks/REACT_NATIVE.md +47 -0
  228. package/templates/frameworks/SPRING.md +39 -0
  229. package/templates/frameworks/SYMFONY.md +36 -0
  230. package/templates/frameworks/VUE.md +36 -0
  231. package/templates/frameworks/ZEND.md +35 -0
  232. package/templates/git/CI_CD_PATTERNS.md +661 -0
  233. package/templates/git/GITHUB_ACTIONS.md +728 -0
  234. package/templates/git/GITLAB_CI.md +730 -0
  235. package/templates/git/GIT_WORKFLOW.md +1157 -0
  236. package/templates/git/SECRETS_MANAGEMENT.md +585 -0
  237. package/templates/hooks/COMMIT_MSG.md +530 -0
  238. package/templates/hooks/POST_CHECKOUT.md +546 -0
  239. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -0
  240. package/templates/hooks/PRE_COMMIT.md +414 -0
  241. package/templates/hooks/PRE_PUSH.md +601 -0
  242. package/templates/hooks/csharp-pre-commit.sh +23 -0
  243. package/templates/hooks/csharp-pre-push.sh +23 -0
  244. package/templates/hooks/dart-pre-commit.sh +30 -0
  245. package/templates/hooks/dart-pre-push.sh +25 -0
  246. package/templates/hooks/elixir-pre-commit.sh +32 -0
  247. package/templates/hooks/elixir-pre-push.sh +31 -0
  248. package/templates/hooks/erlang-pre-commit.sh +30 -0
  249. package/templates/hooks/erlang-pre-push.sh +37 -0
  250. package/templates/hooks/go-pre-commit.sh +40 -0
  251. package/templates/hooks/go-pre-push.sh +31 -0
  252. package/templates/hooks/haskell-pre-commit.sh +41 -0
  253. package/templates/hooks/haskell-pre-push.sh +37 -0
  254. package/templates/hooks/java-pre-commit.sh +34 -0
  255. package/templates/hooks/java-pre-push.sh +24 -0
  256. package/templates/hooks/kotlin-pre-commit.sh +32 -0
  257. package/templates/hooks/kotlin-pre-push.sh +16 -0
  258. package/templates/hooks/php-pre-commit.sh +36 -0
  259. package/templates/hooks/php-pre-push.sh +26 -0
  260. package/templates/hooks/python-pre-commit.sh +51 -0
  261. package/templates/hooks/python-pre-push.sh +25 -0
  262. package/templates/hooks/ruby-pre-commit.sh +33 -0
  263. package/templates/hooks/ruby-pre-push.sh +32 -0
  264. package/templates/hooks/rust-pre-commit.sh +30 -0
  265. package/templates/hooks/rust-pre-push.sh +30 -0
  266. package/templates/hooks/scala-pre-commit.sh +32 -0
  267. package/templates/hooks/scala-pre-push.sh +24 -0
  268. package/templates/hooks/swift-pre-commit.sh +25 -0
  269. package/templates/hooks/swift-pre-push.sh +23 -0
  270. package/templates/hooks/typescript-pre-commit.sh +37 -0
  271. package/templates/hooks/typescript-pre-push.sh +36 -0
  272. package/templates/ides/COPILOT.md +37 -0
  273. package/templates/ides/CURSOR.md +43 -0
  274. package/templates/ides/JETBRAINS_AI.md +35 -0
  275. package/templates/ides/REPLIT.md +36 -0
  276. package/templates/ides/TABNINE.md +29 -0
  277. package/templates/ides/VSCODE.md +40 -0
  278. package/templates/ides/WINDSURF.md +36 -0
  279. package/templates/ides/ZED.md +32 -0
  280. package/templates/languages/ADA.md +58 -0
  281. package/templates/languages/C.md +333 -0
  282. package/templates/languages/CPP.md +743 -0
  283. package/templates/languages/CSHARP.md +417 -0
  284. package/templates/languages/DART.md +332 -0
  285. package/templates/languages/ELIXIR.md +454 -0
  286. package/templates/languages/ERLANG.md +361 -0
  287. package/templates/languages/GO.md +645 -0
  288. package/templates/languages/HASKELL.md +177 -0
  289. package/templates/languages/JAVA.md +607 -0
  290. package/templates/languages/JAVASCRIPT.md +631 -0
  291. package/templates/languages/JULIA.md +97 -0
  292. package/templates/languages/KOTLIN.md +511 -0
  293. package/templates/languages/LISP.md +100 -0
  294. package/templates/languages/LUA.md +74 -0
  295. package/templates/languages/OBJECTIVEC.md +90 -0
  296. package/templates/languages/PHP.md +416 -0
  297. package/templates/languages/PYTHON.md +682 -0
  298. package/templates/languages/R.md +350 -0
  299. package/templates/languages/RUBY.md +421 -0
  300. package/templates/languages/RUST.md +477 -0
  301. package/templates/languages/SAS.md +73 -0
  302. package/templates/languages/SCALA.md +348 -0
  303. package/templates/languages/SOLIDITY.md +580 -0
  304. package/templates/languages/SQL.md +137 -0
  305. package/templates/languages/SWIFT.md +466 -0
  306. package/templates/languages/TYPESCRIPT.md +591 -0
  307. package/templates/languages/ZIG.md +265 -0
  308. package/templates/modules/ATLASSIAN.md +255 -0
  309. package/templates/modules/CONTEXT7.md +54 -0
  310. package/templates/modules/FIGMA.md +267 -0
  311. package/templates/modules/GITHUB_MCP.md +64 -0
  312. package/templates/modules/GRAFANA.md +328 -0
  313. package/templates/modules/NOTION.md +247 -0
  314. package/templates/modules/PLAYWRIGHT.md +90 -0
  315. package/templates/modules/RULEBOOK_MCP.md +156 -0
  316. package/templates/modules/SERENA.md +337 -0
  317. package/templates/modules/SUPABASE.md +223 -0
  318. package/templates/modules/SYNAP.md +69 -0
  319. package/templates/modules/VECTORIZER.md +63 -0
  320. package/templates/services/AZURE_BLOB.md +184 -0
  321. package/templates/services/CASSANDRA.md +239 -0
  322. package/templates/services/DYNAMODB.md +308 -0
  323. package/templates/services/ELASTICSEARCH.md +347 -0
  324. package/templates/services/GCS.md +178 -0
  325. package/templates/services/INFLUXDB.md +265 -0
  326. package/templates/services/KAFKA.md +341 -0
  327. package/templates/services/MARIADB.md +183 -0
  328. package/templates/services/MEMCACHED.md +242 -0
  329. package/templates/services/MINIO.md +201 -0
  330. package/templates/services/MONGODB.md +268 -0
  331. package/templates/services/MYSQL.md +358 -0
  332. package/templates/services/NEO4J.md +247 -0
  333. package/templates/services/ORACLE.md +290 -0
  334. package/templates/services/POSTGRESQL.md +326 -0
  335. package/templates/services/RABBITMQ.md +286 -0
  336. package/templates/services/REDIS.md +292 -0
  337. package/templates/services/S3.md +298 -0
  338. package/templates/services/SQLITE.md +294 -0
  339. package/templates/services/SQLSERVER.md +294 -0
  340. package/templates/workflows/codespell.yml +31 -0
  341. package/templates/workflows/cpp-lint.yml +47 -0
  342. package/templates/workflows/cpp-publish.yml +119 -0
  343. package/templates/workflows/cpp-test.yml +77 -0
  344. package/templates/workflows/dotnet-lint.yml +29 -0
  345. package/templates/workflows/dotnet-publish.yml +40 -0
  346. package/templates/workflows/dotnet-test.yml +41 -0
  347. package/templates/workflows/elixir-lint.yml +45 -0
  348. package/templates/workflows/elixir-publish.yml +49 -0
  349. package/templates/workflows/elixir-test.yml +54 -0
  350. package/templates/workflows/erlang-lint.yml +47 -0
  351. package/templates/workflows/erlang-test.yml +62 -0
  352. package/templates/workflows/go-lint.yml +39 -0
  353. package/templates/workflows/go-publish.yml +95 -0
  354. package/templates/workflows/go-test.yml +59 -0
  355. package/templates/workflows/java-lint.yml +60 -0
  356. package/templates/workflows/java-publish.yml +120 -0
  357. package/templates/workflows/java-test.yml +85 -0
  358. package/templates/workflows/kotlin-lint.yml +34 -0
  359. package/templates/workflows/kotlin-publish.yml +56 -0
  360. package/templates/workflows/kotlin-test.yml +48 -0
  361. package/templates/workflows/php-lint.yml +39 -0
  362. package/templates/workflows/php-publish.yml +50 -0
  363. package/templates/workflows/php-test.yml +54 -0
  364. package/templates/workflows/python-lint.yml +47 -0
  365. package/templates/workflows/python-publish.yml +91 -0
  366. package/templates/workflows/python-test.yml +59 -0
  367. package/templates/workflows/rust-lint.yml +54 -0
  368. package/templates/workflows/rust-publish.yml +66 -0
  369. package/templates/workflows/rust-test.yml +75 -0
  370. package/templates/workflows/solidity-lint.yml +41 -0
  371. package/templates/workflows/solidity-test.yml +47 -0
  372. package/templates/workflows/swift-lint.yml +32 -0
  373. package/templates/workflows/swift-publish.yml +58 -0
  374. package/templates/workflows/swift-test.yml +44 -0
  375. package/templates/workflows/typescript-lint.yml +61 -0
  376. package/templates/workflows/typescript-publish.yml +60 -0
  377. package/templates/workflows/typescript-test.yml +73 -0
  378. package/templates/workflows/zig-lint.yml +27 -0
  379. package/templates/workflows/zig-test.yml +40 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * claude-code Stream Parser
3
+ *
4
+ * Parses output from claude-code CLI
5
+ * Command: claude --headless "PROMPT"
6
+ * Output: Stream of text with progress indicators
7
+ */
8
+ /**
9
+ * Parse a single line from claude-code output
10
+ */
11
+ export function parseClaudeCodeLine(line) {
12
+ try {
13
+ const trimmed = line.trim();
14
+ if (!trimmed)
15
+ return null;
16
+ // Look for progress indicators
17
+ if (trimmed.includes('...') || trimmed.includes('thinking') || trimmed.includes('processing')) {
18
+ return {
19
+ type: 'progress',
20
+ content: trimmed,
21
+ timestamp: Date.now(),
22
+ };
23
+ }
24
+ // Look for tool calls
25
+ if (trimmed.includes('🔧') || trimmed.includes('Tool:') || trimmed.includes('Executing:')) {
26
+ return {
27
+ type: 'tool_call',
28
+ content: trimmed,
29
+ timestamp: Date.now(),
30
+ };
31
+ }
32
+ // Look for completion indicators
33
+ if (trimmed.includes('✅') || trimmed.includes('Complete') || trimmed.includes('Done')) {
34
+ return {
35
+ type: 'completion',
36
+ content: trimmed,
37
+ timestamp: Date.now(),
38
+ };
39
+ }
40
+ // Look for errors
41
+ if (trimmed.includes('❌') || trimmed.includes('Error:') || trimmed.includes('Failed:')) {
42
+ return {
43
+ type: 'error',
44
+ content: trimmed,
45
+ timestamp: Date.now(),
46
+ };
47
+ }
48
+ // Default to text content
49
+ return {
50
+ type: 'text',
51
+ content: trimmed,
52
+ timestamp: Date.now(),
53
+ };
54
+ }
55
+ catch {
56
+ // Failed to parse line - ignore silently
57
+ return null;
58
+ }
59
+ }
60
+ /**
61
+ * Process claude-code stream output with real-time progress
62
+ */
63
+ export class ClaudeCodeStreamParser {
64
+ accumulatedText = '';
65
+ toolCalls = [];
66
+ sessionId = `claude-${Date.now()}`;
67
+ startTime = Date.now();
68
+ toolCount = 0;
69
+ completed = false;
70
+ completionCallback;
71
+ /**
72
+ * Set callback to be called when completion is detected
73
+ */
74
+ onComplete(callback) {
75
+ this.completionCallback = callback;
76
+ }
77
+ /**
78
+ * Check if parsing is completed
79
+ */
80
+ isCompleted() {
81
+ return this.completed;
82
+ }
83
+ /**
84
+ * Process a single event from the stream
85
+ */
86
+ processEvent(event) {
87
+ switch (event.type) {
88
+ case 'progress':
89
+ this.handleProgressEvent(event);
90
+ break;
91
+ case 'text':
92
+ this.handleTextEvent(event);
93
+ break;
94
+ case 'tool_call':
95
+ this.handleToolCallEvent(event);
96
+ break;
97
+ case 'completion':
98
+ this.handleCompletionEvent(event);
99
+ break;
100
+ case 'error':
101
+ this.handleErrorEvent(event);
102
+ break;
103
+ }
104
+ }
105
+ /**
106
+ * Process multiple lines of stream output
107
+ */
108
+ processLines(output) {
109
+ const lines = output.split('\n');
110
+ for (const line of lines) {
111
+ const event = parseClaudeCodeLine(line);
112
+ if (event) {
113
+ this.processEvent(event);
114
+ }
115
+ }
116
+ }
117
+ /**
118
+ * Get the final parsed result
119
+ */
120
+ getResult() {
121
+ return {
122
+ success: !this.completed || this.accumulatedText.length > 0,
123
+ text: this.accumulatedText,
124
+ toolCalls: this.toolCalls,
125
+ duration: Date.now() - this.startTime,
126
+ sessionId: this.sessionId,
127
+ };
128
+ }
129
+ handleProgressEvent(_event) {
130
+ // Progress logged silently
131
+ }
132
+ handleTextEvent(event) {
133
+ // Accumulate text content
134
+ if (event.content && !this.accumulatedText.includes(event.content)) {
135
+ this.accumulatedText += event.content + '\n';
136
+ // Progress logged silently
137
+ }
138
+ }
139
+ handleToolCallEvent(event) {
140
+ this.toolCount++;
141
+ // Extract tool type and details from content
142
+ let toolType = 'bash';
143
+ const details = event.content;
144
+ if (event.content.includes('read') || event.content.includes('📖')) {
145
+ toolType = 'read';
146
+ }
147
+ else if (event.content.includes('write') || event.content.includes('📝')) {
148
+ toolType = 'write';
149
+ }
150
+ // Tool call logged silently
151
+ this.toolCalls.push({
152
+ type: toolType,
153
+ details,
154
+ });
155
+ }
156
+ handleCompletionEvent(_event) {
157
+ // Completion logged silently
158
+ // Mark as completed and trigger callback
159
+ this.completed = true;
160
+ if (this.completionCallback) {
161
+ this.completionCallback();
162
+ }
163
+ }
164
+ handleErrorEvent(event) {
165
+ // Error logged silently
166
+ // Update last tool call with error if available
167
+ if (this.toolCalls.length > 0) {
168
+ this.toolCalls[this.toolCalls.length - 1].result = `Error: ${event.content}`;
169
+ }
170
+ }
171
+ }
172
+ /**
173
+ * Parse complete claude-code output
174
+ */
175
+ export function parseClaudeCodeOutput(output) {
176
+ const parser = new ClaudeCodeStreamParser();
177
+ parser.processLines(output);
178
+ return parser.getResult();
179
+ }
180
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/agents/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * cursor-agent Stream Parser
3
+ *
4
+ * Parses stream-json output from cursor-agent CLI
5
+ * Format: Each line is a complete JSON object
6
+ */
7
+ export interface SystemInitEvent {
8
+ type: 'system';
9
+ subtype: 'init';
10
+ apiKeySource: string;
11
+ cwd: string;
12
+ session_id: string;
13
+ model: string;
14
+ permissionMode: string;
15
+ }
16
+ export interface UserMessageEvent {
17
+ type: 'user';
18
+ message: {
19
+ role: 'user';
20
+ content: Array<{
21
+ type: string;
22
+ text: string;
23
+ }>;
24
+ };
25
+ session_id: string;
26
+ }
27
+ export interface AssistantMessageEvent {
28
+ type: 'assistant';
29
+ message: {
30
+ role: 'assistant';
31
+ content: Array<{
32
+ type: string;
33
+ text: string;
34
+ }>;
35
+ };
36
+ session_id: string;
37
+ timestamp_ms?: number;
38
+ }
39
+ export interface ToolCallStartedEvent {
40
+ type: 'tool_call';
41
+ subtype: 'started';
42
+ tool_call: {
43
+ writeToolCall?: {
44
+ args: {
45
+ path: string;
46
+ contents: string;
47
+ };
48
+ };
49
+ readToolCall?: {
50
+ args: {
51
+ path: string;
52
+ };
53
+ };
54
+ bashToolCall?: {
55
+ args: {
56
+ command: string;
57
+ };
58
+ };
59
+ editToolCall?: {
60
+ args: {
61
+ path: string;
62
+ };
63
+ };
64
+ };
65
+ session_id: string;
66
+ }
67
+ export interface ToolCallCompletedEvent {
68
+ type: 'tool_call';
69
+ subtype: 'completed';
70
+ tool_call: {
71
+ writeToolCall?: {
72
+ result: {
73
+ success?: {
74
+ linesCreated: number;
75
+ fileSize: number;
76
+ };
77
+ error?: string;
78
+ };
79
+ };
80
+ readToolCall?: {
81
+ result: {
82
+ success?: {
83
+ totalLines: number;
84
+ content: string;
85
+ };
86
+ error?: string;
87
+ };
88
+ };
89
+ bashToolCall?: {
90
+ result: {
91
+ success?: {
92
+ exitCode: number;
93
+ stdout: string;
94
+ stderr: string;
95
+ };
96
+ error?: string;
97
+ };
98
+ };
99
+ editToolCall?: {
100
+ result: {
101
+ success?: {
102
+ linesAdded: number;
103
+ linesRemoved: number;
104
+ path: string;
105
+ };
106
+ error?: string;
107
+ };
108
+ };
109
+ };
110
+ session_id: string;
111
+ }
112
+ export interface ResultEvent {
113
+ type: 'result';
114
+ subtype: 'success' | 'error';
115
+ duration_ms: number;
116
+ duration_api_ms: number;
117
+ is_error: boolean;
118
+ result: string;
119
+ session_id: string;
120
+ request_id: string;
121
+ }
122
+ export type CursorAgentEvent = SystemInitEvent | UserMessageEvent | AssistantMessageEvent | ToolCallStartedEvent | ToolCallCompletedEvent | ResultEvent;
123
+ export interface ParsedResult {
124
+ success: boolean;
125
+ text: string;
126
+ toolCalls: Array<{
127
+ type: 'read' | 'write' | 'bash' | 'edit';
128
+ details: string;
129
+ result?: string;
130
+ }>;
131
+ duration: number;
132
+ sessionId: string;
133
+ }
134
+ /**
135
+ * Parse a single JSON line from cursor-agent stream
136
+ */
137
+ export declare function parseStreamLine(line: string): CursorAgentEvent | null;
138
+ /**
139
+ * Process cursor-agent stream output with real-time progress
140
+ */
141
+ export declare class CursorAgentStreamParser {
142
+ private accumulatedText;
143
+ private toolCalls;
144
+ private sessionId;
145
+ private startTime;
146
+ private toolCount;
147
+ private completed;
148
+ private completionCallback?;
149
+ private eventCallback?;
150
+ /**
151
+ * Set callback to be called when result event is received
152
+ */
153
+ onComplete(callback: () => void): void;
154
+ /**
155
+ * Set callback to be called for each event (for watcher UI)
156
+ */
157
+ onEvent(callback: (type: 'tool' | 'text' | 'completion', message: string) => void): void;
158
+ /**
159
+ * Check if parsing is completed
160
+ */
161
+ isCompleted(): boolean;
162
+ /**
163
+ * Process a single event from the stream
164
+ */
165
+ processEvent(event: CursorAgentEvent): void;
166
+ /**
167
+ * Process multiple lines of stream output
168
+ */
169
+ processLines(output: string): void;
170
+ /**
171
+ * Get the final parsed result
172
+ */
173
+ getResult(): ParsedResult;
174
+ private handleSystemEvent;
175
+ private handleUserEvent;
176
+ private handleAssistantEvent;
177
+ private handleToolCallEvent;
178
+ private handleResultEvent;
179
+ }
180
+ /**
181
+ * Parse complete cursor-agent stream output
182
+ */
183
+ export declare function parseCursorAgentOutput(output: string): ParsedResult;
184
+ //# sourceMappingURL=cursor-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-agent.d.ts","sourceRoot":"","sources":["../../src/agents/cursor-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * cursor-agent Stream Parser
3
+ *
4
+ * Parses stream-json output from cursor-agent CLI
5
+ * Format: Each line is a complete JSON object
6
+ */
7
+ /**
8
+ * Parse a single JSON line from cursor-agent stream
9
+ */
10
+ export function parseStreamLine(line) {
11
+ try {
12
+ const trimmed = line.trim();
13
+ if (!trimmed)
14
+ return null;
15
+ const event = JSON.parse(trimmed);
16
+ return event;
17
+ }
18
+ catch {
19
+ // Failed to parse JSON line - ignore silently
20
+ return null;
21
+ }
22
+ }
23
+ /**
24
+ * Process cursor-agent stream output with real-time progress
25
+ */
26
+ export class CursorAgentStreamParser {
27
+ accumulatedText = '';
28
+ toolCalls = [];
29
+ sessionId = '';
30
+ startTime = Date.now();
31
+ toolCount = 0;
32
+ completed = false;
33
+ completionCallback;
34
+ eventCallback;
35
+ /**
36
+ * Set callback to be called when result event is received
37
+ */
38
+ onComplete(callback) {
39
+ this.completionCallback = callback;
40
+ }
41
+ /**
42
+ * Set callback to be called for each event (for watcher UI)
43
+ */
44
+ onEvent(callback) {
45
+ this.eventCallback = callback;
46
+ }
47
+ /**
48
+ * Check if parsing is completed
49
+ */
50
+ isCompleted() {
51
+ return this.completed;
52
+ }
53
+ /**
54
+ * Process a single event from the stream
55
+ */
56
+ processEvent(event) {
57
+ // Don't log debug info - it interferes with blessed UI
58
+ switch (event.type) {
59
+ case 'system':
60
+ this.handleSystemEvent(event);
61
+ break;
62
+ case 'user':
63
+ this.handleUserEvent(event);
64
+ break;
65
+ case 'assistant':
66
+ this.handleAssistantEvent(event);
67
+ break;
68
+ case 'tool_call':
69
+ this.handleToolCallEvent(event);
70
+ break;
71
+ case 'result':
72
+ this.handleResultEvent(event);
73
+ break;
74
+ default:
75
+ // Unknown event type - ignore
76
+ }
77
+ }
78
+ /**
79
+ * Process multiple lines of stream output
80
+ */
81
+ processLines(output) {
82
+ const lines = output.split('\n');
83
+ for (const line of lines) {
84
+ const event = parseStreamLine(line);
85
+ if (event) {
86
+ this.processEvent(event);
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Get the final parsed result
92
+ */
93
+ getResult() {
94
+ return {
95
+ success: true,
96
+ text: this.accumulatedText,
97
+ toolCalls: this.toolCalls,
98
+ duration: Date.now() - this.startTime,
99
+ sessionId: this.sessionId,
100
+ };
101
+ }
102
+ handleSystemEvent(event) {
103
+ if (event.subtype === 'init') {
104
+ this.sessionId = event.session_id;
105
+ // System info logged silently
106
+ }
107
+ }
108
+ handleUserEvent(event) {
109
+ this.sessionId = event.session_id;
110
+ // User message is just echoed back, no action needed
111
+ }
112
+ handleAssistantEvent(event) {
113
+ this.sessionId = event.session_id;
114
+ // Extract text content from assistant message
115
+ const text = event.message.content
116
+ .filter((c) => c.type === 'text')
117
+ .map((c) => c.text)
118
+ .join('');
119
+ // Accumulate text (stream-partial-output sends incremental deltas)
120
+ if (text && !this.accumulatedText.includes(text)) {
121
+ const previousLength = this.accumulatedText.length;
122
+ this.accumulatedText = text;
123
+ // Log progress every 500 chars to show the agent is working
124
+ if (this.eventCallback && Math.floor(text.length / 500) > Math.floor(previousLength / 500)) {
125
+ const chars = Math.round(text.length / 100) / 10;
126
+ this.eventCallback('text', `Thinking... (${chars}k chars)`);
127
+ }
128
+ }
129
+ }
130
+ handleToolCallEvent(event) {
131
+ this.sessionId = event.session_id;
132
+ if (event.subtype === 'started') {
133
+ this.toolCount++;
134
+ const startedEvent = event;
135
+ if (startedEvent.tool_call.writeToolCall) {
136
+ const path = startedEvent.tool_call.writeToolCall.args.path;
137
+ const details = `Write to ${path}`;
138
+ // Send to watcher/CLI with full path
139
+ if (this.eventCallback) {
140
+ this.eventCallback('tool', `[...] Writing ${path}...`);
141
+ }
142
+ this.toolCalls.push({
143
+ type: 'write',
144
+ details,
145
+ });
146
+ }
147
+ else if (startedEvent.tool_call.readToolCall) {
148
+ const path = startedEvent.tool_call.readToolCall.args.path;
149
+ const details = `Read from ${path}`;
150
+ // Send to watcher/CLI with full path
151
+ if (this.eventCallback) {
152
+ this.eventCallback('tool', `[...] Reading ${path}...`);
153
+ }
154
+ this.toolCalls.push({
155
+ type: 'read',
156
+ details,
157
+ });
158
+ }
159
+ else if (startedEvent.tool_call.bashToolCall) {
160
+ const cmd = startedEvent.tool_call.bashToolCall.args.command;
161
+ const details = `Execute: ${cmd}`;
162
+ // Send to watcher/CLI with full command
163
+ if (this.eventCallback) {
164
+ this.eventCallback('tool', `[...] Running: ${cmd}`);
165
+ }
166
+ this.toolCalls.push({
167
+ type: 'bash',
168
+ details,
169
+ });
170
+ }
171
+ else if (startedEvent.tool_call.editToolCall) {
172
+ const path = startedEvent.tool_call.editToolCall.args.path;
173
+ const details = `Edit ${path}`;
174
+ // Send to watcher/CLI with full path
175
+ if (this.eventCallback) {
176
+ this.eventCallback('tool', `[...] Editing ${path}...`);
177
+ }
178
+ this.toolCalls.push({
179
+ type: 'edit',
180
+ details,
181
+ });
182
+ }
183
+ }
184
+ else if (event.subtype === 'completed') {
185
+ const completedEvent = event;
186
+ if (completedEvent.tool_call.writeToolCall?.result.success) {
187
+ const { linesCreated, fileSize } = completedEvent.tool_call.writeToolCall.result.success;
188
+ const result = `Created ${linesCreated} lines (${fileSize} bytes)`;
189
+ // Log success
190
+ if (this.eventCallback) {
191
+ this.eventCallback('tool', `[OK] Wrote ${linesCreated} lines`);
192
+ }
193
+ // Update the last tool call with result
194
+ if (this.toolCalls.length > 0) {
195
+ this.toolCalls[this.toolCalls.length - 1].result = result;
196
+ }
197
+ }
198
+ else if (completedEvent.tool_call.writeToolCall?.result.error) {
199
+ const error = completedEvent.tool_call.writeToolCall.result.error;
200
+ // Log error
201
+ if (this.eventCallback) {
202
+ this.eventCallback('tool', `[ERR] Write failed: ${error}`);
203
+ }
204
+ if (this.toolCalls.length > 0) {
205
+ this.toolCalls[this.toolCalls.length - 1].result = `Error: ${error}`;
206
+ }
207
+ }
208
+ if (completedEvent.tool_call.readToolCall?.result.success) {
209
+ const { totalLines } = completedEvent.tool_call.readToolCall.result.success;
210
+ const result = `Read ${totalLines} lines`;
211
+ // Log success (more compact)
212
+ if (this.eventCallback) {
213
+ this.eventCallback('tool', `[OK] Read ${totalLines} lines`);
214
+ }
215
+ if (this.toolCalls.length > 0) {
216
+ this.toolCalls[this.toolCalls.length - 1].result = result;
217
+ }
218
+ }
219
+ else if (completedEvent.tool_call.readToolCall?.result.error) {
220
+ const error = completedEvent.tool_call.readToolCall.result.error;
221
+ // Log error
222
+ if (this.eventCallback) {
223
+ this.eventCallback('tool', `[ERR] Read failed: ${error}`);
224
+ }
225
+ if (this.toolCalls.length > 0) {
226
+ this.toolCalls[this.toolCalls.length - 1].result = `Error: ${error}`;
227
+ }
228
+ }
229
+ if (completedEvent.tool_call.bashToolCall?.result.success) {
230
+ const { exitCode } = completedEvent.tool_call.bashToolCall.result.success;
231
+ const result = exitCode === 0 ? 'Success' : `Exit code: ${exitCode}`;
232
+ // Log result
233
+ if (this.eventCallback) {
234
+ if (exitCode === 0) {
235
+ this.eventCallback('tool', `[OK] Command completed`);
236
+ }
237
+ else {
238
+ this.eventCallback('tool', `[WARN] Exit code ${exitCode}`);
239
+ }
240
+ }
241
+ if (this.toolCalls.length > 0) {
242
+ this.toolCalls[this.toolCalls.length - 1].result = result;
243
+ }
244
+ }
245
+ else if (completedEvent.tool_call.bashToolCall?.result.error) {
246
+ const error = completedEvent.tool_call.bashToolCall.result.error;
247
+ // Log failure
248
+ if (this.eventCallback) {
249
+ this.eventCallback('tool', `[ERR] Command failed: ${error}`);
250
+ }
251
+ if (this.toolCalls.length > 0) {
252
+ this.toolCalls[this.toolCalls.length - 1].result = `Failed: ${error}`;
253
+ }
254
+ }
255
+ if (completedEvent.tool_call.editToolCall?.result.success) {
256
+ const { linesAdded, linesRemoved } = completedEvent.tool_call.editToolCall.result.success;
257
+ const result = `+${linesAdded} -${linesRemoved} lines`;
258
+ // Log success
259
+ if (this.eventCallback) {
260
+ this.eventCallback('tool', `[OK] Edited: +${linesAdded} -${linesRemoved}`);
261
+ }
262
+ if (this.toolCalls.length > 0) {
263
+ this.toolCalls[this.toolCalls.length - 1].result = result;
264
+ }
265
+ }
266
+ else if (completedEvent.tool_call.editToolCall?.result.error) {
267
+ const error = completedEvent.tool_call.editToolCall.result.error;
268
+ // Log error
269
+ if (this.eventCallback) {
270
+ this.eventCallback('tool', `[ERR] Edit failed: ${error}`);
271
+ }
272
+ if (this.toolCalls.length > 0) {
273
+ this.toolCalls[this.toolCalls.length - 1].result = `Error: ${error}`;
274
+ }
275
+ }
276
+ }
277
+ }
278
+ handleResultEvent(_event) {
279
+ // Send completion to watcher if callback is set
280
+ if (this.eventCallback) {
281
+ const chars = Math.round(this.accumulatedText.length / 100) / 10; // Convert to KB with 1 decimal
282
+ this.eventCallback('completion', `Done: ${this.toolCalls.length} tools, ${chars}k chars`);
283
+ }
284
+ // Mark as completed and trigger callback
285
+ this.completed = true;
286
+ if (this.completionCallback) {
287
+ this.completionCallback();
288
+ }
289
+ }
290
+ }
291
+ /**
292
+ * Parse complete cursor-agent stream output
293
+ */
294
+ export function parseCursorAgentOutput(output) {
295
+ const parser = new CursorAgentStreamParser();
296
+ parser.processLines(output);
297
+ return parser.getResult();
298
+ }
299
+ //# sourceMappingURL=cursor-agent.js.map