@kb-labs/agent-entry 2.93.0 → 2.96.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 (79) hide show
  1. package/dist/cli/commands/diff.js +4 -4
  2. package/dist/cli/commands/diff.js.map +1 -1
  3. package/dist/cli/commands/history.js +6 -6
  4. package/dist/cli/commands/history.js.map +1 -1
  5. package/dist/cli/commands/quality-report.js +3 -3
  6. package/dist/cli/commands/quality-report.js.map +1 -1
  7. package/dist/cli/commands/rollback.js +1 -1
  8. package/dist/cli/commands/rollback.js.map +1 -1
  9. package/dist/cli/commands/run.js +24 -7
  10. package/dist/cli/commands/run.js.map +1 -1
  11. package/dist/cli/commands/trace-context.js +3 -3
  12. package/dist/cli/commands/trace-context.js.map +1 -1
  13. package/dist/cli/commands/trace-diagnose.js +3 -3
  14. package/dist/cli/commands/trace-diagnose.js.map +1 -1
  15. package/dist/cli/commands/trace-stats.js +3 -3
  16. package/dist/cli/commands/trace-stats.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +40 -35
  19. package/dist/index.js.map +1 -1
  20. package/dist/manifest.d.ts +62 -7
  21. package/dist/manifest.js +40 -35
  22. package/dist/manifest.js.map +1 -1
  23. package/dist/rest/handlers/approve-handler.js +51 -47
  24. package/dist/rest/handlers/approve-handler.js.map +1 -1
  25. package/dist/rest/handlers/approve-session-plan-handler.js +38 -34
  26. package/dist/rest/handlers/approve-session-plan-handler.js.map +1 -1
  27. package/dist/rest/handlers/correct-handler.js +49 -45
  28. package/dist/rest/handlers/correct-handler.js.map +1 -1
  29. package/dist/rest/handlers/create-session-handler.js +17 -13
  30. package/dist/rest/handlers/create-session-handler.js.map +1 -1
  31. package/dist/rest/handlers/execute-session-plan-handler.js +216 -208
  32. package/dist/rest/handlers/execute-session-plan-handler.js.map +1 -1
  33. package/dist/rest/handlers/generate-spec-handler.js +103 -98
  34. package/dist/rest/handlers/generate-spec-handler.js.map +1 -1
  35. package/dist/rest/handlers/get-file-diff-handler.js +35 -31
  36. package/dist/rest/handlers/get-file-diff-handler.js.map +1 -1
  37. package/dist/rest/handlers/get-session-handler.js +15 -11
  38. package/dist/rest/handlers/get-session-handler.js.map +1 -1
  39. package/dist/rest/handlers/get-session-plan-handler.js +28 -24
  40. package/dist/rest/handlers/get-session-plan-handler.js.map +1 -1
  41. package/dist/rest/handlers/get-session-turns-handler.js +27 -23
  42. package/dist/rest/handlers/get-session-turns-handler.js.map +1 -1
  43. package/dist/rest/handlers/get-spec-handler.js +22 -18
  44. package/dist/rest/handlers/get-spec-handler.js.map +1 -1
  45. package/dist/rest/handlers/list-file-changes-handler.js +25 -21
  46. package/dist/rest/handlers/list-file-changes-handler.js.map +1 -1
  47. package/dist/rest/handlers/list-sessions-handler.js +16 -12
  48. package/dist/rest/handlers/list-sessions-handler.js.map +1 -1
  49. package/dist/rest/handlers/rollback-handler.js +73 -69
  50. package/dist/rest/handlers/rollback-handler.js.map +1 -1
  51. package/dist/rest/handlers/run-handler.js +151 -147
  52. package/dist/rest/handlers/run-handler.js.map +1 -1
  53. package/dist/rest/handlers/sessions-handler.js +47 -35
  54. package/dist/rest/handlers/sessions-handler.js.map +1 -1
  55. package/dist/rest/handlers/status-handler.js +33 -29
  56. package/dist/rest/handlers/status-handler.js.map +1 -1
  57. package/dist/rest/handlers/stop-handler.js +37 -33
  58. package/dist/rest/handlers/stop-handler.js.map +1 -1
  59. package/dist/widgets/117.js +24 -1
  60. package/dist/widgets/{300.js → 215.js} +1 -1
  61. package/dist/widgets/370.js +1 -1
  62. package/dist/widgets/{805.js → 46.js} +92 -92
  63. package/dist/widgets/50.js +1 -1
  64. package/dist/widgets/62.js +96 -0
  65. package/dist/widgets/648.js +1 -0
  66. package/dist/widgets/669.js +1 -1
  67. package/dist/widgets/775.js +1 -1
  68. package/dist/widgets/78.js +1 -0
  69. package/dist/widgets/968.js +2 -2
  70. package/dist/widgets/__federation_expose_AgentsPage.js +1 -1
  71. package/dist/widgets/mf-manifest.json +31 -31
  72. package/dist/widgets/mf-stats.json +39 -39
  73. package/dist/widgets/remoteEntry.js +2 -2
  74. package/dist/ws/session-stream-handler.js +17 -6
  75. package/dist/ws/session-stream-handler.js.map +1 -1
  76. package/package.json +16 -15
  77. package/dist/widgets/418.js +0 -38
  78. package/dist/widgets/451.js +0 -1
  79. package/dist/widgets/694.js +0 -1
@@ -1,41 +1,45 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
  import { ChangeStore, generateUnifiedDiff, countDiffLines } from '@kb-labs/agent-history';
4
4
 
5
5
  // src/rest/handlers/get-file-diff-handler.ts
