@sudocode-ai/local-server 0.1.0 → 0.1.2

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 (117) hide show
  1. package/dist/cli.js +6 -104
  2. package/dist/cli.js.map +1 -7
  3. package/dist/execution/engine/engine.js +10 -0
  4. package/dist/execution/engine/engine.js.map +1 -0
  5. package/dist/execution/engine/simple-engine.js +611 -0
  6. package/dist/execution/engine/simple-engine.js.map +1 -0
  7. package/dist/execution/engine/types.js +10 -0
  8. package/dist/execution/engine/types.js.map +1 -0
  9. package/dist/execution/output/ag-ui-adapter.js +438 -0
  10. package/dist/execution/output/ag-ui-adapter.js.map +1 -0
  11. package/dist/execution/output/ag-ui-integration.js +96 -0
  12. package/dist/execution/output/ag-ui-integration.js.map +1 -0
  13. package/dist/execution/output/claude-code-output-processor.js +769 -0
  14. package/dist/execution/output/claude-code-output-processor.js.map +1 -0
  15. package/dist/execution/output/index.js +15 -0
  16. package/dist/execution/output/index.js.map +1 -0
  17. package/dist/execution/output/types.js +22 -0
  18. package/dist/execution/output/types.js.map +1 -0
  19. package/dist/execution/process/builders/claude.js +59 -0
  20. package/dist/execution/process/builders/claude.js.map +1 -0
  21. package/dist/execution/process/index.js +15 -0
  22. package/dist/execution/process/index.js.map +1 -0
  23. package/dist/execution/process/manager.js +10 -0
  24. package/dist/execution/process/manager.js.map +1 -0
  25. package/dist/execution/process/simple-manager.js +336 -0
  26. package/dist/execution/process/simple-manager.js.map +1 -0
  27. package/dist/execution/process/types.js +10 -0
  28. package/dist/execution/process/types.js.map +1 -0
  29. package/dist/execution/process/utils.js +97 -0
  30. package/dist/execution/process/utils.js.map +1 -0
  31. package/dist/execution/resilience/circuit-breaker.js +291 -0
  32. package/dist/execution/resilience/circuit-breaker.js.map +1 -0
  33. package/dist/execution/resilience/executor.js +10 -0
  34. package/dist/execution/resilience/executor.js.map +1 -0
  35. package/dist/execution/resilience/index.js +15 -0
  36. package/dist/execution/resilience/index.js.map +1 -0
  37. package/dist/execution/resilience/resilient-executor.js +261 -0
  38. package/dist/execution/resilience/resilient-executor.js.map +1 -0
  39. package/dist/execution/resilience/retry.js +234 -0
  40. package/dist/execution/resilience/retry.js.map +1 -0
  41. package/dist/execution/resilience/types.js +30 -0
  42. package/dist/execution/resilience/types.js.map +1 -0
  43. package/dist/execution/transport/event-buffer.js +208 -0
  44. package/dist/execution/transport/event-buffer.js.map +1 -0
  45. package/dist/execution/transport/index.js +10 -0
  46. package/dist/execution/transport/index.js.map +1 -0
  47. package/dist/execution/transport/sse-transport.js +282 -0
  48. package/dist/execution/transport/sse-transport.js.map +1 -0
  49. package/dist/execution/transport/transport-manager.js +231 -0
  50. package/dist/execution/transport/transport-manager.js.map +1 -0
  51. package/dist/execution/workflow/index.js +13 -0
  52. package/dist/execution/workflow/index.js.map +1 -0
  53. package/dist/execution/workflow/linear-orchestrator.js +683 -0
  54. package/dist/execution/workflow/linear-orchestrator.js.map +1 -0
  55. package/dist/execution/workflow/memory-storage.js +68 -0
  56. package/dist/execution/workflow/memory-storage.js.map +1 -0
  57. package/dist/execution/workflow/orchestrator.js +9 -0
  58. package/dist/execution/workflow/orchestrator.js.map +1 -0
  59. package/dist/execution/workflow/types.js +9 -0
  60. package/dist/execution/workflow/types.js.map +1 -0
  61. package/dist/execution/workflow/utils.js +152 -0
  62. package/dist/execution/workflow/utils.js.map +1 -0
  63. package/dist/execution/worktree/config.js +280 -0
  64. package/dist/execution/worktree/config.js.map +1 -0
  65. package/dist/execution/worktree/git-cli.js +189 -0
  66. package/dist/execution/worktree/git-cli.js.map +1 -0
  67. package/dist/execution/worktree/index.js +15 -0
  68. package/dist/execution/worktree/index.js.map +1 -0
  69. package/dist/execution/worktree/manager.js +452 -0
  70. package/dist/execution/worktree/manager.js.map +1 -0
  71. package/dist/execution/worktree/types.js +42 -0
  72. package/dist/execution/worktree/types.js.map +1 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +357 -104
  75. package/dist/index.js.map +1 -7
  76. package/dist/routes/executions-stream.js +55 -0
  77. package/dist/routes/executions-stream.js.map +1 -0
  78. package/dist/routes/executions.js +267 -0
  79. package/dist/routes/executions.js.map +1 -0
  80. package/dist/routes/feedback.js +329 -0
  81. package/dist/routes/feedback.js.map +1 -0
  82. package/dist/routes/issues.js +280 -0
  83. package/dist/routes/issues.js.map +1 -0
  84. package/dist/routes/relationships.js +308 -0
  85. package/dist/routes/relationships.js.map +1 -0
  86. package/dist/routes/specs.js +270 -0
  87. package/dist/routes/specs.js.map +1 -0
  88. package/dist/services/db.js +85 -0
  89. package/dist/services/db.js.map +1 -0
  90. package/dist/services/execution-lifecycle.d.ts.map +1 -1
  91. package/dist/services/execution-lifecycle.js +291 -0
  92. package/dist/services/execution-lifecycle.js.map +1 -0
  93. package/dist/services/execution-service.js +676 -0
  94. package/dist/services/execution-service.js.map +1 -0
  95. package/dist/services/executions.js +164 -0
  96. package/dist/services/executions.js.map +1 -0
  97. package/dist/services/export.js +106 -0
  98. package/dist/services/export.js.map +1 -0
  99. package/dist/services/feedback.js +54 -0
  100. package/dist/services/feedback.js.map +1 -0
  101. package/dist/services/issues.js +35 -0
  102. package/dist/services/issues.js.map +1 -0
  103. package/dist/services/prompt-template-engine.js +212 -0
  104. package/dist/services/prompt-template-engine.js.map +1 -0
  105. package/dist/services/prompt-templates.js +236 -0
  106. package/dist/services/prompt-templates.js.map +1 -0
  107. package/dist/services/relationships.js +42 -0
  108. package/dist/services/relationships.js.map +1 -0
  109. package/dist/services/specs.js +35 -0
  110. package/dist/services/specs.js.map +1 -0
  111. package/dist/services/watcher.js +69 -0
  112. package/dist/services/watcher.js.map +1 -0
  113. package/dist/services/websocket.js +389 -0
  114. package/dist/services/websocket.js.map +1 -0
  115. package/dist/utils/sudocode-dir.js +9 -0
  116. package/dist/utils/sudocode-dir.js.map +1 -0
  117. package/package.json +4 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/routes/feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Issues API routes (mapped to /api/issues)
