@stigmer/runner 3.0.8 → 3.0.9-dev.20260615150714

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 (31) hide show
  1. package/dist/.build-fingerprint +1 -1
  2. package/dist/activities/execute-cursor/index.js +13 -3
  3. package/dist/activities/execute-cursor/index.js.map +1 -1
  4. package/dist/activities/execute-cursor/message-translator.d.ts +16 -9
  5. package/dist/activities/execute-cursor/message-translator.js +32 -14
  6. package/dist/activities/execute-cursor/message-translator.js.map +1 -1
  7. package/dist/activities/execute-cursor/persist-decision.d.ts +42 -0
  8. package/dist/activities/execute-cursor/persist-decision.js +30 -0
  9. package/dist/activities/execute-cursor/persist-decision.js.map +1 -0
  10. package/dist/activities/execute-deep-agent/index.js +1 -1
  11. package/dist/activities/execute-deep-agent/index.js.map +1 -1
  12. package/dist/activities/execute-deep-agent/streaming-v3.js +1 -1
  13. package/dist/activities/execute-deep-agent/streaming-v3.js.map +1 -1
  14. package/dist/activities/execute-deep-agent/streaming.d.ts +1 -1
  15. package/dist/activities/execute-deep-agent/streaming.js +1 -1
  16. package/dist/activities/execute-deep-agent/streaming.js.map +1 -1
  17. package/dist/{activities/execute-deep-agent → shared}/streaming-scheduler.d.ts +4 -0
  18. package/dist/{activities/execute-deep-agent → shared}/streaming-scheduler.js +4 -0
  19. package/dist/shared/streaming-scheduler.js.map +1 -0
  20. package/package.json +2 -2
  21. package/src/activities/execute-cursor/__tests__/message-translator.test.ts +124 -12
  22. package/src/activities/execute-cursor/__tests__/persist-decision.test.ts +99 -0
  23. package/src/activities/execute-cursor/index.ts +17 -3
  24. package/src/activities/execute-cursor/message-translator.ts +33 -14
  25. package/src/activities/execute-cursor/persist-decision.ts +54 -0
  26. package/src/activities/execute-deep-agent/index.ts +1 -1
  27. package/src/activities/execute-deep-agent/streaming-v3.ts +1 -1
  28. package/src/activities/execute-deep-agent/streaming.ts +1 -1
  29. package/src/{activities/execute-deep-agent → shared}/streaming-scheduler.ts +4 -0
  30. package/dist/activities/execute-deep-agent/streaming-scheduler.js.map +0 -1
  31. /package/src/{activities/execute-deep-agent → shared}/__tests__/streaming-scheduler.test.ts +0 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Streaming persist decision for the Cursor harness.
