@sudocode-ai/local-server 0.1.7 → 0.1.9

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 (282) hide show
  1. package/README.md +6 -0
  2. package/dist/errors/agent-errors.d.ts +43 -0
  3. package/dist/errors/agent-errors.d.ts.map +1 -0
  4. package/dist/errors/agent-errors.js +69 -0
  5. package/dist/errors/agent-errors.js.map +1 -0
  6. package/dist/execution/adapters/claude-adapter.d.ts +63 -0
  7. package/dist/execution/adapters/claude-adapter.d.ts.map +1 -0
  8. package/dist/execution/adapters/claude-adapter.js +82 -0
  9. package/dist/execution/adapters/claude-adapter.js.map +1 -0
  10. package/dist/execution/adapters/codex-adapter.d.ts +67 -0
  11. package/dist/execution/adapters/codex-adapter.d.ts.map +1 -0
  12. package/dist/execution/adapters/codex-adapter.js +183 -0
  13. package/dist/execution/adapters/codex-adapter.js.map +1 -0
  14. package/dist/execution/adapters/codex-config-builder.d.ts +30 -0
  15. package/dist/execution/adapters/codex-config-builder.d.ts.map +1 -0
  16. package/dist/execution/adapters/codex-config-builder.js +110 -0
  17. package/dist/execution/adapters/codex-config-builder.js.map +1 -0
  18. package/dist/execution/adapters/copilot-adapter.d.ts +94 -0
  19. package/dist/execution/adapters/copilot-adapter.d.ts.map +1 -0
  20. package/dist/execution/adapters/copilot-adapter.js +163 -0
  21. package/dist/execution/adapters/copilot-adapter.js.map +1 -0
  22. package/dist/execution/adapters/copilot-config-builder.d.ts +48 -0
  23. package/dist/execution/adapters/copilot-config-builder.d.ts.map +1 -0
  24. package/dist/execution/adapters/copilot-config-builder.js +125 -0
  25. package/dist/execution/adapters/copilot-config-builder.js.map +1 -0
  26. package/dist/execution/adapters/cursor-adapter.d.ts +66 -0
  27. package/dist/execution/adapters/cursor-adapter.d.ts.map +1 -0
  28. package/dist/execution/adapters/cursor-adapter.js +121 -0
  29. package/dist/execution/adapters/cursor-adapter.js.map +1 -0
  30. package/dist/execution/adapters/cursor-config-builder.d.ts +29 -0
  31. package/dist/execution/adapters/cursor-config-builder.d.ts.map +1 -0
  32. package/dist/execution/adapters/cursor-config-builder.js +49 -0
  33. package/dist/execution/adapters/cursor-config-builder.js.map +1 -0
  34. package/dist/execution/adapters/shared/config-presets.d.ts +102 -0
  35. package/dist/execution/adapters/shared/config-presets.d.ts.map +1 -0
  36. package/dist/execution/adapters/shared/config-presets.js +205 -0
  37. package/dist/execution/adapters/shared/config-presets.js.map +1 -0
  38. package/dist/execution/adapters/shared/config-utils.d.ts +95 -0
  39. package/dist/execution/adapters/shared/config-utils.d.ts.map +1 -0
  40. package/dist/execution/adapters/shared/config-utils.js +163 -0
  41. package/dist/execution/adapters/shared/config-utils.js.map +1 -0
  42. package/dist/execution/adapters/shared/index.d.ts +8 -0
  43. package/dist/execution/adapters/shared/index.d.ts.map +1 -0
  44. package/dist/execution/adapters/shared/index.js +8 -0
  45. package/dist/execution/adapters/shared/index.js.map +1 -0
  46. package/dist/execution/executors/agent-executor-wrapper.d.ts +153 -0
  47. package/dist/execution/executors/agent-executor-wrapper.d.ts.map +1 -0
  48. package/dist/execution/executors/agent-executor-wrapper.js +652 -0
  49. package/dist/execution/executors/agent-executor-wrapper.js.map +1 -0
  50. package/dist/execution/executors/executor-factory.d.ts +95 -0
  51. package/dist/execution/executors/executor-factory.d.ts.map +1 -0
  52. package/dist/execution/executors/executor-factory.js +120 -0
  53. package/dist/execution/executors/executor-factory.js.map +1 -0
  54. package/dist/execution/output/ag-ui-adapter.d.ts +0 -2
  55. package/dist/execution/output/ag-ui-adapter.d.ts.map +1 -1
  56. package/dist/execution/output/ag-ui-adapter.js +0 -2
  57. package/dist/execution/output/ag-ui-adapter.js.map +1 -1
  58. package/dist/execution/output/index.d.ts +0 -3
  59. package/dist/execution/output/index.d.ts.map +1 -1
  60. package/dist/execution/output/index.js +0 -2
  61. package/dist/execution/output/index.js.map +1 -1
  62. package/dist/execution/output/normalized-to-ag-ui-adapter.d.ts +108 -0
  63. package/dist/execution/output/normalized-to-ag-ui-adapter.d.ts.map +1 -0
  64. package/dist/execution/output/normalized-to-ag-ui-adapter.js +321 -0
  65. package/dist/execution/output/normalized-to-ag-ui-adapter.js.map +1 -0
  66. package/dist/execution/process/builders/claude.d.ts +24 -57
  67. package/dist/execution/process/builders/claude.d.ts.map +1 -1
  68. package/dist/execution/process/builders/claude.js +153 -19
  69. package/dist/execution/process/builders/claude.js.map +1 -1
  70. package/dist/execution/transport/ipc-transport-manager.d.ts +74 -0
  71. package/dist/execution/transport/ipc-transport-manager.d.ts.map +1 -0
  72. package/dist/execution/transport/ipc-transport-manager.js +104 -0
  73. package/dist/execution/transport/ipc-transport-manager.js.map +1 -0
  74. package/dist/execution/transport/transport-manager.d.ts.map +1 -1
  75. package/dist/execution/transport/transport-manager.js +3 -0
  76. package/dist/execution/transport/transport-manager.js.map +1 -1
  77. package/dist/execution/worktree/conflict-detector.d.ts +85 -0
  78. package/dist/execution/worktree/conflict-detector.d.ts.map +1 -0
  79. package/dist/execution/worktree/conflict-detector.js +129 -0
  80. package/dist/execution/worktree/conflict-detector.js.map +1 -0
  81. package/dist/execution/worktree/git-cli.d.ts +9 -0
  82. package/dist/execution/worktree/git-cli.d.ts.map +1 -1
  83. package/dist/execution/worktree/git-cli.js +10 -0
  84. package/dist/execution/worktree/git-cli.js.map +1 -1
  85. package/dist/execution/worktree/git-sync-cli.d.ts +198 -0
  86. package/dist/execution/worktree/git-sync-cli.d.ts.map +1 -0
  87. package/dist/execution/worktree/git-sync-cli.js +401 -0
  88. package/dist/execution/worktree/git-sync-cli.js.map +1 -0
  89. package/dist/execution/worktree/manager.d.ts +18 -0
  90. package/dist/execution/worktree/manager.d.ts.map +1 -1
  91. package/dist/execution/worktree/manager.js +9 -3
  92. package/dist/execution/worktree/manager.js.map +1 -1
  93. package/dist/index.d.ts +1 -3
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +124 -229
  96. package/dist/index.js.map +1 -1
  97. package/dist/middleware/project-context.d.ts +37 -0
  98. package/dist/middleware/project-context.d.ts.map +1 -0
  99. package/dist/middleware/project-context.js +91 -0
  100. package/dist/middleware/project-context.js.map +1 -0
  101. package/dist/public/assets/index-DV9Tbujb.css +1 -0
  102. package/dist/public/assets/index-DcDX9-Ad.js +740 -0
  103. package/dist/public/assets/index-DcDX9-Ad.js.map +1 -0
  104. package/dist/public/assets/{react-vendor-ByUx1V_q.js → react-vendor-DiL5hC7l.js} +2 -2
  105. package/dist/public/assets/{react-vendor-ByUx1V_q.js.map → react-vendor-DiL5hC7l.js.map} +1 -1
  106. package/dist/public/assets/ui-vendor-B4WMPEfa.js +54 -0
  107. package/dist/public/assets/ui-vendor-B4WMPEfa.js.map +1 -0
  108. package/dist/public/index.html +4 -4
  109. package/dist/routes/agents.d.ts +3 -0
  110. package/dist/routes/agents.d.ts.map +1 -0
  111. package/dist/routes/agents.js +62 -0
  112. package/dist/routes/agents.js.map +1 -0
  113. package/dist/routes/config.d.ts +3 -0
  114. package/dist/routes/config.d.ts.map +1 -0
  115. package/dist/routes/config.js +25 -0
  116. package/dist/routes/config.js.map +1 -0
  117. package/dist/routes/editors.d.ts +15 -0
  118. package/dist/routes/editors.d.ts.map +1 -0
  119. package/dist/routes/editors.js +98 -0
  120. package/dist/routes/editors.js.map +1 -0
  121. package/dist/routes/executions-stream.d.ts +8 -5
  122. package/dist/routes/executions-stream.d.ts.map +1 -1
  123. package/dist/routes/executions-stream.js +10 -6
  124. package/dist/routes/executions-stream.js.map +1 -1
  125. package/dist/routes/executions.d.ts +6 -10
  126. package/dist/routes/executions.d.ts.map +1 -1
  127. package/dist/routes/executions.js +792 -37
  128. package/dist/routes/executions.js.map +1 -1
  129. package/dist/routes/feedback.d.ts +3 -2
  130. package/dist/routes/feedback.d.ts.map +1 -1
  131. package/dist/routes/feedback.js +12 -10
  132. package/dist/routes/feedback.js.map +1 -1
  133. package/dist/routes/files.d.ts +18 -0
  134. package/dist/routes/files.d.ts.map +1 -0
  135. package/dist/routes/files.js +89 -0
  136. package/dist/routes/files.js.map +1 -0
  137. package/dist/routes/issues.d.ts +3 -2
  138. package/dist/routes/issues.d.ts.map +1 -1
  139. package/dist/routes/issues.js +19 -18
  140. package/dist/routes/issues.js.map +1 -1
  141. package/dist/routes/projects.d.ts +11 -0
  142. package/dist/routes/projects.d.ts.map +1 -0
  143. package/dist/routes/projects.js +447 -0
  144. package/dist/routes/projects.js.map +1 -0
  145. package/dist/routes/relationships.d.ts +3 -2
  146. package/dist/routes/relationships.d.ts.map +1 -1
  147. package/dist/routes/relationships.js +12 -10
  148. package/dist/routes/relationships.js.map +1 -1
  149. package/dist/routes/repo-info.d.ts +3 -0
  150. package/dist/routes/repo-info.d.ts.map +1 -0
  151. package/dist/routes/repo-info.js +203 -0
  152. package/dist/routes/repo-info.js.map +1 -0
  153. package/dist/routes/specs.d.ts +3 -2
  154. package/dist/routes/specs.d.ts.map +1 -1
  155. package/dist/routes/specs.js +19 -18
  156. package/dist/routes/specs.js.map +1 -1
  157. package/dist/routes/version.d.ts +3 -0
  158. package/dist/routes/version.d.ts.map +1 -0
  159. package/dist/routes/version.js +25 -0
  160. package/dist/routes/version.js.map +1 -0
  161. package/dist/services/agent-registry.d.ts +140 -0
  162. package/dist/services/agent-registry.d.ts.map +1 -0
  163. package/dist/services/agent-registry.js +272 -0
  164. package/dist/services/agent-registry.js.map +1 -0
  165. package/dist/services/editor-service.d.ts +57 -0
  166. package/dist/services/editor-service.d.ts.map +1 -0
  167. package/dist/services/editor-service.js +204 -0
  168. package/dist/services/editor-service.js.map +1 -0
  169. package/dist/services/execution-changes-service.d.ts +110 -0
  170. package/dist/services/execution-changes-service.d.ts.map +1 -0
  171. package/dist/services/execution-changes-service.js +700 -0
  172. package/dist/services/execution-changes-service.js.map +1 -0
  173. package/dist/services/execution-lifecycle.d.ts +1 -0
  174. package/dist/services/execution-lifecycle.d.ts.map +1 -1
  175. package/dist/services/execution-lifecycle.js +37 -7
  176. package/dist/services/execution-lifecycle.js.map +1 -1
  177. package/dist/services/execution-logs-store.d.ts +75 -0
  178. package/dist/services/execution-logs-store.d.ts.map +1 -1
  179. package/dist/services/execution-logs-store.js +142 -2
  180. package/dist/services/execution-logs-store.js.map +1 -1
  181. package/dist/services/execution-service.d.ts +82 -59
  182. package/dist/services/execution-service.d.ts.map +1 -1
  183. package/dist/services/execution-service.js +514 -469
  184. package/dist/services/execution-service.js.map +1 -1
  185. package/dist/services/execution-worker-pool.d.ts +116 -0
  186. package/dist/services/execution-worker-pool.d.ts.map +1 -0
  187. package/dist/services/execution-worker-pool.js +326 -0
  188. package/dist/services/execution-worker-pool.js.map +1 -0
  189. package/dist/services/executions.d.ts +3 -0
  190. package/dist/services/executions.d.ts.map +1 -1
  191. package/dist/services/executions.js +11 -17
  192. package/dist/services/executions.js.map +1 -1
  193. package/dist/services/export.d.ts +8 -2
  194. package/dist/services/export.d.ts.map +1 -1
  195. package/dist/services/export.js +29 -23
  196. package/dist/services/export.js.map +1 -1
  197. package/dist/services/file-search/git-ls-files-strategy.d.ts +72 -0
  198. package/dist/services/file-search/git-ls-files-strategy.d.ts.map +1 -0
  199. package/dist/services/file-search/git-ls-files-strategy.js +176 -0
  200. package/dist/services/file-search/git-ls-files-strategy.js.map +1 -0
  201. package/dist/services/file-search/index.d.ts +9 -0
  202. package/dist/services/file-search/index.d.ts.map +1 -0
  203. package/dist/services/file-search/index.js +10 -0
  204. package/dist/services/file-search/index.js.map +1 -0
  205. package/dist/services/file-search/registry.d.ts +97 -0
  206. package/dist/services/file-search/registry.d.ts.map +1 -0
  207. package/dist/services/file-search/registry.js +140 -0
  208. package/dist/services/file-search/registry.js.map +1 -0
  209. package/dist/services/file-search/strategy.d.ts +58 -0
  210. package/dist/services/file-search/strategy.d.ts.map +1 -0
  211. package/dist/services/file-search/strategy.js +8 -0
  212. package/dist/services/file-search/strategy.js.map +1 -0
  213. package/dist/services/project-context.d.ts +69 -0
  214. package/dist/services/project-context.d.ts.map +1 -0
  215. package/dist/services/project-context.js +113 -0
  216. package/dist/services/project-context.js.map +1 -0
  217. package/dist/services/project-manager.d.ts +95 -0
  218. package/dist/services/project-manager.d.ts.map +1 -0
  219. package/dist/services/project-manager.js +388 -0
  220. package/dist/services/project-manager.js.map +1 -0
  221. package/dist/services/project-registry.d.ts +98 -0
  222. package/dist/services/project-registry.d.ts.map +1 -0
  223. package/dist/services/project-registry.js +289 -0
  224. package/dist/services/project-registry.js.map +1 -0
  225. package/dist/services/prompt-resolver.d.ts +97 -0
  226. package/dist/services/prompt-resolver.d.ts.map +1 -0
  227. package/dist/services/prompt-resolver.js +377 -0
  228. package/dist/services/prompt-resolver.js.map +1 -0
  229. package/dist/services/repo-info.d.ts +12 -0
  230. package/dist/services/repo-info.d.ts.map +1 -1
  231. package/dist/services/repo-info.js +46 -0
  232. package/dist/services/repo-info.js.map +1 -1
  233. package/dist/services/version-service.d.ts +14 -0
  234. package/dist/services/version-service.d.ts.map +1 -0
  235. package/dist/services/version-service.js +57 -0
  236. package/dist/services/version-service.js.map +1 -0
  237. package/dist/services/watcher.d.ts +3 -4
  238. package/dist/services/watcher.d.ts.map +1 -1
  239. package/dist/services/watcher.js +18 -35
  240. package/dist/services/watcher.js.map +1 -1
  241. package/dist/services/websocket.d.ts +30 -16
  242. package/dist/services/websocket.d.ts.map +1 -1
  243. package/dist/services/websocket.js +102 -37
  244. package/dist/services/websocket.js.map +1 -1
  245. package/dist/services/worktree-sync-service.d.ts +326 -0
  246. package/dist/services/worktree-sync-service.d.ts.map +1 -0
  247. package/dist/services/worktree-sync-service.js +1091 -0
  248. package/dist/services/worktree-sync-service.js.map +1 -0
  249. package/dist/types/editor.d.ts +49 -0
  250. package/dist/types/editor.d.ts.map +1 -0
  251. package/dist/types/editor.js +50 -0
  252. package/dist/types/editor.js.map +1 -0
  253. package/dist/types/project.d.ts +58 -0
  254. package/dist/types/project.d.ts.map +1 -0
  255. package/dist/types/project.js +10 -0
  256. package/dist/types/project.js.map +1 -0
  257. package/dist/utils/executable-check.d.ts +36 -0
  258. package/dist/utils/executable-check.d.ts.map +1 -0
  259. package/dist/utils/executable-check.js +79 -0
  260. package/dist/utils/executable-check.js.map +1 -0
  261. package/dist/workers/execution-worker.d.ts +18 -0
  262. package/dist/workers/execution-worker.d.ts.map +1 -0
  263. package/dist/workers/execution-worker.js +340 -0
  264. package/dist/workers/execution-worker.js.map +1 -0
  265. package/dist/workers/worker-ipc.d.ts +84 -0
  266. package/dist/workers/worker-ipc.d.ts.map +1 -0
  267. package/dist/workers/worker-ipc.js +29 -0
  268. package/dist/workers/worker-ipc.js.map +1 -0
  269. package/package.json +6 -5
  270. package/dist/execution/output/ag-ui-integration.d.ts +0 -96
  271. package/dist/execution/output/ag-ui-integration.d.ts.map +0 -1
  272. package/dist/execution/output/ag-ui-integration.js +0 -96
  273. package/dist/execution/output/ag-ui-integration.js.map +0 -1
  274. package/dist/execution/output/claude-code-output-processor.d.ts +0 -321
  275. package/dist/execution/output/claude-code-output-processor.d.ts.map +0 -1
  276. package/dist/execution/output/claude-code-output-processor.js +0 -769
  277. package/dist/execution/output/claude-code-output-processor.js.map +0 -1
  278. package/dist/public/assets/index-B3SEMufD.js +0 -580
  279. package/dist/public/assets/index-B3SEMufD.js.map +0 -1
  280. package/dist/public/assets/index-D2YGL3gX.css +0 -1
  281. package/dist/public/assets/ui-vendor-CotR6bx9.js +0 -54
  282. package/dist/public/assets/ui-vendor-CotR6bx9.js.map +0 -1
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Prompt resolver service
3
+ *
4
+ * Resolves entity references and file mentions in agent prompts:
5
+ * - Injects [[s-xxxxx]] or @s-xxxxx spec references with markdown content
6
+ * - Injects [[i-xxxxx]] or @i-xxxxx issue references with markdown content
7
+ * - Tracks @file mentions but leaves them for agent to handle
8
+ */
9
+ import { getSpecById } from "./specs.js";
10
+ import { getIssueById } from "./issues.js";
11
+ /**
12
+ * PromptResolver service
13
+ *
14
+ * Extracts and resolves entity references in agent prompts
15
+ */
16
+ export class PromptResolver {
17
+ db;
18
+ constructor(db) {
19
+ this.db = db;
20
+ }
21
+ /**
22
+ * Resolve all references in a prompt
23
+ *
24
+ * @param prompt - The raw prompt with [[entity-id]], @entity-id, and @file references
25
+ * @param alreadyExpandedIds - Optional set of entity IDs that were already expanded in parent executions
26
+ * @param implicitIssueId - Optional issue ID to automatically include even if not mentioned in prompt (for issue-based executions)
27
+ * @returns Resolution result with resolved prompt, references, and errors
28
+ */
29
+ async resolve(prompt, alreadyExpandedIds = new Set(), implicitIssueId) {
30
+ const references = [];
31
+ const errors = [];
32
+ const expandedEntityIds = [];
33
+ // Extract all references (order matters - extract entity IDs first)
34
+ const specRefs = this.extractSpecReferences(prompt);
35
+ const issueRefs = this.extractIssueReferences(prompt);
36
+ // Extract entity IDs for filtering file mentions
37
+ const entityIds = new Set([
38
+ ...specRefs.map((r) => r.id),
39
+ ...issueRefs.map((r) => r.id),
40
+ ]);
41
+ const fileRefs = this.extractFileMentions(prompt, entityIds);
42
+ // Track all references
43
+ references.push(...fileRefs);
44
+ // Resolve and inject specs (replace inline)
45
+ let resolvedPrompt = prompt;
46
+ for (const ref of specRefs) {
47
+ // Skip if already expanded in parent execution
48
+ if (alreadyExpandedIds.has(ref.id)) {
49
+ ref.found = true;
50
+ references.push(ref);
51
+ continue;
52
+ }
53
+ const spec = getSpecById(this.db, ref.id);
54
+ if (spec) {
55
+ ref.found = true;
56
+ resolvedPrompt = this.replaceReference(resolvedPrompt, ref.id, this.formatSpec(spec));
57
+ expandedEntityIds.push(ref.id);
58
+ }
59
+ else {
60
+ ref.found = false;
61
+ ref.error = `Spec ${ref.id} not found`;
62
+ errors.push(ref.error);
63
+ }
64
+ references.push(ref);
65
+ }
66
+ // Resolve issues (keep reference, append content at end)
67
+ const issueAppendixes = [];
68
+ for (const ref of issueRefs) {
69
+ // Skip if already expanded in parent execution
70
+ if (alreadyExpandedIds.has(ref.id)) {
71
+ ref.found = true;
72
+ references.push(ref);
73
+ continue;
74
+ }
75
+ const issue = getIssueById(this.db, ref.id);
76
+ if (issue) {
77
+ ref.found = true;
78
+ // Don't replace the reference - append content at end instead
79
+ issueAppendixes.push(`\n\nIssue ${ref.id}:\n${this.formatIssue(issue)}`);
80
+ expandedEntityIds.push(ref.id);
81
+ }
82
+ else {
83
+ ref.found = false;
84
+ ref.error = `Issue ${ref.id} not found`;
85
+ errors.push(ref.error);
86
+ }
87
+ references.push(ref);
88
+ }
89
+ // If an implicit issue ID is provided (for issue-based executions),
90
+ // automatically include it even if not mentioned in the prompt
91
+ if (implicitIssueId && !alreadyExpandedIds.has(implicitIssueId)) {
92
+ // Check if it's already in the issueRefs (explicitly mentioned)
93
+ const alreadyMentioned = issueRefs.some((ref) => ref.id === implicitIssueId);
94
+ if (!alreadyMentioned) {
95
+ const issue = getIssueById(this.db, implicitIssueId);
96
+ if (issue) {
97
+ // Add implicit issue reference
98
+ references.push({
99
+ type: "issue",
100
+ id: implicitIssueId,
101
+ found: true,
102
+ });
103
+ // Append content at the end
104
+ issueAppendixes.push(`\n\nIssue ${implicitIssueId}:\n${this.formatIssue(issue)}`);
105
+ expandedEntityIds.push(implicitIssueId);
106
+ }
107
+ else {
108
+ const error = `Implicit issue ${implicitIssueId} not found`;
109
+ errors.push(error);
110
+ references.push({
111
+ type: "issue",
112
+ id: implicitIssueId,
113
+ found: false,
114
+ error,
115
+ });
116
+ }
117
+ }
118
+ }
119
+ // Append all issue contents at the end
120
+ if (issueAppendixes.length > 0) {
121
+ resolvedPrompt += issueAppendixes.join("");
122
+ }
123
+ return {
124
+ resolvedPrompt,
125
+ references,
126
+ errors,
127
+ expandedEntityIds,
128
+ };
129
+ }
130
+ /**
131
+ * Extract spec references from prompt
132
+ * Supports two patterns:
133
+ * - [[s-xxxxx]] (bracket syntax)
134
+ * - @s-xxxxx (@ mention syntax)
135
+ */
136
+ extractSpecReferences(prompt) {
137
+ const refs = [];
138
+ // Extract bracket syntax: [[s-xxxxx]]
139
+ const bracketPattern = /\[\[(s-[a-z0-9]+)\]\]/gi;
140
+ const bracketMatches = prompt.matchAll(bracketPattern);
141
+ for (const match of bracketMatches) {
142
+ const id = match[1].toLowerCase();
143
+ if (!refs.some((r) => r.id === id)) {
144
+ refs.push({
145
+ type: "spec",
146
+ id,
147
+ found: false,
148
+ });
149
+ }
150
+ }
151
+ // Extract @ mention syntax: @s-xxxxx
152
+ const mentionPattern = /@(s-[a-z0-9]+)(?=\s|$|[^\w-])/gi;
153
+ const mentionMatches = prompt.matchAll(mentionPattern);
154
+ for (const match of mentionMatches) {
155
+ const id = match[1].toLowerCase();
156
+ if (!refs.some((r) => r.id === id)) {
157
+ refs.push({
158
+ type: "spec",
159
+ id,
160
+ found: false,
161
+ });
162
+ }
163
+ }
164
+ return refs;
165
+ }
166
+ /**
167
+ * Extract issue references from prompt
168
+ * Supports two patterns:
169
+ * - [[i-xxxxx]] (bracket syntax)
170
+ * - @i-xxxxx (@ mention syntax)
171
+ */
172
+ extractIssueReferences(prompt) {
173
+ const refs = [];
174
+ // Extract bracket syntax: [[i-xxxxx]]
175
+ const bracketPattern = /\[\[(i-[a-z0-9]+)\]\]/gi;
176
+ const bracketMatches = prompt.matchAll(bracketPattern);
177
+ for (const match of bracketMatches) {
178
+ const id = match[1].toLowerCase();
179
+ if (!refs.some((r) => r.id === id)) {
180
+ refs.push({
181
+ type: "issue",
182
+ id,
183
+ found: false,
184
+ });
185
+ }
186
+ }
187
+ // Extract @ mention syntax: @i-xxxxx
188
+ const mentionPattern = /@(i-[a-z0-9]+)(?=\s|$|[^\w-])/gi;
189
+ const mentionMatches = prompt.matchAll(mentionPattern);
190
+ for (const match of mentionMatches) {
191
+ const id = match[1].toLowerCase();
192
+ if (!refs.some((r) => r.id === id)) {
193
+ refs.push({
194
+ type: "issue",
195
+ id,
196
+ found: false,
197
+ });
198
+ }
199
+ }
200
+ return refs;
201
+ }
202
+ /**
203
+ * Extract file mentions from prompt
204
+ * Pattern: @filepath (but not @s-xxxxx or @i-xxxxx)
205
+ *
206
+ * Note: File mentions are tracked but not resolved (agent handles them)
207
+ */
208
+ extractFileMentions(prompt, entityIds) {
209
+ const pattern = /@([^\s@]+)/g;
210
+ const matches = prompt.matchAll(pattern);
211
+ const refs = [];
212
+ for (const match of matches) {
213
+ let path = match[1];
214
+ // Remove trailing punctuation (period, comma, etc.)
215
+ path = path.replace(/[.,;:!?]+$/, "");
216
+ // Skip if it's a spec or issue ID (already handled)
217
+ if (entityIds.has(path.toLowerCase())) {
218
+ continue;
219
+ }
220
+ // Avoid duplicates
221
+ if (!refs.some((r) => r.id === path)) {
222
+ refs.push({
223
+ type: "file",
224
+ id: path,
225
+ found: true, // Files are not resolved here, just tracked
226
+ });
227
+ }
228
+ }
229
+ return refs;
230
+ }
231
+ /**
232
+ * Replace a reference with formatted content
233
+ * Handles both [[id]] and @id syntaxes
234
+ */
235
+ replaceReference(prompt, id, content) {
236
+ // Replace bracket syntax: [[id]]
237
+ const bracketPattern = new RegExp(`\\[\\[${id}\\]\\]`, "gi");
238
+ prompt = prompt.replace(bracketPattern, content);
239
+ // Replace @ mention syntax: @id
240
+ const mentionPattern = new RegExp(`@${id}(?=\\s|$|[^\\w-])`, "gi");
241
+ prompt = prompt.replace(mentionPattern, content);
242
+ return prompt;
243
+ }
244
+ /**
245
+ * Format spec - returns all information shown in CLI show command
246
+ */
247
+ formatSpec(spec) {
248
+ const parts = [];
249
+ // Header
250
+ parts.push(`**${spec.id}: ${spec.title}**`);
251
+ parts.push("");
252
+ // Metadata
253
+ parts.push(`**Priority:** ${spec.priority}`);
254
+ if (spec.file_path) {
255
+ parts.push(`**File:** ${spec.file_path}`);
256
+ }
257
+ if (spec.parent_id) {
258
+ parts.push(`**Parent:** ${spec.parent_id}`);
259
+ }
260
+ parts.push(`**Created:** ${spec.created_at}`);
261
+ parts.push(`**Updated:** ${spec.updated_at}`);
262
+ // Tags
263
+ const tags = this.getTags(spec.id, "spec");
264
+ if (tags.length > 0) {
265
+ parts.push(`**Tags:** ${tags.join(", ")}`);
266
+ }
267
+ // Relationships
268
+ const outgoing = this.getOutgoingRelationships(spec.id, "spec");
269
+ if (outgoing.length > 0) {
270
+ parts.push("");
271
+ parts.push("**Outgoing Relationships:**");
272
+ for (const rel of outgoing) {
273
+ parts.push(`- ${rel.relationship_type} → ${rel.to_id} (${rel.to_type})`);
274
+ }
275
+ }
276
+ const incoming = this.getIncomingRelationships(spec.id, "spec");
277
+ if (incoming.length > 0) {
278
+ parts.push("");
279
+ parts.push("**Incoming Relationships:**");
280
+ for (const rel of incoming) {
281
+ parts.push(`- ${rel.from_id} (${rel.from_type}) → ${rel.relationship_type}`);
282
+ }
283
+ }
284
+ // Content
285
+ if (spec.content) {
286
+ parts.push("");
287
+ parts.push("**Content:**");
288
+ parts.push(spec.content);
289
+ }
290
+ return parts.join("\n");
291
+ }
292
+ /**
293
+ * Format issue - returns all information shown in CLI show command
294
+ */
295
+ formatIssue(issue) {
296
+ const parts = [];
297
+ // Header
298
+ parts.push(`**${issue.id}: ${issue.title}**`);
299
+ parts.push("");
300
+ // Metadata
301
+ parts.push(`**Status:** ${issue.status}`);
302
+ parts.push(`**Priority:** ${issue.priority}`);
303
+ if (issue.assignee) {
304
+ parts.push(`**Assignee:** ${issue.assignee}`);
305
+ }
306
+ if (issue.parent_id) {
307
+ parts.push(`**Parent:** ${issue.parent_id}`);
308
+ }
309
+ parts.push(`**Created:** ${issue.created_at}`);
310
+ parts.push(`**Updated:** ${issue.updated_at}`);
311
+ if (issue.closed_at) {
312
+ parts.push(`**Closed:** ${issue.closed_at}`);
313
+ }
314
+ // Tags
315
+ const tags = this.getTags(issue.id, "issue");
316
+ if (tags.length > 0) {
317
+ parts.push(`**Tags:** ${tags.join(", ")}`);
318
+ }
319
+ // Relationships
320
+ const outgoing = this.getOutgoingRelationships(issue.id, "issue");
321
+ if (outgoing.length > 0) {
322
+ parts.push("");
323
+ parts.push("**Outgoing Relationships:**");
324
+ for (const rel of outgoing) {
325
+ parts.push(`- ${rel.relationship_type} → ${rel.to_id} (${rel.to_type})`);
326
+ }
327
+ }
328
+ const incoming = this.getIncomingRelationships(issue.id, "issue");
329
+ if (incoming.length > 0) {
330
+ parts.push("");
331
+ parts.push("**Incoming Relationships:**");
332
+ for (const rel of incoming) {
333
+ parts.push(`- ${rel.from_id} (${rel.from_type}) → ${rel.relationship_type}`);
334
+ }
335
+ }
336
+ // Content
337
+ if (issue.content) {
338
+ parts.push("");
339
+ parts.push("**Content:**");
340
+ parts.push(issue.content);
341
+ }
342
+ return parts.join("\n");
343
+ }
344
+ /**
345
+ * Get tags for an entity
346
+ */
347
+ getTags(entityId, entityType) {
348
+ const query = this.db.prepare(`
349
+ SELECT tag FROM tags WHERE entity_id = ? AND entity_type = ?
350
+ `);
351
+ const rows = query.all(entityId, entityType);
352
+ return rows.map((r) => r.tag);
353
+ }
354
+ /**
355
+ * Get outgoing relationships for an entity
356
+ */
357
+ getOutgoingRelationships(entityId, entityType) {
358
+ const query = this.db.prepare(`
359
+ SELECT relationship_type, to_id, to_type
360
+ FROM relationships
361
+ WHERE from_id = ? AND from_type = ?
362
+ `);
363
+ return query.all(entityId, entityType);
364
+ }
365
+ /**
366
+ * Get incoming relationships for an entity
367
+ */
368
+ getIncomingRelationships(entityId, entityType) {
369
+ const query = this.db.prepare(`
370
+ SELECT relationship_type, from_id, from_type
371
+ FROM relationships
372
+ WHERE to_id = ? AND to_type = ?
373
+ `);
374
+ return query.all(entityId, entityType);
375
+ }
376
+ }
377
+ //# sourceMappingURL=prompt-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-resolver.js","sourceRoot":"","sources":["../../src/services/prompt-resolver.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,10 @@ export interface RepositoryInfo {
6
6
  branch: string;