3
+ */
4
+ import { Router } from "express";
5
+ import { getAllIssues, getIssueById, createNewIssue, updateExistingIssue, deleteExistingIssue, } from "../services/issues.js";
6
+ import { generateIssueId } from "@sudocode-ai/cli/dist/id-generator.js";
7
+ import { broadcastIssueUpdate } from "../services/websocket.js";
8
+ import { getSudocodeDir } from "../utils/sudocode-dir.js";
9
+ import { triggerExport, syncEntityToMarkdown } from "../services/export.js";
10
+ export function createIssuesRouter(db) {
11
+ const router = Router();
12
+ /**
13
+ * GET /api/issues - List all issues
14
+ */
15
+ router.get("/", (req, res) => {
16
+ try {
17
+ // Parse query parameters for filtering
18
+ const options = {};
19
+ if (req.query.status) {
20
+ options.status = req.query.status;
21
+ }
22
+ if (req.query.priority) {
23
+ options.priority = parseInt(req.query.priority, 10);
24
+ }
25
+ if (req.query.assignee) {
26
+ options.assignee = req.query.assignee;
27
+ }
28
+ // Default to excluding archived unless explicitly specified
29
+ options.archived =
30
+ req.query.archived !== undefined
31
+ ? req.query.archived === "true"
32
+ : false;
33
+ if (req.query.limit) {
34
+ options.limit = parseInt(req.query.limit, 10);
35
+ }
36
+ if (req.query.offset) {
37
+ options.offset = parseInt(req.query.offset, 10);
38
+ }
39
+ const issues = getAllIssues(db, options);
40
+ res.json({
41
+ success: true,
42
+ data: issues,
43
+ });
44
+ }
45
+ catch (error) {
46
+ console.error("Error listing issues:", error);
47
+ res.status(500).json({
48
+ success: false,
49
+ data: null,
50
+ error_data: error instanceof Error ? error.message : String(error),
51
+ message: "Failed to list issues",
52
+ });
53
+ }
54
+ });
55
+ /**
56
+ * GET /api/issues/:id - Get a specific issue
57
+ */
58
+ router.get("/:id", (req, res) => {
59
+ try {
60
+ const { id } = req.params;
61
+ const issue = getIssueById(db, id);
62
+ if (!issue) {
63
+ res.status(404).json({
64
+ success: false,
65
+ data: null,
66
+ message: `Issue not found: ${id}`,
67
+ });
68
+ return;
69
+ }
70
+ res.json({
71
+ success: true,
72
+ data: issue,
73
+ });
74
+ }
75
+ catch (error) {
76
+ console.error("Error getting issue:", error);
77
+ res.status(500).json({
78
+ success: false,
79
+ data: null,
80
+ error_data: error instanceof Error ? error.message : String(error),
81
+ message: "Failed to get issue",
82
+ });
83
+ }
84
+ });
85
+ /**
86
+ * POST /api/issues - Create a new issue
87
+ */
88
+ router.post("/", (req, res) => {
89
+ try {
90
+ const { title, content, status, priority, assignee, parent_id } = req.body;
91
+ // Validate required fields
92
+ if (!title || typeof title !== "string") {
93
+ res.status(400).json({
94
+ success: false,
95
+ data: null,
96
+ message: "Title is required and must be a string",
97
+ });
98
+ return;
99
+ }
100
+ if (title.length > 500) {
101
+ res.status(400).json({
102
+ success: false,
103
+ data: null,
104
+ message: "Title must be 500 characters or less",
105
+ });
106
+ return;
107
+ }
108
+ // Generate new issue ID
109
+ const outputDir = getSudocodeDir();
110
+ const id = generateIssueId(db, outputDir);
111
+ // Create issue using CLI operation
112
+ const issue = createNewIssue(db, {
113
+ id,
114
+ title,
115
+ content: content || "",
116
+ status: status || "open",
117
+ priority: priority !== undefined ? priority : 2,
118
+ assignee: assignee || undefined,
119
+ parent_id: parent_id || undefined,
120
+ });
121
+ // Trigger export to JSONL files
122
+ triggerExport(db);
123
+ // Sync this specific issue to its markdown file (don't wait for it)
124
+ syncEntityToMarkdown(db, issue.id, "issue").catch((error) => {
125
+ console.error(`Failed to sync issue ${issue.id} to markdown:`, error);
126
+ });
127
+ // Broadcast issue creation to WebSocket clients
128
+ broadcastIssueUpdate(issue.id, "created", issue);
129
+ res.status(201).json({
130
+ success: true,
131
+ data: issue,
132
+ });
133
+ }
134
+ catch (error) {
135
+ console.error("Error creating issue:", error);
136
+ res.status(500).json({
137
+ success: false,
138
+ data: null,
139
+ error_data: error instanceof Error ? error.message : String(error),
140
+ message: "Failed to create issue",
141
+ });
142
+ }
143
+ });
144
+ /**
145
+ * PUT /api/issues/:id - Update an existing issue
146
+ */
147
+ router.put("/:id", (req, res) => {
148
+ try {
149
+ const { id } = req.params;
150
+ const { title, content, status, priority, assignee, parent_id, archived, } = req.body;
151
+ // Validate that at least one field is provided
152
+ if (title === undefined &&
153
+ content === undefined &&
154
+ status === undefined &&
155
+ priority === undefined &&
156
+ assignee === undefined &&
157
+ parent_id === undefined &&
158
+ archived === undefined) {
159
+ res.status(400).json({
160
+ success: false,
161
+ data: null,
162
+ message: "At least one field must be provided for update",
163
+ });
164
+ return;
165
+ }
166
+ // Validate title length if provided
167
+ if (title !== undefined &&
168
+ typeof title === "string" &&
169
+ title.length > 500) {
170
+ res.status(400).json({
171
+ success: false,
172
+ data: null,
173
+ message: "Title must be 500 characters or less",
174
+ });
175
+ return;
176
+ }
177
+ // Build update input
178
+ const updateInput = {};
179
+ if (title !== undefined)
180
+ updateInput.title = title;
181
+ if (content !== undefined)
182
+ updateInput.content = content;
183
+ if (status !== undefined)
184
+ updateInput.status = status;
185
+ if (priority !== undefined)
186
+ updateInput.priority = priority;
187
+ if (assignee !== undefined)
188
+ updateInput.assignee = assignee;
189
+ if (parent_id !== undefined)
190
+ updateInput.parent_id = parent_id;
191
+ if (archived !== undefined) {
192
+ updateInput.archived = archived;
193
+ updateInput.archived_at = archived ? new Date().toISOString() : null;
194
+ }
195
+ // Update issue using CLI operation
196
+ const issue = updateExistingIssue(db, id, updateInput);
197
+ // Trigger export to JSONL files
198
+ triggerExport(db);
199
+ // Sync this specific issue to its markdown file (don't wait for it)
200
+ syncEntityToMarkdown(db, issue.id, "issue").catch((error) => {
201
+ console.error(`Failed to sync issue ${issue.id} to markdown:`, error);
202
+ });
203
+ // Broadcast issue update to WebSocket clients
204
+ broadcastIssueUpdate(issue.id, "updated", issue);
205
+ res.json({
206
+ success: true,
207
+ data: issue,
208
+ });
209
+ }
210
+ catch (error) {
211
+ console.error("Error updating issue:", error);
212
+ // Handle "not found" errors
213
+ if (error instanceof Error && error.message.includes("not found")) {
214
+ res.status(404).json({
215
+ success: false,
216
+ data: null,
217
+ message: error.message,
218
+ });
219
+ return;
220
+ }
221
+ res.status(500).json({
222
+ success: false,
223
+ data: null,
224
+ error_data: error instanceof Error ? error.message : String(error),
225
+ message: "Failed to update issue",
226
+ });
227
+ }
228
+ });
229
+ /**
230
+ * DELETE /api/issues/:id - Delete an issue
231
+ */
232
+ router.delete("/:id", (req, res) => {
233
+ try {
234
+ const { id } = req.params;
235
+ // Check if issue exists first
236
+ const existingIssue = getIssueById(db, id);
237
+ if (!existingIssue) {
238
+ res.status(404).json({
239
+ success: false,
240
+ data: null,
241
+ message: `Issue not found: ${id}`,
242
+ });
243
+ return;
244
+ }
245
+ // Delete issue using CLI operation
246
+ const deleted = deleteExistingIssue(db, id);
247
+ if (deleted) {
248
+ // Trigger export to JSONL files
249
+ triggerExport(db);
250
+ // Broadcast issue deletion to WebSocket clients
251
+ broadcastIssueUpdate(id, "deleted", { id });
252
+ res.json({
253
+ success: true,
254
+ data: {
255
+ id,
256
+ deleted: true,
257
+ },
258
+ });
259
+ }
260
+ else {
261
+ res.status(500).json({
262
+ success: false,
263
+ data: null,
264
+ message: "Failed to delete issue",
265
+ });
266
+ }
267
+ }
268
+ catch (error) {
269
+ console.error("Error deleting issue:", error);
270
+ res.status(500).json({
271
+ success: false,
272
+ data: null,
273
+ error_data: error instanceof Error ? error.message : String(error),
274
+ message: "Failed to delete issue",
275
+ });
276
+ }
277
+ });
278
+ return router;
279
+ }
280
+ //# sourceMappingURL=issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issues.js","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ /**
2
+ * Relationships API routes (mapped to /api/relationships)
3
+ */
4
+ import { Router } from "express";
5
+ import { createRelationship, deleteRelationship, getEntityRelationships, getEntityOutgoingRelationships, getEntityIncomingRelationships, } from "../services/relationships.js";
6
+ import { broadcastRelationshipUpdate } from "../services/websocket.js";
7
+ import { triggerExport } from "../services/export.js";
8
+ export function createRelationshipsRouter(db) {
9
+ const router = Router();
10
+ /**
11
+ * GET /api/relationships/:entity_type/:entity_id - Get all relationships for an entity
12
+ */
13
+ router.get("/:entity_type/:entity_id", (req, res) => {
14
+ try {
15
+ const { entity_type, entity_id } = req.params;
16
+ // Validate entity_type
17
+ if (entity_type !== "spec" && entity_type !== "issue") {
18
+ res.status(400).json({
19
+ success: false,
20
+ data: null,
21
+ message: "Invalid entity_type. Must be 'spec' or 'issue'",
22
+ });
23
+ return;
24
+ }
25
+ const relationships = getEntityRelationships(db, entity_id, entity_type);
26
+ res.json({
27
+ success: true,
28
+ data: relationships,
29
+ });
30
+ }
31
+ catch (error) {
32
+ console.error("Error getting relationships:", error);
33
+ res.status(500).json({
34
+ success: false,
35
+ data: null,
36
+ error_data: error instanceof Error ? error.message : String(error),
37
+ message: "Failed to get relationships",
38
+ });
39
+ }
40
+ });
41
+ /**
42
+ * GET /api/relationships/:entity_type/:entity_id/outgoing - Get outgoing relationships
43
+ */
44
+ router.get("/:entity_type/:entity_id/outgoing", (req, res) => {
45
+ try {
46
+ const { entity_type, entity_id } = req.params;
47
+ const { relationship_type } = req.query;
48
+ // Validate entity_type
49
+ if (entity_type !== "spec" && entity_type !== "issue") {
50
+ res.status(400).json({
51
+ success: false,
52
+ data: null,
53
+ message: "Invalid entity_type. Must be 'spec' or 'issue'",
54
+ });
55
+ return;
56
+ }
57
+ const relationships = getEntityOutgoingRelationships(db, entity_id, entity_type, relationship_type);
58
+ res.json({
59
+ success: true,
60
+ data: relationships,
61
+ });
62
+ }
63
+ catch (error) {
64
+ console.error("Error getting outgoing relationships:", error);
65
+ res.status(500).json({
66
+ success: false,
67
+ data: null,
68
+ error_data: error instanceof Error ? error.message : String(error),
69
+ message: "Failed to get outgoing relationships",
70
+ });
71
+ }
72
+ });
73
+ /**
74
+ * GET /api/relationships/:entity_type/:entity_id/incoming - Get incoming relationships
75
+ */
76
+ router.get("/:entity_type/:entity_id/incoming", (req, res) => {
77
+ try {
78
+ const { entity_type, entity_id } = req.params;
79
+ const { relationship_type } = req.query;
80
+ // Validate entity_type
81
+ if (entity_type !== "spec" && entity_type !== "issue") {
82
+ res.status(400).json({
83
+ success: false,
84
+ data: null,
85
+ message: "Invalid entity_type. Must be 'spec' or 'issue'",
86
+ });
87
+ return;
88
+ }
89
+ const relationships = getEntityIncomingRelationships(db, entity_id, entity_type, relationship_type);
90
+ res.json({
91
+ success: true,
92
+ data: relationships,
93
+ });
94
+ }
95
+ catch (error) {
96
+ console.error("Error getting incoming relationships:", error);
97
+ res.status(500).json({
98
+ success: false,
99
+ data: null,
100
+ error_data: error instanceof Error ? error.message : String(error),
101
+ message: "Failed to get incoming relationships",
102
+ });
103
+ }
104
+ });
105
+ /**
106
+ * POST /api/relationships - Create a new relationship
107
+ */
108
+ router.post("/", (req, res) => {
109
+ try {
110
+ const { from_id, from_type, to_id, to_type, relationship_type, metadata, } = req.body;
111
+ // Validate required fields
112
+ if (!from_id || typeof from_id !== "string") {
113
+ res.status(400).json({
114
+ success: false,
115
+ data: null,
116
+ message: "from_id is required and must be a string",
117
+ });
118
+ return;
119
+ }
120
+ if (!from_type || (from_type !== "spec" && from_type !== "issue")) {
121
+ res.status(400).json({
122
+ success: false,
123
+ data: null,
124
+ message: "from_type is required and must be 'spec' or 'issue'",
125
+ });
126
+ return;
127
+ }
128
+ if (!to_id || typeof to_id !== "string") {
129
+ res.status(400).json({
130
+ success: false,
131
+ data: null,
132
+ message: "to_id is required and must be a string",
133
+ });
134
+ return;
135
+ }
136
+ if (!to_type || (to_type !== "spec" && to_type !== "issue")) {
137
+ res.status(400).json({
138
+ success: false,
139
+ data: null,
140
+ message: "to_type is required and must be 'spec' or 'issue'",
141
+ });
142
+ return;
143
+ }
144
+ if (!relationship_type || typeof relationship_type !== "string") {
145
+ res.status(400).json({
146
+ success: false,
147
+ data: null,
148
+ message: "relationship_type is required and must be a string",
149
+ });
150
+ return;
151
+ }
152
+ // Validate relationship_type
153
+ const validTypes = [
154
+ "blocks",
155
+ "related",
156
+ "discovered-from",
157
+ "implements",
158
+ "references",
159
+ "depends-on",
160
+ ];
161
+ if (!validTypes.includes(relationship_type)) {
162
+ res.status(400).json({
163
+ success: false,
164
+ data: null,
165
+ message: `Invalid relationship_type. Must be one of: ${validTypes.join(", ")}`,
166
+ });
167
+ return;
168
+ }
169
+ // Create relationship using CLI operation
170
+ const relationship = createRelationship(db, {
171
+ from_id,
172
+ from_type: from_type,
173
+ to_id,
174
+ to_type: to_type,
175
+ relationship_type: relationship_type,
176
+ metadata: metadata || null,
177
+ });
178
+ // Broadcast relationship creation to WebSocket clients
179
+ broadcastRelationshipUpdate("created", relationship);
180
+ // Trigger export to sync JSONL files
181
+ triggerExport(db);
182
+ res.status(201).json({
183
+ success: true,
184
+ data: relationship,
185
+ });
186
+ }
187
+ catch (error) {
188
+ console.error("Error creating relationship:", error);
189
+ // Handle specific errors
190
+ if (error instanceof Error) {
191
+ if (error.message.includes("not found")) {
192
+ res.status(404).json({
193
+ success: false,
194
+ data: null,
195
+ message: error.message,
196
+ });
197
+ return;
198
+ }
199
+ if (error.message.includes("already exists")) {
200
+ res.status(409).json({
201
+ success: false,
202
+ data: null,
203
+ message: error.message,
204
+ });
205
+ return;
206
+ }
207
+ }
208
+ res.status(500).json({
209
+ success: false,
210
+ data: null,
211
+ error_data: error instanceof Error ? error.message : String(error),
212
+ message: "Failed to create relationship",
213
+ });
214
+ }
215
+ });
216
+ /**
217
+ * DELETE /api/relationships - Delete a specific relationship
218
+ */
219
+ router.delete("/", (req, res) => {
220
+ try {
221
+ const { from_id, from_type, to_id, to_type, relationship_type } = req.body;
222
+ // Validate required fields
223
+ if (!from_id || typeof from_id !== "string") {
224
+ res.status(400).json({
225
+ success: false,
226
+ data: null,
227
+ message: "from_id is required and must be a string",
228
+ });
229
+ return;
230
+ }
231
+ if (!from_type || (from_type !== "spec" && from_type !== "issue")) {
232
+ res.status(400).json({
233
+ success: false,
234
+ data: null,
235
+ message: "from_type is required and must be 'spec' or 'issue'",
236
+ });
237
+ return;
238
+ }
239
+ if (!to_id || typeof to_id !== "string") {
240
+ res.status(400).json({
241
+ success: false,
242
+ data: null,
243
+ message: "to_id is required and must be a string",
244
+ });
245
+ return;
246
+ }
247
+ if (!to_type || (to_type !== "spec" && to_type !== "issue")) {
248
+ res.status(400).json({
249
+ success: false,
250
+ data: null,
251
+ message: "to_type is required and must be 'spec' or 'issue'",
252
+ });
253
+ return;
254
+ }
255
+ if (!relationship_type || typeof relationship_type !== "string") {
256
+ res.status(400).json({
257
+ success: false,
258
+ data: null,
259
+ message: "relationship_type is required and must be a string",
260
+ });
261
+ return;
262
+ }
263
+ // Delete relationship using CLI operation
264
+ const deleted = deleteRelationship(db, from_id, from_type, to_id, to_type, relationship_type);
265
+ if (deleted) {
266
+ // Broadcast relationship deletion to WebSocket clients
267
+ broadcastRelationshipUpdate("deleted", {
268
+ from_id,
269
+ from_type,
270
+ to_id,
271
+ to_type,
272
+ relationship_type,
273
+ });
274
+ // Trigger export to sync JSONL files
275
+ triggerExport(db);
276
+ res.json({
277
+ success: true,
278
+ data: {
279
+ from_id,
280
+ from_type,
281
+ to_id,
282
+ to_type,
283
+ relationship_type,
284
+ deleted: true,
285
+ },
286
+ });
287
+ }
288
+ else {
289
+ res.status(404).json({
290
+ success: false,
291
+ data: null,
292
+ message: "Relationship not found",
293
+ });
294
+ }
295
+ }
296
+ catch (error) {
297
+ console.error("Error deleting relationship:", error);
298
+ res.status(500).json({
299
+ success: false,
300
+ data: null,
301
+ error_data: error instanceof Error ? error.message : String(error),
302
+ message: "Failed to delete relationship",
303
+ });
304
+ }
305
+ });
306
+ return router;
307
+ }
308
+ //# sourceMappingURL=relationships.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationships.js","sourceRoot":"","sources":["../../src/routes/relationships.ts"],"names":[],"mappings":"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"}