@shardworks/spider-apparatus 0.1.225 → 0.1.227

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.
@@ -4,11 +4,17 @@
4
4
  * Contributes:
5
5
  * - GET /api/spider/config — aggregated snapshot of Spider config
6
6
  * - GET /api/spider/session-transcript — session transcript and status
7
- * - GET /api/spider/session-stream — SSE stream of real-time session chunks
8
7
  *
9
8
  * Does NOT import from @shardworks/oculus-apparatus to avoid a circular
10
9
  * package dependency. The route shape is compatible with RouteContribution
11
10
  * from the Oculus types.
11
+ *
12
+ * The former /api/spider/session-stream (SSE) route was removed when the
13
+ * Spider UI switched to uniform 2 s polling of /api/spider/session-transcript.
14
+ * The SSE path only worked for in-process (attached) sessions and silently
15
+ * dropped data for detached (cross-process) sessions because the Animator's
16
+ * subscribeToSession cannot bridge processes. Polling the Stacks-backed
17
+ * transcript works uniformly for both attached and detached sessions.
12
18
  */
13
19
  import type { Context } from 'hono';
14
20
  export declare const spiderRoutes: ({
@@ -48,6 +54,15 @@ export declare const spiderRoutes: ({
48
54
  } | {
49
55
  method: string;
50
56
  path: string;
51
- handler: (c: Context) => Promise<Response>;
57
+ handler: (c: Context) => Promise<(Response & import("hono").TypedResponse<{
58
+ error: string;
59
+ }, 400, "json">) | (Response & import("hono").TypedResponse<{
60
+ error: string;
61
+ }, 404, "json">) | (Response & import("hono").TypedResponse<{
62
+ messages: {
63
+ [x: string]: import("hono/utils/types").JSONValue;
64
+ }[];
65
+ sessionStatus: "completed" | "failed" | "cancelled" | "timeout" | "pending" | "running";
66
+ }, import("hono/utils/http-status").ContentfulStatusCode, "json">)>;
52
67
  })[];
53
68
  //# sourceMappingURL=oculus-routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oculus-routes.d.ts","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAepC,eAAO,MAAM,YAAY;;;iBAIR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiDD,OAAO;IAkF7B,CAAC"}
1
+ {"version":3,"file":"oculus-routes.d.ts","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAcpC,eAAO,MAAM,YAAY;;;iBAIR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgBD,OAAO;;;;;;;;;;IA8B7B,CAAC"}
@@ -4,13 +4,18 @@
4
4
  * Contributes:
5
5
  * - GET /api/spider/config — aggregated snapshot of Spider config
6
6
  * - GET /api/spider/session-transcript — session transcript and status
7
- * - GET /api/spider/session-stream — SSE stream of real-time session chunks
8
7
  *
9
8
  * Does NOT import from @shardworks/oculus-apparatus to avoid a circular
10
9
  * package dependency. The route shape is compatible with RouteContribution
11
10
  * from the Oculus types.
11
+ *
12
+ * The former /api/spider/session-stream (SSE) route was removed when the
13
+ * Spider UI switched to uniform 2 s polling of /api/spider/session-transcript.
14
+ * The SSE path only worked for in-process (attached) sessions and silently
15
+ * dropped data for detached (cross-process) sessions because the Animator's
16
+ * subscribeToSession cannot bridge processes. Polling the Stacks-backed
17
+ * transcript works uniformly for both attached and detached sessions.
12
18
  */
13
- import { streamSSE } from 'hono/streaming';
14
19
  import { guild } from '@shardworks/nexus-core';
15
20
  export const spiderRoutes = [
16
21
  {
@@ -45,8 +50,8 @@ export const spiderRoutes = [
45
50
  }
46
51
  // Read transcript regardless of status. Detached sessions (babysitter)
47
52
  // write transcript chunks to SQLite incrementally while the session is
48
- // still 'running' or 'pending'; the client polls this endpoint to
49
- // refresh the engine view's session log in flight.
53
+ // still 'running' or 'pending'; the client polls this endpoint every
54
+ // 2 s to refresh the engine view's session log in flight.
50
55
  const transcriptsBook = stacks.readBook('animator', 'transcripts');
51
56
  const transcript = await transcriptsBook.get(sessionId);
52
57
  return c.json({
@@ -55,80 +60,5 @@ export const spiderRoutes = [
55
60
  });
56
61
  },
57
62
  },
58
- {
59
- method: 'GET',
60
- path: '/api/spider/session-stream',
61
- handler: async (c) => {
62
- const sessionId = c.req.query('sessionId');
63
- if (!sessionId) {
64
- return c.json({ error: 'sessionId is required' }, 400);
65
- }
66
- const g = guild();
67
- const stacks = g.apparatus('stacks');
68
- const sessionsBook = stacks.readBook('animator', 'sessions');
69
- const session = await sessionsBook.get(sessionId);
70
- if (!session) {
71
- return c.json({ error: 'Session not found' }, 404);
72
- }
73
- // For already-completed sessions, stream the full transcript and close.
74
- if (session.status !== 'running') {
75
- const transcriptsBook = stacks.readBook('animator', 'transcripts');
76
- const transcript = await transcriptsBook.get(sessionId);
77
- return streamSSE(c, async (stream) => {
78
- await stream.writeSSE({
79
- event: 'transcript',
80
- data: JSON.stringify({ messages: transcript?.messages ?? [] }),
81
- });
82
- await stream.writeSSE({
83
- event: 'done',
84
- data: JSON.stringify({ status: session.status }),
85
- });
86
- });
87
- }
88
- // For running sessions, subscribe to the Animator's in-process broadcaster.
89
- const animator = g.apparatus('animator');
90
- const chunkStream = animator.subscribeToSession(sessionId);
91
- if (!chunkStream) {
92
- // The session is marked running in Stacks but has no in-memory broadcaster
93
- // (e.g. a server restart happened). Return an empty stream so the UI can
94
- // show a meaningful "no data" state and fall back gracefully.
95
- return streamSSE(c, async (stream) => {
96
- await stream.writeSSE({
97
- event: 'done',
98
- data: JSON.stringify({ status: 'running', noStream: true }),
99
- });
100
- });
101
- }
102
- return streamSSE(c, async (stream) => {
103
- try {
104
- for await (const chunk of chunkStream) {
105
- await stream.writeSSE({
106
- event: 'chunk',
107
- data: JSON.stringify(chunk),
108
- });
109
- }
110
- // All chunks consumed — session has ended. Fetch and emit final transcript.
111
- const transcriptsBook = stacks.readBook('animator', 'transcripts');
112
- const transcript = await transcriptsBook.get(sessionId);
113
- await stream.writeSSE({
114
- event: 'transcript',
115
- data: JSON.stringify({ messages: transcript?.messages ?? [] }),
116
- });
117
- const finalSession = await sessionsBook.get(sessionId);
118
- await stream.writeSSE({
119
- event: 'done',
120
- data: JSON.stringify({ status: finalSession?.status ?? 'completed' }),
121
- });
122
- }
123
- catch (err) {
124
- const message = err instanceof Error ? err.message : String(err);
125
- await stream.writeSSE({
126
- event: 'error',
127
- data: JSON.stringify({ error: message }),
128
- });
129
- }
130
- });
131
- },
132
- },
133
63
  ];
134
64
  //# sourceMappingURL=oculus-routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oculus-routes.js","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oculus-routes.js","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAa/C,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,CAAC,CAAU,EAAE,EAAE;YACtB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,CAAC,CAAC,SAAS,CAAgB,YAAY,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAY,QAAQ,CAAC,CAAC;YAEhD,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE;gBACjC,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,EAAE;gBAC/C,aAAa,EAAE,UAAU,CAAC,iBAAiB,EAAE;gBAC7C,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE;aACpC,CAAC,CAAC;QACL,CAAC;KACF;IACD;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,gCAAgC;QACtC,OAAO,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;YAC5B,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE3C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAY,QAAQ,CAAC,CAAC;YAEhD,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAa,UAAU,EAAE,UAAU,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAElD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YAED,uEAAuE;YACvE,uEAAuE;YACvE,qEAAqE;YACrE,0DAA0D;YAC1D,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAkB,UAAU,EAAE,aAAa,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAExD,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,EAAE;gBACpC,aAAa,EAAE,OAAO,CAAC,MAAM;aAC9B,CAAC,CAAC;QACL,CAAC;KACF;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shardworks/spider-apparatus",
3
- "version": "0.1.225",
3
+ "version": "0.1.227",
4
4
  "license": "ISC",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,17 +22,17 @@
22
22
  "hono": "^4.7.11",
23
23
  "yaml": "^2.0.0",
24
24
  "zod": "4.3.6",
25
- "@shardworks/fabricator-apparatus": "0.1.225",
26
- "@shardworks/clerk-apparatus": "0.1.225",
27
- "@shardworks/stacks-apparatus": "0.1.225",
28
- "@shardworks/tools-apparatus": "0.1.225",
29
- "@shardworks/codexes-apparatus": "0.1.225",
30
- "@shardworks/animator-apparatus": "0.1.225",
31
- "@shardworks/loom-apparatus": "0.1.225"
25
+ "@shardworks/fabricator-apparatus": "0.1.227",
26
+ "@shardworks/stacks-apparatus": "0.1.227",
27
+ "@shardworks/tools-apparatus": "0.1.227",
28
+ "@shardworks/codexes-apparatus": "0.1.227",
29
+ "@shardworks/animator-apparatus": "0.1.227",
30
+ "@shardworks/loom-apparatus": "0.1.227",
31
+ "@shardworks/clerk-apparatus": "0.1.227"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "25.5.0",
35
- "@shardworks/nexus-core": "0.1.225"
35
+ "@shardworks/nexus-core": "0.1.227"
36
36
  },
37
37
  "files": [
38
38
  "dist",