codekin 0.6.2 → 0.6.4

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 (103) hide show
  1. package/README.md +3 -2
  2. package/dist/assets/index-BRB_Ksyk.js +182 -0
  3. package/dist/assets/index-Q2WSVlHo.css +1 -0
  4. package/dist/index.html +2 -2
  5. package/package.json +3 -3
  6. package/server/dist/auth-routes.js +6 -0
  7. package/server/dist/auth-routes.js.map +1 -1
  8. package/server/dist/claude-process.js +3 -2
  9. package/server/dist/claude-process.js.map +1 -1
  10. package/server/dist/commit-event-handler.d.ts +2 -1
  11. package/server/dist/commit-event-handler.js +4 -3
  12. package/server/dist/commit-event-handler.js.map +1 -1
  13. package/server/dist/commit-event-hooks.d.ts +11 -0
  14. package/server/dist/commit-event-hooks.js +61 -11
  15. package/server/dist/commit-event-hooks.js.map +1 -1
  16. package/server/dist/config.d.ts +7 -0
  17. package/server/dist/config.js +19 -1
  18. package/server/dist/config.js.map +1 -1
  19. package/server/dist/docs-routes.js +4 -7
  20. package/server/dist/docs-routes.js.map +1 -1
  21. package/server/dist/json-parse.d.ts +8 -0
  22. package/server/dist/json-parse.js +9 -0
  23. package/server/dist/json-parse.js.map +1 -0
  24. package/server/dist/opencode-process.d.ts +8 -0
  25. package/server/dist/opencode-process.js +63 -5
  26. package/server/dist/opencode-process.js.map +1 -1
  27. package/server/dist/orchestrator-learning-router.d.ts +8 -0
  28. package/server/dist/orchestrator-learning-router.js +126 -0
  29. package/server/dist/orchestrator-learning-router.js.map +1 -0
  30. package/server/dist/orchestrator-learning.d.ts +0 -5
  31. package/server/dist/orchestrator-learning.js +2 -9
  32. package/server/dist/orchestrator-learning.js.map +1 -1
  33. package/server/dist/orchestrator-memory-router.d.ts +10 -0
  34. package/server/dist/orchestrator-memory-router.js +148 -0
  35. package/server/dist/orchestrator-memory-router.js.map +1 -0
  36. package/server/dist/orchestrator-memory.js +2 -1
  37. package/server/dist/orchestrator-memory.js.map +1 -1
  38. package/server/dist/orchestrator-monitor.d.ts +6 -0
  39. package/server/dist/orchestrator-monitor.js +14 -0
  40. package/server/dist/orchestrator-monitor.js.map +1 -1
  41. package/server/dist/orchestrator-reports.d.ts +0 -4
  42. package/server/dist/orchestrator-reports.js +8 -10
  43. package/server/dist/orchestrator-reports.js.map +1 -1
  44. package/server/dist/orchestrator-routes.d.ts +2 -2
  45. package/server/dist/orchestrator-routes.js +11 -506
  46. package/server/dist/orchestrator-routes.js.map +1 -1
  47. package/server/dist/orchestrator-session-router.d.ts +13 -0
  48. package/server/dist/orchestrator-session-router.js +312 -0
  49. package/server/dist/orchestrator-session-router.js.map +1 -0
  50. package/server/dist/process-coordinator.d.ts +83 -0
  51. package/server/dist/process-coordinator.js +167 -0
  52. package/server/dist/process-coordinator.js.map +1 -0
  53. package/server/dist/prompt-router.js +2 -1
  54. package/server/dist/prompt-router.js.map +1 -1
  55. package/server/dist/session-archive.js +2 -1
  56. package/server/dist/session-archive.js.map +1 -1
  57. package/server/dist/session-lifecycle.js +21 -37
  58. package/server/dist/session-lifecycle.js.map +1 -1
  59. package/server/dist/session-manager.d.ts +4 -0
  60. package/server/dist/session-manager.js +64 -75
  61. package/server/dist/session-manager.js.map +1 -1
  62. package/server/dist/session-persistence.js +3 -1
  63. package/server/dist/session-persistence.js.map +1 -1
  64. package/server/dist/session-routes.d.ts +18 -0
  65. package/server/dist/session-routes.js +56 -11
  66. package/server/dist/session-routes.js.map +1 -1
  67. package/server/dist/stepflow-handler.js +5 -1
  68. package/server/dist/stepflow-handler.js.map +1 -1
  69. package/server/dist/stepflow-prompt.js +16 -12
  70. package/server/dist/stepflow-prompt.js.map +1 -1
  71. package/server/dist/tsconfig.tsbuildinfo +1 -1
  72. package/server/dist/types.d.ts +6 -0
  73. package/server/dist/types.js +1 -0
  74. package/server/dist/types.js.map +1 -1
  75. package/server/dist/upload-routes.d.ts +5 -0
  76. package/server/dist/upload-routes.js +48 -11
  77. package/server/dist/upload-routes.js.map +1 -1
  78. package/server/dist/version-check.js +3 -2
  79. package/server/dist/version-check.js.map +1 -1
  80. package/server/dist/webhook-rate-limiter.js +9 -1
  81. package/server/dist/webhook-rate-limiter.js.map +1 -1
  82. package/server/dist/webhook-workspace.d.ts +12 -0
  83. package/server/dist/webhook-workspace.js +126 -3
  84. package/server/dist/webhook-workspace.js.map +1 -1
  85. package/server/dist/workflow-engine.d.ts +80 -7
  86. package/server/dist/workflow-engine.js +209 -28
  87. package/server/dist/workflow-engine.js.map +1 -1
  88. package/server/dist/workflow-loader.d.ts +6 -1
  89. package/server/dist/workflow-loader.js +97 -27
  90. package/server/dist/workflow-loader.js.map +1 -1
  91. package/server/dist/workflow-routes.d.ts +13 -0
  92. package/server/dist/workflow-routes.js +106 -4
  93. package/server/dist/workflow-routes.js.map +1 -1
  94. package/server/dist/ws-origin-check.d.ts +11 -0
  95. package/server/dist/ws-origin-check.js +20 -0
  96. package/server/dist/ws-origin-check.js.map +1 -0
  97. package/server/dist/ws-rate-limit.d.ts +19 -0
  98. package/server/dist/ws-rate-limit.js +30 -0
  99. package/server/dist/ws-rate-limit.js.map +1 -0
  100. package/server/dist/ws-server.js +41 -22
  101. package/server/dist/ws-server.js.map +1 -1
  102. package/dist/assets/index-C8GlUCii.js +0 -182
  103. package/dist/assets/index-DgeUVGjz.css +0 -1
