sparkecoder 0.1.69 → 0.1.70

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 (115) hide show
  1. package/dist/agent/index.d.ts +3 -3
  2. package/dist/agent/index.js +11 -4
  3. package/dist/agent/index.js.map +1 -1
  4. package/dist/cli.js +75 -62
  5. package/dist/cli.js.map +1 -1
  6. package/dist/db/index.d.ts +2 -2
  7. package/dist/{index-DqaHLgSC.d.ts → index-Dm6wGcYv.d.ts} +19 -19
  8. package/dist/index.d.ts +5 -5
  9. package/dist/index.js +75 -62
  10. package/dist/index.js.map +1 -1
  11. package/dist/{schema-Bq4tID-f.d.ts → schema-XcP0dedO.d.ts} +3 -3
  12. package/dist/{search-BRnGaIl-.d.ts → search-CCffrVJE.d.ts} +7 -7
  13. package/dist/server/index.js +75 -62
  14. package/dist/server/index.js.map +1 -1
  15. package/dist/skills/default/qa.md +376 -106
  16. package/dist/tools/index.d.ts +2 -2
  17. package/package.json +1 -1
  18. package/src/skills/default/qa.md +376 -106
  19. package/web/.next/BUILD_ID +1 -1
  20. package/web/.next/standalone/web/.next/BUILD_ID +1 -1
  21. package/web/.next/standalone/web/.next/build-manifest.json +2 -2
  22. package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
  23. package/web/.next/standalone/web/.next/server/app/(main)/page_client-reference-manifest.js +1 -1
  24. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page.js.nft.json +1 -1
  25. package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
  26. package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
  27. package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
  28. package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  29. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  30. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  31. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  32. package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  33. package/web/.next/standalone/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  34. package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
  35. package/web/.next/standalone/web/.next/server/app/_not-found.rsc +2 -2
  36. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  37. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  38. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  39. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  40. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  41. package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  42. package/web/.next/standalone/web/.next/server/app/docs/installation/page_client-reference-manifest.js +1 -1
  43. package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
  44. package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +2 -2
  45. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +2 -2
  46. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
  47. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +2 -2
  48. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +2 -2
  49. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
  50. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
  51. package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
  52. package/web/.next/standalone/web/.next/server/app/docs/page_client-reference-manifest.js +1 -1
  53. package/web/.next/standalone/web/.next/server/app/docs/skills/page_client-reference-manifest.js +1 -1
  54. package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
  55. package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +2 -2
  56. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +2 -2
  57. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
  58. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +2 -2
  59. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +2 -2
  60. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
  61. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
  62. package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
  63. package/web/.next/standalone/web/.next/server/app/docs/tools/page_client-reference-manifest.js +1 -1
  64. package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
  65. package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +2 -2
  66. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +2 -2
  67. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
  68. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +2 -2
  69. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +2 -2
  70. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
  71. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
  72. package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
  73. package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
  74. package/web/.next/standalone/web/.next/server/app/docs.rsc +2 -2
  75. package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +2 -2
  76. package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
  77. package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +2 -2
  78. package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +2 -2
  79. package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
  80. package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
  81. package/web/.next/standalone/web/.next/server/app/embed/[id]/page.js.nft.json +1 -1
  82. package/web/.next/standalone/web/.next/server/app/embed/[id]/page_client-reference-manifest.js +1 -1
  83. package/web/.next/standalone/web/.next/server/app/index.html +1 -1
  84. package/web/.next/standalone/web/.next/server/app/index.rsc +2 -2
  85. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
  86. package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
  87. package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +2 -2
  88. package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
  89. package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +2 -2
  90. package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  91. package/web/.next/standalone/web/.next/server/chunks/ssr/{[root-of-the-server]__c71f29f9._.js → [root-of-the-server]__a1877334._.js} +4 -4
  92. package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
  93. package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
  94. package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
  95. package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
  96. package/web/.next/standalone/web/.next/static/chunks/41a5c049931b2c77.css +1 -0
  97. package/web/.next/standalone/web/.next/static/chunks/{b6ec74cad9ffd3ee.js → f95d41079838994a.js} +3 -3
  98. package/web/.next/standalone/web/.next/static/static/chunks/41a5c049931b2c77.css +1 -0
  99. package/web/.next/standalone/web/.next/static/static/chunks/{b6ec74cad9ffd3ee.js → f95d41079838994a.js} +3 -3
  100. package/web/.next/standalone/web/src/components/ai-elements/read-file-tool.tsx +19 -2
  101. package/web/.next/standalone/web/src/components/chat-interface.tsx +49 -4
  102. package/web/.next/static/chunks/41a5c049931b2c77.css +1 -0
  103. package/web/.next/static/chunks/{b6ec74cad9ffd3ee.js → f95d41079838994a.js} +3 -3
  104. package/web/.next/standalone/web/.next/static/chunks/fd39dd62879495e1.css +0 -1
  105. package/web/.next/standalone/web/.next/static/static/chunks/fd39dd62879495e1.css +0 -1
  106. package/web/.next/static/chunks/fd39dd62879495e1.css +0 -1
  107. /package/web/.next/standalone/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_buildManifest.js +0 -0
  108. /package/web/.next/standalone/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_clientMiddlewareManifest.json +0 -0
  109. /package/web/.next/standalone/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_ssgManifest.js +0 -0
  110. /package/web/.next/standalone/web/.next/static/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_buildManifest.js +0 -0
  111. /package/web/.next/standalone/web/.next/static/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_clientMiddlewareManifest.json +0 -0
  112. /package/web/.next/standalone/web/.next/static/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_ssgManifest.js +0 -0
  113. /package/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_buildManifest.js +0 -0
  114. /package/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_clientMiddlewareManifest.json +0 -0
  115. /package/web/.next/static/{XB638PEDChQhwk6wSMrSh → PpaOWDfndYJrA-tJYr7gU}/_ssgManifest.js +0 -0
