@cogitator-ai/koa 0.8.5 → 0.9.0

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 (58) hide show
  1. package/README.md +93 -34
  2. package/dist/app.d.ts +7 -0
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +31 -14
  5. package/dist/app.js.map +1 -1
  6. package/dist/index.d.ts +2 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/middleware/auth.d.ts +6 -0
  11. package/dist/middleware/auth.d.ts.map +1 -1
  12. package/dist/middleware/auth.js +17 -2
  13. package/dist/middleware/auth.js.map +1 -1
  14. package/dist/middleware/body-parser.d.ts.map +1 -1
  15. package/dist/middleware/body-parser.js +3 -4
  16. package/dist/middleware/body-parser.js.map +1 -1
  17. package/dist/middleware/context.d.ts +5 -0
  18. package/dist/middleware/context.d.ts.map +1 -1
  19. package/dist/middleware/context.js +10 -1
  20. package/dist/middleware/context.js.map +1 -1
  21. package/dist/middleware/error-handler.d.ts.map +1 -1
  22. package/dist/middleware/error-handler.js +16 -36
  23. package/dist/middleware/error-handler.js.map +1 -1
  24. package/dist/middleware/index.d.ts +1 -1
  25. package/dist/middleware/index.d.ts.map +1 -1
  26. package/dist/middleware/index.js +1 -1
  27. package/dist/middleware/index.js.map +1 -1
  28. package/dist/middleware/unmatched.d.ts +20 -0
  29. package/dist/middleware/unmatched.d.ts.map +1 -0
  30. package/dist/middleware/unmatched.js +83 -0
  31. package/dist/middleware/unmatched.js.map +1 -0
  32. package/dist/routes/agents.d.ts.map +1 -1
  33. package/dist/routes/agents.js +33 -22
  34. package/dist/routes/agents.js.map +1 -1
  35. package/dist/routes/swarms.d.ts.map +1 -1
  36. package/dist/routes/swarms.js +32 -26
  37. package/dist/routes/swarms.js.map +1 -1
  38. package/dist/routes/threads.d.ts.map +1 -1
  39. package/dist/routes/threads.js +25 -26
  40. package/dist/routes/threads.js.map +1 -1
  41. package/dist/routes/workflows.d.ts.map +1 -1
  42. package/dist/routes/workflows.js +16 -25
  43. package/dist/routes/workflows.js.map +1 -1
  44. package/dist/types.d.ts +66 -2
  45. package/dist/types.d.ts.map +1 -1
  46. package/dist/utils/errors.d.ts +14 -6
  47. package/dist/utils/errors.d.ts.map +1 -1
  48. package/dist/utils/errors.js +29 -12
  49. package/dist/utils/errors.js.map +1 -1
  50. package/dist/utils/request.d.ts +10 -0
  51. package/dist/utils/request.d.ts.map +1 -1
  52. package/dist/utils/request.js +14 -0
  53. package/dist/utils/request.js.map +1 -1
  54. package/dist/websocket/handler.d.ts +6 -0
  55. package/dist/websocket/handler.d.ts.map +1 -1
  56. package/dist/websocket/handler.js +48 -18
  57. package/dist/websocket/handler.js.map +1 -1
  58. package/package.json +9 -9
@@ -1,5 +1,5 @@
1
1
  export { createContextMiddleware } from './context.js';
2
- export { createAuthMiddleware } from './auth.js';
2
+ export { createAnonymousMiddleware, createAuthMiddleware } from './auth.js';
3
3
  export { createBodyParser } from './body-parser.js';
4
4
  export { createErrorHandler } from './error-handler.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { createContextMiddleware } from './context.js';
2
- export { createAuthMiddleware } from './auth.js';
2
+ export { createAnonymousMiddleware, createAuthMiddleware } from './auth.js';
3
3
  export { createBodyParser } from './body-parser.js';