3
+ *
4
+ * Mirrors the native deep-agent harness (execute-deep-agent/streaming.ts):
5
+ * `shouldPersist = forceFlush || scheduler.shouldSendUpdate(eventCount)`.
6
+ * Both harnesses thus share one cadence model — discrete state changes flush
7
+ * immediately, high-frequency token deltas ride a bounded time cadence.
8
+ *
9
+ * Extracted as a single pure function so the stream loop and its unit tests
10
+ * exercise the same implementation and cannot drift.
11
+ */
12
+
13
+ import type { StreamingUpdateScheduler } from "../../shared/streaming-scheduler.js";
14
+
15
+ /**
16
+ * Force-flush signals — discrete, user-visible state changes that must reach the
17
+ * live stream immediately, independent of the scheduler's time cadence.
18
+ */
19
+ export interface ForceFlushSignals {
20
+ /** Shell/tool output text accumulated past the delta-enricher debounce. */
21
+ readonly deltaEnricherDirty: boolean;
22
+ /** The agent's todo list changed. */
23
+ readonly todosDirty: boolean;
24
+ /**
25
+ * A tool call started or reached a terminal status, or a sub-agent was
26
+ * delegated/updated (MessageAccumulator.isDirty).
27
+ */
28
+ readonly contentDirty: boolean;
29
+ }
30
+
31
+ /**
32
+ * Decide whether to persist the streaming status after a stream event.
33
+ *
34
+ * - forceFlush: any discrete signal flushes now so the live trace (tool calls,
35
+ * sub-agents, todos, shell output) is never starved on short turns.
36
+ * - scheduler: the shared StreamingUpdateScheduler carries assistant text and
37
+ * model thinking on a bounded time cadence (500ms floor / 5s keepalive),
38
+ * avoiding a per-token persist storm.
39
+ *
40
+ * After a persist, the caller must call scheduler.markUpdateSent(eventCount) so
41
+ * the cadence resets — matching the native harness.
42
+ *
43
+ * @param nowMs Injectable clock forwarded to the scheduler, for tests.
44
+ */
45
+ export function shouldPersistStreamingStatus(
46
+ signals: ForceFlushSignals,
47
+ scheduler: StreamingUpdateScheduler,
48
+ eventCount: number,
49
+ nowMs?: number,
50
+ ): boolean {
51
+ const forceFlush =
52
+ signals.deltaEnricherDirty || signals.todosDirty || signals.contentDirty;
53
+ return forceFlush || scheduler.shouldSendUpdate(eventCount, nowMs);
54
+ }
@@ -23,7 +23,7 @@ import type { Config } from "../../config.js";
23
23
  import { StigmerClient } from "../../client/stigmer-client.js";
24
24
  import { performSetup, type SetupResult } from "./setup.js";
25
25
  import { streamExecution, type StreamResult } from "./streaming.js";
26
- import { loadStreamingConfig } from "./streaming-scheduler.js";
26
+ import { loadStreamingConfig } from "../../shared/streaming-scheduler.js";
27
27
  import { StatusBuilder } from "./status-builder.js";
28
28
  import { InlinePublisher } from "./inline-publisher.js";
29
29
  import { WriteBackCoordinator } from "./writeback-coordinator.js";
@@ -16,7 +16,7 @@ import { ExecutionControlSignal, ExecutionPhase } from "@stigmer/protos/ai/stigm
16
16
  import { createV3EventRecorder, type V3ProtocolEvent } from "./v3-event-recorder.js";
17
17
  import { normalize } from "./v3-protocol-normalizer.js";
18
18
  import { V3StatusBuilder } from "./v3-status-builder.js";
19
- import { StreamingUpdateScheduler } from "./streaming-scheduler.js";
19
+ import { StreamingUpdateScheduler } from "../../shared/streaming-scheduler.js";
20
20
  import { persistStatus, slimStatus } from "../../shared/status.js";
21
21
  import { StreamingSideEffects } from "./streaming-side-effects.js";
22
22
  import {
@@ -32,7 +32,7 @@ import {
32
32
  import {
33
33
  StreamingUpdateScheduler,
34
34
  type StreamingConfig,
35
- } from "./streaming-scheduler.js";
35
+ } from "../../shared/streaming-scheduler.js";
36
36
  import { type RetryOptions } from "../../shared/grpc-retry.js";
37
37
  import { persistStatus, slimStatus, utcTimestamp } from "../../shared/status.js";
38
38
  import type { ToolOutputOffloadContext } from "../../shared/status-offload.js";
@@ -13,6 +13,10 @@
13
13
  * OR firstUpdate
14
14
  *
15
15
  * Ported from Python StreamingUpdateScheduler.
16
+ *
17
+ * Shared infrastructure: both the native deep-agent harness and the Cursor
18
+ * harness drive their incremental status persistence through this scheduler so
19
+ * the live stream cadence is identical across harnesses.
16
20
  */
17
21
 
18
22
  export enum UpdateReason {
@@ -1 +0,0 @@
1
- {"version":3,"file":"streaming-scheduler.js","sourceRoot":"","sources":["../../../src/activities/execute-deep-agent/streaming-scheduler.ts"],"names":[],"mappings":"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"}