package/dist/cli.js CHANGED
@@ -2629,10 +2629,6 @@ var init_stream_proxy = __esm({
2629
2629
  console.log(`[BROWSER-WS] Connected to ${url} (after ${this.reconnectAttempts} retries)`);
2630
2630
  this.reconnectAttempts = 0;
2631
2631
  this._connected = true;
2632
- this.emit("status", {
2633
- connected: true,
2634
- screencasting: true
2635
- });
2636
2632
  });
2637
2633
  this.ws.on("message", (raw) => {
2638
2634
  try {
@@ -2718,6 +2714,17 @@ var init_stream_proxy = __esm({
2718
2714
  this.ws.send(JSON.stringify(event));
2719
2715
  }
2720
2716
  }
2717
+ /**
2718
+ * Ask the StreamServer to send its current status (triggers sendStatus and
2719
+ * re-evaluates screencasting). Useful when listeners are replaced on a new
2720
+ * stream and we want a fresh status event.
2721
+ */
2722
+ requestStatus() {
2723
+ if (this.ws?.readyState === WebSocket.OPEN) {
2724
+ console.log(`[BROWSER-WS] Requesting fresh status from StreamServer`);
2725
+ this.ws.send(JSON.stringify({ type: "status" }));
2726
+ }
2727
+ }
2721
2728
  destroy() {
2722
2729
  console.log(`[BROWSER-WS] Destroying proxy for port ${this.port} (emitted ${this.frameCount} frames, throttled ${this.throttledCount})`);
2723
2730
  this.destroyed = true;
@@ -9270,37 +9277,40 @@ ${prompt}` });
9270
9277
  recorder.start();
9271
9278
  sessionRecorders.set(sessionId, recorder);
9272
9279
  }
9273
- if (proxy.listenerCount("frame") === 0) {
9274
- console.log(`[BROWSER-STREAM:${streamId}] Attaching frame+status listeners to proxy`);
9275
- proxy.on("frame", (frame) => {
9276
- sseBrowserFrameCount++;
9277
- if (sseBrowserFrameCount === 1) {
9278
- console.log(`[BROWSER-STREAM:${streamId}] First browser frame received! dataSize=${frame.data?.length ?? 0} writerClosed=${writerClosed}`);
9279
- } else if (sseBrowserFrameCount % 50 === 0) {
9280
- console.log(`[BROWSER-STREAM:${streamId}] Browser frame #${sseBrowserFrameCount} (writerClosed=${writerClosed})`);
9281
- }
9282
- const rec = sessionRecorders.get(sessionId);
9283
- rec?.addFrame(frame);
9284
- writeSSE(JSON.stringify({
9285
- type: "browser-frame",
9286
- data: frame.data,
9287
- metadata: frame.metadata
9288
- })).catch((err) => {
9289
- console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-frame via SSE:`, err);
9290
- });
9280
+ const oldFrameListeners = proxy.listenerCount("frame");
9281
+ if (oldFrameListeners > 0) {
9282
+ console.log(`[BROWSER-STREAM:${streamId}] Replacing ${oldFrameListeners} stale frame listener(s) from previous stream`);
9283
+ proxy.removeAllListeners("frame");
9284
+ proxy.removeAllListeners("status");
9285
+ }
9286
+ console.log(`[BROWSER-STREAM:${streamId}] Attaching frame+status listeners to proxy`);
9287
+ proxy.on("frame", (frame) => {
9288
+ sseBrowserFrameCount++;
9289
+ if (sseBrowserFrameCount === 1) {
9290
+ console.log(`[BROWSER-STREAM:${streamId}] First browser frame received! dataSize=${frame.data?.length ?? 0} writerClosed=${writerClosed}`);
9291
+ } else if (sseBrowserFrameCount % 50 === 0) {
9292
+ console.log(`[BROWSER-STREAM:${streamId}] Browser frame #${sseBrowserFrameCount} (writerClosed=${writerClosed})`);
9293
+ }
9294
+ const rec = sessionRecorders.get(sessionId);
9295
+ rec?.addFrame(frame);
9296
+ writeSSE(JSON.stringify({
9297
+ type: "browser-frame",
9298
+ data: frame.data,
9299
+ metadata: frame.metadata
9300
+ })).catch((err) => {
9301
+ console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-frame via SSE:`, err);
9291
9302
  });
9292
- proxy.on("status", (s) => {
9293
- console.log(`[BROWSER-STREAM:${streamId}] Browser status event: connected=${s.connected} screencasting=${s.screencasting} viewport=${s.viewportWidth}x${s.viewportHeight}`);
9294
- writeSSE(JSON.stringify({
9295
- type: "browser-status",
9296
- ...s
9297
- })).catch((err) => {
9298
- console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-status via SSE:`, err);
9299
- });
9303
+ });
9304
+ proxy.on("status", (s) => {
9305
+ console.log(`[BROWSER-STREAM:${streamId}] Browser status event: connected=${s.connected} screencasting=${s.screencasting} viewport=${s.viewportWidth}x${s.viewportHeight}`);
9306
+ writeSSE(JSON.stringify({
9307
+ type: "browser-status",
9308
+ ...s
9309
+ })).catch((err) => {
9310
+ console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-status via SSE:`, err);
9300
9311
  });
9301
- } else {
9302
- console.log(`[BROWSER-STREAM:${streamId}] Frame listeners already attached (count=${proxy.listenerCount("frame")}), skipping`);
9303
- }
9312
+ });
9313
+ proxy.requestStatus();
9304
9314
  }
9305
9315
  },
9306
9316
  onStepFinish: async () => {
@@ -9795,37 +9805,40 @@ agents.post(
9795
9805
  recorder.start();
9796
9806
  sessionRecorders.set(session.id, recorder);
9797
9807
  }
9798
- if (proxy.listenerCount("frame") === 0) {
9799
- console.log(`[BROWSER-STREAM:${streamId}] Attaching frame+status listeners to proxy`);
9800
- proxy.on("frame", (frame) => {
9801
- sseBrowserFrameCount++;
9802
- if (sseBrowserFrameCount === 1) {
9803
- console.log(`[BROWSER-STREAM:${streamId}] First browser frame received! dataSize=${frame.data?.length ?? 0} writerClosed=${writerClosed}`);
9804
- } else if (sseBrowserFrameCount % 50 === 0) {
9805
- console.log(`[BROWSER-STREAM:${streamId}] Browser frame #${sseBrowserFrameCount} (writerClosed=${writerClosed})`);
9806
- }
9807
- const rec = sessionRecorders.get(session.id);
9808
- rec?.addFrame(frame);
9809
- writeSSE(JSON.stringify({
9810
- type: "browser-frame",
9811
- data: frame.data,
9812
- metadata: frame.metadata
9813
- })).catch((err) => {
9814
- console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-frame via SSE:`, err);
9815
- });
9808
+ const oldFrameListeners = proxy.listenerCount("frame");
9809
+ if (oldFrameListeners > 0) {
9810
+ console.log(`[BROWSER-STREAM:${streamId}] Replacing ${oldFrameListeners} stale frame listener(s) from previous stream`);
9811
+ proxy.removeAllListeners("frame");
9812
+ proxy.removeAllListeners("status");
9813
+ }
9814
+ console.log(`[BROWSER-STREAM:${streamId}] Attaching frame+status listeners to proxy`);
9815
+ proxy.on("frame", (frame) => {
9816
+ sseBrowserFrameCount++;
9817
+ if (sseBrowserFrameCount === 1) {
9818
+ console.log(`[BROWSER-STREAM:${streamId}] First browser frame received! dataSize=${frame.data?.length ?? 0} writerClosed=${writerClosed}`);
9819
+ } else if (sseBrowserFrameCount % 50 === 0) {
9820
+ console.log(`[BROWSER-STREAM:${streamId}] Browser frame #${sseBrowserFrameCount} (writerClosed=${writerClosed})`);
9821
+ }
9822
+ const rec = sessionRecorders.get(session.id);
9823
+ rec?.addFrame(frame);
9824
+ writeSSE(JSON.stringify({
9825
+ type: "browser-frame",
9826
+ data: frame.data,
9827
+ metadata: frame.metadata
9828
+ })).catch((err) => {
9829
+ console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-frame via SSE:`, err);
9816
9830
  });
9817
- proxy.on("status", (s) => {
9818
- console.log(`[BROWSER-STREAM:${streamId}] Browser status event: connected=${s.connected} screencasting=${s.screencasting} viewport=${s.viewportWidth}x${s.viewportHeight}`);
9819
- writeSSE(JSON.stringify({
9820
- type: "browser-status",
9821
- ...s
9822
- })).catch((err) => {
9823
- console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-status via SSE:`, err);
9824
- });
9831
+ });
9832
+ proxy.on("status", (s) => {
9833
+ console.log(`[BROWSER-STREAM:${streamId}] Browser status event: connected=${s.connected} screencasting=${s.screencasting} viewport=${s.viewportWidth}x${s.viewportHeight}`);
9834
+ writeSSE(JSON.stringify({
9835
+ type: "browser-status",
9836
+ ...s
9837
+ })).catch((err) => {
9838
+ console.warn(`[BROWSER-STREAM:${streamId}] Failed to send browser-status via SSE:`, err);
9825
9839
  });
9826
- } else {
9827
- console.log(`[BROWSER-STREAM:${streamId}] Frame listeners already attached (count=${proxy.listenerCount("frame")}), skipping`);
9828
- }
9840
+ });
9841
+ proxy.requestStatus();
9829
9842
  }
9830
9843
  },
9831
9844
  onStepFinish: async () => {