sudocode 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/README.md +222 -0
  2. package/build.js +75 -0
  3. package/node_modules/@sudocode-ai/cli/README.md +330 -0
  4. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts +53 -0
  5. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.d.ts.map +1 -0
  6. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js +274 -0
  7. package/node_modules/@sudocode-ai/cli/dist/cli/feedback-commands.js.map +1 -0
  8. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts +22 -0
  9. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.d.ts.map +1 -0
  10. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js +148 -0
  11. package/node_modules/@sudocode-ai/cli/dist/cli/init-commands.js.map +1 -0
  12. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts +45 -0
  13. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.d.ts.map +1 -0
  14. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js +310 -0
  15. package/node_modules/@sudocode-ai/cli/dist/cli/issue-commands.js.map +1 -0
  16. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts +18 -0
  17. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.d.ts.map +1 -0
  18. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js +61 -0
  19. package/node_modules/@sudocode-ai/cli/dist/cli/query-commands.js.map +1 -0
  20. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts +22 -0
  21. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.d.ts.map +1 -0
  22. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js +136 -0
  23. package/node_modules/@sudocode-ai/cli/dist/cli/reference-commands.js.map +1 -0
  24. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts +14 -0
  25. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.d.ts.map +1 -0
  26. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js +76 -0
  27. package/node_modules/@sudocode-ai/cli/dist/cli/relationship-commands.js.map +1 -0
  28. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts +17 -0
  29. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.d.ts.map +1 -0
  30. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js +99 -0
  31. package/node_modules/@sudocode-ai/cli/dist/cli/server-commands.js.map +1 -0
  32. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts +38 -0
  33. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.d.ts.map +1 -0
  34. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js +321 -0
  35. package/node_modules/@sudocode-ai/cli/dist/cli/spec-commands.js.map +1 -0
  36. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts +17 -0
  37. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.d.ts.map +1 -0
  38. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js +131 -0
  39. package/node_modules/@sudocode-ai/cli/dist/cli/status-commands.js.map +1 -0
  40. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts +24 -0
  41. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.d.ts.map +1 -0
  42. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js +416 -0
  43. package/node_modules/@sudocode-ai/cli/dist/cli/sync-commands.js.map +1 -0
  44. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts +12 -0
  45. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.d.ts.map +1 -0
  46. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js +78 -0
  47. package/node_modules/@sudocode-ai/cli/dist/cli/update-commands.js.map +1 -0
  48. package/node_modules/@sudocode-ai/cli/dist/cli.d.ts +6 -0
  49. package/node_modules/@sudocode-ai/cli/dist/cli.d.ts.map +1 -0
  50. package/node_modules/@sudocode-ai/cli/dist/cli.js +426 -0
  51. package/node_modules/@sudocode-ai/cli/dist/cli.js.map +1 -0
  52. package/node_modules/@sudocode-ai/cli/dist/db.d.ts +21 -0
  53. package/node_modules/@sudocode-ai/cli/dist/db.d.ts.map +1 -0
  54. package/node_modules/@sudocode-ai/cli/dist/db.js +54 -0
  55. package/node_modules/@sudocode-ai/cli/dist/db.js.map +1 -0
  56. package/node_modules/@sudocode-ai/cli/dist/export.d.ts +79 -0
  57. package/node_modules/@sudocode-ai/cli/dist/export.d.ts.map +1 -0
  58. package/node_modules/@sudocode-ai/cli/dist/export.js +195 -0
  59. package/node_modules/@sudocode-ai/cli/dist/export.js.map +1 -0
  60. package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts +30 -0
  61. package/node_modules/@sudocode-ai/cli/dist/filename-generator.d.ts.map +1 -0
  62. package/node_modules/@sudocode-ai/cli/dist/filename-generator.js +93 -0
  63. package/node_modules/@sudocode-ai/cli/dist/filename-generator.js.map +1 -0
  64. package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts +26 -0
  65. package/node_modules/@sudocode-ai/cli/dist/id-generator.d.ts.map +1 -0
  66. package/node_modules/@sudocode-ai/cli/dist/id-generator.js +123 -0
  67. package/node_modules/@sudocode-ai/cli/dist/id-generator.js.map +1 -0
  68. package/node_modules/@sudocode-ai/cli/dist/import.d.ts +118 -0
  69. package/node_modules/@sudocode-ai/cli/dist/import.d.ts.map +1 -0
  70. package/node_modules/@sudocode-ai/cli/dist/import.js +608 -0
  71. package/node_modules/@sudocode-ai/cli/dist/import.js.map +1 -0
  72. package/node_modules/@sudocode-ai/cli/dist/index.d.ts +13 -0
  73. package/node_modules/@sudocode-ai/cli/dist/index.d.ts.map +1 -0
  74. package/node_modules/@sudocode-ai/cli/dist/index.js +13 -0
  75. package/node_modules/@sudocode-ai/cli/dist/index.js.map +1 -0
  76. package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts +69 -0
  77. package/node_modules/@sudocode-ai/cli/dist/jsonl.d.ts.map +1 -0
  78. package/node_modules/@sudocode-ai/cli/dist/jsonl.js +333 -0
  79. package/node_modules/@sudocode-ai/cli/dist/jsonl.js.map +1 -0
  80. package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts +146 -0
  81. package/node_modules/@sudocode-ai/cli/dist/markdown.d.ts.map +1 -0
  82. package/node_modules/@sudocode-ai/cli/dist/markdown.js +357 -0
  83. package/node_modules/@sudocode-ai/cli/dist/markdown.js.map +1 -0
  84. package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts +23 -0
  85. package/node_modules/@sudocode-ai/cli/dist/migrations.d.ts.map +1 -0
  86. package/node_modules/@sudocode-ai/cli/dist/migrations.js +57 -0
  87. package/node_modules/@sudocode-ai/cli/dist/migrations.js.map +1 -0
  88. package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts +53 -0
  89. package/node_modules/@sudocode-ai/cli/dist/operations/events.d.ts.map +1 -0
  90. package/node_modules/@sudocode-ai/cli/dist/operations/events.js +108 -0
  91. package/node_modules/@sudocode-ai/cli/dist/operations/events.js.map +1 -0
  92. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts +92 -0
  93. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.d.ts.map +1 -0
  94. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js +444 -0
  95. package/node_modules/@sudocode-ai/cli/dist/operations/feedback-anchors.js.map +1 -0
  96. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts +76 -0
  97. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.d.ts.map +1 -0
  98. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js +234 -0
  99. package/node_modules/@sudocode-ai/cli/dist/operations/feedback.js.map +1 -0
  100. package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts +10 -0
  101. package/node_modules/@sudocode-ai/cli/dist/operations/index.d.ts.map +1 -0
  102. package/node_modules/@sudocode-ai/cli/dist/operations/index.js +10 -0
  103. package/node_modules/@sudocode-ai/cli/dist/operations/index.js.map +1 -0
  104. package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts +82 -0
  105. package/node_modules/@sudocode-ai/cli/dist/operations/issues.d.ts.map +1 -0
  106. package/node_modules/@sudocode-ai/cli/dist/operations/issues.js +411 -0
  107. package/node_modules/@sudocode-ai/cli/dist/operations/issues.js.map +1 -0
  108. package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts +34 -0
  109. package/node_modules/@sudocode-ai/cli/dist/operations/references.d.ts.map +1 -0
  110. package/node_modules/@sudocode-ai/cli/dist/operations/references.js +117 -0
  111. package/node_modules/@sudocode-ai/cli/dist/operations/references.js.map +1 -0
  112. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts +57 -0
  113. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.d.ts.map +1 -0
  114. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js +236 -0
  115. package/node_modules/@sudocode-ai/cli/dist/operations/relationships.js.map +1 -0
  116. package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts +64 -0
  117. package/node_modules/@sudocode-ai/cli/dist/operations/specs.d.ts.map +1 -0
  118. package/node_modules/@sudocode-ai/cli/dist/operations/specs.js +290 -0
  119. package/node_modules/@sudocode-ai/cli/dist/operations/specs.js.map +1 -0
  120. package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts +42 -0
  121. package/node_modules/@sudocode-ai/cli/dist/operations/tags.d.ts.map +1 -0
  122. package/node_modules/@sudocode-ai/cli/dist/operations/tags.js +127 -0
  123. package/node_modules/@sudocode-ai/cli/dist/operations/tags.js.map +1 -0
  124. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts +41 -0
  125. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.d.ts.map +1 -0
  126. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js +111 -0
  127. package/node_modules/@sudocode-ai/cli/dist/operations/transactions.js.map +1 -0
  128. package/node_modules/@sudocode-ai/cli/dist/sync.d.ts +47 -0
  129. package/node_modules/@sudocode-ai/cli/dist/sync.d.ts.map +1 -0
  130. package/node_modules/@sudocode-ai/cli/dist/sync.js +442 -0
  131. package/node_modules/@sudocode-ai/cli/dist/sync.js.map +1 -0
  132. package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts +5 -0
  133. package/node_modules/@sudocode-ai/cli/dist/test-schema.d.ts.map +1 -0
  134. package/node_modules/@sudocode-ai/cli/dist/test-schema.js +46 -0
  135. package/node_modules/@sudocode-ai/cli/dist/test-schema.js.map +1 -0
  136. package/node_modules/@sudocode-ai/cli/dist/types.d.ts +7 -0
  137. package/node_modules/@sudocode-ai/cli/dist/types.d.ts.map +1 -0
  138. package/node_modules/@sudocode-ai/cli/dist/types.js +7 -0
  139. package/node_modules/@sudocode-ai/cli/dist/types.js.map +1 -0
  140. package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts +24 -0
  141. package/node_modules/@sudocode-ai/cli/dist/update-checker.d.ts.map +1 -0
  142. package/node_modules/@sudocode-ai/cli/dist/update-checker.js +151 -0
  143. package/node_modules/@sudocode-ai/cli/dist/update-checker.js.map +1 -0
  144. package/node_modules/@sudocode-ai/cli/dist/version.d.ts +12 -0
  145. package/node_modules/@sudocode-ai/cli/dist/version.d.ts.map +1 -0
  146. package/node_modules/@sudocode-ai/cli/dist/version.js +23 -0
  147. package/node_modules/@sudocode-ai/cli/dist/version.js.map +1 -0
  148. package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts +63 -0
  149. package/node_modules/@sudocode-ai/cli/dist/watcher.d.ts.map +1 -0
  150. package/node_modules/@sudocode-ai/cli/dist/watcher.js +438 -0
  151. package/node_modules/@sudocode-ai/cli/dist/watcher.js.map +1 -0
  152. package/node_modules/@sudocode-ai/cli/package.json +65 -0
  153. package/node_modules/@sudocode-ai/local-server/README.md +19 -0
  154. package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts +7 -0
  155. package/node_modules/@sudocode-ai/local-server/dist/cli.d.ts.map +1 -0
  156. package/node_modules/@sudocode-ai/local-server/dist/cli.js +7 -0
  157. package/node_modules/@sudocode-ai/local-server/dist/cli.js.map +1 -0
  158. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts +103 -0
  159. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.d.ts.map +1 -0
  160. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js +10 -0
  161. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/engine.js.map +1 -0
  162. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts +190 -0
  163. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.d.ts.map +1 -0
  164. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js +611 -0
  165. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/simple-engine.js.map +1 -0
  166. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts +116 -0
  167. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.d.ts.map +1 -0
  168. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js +10 -0
  169. package/node_modules/@sudocode-ai/local-server/dist/execution/engine/types.js.map +1 -0
  170. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts +176 -0
  171. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.d.ts.map +1 -0
  172. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js +438 -0
  173. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-adapter.js.map +1 -0
  174. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts +96 -0
  175. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.d.ts.map +1 -0
  176. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js +96 -0
  177. package/node_modules/@sudocode-ai/local-server/dist/execution/output/ag-ui-integration.js.map +1 -0
  178. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts +321 -0
  179. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.d.ts.map +1 -0
  180. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js +769 -0
  181. package/node_modules/@sudocode-ai/local-server/dist/execution/output/claude-code-output-processor.js.map +1 -0
  182. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts +18 -0
  183. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.d.ts.map +1 -0
  184. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js +15 -0
  185. package/node_modules/@sudocode-ai/local-server/dist/execution/output/index.js.map +1 -0
  186. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts +421 -0
  187. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.d.ts.map +1 -0
  188. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js +22 -0
  189. package/node_modules/@sudocode-ai/local-server/dist/execution/output/types.js.map +1 -0
  190. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts +86 -0
  191. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.d.ts.map +1 -0
  192. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js +59 -0
  193. package/node_modules/@sudocode-ai/local-server/dist/execution/process/builders/claude.js.map +1 -0
  194. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts +15 -0
  195. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.d.ts.map +1 -0
  196. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js +15 -0
  197. package/node_modules/@sudocode-ai/local-server/dist/execution/process/index.js.map +1 -0
  198. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts +133 -0
  199. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.d.ts.map +1 -0
  200. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js +10 -0
  201. package/node_modules/@sudocode-ai/local-server/dist/execution/process/manager.js.map +1 -0
  202. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts +102 -0
  203. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.d.ts.map +1 -0
  204. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js +336 -0
  205. package/node_modules/@sudocode-ai/local-server/dist/execution/process/simple-manager.js.map +1 -0
  206. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts +105 -0
  207. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.d.ts.map +1 -0
  208. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js +10 -0
  209. package/node_modules/@sudocode-ai/local-server/dist/execution/process/types.js.map +1 -0
  210. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts +53 -0
  211. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.d.ts.map +1 -0
  212. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js +97 -0
  213. package/node_modules/@sudocode-ai/local-server/dist/execution/process/utils.js.map +1 -0
  214. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts +170 -0
  215. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.d.ts.map +1 -0
  216. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js +291 -0
  217. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/circuit-breaker.js.map +1 -0
  218. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts +109 -0
  219. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.d.ts.map +1 -0
  220. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js +10 -0
  221. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/executor.js.map +1 -0
  222. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts +14 -0
  223. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.d.ts.map +1 -0
  224. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js +15 -0
  225. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/index.js.map +1 -0
  226. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts +86 -0
  227. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.d.ts.map +1 -0
  228. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js +261 -0
  229. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/resilient-executor.js.map +1 -0
  230. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts +161 -0
  231. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.d.ts.map +1 -0
  232. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js +234 -0
  233. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/retry.js.map +1 -0
  234. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts +226 -0
  235. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.d.ts.map +1 -0
  236. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js +30 -0
  237. package/node_modules/@sudocode-ai/local-server/dist/execution/resilience/types.js.map +1 -0
  238. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts +119 -0
  239. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.d.ts.map +1 -0
  240. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js +208 -0
  241. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/event-buffer.js.map +1 -0
  242. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts +10 -0
  243. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.d.ts.map +1 -0
  244. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js +10 -0
  245. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/index.js.map +1 -0
  246. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts +146 -0
  247. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.d.ts.map +1 -0
  248. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js +282 -0
  249. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/sse-transport.js.map +1 -0
  250. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts +176 -0
  251. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.d.ts.map +1 -0
  252. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js +231 -0
  253. package/node_modules/@sudocode-ai/local-server/dist/execution/transport/transport-manager.js.map +1 -0
  254. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts +13 -0
  255. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.d.ts.map +1 -0
  256. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js +13 -0
  257. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/index.js.map +1 -0
  258. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts +216 -0
  259. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.d.ts.map +1 -0
  260. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js +683 -0
  261. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/linear-orchestrator.js.map +1 -0
  262. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts +54 -0
  263. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.d.ts.map +1 -0
  264. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js +68 -0
  265. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/memory-storage.js.map +1 -0
  266. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts +158 -0
  267. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.d.ts.map +1 -0
  268. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js +9 -0
  269. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/orchestrator.js.map +1 -0
  270. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts +172 -0
  271. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.d.ts.map +1 -0
  272. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js +9 -0
  273. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/types.js.map +1 -0
  274. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts +89 -0
  275. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.d.ts.map +1 -0
  276. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js +152 -0
  277. package/node_modules/@sudocode-ai/local-server/dist/execution/workflow/utils.js.map +1 -0
  278. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts +74 -0
  279. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.d.ts.map +1 -0
  280. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js +280 -0
  281. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/config.js.map +1 -0
  282. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts +151 -0
  283. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.d.ts.map +1 -0
  284. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js +189 -0
  285. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/git-cli.js.map +1 -0
  286. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts +16 -0
  287. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.d.ts.map +1 -0
  288. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js +15 -0
  289. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/index.js.map +1 -0
  290. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts +184 -0
  291. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.d.ts.map +1 -0
  292. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js +452 -0
  293. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/manager.js.map +1 -0
  294. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts +90 -0
  295. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.d.ts.map +1 -0
  296. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js +42 -0
  297. package/node_modules/@sudocode-ai/local-server/dist/execution/worktree/types.js.map +1 -0
  298. package/node_modules/@sudocode-ai/local-server/dist/index.d.ts +8 -0
  299. package/node_modules/@sudocode-ai/local-server/dist/index.d.ts.map +1 -0
  300. package/node_modules/@sudocode-ai/local-server/dist/index.js +356 -0
  301. package/node_modules/@sudocode-ai/local-server/dist/index.js.map +1 -0
  302. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js +568 -0
  303. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-C4SmlXoo.js.map +1 -0
  304. package/node_modules/@sudocode-ai/local-server/dist/public/assets/index-DE59j7ti.css +1 -0
  305. package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js +60 -0
  306. package/node_modules/@sudocode-ai/local-server/dist/public/assets/react-vendor-LX0UoTxg.js.map +1 -0
  307. package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js +54 -0
  308. package/node_modules/@sudocode-ai/local-server/dist/public/assets/ui-vendor-_cxVHaqZ.js.map +1 -0
  309. package/node_modules/@sudocode-ai/local-server/dist/public/favicon.ico +0 -0
  310. package/node_modules/@sudocode-ai/local-server/dist/public/index.html +16 -0
  311. package/node_modules/@sudocode-ai/local-server/dist/public/logo.png +0 -0
  312. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts +24 -0
  313. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.d.ts.map +1 -0
  314. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js +55 -0
  315. package/node_modules/@sudocode-ai/local-server/dist/routes/executions-stream.js.map +1 -0
  316. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts +19 -0
  317. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.d.ts.map +1 -0
  318. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js +267 -0
  319. package/node_modules/@sudocode-ai/local-server/dist/routes/executions.js.map +1 -0
  320. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts +7 -0
  321. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.d.ts.map +1 -0
  322. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js +329 -0
  323. package/node_modules/@sudocode-ai/local-server/dist/routes/feedback.js.map +1 -0
  324. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts +7 -0
  325. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.d.ts.map +1 -0
  326. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js +280 -0
  327. package/node_modules/@sudocode-ai/local-server/dist/routes/issues.js.map +1 -0
  328. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts +7 -0
  329. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.d.ts.map +1 -0
  330. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js +308 -0
  331. package/node_modules/@sudocode-ai/local-server/dist/routes/relationships.js.map +1 -0
  332. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts +7 -0
  333. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.d.ts.map +1 -0
  334. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js +270 -0
  335. package/node_modules/@sudocode-ai/local-server/dist/routes/specs.js.map +1 -0
  336. package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts +33 -0
  337. package/node_modules/@sudocode-ai/local-server/dist/services/db.d.ts.map +1 -0
  338. package/node_modules/@sudocode-ai/local-server/dist/services/db.js +85 -0
  339. package/node_modules/@sudocode-ai/local-server/dist/services/db.js.map +1 -0
  340. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts +108 -0
  341. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.d.ts.map +1 -0
  342. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js +286 -0
  343. package/node_modules/@sudocode-ai/local-server/dist/services/execution-lifecycle.js.map +1 -0
  344. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts +185 -0
  345. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.d.ts.map +1 -0
  346. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js +676 -0
  347. package/node_modules/@sudocode-ai/local-server/dist/services/execution-service.js.map +1 -0
  348. package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts +59 -0
  349. package/node_modules/@sudocode-ai/local-server/dist/services/executions.d.ts.map +1 -0
  350. package/node_modules/@sudocode-ai/local-server/dist/services/executions.js +164 -0
  351. package/node_modules/@sudocode-ai/local-server/dist/services/executions.js.map +1 -0
  352. package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts +24 -0
  353. package/node_modules/@sudocode-ai/local-server/dist/services/export.d.ts.map +1 -0
  354. package/node_modules/@sudocode-ai/local-server/dist/services/export.js +106 -0
  355. package/node_modules/@sudocode-ai/local-server/dist/services/export.js.map +1 -0
  356. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts +40 -0
  357. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.d.ts.map +1 -0
  358. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js +54 -0
  359. package/node_modules/@sudocode-ai/local-server/dist/services/feedback.js.map +1 -0
  360. package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts +27 -0
  361. package/node_modules/@sudocode-ai/local-server/dist/services/issues.d.ts.map +1 -0
  362. package/node_modules/@sudocode-ai/local-server/dist/services/issues.js +35 -0
  363. package/node_modules/@sudocode-ai/local-server/dist/services/issues.js.map +1 -0
  364. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts +108 -0
  365. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.d.ts.map +1 -0
  366. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js +212 -0
  367. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-template-engine.js.map +1 -0
  368. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts +97 -0
  369. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.d.ts.map +1 -0
  370. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js +236 -0
  371. package/node_modules/@sudocode-ai/local-server/dist/services/prompt-templates.js.map +1 -0
  372. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts +35 -0
  373. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.d.ts.map +1 -0
  374. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js +42 -0
  375. package/node_modules/@sudocode-ai/local-server/dist/services/relationships.js.map +1 -0
  376. package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts +27 -0
  377. package/node_modules/@sudocode-ai/local-server/dist/services/specs.d.ts.map +1 -0
  378. package/node_modules/@sudocode-ai/local-server/dist/services/specs.js +35 -0
  379. package/node_modules/@sudocode-ai/local-server/dist/services/specs.js.map +1 -0
  380. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts +50 -0
  381. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.d.ts.map +1 -0
  382. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js +69 -0
  383. package/node_modules/@sudocode-ai/local-server/dist/services/watcher.js.map +1 -0
  384. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts +127 -0
  385. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.d.ts.map +1 -0
  386. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js +389 -0
  387. package/node_modules/@sudocode-ai/local-server/dist/services/websocket.js.map +1 -0
  388. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts +6 -0
  389. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.d.ts.map +1 -0
  390. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js +9 -0
  391. package/node_modules/@sudocode-ai/local-server/dist/utils/sudocode-dir.js.map +1 -0
  392. package/node_modules/@sudocode-ai/local-server/package.json +72 -0
  393. package/node_modules/@sudocode-ai/mcp/LICENSE +21 -0
  394. package/node_modules/@sudocode-ai/mcp/README.md +226 -0
  395. package/node_modules/@sudocode-ai/mcp/dist/client.d.ts +33 -0
  396. package/node_modules/@sudocode-ai/mcp/dist/client.d.ts.map +1 -0
  397. package/node_modules/@sudocode-ai/mcp/dist/client.js +159 -0
  398. package/node_modules/@sudocode-ai/mcp/dist/client.js.map +1 -0
  399. package/node_modules/@sudocode-ai/mcp/dist/index.d.ts +6 -0
  400. package/node_modules/@sudocode-ai/mcp/dist/index.d.ts.map +1 -0
  401. package/node_modules/@sudocode-ai/mcp/dist/index.js +64 -0
  402. package/node_modules/@sudocode-ai/mcp/dist/index.js.map +1 -0
  403. package/node_modules/@sudocode-ai/mcp/dist/server.d.ts +26 -0
  404. package/node_modules/@sudocode-ai/mcp/dist/server.d.ts.map +1 -0
  405. package/node_modules/@sudocode-ai/mcp/dist/server.js +575 -0
  406. package/node_modules/@sudocode-ai/mcp/dist/server.js.map +1 -0
  407. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts +41 -0
  408. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.d.ts.map +1 -0
  409. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js +21 -0
  410. package/node_modules/@sudocode-ai/mcp/dist/tools/analytics.js.map +1 -0
  411. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts +19 -0
  412. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.d.ts.map +1 -0
  413. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js +24 -0
  414. package/node_modules/@sudocode-ai/mcp/dist/tools/feedback.js.map +1 -0
  415. package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts +17 -0
  416. package/node_modules/@sudocode-ai/mcp/dist/tools/init.d.ts.map +1 -0
  417. package/node_modules/@sudocode-ai/mcp/dist/tools/init.js +15 -0
  418. package/node_modules/@sudocode-ai/mcp/dist/tools/init.js.map +1 -0
  419. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts +44 -0
  420. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.d.ts.map +1 -0
  421. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js +106 -0
  422. package/node_modules/@sudocode-ai/mcp/dist/tools/issues.js.map +1 -0
  423. package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts +21 -0
  424. package/node_modules/@sudocode-ai/mcp/dist/tools/references.d.ts.map +1 -0
  425. package/node_modules/@sudocode-ai/mcp/dist/tools/references.js +49 -0
  426. package/node_modules/@sudocode-ai/mcp/dist/tools/references.js.map +1 -0
  427. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts +15 -0
  428. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.d.ts.map +1 -0
  429. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js +18 -0
  430. package/node_modules/@sudocode-ai/mcp/dist/tools/relationships.js.map +1 -0
  431. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts +35 -0
  432. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.d.ts.map +1 -0
  433. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js +85 -0
  434. package/node_modules/@sudocode-ai/mcp/dist/tools/specs.js.map +1 -0
  435. package/node_modules/@sudocode-ai/mcp/dist/types.d.ts +35 -0
  436. package/node_modules/@sudocode-ai/mcp/dist/types.d.ts.map +1 -0
  437. package/node_modules/@sudocode-ai/mcp/dist/types.js +21 -0
  438. package/node_modules/@sudocode-ai/mcp/dist/types.js.map +1 -0
  439. package/node_modules/@sudocode-ai/mcp/package.json +67 -0
  440. package/node_modules/@sudocode-ai/types/README.md +7 -0
  441. package/node_modules/@sudocode-ai/types/dist/schema.d.ts +45 -0
  442. package/node_modules/@sudocode-ai/types/dist/schema.d.ts.map +1 -0
  443. package/node_modules/@sudocode-ai/types/dist/schema.js +338 -0
  444. package/node_modules/@sudocode-ai/types/dist/schema.js.map +1 -0
  445. package/node_modules/@sudocode-ai/types/package.json +46 -0
  446. package/package.json +51 -12
  447. package/index.js +0 -5
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Export SQLite data to JSONL files
3
+ */
4
+ import type Database from "better-sqlite3";
5
+ import type { Spec, Issue, SpecJSONL, IssueJSONL } from "./types.js";
6
+ export interface ExportOptions {
7
+ /**
8
+ * Output directory for JSONL files
9
+ */
10
+ outputDir?: string;
11
+ /**
12
+ * Only export entities that have been updated since this timestamp
13
+ */
14
+ since?: Date;
15
+ /**
16
+ * Custom file names
17
+ */
18
+ specsFile?: string;
19
+ issuesFile?: string;
20
+ }
21
+ /**
22
+ * Convert a Spec to SpecJSONL format with embedded relationships and tags
23
+ */
24
+ export declare function specToJSONL(db: Database.Database, spec: Spec): SpecJSONL;
25
+ /**
26
+ * Convert an Issue to IssueJSONL format with embedded relationships and tags
27
+ */
28
+ export declare function issueToJSONL(db: Database.Database, issue: Issue): IssueJSONL;
29
+ /**
30
+ * Export all specs to JSONL format
31
+ */
32
+ export declare function exportSpecsToJSONL(db: Database.Database, options?: ExportOptions): SpecJSONL[];
33
+ /**
34
+ * Export all issues to JSONL format
35
+ */
36
+ export declare function exportIssuesToJSONL(db: Database.Database, options?: ExportOptions): IssueJSONL[];
37
+ /**
38
+ * Export both specs and issues to JSONL files
39
+ */
40
+ export declare function exportToJSONL(db: Database.Database, options?: ExportOptions): Promise<{
41
+ specsCount: number;
42
+ issuesCount: number;
43
+ }>;
44
+ /**
45
+ * Debouncer for export operations
46
+ */
47
+ export declare class ExportDebouncer {
48
+ private db;
49
+ private delayMs;
50
+ private options;
51
+ private timeoutId;
52
+ private pending;
53
+ constructor(db: Database.Database, delayMs?: number, options?: ExportOptions);
54
+ /**
55
+ * Trigger an export (will be debounced)
56
+ */
57
+ trigger(): void;
58
+ /**
59
+ * Execute the export immediately
60
+ */
61
+ execute(): Promise<void>;
62
+ /**
63
+ * Cancel any pending export
64
+ */
65
+ cancel(): void;
66
+ /**
67
+ * Check if an export is pending
68
+ */
69
+ isPending(): boolean;
70
+ /**
71
+ * Wait for any pending export to complete
72
+ */
73
+ flush(): Promise<void>;
74
+ }
75
+ /**
76
+ * Create a debounced export function
77
+ */
78
+ export declare function createDebouncedExport(db: Database.Database, delayMs?: number, options?: ExportOptions): ExportDebouncer;
79
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,UAAU,EAGX,MAAM,YAAY,CAAC;AAQpB,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAqBxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,CAwC5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,aAAkB,GAC1B,SAAS,EAAE,CAab;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,aAAkB,GAC1B,UAAU,EAAE,CAad;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBtD;AAED;;GAEG;AACH,qBAAa,eAAe;IAKxB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IANjB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAkB;gBAGvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,MAAa,EACtB,OAAO,GAAE,aAAkB;IAGrC;;OAEG;IACH,OAAO,IAAI,IAAI;IAYf;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACH,MAAM,IAAI,IAAI;IAQd;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,GAAE,MAAa,EACtB,OAAO,GAAE,aAAkB,GAC1B,eAAe,CAEjB"}
@@ -0,0 +1,195 @@
1
+ /**
2
+ * Export SQLite data to JSONL files
3
+ */
4
+ import { listSpecs } from "./operations/specs.js";
5
+ import { listIssues } from "./operations/issues.js";
6
+ import { getOutgoingRelationships } from "./operations/relationships.js";
7
+ import { getTags } from "./operations/tags.js";
8
+ import { listFeedback } from "./operations/feedback.js";
9
+ import { writeJSONL } from "./jsonl.js";
10
+ /**
11
+ * Convert a Spec to SpecJSONL format with embedded relationships and tags
12
+ */
13
+ export function specToJSONL(db, spec) {
14
+ // Get outgoing relationships
15
+ const relationships = getOutgoingRelationships(db, spec.id, "spec");
16
+ // Convert to JSONL format
17
+ const relationshipsJSONL = relationships.map((rel) => ({
18
+ from: rel.from_id,
19
+ from_type: rel.from_type,
20
+ to: rel.to_id,
21
+ to_type: rel.to_type,
22
+ type: rel.relationship_type,
23
+ }));
24
+ // Get tags
25
+ const tags = getTags(db, spec.id, "spec");
26
+ return {
27
+ ...spec,
28
+ relationships: relationshipsJSONL,
29
+ tags,
30
+ };
31
+ }
32
+ /**
33
+ * Convert an Issue to IssueJSONL format with embedded relationships and tags
34
+ */
35
+ export function issueToJSONL(db, issue) {
36
+ // Get outgoing relationships
37
+ const relationships = getOutgoingRelationships(db, issue.id, "issue");
38
+ // Convert to JSONL format
39
+ const relationshipsJSONL = relationships.map((rel) => ({
40
+ from: rel.from_id,
41
+ from_type: rel.from_type,
42
+ to: rel.to_id,
43
+ to_type: rel.to_type,
44
+ type: rel.relationship_type,
45
+ }));
46
+ // Get tags
47
+ const tags = getTags(db, issue.id, "issue");
48
+ // Get feedback provided by this issue
49
+ const feedbackList = listFeedback(db, { issue_id: issue.id });
50
+ const feedbackJSONL = feedbackList.map((feedback) => ({
51
+ id: feedback.id,
52
+ issue_id: feedback.issue_id,
53
+ spec_id: feedback.spec_id,
54
+ feedback_type: feedback.feedback_type,
55
+ content: feedback.content,
56
+ agent: feedback.agent,
57
+ anchor: feedback.anchor && typeof feedback.anchor === "string"
58
+ ? JSON.parse(feedback.anchor)
59
+ : feedback.anchor,
60
+ dismissed: feedback.dismissed,
61
+ created_at: feedback.created_at,
62
+ updated_at: feedback.updated_at,
63
+ }));
64
+ return {
65
+ ...issue,
66
+ relationships: relationshipsJSONL,
67
+ tags,
68
+ feedback: feedbackJSONL.length > 0 ? feedbackJSONL : undefined,
69
+ };
70
+ }
71
+ /**
72
+ * Export all specs to JSONL format
73
+ */
74
+ export function exportSpecsToJSONL(db, options = {}) {
75
+ const { since } = options;
76
+ // Get all specs (including archived)
77
+ const specs = listSpecs(db);
78
+ // Filter by timestamp if requested
79
+ const filtered = since
80
+ ? specs.filter((spec) => new Date(spec.updated_at) > since)
81
+ : specs;
82
+ // Convert to JSONL format with relationships and tags
83
+ return filtered.map((spec) => specToJSONL(db, spec));
84
+ }
85
+ /**
86
+ * Export all issues to JSONL format
87
+ */
88
+ export function exportIssuesToJSONL(db, options = {}) {
89
+ const { since } = options;
90
+ // Get all issues (including archived)
91
+ const issues = listIssues(db);
92
+ // Filter by timestamp if requested
93
+ const filtered = since
94
+ ? issues.filter((issue) => new Date(issue.updated_at) > since)
95
+ : issues;
96
+ // Convert to JSONL format with relationships and tags
97
+ return filtered.map((issue) => issueToJSONL(db, issue));
98
+ }
99
+ /**
100
+ * Export both specs and issues to JSONL files
101
+ */
102
+ export async function exportToJSONL(db, options = {}) {
103
+ const { outputDir = ".sudocode", specsFile = "specs.jsonl", issuesFile = "issues.jsonl", } = options;
104
+ const specsPath = `${outputDir}/${specsFile}`;
105
+ const issuesPath = `${outputDir}/${issuesFile}`;
106
+ // Export specs
107
+ const specs = exportSpecsToJSONL(db, options);
108
+ await writeJSONL(specsPath, specs);
109
+ // Export issues
110
+ const issues = exportIssuesToJSONL(db, options);
111
+ await writeJSONL(issuesPath, issues);
112
+ return {
113
+ specsCount: specs.length,
114
+ issuesCount: issues.length,
115
+ };
116
+ }
117
+ /**
118
+ * Debouncer for export operations
119
+ */
120
+ export class ExportDebouncer {
121
+ db;
122
+ delayMs;
123
+ options;
124
+ timeoutId = null;
125
+ pending = false;
126
+ constructor(db, delayMs = 5000, options = {}) {
127
+ this.db = db;
128
+ this.delayMs = delayMs;
129
+ this.options = options;
130
+ }
131
+ /**
132
+ * Trigger an export (will be debounced)
133
+ */
134
+ trigger() {
135
+ this.pending = true;
136
+ if (this.timeoutId) {
137
+ clearTimeout(this.timeoutId);
138
+ }
139
+ this.timeoutId = setTimeout(() => {
140
+ this.execute();
141
+ }, this.delayMs);
142
+ }
143
+ /**
144
+ * Execute the export immediately
145
+ */
146
+ async execute() {
147
+ if (!this.pending) {
148
+ return;
149
+ }
150
+ this.pending = false;
151
+ this.timeoutId = null;
152
+ try {
153
+ await exportToJSONL(this.db, this.options);
154
+ }
155
+ catch (error) {
156
+ console.error("Export failed:", error);
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Cancel any pending export
162
+ */
163
+ cancel() {
164
+ if (this.timeoutId) {
165
+ clearTimeout(this.timeoutId);
166
+ this.timeoutId = null;
167
+ }
168
+ this.pending = false;
169
+ }
170
+ /**
171
+ * Check if an export is pending
172
+ */
173
+ isPending() {
174
+ return this.pending;
175
+ }
176
+ /**
177
+ * Wait for any pending export to complete
178
+ */
179
+ async flush() {
180
+ if (this.pending) {
181
+ if (this.timeoutId) {
182
+ clearTimeout(this.timeoutId);
183
+ this.timeoutId = null;
184
+ }
185
+ await this.execute();
186
+ }
187
+ }
188
+ }
189
+ /**
190
+ * Create a debounced export function
191
+ */
192
+ export function createDebouncedExport(db, delayMs = 5000, options = {}) {
193
+ return new ExportDebouncer(db, delayMs, options);
194
+ }
195
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../src/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Generate human-readable filenames from spec titles
3
+ */
4
+ /**
5
+ * Convert a title to snake_case filename
6
+ * - Lowercase
7
+ * - Replace spaces and special chars with underscores
8
+ * - Remove consecutive underscores
9
+ * - Trim underscores from start/end
10
+ * - Truncate to reasonable length
11
+ */
12
+ export declare function titleToFilename(title: string, maxLength?: number): string;
13
+ /**
14
+ * Generate a unique filename based on title, with ID suffix if collision
15
+ * @param title - The spec title
16
+ * @param id - The spec ID (used for collision resolution)
17
+ * @param directory - Directory to check for collisions
18
+ * @param extension - File extension (default: .md)
19
+ * @returns Unique filename
20
+ */
21
+ export declare function generateUniqueFilename(title: string, id: string, directory: string, extension?: string): string;
22
+ /**
23
+ * Find existing markdown file for a spec (supports both naming conventions)
24
+ * @param specId - The spec ID
25
+ * @param directory - Directory to search
26
+ * @param title - Optional title for title-based search
27
+ * @returns Path to existing file if found, null otherwise
28
+ */
29
+ export declare function findExistingSpecFile(specId: string, directory: string, title?: string): string | null;
30
+ //# sourceMappingURL=filename-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-generator.d.ts","sourceRoot":"","sources":["../src/filename-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAO7E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAc,GACxB,MAAM,CA4BR;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,GAAG,IAAI,CAgCf"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Generate human-readable filenames from spec titles
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ /**
7
+ * Convert a title to snake_case filename
8
+ * - Lowercase
9
+ * - Replace spaces and special chars with underscores
10
+ * - Remove consecutive underscores
11
+ * - Trim underscores from start/end
12
+ * - Truncate to reasonable length
13
+ */
14
+ export function titleToFilename(title, maxLength = 50) {
15
+ return title
16
+ .toLowerCase()
17
+ .replace(/[^a-z0-9]+/g, '_') // Replace non-alphanumeric with underscore
18
+ .replace(/_+/g, '_') // Replace multiple underscores with single
19
+ .replace(/^_|_$/g, '') // Trim underscores from start/end
20
+ .slice(0, maxLength); // Truncate to max length
21
+ }
22
+ /**
23
+ * Generate a unique filename based on title, with ID suffix if collision
24
+ * @param title - The spec title
25
+ * @param id - The spec ID (used for collision resolution)
26
+ * @param directory - Directory to check for collisions
27
+ * @param extension - File extension (default: .md)
28
+ * @returns Unique filename
29
+ */
30
+ export function generateUniqueFilename(title, id, directory, extension = '.md') {
31
+ const baseFilename = titleToFilename(title);
32
+ // Try base filename first
33
+ const baseFile = baseFilename + extension;
34
+ const basePath = path.join(directory, baseFile);
35
+ // If file doesn't exist, use base filename
36
+ if (!fs.existsSync(basePath)) {
37
+ return baseFile;
38
+ }
39
+ // Check if existing file is for the same spec (by reading its frontmatter ID)
40
+ try {
41
+ const existingContent = fs.readFileSync(basePath, 'utf8');
42
+ const idMatch = existingContent.match(/^---\s*\n[\s\S]*?^id:\s*['"]?([^'"\n]+)['"]?\s*$/m);
43
+ if (idMatch && idMatch[1] === id) {
44
+ // Same spec, use the existing filename
45
+ return baseFile;
46
+ }
47
+ }
48
+ catch (error) {
49
+ // If we can't read the file, assume it's a collision
50
+ }
51
+ // Collision detected - append ID
52
+ const collisionFilename = `${baseFilename}_${id}${extension}`;
53
+ return collisionFilename;
54
+ }
55
+ /**
56
+ * Find existing markdown file for a spec (supports both naming conventions)
57
+ * @param specId - The spec ID
58
+ * @param directory - Directory to search
59
+ * @param title - Optional title for title-based search
60
+ * @returns Path to existing file if found, null otherwise
61
+ */
62
+ export function findExistingSpecFile(specId, directory, title) {
63
+ // Try ID-based filename first (legacy)
64
+ const idBasedFile = path.join(directory, `${specId}.md`);
65
+ if (fs.existsSync(idBasedFile)) {
66
+ return idBasedFile;
67
+ }
68
+ // Try title-based filename
69
+ if (title) {
70
+ const titleBasedFile = path.join(directory, `${titleToFilename(title)}.md`);
71
+ if (fs.existsSync(titleBasedFile)) {
72
+ // Verify it's the right spec by checking ID in frontmatter
73
+ try {
74
+ const content = fs.readFileSync(titleBasedFile, 'utf8');
75
+ const idMatch = content.match(/^---\s*\n[\s\S]*?^id:\s*['"]?([^'"\n]+)['"]?\s*$/m);
76
+ if (idMatch && idMatch[1] === specId) {
77
+ return titleBasedFile;
78
+ }
79
+ }
80
+ catch (error) {
81
+ // Continue searching
82
+ }
83
+ }
84
+ // Try title-based with ID suffix
85
+ const titleWithIdFile = path.join(directory, `${titleToFilename(title)}_${specId}.md`);
86
+ if (fs.existsSync(titleWithIdFile)) {
87
+ return titleWithIdFile;
88
+ }
89
+ }
90
+ // Not found
91
+ return null;
92
+ }
93
+ //# sourceMappingURL=filename-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filename-generator.js","sourceRoot":"","sources":["../src/filename-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ID generation utilities
3
+ */
4
+ import type Database from "better-sqlite3";
5
+ import type { Config } from "@sudocode-ai/types";
6
+ /**
7
+ * Generate next spec ID based on database contents
8
+ */
9
+ export declare function generateSpecId(db: Database.Database, outputDir: string): string;
10
+ /**
11
+ * Generate next issue ID based on database contents
12
+ */
13
+ export declare function generateIssueId(db: Database.Database, outputDir: string): string;
14
+ /**
15
+ * Get current config
16
+ */
17
+ export declare function getConfig(outputDir: string): Config;
18
+ /**
19
+ * Update config (version-controlled)
20
+ */
21
+ export declare function updateConfig(outputDir: string, updates: Partial<Config>): void;
22
+ /**
23
+ * Generate a UUID v4
24
+ */
25
+ export declare function generateUUID(): string;
26
+ //# sourceMappingURL=id-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB,MAAM,CAKR;AA6FD;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GACvB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * ID generation utilities
3
+ */
4
+ import * as fs from "fs";
5
+ import * as path from "path";
6
+ import * as crypto from "crypto";
7
+ import { VERSION } from "./version.js";
8
+ /**
9
+ * Generate next spec ID based on database contents
10
+ */
11
+ export function generateSpecId(db, outputDir) {
12
+ const config = readConfig(outputDir);
13
+ const nextNumber = getNextSpecNumber(db);
14
+ return `${config.id_prefix.spec}-${String(nextNumber).padStart(3, "0")}`;
15
+ }
16
+ /**
17
+ * Generate next issue ID based on database contents
18
+ */
19
+ export function generateIssueId(db, outputDir) {
20
+ const config = readConfig(outputDir);
21
+ const nextNumber = getNextIssueNumber(db);
22
+ return `${config.id_prefix.issue}-${String(nextNumber).padStart(3, "0")}`;
23
+ }
24
+ /**
25
+ * Get next spec number from database
26
+ * Strategy:
27
+ * 1. Find the latest spec by created_at
28
+ * 2. Extract number from its ID
29
+ * 3. Increment by 1
30
+ * 4. Fallback to count + 1 if extraction fails
31
+ */
32
+ function getNextSpecNumber(db) {
33
+ const stmt = db.prepare(`
34
+ SELECT id FROM specs
35
+ ORDER BY created_at DESC
36
+ LIMIT 1
37
+ `);
38
+ const latest = stmt.get();
39
+ if (latest) {
40
+ const match = latest.id.match(/(\d+)$/);
41
+ if (match) {
42
+ return parseInt(match[1], 10) + 1;
43
+ }
44
+ }
45
+ // Fallback: count + 1
46
+ const countStmt = db.prepare(`SELECT COUNT(*) as count FROM specs`);
47
+ const result = countStmt.get();
48
+ return result.count + 1;
49
+ }
50
+ /**
51
+ * Get next issue number from database
52
+ * Strategy:
53
+ * 1. Find the latest issue by created_at
54
+ * 2. Extract number from its ID
55
+ * 3. Increment by 1
56
+ * 4. Fallback to count + 1 if extraction fails
57
+ */
58
+ function getNextIssueNumber(db) {
59
+ const stmt = db.prepare(`
60
+ SELECT id FROM issues
61
+ ORDER BY created_at DESC
62
+ LIMIT 1
63
+ `);
64
+ const latest = stmt.get();
65
+ if (latest) {
66
+ const match = latest.id.match(/(\d+)$/);
67
+ if (match) {
68
+ return parseInt(match[1], 10) + 1;
69
+ }
70
+ }
71
+ // Fallback: count + 1
72
+ const countStmt = db.prepare(`SELECT COUNT(*) as count FROM issues`);
73
+ const result = countStmt.get();
74
+ return result.count + 1;
75
+ }
76
+ /**
77
+ * Read config file (version-controlled)
78
+ */
79
+ function readConfig(outputDir) {
80
+ const configPath = path.join(outputDir, "config.json");
81
+ if (!fs.existsSync(configPath)) {
82
+ // Create default config if not exists
83
+ const defaultConfig = {
84
+ version: VERSION,
85
+ id_prefix: {
86
+ spec: "SPEC",
87
+ issue: "ISSUE",
88
+ },
89
+ };
90
+ writeConfig(outputDir, defaultConfig);
91
+ return defaultConfig;
92
+ }
93
+ const content = fs.readFileSync(configPath, "utf8");
94
+ return JSON.parse(content);
95
+ }
96
+ /**
97
+ * Write config file (version-controlled)
98
+ */
99
+ function writeConfig(outputDir, config) {
100
+ const configPath = path.join(outputDir, "config.json");
101
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf8");
102
+ }
103
+ /**
104
+ * Get current config
105
+ */
106
+ export function getConfig(outputDir) {
107
+ return readConfig(outputDir);
108
+ }
109
+ /**
110
+ * Update config (version-controlled)
111
+ */
112
+ export function updateConfig(outputDir, updates) {
113
+ const config = readConfig(outputDir);
114
+ Object.assign(config, updates);
115
+ writeConfig(outputDir, config);
116
+ }
117
+ /**
118
+ * Generate a UUID v4
119
+ */
120
+ export function generateUUID() {
121
+ return crypto.randomUUID();
122
+ }
123
+ //# sourceMappingURL=id-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-generator.js","sourceRoot":"","sources":["../src/id-generator.ts"],"names":[],"mappings":"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"}