@@ -1,27 +1,23 @@
1
1
  /**
2
2
  * REST routes for the orchestrator session.
3
3
  *
4
- * Provides status, start, report scanning, child session management,
5
- * memory querying, and trust record endpoints.
4
+ * Thin wrapper that mounts focused sub-routers for session management,
5
+ * memory/trust, and learning endpoints.
6
6
  */
7
7
  import { Router } from 'express';
8
- import { resolve } from 'path';
9
- import { existsSync, statSync } from 'fs';
10
- import { ensureOrchestratorRunning, getOrchestratorSessionId, getOrCreateOrchestratorId } from './orchestrator-manager.js';
11
- import { getAgentDisplayName, REPOS_ROOT } from './config.js';
12
- import { scanRepoReports, readReport, getReportsSince } from './orchestrator-reports.js';
8
+ import { getOrCreateOrchestratorId } from './orchestrator-manager.js';
13
9
  import { OrchestratorMemory } from './orchestrator-memory.js';
14
10
  import { OrchestratorChildManager } from './orchestrator-children.js';
15
- import { extractMemoryCandidates, smartUpsert, runAgingCycle, recordFindingOutcome, getTriageRecommendation, loadSkillProfile, updateSkillLevel, getGuidanceStyle, recordDecision, assessDecisionOutcome, getPendingOutcomeAssessments, } from './orchestrator-learning.js';
11
+ import { createSessionRouter } from './orchestrator-session-router.js';
12
+ import { createMemoryRouter } from './orchestrator-memory-router.js';
13
+ import { createLearningRouter } from './orchestrator-learning-router.js';
16
14
  export function createOrchestratorRouter(verifyToken, extractToken, sessions, monitorRef, verifyTokenOrSessionToken, injectedMemory, injectedChildren) {
17
15
  const router = Router();
18
16
  const memory = injectedMemory ?? new OrchestratorMemory();
19
17
  const children = injectedChildren ?? new OrchestratorChildManager(sessions);
20
18
  /**
21
19
  * Verify that the request is authorized — accepts either the master auth
22
- * token OR the orchestrator session's scoped token. This allows the
23
- * orchestrator's Claude process (which only has a session-scoped token)
24
- * to call its own management endpoints (spawn children, update memory, etc.).
20
+ * token OR the orchestrator session's scoped token.
25
21
  */
26
22
  function verifyOrchestratorAuth(req) {
27
23
  const token = extractToken(req);
@@ -33,501 +29,10 @@ export function createOrchestratorRouter(verifyToken, extractToken, sessions, mo
33
29
  }
34
30
  return false;
35
31
  }
36
- // -------------------------------------------------------------------------
37
- // Session lifecycle
38
- // -------------------------------------------------------------------------
39
- /** Get orchestrator session status. */
40
- router.get('/api/orchestrator/status', (req, res) => {
41
- if (!verifyOrchestratorAuth(req))
42
- return res.status(401).json({ error: 'Unauthorized' });
43
- const sessionId = getOrchestratorSessionId(sessions);
44
- if (!sessionId) {
45
- return res.json({ sessionId: null, status: 'stopped', agentName: getAgentDisplayName() });
46
- }
47
- const session = sessions.get(sessionId);
48
- const status = session?.claudeProcess?.isAlive() ? 'active' : 'idle';
49
- res.json({
50
- sessionId,
51
- status,
52
- childSessions: children.activeCount(),
53
- agentName: getAgentDisplayName(),
54
- });
55
- });
56
- /** Ensure orchestrator is running and return its session ID. */
57
- router.post('/api/orchestrator/start', (req, res) => {
58
- if (!verifyOrchestratorAuth(req))
59
- return res.status(401).json({ error: 'Unauthorized' });
60
- try {
61
- const sessionId = ensureOrchestratorRunning(sessions);
62
- res.json({ sessionId, status: 'active', agentName: getAgentDisplayName() });
63
- }
64
- catch (err) {
65
- console.error('[orchestrator] Failed to start:', err);
66
- res.status(500).json({ error: `Failed to start Agent ${getAgentDisplayName()}` });
67
- }
68
- });
69
- // -------------------------------------------------------------------------
70
- // Reports
71
- // -------------------------------------------------------------------------
72
- /** Scan reports for a single repo. */
73
- router.get('/api/orchestrator/reports', (req, res) => {
74
- if (!verifyOrchestratorAuth(req))
75
- return res.status(401).json({ error: 'Unauthorized' });
76
- const repoPath = req.query.repo;
77
- const since = req.query.since;
78
- if (repoPath) {
79
- const reports = scanRepoReports(repoPath);
80
- res.json({ reports });
81
- }
82
- else if (since) {
83
- // Scan all managed repos — get paths from memory
84
- const repoItems = memory.list({ memoryType: 'repo_context' });
85
- const repoPaths = repoItems.map(r => r.scope).filter((s) => !!s);
86
- const reports = getReportsSince(repoPaths, since);
87
- res.json({ reports });
88
- }
89
- else {
90
- res.status(400).json({ error: 'Provide ?repo=<path> or ?since=<YYYY-MM-DD>' });
91
- }
92
- });
93
- /** Read a specific report's content. */
94
- router.get('/api/orchestrator/reports/read', (req, res) => {
95
- if (!verifyOrchestratorAuth(req))
96
- return res.status(401).json({ error: 'Unauthorized' });
97
- const filePath = req.query.path;
98
- if (!filePath)
99
- return res.status(400).json({ error: 'Provide ?path=<filePath>' });
100
- const report = readReport(filePath);
101
- if (!report)
102
- return res.status(404).json({ error: 'Report not found' });
103
- res.json({ report });
104
- });
105
- // -------------------------------------------------------------------------
106
- // Child sessions
107
- // -------------------------------------------------------------------------
108
- /** List child sessions. */
109
- router.get('/api/orchestrator/children', (req, res) => {
110
- if (!verifyOrchestratorAuth(req))
111
- return res.status(401).json({ error: 'Unauthorized' });
112
- res.json({ children: children.list() });
113
- });
114
- /** Spawn a child session. */
115
- router.post('/api/orchestrator/children', async (req, res) => {
116
- if (!verifyOrchestratorAuth(req))
117
- return res.status(401).json({ error: 'Unauthorized' });
118
- const { repo, task, branchName, completionPolicy, deployAfter, useWorktree, model, allowedTools } = req.body;
119
- if (!repo || !task || !branchName) {
120
- return res.status(400).json({ error: 'Missing required fields: repo, task, branchName' });
121
- }
122
- // Validate branchName to prevent prompt injection
123
- if (!/^[a-zA-Z0-9][a-zA-Z0-9/_.-]*$/.test(branchName)) {
124
- return res.status(400).json({ error: 'Invalid branchName: only alphanumeric, /, _, ., and - are allowed' });
125
- }
126
- // Validate allowedTools if provided: must be an array of strings
127
- if (allowedTools !== undefined) {
128
- if (!Array.isArray(allowedTools) || !allowedTools.every((t) => typeof t === 'string')) {
129
- return res.status(400).json({ error: 'Invalid allowedTools: must be an array of strings' });
130
- }
131
- }
132
- // Validate repo path: must resolve under REPOS_ROOT and be an existing directory
133
- const resolvedRepo = resolve(repo);
134
- if (!resolvedRepo.startsWith(REPOS_ROOT + '/') && resolvedRepo !== REPOS_ROOT) {
135
- return res.status(400).json({ error: 'Invalid repo path: must be under configured repos root' });
136
- }
137
- if (!existsSync(resolvedRepo) || !statSync(resolvedRepo).isDirectory()) {
138
- return res.status(400).json({ error: 'Invalid repo path: directory does not exist' });
139
- }
140
- try {
141
- const child = await children.spawn({
142
- repo,
143
- task,
144
- branchName,
145
- completionPolicy: completionPolicy ?? 'pr',
146
- deployAfter: deployAfter ?? false,
147
- useWorktree: useWorktree ?? true,
148
- model,
149
- allowedTools,
150
- });
151
- res.json({ child });
152
- }
153
- catch (err) {
154
- res.status(503).json({ error: err instanceof Error ? err.message : 'Failed to spawn child session' });
155
- }
156
- });
157
- /** Get a specific child session. */
158
- router.get('/api/orchestrator/children/:id', (req, res) => {
159
- if (!verifyOrchestratorAuth(req))
160
- return res.status(401).json({ error: 'Unauthorized' });
161
- const child = children.get(req.params.id);
162
- if (!child)
163
- return res.status(404).json({ error: 'Child session not found' });
164
- res.json({ child });
165
- });
166
- // -------------------------------------------------------------------------
167
- // Memory
168
- // -------------------------------------------------------------------------
169
- /** Search memory. */
170
- router.get('/api/orchestrator/memory', (req, res) => {
171
- if (!verifyOrchestratorAuth(req))
172
- return res.status(401).json({ error: 'Unauthorized' });
173
- const query = req.query.q;
174
- const type = req.query.type;
175
- const limit = parseInt(req.query.limit || '20', 10);
176
- if (query) {
177
- const items = memory.search(query, limit);
178
- res.json({ items });
179
- }
180
- else {
181
- const items = memory.list({
182
- memoryType: type,
183
- limit,
184
- });
185
- res.json({ items });
186
- }
187
- });
188
- /** Add or update a memory item. */
189
- router.post('/api/orchestrator/memory', (req, res) => {
190
- if (!verifyOrchestratorAuth(req))
191
- return res.status(401).json({ error: 'Unauthorized' });
192
- const { id, memoryType, scope, title, content, sourceRef, confidence, expiresAt, isPinned, tags } = req.body;
193
- if (!memoryType || !content) {
194
- return res.status(400).json({ error: 'Missing required fields: memoryType, content' });
195
- }
196
- const itemId = memory.upsert({
197
- id,
198
- memoryType,
199
- scope: scope ?? null,
200
- title: title ?? null,
201
- content,
202
- sourceRef: sourceRef ?? null,
203
- confidence: confidence ?? 0.8,
204
- expiresAt: expiresAt ?? null,
205
- isPinned: isPinned ?? false,
206
- tags: tags ?? [],
207
- });
208
- res.json({ id: itemId });
209
- });
210
- /** Delete a memory item. */
211
- router.delete('/api/orchestrator/memory/:id', (req, res) => {
212
- if (!verifyOrchestratorAuth(req))
213
- return res.status(401).json({ error: 'Unauthorized' });
214
- const deleted = memory.delete(req.params.id);
215
- res.json({ deleted });
216
- });
217
- // -------------------------------------------------------------------------
218
- // Trust
219
- // -------------------------------------------------------------------------
220
- /** List all trust records. */
221
- router.get('/api/orchestrator/trust', (req, res) => {
222
- if (!verifyOrchestratorAuth(req))
223
- return res.status(401).json({ error: 'Unauthorized' });
224
- res.json({ records: memory.listTrustRecords() });
225
- });
226
- /** Compute trust level for an action. */
227
- router.get('/api/orchestrator/trust/level', (req, res) => {
228
- if (!verifyOrchestratorAuth(req))
229
- return res.status(401).json({ error: 'Unauthorized' });
230
- const { action, category, severity, repo } = req.query;
231
- if (!action || !category) {
232
- return res.status(400).json({ error: 'Provide ?action=X&category=Y' });
233
- }
234
- const level = memory.computeTrustLevel(action, category, severity ?? 'medium', repo ?? null);
235
- res.json({ level });
236
- });
237
- /** Record an approval. */
238
- router.post('/api/orchestrator/trust/approve', (req, res) => {
239
- if (!verifyOrchestratorAuth(req))
240
- return res.status(401).json({ error: 'Unauthorized' });
241
- const { action, category, repo } = req.body;
242
- if (!action || !category) {
243
- return res.status(400).json({ error: 'Missing required fields: action, category' });
244
- }
245
- const record = memory.recordApproval(action, category, repo ?? null);
246
- res.json({ record });
247
- });
248
- /** Record a rejection (resets trust to ASK). */
249
- router.post('/api/orchestrator/trust/reject', (req, res) => {
250
- if (!verifyOrchestratorAuth(req))
251
- return res.status(401).json({ error: 'Unauthorized' });
252
- const { action, category, repo } = req.body;
253
- if (!action || !category) {
254
- return res.status(400).json({ error: 'Missing required fields: action, category' });
255
- }
256
- const record = memory.recordRejection(action, category, repo ?? null);
257
- res.json({ record });
258
- });
259
- /** Pin trust to a specific level (user override). */
260
- router.post('/api/orchestrator/trust/pin', (req, res) => {
261
- if (!verifyOrchestratorAuth(req))
262
- return res.status(401).json({ error: 'Unauthorized' });
263
- const { action, category, repo, level } = req.body;
264
- if (!action || !category || !level) {
265
- return res.status(400).json({ error: 'Missing required fields: action, category, level' });
266
- }
267
- memory.pinTrust(action, category, repo ?? null, level);
268
- res.json({ ok: true });
269
- });
270
- /** Reset all trust records. */
271
- router.post('/api/orchestrator/trust/reset', (req, res) => {
272
- if (!verifyOrchestratorAuth(req))
273
- return res.status(401).json({ error: 'Unauthorized' });
274
- memory.resetAllTrust();
275
- res.json({ ok: true });
276
- });
277
- // -------------------------------------------------------------------------
278
- // Notifications
279
- // -------------------------------------------------------------------------
280
- /** Get pending notifications from the monitor. */
281
- router.get('/api/orchestrator/notifications', (req, res) => {
282
- if (!verifyOrchestratorAuth(req))
283
- return res.status(401).json({ error: 'Unauthorized' });
284
- const monitor = monitorRef?.current;
285
- if (!monitor)
286
- return res.json({ notifications: [] });
287
- const all = req.query.all === 'true';
288
- res.json({ notifications: all ? monitor.getAll() : monitor.getPending() });
289
- });
290
- /** Mark notifications as delivered. */
291
- router.post('/api/orchestrator/notifications/mark-delivered', (req, res) => {
292
- if (!verifyOrchestratorAuth(req))
293
- return res.status(401).json({ error: 'Unauthorized' });
294
- const monitor = monitorRef?.current;
295
- if (!monitor)
296
- return res.json({ ok: true });
297
- const { ids } = req.body;
298
- if (Array.isArray(ids))
299
- monitor.markDelivered(ids);
300
- res.json({ ok: true });
301
- });
302
- // -------------------------------------------------------------------------
303
- // Dashboard stats
304
- // -------------------------------------------------------------------------
305
- /** Get summary stats for the dashboard header. */
306
- router.get('/api/orchestrator/dashboard', (req, res) => {
307
- if (!verifyOrchestratorAuth(req))
308
- return res.status(401).json({ error: 'Unauthorized' });
309
- const repoItems = memory.list({ memoryType: 'repo_context' });
310
- const pendingNotifications = monitorRef?.current?.getPending() ?? [];
311
- const activeChildren = children.activeCount();
312
- const trustRecords = memory.listTrustRecords();
313
- const autoApproved = trustRecords.filter(t => t.effectiveLevel !== 'ask').length;
314
- res.json({
315
- stats: {
316
- managedRepos: repoItems.length,
317
- pendingNotifications: pendingNotifications.length,
318
- activeChildSessions: activeChildren,
319
- totalChildSessions: children.list().length,
320
- trustRecords: trustRecords.length,
321
- autoApprovedActions: autoApproved,
322
- memoryItems: memory.list().length,
323
- },
324
- });
325
- });
326
- // -------------------------------------------------------------------------
327
- // Memory extraction & learning (Phase 4)
328
- // -------------------------------------------------------------------------
329
- /** Extract memory candidates from a session interaction. */
330
- router.post('/api/orchestrator/memory/extract', (req, res) => {
331
- if (!verifyOrchestratorAuth(req))
332
- return res.status(401).json({ error: 'Unauthorized' });
333
- const { userMessage, assistantResponse, repo, sourceRef } = req.body;
334
- if (!userMessage || !assistantResponse) {
335
- return res.status(400).json({ error: 'Missing required fields: userMessage, assistantResponse' });
336
- }
337
- const candidates = extractMemoryCandidates(userMessage, assistantResponse, repo ?? null);
338
- const results = candidates.map(c => smartUpsert(memory, c, sourceRef ?? null));
339
- res.json({ candidates: candidates.length, results });
340
- });
341
- /** Run the aging/decay cycle. */
342
- router.post('/api/orchestrator/memory/age', (req, res) => {
343
- if (!verifyOrchestratorAuth(req))
344
- return res.status(401).json({ error: 'Unauthorized' });
345
- const result = runAgingCycle(memory);
346
- res.json(result);
347
- });
348
- // -------------------------------------------------------------------------
349
- // Finding outcomes & triage recommendations
350
- // -------------------------------------------------------------------------
351
- /** Record a finding outcome. */
352
- router.post('/api/orchestrator/findings/outcome', (req, res) => {
353
- if (!verifyOrchestratorAuth(req))
354
- return res.status(401).json({ error: 'Unauthorized' });
355
- const { findingId, repo, category, severity, action, reason, sessionId, outcome } = req.body;
356
- if (!findingId || !repo || !category || !action) {
357
- return res.status(400).json({ error: 'Missing required fields' });
358
- }
359
- const id = recordFindingOutcome(memory, {
360
- findingId, repo, category,
361
- severity: severity ?? 'medium',
362
- action, reason: reason ?? '',
363
- sessionId: sessionId ?? null,
364
- outcome: outcome ?? null,
365
- timestamp: new Date().toISOString(),
366
- });
367
- res.json({ id });
368
- });
369
- /** Get triage recommendation based on historical patterns. */
370
- router.get('/api/orchestrator/findings/recommend', (req, res) => {
371
- if (!verifyOrchestratorAuth(req))
372
- return res.status(401).json({ error: 'Unauthorized' });
373
- const { category, severity, repo } = req.query;
374
- if (!category)
375
- return res.status(400).json({ error: 'Provide ?category=X' });
376
- const recommendation = getTriageRecommendation(memory, category, severity ?? 'medium', repo ?? null);
377
- res.json(recommendation);
378
- });
379
- // -------------------------------------------------------------------------
380
- // User skill model
381
- // -------------------------------------------------------------------------
382
- /** Get the user's skill profile. */
383
- router.get('/api/orchestrator/skills', (req, res) => {
384
- if (!verifyOrchestratorAuth(req))
385
- return res.status(401).json({ error: 'Unauthorized' });
386
- res.json({
387
- profile: loadSkillProfile(),
388
- guidanceStyle: getGuidanceStyle(),
389
- });
390
- });
391
- /** Update a skill level based on an observed signal. */
392
- router.post('/api/orchestrator/skills', (req, res) => {
393
- if (!verifyOrchestratorAuth(req))
394
- return res.status(401).json({ error: 'Unauthorized' });
395
- const { domain, signal, level } = req.body;
396
- if (!domain || !signal || !level) {
397
- return res.status(400).json({ error: 'Missing required fields: domain, signal, level' });
398
- }
399
- const updated = updateSkillLevel(domain, signal, level);
400
- res.json({ skill: updated, guidanceStyle: getGuidanceStyle() });
401
- });
402
- // -------------------------------------------------------------------------
403
- // Decision history
404
- // -------------------------------------------------------------------------
405
- /** Record a decision. */
406
- router.post('/api/orchestrator/decisions', (req, res) => {
407
- if (!verifyOrchestratorAuth(req))
408
- return res.status(401).json({ error: 'Unauthorized' });
409
- const { decision, rationale, repo, relatedFinding, expectedOutcome } = req.body;
410
- if (!decision || !rationale) {
411
- return res.status(400).json({ error: 'Missing required fields: decision, rationale' });
412
- }
413
- const id = recordDecision(memory, {
414
- decision, rationale,
415
- repo: repo ?? null,
416
- relatedFinding: relatedFinding ?? null,
417
- expectedOutcome: expectedOutcome ?? '',
418
- });
419
- res.json({ id });
420
- });
421
- /** Assess a decision's outcome. */
422
- router.post('/api/orchestrator/decisions/:id/assess', (req, res) => {
423
- if (!verifyOrchestratorAuth(req))
424
- return res.status(401).json({ error: 'Unauthorized' });
425
- const { actualOutcome } = req.body;
426
- if (!actualOutcome)
427
- return res.status(400).json({ error: 'Missing required field: actualOutcome' });
428
- const updated = assessDecisionOutcome(memory, req.params.id, actualOutcome);
429
- res.json({ updated });
430
- });
431
- /** Get decisions pending outcome assessment. */
432
- router.get('/api/orchestrator/decisions/pending', (req, res) => {
433
- if (!verifyOrchestratorAuth(req))
434
- return res.status(401).json({ error: 'Unauthorized' });
435
- res.json({ decisions: getPendingOutcomeAssessments(memory) });
436
- });
437
- // -------------------------------------------------------------------------
438
- // Session prompts & approvals
439
- // -------------------------------------------------------------------------
440
- /** Get all sessions with pending prompts (waiting for approval or answer). */
441
- router.get('/api/orchestrator/sessions/pending-prompts', (req, res) => {
442
- if (!verifyOrchestratorAuth(req))
443
- return res.status(401).json({ error: 'Unauthorized' });
444
- res.json({ sessions: sessions.getPendingPrompts() });
445
- });
446
- /** Approve or deny a pending prompt in any session. */
447
- router.post('/api/orchestrator/sessions/:id/respond', (req, res) => {
448
- if (!verifyOrchestratorAuth(req))
449
- return res.status(401).json({ error: 'Unauthorized' });
450
- const sessionId = req.params.id;
451
- const { requestId, value } = req.body;
452
- if (!value) {
453
- return res.status(400).json({ error: 'Missing required field: value (e.g. "allow", "deny", or answer text)' });
454
- }
455
- const session = sessions.get(sessionId);
456
- if (!session)
457
- return res.status(404).json({ error: 'Session not found' });
458
- // Verify there's actually a pending prompt (optionally for the specific requestId)
459
- const hasPending = requestId
460
- ? (session.pendingToolApprovals.has(requestId) || session.pendingControlRequests.has(requestId))
461
- : (session.pendingToolApprovals.size > 0 || session.pendingControlRequests.size > 0);
462
- if (!hasPending) {
463
- return res.status(409).json({ error: 'No pending prompt to respond to' });
464
- }
465
- // Capture prompt details before responding (response clears them)
466
- let promptToolName = 'unknown';
467
- let promptType = 'permission';
468
- if (requestId) {
469
- const toolApproval = session.pendingToolApprovals.get(requestId);
470
- const controlReq = session.pendingControlRequests.get(requestId);
471
- if (toolApproval) {
472
- promptToolName = toolApproval.toolName;
473
- promptType = toolApproval.toolName === 'AskUserQuestion' ? 'question' : 'permission';
474
- }
475
- else if (controlReq) {
476
- promptToolName = controlReq.toolName;
477
- promptType = controlReq.toolName === 'AskUserQuestion' ? 'question' : 'permission';
478
- }
479
- }
480
- sessions.sendPromptResponse(sessionId, value, requestId);
481
- // Broadcast a notification to the orchestrator channel so users can see
482
- // what the orchestrator approved/denied/answered.
483
- const orchestratorId = getOrCreateOrchestratorId();
484
- const orchestratorSession = sessions.get(orchestratorId);
485
- if (orchestratorSession && orchestratorSession.clients.size > 0) {
486
- const actionLabel = promptType === 'question'
487
- ? `answered question from ${promptToolName}`
488
- : `responded "${value}" to ${promptToolName}`;
489
- const notifMsg = {
490
- type: 'system_message',
491
- subtype: 'info',
492
- text: `[${getAgentDisplayName()}] ${actionLabel} in session "${session.name}"`,
493
- };
494
- for (const ws of orchestratorSession.clients) {
495
- ws.send(JSON.stringify(notifMsg));
496
- }
497
- }
498
- res.json({ ok: true });
499
- });
500
- // -------------------------------------------------------------------------
501
- // Session cleanup
502
- // -------------------------------------------------------------------------
503
- /** List all sessions (unfiltered, includes source field). */
504
- router.get('/api/orchestrator/sessions', (req, res) => {
505
- if (!verifyOrchestratorAuth(req))
506
- return res.status(401).json({ error: 'Unauthorized' });
507
- res.json({ sessions: sessions.listAll() });
508
- });
509
- /** Delete all automated sessions (source: workflow, webhook, stepflow, agent). */
510
- router.delete('/api/orchestrator/sessions/cleanup', (req, res) => {
511
- if (!verifyOrchestratorAuth(req))
512
- return res.status(401).json({ error: 'Unauthorized' });
513
- const automatedSources = new Set(['workflow', 'webhook', 'stepflow', 'agent']);
514
- const toDelete = sessions.listAll().filter((s) => automatedSources.has(s.source ?? ''));
515
- let deleted = 0;
516
- for (const s of toDelete) {
517
- if (sessions.delete(s.id))
518
- deleted++;
519
- }
520
- res.json({ deleted });
521
- });
522
- /** Delete a specific session by ID. */
523
- router.delete('/api/orchestrator/sessions/:id', (req, res) => {
524
- if (!verifyOrchestratorAuth(req))
525
- return res.status(401).json({ error: 'Unauthorized' });
526
- const success = sessions.delete(req.params.id);
527
- if (!success)
528
- return res.status(404).json({ error: 'Session not found' });
529
- res.json({ deleted: true });
530
- });
32
+ // Mount sub-routers
33
+ router.use(createSessionRouter(verifyOrchestratorAuth, sessions, memory, children, monitorRef));
34
+ router.use(createMemoryRouter(verifyOrchestratorAuth, memory, monitorRef));
35
+ router.use(createLearningRouter(verifyOrchestratorAuth, memory));
531
36
  return router;
532
37
  }
