@sudocode-ai/local-server 0.1.7 → 0.1.8

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 (274) 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 +187 -0
  86. package/dist/execution/worktree/git-sync-cli.d.ts.map +1 -0
  87. package/dist/execution/worktree/git-sync-cli.js +350 -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 +132 -211
  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-Bb_W5bUr.css +1 -0
  102. package/dist/public/assets/index-CFKL113G.js +710 -0
  103. package/dist/public/assets/index-CFKL113G.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 +506 -54
  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 +126 -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/services/agent-registry.d.ts +140 -0
  158. package/dist/services/agent-registry.d.ts.map +1 -0
  159. package/dist/services/agent-registry.js +272 -0
  160. package/dist/services/agent-registry.js.map +1 -0
  161. package/dist/services/editor-service.d.ts +57 -0
  162. package/dist/services/editor-service.d.ts.map +1 -0
  163. package/dist/services/editor-service.js +204 -0
  164. package/dist/services/editor-service.js.map +1 -0
  165. package/dist/services/execution-changes-service.d.ts +92 -0
  166. package/dist/services/execution-changes-service.d.ts.map +1 -0
  167. package/dist/services/execution-changes-service.js +546 -0
  168. package/dist/services/execution-changes-service.js.map +1 -0
  169. package/dist/services/execution-lifecycle.d.ts +1 -0
  170. package/dist/services/execution-lifecycle.d.ts.map +1 -1
  171. package/dist/services/execution-lifecycle.js +37 -7
  172. package/dist/services/execution-lifecycle.js.map +1 -1
  173. package/dist/services/execution-logs-store.d.ts +75 -0
  174. package/dist/services/execution-logs-store.d.ts.map +1 -1
  175. package/dist/services/execution-logs-store.js +142 -2
  176. package/dist/services/execution-logs-store.js.map +1 -1
  177. package/dist/services/execution-service.d.ts +50 -58
  178. package/dist/services/execution-service.d.ts.map +1 -1
  179. package/dist/services/execution-service.js +433 -469
  180. package/dist/services/execution-service.js.map +1 -1
  181. package/dist/services/execution-worker-pool.d.ts +116 -0
  182. package/dist/services/execution-worker-pool.d.ts.map +1 -0
  183. package/dist/services/execution-worker-pool.js +326 -0
  184. package/dist/services/execution-worker-pool.js.map +1 -0
  185. package/dist/services/executions.d.ts +3 -0
  186. package/dist/services/executions.d.ts.map +1 -1
  187. package/dist/services/executions.js +11 -17
  188. package/dist/services/executions.js.map +1 -1
  189. package/dist/services/export.d.ts +8 -2
  190. package/dist/services/export.d.ts.map +1 -1
  191. package/dist/services/export.js +29 -23
  192. package/dist/services/export.js.map +1 -1
  193. package/dist/services/file-search/git-ls-files-strategy.d.ts +72 -0
  194. package/dist/services/file-search/git-ls-files-strategy.d.ts.map +1 -0
  195. package/dist/services/file-search/git-ls-files-strategy.js +176 -0
  196. package/dist/services/file-search/git-ls-files-strategy.js.map +1 -0
  197. package/dist/services/file-search/index.d.ts +9 -0
  198. package/dist/services/file-search/index.d.ts.map +1 -0
  199. package/dist/services/file-search/index.js +10 -0
  200. package/dist/services/file-search/index.js.map +1 -0
  201. package/dist/services/file-search/registry.d.ts +97 -0
  202. package/dist/services/file-search/registry.d.ts.map +1 -0
  203. package/dist/services/file-search/registry.js +140 -0
  204. package/dist/services/file-search/registry.js.map +1 -0
  205. package/dist/services/file-search/strategy.d.ts +58 -0
  206. package/dist/services/file-search/strategy.d.ts.map +1 -0
  207. package/dist/services/file-search/strategy.js +8 -0
  208. package/dist/services/file-search/strategy.js.map +1 -0
  209. package/dist/services/project-context.d.ts +69 -0
  210. package/dist/services/project-context.d.ts.map +1 -0
  211. package/dist/services/project-context.js +113 -0
  212. package/dist/services/project-context.js.map +1 -0
  213. package/dist/services/project-manager.d.ts +95 -0
  214. package/dist/services/project-manager.d.ts.map +1 -0
  215. package/dist/services/project-manager.js +388 -0
  216. package/dist/services/project-manager.js.map +1 -0
  217. package/dist/services/project-registry.d.ts +98 -0
  218. package/dist/services/project-registry.d.ts.map +1 -0
  219. package/dist/services/project-registry.js +289 -0
  220. package/dist/services/project-registry.js.map +1 -0
  221. package/dist/services/prompt-resolver.d.ts +97 -0
  222. package/dist/services/prompt-resolver.d.ts.map +1 -0
  223. package/dist/services/prompt-resolver.js +377 -0
  224. package/dist/services/prompt-resolver.js.map +1 -0
  225. package/dist/services/repo-info.d.ts +12 -0
  226. package/dist/services/repo-info.d.ts.map +1 -1
  227. package/dist/services/repo-info.js +46 -0
  228. package/dist/services/repo-info.js.map +1 -1
  229. package/dist/services/watcher.d.ts +3 -4
  230. package/dist/services/watcher.d.ts.map +1 -1
  231. package/dist/services/watcher.js +18 -35
  232. package/dist/services/watcher.js.map +1 -1
  233. package/dist/services/websocket.d.ts +30 -16
  234. package/dist/services/websocket.d.ts.map +1 -1
  235. package/dist/services/websocket.js +102 -37
  236. package/dist/services/websocket.js.map +1 -1
  237. package/dist/services/worktree-sync-service.d.ts +228 -0
  238. package/dist/services/worktree-sync-service.d.ts.map +1 -0
  239. package/dist/services/worktree-sync-service.js +563 -0
  240. package/dist/services/worktree-sync-service.js.map +1 -0
  241. package/dist/types/editor.d.ts +49 -0
  242. package/dist/types/editor.d.ts.map +1 -0
  243. package/dist/types/editor.js +50 -0
  244. package/dist/types/editor.js.map +1 -0
  245. package/dist/types/project.d.ts +58 -0
  246. package/dist/types/project.d.ts.map +1 -0
  247. package/dist/types/project.js +10 -0
  248. package/dist/types/project.js.map +1 -0
  249. package/dist/utils/executable-check.d.ts +36 -0
  250. package/dist/utils/executable-check.d.ts.map +1 -0
  251. package/dist/utils/executable-check.js +79 -0
  252. package/dist/utils/executable-check.js.map +1 -0
  253. package/dist/workers/execution-worker.d.ts +18 -0
  254. package/dist/workers/execution-worker.d.ts.map +1 -0
  255. package/dist/workers/execution-worker.js +340 -0
  256. package/dist/workers/execution-worker.js.map +1 -0
  257. package/dist/workers/worker-ipc.d.ts +84 -0
  258. package/dist/workers/worker-ipc.d.ts.map +1 -0
  259. package/dist/workers/worker-ipc.js +29 -0
  260. package/dist/workers/worker-ipc.js.map +1 -0
  261. package/package.json +6 -5
  262. package/dist/execution/output/ag-ui-integration.d.ts +0 -96
  263. package/dist/execution/output/ag-ui-integration.d.ts.map +0 -1
  264. package/dist/execution/output/ag-ui-integration.js +0 -96
  265. package/dist/execution/output/ag-ui-integration.js.map +0 -1
  266. package/dist/execution/output/claude-code-output-processor.d.ts +0 -321
  267. package/dist/execution/output/claude-code-output-processor.d.ts.map +0 -1
  268. package/dist/execution/output/claude-code-output-processor.js +0 -769
  269. package/dist/execution/output/claude-code-output-processor.js.map +0 -1
  270. package/dist/public/assets/index-B3SEMufD.js +0 -580
  271. package/dist/public/assets/index-B3SEMufD.js.map +0 -1
  272. package/dist/public/assets/index-D2YGL3gX.css +0 -1
  273. package/dist/public/assets/ui-vendor-CotR6bx9.js +0 -54
  274. 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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"}