6
6
  var get_file_diff_handler_default = defineHandler({
7
7
  async execute(ctx, input) {
8
- const params = input.params;
9
- const sessionId = params?.sessionId;
10
- const changeId = params?.changeId;
11
- if (!sessionId) {
12
- throw new Error("Session ID is required");
8
+ try {
9
+ const params = input.params;
10
+ const sessionId = params?.sessionId;
11
+ const changeId = params?.changeId;
12
+ if (!sessionId) {
13
+ throw new Error("Session ID is required");
14
+ }
15
+ if (!changeId) {
16
+ throw new Error("Change ID is required");
17
+ }
18
+ const sessionManager = new SessionManager(ctx.cwd);
19
+ const session = await sessionManager.loadSession(sessionId);
20
+ const workingDir = session?.workingDir || ctx.cwd;
21
+ const store = new ChangeStore(workingDir);
22
+ const change = await store.get(sessionId, changeId);
23
+ if (!change) {
24
+ throw new Error(`Change not found: ${changeId} in session ${sessionId}`);
25
+ }
26
+ const diff = generateUnifiedDiff(change.filePath, change.before?.content, change.after.content, change.operation);
27
+ const { added, removed } = countDiffLines(diff);
28
+ return {
29
+ changeId: change.id,
30
+ filePath: change.filePath,
31
+ operation: change.operation,
32
+ diff,
33
+ before: change.before ? { hash: change.before.hash, size: change.before.size } : void 0,
34
+ after: { hash: change.after.hash, size: change.after.size },
35
+ linesAdded: added,
36
+ linesRemoved: removed,
37
+ isNew: !change.before,
38
+ timestamp: change.timestamp
39
+ };
40
+ } catch (err) {
41
+ rethrowForRest(err);
13
42
  }
14
- if (!changeId) {
15
- throw new Error("Change ID is required");
16
- }
17
- const sessionManager = new SessionManager(ctx.cwd);
18
- const session = await sessionManager.loadSession(sessionId);
19
- const workingDir = session?.workingDir || ctx.cwd;
20
- const store = new ChangeStore(workingDir);
21
- const change = await store.get(sessionId, changeId);
22
- if (!change) {
23
- throw new Error(`Change not found: ${changeId} in session ${sessionId}`);
24
- }
25
- const diff = generateUnifiedDiff(change.filePath, change.before?.content, change.after.content, change.operation);
26
- const { added, removed } = countDiffLines(diff);
27
- return {
28
- changeId: change.id,
29
- filePath: change.filePath,
30
- operation: change.operation,
31
- diff,
32
- before: change.before ? { hash: change.before.hash, size: change.before.size } : void 0,
33
- after: { hash: change.after.hash, size: change.after.size },
34
- linesAdded: added,
35
- linesRemoved: removed,
36
- isNew: !change.before,
37
- timestamp: change.timestamp
38
- };
39
43
  }
40
44
  });
41
45
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/get-file-diff-handler.ts"],"names":[],"mappings":";;;;;AAqBA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAgD;AAClF,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,IAAA,MAAM,WAAW,MAAA,EAAQ,QAAA;AACzB,IAAA,IAAI,CAAC,SAAA,EAAW;AAAC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAAE;AAC3D,IAAA,IAAI,CAAC,QAAA,EAAU;AAAC,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IAAE;AAEzD,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,GAAA,CAAI,GAAA;AAE9C,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,UAAU,CAAA;AACxC,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,WAAW,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,YAAA,EAAe,SAAS,CAAA,CAAE,CAAA;AAAA,IAAE;AAEvF,IAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA;AAChH,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,eAAe,IAAI,CAAA;AAE9C,IAAA,OAAO;AAAA,MACL,UAAU,MAAA,CAAO,EAAA;AAAA,MACjB,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,IAAA;AAAA,MACA,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,EAAK,GAAI,MAAA;AAAA,MACjF,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,MAC1D,UAAA,EAAY,KAAA;AAAA,MACZ,YAAA,EAAc,OAAA;AAAA,MACd,KAAA,EAAO,CAAC,MAAA,CAAO,MAAA;AAAA,MACf,WAAW,MAAA,CAAO;AAAA,KACpB;AAAA,EACF;AACF,CAAC","file":"get-file-diff-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/changes/:changeId/diff — Unified diff for a file change snapshot.\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport { ChangeStore, generateUnifiedDiff, countDiffLines } from '@kb-labs/agent-history';\n\ninterface GetFileDiffResponse {\n changeId: string;\n filePath: string;\n operation: 'write' | 'patch' | 'delete';\n diff: string;\n before?: { hash: string; size: number };\n after: { hash: string; size: number };\n linesAdded: number;\n linesRemoved: number;\n isNew: boolean;\n timestamp: string;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput): Promise<GetFileDiffResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n const changeId = params?.changeId;\n if (!sessionId) {throw new Error('Session ID is required');}\n if (!changeId) {throw new Error('Change ID is required');}\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n const workingDir = session?.workingDir || ctx.cwd;\n\n const store = new ChangeStore(workingDir);\n const change = await store.get(sessionId, changeId);\n if (!change) {throw new Error(`Change not found: ${changeId} in session ${sessionId}`);}\n\n const diff = generateUnifiedDiff(change.filePath, change.before?.content, change.after.content, change.operation);\n const { added, removed } = countDiffLines(diff);\n\n return {\n changeId: change.id,\n filePath: change.filePath,\n operation: change.operation,\n diff,\n before: change.before ? { hash: change.before.hash, size: change.before.size } : undefined,\n after: { hash: change.after.hash, size: change.after.size },\n linesAdded: added,\n linesRemoved: removed,\n isNew: !change.before,\n timestamp: change.timestamp,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/get-file-diff-handler.ts"],"names":[],"mappings":";;;;;AAqBA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAgD;AAClF,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,MAAA,MAAM,WAAW,MAAA,EAAQ,QAAA;AACzB,MAAA,IAAI,CAAC,SAAA,EAAW;AAAC,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAAE;AAC3D,MAAA,IAAI,CAAC,QAAA,EAAU;AAAC,QAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,MAAE;AAEzD,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,MAAA,MAAM,UAAA,GAAa,OAAA,EAAS,UAAA,IAAc,GAAA,CAAI,GAAA;AAE9C,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,UAAU,CAAA;AACxC,MAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,GAAA,CAAI,WAAW,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,MAAA,EAAQ;AAAC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAQ,CAAA,YAAA,EAAe,SAAS,CAAA,CAAE,CAAA;AAAA,MAAE;AAEvF,MAAA,MAAM,IAAA,GAAO,mBAAA,CAAoB,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA;AAChH,MAAA,MAAM,EAAE,KAAA,EAAO,OAAA,EAAQ,GAAI,eAAe,IAAI,CAAA;AAE9C,MAAA,OAAO;AAAA,QACL,UAAU,MAAA,CAAO,EAAA;AAAA,QACjB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,IAAA;AAAA,QACA,MAAA,EAAQ,MAAA,CAAO,MAAA,GAAS,EAAE,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAA,EAAK,GAAI,KAAA,CAAA;AAAA,QACjF,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,CAAO,MAAM,IAAA,EAAM,IAAA,EAAM,MAAA,CAAO,KAAA,CAAM,IAAA,EAAK;AAAA,QAC1D,UAAA,EAAY,KAAA;AAAA,QACZ,YAAA,EAAc,OAAA;AAAA,QACd,KAAA,EAAO,CAAC,MAAA,CAAO,MAAA;AAAA,QACf,WAAW,MAAA,CAAO;AAAA,OACpB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"get-file-diff-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/changes/:changeId/diff — Unified diff for a file change snapshot.\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport { ChangeStore, generateUnifiedDiff, countDiffLines } from '@kb-labs/agent-history';\n\ninterface GetFileDiffResponse {\n changeId: string;\n filePath: string;\n operation: 'write' | 'patch' | 'delete';\n diff: string;\n before?: { hash: string; size: number };\n after: { hash: string; size: number };\n linesAdded: number;\n linesRemoved: number;\n isNew: boolean;\n timestamp: string;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput): Promise<GetFileDiffResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n const changeId = params?.changeId;\n if (!sessionId) {throw new Error('Session ID is required');}\n if (!changeId) {throw new Error('Change ID is required');}\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n const workingDir = session?.workingDir || ctx.cwd;\n\n const store = new ChangeStore(workingDir);\n const change = await store.get(sessionId, changeId);\n if (!change) {throw new Error(`Change not found: ${changeId} in session ${sessionId}`);}\n\n const diff = generateUnifiedDiff(change.filePath, change.before?.content, change.after.content, change.operation);\n const { added, removed } = countDiffLines(diff);\n\n return {\n changeId: change.id,\n filePath: change.filePath,\n operation: change.operation,\n diff,\n before: change.before ? { hash: change.before.hash, size: change.before.size } : undefined,\n after: { hash: change.after.hash, size: change.after.size },\n linesAdded: added,\n linesRemoved: removed,\n isNew: !change.before,\n timestamp: change.timestamp,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,20 +1,24 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
 
4
4
  // src/rest/handlers/get-session-handler.ts
5
5
  var get_session_handler_default = defineHandler({
6
6
  async execute(ctx, input) {
7
- const params = input.params;
8
- const sessionId = params?.sessionId;
9
- if (!sessionId) {
10
- throw new Error("Session ID is required");
7
+ try {
8
+ const params = input.params;
9
+ const sessionId = params?.sessionId;
10
+ if (!sessionId) {
11
+ throw new Error("Session ID is required");
12
+ }
13
+ const sessionManager = new SessionManager(ctx.cwd);
14
+ const session = await sessionManager.getSessionInfo(sessionId);
15
+ if (!session) {
16
+ throw new Error(`Session not found: ${sessionId}`);
17
+ }
18
+ return { session };
19
+ } catch (err) {
20
+ rethrowForRest(err);
11
21
  }
12
- const sessionManager = new SessionManager(ctx.cwd);
13
- const session = await sessionManager.getSessionInfo(sessionId);
14
- if (!session) {
15
- throw new Error(`Session not found: ${sessionId}`);
16
- }
17
- return { session };
18
22
  }
19
23
  });
20
24
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/get-session-handler.ts"],"names":[],"mappings":";;;;AAYA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC6B;AAC7B,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAE1B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,cAAA,CAAe,SAAS,CAAA;AAE7D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,EAAE,OAAA,EAAQ;AAAA,EACnB;AACF,CAAC","file":"get-session-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId - Get session details\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { GetSessionResponse } from '@kb-labs/agent-contracts';\n\ninterface GetSessionRequest {\n sessionId?: string;\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionRequest>\n ): Promise<GetSessionResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.getSessionInfo(sessionId);\n\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n return { session };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/get-session-handler.ts"],"names":[],"mappings":";;;;AAYA,IAAO,8BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC6B;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAE1B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,cAAA,CAAe,SAAS,CAAA;AAE7D,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,MACnD;AAEA,MAAA,OAAO,EAAE,OAAA,EAAQ;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"get-session-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId - Get session details\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { GetSessionResponse } from '@kb-labs/agent-contracts';\n\ninterface GetSessionRequest {\n sessionId?: string;\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionRequest>\n ): Promise<GetSessionResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.getSessionInfo(sessionId);\n\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n return { session };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager, PlanDocumentService } from '@kb-labs/agent-core';
3
3
  import { promises } from 'fs';
4
4
 
@@ -21,30 +21,34 @@ async function pathExists(filePath) {
21
21
  }
22
22
  var get_session_plan_handler_default = defineHandler({
23
23
  async execute(ctx, input) {
24
- const params = input.params;
25
- const sessionId = params?.sessionId;
26
- if (!sessionId) {
27
- throw new Error("Session ID is required");
24
+ try {
25
+ const params = input.params;
26
+ const sessionId = params?.sessionId;
27
+ if (!sessionId) {
28
+ throw new Error("Session ID is required");
29
+ }
30
+ const sessionManager = new SessionManager(ctx.cwd);
31
+ const session = await sessionManager.loadSession(sessionId);
32
+ if (!session) {
33
+ throw new Error(`Session not found: ${sessionId}`);
34
+ }
35
+ const workingDir = session.workingDir || ctx.cwd;
36
+ const manager = new SessionManager(workingDir);
37
+ const planPath = manager.getSessionPlanPath(sessionId);
38
+ const plan = await loadPlan(planPath);
39
+ if (!plan) {
40
+ return { sessionId, plan: null };
41
+ }
42
+ const documentService = new PlanDocumentService(workingDir);
43
+ const canonicalPath = documentService.getPlanPath(plan);
44
+ return {
45
+ sessionId,
46
+ plan,
47
+ planPath: await pathExists(canonicalPath) ? canonicalPath : void 0
48
+ };
49
+ } catch (err) {
50
+ rethrowForRest(err);
28
51
  }
29
- const sessionManager = new SessionManager(ctx.cwd);
30
- const session = await sessionManager.loadSession(sessionId);
31
- if (!session) {
32
- throw new Error(`Session not found: ${sessionId}`);
33
- }
34
- const workingDir = session.workingDir || ctx.cwd;
35
- const manager = new SessionManager(workingDir);
36
- const planPath = manager.getSessionPlanPath(sessionId);
37
- const plan = await loadPlan(planPath);
38
- if (!plan) {
39
- return { sessionId, plan: null };
40
- }
41
- const documentService = new PlanDocumentService(workingDir);
42
- const canonicalPath = documentService.getPlanPath(plan);
43
- return {
44
- sessionId,
45
- plan,
46
- planPath: await pathExists(canonicalPath) ? canonicalPath : void 0
47
- };
48
52
  }
49
53
  });
50
54
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/get-session-plan-handler.ts"],"names":["fs"],"mappings":";;;;;AAcA,eAAe,SAAS,QAAA,EAA4C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,eAAe,WAAW,QAAA,EAAoC;AAC5D,EAAA,IAAI;AACF,IAAA,MAAMA,QAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,IAAO,mCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACiC;AACjC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,UAAU,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,kBAAA,CAAmB,SAAS,CAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,QAAQ,CAAA;AAEpC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,IACjC;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAI,mBAAA,CAAoB,UAAU,CAAA;AAC1D,IAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,WAAA,CAAY,IAAI,CAAA;AAEtD,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU,MAAM,UAAA,CAAW,aAAa,IAAI,aAAA,GAAgB;AAAA,KAC9D;AAAA,EACF;AACF,CAAC","file":"get-session-plan-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/plan\n * Get current session plan (JSON + canonical markdown path if present).\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager, PlanDocumentService } from '@kb-labs/agent-core';\nimport type { GetSessionPlanResponse, TaskPlan } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\n\ninterface GetSessionPlanRequest {\n sessionId?: string;\n}\n\nasync function loadPlan(planPath: string): Promise<TaskPlan | null> {\n try {\n const content = await fs.readFile(planPath, 'utf-8');\n return JSON.parse(content) as TaskPlan;\n } catch {\n return null;\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionPlanRequest>\n ): Promise<GetSessionPlanResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const workingDir = session.workingDir || ctx.cwd;\n const manager = new SessionManager(workingDir);\n const planPath = manager.getSessionPlanPath(sessionId);\n const plan = await loadPlan(planPath);\n\n if (!plan) {\n return { sessionId, plan: null };\n }\n\n const documentService = new PlanDocumentService(workingDir);\n const canonicalPath = documentService.getPlanPath(plan);\n\n return {\n sessionId,\n plan,\n planPath: await pathExists(canonicalPath) ? canonicalPath : undefined,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/get-session-plan-handler.ts"],"names":["fs"],"mappings":";;;;;AAcA,eAAe,SAAS,QAAA,EAA4C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,eAAe,WAAW,QAAA,EAAoC;AAC5D,EAAA,IAAI;AACF,IAAA,MAAMA,QAAA,CAAG,OAAO,QAAQ,CAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEA,IAAO,mCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACiC;AACjC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,MACnD;AAEA,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,UAAU,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,kBAAA,CAAmB,SAAS,CAAA;AACrD,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,QAAQ,CAAA;AAEpC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,IAAA,EAAK;AAAA,MACjC;AAEA,MAAA,MAAM,eAAA,GAAkB,IAAI,mBAAA,CAAoB,UAAU,CAAA;AAC1D,MAAA,MAAM,aAAA,GAAgB,eAAA,CAAgB,WAAA,CAAY,IAAI,CAAA;AAEtD,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA,IAAA;AAAA,QACA,QAAA,EAAU,MAAM,UAAA,CAAW,aAAa,IAAI,aAAA,GAAgB,KAAA;AAAA,OAC9D;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"get-session-plan-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/plan\n * Get current session plan (JSON + canonical markdown path if present).\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager, PlanDocumentService } from '@kb-labs/agent-core';\nimport type { GetSessionPlanResponse, TaskPlan } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\n\ninterface GetSessionPlanRequest {\n sessionId?: string;\n}\n\nasync function loadPlan(planPath: string): Promise<TaskPlan | null> {\n try {\n const content = await fs.readFile(planPath, 'utf-8');\n return JSON.parse(content) as TaskPlan;\n } catch {\n return null;\n }\n}\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionPlanRequest>\n ): Promise<GetSessionPlanResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const workingDir = session.workingDir || ctx.cwd;\n const manager = new SessionManager(workingDir);\n const planPath = manager.getSessionPlanPath(sessionId);\n const plan = await loadPlan(planPath);\n\n if (!plan) {\n return { sessionId, plan: null };\n }\n\n const documentService = new PlanDocumentService(workingDir);\n const canonicalPath = documentService.getPlanPath(plan);\n\n return {\n sessionId,\n plan,\n planPath: await pathExists(canonicalPath) ? canonicalPath : undefined,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,32 +1,36 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
 
4
4
  // src/rest/handlers/get-session-turns-handler.ts
5
5
  var get_session_turns_handler_default = defineHandler({
6
6
  async execute(ctx, input) {
7
- const params = input.params;
8
- const sessionId = params?.sessionId;
9
- const query = input.query;
10
- if (!sessionId) {
11
- throw new Error("Session ID is required");
7
+ try {
8
+ const params = input.params;
9
+ const sessionId = params?.sessionId;
10
+ const query = input.query;
11
+ if (!sessionId) {
12
+ throw new Error("Session ID is required");
13
+ }
14
+ const sessionManager = new SessionManager(ctx.cwd);
15
+ ctx.platform.logger.info(`[get-session-turns] cwd: ${ctx.cwd}, sessionId: ${sessionId}`);
16
+ ctx.platform.logger.info(`[get-session-turns] turnsPath: ${sessionManager.getTurnsPath(sessionId)}`);
17
+ const session = await sessionManager.loadSession(sessionId);
18
+ if (!session) {
19
+ throw new Error(`Session not found: ${sessionId}`);
20
+ }
21
+ let turns = await sessionManager.getTurns(sessionId);
22
+ ctx.platform.logger.info(`[get-session-turns] Found ${turns.length} turns`);
23
+ const total = turns.length;
24
+ if (query?.offset) {
25
+ turns = turns.slice(query.offset);
26
+ }
27
+ if (query?.limit) {
28
+ turns = turns.slice(0, query.limit);
29
+ }
30
+ return { turns, total };
31
+ } catch (err) {
32
+ rethrowForRest(err);
12
33
  }
13
- const sessionManager = new SessionManager(ctx.cwd);
14
- ctx.platform.logger.info(`[get-session-turns] cwd: ${ctx.cwd}, sessionId: ${sessionId}`);
15
- ctx.platform.logger.info(`[get-session-turns] turnsPath: ${sessionManager.getTurnsPath(sessionId)}`);
16
- const session = await sessionManager.loadSession(sessionId);
17
- if (!session) {
18
- throw new Error(`Session not found: ${sessionId}`);
19
- }
20
- let turns = await sessionManager.getTurns(sessionId);
21
- ctx.platform.logger.info(`[get-session-turns] Found ${turns.length} turns`);
22
- const total = turns.length;
23
- if (query?.offset) {
24
- turns = turns.slice(query.offset);
25
- }
26
- if (query?.limit) {
27
- turns = turns.slice(0, query.limit);
28
- }
29
- return { turns, total };
30
34
  }
31
35
  });
32
36
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/get-session-turns-handler.ts"],"names":[],"mappings":";;;;AAoBA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACkC;AAClC,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAEpB,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAEjD,IAAA,GAAA,CAAI,QAAA,CAAS,OAAO,IAAA,CAAK,CAAA,yBAAA,EAA4B,IAAI,GAAG,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAE,CAAA;AACvF,IAAA,GAAA,CAAI,QAAA,CAAS,OAAO,IAAA,CAAK,CAAA,+BAAA,EAAkC,eAAe,YAAA,CAAa,SAAS,CAAC,CAAA,CAAE,CAAA;AAGnG,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IACnD;AAGA,IAAA,IAAI,KAAA,GAAQ,MAAM,cAAA,CAAe,QAAA,CAAS,SAAS,CAAA;AAEnD,IAAA,GAAA,CAAI,SAAS,MAAA,CAAO,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAA,CAAM,MAAM,CAAA,MAAA,CAAQ,CAAA;AAG1E,IAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,OAAO,KAAA,EAAO;AAChB,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA;AAAA,IACpC;AAEA,IAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,EACxB;AACF,CAAC","file":"get-session-turns-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/turns - Get session turns (turn-based UI)\n * NEW (Phase 2): Returns ready-made Turn snapshots instead of raw events\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { Turn } from '@kb-labs/agent-contracts';\n\ninterface GetSessionTurnsRequest {\n sessionId?: string;\n limit?: number;\n offset?: number;\n}\n\ninterface GetSessionTurnsResponse {\n turns: Turn[];\n total: number;\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionTurnsRequest>\n ): Promise<GetSessionTurnsResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n const query = input.query as Partial<GetSessionTurnsRequest> | undefined;\n\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n\n ctx.platform.logger.info(`[get-session-turns] cwd: ${ctx.cwd}, sessionId: ${sessionId}`);\n ctx.platform.logger.info(`[get-session-turns] turnsPath: ${sessionManager.getTurnsPath(sessionId)}`);\n\n // Verify session exists\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Get turns (with lazy migration from events if needed)\n let turns = await sessionManager.getTurns(sessionId);\n\n ctx.platform.logger.info(`[get-session-turns] Found ${turns.length} turns`);\n\n // Apply pagination\n const total = turns.length;\n if (query?.offset) {\n turns = turns.slice(query.offset);\n }\n if (query?.limit) {\n turns = turns.slice(0, query.limit);\n }\n\n return { turns, total };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/get-session-turns-handler.ts"],"names":[],"mappings":";;;;AAoBA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EACkC;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAEpB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAEjD,MAAA,GAAA,CAAI,QAAA,CAAS,OAAO,IAAA,CAAK,CAAA,yBAAA,EAA4B,IAAI,GAAG,CAAA,aAAA,EAAgB,SAAS,CAAA,CAAE,CAAA;AACvF,MAAA,GAAA,CAAI,QAAA,CAAS,OAAO,IAAA,CAAK,CAAA,+BAAA,EAAkC,eAAe,YAAA,CAAa,SAAS,CAAC,CAAA,CAAE,CAAA;AAGnG,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,MACnD;AAGA,MAAA,IAAI,KAAA,GAAQ,MAAM,cAAA,CAAe,QAAA,CAAS,SAAS,CAAA;AAEnD,MAAA,GAAA,CAAI,SAAS,MAAA,CAAO,IAAA,CAAK,CAAA,0BAAA,EAA6B,KAAA,CAAM,MAAM,CAAA,MAAA,CAAQ,CAAA;AAG1E,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,MAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA;AAAA,MAClC;AACA,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,KAAK,CAAA;AAAA,MACpC;AAEA,MAAA,OAAO,EAAE,OAAO,KAAA,EAAM;AAAA,IACxB,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"get-session-turns-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/turns - Get session turns (turn-based UI)\n * NEW (Phase 2): Returns ready-made Turn snapshots instead of raw events\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { Turn } from '@kb-labs/agent-contracts';\n\ninterface GetSessionTurnsRequest {\n sessionId?: string;\n limit?: number;\n offset?: number;\n}\n\ninterface GetSessionTurnsResponse {\n turns: Turn[];\n total: number;\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<GetSessionTurnsRequest>\n ): Promise<GetSessionTurnsResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n const query = input.query as Partial<GetSessionTurnsRequest> | undefined;\n\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const sessionManager = new SessionManager(ctx.cwd);\n\n ctx.platform.logger.info(`[get-session-turns] cwd: ${ctx.cwd}, sessionId: ${sessionId}`);\n ctx.platform.logger.info(`[get-session-turns] turnsPath: ${sessionManager.getTurnsPath(sessionId)}`);\n\n // Verify session exists\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Get turns (with lazy migration from events if needed)\n let turns = await sessionManager.getTurns(sessionId);\n\n ctx.platform.logger.info(`[get-session-turns] Found ${turns.length} turns`);\n\n // Apply pagination\n const total = turns.length;\n if (query?.offset) {\n turns = turns.slice(query.offset);\n }\n if (query?.limit) {\n turns = turns.slice(0, query.limit);\n }\n\n return { turns, total };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
  import { promises } from 'fs';
4
4
 
@@ -13,24 +13,28 @@ async function loadSpec(specPath) {
13
13
  }
14
14
  var get_spec_handler_default = defineHandler({
15
15
  async execute(ctx, input) {
16
- const params = input.params;
17
- const sessionId = params?.sessionId;
18
- if (!sessionId) {
19
- throw new Error("Session ID is required");
16
+ try {
17
+ const params = input.params;
18
+ const sessionId = params?.sessionId;
19
+ if (!sessionId) {
20
+ throw new Error("Session ID is required");
21
+ }
22
+ const baseManager = new SessionManager(ctx.cwd);
23
+ const session = await baseManager.loadSession(sessionId);
24
+ if (!session) {
25
+ throw new Error(`Session not found: ${sessionId}`);
26
+ }
27
+ const workingDir = session.workingDir || ctx.cwd;
28
+ const manager = new SessionManager(workingDir);
29
+ const specPath = manager.getSessionSpecPath(sessionId);
30
+ const spec = await loadSpec(specPath);
31
+ return {
32
+ sessionId,
33
+ spec
34
+ };
35
+ } catch (err) {
36
+ rethrowForRest(err);
20
37
  }
21
- const baseManager = new SessionManager(ctx.cwd);
22
- const session = await baseManager.loadSession(sessionId);
23
- if (!session) {
24
- throw new Error(`Session not found: ${sessionId}`);
25
- }
26
- const workingDir = session.workingDir || ctx.cwd;
27
- const manager = new SessionManager(workingDir);
28
- const specPath = manager.getSessionSpecPath(sessionId);
29
- const spec = await loadSpec(specPath);
30
- return {
31
- sessionId,
32
- spec
33
- };
34
38
  }
35
39
  });
36
40
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/get-spec-handler.ts"],"names":["fs"],"mappings":";;;;;AAcA,eAAe,SAAS,QAAA,EAA4C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC0B;AAC1B,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,WAAA,GAAc,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,WAAA,CAAY,SAAS,CAAA;AACvD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,UAAU,CAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,kBAAA,CAAmB,SAAS,CAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,QAAQ,CAAA;AAEpC,IAAA,OAAO;AAAA,MACL,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAC","file":"get-spec-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/spec\n * Get current session spec (JSON + markdown path if present).\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { GetSpecResponse, TaskSpec } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\n\ninterface GetSpecRouteParams {\n sessionId?: string;\n}\n\nasync function loadSpec(specPath: string): Promise<TaskSpec | null> {\n try {\n const content = await fs.readFile(specPath, 'utf-8');\n return JSON.parse(content) as TaskSpec;\n } catch {\n return null;\n }\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<unknown, unknown, GetSpecRouteParams>\n ): Promise<GetSpecResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const baseManager = new SessionManager(ctx.cwd);\n const session = await baseManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const workingDir = session.workingDir || ctx.cwd;\n const manager = new SessionManager(workingDir);\n const specPath = manager.getSessionSpecPath(sessionId);\n const spec = await loadSpec(specPath);\n\n return {\n sessionId,\n spec,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/get-spec-handler.ts"],"names":["fs"],"mappings":";;;;;AAcA,eAAe,SAAS,QAAA,EAA4C;AAClE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,MAAMA,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AACnD,IAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,IAAO,2BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC0B;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,WAAA,GAAc,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAC9C,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,WAAA,CAAY,SAAS,CAAA;AACvD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,MACnD;AAEA,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,IAAI,cAAA,CAAe,UAAU,CAAA;AAC7C,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,kBAAA,CAAmB,SAAS,CAAA;AACrD,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,QAAQ,CAAA;AAEpC,MAAA,OAAO;AAAA,QACL,SAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"get-spec-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/spec\n * Get current session spec (JSON + markdown path if present).\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { GetSpecResponse, TaskSpec } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\n\ninterface GetSpecRouteParams {\n sessionId?: string;\n}\n\nasync function loadSpec(specPath: string): Promise<TaskSpec | null> {\n try {\n const content = await fs.readFile(specPath, 'utf-8');\n return JSON.parse(content) as TaskSpec;\n } catch {\n return null;\n }\n}\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<unknown, unknown, GetSpecRouteParams>\n ): Promise<GetSpecResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {\n throw new Error('Session ID is required');\n }\n\n const baseManager = new SessionManager(ctx.cwd);\n const session = await baseManager.loadSession(sessionId);\n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const workingDir = session.workingDir || ctx.cwd;\n const manager = new SessionManager(workingDir);\n const specPath = manager.getSessionSpecPath(sessionId);\n const spec = await loadSpec(specPath);\n\n return {\n sessionId,\n spec,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,31 +1,35 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
  import { ChangeStore, toSummary } from '@kb-labs/agent-history';
4
4
 
5
5
  // src/rest/handlers/list-file-changes-handler.ts
6
6
  var list_file_changes_handler_default = defineHandler({
7
7
  async execute(ctx, input) {
8
- const params = input.params;
9
- const sessionId = params?.sessionId;
10
- if (!sessionId) {
11
- throw new Error("Session ID is required");
8
+ try {
9
+ const params = input.params;
10
+ const sessionId = params?.sessionId;
11
+ if (!sessionId) {
12
+ throw new Error("Session ID is required");
13
+ }
14
+ const query = input.query;
15
+ const runId = query?.runId;
16
+ const sessionManager = new SessionManager(ctx.cwd);
17
+ const session = await sessionManager.loadSession(sessionId);
18
+ if (!session) {
19
+ throw new Error(`Session not found: ${sessionId}`);
20
+ }
21
+ const workingDir = session.workingDir || ctx.cwd;
22
+ const store = new ChangeStore(workingDir);
23
+ const changes = runId ? await store.listRun(sessionId, runId) : await store.listSession(sessionId);
24
+ return {
25
+ changes: changes.map(toSummary),
26
+ total: changes.length,
27
+ sessionId,
28
+ runId
29
+ };
30
+ } catch (err) {
31
+ rethrowForRest(err);
12
32
  }
13
- const query = input.query;
14
- const runId = query?.runId;
15
- const sessionManager = new SessionManager(ctx.cwd);
16
- const session = await sessionManager.loadSession(sessionId);
17
- if (!session) {
18
- throw new Error(`Session not found: ${sessionId}`);
19
- }
20
- const workingDir = session.workingDir || ctx.cwd;
21
- const store = new ChangeStore(workingDir);
22
- const changes = runId ? await store.listRun(sessionId, runId) : await store.listSession(sessionId);
23
- return {
24
- changes: changes.map(toSummary),
25
- total: changes.length,
26
- sessionId,
27
- runId
28
- };
29
33
  }
30
34
  });
31
35
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/list-file-changes-handler.ts"],"names":[],"mappings":";;;;;AAiBA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoD;AACtF,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,EAAW;AAAC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAAE;AAE3D,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,IAAA,MAAM,QAAQ,KAAA,EAAO,KAAA;AAErB,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,EAAS;AAAC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,IAAE;AAElE,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,UAAU,CAAA;AAExC,IAAA,MAAM,OAAA,GAAU,KAAA,GACZ,MAAM,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,GACpC,MAAM,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA;AAErC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AAAA,MAC9B,OAAO,OAAA,CAAQ,MAAA;AAAA,MACf,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF,CAAC","file":"list-file-changes-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/changes — List file changes for a session.\n * Optional query: ?runId= to scope to a specific agent run.\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport { ChangeStore, toSummary } from '@kb-labs/agent-history';\nimport type { FileChangeSummary } from '@kb-labs/agent-history';\n\ninterface ListFileChangesResponse {\n changes: FileChangeSummary[];\n total: number;\n sessionId: string;\n runId?: string;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput): Promise<ListFileChangesResponse> {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {throw new Error('Session ID is required');}\n\n const query = input.query as Record<string, string> | undefined;\n const runId = query?.runId;\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {throw new Error(`Session not found: ${sessionId}`);}\n\n const workingDir = session.workingDir || ctx.cwd;\n const store = new ChangeStore(workingDir);\n\n const changes = runId\n ? await store.listRun(sessionId, runId)\n : await store.listSession(sessionId);\n\n return {\n changes: changes.map(toSummary),\n total: changes.length,\n sessionId,\n runId,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/list-file-changes-handler.ts"],"names":[],"mappings":";;;;;AAiBA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAoD;AACtF,IAAA,IAAI;AACF,MAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,MAAA,MAAM,YAAY,MAAA,EAAQ,SAAA;AAC1B,MAAA,IAAI,CAAC,SAAA,EAAW;AAAC,QAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,MAAE;AAE3D,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,MAAM,QAAQ,KAAA,EAAO,KAAA;AAErB,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACjD,MAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,WAAA,CAAY,SAAS,CAAA;AAC1D,MAAA,IAAI,CAAC,OAAA,EAAS;AAAC,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,SAAS,CAAA,CAAE,CAAA;AAAA,MAAE;AAElE,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAc,GAAA,CAAI,GAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY,UAAU,CAAA;AAExC,MAAA,MAAM,OAAA,GAAU,KAAA,GACZ,MAAM,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,GACpC,MAAM,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA;AAErC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA;AAAA,QAC9B,OAAO,OAAA,CAAQ,MAAA;AAAA,QACf,SAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"list-file-changes-handler.js","sourcesContent":["/**\n * GET /sessions/:sessionId/changes — List file changes for a session.\n * Optional query: ?runId= to scope to a specific agent run.\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport { ChangeStore, toSummary } from '@kb-labs/agent-history';\nimport type { FileChangeSummary } from '@kb-labs/agent-history';\n\ninterface ListFileChangesResponse {\n changes: FileChangeSummary[];\n total: number;\n sessionId: string;\n runId?: string;\n}\n\nexport default defineHandler({\n async execute(ctx: PluginContextV3, input: RestInput): Promise<ListFileChangesResponse> {\n try {\n const params = input.params as Record<string, string> | undefined;\n const sessionId = params?.sessionId;\n if (!sessionId) {throw new Error('Session ID is required');}\n\n const query = input.query as Record<string, string> | undefined;\n const runId = query?.runId;\n\n const sessionManager = new SessionManager(ctx.cwd);\n const session = await sessionManager.loadSession(sessionId);\n if (!session) {throw new Error(`Session not found: ${sessionId}`);}\n\n const workingDir = session.workingDir || ctx.cwd;\n const store = new ChangeStore(workingDir);\n\n const changes = runId\n ? await store.listRun(sessionId, runId)\n : await store.listSession(sessionId);\n\n return {\n changes: changes.map(toSummary),\n total: changes.length,\n sessionId,\n runId,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}
@@ -1,20 +1,24 @@
1
- import { defineHandler } from '@kb-labs/sdk';
1
+ import { defineHandler, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { SessionManager } from '@kb-labs/agent-core';
3
3
 
4
4
  // src/rest/handlers/list-sessions-handler.ts
5
5
  var list_sessions_handler_default = defineHandler({
6
6
  async execute(ctx, input) {
7
- const query = input.query;
8
- const sessionManager = new SessionManager(ctx.cwd);
9
- const result = await sessionManager.listSessions({
10
- status: query?.status,
11
- limit: query?.limit ?? 50,
12
- offset: query?.offset ?? 0
13
- });
14
- return {
15
- sessions: result.sessions,
16
- total: result.total
17
- };
7
+ try {
8
+ const query = input.query;
9
+ const sessionManager = new SessionManager(ctx.cwd);
10
+ const result = await sessionManager.listSessions({
11
+ status: query?.status,
12
+ limit: query?.limit ?? 50,
13
+ offset: query?.offset ?? 0
14
+ });
15
+ return {
16
+ sessions: result.sessions,
17
+ total: result.total
18
+ };
19
+ } catch (err) {
20
+ rethrowForRest(err);
21
+ }
18
22
  }
19
23
  });
20
24
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/list-sessions-handler.ts"],"names":[],"mappings":";;;;AAQA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+B;AAC/B,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAGjD,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,YAAA,CAAa;AAAA,MAC/C,QAAQ,KAAA,EAAO,MAAA;AAAA,MACf,KAAA,EAAO,OAAO,KAAA,IAAS,EAAA;AAAA,MACvB,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,KAC1B,CAAA;AAED,IAAA,OAAO;AAAA,MACL,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,OAAO,MAAA,CAAO;AAAA,KAChB;AAAA,EACF;AACF,CAAC","file":"list-sessions-handler.js","sourcesContent":["/**\n * GET /sessions - List all sessions\n */\n\nimport { defineHandler, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { ListSessionsRequest, ListSessionsResponse } from '@kb-labs/agent-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<ListSessionsRequest>\n ): Promise<ListSessionsResponse> {\n const query = input.query as ListSessionsRequest | undefined;\n const sessionManager = new SessionManager(ctx.cwd);\n\n // List all sessions (optionally filtered by status)\n const result = await sessionManager.listSessions({\n status: query?.status,\n limit: query?.limit ?? 50,\n offset: query?.offset ?? 0,\n });\n\n return {\n sessions: result.sessions,\n total: result.total,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/list-sessions-handler.ts"],"names":[],"mappings":";;;;AAQA,IAAO,gCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CACJ,GAAA,EACA,KAAA,EAC+B;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAGjD,MAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,YAAA,CAAa;AAAA,QAC/C,QAAQ,KAAA,EAAO,MAAA;AAAA,QACf,KAAA,EAAO,OAAO,KAAA,IAAS,EAAA;AAAA,QACvB,MAAA,EAAQ,OAAO,MAAA,IAAU;AAAA,OAC1B,CAAA;AAED,MAAA,OAAO;AAAA,QACL,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAO,MAAA,CAAO;AAAA,OAChB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAAA,IACpB;AAAA,EACF;AACF,CAAC","file":"list-sessions-handler.js","sourcesContent":["/**\n * GET /sessions - List all sessions\n */\n\nimport { defineHandler, rethrowForRest, type RestInput, type PluginContextV3 } from '@kb-labs/sdk';\nimport { SessionManager } from '@kb-labs/agent-core';\nimport type { ListSessionsRequest, ListSessionsResponse } from '@kb-labs/agent-contracts';\n\nexport default defineHandler({\n async execute(\n ctx: PluginContextV3,\n input: RestInput<ListSessionsRequest>\n ): Promise<ListSessionsResponse> {\n try {\n const query = input.query as ListSessionsRequest | undefined;\n const sessionManager = new SessionManager(ctx.cwd);\n\n // List all sessions (optionally filtered by status)\n const result = await sessionManager.listSessions({\n status: query?.status,\n limit: query?.limit ?? 50,\n offset: query?.offset ?? 0,\n });\n\n return {\n sessions: result.sessions,\n total: result.total,\n };\n } catch (err) {\n rethrowForRest(err);\n }\n },\n});\n"]}