@stoneforge/smithy 0.1.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 (497) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +114 -0
  3. package/dist/api/index.d.ts +7 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +7 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/orchestrator-api.d.ts +153 -0
  8. package/dist/api/orchestrator-api.d.ts.map +1 -0
  9. package/dist/api/orchestrator-api.js +374 -0
  10. package/dist/api/orchestrator-api.js.map +1 -0
  11. package/dist/bin/sf.d.ts +3 -0
  12. package/dist/bin/sf.d.ts.map +1 -0
  13. package/dist/bin/sf.js +10 -0
  14. package/dist/bin/sf.js.map +1 -0
  15. package/dist/cli/commands/agent.d.ts +20 -0
  16. package/dist/cli/commands/agent.d.ts.map +1 -0
  17. package/dist/cli/commands/agent.js +861 -0
  18. package/dist/cli/commands/agent.js.map +1 -0
  19. package/dist/cli/commands/daemon.d.ts +14 -0
  20. package/dist/cli/commands/daemon.d.ts.map +1 -0
  21. package/dist/cli/commands/daemon.js +272 -0
  22. package/dist/cli/commands/daemon.js.map +1 -0
  23. package/dist/cli/commands/dispatch.d.ts +9 -0
  24. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  25. package/dist/cli/commands/dispatch.js +128 -0
  26. package/dist/cli/commands/dispatch.js.map +1 -0
  27. package/dist/cli/commands/merge.d.ts +11 -0
  28. package/dist/cli/commands/merge.d.ts.map +1 -0
  29. package/dist/cli/commands/merge.js +246 -0
  30. package/dist/cli/commands/merge.js.map +1 -0
  31. package/dist/cli/commands/pool.d.ts +21 -0
  32. package/dist/cli/commands/pool.d.ts.map +1 -0
  33. package/dist/cli/commands/pool.js +762 -0
  34. package/dist/cli/commands/pool.js.map +1 -0
  35. package/dist/cli/commands/serve.d.ts +54 -0
  36. package/dist/cli/commands/serve.d.ts.map +1 -0
  37. package/dist/cli/commands/serve.js +57 -0
  38. package/dist/cli/commands/serve.js.map +1 -0
  39. package/dist/cli/commands/task.d.ts +36 -0
  40. package/dist/cli/commands/task.d.ts.map +1 -0
  41. package/dist/cli/commands/task.js +889 -0
  42. package/dist/cli/commands/task.js.map +1 -0
  43. package/dist/cli/commands/test-orchestration.d.ts +32 -0
  44. package/dist/cli/commands/test-orchestration.d.ts.map +1 -0
  45. package/dist/cli/commands/test-orchestration.js +392 -0
  46. package/dist/cli/commands/test-orchestration.js.map +1 -0
  47. package/dist/cli/index.d.ts +13 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +15 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/plugin.d.ts +23 -0
  52. package/dist/cli/plugin.d.ts.map +1 -0
  53. package/dist/cli/plugin.js +36 -0
  54. package/dist/cli/plugin.js.map +1 -0
  55. package/dist/git/index.d.ts +10 -0
  56. package/dist/git/index.d.ts.map +1 -0
  57. package/dist/git/index.js +12 -0
  58. package/dist/git/index.js.map +1 -0
  59. package/dist/git/merge.d.ts +79 -0
  60. package/dist/git/merge.d.ts.map +1 -0
  61. package/dist/git/merge.js +254 -0
  62. package/dist/git/merge.js.map +1 -0
  63. package/dist/git/worktree-manager.d.ts +299 -0
  64. package/dist/git/worktree-manager.d.ts.map +1 -0
  65. package/dist/git/worktree-manager.js +744 -0
  66. package/dist/git/worktree-manager.js.map +1 -0
  67. package/dist/index.d.ts +24 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +31 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/prompts/director.md +272 -0
  72. package/dist/prompts/index.d.ts +100 -0
  73. package/dist/prompts/index.d.ts.map +1 -0
  74. package/dist/prompts/index.js +294 -0
  75. package/dist/prompts/index.js.map +1 -0
  76. package/dist/prompts/message-triage.md +50 -0
  77. package/dist/prompts/persistent-worker.md +240 -0
  78. package/dist/prompts/steward-base.md +64 -0
  79. package/dist/prompts/steward-docs.md +118 -0
  80. package/dist/prompts/steward-health.md +39 -0
  81. package/dist/prompts/steward-merge.md +168 -0
  82. package/dist/prompts/steward-ops.md +28 -0
  83. package/dist/prompts/steward-reminder.md +26 -0
  84. package/dist/prompts/worker.md +282 -0
  85. package/dist/providers/claude/headless.d.ts +18 -0
  86. package/dist/providers/claude/headless.d.ts.map +1 -0
  87. package/dist/providers/claude/headless.js +307 -0
  88. package/dist/providers/claude/headless.js.map +1 -0
  89. package/dist/providers/claude/index.d.ts +24 -0
  90. package/dist/providers/claude/index.d.ts.map +1 -0
  91. package/dist/providers/claude/index.js +80 -0
  92. package/dist/providers/claude/index.js.map +1 -0
  93. package/dist/providers/claude/interactive.d.ts +21 -0
  94. package/dist/providers/claude/interactive.d.ts.map +1 -0
  95. package/dist/providers/claude/interactive.js +142 -0
  96. package/dist/providers/claude/interactive.js.map +1 -0
  97. package/dist/providers/codex/event-mapper.d.ts +91 -0
  98. package/dist/providers/codex/event-mapper.d.ts.map +1 -0
  99. package/dist/providers/codex/event-mapper.js +299 -0
  100. package/dist/providers/codex/event-mapper.js.map +1 -0
  101. package/dist/providers/codex/headless.d.ts +20 -0
  102. package/dist/providers/codex/headless.d.ts.map +1 -0
  103. package/dist/providers/codex/headless.js +174 -0
  104. package/dist/providers/codex/headless.js.map +1 -0
  105. package/dist/providers/codex/index.d.ts +30 -0
  106. package/dist/providers/codex/index.d.ts.map +1 -0
  107. package/dist/providers/codex/index.js +55 -0
  108. package/dist/providers/codex/index.js.map +1 -0
  109. package/dist/providers/codex/interactive.d.ts +21 -0
  110. package/dist/providers/codex/interactive.d.ts.map +1 -0
  111. package/dist/providers/codex/interactive.js +141 -0
  112. package/dist/providers/codex/interactive.js.map +1 -0
  113. package/dist/providers/codex/jsonrpc-client.d.ts +52 -0
  114. package/dist/providers/codex/jsonrpc-client.d.ts.map +1 -0
  115. package/dist/providers/codex/jsonrpc-client.js +141 -0
  116. package/dist/providers/codex/jsonrpc-client.js.map +1 -0
  117. package/dist/providers/codex/server-manager.d.ts +100 -0
  118. package/dist/providers/codex/server-manager.d.ts.map +1 -0
  119. package/dist/providers/codex/server-manager.js +153 -0
  120. package/dist/providers/codex/server-manager.js.map +1 -0
  121. package/dist/providers/index.d.ts +15 -0
  122. package/dist/providers/index.d.ts.map +1 -0
  123. package/dist/providers/index.js +19 -0
  124. package/dist/providers/index.js.map +1 -0
  125. package/dist/providers/opencode/async-queue.d.ts +21 -0
  126. package/dist/providers/opencode/async-queue.d.ts.map +1 -0
  127. package/dist/providers/opencode/async-queue.js +51 -0
  128. package/dist/providers/opencode/async-queue.js.map +1 -0
  129. package/dist/providers/opencode/event-mapper.d.ts +132 -0
  130. package/dist/providers/opencode/event-mapper.d.ts.map +1 -0
  131. package/dist/providers/opencode/event-mapper.js +204 -0
  132. package/dist/providers/opencode/event-mapper.js.map +1 -0
  133. package/dist/providers/opencode/headless.d.ts +25 -0
  134. package/dist/providers/opencode/headless.d.ts.map +1 -0
  135. package/dist/providers/opencode/headless.js +190 -0
  136. package/dist/providers/opencode/headless.js.map +1 -0
  137. package/dist/providers/opencode/index.d.ts +33 -0
  138. package/dist/providers/opencode/index.d.ts.map +1 -0
  139. package/dist/providers/opencode/index.js +42 -0
  140. package/dist/providers/opencode/index.js.map +1 -0
  141. package/dist/providers/opencode/interactive.d.ts +21 -0
  142. package/dist/providers/opencode/interactive.d.ts.map +1 -0
  143. package/dist/providers/opencode/interactive.js +135 -0
  144. package/dist/providers/opencode/interactive.js.map +1 -0
  145. package/dist/providers/opencode/server-manager.d.ts +145 -0
  146. package/dist/providers/opencode/server-manager.d.ts.map +1 -0
  147. package/dist/providers/opencode/server-manager.js +163 -0
  148. package/dist/providers/opencode/server-manager.js.map +1 -0
  149. package/dist/providers/registry.d.ts +38 -0
  150. package/dist/providers/registry.d.ts.map +1 -0
  151. package/dist/providers/registry.js +82 -0
  152. package/dist/providers/registry.js.map +1 -0
  153. package/dist/providers/types.d.ts +144 -0
  154. package/dist/providers/types.d.ts.map +1 -0
  155. package/dist/providers/types.js +25 -0
  156. package/dist/providers/types.js.map +1 -0
  157. package/dist/runtime/event-utils.d.ts +8 -0
  158. package/dist/runtime/event-utils.d.ts.map +1 -0
  159. package/dist/runtime/event-utils.js +23 -0
  160. package/dist/runtime/event-utils.js.map +1 -0
  161. package/dist/runtime/handoff.d.ts +195 -0
  162. package/dist/runtime/handoff.d.ts.map +1 -0
  163. package/dist/runtime/handoff.js +332 -0
  164. package/dist/runtime/handoff.js.map +1 -0
  165. package/dist/runtime/index.d.ts +17 -0
  166. package/dist/runtime/index.d.ts.map +1 -0
  167. package/dist/runtime/index.js +60 -0
  168. package/dist/runtime/index.js.map +1 -0
  169. package/dist/runtime/message-mapper.d.ts +99 -0
  170. package/dist/runtime/message-mapper.d.ts.map +1 -0
  171. package/dist/runtime/message-mapper.js +202 -0
  172. package/dist/runtime/message-mapper.js.map +1 -0
  173. package/dist/runtime/predecessor-query.d.ts +212 -0
  174. package/dist/runtime/predecessor-query.d.ts.map +1 -0
  175. package/dist/runtime/predecessor-query.js +283 -0
  176. package/dist/runtime/predecessor-query.js.map +1 -0
  177. package/dist/runtime/session-manager.d.ts +466 -0
  178. package/dist/runtime/session-manager.d.ts.map +1 -0
  179. package/dist/runtime/session-manager.js +986 -0
  180. package/dist/runtime/session-manager.js.map +1 -0
  181. package/dist/runtime/spawner.d.ts +407 -0
  182. package/dist/runtime/spawner.d.ts.map +1 -0
  183. package/dist/runtime/spawner.js +781 -0
  184. package/dist/runtime/spawner.js.map +1 -0
  185. package/dist/server/config.d.ts +22 -0
  186. package/dist/server/config.d.ts.map +1 -0
  187. package/dist/server/config.js +59 -0
  188. package/dist/server/config.js.map +1 -0
  189. package/dist/server/daemon-state.d.ts +50 -0
  190. package/dist/server/daemon-state.d.ts.map +1 -0
  191. package/dist/server/daemon-state.js +100 -0
  192. package/dist/server/daemon-state.js.map +1 -0
  193. package/dist/server/events-websocket.d.ts +32 -0
  194. package/dist/server/events-websocket.d.ts.map +1 -0
  195. package/dist/server/events-websocket.js +96 -0
  196. package/dist/server/events-websocket.js.map +1 -0
  197. package/dist/server/formatters.d.ts +94 -0
  198. package/dist/server/formatters.d.ts.map +1 -0
  199. package/dist/server/formatters.js +142 -0
  200. package/dist/server/formatters.js.map +1 -0
  201. package/dist/server/index.d.ts +17 -0
  202. package/dist/server/index.d.ts.map +1 -0
  203. package/dist/server/index.js +153 -0
  204. package/dist/server/index.js.map +1 -0
  205. package/dist/server/lsp-websocket.d.ts +33 -0
  206. package/dist/server/lsp-websocket.d.ts.map +1 -0
  207. package/dist/server/lsp-websocket.js +161 -0
  208. package/dist/server/lsp-websocket.js.map +1 -0
  209. package/dist/server/routes/agents.d.ts +9 -0
  210. package/dist/server/routes/agents.d.ts.map +1 -0
  211. package/dist/server/routes/agents.js +369 -0
  212. package/dist/server/routes/agents.js.map +1 -0
  213. package/dist/server/routes/daemon.d.ts +13 -0
  214. package/dist/server/routes/daemon.d.ts.map +1 -0
  215. package/dist/server/routes/daemon.js +187 -0
  216. package/dist/server/routes/daemon.js.map +1 -0
  217. package/dist/server/routes/events.d.ts +23 -0
  218. package/dist/server/routes/events.d.ts.map +1 -0
  219. package/dist/server/routes/events.js +282 -0
  220. package/dist/server/routes/events.js.map +1 -0
  221. package/dist/server/routes/extensions.d.ts +9 -0
  222. package/dist/server/routes/extensions.d.ts.map +1 -0
  223. package/dist/server/routes/extensions.js +202 -0
  224. package/dist/server/routes/extensions.js.map +1 -0
  225. package/dist/server/routes/health.d.ts +7 -0
  226. package/dist/server/routes/health.d.ts.map +1 -0
  227. package/dist/server/routes/health.js +33 -0
  228. package/dist/server/routes/health.js.map +1 -0
  229. package/dist/server/routes/index.d.ts +21 -0
  230. package/dist/server/routes/index.d.ts.map +1 -0
  231. package/dist/server/routes/index.js +21 -0
  232. package/dist/server/routes/index.js.map +1 -0
  233. package/dist/server/routes/lsp.d.ts +9 -0
  234. package/dist/server/routes/lsp.d.ts.map +1 -0
  235. package/dist/server/routes/lsp.js +50 -0
  236. package/dist/server/routes/lsp.js.map +1 -0
  237. package/dist/server/routes/plugins.d.ts +9 -0
  238. package/dist/server/routes/plugins.d.ts.map +1 -0
  239. package/dist/server/routes/plugins.js +109 -0
  240. package/dist/server/routes/plugins.js.map +1 -0
  241. package/dist/server/routes/pools.d.ts +9 -0
  242. package/dist/server/routes/pools.d.ts.map +1 -0
  243. package/dist/server/routes/pools.js +189 -0
  244. package/dist/server/routes/pools.js.map +1 -0
  245. package/dist/server/routes/scheduler.d.ts +9 -0
  246. package/dist/server/routes/scheduler.d.ts.map +1 -0
  247. package/dist/server/routes/scheduler.js +162 -0
  248. package/dist/server/routes/scheduler.js.map +1 -0
  249. package/dist/server/routes/sessions.d.ts +27 -0
  250. package/dist/server/routes/sessions.d.ts.map +1 -0
  251. package/dist/server/routes/sessions.js +773 -0
  252. package/dist/server/routes/sessions.js.map +1 -0
  253. package/dist/server/routes/tasks.d.ts +9 -0
  254. package/dist/server/routes/tasks.d.ts.map +1 -0
  255. package/dist/server/routes/tasks.js +954 -0
  256. package/dist/server/routes/tasks.js.map +1 -0
  257. package/dist/server/routes/upload.d.ts +8 -0
  258. package/dist/server/routes/upload.d.ts.map +1 -0
  259. package/dist/server/routes/upload.js +40 -0
  260. package/dist/server/routes/upload.js.map +1 -0
  261. package/dist/server/routes/workflows.d.ts +9 -0
  262. package/dist/server/routes/workflows.d.ts.map +1 -0
  263. package/dist/server/routes/workflows.js +532 -0
  264. package/dist/server/routes/workflows.js.map +1 -0
  265. package/dist/server/routes/workspace-files.d.ts +12 -0
  266. package/dist/server/routes/workspace-files.d.ts.map +1 -0
  267. package/dist/server/routes/workspace-files.js +520 -0
  268. package/dist/server/routes/workspace-files.js.map +1 -0
  269. package/dist/server/routes/worktrees.d.ts +9 -0
  270. package/dist/server/routes/worktrees.d.ts.map +1 -0
  271. package/dist/server/routes/worktrees.js +94 -0
  272. package/dist/server/routes/worktrees.js.map +1 -0
  273. package/dist/server/server.d.ts +14 -0
  274. package/dist/server/server.d.ts.map +1 -0
  275. package/dist/server/server.js +258 -0
  276. package/dist/server/server.js.map +1 -0
  277. package/dist/server/services/lsp-manager.d.ts +93 -0
  278. package/dist/server/services/lsp-manager.d.ts.map +1 -0
  279. package/dist/server/services/lsp-manager.js +291 -0
  280. package/dist/server/services/lsp-manager.js.map +1 -0
  281. package/dist/server/services/session-messages.d.ts +61 -0
  282. package/dist/server/services/session-messages.d.ts.map +1 -0
  283. package/dist/server/services/session-messages.js +101 -0
  284. package/dist/server/services/session-messages.js.map +1 -0
  285. package/dist/server/services.d.ts +35 -0
  286. package/dist/server/services.d.ts.map +1 -0
  287. package/dist/server/services.js +159 -0
  288. package/dist/server/services.js.map +1 -0
  289. package/dist/server/static.d.ts +18 -0
  290. package/dist/server/static.d.ts.map +1 -0
  291. package/dist/server/static.js +71 -0
  292. package/dist/server/static.js.map +1 -0
  293. package/dist/server/types.d.ts +20 -0
  294. package/dist/server/types.d.ts.map +1 -0
  295. package/dist/server/types.js +7 -0
  296. package/dist/server/types.js.map +1 -0
  297. package/dist/server/websocket.d.ts +16 -0
  298. package/dist/server/websocket.d.ts.map +1 -0
  299. package/dist/server/websocket.js +143 -0
  300. package/dist/server/websocket.js.map +1 -0
  301. package/dist/services/agent-pool-service.d.ts +181 -0
  302. package/dist/services/agent-pool-service.d.ts.map +1 -0
  303. package/dist/services/agent-pool-service.js +590 -0
  304. package/dist/services/agent-pool-service.js.map +1 -0
  305. package/dist/services/agent-registry.d.ts +185 -0
  306. package/dist/services/agent-registry.d.ts.map +1 -0
  307. package/dist/services/agent-registry.js +432 -0
  308. package/dist/services/agent-registry.js.map +1 -0
  309. package/dist/services/dispatch-daemon.d.ts +429 -0
  310. package/dist/services/dispatch-daemon.d.ts.map +1 -0
  311. package/dist/services/dispatch-daemon.js +1833 -0
  312. package/dist/services/dispatch-daemon.js.map +1 -0
  313. package/dist/services/dispatch-service.d.ts +148 -0
  314. package/dist/services/dispatch-service.d.ts.map +1 -0
  315. package/dist/services/dispatch-service.js +170 -0
  316. package/dist/services/dispatch-service.js.map +1 -0
  317. package/dist/services/docs-steward-service.d.ts +199 -0
  318. package/dist/services/docs-steward-service.d.ts.map +1 -0
  319. package/dist/services/docs-steward-service.js +599 -0
  320. package/dist/services/docs-steward-service.js.map +1 -0
  321. package/dist/services/health-steward-service.d.ts +446 -0
  322. package/dist/services/health-steward-service.d.ts.map +1 -0
  323. package/dist/services/health-steward-service.js +866 -0
  324. package/dist/services/health-steward-service.js.map +1 -0
  325. package/dist/services/index.d.ts +26 -0
  326. package/dist/services/index.d.ts.map +1 -0
  327. package/dist/services/index.js +111 -0
  328. package/dist/services/index.js.map +1 -0
  329. package/dist/services/merge-request-provider.d.ts +59 -0
  330. package/dist/services/merge-request-provider.d.ts.map +1 -0
  331. package/dist/services/merge-request-provider.js +89 -0
  332. package/dist/services/merge-request-provider.js.map +1 -0
  333. package/dist/services/merge-steward-service.d.ts +268 -0
  334. package/dist/services/merge-steward-service.d.ts.map +1 -0
  335. package/dist/services/merge-steward-service.js +568 -0
  336. package/dist/services/merge-steward-service.js.map +1 -0
  337. package/dist/services/plugin-executor.d.ts +247 -0
  338. package/dist/services/plugin-executor.d.ts.map +1 -0
  339. package/dist/services/plugin-executor.js +451 -0
  340. package/dist/services/plugin-executor.js.map +1 -0
  341. package/dist/services/role-definition-service.d.ts +117 -0
  342. package/dist/services/role-definition-service.d.ts.map +1 -0
  343. package/dist/services/role-definition-service.js +289 -0
  344. package/dist/services/role-definition-service.js.map +1 -0
  345. package/dist/services/steward-scheduler.d.ts +336 -0
  346. package/dist/services/steward-scheduler.d.ts.map +1 -0
  347. package/dist/services/steward-scheduler.js +732 -0
  348. package/dist/services/steward-scheduler.js.map +1 -0
  349. package/dist/services/task-assignment-service.d.ts +291 -0
  350. package/dist/services/task-assignment-service.d.ts.map +1 -0
  351. package/dist/services/task-assignment-service.js +454 -0
  352. package/dist/services/task-assignment-service.js.map +1 -0
  353. package/dist/services/worker-task-service.d.ts +202 -0
  354. package/dist/services/worker-task-service.d.ts.map +1 -0
  355. package/dist/services/worker-task-service.js +228 -0
  356. package/dist/services/worker-task-service.js.map +1 -0
  357. package/dist/testing/index.d.ts +13 -0
  358. package/dist/testing/index.d.ts.map +1 -0
  359. package/dist/testing/index.js +17 -0
  360. package/dist/testing/index.js.map +1 -0
  361. package/dist/testing/orchestration-tests.d.ts +62 -0
  362. package/dist/testing/orchestration-tests.d.ts.map +1 -0
  363. package/dist/testing/orchestration-tests.js +1115 -0
  364. package/dist/testing/orchestration-tests.js.map +1 -0
  365. package/dist/testing/test-context.d.ts +171 -0
  366. package/dist/testing/test-context.d.ts.map +1 -0
  367. package/dist/testing/test-context.js +665 -0
  368. package/dist/testing/test-context.js.map +1 -0
  369. package/dist/testing/test-prompts.d.ts +46 -0
  370. package/dist/testing/test-prompts.d.ts.map +1 -0
  371. package/dist/testing/test-prompts.js +140 -0
  372. package/dist/testing/test-prompts.js.map +1 -0
  373. package/dist/testing/test-utils.d.ts +200 -0
  374. package/dist/testing/test-utils.d.ts.map +1 -0
  375. package/dist/testing/test-utils.js +378 -0
  376. package/dist/testing/test-utils.js.map +1 -0
  377. package/dist/types/agent-pool.d.ts +215 -0
  378. package/dist/types/agent-pool.d.ts.map +1 -0
  379. package/dist/types/agent-pool.js +143 -0
  380. package/dist/types/agent-pool.js.map +1 -0
  381. package/dist/types/agent.d.ts +265 -0
  382. package/dist/types/agent.d.ts.map +1 -0
  383. package/dist/types/agent.js +127 -0
  384. package/dist/types/agent.js.map +1 -0
  385. package/dist/types/index.d.ts +11 -0
  386. package/dist/types/index.d.ts.map +1 -0
  387. package/dist/types/index.js +40 -0
  388. package/dist/types/index.js.map +1 -0
  389. package/dist/types/message-types.d.ts +294 -0
  390. package/dist/types/message-types.d.ts.map +1 -0
  391. package/dist/types/message-types.js +354 -0
  392. package/dist/types/message-types.js.map +1 -0
  393. package/dist/types/role-definition.d.ts +272 -0
  394. package/dist/types/role-definition.d.ts.map +1 -0
  395. package/dist/types/role-definition.js +144 -0
  396. package/dist/types/role-definition.js.map +1 -0
  397. package/dist/types/task-meta.d.ts +248 -0
  398. package/dist/types/task-meta.d.ts.map +1 -0
  399. package/dist/types/task-meta.js +213 -0
  400. package/dist/types/task-meta.js.map +1 -0
  401. package/package.json +120 -0
  402. package/web/assets/abap-BrgZPUOV.js +6 -0
  403. package/web/assets/apex-DyP6w7ZV.js +6 -0
  404. package/web/assets/azcli-BaLxmfj-.js +6 -0
  405. package/web/assets/bat-CFOPXBzS.js +6 -0
  406. package/web/assets/bicep-BfEKNvv3.js +7 -0
  407. package/web/assets/cameligo-BFG1Mk7z.js +6 -0
  408. package/web/assets/clojure-DTECt2xU.js +6 -0
  409. package/web/assets/codicon-DCmgc-ay.ttf +0 -0
  410. package/web/assets/coffee-CDGzqUPQ.js +6 -0
  411. package/web/assets/cpp-CLLBncYj.js +6 -0
  412. package/web/assets/csharp-dUCx_-0o.js +6 -0
  413. package/web/assets/csp-5Rap-vPy.js +6 -0
  414. package/web/assets/css-D3h14YRZ.js +8 -0
  415. package/web/assets/cssMode-DMo-5YLA.js +9 -0
  416. package/web/assets/cypher-DrQuvNYM.js +6 -0
  417. package/web/assets/dart-CFKIUWau.js +6 -0
  418. package/web/assets/dockerfile-Zznr-cwX.js +6 -0
  419. package/web/assets/ecl-Ce3n6wWz.js +6 -0
  420. package/web/assets/elixir-deUWdS0T.js +6 -0
  421. package/web/assets/flow9-i9-g7ZhI.js +6 -0
  422. package/web/assets/freemarker2-D4qgkQzN.js +8 -0
  423. package/web/assets/fsharp-CzKuDChf.js +6 -0
  424. package/web/assets/go-Cphgjts3.js +6 -0
  425. package/web/assets/graphql-Cg7bfA9N.js +6 -0
  426. package/web/assets/handlebars-CXFvNjQC.js +6 -0
  427. package/web/assets/hcl-0cvrggvQ.js +6 -0
  428. package/web/assets/html-oyuB_D-B.js +6 -0
  429. package/web/assets/htmlMode-iWuZ24-r.js +9 -0
  430. package/web/assets/index-DqP-_E4F.css +32 -0
  431. package/web/assets/index-R1cylSgw.js +1665 -0
  432. package/web/assets/ini-Drc7WvVn.js +6 -0
  433. package/web/assets/java-B_fMsGYe.js +6 -0
  434. package/web/assets/javascript-CRIkN2Pg.js +6 -0
  435. package/web/assets/jsonMode-DVDkDgex.js +15 -0
  436. package/web/assets/julia-Bqgm2twL.js +6 -0
  437. package/web/assets/kotlin-BSkB5QuD.js +6 -0
  438. package/web/assets/less-BsTHnhdd.js +7 -0
  439. package/web/assets/lexon-YWi4-JPR.js +6 -0
  440. package/web/assets/liquid-CSfldbB5.js +6 -0
  441. package/web/assets/lua-nf6ki56Z.js +6 -0
  442. package/web/assets/m3-Cpb6xl2v.js +6 -0
  443. package/web/assets/markdown-DSZPf7rp.js +6 -0
  444. package/web/assets/mdx-Dd58iymR.js +6 -0
  445. package/web/assets/mips-B_c3zf-v.js +6 -0
  446. package/web/assets/monaco-editor-B4lwqA13.js +751 -0
  447. package/web/assets/monaco-editor-CQpyCxOA.css +1 -0
  448. package/web/assets/msdax-rUNN04Wq.js +6 -0
  449. package/web/assets/mysql-DDwshQtU.js +6 -0
  450. package/web/assets/objective-c-B5zXfXm9.js +6 -0
  451. package/web/assets/pascal-CXOwvkN_.js +6 -0
  452. package/web/assets/pascaligo-Bc-ZgV77.js +6 -0
  453. package/web/assets/perl-CwNk8-XU.js +6 -0
  454. package/web/assets/pgsql-tGk8EFnU.js +6 -0
  455. package/web/assets/php-CpIb_Oan.js +6 -0
  456. package/web/assets/pla-B03wrqEc.js +6 -0
  457. package/web/assets/postiats-BKlk5iyT.js +6 -0
  458. package/web/assets/powerquery-Bhzvs7bI.js +6 -0
  459. package/web/assets/powershell-Dd3NCNK9.js +6 -0
  460. package/web/assets/protobuf-COyEY5Pt.js +7 -0
  461. package/web/assets/pug-BaJupSGV.js +6 -0
  462. package/web/assets/python-XWrMqdhO.js +6 -0
  463. package/web/assets/qsharp-DXyYeYxl.js +6 -0
  464. package/web/assets/r-CdQndTaG.js +6 -0
  465. package/web/assets/razor-DPlhCpIs.js +6 -0
  466. package/web/assets/redis-CVwtpugi.js +6 -0
  467. package/web/assets/redshift-25W9uPmb.js +6 -0
  468. package/web/assets/restructuredtext-DfzH4Xui.js +6 -0
  469. package/web/assets/router-vendor-DHlGizSU.js +41 -0
  470. package/web/assets/ruby-Cp1zYvxS.js +6 -0
  471. package/web/assets/rust-D5C2fndG.js +6 -0
  472. package/web/assets/sb-CDntyWJ8.js +6 -0
  473. package/web/assets/scala-BoFRg7Ot.js +6 -0
  474. package/web/assets/scheme-Bio4gycK.js +6 -0
  475. package/web/assets/scss-4Ik7cdeQ.js +8 -0
  476. package/web/assets/shell-CX-rkNHf.js +6 -0
  477. package/web/assets/solidity-Tw7wswEv.js +6 -0
  478. package/web/assets/sophia-C5WLch3f.js +6 -0
  479. package/web/assets/sparql-DHaeiCBh.js +6 -0
  480. package/web/assets/sql-CCSDG5nI.js +6 -0
  481. package/web/assets/st-pnP8ivHi.js +6 -0
  482. package/web/assets/swift-DwJ7jVG9.js +8 -0
  483. package/web/assets/systemverilog-B9Xyijhd.js +6 -0
  484. package/web/assets/tcl-DnHyzjbg.js +6 -0
  485. package/web/assets/tsMode-BbA1Jbf3.js +16 -0
  486. package/web/assets/twig-CPajHgWi.js +6 -0
  487. package/web/assets/typescript-DcLHYzvH.js +6 -0
  488. package/web/assets/typespec-D-MeaMDU.js +6 -0
  489. package/web/assets/ui-vendor-BSco96uv.js +51 -0
  490. package/web/assets/utils-vendor-DaJ2Dubl.js +911 -0
  491. package/web/assets/vb-DgyLZaXg.js +6 -0
  492. package/web/assets/wgsl-DYQUnd45.js +303 -0
  493. package/web/assets/xml-xKYS3dO6.js +6 -0
  494. package/web/assets/yaml-CNmlXqzH.js +6 -0
  495. package/web/favicon.ico +0 -0
  496. package/web/index.html +22 -0
  497. package/web/logo.png +0 -0