@@ -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"}
@@ -8,52 +8,35 @@ import { startWatcher as startCliWatcher, } from "@sudocode-ai/cli/dist/watcher.
8
8
  * This wraps the CLI watcher with server-specific logging and callbacks
9
9
  */
10
10
  export function startServerWatcher(options) {
11
- const { db, baseDir, debounceDelay = 2000, syncJSONLToMarkdown = false, onFileChange, } = options;
11
+ const { db, baseDir, syncJSONLToMarkdown = false, onFileChange, } = options;
12
12
  console.log(`[watcher] Starting file watcher for ${baseDir}`);
13
- console.log(`[watcher] Debounce delay: ${debounceDelay}ms`);
14
13
  if (syncJSONLToMarkdown) {
15
14
  console.log(`[watcher] Reverse sync (JSONL → Markdown) enabled`);
16
15
  }
17
- // Start the CLI watcher with server-specific callbacks
18
- // TODO: Migrate away from parsing messages and start a watcher directly instead of using the CLI watcher.
16
+ // Start the CLI watcher with typed callbacks
19
17
  const control = startCliWatcher({
20
18
  db,
21
19
  baseDir,
22
- debounceDelay,
23
20
  syncJSONLToMarkdown,
24
- onLog: (message) => {
25
- console.log(message);
26
- // Extract entity info from log messages if available
27
- // Log format: "[watch] <event> <path>" or "[watch] Synced <type> <id> (<action>)"
21
+ // NEW PATH: Use typed callback (preferred)
22
+ onEntitySync: (event) => {
23
+ console.log(`[watcher] Entity synced: ${event.entityType} ${event.entityId} (${event.action})`);
28
24
  if (onFileChange) {
29
- // TODO: Use something more robust than regex parsing here.
30
- // Match markdown sync log: "[watch] Synced issue ISSUE-001 (updated)"
31
- const syncMatch = message.match(/\[watch\] Synced (spec|issue) ([A-Z]+-\d+) \((created|updated)\)/);
32
- if (syncMatch) {
33
- const [, entityType, entityId] = syncMatch;
34
- onFileChange({
35
- filePath: "", // Path not available in sync message
36
- event: "change",
37
- entityType: entityType,
38
- entityId,
39
- });
40
- return; // Early return to avoid double-processing
41
- }
42
- // Match JSONL file change: "[watch] change issues.jsonl" or "[watch] change specs.jsonl"
43
- const jsonlChangeMatch = message.match(/\[watch\] change (issues|specs)\.jsonl/);
44
- if (jsonlChangeMatch) {
45
- const [, entityType] = jsonlChangeMatch;
46
- // For JSONL changes, we don't know which specific entity changed
47
- // so we broadcast a generic update that will trigger a refetch
48
- onFileChange({
49
- filePath: `${entityType}.jsonl`,
50
- event: "change",
51
- entityType: (entityType === "issues" ? "issue" : "spec"),
52
- entityId: "*", // Wildcard to indicate "any entity of this type"
53
- });
54
- }
25
+ onFileChange({
26
+ filePath: event.filePath,
27
+ baseDir: event.baseDir,
28
+ event: "change",
29
+ entityType: event.entityType,
30
+ entityId: event.entityId,
31
+ entity: event.entity, // Pass through entity data
32
+ timestamp: event.timestamp,
33
+ });
55
34
  }
56
35
  },
36
+ // Keep onLog for debugging
37
+ onLog: (message) => {
38
+ console.log(message);
39
+ },
57
40
  onError: (error) => {
58
41
  console.error(`[watcher] Error: ${error.message}`);
59
42
  },
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/services/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,YAAY,IAAI,eAAe,GAEhC,MAAM,kCAAkC,CAAC;AA0C1C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B;IAE7B,MAAM,EACJ,EAAE,EACF,OAAO,EACP,aAAa,GAAG,IAAI,EACpB,mBAAmB,GAAG,KAAK,EAC3B,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,OAAO,CAAC,GAAG,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,6BAA6B,aAAa,IAAI,CAAC,CAAC;IAC5D,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;IAED,uDAAuD;IACvD,0GAA0G;IAC1G,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,EAAE;QACF,OAAO;QACP,aAAa;QACb,mBAAmB;QACnB,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAErB,qDAAqD;YACrD,kFAAkF;YAClF,IAAI,YAAY,EAAE,CAAC;gBACjB,2DAA2D;gBAE3D,sEAAsE;gBACtE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAC7B,kEAAkE,CACnE,CAAC;gBACF,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;oBAC3C,YAAY,CAAC;wBACX,QAAQ,EAAE,EAAE,EAAE,qCAAqC;wBACnD,KAAK,EAAE,QAAQ;wBACf,UAAU,EAAE,UAA8B;wBAC1C,QAAQ;qBACT,CAAC,CAAC;oBACH,OAAO,CAAC,0CAA0C;gBACpD,CAAC;gBAED,yFAAyF;gBACzF,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CACpC,wCAAwC,CACzC,CAAC;gBACF,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAAC;oBACxC,iEAAiE;oBACjE,+DAA+D;oBAC/D,YAAY,CAAC;wBACX,QAAQ,EAAE,GAAG,UAAU,QAAQ;wBAC/B,KAAK,EAAE,QAAQ;wBACf,UAAU,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAE5C;wBACX,QAAQ,EAAE,GAAG,EAAE,iDAAiD;qBACjE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/services/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,YAAY,IAAI,eAAe,GAEhC,MAAM,kCAAkC,CAAC;AA0C1C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA6B;IAE7B,MAAM,EACJ,EAAE,EACF,OAAO,EACP,mBAAmB,GAAG,KAAK,EAC3B,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,OAAO,CAAC,GAAG,CAAC,uCAAuC,OAAO,EAAE,CAAC,CAAC;IAC9D,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC;IAED,6CAA6C;IAC7C,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,EAAE;QACF,OAAO;QACP,mBAAmB;QAEnB,2CAA2C;QAC3C,YAAY,EAAE,CAAC,KAAsB,EAAE,EAAE;YACvC,OAAO,CAAC,GAAG,CACT,4BAA4B,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,GAAG,CACnF,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACjB,YAAY,CAAC;oBACX,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,QAAQ;oBACf,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,6BAA6B;oBACnD,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE;YACjB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC"}