4
4
  export { createErrorHandler } from './error-handler.js';
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type Router from '@koa/router';
2
+ import type { Middleware } from 'koa';
3
+ import type { CogitatorState } from '../types.js';
4
+ /**
5
+ * `middleware`, for the requests a route of the router serves. Any other request passes
6
+ * through untouched, so the middleware downstream of the router gets it as it came.
7
+ */
8
+ export declare function forRoutes(middleware: Middleware): Middleware;
9
+ /**
10
+ * Registers the last route of the router, the one for the requests no other route serves. It
11
+ * lets the middleware downstream of the router answer them first. What is left unanswered goes
12
+ * through `guards`, the authentication and anonymous policy of the API, and is answered with
13
+ * `404 NOT_FOUND` in the error envelope, so under `anonymous: 'deny'` an anonymous caller gets
14
+ * `401` on every path and cannot tell which paths exist. An `OPTIONS` request for a path a route
15
+ * serves answers `204` with the methods it serves in `Allow`, which `router.allowedMethods()`
16
+ * would answer for every path once this route matches them all, so the app needs no
17
+ * `allowedMethods()`.
18
+ */
19
+ export declare function routeUnmatched(router: Router<CogitatorState>, guards: readonly Middleware[]): void;
20
+ //# sourceMappingURL=unmatched.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unmatched.d.ts","sourceRoot":"","sources":["../../src/middleware/unmatched.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,OAAO,KAAK,EAAW,UAAU,EAAQ,MAAM,KAAK,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAqBlD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAE5D;AA8BD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,EAC9B,MAAM,EAAE,SAAS,UAAU,EAAE,GAC5B,IAAI,CAqBN"}
@@ -0,0 +1,83 @@
1
+ import { notFound } from '../utils/errors.js';
2
+ /** The name of the route that answers what no other route of the router serves */
3
+ const UNMATCHED_ROUTE = 'cogitator:unmatched';
4
+ /**
5
+ * A path that matches every request, in the syntax of each path-to-regexp major `@koa/router`
6
+ * has shipped with: 8 first, then 6. A router compiles a path when it is registered and throws
7
+ * on the syntax of the other one.
8
+ */
9
+ const ANY_PATH = ['{/*rest}', '(.*)'];
10
+ /** Whether a route of the router other than the unmatched one serves the request */
11
+ function servedByRoute(ctx) {
12
+ const matched = ctx.matched ?? [];
13
+ return matched.some((layer) => layer.name !== UNMATCHED_ROUTE && layer.methods.includes(ctx.method));
14
+ }
15
+ /**
16
+ * `middleware`, for the requests a route of the router serves. Any other request passes
17
+ * through untouched, so the middleware downstream of the router gets it as it came.
18
+ */
19
+ export function forRoutes(middleware) {
20
+ return (ctx, next) => (servedByRoute(ctx) ? middleware(ctx, next) : next());
21
+ }
22
+ /**
23
+ * The methods the routes of the router serve on the request's path, besides the unmatched one,
24
+ * with `HEAD` wherever `GET` is served and `OPTIONS`; none when no route serves the path
25
+ */
26
+ function allowedMethods(ctx) {
27
+ const matched = ctx.matched ?? [];
28
+ const methods = new Set(matched.filter((layer) => layer.name !== UNMATCHED_ROUTE).flatMap((layer) => layer.methods));
29
+ if (methods.size === 0)
30
+ return [];
31
+ if (methods.has('GET'))
32
+ methods.add('HEAD');
33
+ methods.add('OPTIONS');
34
+ return [...methods].sort();
35
+ }
36
+ function unanswered(ctx) {
37
+ return ctx.respond !== false && !ctx.headerSent && ctx.status === 404 && ctx.body == null;
38
+ }
39
+ async function runChain(chain, ctx, last) {
40
+ const dispatch = async (at) => {
41
+ const middleware = chain[at];
42
+ if (middleware)
43
+ await middleware(ctx, () => dispatch(at + 1));
44
+ else
45
+ last();
46
+ };
47
+ await dispatch(0);
48
+ }
49
+ /**
50
+ * Registers the last route of the router, the one for the requests no other route serves. It
51
+ * lets the middleware downstream of the router answer them first. What is left unanswered goes
52
+ * through `guards`, the authentication and anonymous policy of the API, and is answered with
53
+ * `404 NOT_FOUND` in the error envelope, so under `anonymous: 'deny'` an anonymous caller gets
54
+ * `401` on every path and cannot tell which paths exist. An `OPTIONS` request for a path a route
55
+ * serves answers `204` with the methods it serves in `Allow`, which `router.allowedMethods()`
56
+ * would answer for every path once this route matches them all, so the app needs no
57
+ * `allowedMethods()`.
58
+ */
59
+ export function routeUnmatched(router, guards) {
60
+ const answer = async (ctx, next) => {
61
+ const allowed = ctx.method === 'OPTIONS' ? allowedMethods(ctx) : [];
62
+ if (allowed.length > 0) {
63
+ ctx.set('Allow', allowed.join(', '));
64
+ ctx.status = 204;
65
+ return;
66
+ }
67
+ await next();
68
+ if (!unanswered(ctx))
69
+ return;
70
+ await runChain(guards, ctx, () => notFound(ctx, 'Not found'));
71
+ };
72
+ for (const [at, path] of ANY_PATH.entries()) {
73
+ try {
74
+ router.all(UNMATCHED_ROUTE, path, answer);
75
+ return;
76
+ }
77
+ catch (error) {
78
+ if (at === ANY_PATH.length - 1)
79
+ throw error;
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=unmatched.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unmatched.js","sourceRoot":"","sources":["../../src/middleware/unmatched.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAYrE,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAsJ1D"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAkBrE,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAiK1D"}
@@ -2,8 +2,8 @@ import Router from '@koa/router';
2
2
  import { KoaStreamWriter, setupSSEHeaders } from '../streaming/index.js';
3
3
  import { AgentStreamSession, parseResumeRequest, parseRunRequest, toAgentRunResponse, } from '@cogitator-ai/server-shared';
4
4
  import { getOwn } from '../utils/lookup.js';
5
- import { resolveError } from '../utils/errors.js';
6
- import { getRequestBody, onClientDisconnect } from '../utils/request.js';
5
+ import { describeError, invalidInput, notFound, respondWithError, sendError, } from '../utils/errors.js';
6
+ import { getRequestBody, onClientDisconnect, refuseThread, runDeps } from '../utils/request.js';
7
7
  export function createAgentRoutes() {
8
8
  const router = new Router();
9
9
  router.get('/agents', (ctx) => {
@@ -21,24 +21,29 @@ export function createAgentRoutes() {
21
21
  const { name } = ctx.params;
22
22
  const agent = getOwn(agents, name);
23
23
  if (!agent) {
24
- ctx.status = 404;
25
- ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
24
+ notFound(ctx, `Agent '${name}' not found`);
26
25
  return;
27
26
  }
28
27
  const parsed = parseRunRequest(getRequestBody(ctx), {
29
28
  acceptContext: ctx.state.cogitator.acceptContext,
30
29
  });
31
30
  if (!parsed.ok) {
32
- ctx.status = 400;
33
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
31
+ invalidInput(ctx, parsed.message);
34
32
  return;
35
33
  }
34
+ const refusal = await refuseThread(ctx, parsed.value.threadId);
35
+ if (refusal) {
36
+ sendError(ctx, refusal);
37
+ return;
38
+ }
39
+ const deps = await runDeps(ctx);
36
40
  const abortController = new AbortController();
37
41
  onClientDisconnect(ctx, () => abortController.abort());
38
42
  try {
39
43
  const result = await runtime.run(agent, {
40
44
  ...parsed.value,
41
45
  userId: ctx.state.auth?.userId,
46
+ ...deps,
42
47
  signal: abortController.signal,
43
48
  });
44
49
  ctx.body = toAgentRunResponse(result);
@@ -46,9 +51,7 @@ export function createAgentRoutes() {
46
51
  catch (error) {
47
52
  if (abortController.signal.aborted)
48
53
  return;
49
- const { status, body } = resolveError(error, 'Agent run error');
50
- ctx.status = status;
51
- ctx.body = body;
54
+ respondWithError(ctx, error, 'Agent run error');
52
55
  }
53
56
  });
54
57
  router.post('/agents/:name/resume', async (ctx) => {
@@ -56,22 +59,27 @@ export function createAgentRoutes() {
56
59
  const { name } = ctx.params;
57
60
  const agent = getOwn(agents, name);
58
61
  if (!agent) {
59
- ctx.status = 404;
60
- ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
62
+ notFound(ctx, `Agent '${name}' not found`);
61
63
  return;
62
64
  }
63
65
  const parsed = parseResumeRequest(getRequestBody(ctx));
64
66
  if (!parsed.ok) {
65
- ctx.status = 400;
66
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
67
+ invalidInput(ctx, parsed.message);
67
68
  return;
68
69
  }
69
70
  const { threadId, decisions, defaultDecision } = parsed.value;
71
+ const refusal = await refuseThread(ctx, threadId);
72
+ if (refusal) {
73
+ sendError(ctx, refusal);
74
+ return;
75
+ }
76
+ const deps = await runDeps(ctx);
70
77
  const abortController = new AbortController();
71
78
  onClientDisconnect(ctx, () => abortController.abort());
72
79
  try {
73
80
  const result = await runtime.resume(agent, threadId, {
74
81
  userId: ctx.state.auth?.userId,
82
+ ...deps,
75
83
  decisions,
76
84
  defaultDecision,
77
85
  signal: abortController.signal,
@@ -81,9 +89,7 @@ export function createAgentRoutes() {
81
89
  catch (error) {
82
90
  if (abortController.signal.aborted)
83
91
  return;
84
- const { status, body } = resolveError(error, 'Agent resume error');
85
- ctx.status = status;
86
- ctx.body = body;
92
+ respondWithError(ctx, error, 'Agent resume error');
87
93
  }
88
94
  });
89
95
  router.post('/agents/:name/stream', async (ctx) => {
@@ -91,18 +97,22 @@ export function createAgentRoutes() {
91
97
  const { name } = ctx.params;
92
98
  const agent = getOwn(agents, name);
93
99
  if (!agent) {
94
- ctx.status = 404;
95
- ctx.body = { error: { message: `Agent '${name}' not found`, code: 'NOT_FOUND' } };
100
+ notFound(ctx, `Agent '${name}' not found`);
96
101
  return;
97
102
  }
98
103
  const parsed = parseRunRequest(getRequestBody(ctx), {
99
104
  acceptContext: ctx.state.cogitator.acceptContext,
100
105
  });
101
106
  if (!parsed.ok) {
102
- ctx.status = 400;
103
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
107
+ invalidInput(ctx, parsed.message);
108
+ return;
109
+ }
110
+ const refusal = await refuseThread(ctx, parsed.value.threadId);
111
+ if (refusal) {
112
+ sendError(ctx, refusal);
104
113
  return;
105
114
  }
115
+ const deps = await runDeps(ctx);
106
116
  setupSSEHeaders(ctx);
107
117
  const writer = new KoaStreamWriter(ctx, {
108
118
  heartbeatMs: ctx.state.cogitator.sseHeartbeatMs,
@@ -121,6 +131,7 @@ export function createAgentRoutes() {
121
131
  ...parsed.value,
122
132
  threadId: session.threadId,
123
133
  userId: ctx.state.auth?.userId,
134
+ ...deps,
124
135
  stream: true,
125
136
  signal: abortController.signal,
126
137
  ...session.callbacks,
@@ -129,8 +140,8 @@ export function createAgentRoutes() {
129
140
  }
130
141
  catch (error) {
131
142
  if (!abortController.signal.aborted) {
132
- const { body } = resolveError(error, 'Agent stream error');
133
- session.fail(body.error.message, body.error.code);
143
+ const failure = describeError(error, 'Agent stream error');
144
+ session.fail(failure.message, failure.code);
134
145
  }
135
146
  }
136
147
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;AAczF,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CA6L1D"}
1
+ {"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,aAAa,CAAC;AAuBzF,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,cAAc,CAAC,CAmM1D"}
@@ -1,9 +1,9 @@
1
1
  import Router from '@koa/router';
2
2
  import { KoaStreamWriter, setupSSEHeaders } from '../streaming/index.js';
3
- import { generateId, parseSwarmRunRequest, swarmAgentNames, withSwarm, } from '@cogitator-ai/server-shared';
3
+ import { generateId, parseSwarmRunRequest, swarmAgentNames, swarmTimeoutWithin, withSwarm, } from '@cogitator-ai/server-shared';
4
4
  import { getOwn } from '../utils/lookup.js';
5
- import { isModuleNotFoundError, resolveError } from '../utils/errors.js';
6
- import { getRequestBody, onClientDisconnect } from '../utils/request.js';
5
+ import { describeError, invalidInput, isModuleNotFoundError, notFound, notInstalled, respondWithError, sendError, } from '../utils/errors.js';
6
+ import { getRequestBody, onClientDisconnect, refuseThread } from '../utils/request.js';
7
7
  import { serializeSwarmUsage, toSwarmRunResponse } from '../utils/results.js';
8
8
  export function createSwarmRoutes() {
9
9
  const router = new Router();
@@ -25,18 +25,22 @@ export function createSwarmRoutes() {
25
25
  const { name } = ctx.params;
26
26
  const swarmConfig = getOwn(swarms, name);
27
27
  if (!swarmConfig) {
28
- ctx.status = 404;
29
- ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
28
+ notFound(ctx, `Swarm '${name}' not found`);
30
29
  return;
31
30
  }
32
31
  const parsed = parseSwarmRunRequest(getRequestBody(ctx), {
33
32
  acceptContext: ctx.state.cogitator.acceptContext,
34
33
  });
35
34
  if (!parsed.ok) {
36
- ctx.status = 400;
37
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
35
+ invalidInput(ctx, parsed.message);
38
36
  return;
39
37
  }
38
+ const refusal = await refuseThread(ctx, parsed.value.threadId);
39
+ if (refusal) {
40
+ sendError(ctx, refusal);
41
+ return;
42
+ }
43
+ const timeout = swarmTimeoutWithin(parsed.value.timeout, ctx.state.cogitator.limits);
40
44
  let aborted = false;
41
45
  let abortSwarm;
42
46
  onClientDisconnect(ctx, () => {
@@ -49,7 +53,11 @@ export function createSwarmRoutes() {
49
53
  return;
50
54
  const response = await withSwarm(new Swarm(runtime, swarmConfig), async (swarm) => {
51
55
  abortSwarm = () => swarm.abort();
52
- const result = await swarm.run({ ...parsed.value, userId: ctx.state.auth?.userId });
56
+ const result = await swarm.run({
57
+ ...parsed.value,
58
+ timeout,
59
+ userId: ctx.state.auth?.userId,
60
+ });
53
61
  return toSwarmRunResponse(swarm, result);
54
62
  });
55
63
  if (aborted)
@@ -60,13 +68,10 @@ export function createSwarmRoutes() {
60
68
  if (aborted)
61
69
  return;
62
70
  if (isModuleNotFoundError(error)) {
63
- ctx.status = 501;
64
- ctx.body = { error: { message: 'Swarms package not installed', code: 'UNIMPLEMENTED' } };
71
+ notInstalled(ctx, 'Swarms');
65
72
  return;
66
73
  }
67
- const { status, body } = resolveError(error, 'Swarm run error');
68
- ctx.status = status;
69
- ctx.body = body;
74
+ respondWithError(ctx, error, 'Swarm run error');
70
75
  }
71
76
  });
72
77
  router.post('/swarms/:name/stream', async (ctx) => {
@@ -74,18 +79,22 @@ export function createSwarmRoutes() {
74
79
  const { name } = ctx.params;
75
80
  const swarmConfig = getOwn(swarms, name);
76
81
  if (!swarmConfig) {
77
- ctx.status = 404;
78
- ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
82
+ notFound(ctx, `Swarm '${name}' not found`);
79
83
  return;
80
84
  }
81
85
  const parsed = parseSwarmRunRequest(getRequestBody(ctx), {
82
86
  acceptContext: ctx.state.cogitator.acceptContext,
83
87
  });
84
88
  if (!parsed.ok) {
85
- ctx.status = 400;
86
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
89
+ invalidInput(ctx, parsed.message);
90
+ return;
91
+ }
92
+ const refusal = await refuseThread(ctx, parsed.value.threadId);
93
+ if (refusal) {
94
+ sendError(ctx, refusal);
87
95
  return;
88
96
  }
97
+ const timeout = swarmTimeoutWithin(parsed.value.timeout, ctx.state.cogitator.limits);
89
98
  setupSSEHeaders(ctx);
90
99
  const writer = new KoaStreamWriter(ctx, {
91
100
  heartbeatMs: ctx.state.cogitator.sseHeartbeatMs,
@@ -107,6 +116,7 @@ export function createSwarmRoutes() {
107
116
  writer.start(messageId);
108
117
  const result = await swarm.run({
109
118
  ...parsed.value,
119
+ timeout,
110
120
  userId: ctx.state.auth?.userId,
111
121
  onAgentStart: (agentName) => {
112
122
  writer.swarmEvent('agent_start', { agentName, timestamp: Date.now() });
@@ -121,7 +131,7 @@ export function createSwarmRoutes() {
121
131
  onAgentError: (agentName, error) => {
122
132
  writer.swarmEvent('agent_error', {
123
133
  agentName,
124
- error: resolveError(error, `Swarm agent ${agentName} error`).body.error.message,
134
+ error: describeError(error, `Swarm agent ${agentName} error`).message,
125
135
  });
126
136
  },
127
137
  onMessage: (message) => {
@@ -148,8 +158,8 @@ export function createSwarmRoutes() {
148
158
  writer.error('Swarms package not installed', 'UNIMPLEMENTED');
149
159
  }
150
160
  else {
151
- const { body } = resolveError(error, 'Swarm stream error');
152
- writer.error(body.error.message, body.error.code);
161
+ const failure = describeError(error, 'Swarm stream error');
162
+ writer.error(failure.message, failure.code);
153
163
  }
154
164
  }
155
165
  finally {
@@ -161,15 +171,11 @@ export function createSwarmRoutes() {
161
171
  const { name } = ctx.params;
162
172
  const swarmConfig = getOwn(swarms, name);
163
173
  if (!swarmConfig) {
164
- ctx.status = 404;
165
- ctx.body = { error: { message: `Swarm '${name}' not found`, code: 'NOT_FOUND' } };
174
+ notFound(ctx, `Swarm '${name}' not found`);
166
175
  return;
167
176
  }
168
177
  if (!swarmConfig.blackboard?.enabled) {
169
- ctx.status = 400;
170
- ctx.body = {
171
- error: { message: 'Blackboard not enabled for this swarm', code: 'INVALID_INPUT' },
172
- };
178
+ invalidInput(ctx, 'Blackboard not enabled for this swarm');
173
179
  return;
174
180
  }
175
181
  const response = {
@@ -1 +1 @@
1
- {"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/routes/swarms.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAmBlE,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,cAAc,CAAC,CAoG3D"}
1
+ {"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAuBlE,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,cAAc,CAAC,CAgG3D"}
@@ -1,17 +1,18 @@
1
1
  import Router from '@koa/router';
2
2
  import { assertThreadAccess, ensureThreadAccess } from '@cogitator-ai/core';
3
3
  import { countMessageTokens } from '@cogitator-ai/memory';
4
- import { resolveError } from '../utils/errors.js';
5
- import { getRequestBody } from '../utils/request.js';
6
- import { parseAddMessageRequest } from '@cogitator-ai/server-shared';
7
- function respondWithError(ctx, error, label) {
8
- const { status, body } = resolveError(error, label);
9
- ctx.status = status;
10
- ctx.body = body;
11
- }
4
+ import { invalidInput, respondWithError, sendError } from '../utils/errors.js';
5
+ import { getRequestBody, refuseThread } from '../utils/request.js';
6
+ import { parseAddMessageRequest, parseThreadPageQuery, readThreadPage, } from '@cogitator-ai/server-shared';
12
7
  function respondMemoryUnavailable(ctx) {
13
- ctx.status = 503;
14
- ctx.body = { error: { message: 'Memory not configured', code: 'UNAVAILABLE' } };
8
+ sendError(ctx, { status: 503, code: 'UNAVAILABLE', message: 'Memory not configured' });
9
+ }
10
+ /** Answers the refusal `authorizeThread` gives the thread, and says whether there was one */
11
+ async function threadRefused(ctx, threadId) {
12
+ const refusal = await refuseThread(ctx, threadId);
13
+ if (refusal)
14
+ sendError(ctx, refusal);
15
+ return refusal !== undefined;
15
16
  }
16
17
  export function createThreadRoutes() {
17
18
  const router = new Router();
@@ -22,22 +23,17 @@ export function createThreadRoutes() {
22
23
  return;
23
24
  }
24
25
  const { id } = ctx.params;
26
+ const page = parseThreadPageQuery(ctx.query);
27
+ if (!page.ok) {
28
+ invalidInput(ctx, page.message);
29
+ return;
30
+ }
31
+ if (await threadRefused(ctx, id))
32
+ return;
25
33
  const userId = ctx.state.auth?.userId;
26
34
  try {
27
- await assertThreadAccess(memory, id, userId);
28
- const result = await memory.getEntries({ threadId: id });
29
- if (!result.success) {
30
- respondWithError(ctx, new Error(result.error), 'Thread get error');
31
- return;
32
- }
33
- const entries = result.data;
34
- const now = Date.now();
35
- const response = {
36
- id,
37
- messages: entries.map((entry) => entry.message),
38
- createdAt: entries.length > 0 ? entries[0].createdAt.getTime() : now,
39
- updatedAt: entries.length > 0 ? entries[entries.length - 1].createdAt.getTime() : now,
40
- };
35
+ const thread = await assertThreadAccess(memory, id, userId);
36
+ const response = await readThreadPage(memory, id, page.value, thread);
41
37
  ctx.body = response;
42
38
  }
43
39
  catch (error) {
@@ -55,10 +51,11 @@ export function createThreadRoutes() {
55
51
  roles: ctx.state.cogitator.threadMessageRoles,
56
52
  });
57
53
  if (!parsed.ok) {
58
- ctx.status = 400;
59
- ctx.body = { error: { message: parsed.message, code: 'INVALID_INPUT' } };
54
+ invalidInput(ctx, parsed.message);
60
55
  return;
61
56
  }
57
+ if (await threadRefused(ctx, id))
58
+ return;
62
59
  const message = { role: parsed.value.role, content: parsed.value.content };
63
60
  const userId = ctx.state.auth?.userId;
64
61
  try {
@@ -87,6 +84,8 @@ export function createThreadRoutes() {
87
84
  return;
88
85
  }
89
86
  const { id } = ctx.params;
87
+ if (await threadRefused(ctx, id))
88
+ return;
90
89
  const userId = ctx.state.auth?.userId;
91
90
  try {
92
91
  await assertThreadAccess(memory, id, userId);
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/routes/threads.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAQxE,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,cAAc,CAAC,CAwJ7D"}
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/routes/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,cAAc,EAAwB,MAAM,aAAa,CAAC;AAmBxE,wBAAgB,oBAAoB,IAAI,MAAM,CAAC,cAAc,CAAC,CA+I7D"}