@@ -0,0 +1,599 @@
1
+ /**
2
+ * Docs Steward Service
3
+ *
4
+ * This service provides documentation verification and auto-fix capabilities
5
+ * for the orchestration system. The Docs Steward scans documentation for issues
6
+ * like broken file paths, stale links, and outdated references, then fixes
7
+ * low/medium complexity issues automatically.
8
+ *
9
+ * Key features:
10
+ * - Scan docs for file path references that don't exist
11
+ * - Verify internal markdown links resolve
12
+ * - Check documented exports match actual package exports
13
+ * - Verify CLI command documentation matches implementation
14
+ * - Check type field documentation matches TypeScript definitions
15
+ * - Verify API method documentation matches class definitions
16
+ * - Session lifecycle: worktree creation, commits, self-merge, cleanup
17
+ *
18
+ * @module
19
+ */
20
+ import { exec } from 'node:child_process';
21
+ import { promisify } from 'node:util';
22
+ import * as fs from 'node:fs';
23
+ import * as path from 'node:path';
24
+ const execAsync = promisify(exec);
25
+ const readFile = promisify(fs.readFile);
26
+ const readdir = promisify(fs.readdir);
27
+ // ============================================================================
28
+ // Implementation
29
+ // ============================================================================
30
+ const DEFAULT_DOCS_DIR = 'docs';
31
+ const DEFAULT_SOURCE_DIRS = ['packages', 'apps'];
32
+ const DEFAULT_AUTO_PUSH = true;
33
+ /**
34
+ * Implementation of the Docs Steward Service
35
+ */
36
+ export class DocsStewardServiceImpl {
37
+ config;
38
+ targetBranch;
39
+ sessionWorktreePath;
40
+ constructor(config) {
41
+ this.config = {
42
+ workspaceRoot: config.workspaceRoot,
43
+ docsDir: config.docsDir ?? DEFAULT_DOCS_DIR,
44
+ sourceDirs: config.sourceDirs ?? [...DEFAULT_SOURCE_DIRS],
45
+ autoPush: config.autoPush ?? DEFAULT_AUTO_PUSH,
46
+ targetBranch: config.targetBranch,
47
+ };
48
+ }
49
+ // ----------------------------------------
50
+ // Verification Methods
51
+ // ----------------------------------------
52
+ async scanAll() {
53
+ const startTime = Date.now();
54
+ const allIssues = [];
55
+ // Run all verification checks in parallel
56
+ const [filePaths, internalLinks, exports, cli, types, api] = await Promise.all([
57
+ this.verifyFilePaths(),
58
+ this.verifyInternalLinks(),
59
+ this.verifyExports(),
60
+ this.verifyCliCommands(),
61
+ this.verifyTypeFields(),
62
+ this.verifyApiMethods(),
63
+ ]);
64
+ allIssues.push(...filePaths, ...internalLinks, ...exports, ...cli, ...types, ...api);
65
+ // Count files scanned
66
+ const docsPath = path.join(this.config.workspaceRoot, this.config.docsDir);
67
+ const filesScanned = await this.countMarkdownFiles(docsPath);
68
+ return {
69
+ issues: allIssues,
70
+ filesScanned,
71
+ durationMs: Date.now() - startTime,
72
+ };
73
+ }
74
+ async verifyFilePaths() {
75
+ const issues = [];
76
+ const docsPath = path.join(this.config.workspaceRoot, this.config.docsDir);
77
+ const markdownFiles = await this.findMarkdownFiles(docsPath);
78
+ for (const file of markdownFiles) {
79
+ const content = await readFile(file, 'utf-8');
80
+ const lines = content.split('\n');
81
+ for (let i = 0; i < lines.length; i++) {
82
+ const line = lines[i];
83
+ const lineNum = i + 1;
84
+ // Match inline code containing file paths
85
+ const codeMatches = line.matchAll(/`([^`]+\.(ts|js|tsx|jsx|json|md))`/g);
86
+ for (const match of codeMatches) {
87
+ const filePath = match[1];
88
+ // Skip if it looks like a pattern (contains *)
89
+ if (filePath.includes('*'))
90
+ continue;
91
+ // Skip if it's a relative doc link
92
+ if (filePath.startsWith('#') || filePath.startsWith('./') && filePath.endsWith('.md'))
93
+ continue;
94
+ const fullPath = path.join(this.config.workspaceRoot, filePath);
95
+ if (!fs.existsSync(fullPath)) {
96
+ const suggestedFix = await this.findSimilarFile(filePath);
97
+ issues.push({
98
+ type: 'file_path',
99
+ file: path.relative(this.config.workspaceRoot, file),
100
+ line: lineNum,
101
+ description: `File path does not exist: ${filePath}`,
102
+ currentValue: filePath,
103
+ suggestedFix,
104
+ confidence: suggestedFix ? 'medium' : 'low',
105
+ context: this.getContext(lines, i),
106
+ complexity: suggestedFix ? 'low' : 'medium',
107
+ });
108
+ }
109
+ }
110
+ // Match file map table entries (| `path` | or | path |)
111
+ const tableMatch = line.match(/\|\s*`?([^|`]+\.(ts|js))`?\s*\|/);
112
+ if (tableMatch) {
113
+ const filePath = tableMatch[1].trim();
114
+ if (!filePath.includes('*')) {
115
+ const fullPath = path.join(this.config.workspaceRoot, filePath);
116
+ if (!fs.existsSync(fullPath)) {
117
+ const suggestedFix = await this.findSimilarFile(filePath);
118
+ issues.push({
119
+ type: 'file_path',
120
+ file: path.relative(this.config.workspaceRoot, file),
121
+ line: lineNum,
122
+ description: `File path in table does not exist: ${filePath}`,
123
+ currentValue: filePath,
124
+ suggestedFix,
125
+ confidence: suggestedFix ? 'medium' : 'low',
126
+ context: this.getContext(lines, i),
127
+ complexity: suggestedFix ? 'low' : 'medium',
128
+ });
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ return issues;
135
+ }
136
+ async verifyInternalLinks() {
137
+ const issues = [];
138
+ const docsPath = path.join(this.config.workspaceRoot, this.config.docsDir);
139
+ const markdownFiles = await this.findMarkdownFiles(docsPath);
140
+ for (const file of markdownFiles) {
141
+ const content = await readFile(file, 'utf-8');
142
+ const lines = content.split('\n');
143
+ const fileDir = path.dirname(file);
144
+ for (let i = 0; i < lines.length; i++) {
145
+ const line = lines[i];
146
+ const lineNum = i + 1;
147
+ // Match markdown links: [text](path) or [text](path#anchor)
148
+ const linkMatches = line.matchAll(/\[[^\]]*\]\(([^)]+)\)/g);
149
+ for (const match of linkMatches) {
150
+ const linkTarget = match[1];
151
+ // Skip external links
152
+ if (linkTarget.startsWith('http://') || linkTarget.startsWith('https://'))
153
+ continue;
154
+ // Skip pure anchors
155
+ if (linkTarget.startsWith('#')) {
156
+ // Verify anchor exists in current file
157
+ const anchor = linkTarget.slice(1);
158
+ if (!this.anchorExistsInContent(content, anchor)) {
159
+ issues.push({
160
+ type: 'internal_link',
161
+ file: path.relative(this.config.workspaceRoot, file),
162
+ line: lineNum,
163
+ description: `Anchor not found in current file: ${linkTarget}`,
164
+ currentValue: linkTarget,
165
+ confidence: 'high',
166
+ context: this.getContext(lines, i),
167
+ complexity: 'low',
168
+ });
169
+ }
170
+ continue;
171
+ }
172
+ // Parse path and optional anchor
173
+ const [targetPath, anchor] = linkTarget.split('#');
174
+ const resolvedPath = path.resolve(fileDir, targetPath);
175
+ // Check if target file exists
176
+ if (!fs.existsSync(resolvedPath)) {
177
+ issues.push({
178
+ type: 'internal_link',
179
+ file: path.relative(this.config.workspaceRoot, file),
180
+ line: lineNum,
181
+ description: `Link target does not exist: ${targetPath}`,
182
+ currentValue: linkTarget,
183
+ confidence: 'high',
184
+ context: this.getContext(lines, i),
185
+ complexity: 'low',
186
+ });
187
+ }
188
+ else if (anchor) {
189
+ // Verify anchor exists in target file
190
+ try {
191
+ const targetContent = await readFile(resolvedPath, 'utf-8');
192
+ if (!this.anchorExistsInContent(targetContent, anchor)) {
193
+ issues.push({
194
+ type: 'internal_link',
195
+ file: path.relative(this.config.workspaceRoot, file),
196
+ line: lineNum,
197
+ description: `Anchor not found in target file: #${anchor}`,
198
+ currentValue: linkTarget,
199
+ confidence: 'high',
200
+ context: this.getContext(lines, i),
201
+ complexity: 'low',
202
+ });
203
+ }
204
+ }
205
+ catch {
206
+ // Skip if can't read target file
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ return issues;
213
+ }
214
+ async verifyExports() {
215
+ const issues = [];
216
+ const docsPath = path.join(this.config.workspaceRoot, this.config.docsDir);
217
+ const markdownFiles = await this.findMarkdownFiles(docsPath);
218
+ // Find index files for each package
219
+ const indexFiles = await this.findIndexFiles();
220
+ for (const file of markdownFiles) {
221
+ const content = await readFile(file, 'utf-8');
222
+ const lines = content.split('\n');
223
+ // Look for "Key Exports" or similar sections
224
+ let inExportsSection = false;
225
+ for (let i = 0; i < lines.length; i++) {
226
+ const line = lines[i];
227
+ const lineNum = i + 1;
228
+ // Detect exports section headers
229
+ if (/^#+\s*(Key\s+)?Exports?/i.test(line)) {
230
+ inExportsSection = true;
231
+ continue;
232
+ }
233
+ // End section on next header
234
+ if (inExportsSection && /^#+\s/.test(line) && !/exports?/i.test(line)) {
235
+ inExportsSection = false;
236
+ continue;
237
+ }
238
+ if (!inExportsSection)
239
+ continue;
240
+ // Match documented exports in backticks
241
+ const exportMatches = line.matchAll(/`([A-Z][a-zA-Z0-9]*)`/g);
242
+ for (const match of exportMatches) {
243
+ const exportName = match[1];
244
+ // Check if this export exists in any index file
245
+ let found = false;
246
+ for (const indexFile of indexFiles) {
247
+ try {
248
+ const indexContent = await readFile(indexFile, 'utf-8');
249
+ if (indexContent.includes(exportName)) {
250
+ found = true;
251
+ break;
252
+ }
253
+ }
254
+ catch {
255
+ // Skip unreadable files
256
+ }
257
+ }
258
+ if (!found) {
259
+ issues.push({
260
+ type: 'export',
261
+ file: path.relative(this.config.workspaceRoot, file),
262
+ line: lineNum,
263
+ description: `Documented export not found: ${exportName}`,
264
+ currentValue: exportName,
265
+ confidence: 'medium',
266
+ context: this.getContext(lines, i),
267
+ complexity: 'medium',
268
+ });
269
+ }
270
+ }
271
+ }
272
+ }
273
+ return issues;
274
+ }
275
+ async verifyCliCommands() {
276
+ const issues = [];
277
+ const docsPath = path.join(this.config.workspaceRoot, this.config.docsDir);
278
+ // Find CLI reference docs
279
+ const cliDocsPath = path.join(docsPath, 'reference', 'cli.md');
280
+ if (!fs.existsSync(cliDocsPath)) {
281
+ return issues; // No CLI docs to verify
282
+ }
283
+ // Find CLI command definitions
284
+ const cliCommandsDir = path.join(this.config.workspaceRoot, 'packages/quarry/src/cli/commands');
285
+ if (!fs.existsSync(cliCommandsDir)) {
286
+ return issues; // No CLI implementation to verify against
287
+ }
288
+ const content = await readFile(cliDocsPath, 'utf-8');
289
+ const lines = content.split('\n');
290
+ // Get available commands from implementation
291
+ const availableCommands = await this.getCliCommands(cliCommandsDir);
292
+ for (let i = 0; i < lines.length; i++) {
293
+ const line = lines[i];
294
+ const lineNum = i + 1;
295
+ // Match CLI command invocations like `sf task list` or `sf gc workflows`
296
+ const cmdMatch = line.match(/`sf\s+([a-z-]+(?:\s+[a-z-]+)?)`/);
297
+ if (cmdMatch) {
298
+ const command = cmdMatch[1];
299
+ const mainCommand = command.split(/\s+/)[0];
300
+ if (!availableCommands.has(mainCommand)) {
301
+ issues.push({
302
+ type: 'cli',
303
+ file: path.relative(this.config.workspaceRoot, cliDocsPath),
304
+ line: lineNum,
305
+ description: `CLI command not found: sf ${mainCommand}`,
306
+ currentValue: `sf ${command}`,
307
+ confidence: 'high',
308
+ context: this.getContext(lines, i),
309
+ complexity: 'medium',
310
+ });
311
+ }
312
+ }
313
+ // Note: CLI flag verification (--verbose, --status, etc.) would require
314
+ // more sophisticated parsing to verify flags belong to specific commands.
315
+ // This can be enhanced in the future.
316
+ }
317
+ return issues;
318
+ }
319
+ async verifyTypeFields() {
320
+ const issues = [];
321
+ // Type field verification requires parsing TypeScript AST
322
+ // For now, return empty - can be enhanced with typescript compiler API
323
+ return issues;
324
+ }
325
+ async verifyApiMethods() {
326
+ const issues = [];
327
+ // API method verification requires parsing TypeScript classes
328
+ // For now, return empty - can be enhanced with typescript compiler API
329
+ return issues;
330
+ }
331
+ // ----------------------------------------
332
+ // Session Lifecycle
333
+ // ----------------------------------------
334
+ async createSessionWorktree(stewardName) {
335
+ const branchName = `${stewardName}/docs/auto-updates`;
336
+ const worktreePath = path.join(this.config.workspaceRoot, '.stoneforge/.worktrees', `docs-steward-${Date.now()}`);
337
+ // Get target branch
338
+ const targetBranch = await this.getTargetBranch();
339
+ // Check if worktree already exists and clean up if so
340
+ if (fs.existsSync(worktreePath)) {
341
+ await execAsync(`git worktree remove --force "${worktreePath}"`, {
342
+ cwd: this.config.workspaceRoot,
343
+ });
344
+ }
345
+ // Check if branch exists
346
+ let branchExists = false;
347
+ try {
348
+ await execAsync(`git rev-parse --verify ${branchName}`, {
349
+ cwd: this.config.workspaceRoot,
350
+ });
351
+ branchExists = true;
352
+ }
353
+ catch {
354
+ branchExists = false;
355
+ }
356
+ // Create worktree with new or existing branch
357
+ if (branchExists) {
358
+ await execAsync(`git worktree add "${worktreePath}" ${branchName}`, {
359
+ cwd: this.config.workspaceRoot,
360
+ });
361
+ }
362
+ else {
363
+ await execAsync(`git worktree add -b ${branchName} "${worktreePath}" ${targetBranch}`, { cwd: this.config.workspaceRoot });
364
+ }
365
+ this.sessionWorktreePath = worktreePath;
366
+ return {
367
+ path: worktreePath,
368
+ branch: branchName,
369
+ created: !branchExists,
370
+ };
371
+ }
372
+ async commitFix(message, files) {
373
+ if (!this.sessionWorktreePath) {
374
+ throw new Error('No active session worktree');
375
+ }
376
+ // Stage specified files
377
+ for (const file of files) {
378
+ await execAsync(`git add "${file}"`, {
379
+ cwd: this.sessionWorktreePath,
380
+ });
381
+ }
382
+ // Commit
383
+ await execAsync(`git commit -m "${message.replace(/"/g, '\\"')}"`, {
384
+ cwd: this.sessionWorktreePath,
385
+ });
386
+ }
387
+ async mergeAndCleanup(branchName, commitMessage) {
388
+ const worktreePath = this.sessionWorktreePath;
389
+ if (!worktreePath) {
390
+ return {
391
+ success: false,
392
+ error: 'No active session worktree',
393
+ hasConflict: false,
394
+ };
395
+ }
396
+ const { mergeBranch } = await import('../git/merge.js');
397
+ const result = await mergeBranch({
398
+ workspaceRoot: this.config.workspaceRoot,
399
+ sourceBranch: branchName,
400
+ targetBranch: await this.getTargetBranch(),
401
+ mergeStrategy: 'squash',
402
+ autoPush: this.config.autoPush,
403
+ commitMessage,
404
+ preflight: false,
405
+ syncLocal: false,
406
+ });
407
+ if (result.success) {
408
+ await this.cleanupSession(worktreePath, branchName);
409
+ }
410
+ return result;
411
+ }
412
+ async cleanupSession(worktreePath, branchName) {
413
+ // Remove worktree
414
+ try {
415
+ await execAsync(`git worktree remove --force "${worktreePath}"`, {
416
+ cwd: this.config.workspaceRoot,
417
+ });
418
+ }
419
+ catch {
420
+ // Ignore errors
421
+ }
422
+ // Delete local branch
423
+ try {
424
+ await execAsync(`git branch -D ${branchName}`, {
425
+ cwd: this.config.workspaceRoot,
426
+ });
427
+ }
428
+ catch {
429
+ // Ignore errors
430
+ }
431
+ this.sessionWorktreePath = undefined;
432
+ }
433
+ // ----------------------------------------
434
+ // Private Helpers
435
+ // ----------------------------------------
436
+ async findMarkdownFiles(dir) {
437
+ const files = [];
438
+ try {
439
+ const entries = await readdir(dir, { withFileTypes: true });
440
+ for (const entry of entries) {
441
+ const fullPath = path.join(dir, entry.name);
442
+ if (entry.isDirectory()) {
443
+ // Skip node_modules and hidden directories
444
+ if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
445
+ continue;
446
+ }
447
+ const subFiles = await this.findMarkdownFiles(fullPath);
448
+ files.push(...subFiles);
449
+ }
450
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
451
+ files.push(fullPath);
452
+ }
453
+ }
454
+ }
455
+ catch {
456
+ // Directory doesn't exist or isn't readable
457
+ }
458
+ return files;
459
+ }
460
+ async countMarkdownFiles(dir) {
461
+ const files = await this.findMarkdownFiles(dir);
462
+ return files.length;
463
+ }
464
+ async findSimilarFile(filePath) {
465
+ const fileName = path.basename(filePath);
466
+ const fileDir = path.dirname(filePath);
467
+ // Try to find a file with similar name in the same directory
468
+ const fullDir = path.join(this.config.workspaceRoot, fileDir);
469
+ try {
470
+ if (fs.existsSync(fullDir)) {
471
+ const entries = await readdir(fullDir);
472
+ // Look for exact match with different extension
473
+ const baseName = fileName.replace(/\.(ts|js|tsx|jsx)$/, '');
474
+ for (const entry of entries) {
475
+ const entryBase = entry.replace(/\.(ts|js|tsx|jsx)$/, '');
476
+ if (entryBase === baseName && entry !== fileName) {
477
+ return path.join(fileDir, entry);
478
+ }
479
+ }
480
+ // Look for similar names (edit distance would be better, but keep it simple)
481
+ for (const entry of entries) {
482
+ if (entry.toLowerCase().includes(baseName.toLowerCase())) {
483
+ return path.join(fileDir, entry);
484
+ }
485
+ }
486
+ }
487
+ }
488
+ catch {
489
+ // Ignore errors
490
+ }
491
+ return undefined;
492
+ }
493
+ async findIndexFiles() {
494
+ const indexFiles = [];
495
+ for (const sourceDir of this.config.sourceDirs) {
496
+ const fullDir = path.join(this.config.workspaceRoot, sourceDir);
497
+ try {
498
+ const packages = await readdir(fullDir, { withFileTypes: true });
499
+ for (const pkg of packages) {
500
+ if (!pkg.isDirectory())
501
+ continue;
502
+ // Check for src/index.ts
503
+ const indexPath = path.join(fullDir, pkg.name, 'src/index.ts');
504
+ if (fs.existsSync(indexPath)) {
505
+ indexFiles.push(indexPath);
506
+ }
507
+ }
508
+ }
509
+ catch {
510
+ // Directory doesn't exist
511
+ }
512
+ }
513
+ return indexFiles;
514
+ }
515
+ async getCliCommands(commandsDir) {
516
+ const commands = new Set();
517
+ try {
518
+ const entries = await readdir(commandsDir, { withFileTypes: true });
519
+ for (const entry of entries) {
520
+ if (entry.isFile() && entry.name.endsWith('.ts')) {
521
+ // Command name is the file name without extension
522
+ const commandName = entry.name.replace(/\.ts$/, '');
523
+ if (commandName !== 'index') {
524
+ commands.add(commandName);
525
+ }
526
+ }
527
+ }
528
+ }
529
+ catch {
530
+ // Directory doesn't exist
531
+ }
532
+ return commands;
533
+ }
534
+ anchorExistsInContent(content, anchor) {
535
+ // Convert anchor to expected heading format
536
+ // Anchors are typically lowercase with hyphens: #my-heading
537
+ const headingPattern = new RegExp(`^#+\\s+${anchor.replace(/-/g, '[- ]').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\$&')}`, 'im');
538
+ return headingPattern.test(content);
539
+ }
540
+ getContext(lines, lineIndex, range = 2) {
541
+ const start = Math.max(0, lineIndex - range);
542
+ const end = Math.min(lines.length, lineIndex + range + 1);
543
+ return lines.slice(start, end).join('\n');
544
+ }
545
+ async getTargetBranch() {
546
+ if (this.targetBranch) {
547
+ return this.targetBranch;
548
+ }
549
+ if (this.config.targetBranch) {
550
+ this.targetBranch = this.config.targetBranch;
551
+ return this.targetBranch;
552
+ }
553
+ // Auto-detect from git
554
+ try {
555
+ const { stdout } = await execAsync('git symbolic-ref refs/remotes/origin/HEAD', {
556
+ cwd: this.config.workspaceRoot,
557
+ });
558
+ const match = stdout.trim().match(/refs\/remotes\/origin\/(.+)/);
559
+ if (match) {
560
+ this.targetBranch = match[1];
561
+ return this.targetBranch;
562
+ }
563
+ }
564
+ catch {
565
+ // Fall through to default
566
+ }
567
+ // Try common defaults
568
+ try {
569
+ await execAsync('git rev-parse --verify origin/main', {
570
+ cwd: this.config.workspaceRoot,
571
+ });
572
+ this.targetBranch = 'main';
573
+ return this.targetBranch;
574
+ }
575
+ catch {
576
+ try {
577
+ await execAsync('git rev-parse --verify origin/master', {
578
+ cwd: this.config.workspaceRoot,
579
+ });
580
+ this.targetBranch = 'master';
581
+ return this.targetBranch;
582
+ }
583
+ catch {
584
+ this.targetBranch = 'main';
585
+ return this.targetBranch;
586
+ }
587
+ }
588
+ }
589
+ }
590
+ // ============================================================================
591
+ // Factory Function
592
+ // ============================================================================
593
+ /**
594
+ * Creates a DocsStewardService instance
595
+ */
596
+ export function createDocsStewardService(config) {
597
+ return new DocsStewardServiceImpl(config);
598
+ }
599
+ //# sourceMappingURL=docs-steward-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-steward-service.js","sourceRoot":"","sources":["../../src/services/docs-steward-service.ts"],"names":[],"mappings":"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"}