533
38
  //# sourceMappingURL=orchestrator-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-routes.js","sourceRoot":"","sources":["../orchestrator-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator-routes.js","sourceRoot":"","sources":["../orchestrator-routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAGhC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAMxE,MAAM,UAAU,wBAAwB,CACtC,WAAqB,EACrB,YAAuB,EACvB,QAAwB,EACxB,UAAoD,EACpD,yBAA2C,EAC3C,cAAmC,EACnC,gBAA2C;IAE3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA;IACvB,MAAM,MAAM,GAAG,cAAc,IAAI,IAAI,kBAAkB,EAAE,CAAA;IACzD,MAAM,QAAQ,GAAG,gBAAgB,IAAI,IAAI,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IAE3E;;;OAGG;IACH,SAAS,sBAAsB,CAAC,GAAY;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACnC,IAAI,yBAAyB,EAAE,CAAC;YAC9B,MAAM,cAAc,GAAG,yBAAyB,EAAE,CAAA;YAClD,OAAO,yBAAyB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,sBAAsB,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/F,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;IAC1E,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC,CAAA;IAEhE,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Session lifecycle, child session management, reports, and dashboard routes
3
+ * for the orchestrator.
4
+ */
5
+ import { Router } from 'express';
6
+ import type { Request } from 'express';
7
+ import type { SessionManager } from './session-manager.js';
8
+ import type { OrchestratorMemory } from './orchestrator-memory.js';
9
+ import type { OrchestratorChildManager } from './orchestrator-children.js';
10
+ import type { OrchestratorMonitor } from './orchestrator-monitor.js';
11
+ export declare function createSessionRouter(verifyOrchestratorAuth: (req: Request) => boolean, sessions: SessionManager, memory: OrchestratorMemory, children: OrchestratorChildManager, monitorRef?: {
12
+ current: OrchestratorMonitor | null;
13
+ }): Router;