@pellux/goodvibes-daemon-sdk 0.33.2 → 0.33.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.
@@ -18,7 +18,7 @@ export interface IntegrationHelperServiceLike {
18
18
  getRouteSnapshot(): unknown;
19
19
  getRemoteSnapshot(): unknown;
20
20
  getHealthSnapshot(): unknown;
21
- getAccountsSnapshot(): Promise<Record<string, unknown>>;
21
+ getAccountsSnapshot(): Promise<unknown>;
22
22
  getSettingsSnapshot(): unknown;
23
23
  getSecuritySettingsReport(): unknown;
24
24
  getContinuitySnapshot(): unknown;
@@ -1 +1 @@
1
- {"version":3,"file":"integration-route-types.d.ts","sourceRoot":"","sources":["../src/integration-route-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integration-route-types.d.ts","sourceRoot":"","sources":["../src/integration-route-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"integration-routes.d.ts","sourceRoot":"","sources":["../src/integration-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,KAAK,EAAE,6BAA6B,EAAoD,MAAM,8BAA8B,CAAC;AA6DpI,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,6BAA6B,GACrC,8BAA8B,CAoJhC"}
1
+ {"version":3,"file":"integration-routes.d.ts","sourceRoot":"","sources":["../src/integration-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,KAAK,EAAE,6BAA6B,EAAoD,MAAM,8BAA8B,CAAC;AA6DpI,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,6BAA6B,GACrC,8BAA8B,CA4IhC"}
@@ -60,15 +60,7 @@ export function createDaemonIntegrationRouteHandlers(context) {
60
60
  if (!context.integrationHelpers) {
61
61
  return jsonErrorResponse({ error: 'Integration helper service unavailable' }, { status: 503 });
62
62
  }
63
- const [snapshot, channelAccounts] = await Promise.all([
64
- context.integrationHelpers.getAccountsSnapshot(),
65
- context.channelPlugins.listAccounts(),
66
- ]);
67
- return Response.json({
68
- ...snapshot,
69
- channelCount: channelAccounts.length,
70
- channels: channelAccounts,
71
- });
63
+ return Response.json(await context.integrationHelpers.getAccountsSnapshot());
72
64
  },
73
65
  getProviders: async () => Response.json({ providers: await context.providerRuntime.listSnapshots() }),
74
66
  getProvider: async (providerId) => {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-session-routes.d.ts","sourceRoot":"","sources":["../src/runtime-session-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAItG,OAAO,KAAK,EAEV,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAqB5B,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,yBAAyB,GACjC,iCAAiC,GAAG,8BAA8B,CAkBpE;AA2XD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAErE"}
1
+ {"version":3,"file":"runtime-session-routes.d.ts","sourceRoot":"","sources":["../src/runtime-session-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAItG,OAAO,KAAK,EAEV,yBAAyB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAmJ5B,wBAAgB,uCAAuC,CACrD,OAAO,EAAE,yBAAyB,GACjC,iCAAiC,GAAG,8BAA8B,CAkBpE;AAgYD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAErE"}
@@ -1,13 +1,99 @@
1
1
  import { withAdmin } from './auth-helpers.js';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { jsonErrorResponse } from './error-response.js';
4
- import { createRouteBodySchema, createRouteBodySchemaRegistry, readBoundedPositiveInteger, readOptionalStringField, readStringArrayField, } from './route-helpers.js';
4
+ import { createRouteBodySchema, createRouteBodySchemaRegistry, isJsonRecord, readBoundedPositiveInteger, readOptionalStringField, readStringArrayField, } from './route-helpers.js';
5
5
  const DEFAULT_LIST_LIMIT = 100;
6
6
  const MAX_LIST_LIMIT = 500;
7
7
  const MAX_SESSION_TOOL_NAMES = 64;
8
+ const SHARED_SESSION_KINDS = new Set(['tui', 'companion-task', 'companion-chat']);
9
+ const SHARED_SESSION_STATUSES = new Set(['active', 'closed']);
8
10
  function readBoundedLimit(url, key = 'limit') {
9
11
  return readBoundedPositiveInteger(url.searchParams.get(key), DEFAULT_LIST_LIMIT, MAX_LIST_LIMIT);
10
12
  }
13
+ function toSharedSessionRecordResponse(sessionId, session, options = {}) {
14
+ const record = isJsonRecord(session) ? session : {};
15
+ const id = readNonEmptyString(record.id) ?? sessionId;
16
+ const now = Date.now();
17
+ const createdAt = readFiniteNumber(record.createdAt) ?? now;
18
+ const updatedAt = readFiniteNumber(record.updatedAt) ?? createdAt;
19
+ const lastMessageAt = readFiniteNumber(record.lastMessageAt);
20
+ const closedAt = readFiniteNumber(record.closedAt);
21
+ const lastActivityAt = readFiniteNumber(record.lastActivityAt) ?? lastMessageAt ?? updatedAt;
22
+ const kind = readSessionKind(record.kind);
23
+ const status = readSessionStatus(record.status) ?? options.status ?? 'active';
24
+ const activeAgentId = readNonEmptyString(record.activeAgentId);
25
+ const lastAgentId = readNonEmptyString(record.lastAgentId);
26
+ const lastError = readNonEmptyString(record.lastError);
27
+ return {
28
+ id,
29
+ kind,
30
+ title: readNonEmptyString(record.title) ?? `Session ${id}`,
31
+ status,
32
+ createdAt,
33
+ updatedAt,
34
+ ...(lastMessageAt !== undefined ? { lastMessageAt } : {}),
35
+ ...(closedAt !== undefined ? { closedAt } : {}),
36
+ lastActivityAt,
37
+ messageCount: Math.max(readFiniteNumber(record.messageCount) ?? 0, options.messageCount ?? 0),
38
+ pendingInputCount: Math.max(readFiniteNumber(record.pendingInputCount) ?? 0, options.pendingInputCount ?? 0),
39
+ routeIds: readStringArray(record.routeIds),
40
+ surfaceKinds: readStringArray(record.surfaceKinds),
41
+ participants: readParticipants(record.participants),
42
+ ...(activeAgentId ? { activeAgentId } : {}),
43
+ ...(lastAgentId ? { lastAgentId } : {}),
44
+ ...(lastError ? { lastError } : {}),
45
+ metadata: isJsonRecord(record.metadata) ? record.metadata : {},
46
+ };
47
+ }
48
+ function readSessionKind(value) {
49
+ return typeof value === 'string' && SHARED_SESSION_KINDS.has(value)
50
+ ? value
51
+ : 'tui';
52
+ }
53
+ function readSessionStatus(value) {
54
+ return typeof value === 'string' && SHARED_SESSION_STATUSES.has(value)
55
+ ? value
56
+ : undefined;
57
+ }
58
+ function readNonEmptyString(value) {
59
+ return typeof value === 'string' && value.trim().length > 0 ? value : undefined;
60
+ }
61
+ function readFiniteNumber(value) {
62
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
63
+ }
64
+ function readStringArray(value) {
65
+ if (!Array.isArray(value))
66
+ return [];
67
+ return value.filter((entry) => typeof entry === 'string' && entry.trim().length > 0);
68
+ }
69
+ function readParticipants(value) {
70
+ if (!Array.isArray(value))
71
+ return [];
72
+ const output = [];
73
+ for (const entry of value) {
74
+ if (!isJsonRecord(entry))
75
+ continue;
76
+ const surfaceKind = readNonEmptyString(entry.surfaceKind);
77
+ const surfaceId = readNonEmptyString(entry.surfaceId);
78
+ const lastSeenAt = readFiniteNumber(entry.lastSeenAt);
79
+ if (!surfaceKind || !surfaceId || lastSeenAt === undefined)
80
+ continue;
81
+ const externalId = readNonEmptyString(entry.externalId);
82
+ const userId = readNonEmptyString(entry.userId);
83
+ const displayName = readNonEmptyString(entry.displayName);
84
+ const routeId = readNonEmptyString(entry.routeId);
85
+ output.push({
86
+ surfaceKind,
87
+ surfaceId,
88
+ ...(externalId ? { externalId } : {}),
89
+ ...(userId ? { userId } : {}),
90
+ ...(displayName ? { displayName } : {}),
91
+ ...(routeId ? { routeId } : {}),
92
+ lastSeenAt,
93
+ });
94
+ }
95
+ return output;
96
+ }
11
97
  export function createDaemonRuntimeSessionRouteHandlers(context) {
12
98
  return {
13
99
  createSharedSession: async (request) => withAdmin(context, request, () => handleCreateSharedSession(context, request)),
@@ -70,7 +156,9 @@ async function handleCreateSharedSession(context, req) {
70
156
  }
71
157
  : undefined,
72
158
  });
73
- return context.recordApiResponse(req, '/api/sessions', Response.json({ session }, { status: 201 }));
159
+ return context.recordApiResponse(req, '/api/sessions', Response.json({
160
+ session: toSharedSessionRecordResponse(session.id, session),
161
+ }, { status: 201 }));
74
162
  }
75
163
  async function handlePostTask(context, req) {
76
164
  const body = await context.parseJsonBody(req);
@@ -176,9 +264,10 @@ async function handleGetSharedSession(context, sessionId) {
176
264
  if (!session) {
177
265
  return jsonErrorResponse({ error: 'Unknown shared session' }, { status: 404 });
178
266
  }
267
+ const messages = context.sessionBroker.getMessages(sessionId, 100);
179
268
  return Response.json({
180
- session,
181
- messages: context.sessionBroker.getMessages(sessionId, 100),
269
+ session: toSharedSessionRecordResponse(sessionId, session, { messageCount: messages.length }),
270
+ messages,
182
271
  });
183
272
  }
184
273
  async function handleSharedSessionLifecycle(context, sessionId, action) {
@@ -187,7 +276,7 @@ async function handleSharedSessionLifecycle(context, sessionId, action) {
187
276
  ? await context.sessionBroker.closeSession(sessionId)
188
277
  : await context.sessionBroker.reopenSession(sessionId);
189
278
  return session
190
- ? Response.json({ session })
279
+ ? Response.json({ session: toSharedSessionRecordResponse(sessionId, session, { status: action === 'close' ? 'closed' : 'active' }) })
191
280
  : jsonErrorResponse({ error: 'Unknown shared session' }, { status: 404 });
192
281
  }
193
282
  async function handleGetSharedSessionMessages(context, sessionId, url) {
@@ -197,9 +286,10 @@ async function handleGetSharedSessionMessages(context, sessionId, url) {
197
286
  return jsonErrorResponse({ error: 'Unknown shared session' }, { status: 404 });
198
287
  }
199
288
  const limit = readBoundedLimit(url);
289
+ const messages = context.sessionBroker.getMessages(sessionId, limit);
200
290
  return Response.json({
201
- session,
202
- messages: context.sessionBroker.getMessages(sessionId, limit),
291
+ session: toSharedSessionRecordResponse(sessionId, session, { messageCount: messages.length }),
292
+ messages,
203
293
  });
204
294
  }
205
295
  async function handleGetSharedSessionInputs(context, sessionId, url) {
@@ -209,9 +299,10 @@ async function handleGetSharedSessionInputs(context, sessionId, url) {
209
299
  return jsonErrorResponse({ error: 'Unknown shared session' }, { status: 404 });
210
300
  }
211
301
  const limit = readBoundedLimit(url);
302
+ const inputs = context.sessionBroker.getInputs(sessionId, limit);
212
303
  return Response.json({
213
- session,
214
- inputs: context.sessionBroker.getInputs(sessionId, limit),
304
+ session: toSharedSessionRecordResponse(sessionId, session, { pendingInputCount: inputs.length }),
305
+ inputs,
215
306
  });
216
307
  }
217
308
  /**
@@ -410,7 +501,7 @@ function readSharedSessionRoutingIntent(value) {
410
501
  async function respondToSessionSubmission(context, req, submission, taskText, path, logLabel, spawnOptions = {}) {
411
502
  if (submission.mode === 'continued-live' || submission.mode === 'queued-follow-up') {
412
503
  return context.recordApiResponse(req, path, Response.json({
413
- session: submission.session,
504
+ session: toSharedSessionRecordResponse(submission.session.id, submission.session),
414
505
  message: submission.userMessage ?? null,
415
506
  input: submission.input,
416
507
  mode: submission.mode,
@@ -419,7 +510,7 @@ async function respondToSessionSubmission(context, req, submission, taskText, pa
419
510
  }
420
511
  if (submission.mode === 'rejected') {
421
512
  return context.recordApiResponse(req, path, Response.json({
422
- session: submission.session,
513
+ session: toSharedSessionRecordResponse(submission.session.id, submission.session),
423
514
  message: submission.userMessage ?? null,
424
515
  input: submission.input,
425
516
  mode: submission.mode,
@@ -445,7 +536,10 @@ async function respondToSessionSubmission(context, req, submission, taskText, pa
445
536
  sessionId: submission.session.id,
446
537
  });
447
538
  return context.recordApiResponse(req, path, Response.json({
448
- session: context.sessionBroker.getSession(submission.session.id),
539
+ session: (() => {
540
+ const session = context.sessionBroker.getSession(submission.session.id);
541
+ return session ? toSharedSessionRecordResponse(submission.session.id, session) : null;
542
+ })(),
449
543
  message: submission.userMessage ?? null,
450
544
  input: {
451
545
  ...submission.input,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-daemon-sdk",
3
- "version": "0.33.2",
3
+ "version": "0.33.4",
4
4
  "engines": {
5
5
  "bun": "1.3.10",
6
6
  "node": ">=22.0.0"
@@ -157,8 +157,8 @@
157
157
  "control-plane"
158
158
  ],
159
159
  "dependencies": {
160
- "@pellux/goodvibes-contracts": "0.33.2",
161
- "@pellux/goodvibes-errors": "0.33.2"
160
+ "@pellux/goodvibes-contracts": "0.33.4",
161
+ "@pellux/goodvibes-errors": "0.33.4"
162
162
  },
163
163
  "publishConfig": {
164
164
  "access": "public"