7
7
  path: string;
8
8
  }
9
+ export interface BranchInfo {
10
+ current: string;
11
+ branches: string[];
12
+ }
9
13
  /**
10
14
  * Get repository information for a given repository path
11
15
  *
@@ -14,4 +18,12 @@ export interface RepositoryInfo {
14
18
  * @throws Error if the path is not a valid git repository
15
19
  */
16
20
  export declare function getRepositoryInfo(repoPath: string): Promise<RepositoryInfo>;
21
+ /**
22
+ * Get branch information for a given repository path
23
+ *
24
+ * @param repoPath - Absolute path to the repository root
25
+ * @returns Current branch and list of all local branches
26
+ * @throws Error if the path is not a valid git repository
27
+ */
28
+ export declare function getRepositoryBranches(repoPath: string): Promise<BranchInfo>;
17
29
  //# sourceMappingURL=repo-info.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-info.d.ts","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAgDzB"}
1
+ {"version":3,"file":"repo-info.d.ts","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAgDzB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA8CrB"}
@@ -50,4 +50,50 @@ export async function getRepositoryInfo(repoPath) {
50
50
  path: repoPath,
51
51
  };
52
52
  }
53
+ /**
54
+ * Get branch information for a given repository path
55
+ *
56
+ * @param repoPath - Absolute path to the repository root
57
+ * @returns Current branch and list of all local branches
58
+ * @throws Error if the path is not a valid git repository
59
+ */
60
+ export async function getRepositoryBranches(repoPath) {
61
+ const gitCli = new GitCli();
62
+ // Check if repoPath is a valid git repository
63
+ const isValidRepo = await gitCli.isValidRepo(repoPath);
64
+ if (!isValidRepo) {
65
+ throw new Error("Not a git repository");
66
+ }
67
+ // Get current branch
68
+ let currentBranch = "(detached)";
69
+ try {
70
+ const output = gitCli["execGit"]("git rev-parse --abbrev-ref HEAD", repoPath);
71
+ currentBranch = output.trim();
72
+ }
73
+ catch (error) {
74
+ console.error("Failed to get current branch:", error);
75
+ }
76
+ // Get all local branches
77
+ const branches = [];
78
+ try {
79
+ const output = gitCli["execGit"]("git branch --format='%(refname:short)'", repoPath);
80
+ const branchList = output
81
+ .trim()
82
+ .split("\n")
83
+ .map((b) => b.trim())
84
+ .filter((b) => b.length > 0);
85
+ branches.push(...branchList);
86
+ }
87
+ catch (error) {
88
+ console.error("Failed to get branches:", error);
89
+ // Fallback to just current branch if we can't list branches
90
+ if (currentBranch !== "(detached)") {
91
+ branches.push(currentBranch);
92
+ }
93
+ }
94
+ return {
95
+ current: currentBranch,
96
+ branches,
97
+ };
98
+ }
53
99
  //# sourceMappingURL=repo-info.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repo-info.js","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAQ1D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,0CAA0C;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,6BAA6B;IACrE,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CACpC,2BAA2B,EAC3B,QAAQ,CACT,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;QAEtC,8CAA8C;QAC9C,qCAAqC;QACrC,iCAAiC;QACjC,iCAAiC;QACjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACtD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qEAAqE;QACrE,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,qBAAqB;IACrB,IAAI,MAAM,GAAG,YAAY,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAC9B,iCAAiC,EACjC,QAAQ,CACT,CAAC;QACF,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM;QACN,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"repo-info.js","sourceRoot":"","sources":["../../src/services/repo-info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface VersionInfo {
