@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,289 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ import * as crypto from 'crypto';
5
+ import { Ok, Err } from '../types/project.js';
6
+ function getDefaultConfig() {
7
+ return {
8
+ version: 1,
9
+ projects: {},
10
+ recentProjects: [],
11
+ settings: {
12
+ maxRecentProjects: 10,
13
+ autoOpenLastProject: false,
14
+ },
15
+ };
16
+ }
17
+ /**
18
+ * ProjectRegistry manages the persistent storage of registered projects.
19
+ *
20
+ * Configuration is stored at ~/.config/sudocode/projects.json and includes:
21
+ * - Registered projects with metadata
22
+ * - Recent projects list
23
+ * - User settings
24
+ */
25
+ export class ProjectRegistry {
26
+ configPath;
27
+ config;
28
+ /**
29
+ * Create a new ProjectRegistry instance
30
+ * @param configPath - Optional custom config file path (defaults to ~/.config/sudocode/projects.json)
31
+ */
32
+ constructor(configPath) {
33
+ this.configPath = configPath || this.getDefaultConfigPath();
34
+ this.config = getDefaultConfig();
35
+ }
36
+ /**
37
+ * Get the default config file path following XDG Base Directory specification
38
+ */
39
+ getDefaultConfigPath() {
40
+ const configDir = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), '.config', 'sudocode');
41
+ return path.join(configDir, 'projects.json');
42
+ }
43
+ /**
44
+ * Load configuration from disk. Creates default config if file doesn't exist.
45
+ * @throws {Error} If config file is corrupted or unreadable
46
+ */
47
+ async load() {
48
+ try {
49
+ // Ensure config directory exists
50
+ const configDir = path.dirname(this.configPath);
51
+ if (!fs.existsSync(configDir)) {
52
+ fs.mkdirSync(configDir, { recursive: true });
53
+ }
54
+ // Load existing config or create default
55
+ if (fs.existsSync(this.configPath)) {
56
+ const data = fs.readFileSync(this.configPath, 'utf-8');
57
+ try {
58
+ this.config = JSON.parse(data);
59
+ // Validate config structure
60
+ if (!this.config.version || !this.config.projects || !this.config.settings) {
61
+ throw new Error('Invalid config structure');
62
+ }
63
+ }
64
+ catch (parseError) {
65
+ // Config is corrupted, backup and create fresh
66
+ const backupPath = `${this.configPath}.backup.${Date.now()}`;
67
+ fs.copyFileSync(this.configPath, backupPath);
68
+ console.warn(`Corrupted config backed up to: ${backupPath}`);
69
+ this.config = getDefaultConfig();
70
+ await this.save();
71
+ }
72
+ }
73
+ else {
74
+ // Create default config
75
+ await this.save();
76
+ }
77
+ return Ok(undefined);
78
+ }
79
+ catch (error) {
80
+ if (error.code === 'EACCES') {
81
+ return Err({
82
+ type: 'PERMISSION_DENIED',
83
+ path: this.configPath,
84
+ });
85
+ }
86
+ return Err({
87
+ type: 'UNKNOWN',
88
+ message: error.message,
89
+ });
90
+ }
91
+ }
92
+ /**
93
+ * Save configuration to disk atomically (write to temp file, then rename)
94
+ */
95
+ async save() {
96
+ try {
97
+ const tempPath = `${this.configPath}.tmp`;
98
+ const data = JSON.stringify(this.config, null, 2);
99
+ // Write to temp file
100
+ fs.writeFileSync(tempPath, data, 'utf-8');
101
+ // Atomic rename
102
+ fs.renameSync(tempPath, this.configPath);
103
+ return Ok(undefined);
104
+ }
105
+ catch (error) {
106
+ if (error.code === 'EACCES') {
107
+ return Err({
108
+ type: 'PERMISSION_DENIED',
109
+ path: this.configPath,
110
+ });
111
+ }
112
+ return Err({
113
+ type: 'UNKNOWN',
114
+ message: error.message,
115
+ });
116
+ }
117
+ }
118
+ /**
119
+ * Generate a deterministic, human-readable project ID from path
120
+ * Format: <repo-name>-<8-char-hash>
121
+ * Example: sudocode-a1b2c3d4
122
+ */
123
+ generateProjectId(projectPath) {
124
+ // Extract repo name from path
125
+ const repoName = path.basename(projectPath);
126
+ // Create URL-safe version of repo name
127
+ const safeName = repoName
128
+ .toLowerCase()
129
+ .replace(/[^a-z0-9-]/g, '-')
130
+ .replace(/-+/g, '-')
131
+ .replace(/^-|-$/g, '') // Remove leading/trailing dashes
132
+ .slice(0, 32);
133
+ // Generate short hash for uniqueness
134
+ const hash = crypto
135
+ .createHash('sha256')
136
+ .update(projectPath)
137
+ .digest('hex')
138
+ .slice(0, 8);
139
+ return `${safeName}-${hash}`;
140
+ }
141
+ /**
142
+ * Register a new project or update existing one
143
+ * @param projectPath - Absolute path to project root directory
144
+ * @returns ProjectInfo for the registered project
145
+ */
146
+ registerProject(projectPath) {
147
+ const projectId = this.generateProjectId(projectPath);
148
+ const sudocodeDir = path.join(projectPath, '.sudocode');
149
+ const now = new Date().toISOString();
150
+ // Check if project already exists
151
+ const existing = this.config.projects[projectId];
152
+ if (existing) {
153
+ // Update existing project
154
+ existing.lastOpenedAt = now;
155
+ this.addToRecent(projectId);
156
+ return existing;
157
+ }
158
+ // Create new project info
159
+ const projectInfo = {
160
+ id: projectId,
161
+ name: path.basename(projectPath),
162
+ path: projectPath,
163
+ sudocodeDir,
164
+ registeredAt: now,
165
+ lastOpenedAt: now,
166
+ favorite: false,
167
+ };
168
+ this.config.projects[projectId] = projectInfo;
169
+ this.addToRecent(projectId);
170
+ return projectInfo;
171
+ }
172
+ /**
173
+ * Unregister a project (remove from registry)
174
+ * @param projectId - Project ID to remove
175
+ * @returns true if project was removed, false if not found
176
+ */
177
+ unregisterProject(projectId) {
178
+ if (!this.config.projects[projectId]) {
179
+ return false;
180
+ }
181
+ delete this.config.projects[projectId];
182
+ // Remove from recent projects
183
+ this.config.recentProjects = this.config.recentProjects.filter((id) => id !== projectId);
184
+ return true;
185
+ }
186
+ /**
187
+ * Get project info by ID
188
+ */
189
+ getProject(projectId) {
190
+ return this.config.projects[projectId] || null;
191
+ }
192
+ /**
193
+ * Get all registered projects
194
+ */
195
+ getAllProjects() {
196
+ return Object.values(this.config.projects);
197
+ }
198
+ /**
199
+ * Update the lastOpenedAt timestamp for a project
200
+ */
201
+ updateLastOpened(projectId) {
202
+ const project = this.config.projects[projectId];
203
+ if (project) {
204
+ project.lastOpenedAt = new Date().toISOString();
205
+ }
206
+ }
207
+ /**
208
+ * Add a project to the recent projects list
209
+ * Maintains the list at maxRecentProjects size with most recent first
210
+ */
211
+ addToRecent(projectId) {
212
+ // Remove if already in list
213
+ this.config.recentProjects = this.config.recentProjects.filter((id) => id !== projectId);
214
+ // Add to front
215
+ this.config.recentProjects.unshift(projectId);
216
+ // Trim to max size
217
+ const maxRecent = this.config.settings.maxRecentProjects;
218
+ if (this.config.recentProjects.length > maxRecent) {
219
+ this.config.recentProjects = this.config.recentProjects.slice(0, maxRecent);
220
+ }
221
+ }
222
+ /**
223
+ * Get recent projects (ordered by most recent first)
224
+ */
225
+ getRecentProjects() {
226
+ return this.config.recentProjects
227
+ .map((id) => this.config.projects[id])
228
+ .filter((p) => p !== undefined);
229
+ }
230
+ /**
231
+ * Update project metadata
232
+ * @param projectId - Project ID to update
233
+ * @param updates - Partial project info to update
234
+ * @returns true if project was updated, false if not found
235
+ */
236
+ updateProject(projectId, updates) {
237
+ const project = this.config.projects[projectId];
238
+ if (!project) {
239
+ return false;
240
+ }
241
+ // Only allow updating name and favorite fields
242
+ if (updates.name !== undefined) {
243
+ project.name = updates.name;
244
+ }
245
+ if (updates.favorite !== undefined) {
246
+ project.favorite = updates.favorite;
247
+ }
248
+ return true;
249
+ }
250
+ /**
251
+ * Toggle favorite status for a project
252
+ */
253
+ toggleFavorite(projectId) {
254
+ const project = this.config.projects[projectId];
255
+ if (!project) {
256
+ return false;
257
+ }
258
+ project.favorite = !project.favorite;
259
+ return true;
260
+ }
261
+ /**
262
+ * Get all favorite projects
263
+ */
264
+ getFavoriteProjects() {
265
+ return Object.values(this.config.projects).filter((p) => p.favorite);
266
+ }
267
+ /**
268
+ * Update user settings
269
+ */
270
+ updateSettings(settings) {
271
+ this.config.settings = {
272
+ ...this.config.settings,
273
+ ...settings,
274
+ };
275
+ }
276
+ /**
277
+ * Get current settings
278
+ */
279
+ getSettings() {
280
+ return { ...this.config.settings };
281
+ }
282
+ /**
283
+ * Get the config file path
284
+ */
285
+ getConfigPath() {
286
+ return this.configPath;
287
+ }
288
+ }
289
+ //# sourceMappingURL=project-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry.js","sourceRoot":"","sources":["../../src/services/project-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
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 type Database from "better-sqlite3";
10
+ /**
11
+ * Reference types found in prompts
12
+ */
13
+ export type ReferenceType = "spec" | "issue" | "file";
14
+ /**
15
+ * A reference found in a prompt
16
+ */
17
+ export interface PromptReference {
18
+ type: ReferenceType;
19
+ id: string;
20
+ found: boolean;
21
+ error?: string;
22
+ }
23
+ /**
24
+ * Result of prompt resolution
25
+ */
26
+ export interface PromptResolutionResult {
27
+ resolvedPrompt: string;
28
+ references: PromptReference[];
29
+ errors: string[];
30
+ /** IDs of entities that were expanded (for tracking in follow-ups) */
31
+ expandedEntityIds: string[];
32
+ }
33
+ /**
34
+ * PromptResolver service
35
+ *
36
+ * Extracts and resolves entity references in agent prompts
37
+ */
38
+ export declare class PromptResolver {
39
+ private db;
40
+ constructor(db: Database.Database);
41
+ /**
42
+ * Resolve all references in a prompt
43
+ *
44
+ * @param prompt - The raw prompt with [[entity-id]], @entity-id, and @file references
45
+ * @param alreadyExpandedIds - Optional set of entity IDs that were already expanded in parent executions
46
+ * @param implicitIssueId - Optional issue ID to automatically include even if not mentioned in prompt (for issue-based executions)
47
+ * @returns Resolution result with resolved prompt, references, and errors
48
+ */
49
+ resolve(prompt: string, alreadyExpandedIds?: Set<string>, implicitIssueId?: string): Promise<PromptResolutionResult>;
50
+ /**
51
+ * Extract spec references from prompt
52
+ * Supports two patterns:
53
+ * - [[s-xxxxx]] (bracket syntax)
54
+ * - @s-xxxxx (@ mention syntax)
55
+ */
56
+ private extractSpecReferences;
57
+ /**
58
+ * Extract issue references from prompt
59
+ * Supports two patterns:
60
+ * - [[i-xxxxx]] (bracket syntax)
61
+ * - @i-xxxxx (@ mention syntax)
62
+ */
63
+ private extractIssueReferences;
64
+ /**
65
+ * Extract file mentions from prompt
66
+ * Pattern: @filepath (but not @s-xxxxx or @i-xxxxx)
67
+ *
68
+ * Note: File mentions are tracked but not resolved (agent handles them)
69
+ */
70
+ private extractFileMentions;
71
+ /**
72
+ * Replace a reference with formatted content
73
+ * Handles both [[id]] and @id syntaxes
74
+ */
75
+ private replaceReference;
76
+ /**
77
+ * Format spec - returns all information shown in CLI show command
78
+ */
79
+ private formatSpec;
80
+ /**
81
+ * Format issue - returns all information shown in CLI show command
82
+ */
83
+ private formatIssue;
84
+ /**
85
+ * Get tags for an entity
86
+ */
87
+ private getTags;
88
+ /**
89
+ * Get outgoing relationships for an entity
90
+ */
91
+ private getOutgoingRelationships;
92
+ /**
93
+ * Get incoming relationships for an entity
94
+ */
95
+ private getIncomingRelationships;
96
+ }
97
+ //# sourceMappingURL=prompt-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-resolver.d.ts","sourceRoot":"","sources":["../../src/services/prompt-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAK3C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACb,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAEzC;;;;;;;OAOG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,kBAAkB,GAAE,GAAG,CAAC,MAAM,CAAa,EAC3C,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,sBAAsB,CAAC;IAyHlC;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAkC9B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAgC3B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAqDlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAyDnB;;OAEG;IACH,OAAO,CAAC,OAAO;IAQf;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAoBhC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAmBjC"}