2
+ cli: string;
3
+ server: string;
4
+ frontend: string;
5
+ }
6
+ /**
7
+ * Get version information for all packages.
8
+ * Handles both development (monorepo) and production (installed npm package) environments.
9
+ *
10
+ * @param baseDir - Optional base directory for testing. Defaults to __dirname.
11
+ * @returns Version information for CLI, server, and frontend packages
12
+ */
13
+ export declare function getVersionInfo(baseDir?: string): VersionInfo;
14
+ //# sourceMappingURL=version-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-service.d.ts","sourceRoot":"","sources":["../../src/services/version-service.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAkB,GAAG,WAAW,CAoDvE"}
@@ -0,0 +1,57 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ import * as path from "path";
3
+ import { fileURLToPath } from "url";
4
+ const __filename = fileURLToPath(import.meta.url);
5
+ const __dirname = path.dirname(__filename);
6
+ /**
7
+ * Get version information for all packages.
8
+ * Handles both development (monorepo) and production (installed npm package) environments.
9
+ *
10
+ * @param baseDir - Optional base directory for testing. Defaults to __dirname.
11
+ * @returns Version information for CLI, server, and frontend packages
12
+ */
13
+ export function getVersionInfo(baseDir = __dirname) {
14
+ // Determine if we're in development (monorepo) or production (installed package)
15
+ // In dev: baseDir is server/dist/services, workspace root has server/ and cli/ and frontend/
16
+ // In prod: baseDir is node_modules/@sudocode-ai/local-server/dist/services
17
+ // Check for monorepo structure by looking for both server/package.json (us) and frontend/package.json
18
+ const projectRoot = path.join(baseDir, "../../..");
19
+ const isDev = existsSync(path.join(projectRoot, "server/package.json")) &&
20
+ existsSync(path.join(projectRoot, "frontend/package.json"));
21
+ let cliPackage, serverPackage, frontendPackage;
22
+ if (isDev) {
23
+ // Development: Read from monorepo structure
24
+ // From server/dist/services -> server/dist -> server -> workspace root
25
+ const projectRoot = path.join(baseDir, "../../..");
26
+ const cliPackagePath = path.join(projectRoot, "cli/package.json");
27
+ const serverPackagePath = path.join(projectRoot, "server/package.json");
28
+ const frontendPackagePath = path.join(projectRoot, "frontend/package.json");
29
+ cliPackage = JSON.parse(readFileSync(cliPackagePath, "utf-8"));
30
+ serverPackage = JSON.parse(readFileSync(serverPackagePath, "utf-8"));
31
+ frontendPackage = JSON.parse(readFileSync(frontendPackagePath, "utf-8"));
32
+ }
33
+ else {
34
+ // Production: Read from installed npm packages
35
+ // From dist/services -> dist -> local-server (package root)
36
+ const serverPackagePath = path.join(baseDir, "../../package.json");
37
+ serverPackage = JSON.parse(readFileSync(serverPackagePath, "utf-8"));
38
+ // CLI package is in node_modules (sibling to local-server)
39
+ // From dist/services -> dist -> local-server -> @sudocode-ai -> cli
40
+ const cliPackagePath = path.join(baseDir, "../../../cli/package.json");
41
+ if (existsSync(cliPackagePath)) {
42
+ cliPackage = JSON.parse(readFileSync(cliPackagePath, "utf-8"));
43
+ }
44
+ else {
45
+ // Fallback: use server version if CLI package not found
46
+ cliPackage = serverPackage;
47
+ }
48
+ // Frontend is bundled with server, use server version
49
+ frontendPackage = serverPackage;
50
+ }
51
+ return {
52
+ cli: cliPackage.version,
53
+ server: serverPackage.version,
54
+ frontend: frontendPackage.version,
55
+ };
56
+ }
57
+ //# sourceMappingURL=version-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-service.js","sourceRoot":"","sources":["../../src/services/version-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAQ3C;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,SAAS;IACxD,iFAAiF;IACjF,6FAA6F;IAC7F,2EAA2E;IAC3E,sGAAsG;IACtG,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACnD,MAAM,KAAK,GACT,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE9D,IAAI,UAAU,EAAE,aAAa,EAAE,eAAe,CAAC;IAE/C,IAAI,KAAK,EAAE,CAAC;QACV,4CAA4C;QAC5C,uEAAuE;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACxE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CACnC,WAAW,EACX,uBAAuB,CACxB,CAAC;QAEF,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,4DAA4D;QAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACnE,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;QAErE,2DAA2D;QAC3D,oEAAoE;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;QAEvE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,wDAAwD;YACxD,UAAU,GAAG,aAAa,CAAC;QAC7B,CAAC;QAED,sDAAsD;QACtD,eAAe,GAAG,aAAa,CAAC;IAClC,CAAC;IAED,OAAO;QACL,GAAG,EAAE,UAAU,CAAC,OAAO;QACvB,MAAM,EAAE,aAAa,CAAC,OAAO;QAC7B,QAAQ,EAAE,eAAe,CAAC,OAAO;KAClC,CAAC;AACJ,CAAC"}
@@ -13,10 +13,6 @@ export interface ServerWatcherOptions {
13
13
  * Base directory to watch (e.g., .sudocode)
14
14
  */
15
15
  baseDir: string;
16
- /**
17
- * Debounce delay in milliseconds (default: 2000)
18
- */
19
- debounceDelay?: number;
20
16
  /**
21
17
  * Enable reverse sync (JSONL → Markdown) when JSONL files change (default: false)
22
18
  */
@@ -27,9 +23,12 @@ export interface ServerWatcherOptions {
27
23
  */
28
24
  onFileChange?: (info: {
29
25
  filePath: string;
26
+ baseDir: string;
30
27
  event: "add" | "change" | "unlink";
31
28
  entityType?: "spec" | "issue";
32
29
  entityId?: string;
30
+ entity?: any;
31
+ timestamp: Date;
33
32
  }) => void;
34
33
  }
35
34
  export interface ServerWatcherControl {
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/services/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,CA4EtB"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/services/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAG1C,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;QACnC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,GAAG,CAAC;QACb,SAAS,EAAE,IAAI,CAAC;KACjB,KAAK,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,CAuDtB"}