@sapiom/harness 0.0.0 → 0.1.1
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.
- package/LICENSE +21 -0
- package/README.md +44 -43
- package/dist/cli/auth.d.ts +26 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +39 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +163 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/consent.d.ts +15 -0
- package/dist/cli/consent.d.ts.map +1 -0
- package/dist/cli/consent.js +81 -0
- package/dist/cli/consent.js.map +1 -0
- package/dist/cli/doctor.d.ts +27 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +74 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/machine-id.d.ts +19 -0
- package/dist/cli/machine-id.d.ts.map +1 -0
- package/dist/cli/machine-id.js +75 -0
- package/dist/cli/machine-id.js.map +1 -0
- package/dist/cli/paths.d.ts +3 -0
- package/dist/cli/paths.d.ts.map +1 -0
- package/dist/cli/paths.js +11 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/settings.d.ts +26 -0
- package/dist/cli/settings.d.ts.map +1 -0
- package/dist/cli/settings.js +123 -0
- package/dist/cli/settings.js.map +1 -0
- package/dist/core/adapters/claude-code.d.ts +41 -0
- package/dist/core/adapters/claude-code.d.ts.map +1 -0
- package/dist/core/adapters/claude-code.js +238 -0
- package/dist/core/adapters/claude-code.js.map +1 -0
- package/dist/core/adapters/codex.d.ts +59 -0
- package/dist/core/adapters/codex.d.ts.map +1 -0
- package/dist/core/adapters/codex.js +319 -0
- package/dist/core/adapters/codex.js.map +1 -0
- package/dist/core/canvas-body.d.ts +45 -0
- package/dist/core/canvas-body.d.ts.map +1 -0
- package/dist/core/canvas-body.js +94 -0
- package/dist/core/canvas-body.js.map +1 -0
- package/dist/core/canvas-cache.d.ts +23 -0
- package/dist/core/canvas-cache.d.ts.map +1 -0
- package/dist/core/canvas-cache.js +64 -0
- package/dist/core/canvas-cache.js.map +1 -0
- package/dist/core/canvas-enrich.d.ts +106 -0
- package/dist/core/canvas-enrich.d.ts.map +1 -0
- package/dist/core/canvas-enrich.js +178 -0
- package/dist/core/canvas-enrich.js.map +1 -0
- package/dist/core/canvas-enrichment.d.ts +144 -0
- package/dist/core/canvas-enrichment.d.ts.map +1 -0
- package/dist/core/canvas-enrichment.js +192 -0
- package/dist/core/canvas-enrichment.js.map +1 -0
- package/dist/core/canvas-graph.d.ts +71 -0
- package/dist/core/canvas-graph.d.ts.map +1 -0
- package/dist/core/canvas-graph.js +111 -0
- package/dist/core/canvas-graph.js.map +1 -0
- package/dist/core/canvas-index-classify.d.ts +41 -0
- package/dist/core/canvas-index-classify.d.ts.map +1 -0
- package/dist/core/canvas-index-classify.js +63 -0
- package/dist/core/canvas-index-classify.js.map +1 -0
- package/dist/core/canvas-interconnections.d.ts +24 -0
- package/dist/core/canvas-interconnections.d.ts.map +1 -0
- package/dist/core/canvas-interconnections.js +96 -0
- package/dist/core/canvas-interconnections.js.map +1 -0
- package/dist/core/canvas-manifest-check.d.ts +15 -0
- package/dist/core/canvas-manifest-check.d.ts.map +1 -0
- package/dist/core/canvas-manifest-check.js +90 -0
- package/dist/core/canvas-manifest-check.js.map +1 -0
- package/dist/core/canvas-render.d.ts +73 -0
- package/dist/core/canvas-render.d.ts.map +1 -0
- package/dist/core/canvas-render.js +145 -0
- package/dist/core/canvas-render.js.map +1 -0
- package/dist/core/canvas-svg.d.ts +50 -0
- package/dist/core/canvas-svg.d.ts.map +1 -0
- package/dist/core/canvas-svg.js +240 -0
- package/dist/core/canvas-svg.js.map +1 -0
- package/dist/core/canvas-template.d.ts +43 -0
- package/dist/core/canvas-template.d.ts.map +1 -0
- package/dist/core/canvas-template.js +365 -0
- package/dist/core/canvas-template.js.map +1 -0
- package/dist/core/canvas-watcher.d.ts +25 -0
- package/dist/core/canvas-watcher.d.ts.map +1 -0
- package/dist/core/canvas-watcher.js +144 -0
- package/dist/core/canvas-watcher.js.map +1 -0
- package/dist/core/collector/batcher.d.ts +57 -0
- package/dist/core/collector/batcher.d.ts.map +1 -0
- package/dist/core/collector/batcher.js +143 -0
- package/dist/core/collector/batcher.js.map +1 -0
- package/dist/core/collector/codex-tailer.d.ts +85 -0
- package/dist/core/collector/codex-tailer.d.ts.map +1 -0
- package/dist/core/collector/codex-tailer.js +270 -0
- package/dist/core/collector/codex-tailer.js.map +1 -0
- package/dist/core/collector/normalizer.d.ts +33 -0
- package/dist/core/collector/normalizer.d.ts.map +1 -0
- package/dist/core/collector/normalizer.js +94 -0
- package/dist/core/collector/normalizer.js.map +1 -0
- package/dist/core/collector/seq.d.ts +14 -0
- package/dist/core/collector/seq.d.ts.map +1 -0
- package/dist/core/collector/seq.js +20 -0
- package/dist/core/collector/seq.js.map +1 -0
- package/dist/core/collector/store.d.ts +16 -0
- package/dist/core/collector/store.d.ts.map +1 -0
- package/dist/core/collector/store.js +30 -0
- package/dist/core/collector/store.js.map +1 -0
- package/dist/core/collector/transcript.d.ts +38 -0
- package/dist/core/collector/transcript.d.ts.map +1 -0
- package/dist/core/collector/transcript.js +110 -0
- package/dist/core/collector/transcript.js.map +1 -0
- package/dist/core/event-bus.d.ts +9 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +25 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/example-seed.d.ts +34 -0
- package/dist/core/example-seed.d.ts.map +1 -0
- package/dist/core/example-seed.js +277 -0
- package/dist/core/example-seed.js.map +1 -0
- package/dist/core/inject/claude-settings.d.ts +34 -0
- package/dist/core/inject/claude-settings.d.ts.map +1 -0
- package/dist/core/inject/claude-settings.js +152 -0
- package/dist/core/inject/claude-settings.js.map +1 -0
- package/dist/core/inject/mcp-config.d.ts +26 -0
- package/dist/core/inject/mcp-config.d.ts.map +1 -0
- package/dist/core/inject/mcp-config.js +39 -0
- package/dist/core/inject/mcp-config.js.map +1 -0
- package/dist/core/inject/retention.d.ts +66 -0
- package/dist/core/inject/retention.d.ts.map +1 -0
- package/dist/core/inject/retention.js +119 -0
- package/dist/core/inject/retention.js.map +1 -0
- package/dist/core/inject/system-prompt.d.ts +11 -0
- package/dist/core/inject/system-prompt.d.ts.map +1 -0
- package/dist/core/inject/system-prompt.js +22 -0
- package/dist/core/inject/system-prompt.js.map +1 -0
- package/dist/core/macro-runner.d.ts +36 -0
- package/dist/core/macro-runner.d.ts.map +1 -0
- package/dist/core/macro-runner.js +66 -0
- package/dist/core/macro-runner.js.map +1 -0
- package/dist/core/macros.d.ts +10 -0
- package/dist/core/macros.d.ts.map +1 -0
- package/dist/core/macros.js +59 -0
- package/dist/core/macros.js.map +1 -0
- package/dist/core/path-safety.d.ts +33 -0
- package/dist/core/path-safety.d.ts.map +1 -0
- package/dist/core/path-safety.js +63 -0
- package/dist/core/path-safety.js.map +1 -0
- package/dist/core/paths.d.ts +27 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +43 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/port-detector.d.ts +69 -0
- package/dist/core/port-detector.d.ts.map +1 -0
- package/dist/core/port-detector.js +121 -0
- package/dist/core/port-detector.js.map +1 -0
- package/dist/core/session-manager.d.ts +275 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +729 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/core/task-manager.d.ts +138 -0
- package/dist/core/task-manager.d.ts.map +1 -0
- package/dist/core/task-manager.js +286 -0
- package/dist/core/task-manager.js.map +1 -0
- package/dist/core/task-stream.d.ts +32 -0
- package/dist/core/task-stream.d.ts.map +1 -0
- package/dist/core/task-stream.js +87 -0
- package/dist/core/task-stream.js.map +1 -0
- package/dist/core/workflow-registry.d.ts +36 -0
- package/dist/core/workflow-registry.d.ts.map +1 -0
- package/dist/core/workflow-registry.js +220 -0
- package/dist/core/workflow-registry.js.map +1 -0
- package/dist/core/workspace-context.d.ts +43 -0
- package/dist/core/workspace-context.d.ts.map +1 -0
- package/dist/core/workspace-context.js +108 -0
- package/dist/core/workspace-context.js.map +1 -0
- package/dist/core/workspace-watcher.d.ts +26 -0
- package/dist/core/workspace-watcher.d.ts.map +1 -0
- package/dist/core/workspace-watcher.js +174 -0
- package/dist/core/workspace-watcher.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/profiles/canvas-guidelines.d.ts +20 -0
- package/dist/profiles/canvas-guidelines.d.ts.map +1 -0
- package/dist/profiles/canvas-guidelines.js +48 -0
- package/dist/profiles/canvas-guidelines.js.map +1 -0
- package/dist/profiles/default.d.ts +10 -0
- package/dist/profiles/default.d.ts.map +1 -0
- package/dist/profiles/default.js +70 -0
- package/dist/profiles/default.js.map +1 -0
- package/dist/server/auth.d.ts +9 -0
- package/dist/server/auth.d.ts.map +1 -0
- package/dist/server/auth.js +28 -0
- package/dist/server/auth.js.map +1 -0
- package/dist/server/canvas-render.d.ts +18 -0
- package/dist/server/canvas-render.d.ts.map +1 -0
- package/dist/server/canvas-render.js +24 -0
- package/dist/server/canvas-render.js.map +1 -0
- package/dist/server/canvas.d.ts +12 -0
- package/dist/server/canvas.d.ts.map +1 -0
- package/dist/server/canvas.js +174 -0
- package/dist/server/canvas.js.map +1 -0
- package/dist/server/events-ws.d.ts +11 -0
- package/dist/server/events-ws.d.ts.map +1 -0
- package/dist/server/events-ws.js +24 -0
- package/dist/server/events-ws.js.map +1 -0
- package/dist/server/fs.d.ts +4 -0
- package/dist/server/fs.d.ts.map +1 -0
- package/dist/server/fs.js +88 -0
- package/dist/server/fs.js.map +1 -0
- package/dist/server/index.d.ts +83 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +0 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/ingest.d.ts +74 -0
- package/dist/server/ingest.d.ts.map +1 -0
- package/dist/server/ingest.js +74 -0
- package/dist/server/ingest.js.map +1 -0
- package/dist/server/macros.d.ts +32 -0
- package/dist/server/macros.d.ts.map +1 -0
- package/dist/server/macros.js +76 -0
- package/dist/server/macros.js.map +1 -0
- package/dist/server/rest.d.ts +75 -0
- package/dist/server/rest.d.ts.map +1 -0
- package/dist/server/rest.js +235 -0
- package/dist/server/rest.js.map +1 -0
- package/dist/server/static.d.ts +8 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +36 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/terminal-ws.d.ts +9 -0
- package/dist/server/terminal-ws.d.ts.map +1 -0
- package/dist/server/terminal-ws.js +59 -0
- package/dist/server/terminal-ws.js.map +1 -0
- package/dist/server/ws-router.d.ts +16 -0
- package/dist/server/ws-router.d.ts.map +1 -0
- package/dist/server/ws-router.js +26 -0
- package/dist/server/ws-router.js.map +1 -0
- package/dist/shared/types.d.ts +485 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +80 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/web/assets/index-B9R4TzH7.css +32 -0
- package/dist/web/assets/index-Dh97QAgq.js +192 -0
- package/dist/web/index.html +27 -0
- package/package.json +84 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskManager — registry of headless one-shot agent runs (BackgroundTask in
|
|
3
|
+
* shared/types.ts). A background task (canvas enrichment today; deploy/run
|
|
4
|
+
* candidates later) runs here instead of being injected into the user's
|
|
5
|
+
* interactive session, so a long LLM turn can't hijack their thread.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately NOT SessionManager:
|
|
8
|
+
* - Tasks are spawned via plain child_process (no pty): `claude -p` is
|
|
9
|
+
* non-interactive by design — stdout is a machine-readable event stream to
|
|
10
|
+
* parse, not a TUI to render, and a non-TTY stdout also guarantees the
|
|
11
|
+
* trust dialog is skipped (see the adapter's launchTask contract).
|
|
12
|
+
* - Records live only in memory and never in the session registry, so a task
|
|
13
|
+
* can't appear as a session tab or strand a ghost record: the process
|
|
14
|
+
* exits on its own when its single turn completes, and `exit` is the one
|
|
15
|
+
* lifecycle signal — no readiness gating, no liveness sweep.
|
|
16
|
+
* - The task's generated config dir (keyed by task id, exactly like a
|
|
17
|
+
* session's) is deleted via `onCleanup` when it exits; a crash leaves it
|
|
18
|
+
* to the same boot-time retention sweep real sessions use.
|
|
19
|
+
*/
|
|
20
|
+
import { type BackgroundTask, type HarnessAdapter, type HarnessKind } from "../shared/types.js";
|
|
21
|
+
import type { LaunchOptsBuilder } from "./session-manager.js";
|
|
22
|
+
/**
|
|
23
|
+
* The slice of node's ChildProcess a task actually uses — injectable so
|
|
24
|
+
* tests drive fake processes without spawning anything real.
|
|
25
|
+
*/
|
|
26
|
+
export interface TaskProcess {
|
|
27
|
+
pid?: number;
|
|
28
|
+
stdout: NodeJS.ReadableStream | null;
|
|
29
|
+
stderr: NodeJS.ReadableStream | null;
|
|
30
|
+
on(event: "exit", listener: (code: number | null) => void): unknown;
|
|
31
|
+
on(event: "error", listener: (err: Error) => void): unknown;
|
|
32
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
33
|
+
}
|
|
34
|
+
export type TaskSpawnFn = (command: string, args: string[], options: {
|
|
35
|
+
cwd: string;
|
|
36
|
+
env: Record<string, string>;
|
|
37
|
+
}) => TaskProcess;
|
|
38
|
+
/** Thrown when the session's harness adapter has no `launchTask` (codex,
|
|
39
|
+
* today) — the macros router surfaces this as a 400 with this message. */
|
|
40
|
+
export declare class TaskNotSupportedError extends Error {
|
|
41
|
+
constructor(harness: HarnessKind, label: string);
|
|
42
|
+
}
|
|
43
|
+
/** Thrown when the same macro is already running against the same target —
|
|
44
|
+
* two concurrent enrichment runs for one workflow would race on the same
|
|
45
|
+
* render/cache files. The target is the workflow when both tasks carry one
|
|
46
|
+
* (so one session CAN enrich two different workflows concurrently, and two
|
|
47
|
+
* sessions can NEVER double-enrich the same workflow), falling back to the
|
|
48
|
+
* session for workflow-less tasks. */
|
|
49
|
+
export declare class TaskAlreadyRunningError extends Error {
|
|
50
|
+
constructor(label: string);
|
|
51
|
+
}
|
|
52
|
+
export interface RunTaskRequest {
|
|
53
|
+
macroId: string;
|
|
54
|
+
label: string;
|
|
55
|
+
harnessSessionId: string;
|
|
56
|
+
harness: HarnessKind;
|
|
57
|
+
cwd: string;
|
|
58
|
+
prompt: string;
|
|
59
|
+
/** The workflow the task targets, when it has one — carried onto
|
|
60
|
+
* BackgroundTask.workflowPath (pane scoping) and used as the dedupe key. */
|
|
61
|
+
workflowPath?: string | null;
|
|
62
|
+
/** Model override for the headless run (LaunchOpts.model). */
|
|
63
|
+
model?: string;
|
|
64
|
+
/** Turn cap for the headless run (LaunchOpts.maxTurns). */
|
|
65
|
+
maxTurns?: number;
|
|
66
|
+
}
|
|
67
|
+
export interface TaskManagerOptions {
|
|
68
|
+
adapters: Partial<Record<HarnessKind, HarnessAdapter>>;
|
|
69
|
+
/** Base URL the harness server is reachable at, e.g. http://127.0.0.1:4100. */
|
|
70
|
+
ingestUrl: string;
|
|
71
|
+
/** Per-boot secret — same one real sessions get, so the task's hooks can
|
|
72
|
+
* POST to /ingest (events for an unknown session id are silently dropped
|
|
73
|
+
* there, which is exactly what we want for tasks today). */
|
|
74
|
+
ingestToken: string;
|
|
75
|
+
collectorUrl?: string;
|
|
76
|
+
/** Same builder real sessions use — generates the task's own --settings /
|
|
77
|
+
* --mcp-config / system-prompt files under generated/<taskId>. */
|
|
78
|
+
buildLaunchOpts?: LaunchOptsBuilder;
|
|
79
|
+
/** Injectable for tests. Defaults to node:child_process.spawn. */
|
|
80
|
+
spawnProcess?: TaskSpawnFn;
|
|
81
|
+
/** Called once the task's process has exited (either outcome) — the server
|
|
82
|
+
* wires generated-config-dir removal here, mirroring session exit. */
|
|
83
|
+
onCleanup?: (taskId: string) => void;
|
|
84
|
+
now?: () => string;
|
|
85
|
+
generateId?: () => string;
|
|
86
|
+
}
|
|
87
|
+
export type TaskStatusListener = (task: BackgroundTask) => void;
|
|
88
|
+
export declare class TaskManager {
|
|
89
|
+
private readonly adapters;
|
|
90
|
+
private readonly ingestUrl;
|
|
91
|
+
private readonly ingestToken;
|
|
92
|
+
private readonly collectorUrl;
|
|
93
|
+
private readonly buildLaunchOpts;
|
|
94
|
+
private readonly spawnProcess;
|
|
95
|
+
private readonly onCleanup;
|
|
96
|
+
private readonly now;
|
|
97
|
+
private readonly generateId;
|
|
98
|
+
private readonly tasks;
|
|
99
|
+
/** Runs admitted past the dedupe check but not yet registered in `tasks`
|
|
100
|
+
* — the check→register window contains an await (buildLaunchOpts), so
|
|
101
|
+
* without this reservation two near-simultaneous run() calls for the
|
|
102
|
+
* same target both pass the check and both spawn. */
|
|
103
|
+
private readonly pendingRuns;
|
|
104
|
+
private readonly processes;
|
|
105
|
+
private readonly stderrTails;
|
|
106
|
+
/** The final result event's error text, when the stream produced one —
|
|
107
|
+
* preferred over a raw stderr tail for failure display. */
|
|
108
|
+
private readonly resultErrors;
|
|
109
|
+
/** The final result event's success text — published on the finished task
|
|
110
|
+
* as `resultText`, so a structured task's caller can parse the answer. */
|
|
111
|
+
private readonly resultTexts;
|
|
112
|
+
private readonly statusEmitter;
|
|
113
|
+
constructor(options: TaskManagerOptions);
|
|
114
|
+
list(): BackgroundTask[];
|
|
115
|
+
get(id: string): BackgroundTask | undefined;
|
|
116
|
+
onStatusChange(listener: TaskStatusListener): () => void;
|
|
117
|
+
/**
|
|
118
|
+
* Spawns one background task. Resolves once the process is launched (not
|
|
119
|
+
* when it finishes — completion arrives as a task.status broadcast).
|
|
120
|
+
* Throws TaskNotSupportedError / TaskAlreadyRunningError for the two
|
|
121
|
+
* user-addressable refusals; anything else (spawn failure, config
|
|
122
|
+
* generation failure) propagates as-is.
|
|
123
|
+
*/
|
|
124
|
+
run(req: RunTaskRequest): Promise<BackgroundTask>;
|
|
125
|
+
/** Kills every still-running task process. Call on server shutdown, same
|
|
126
|
+
* reason as SessionManager.killAll — child processes aren't torn down by
|
|
127
|
+
* the HTTP server closing. */
|
|
128
|
+
killAll(): void;
|
|
129
|
+
private handleStdoutLine;
|
|
130
|
+
/** The single running→finished transition — shared by "exit" and "error",
|
|
131
|
+
* which can both fire for one process, so it's idempotent. */
|
|
132
|
+
private finish;
|
|
133
|
+
/** Drops the oldest finished tasks beyond MAX_FINISHED_TASKS — running
|
|
134
|
+
* tasks are never dropped. */
|
|
135
|
+
private trimFinished;
|
|
136
|
+
private emitStatus;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=task-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../src/core/task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TaskManager — registry of headless one-shot agent runs (BackgroundTask in
|
|
3
|
+
* shared/types.ts). A background task (canvas enrichment today; deploy/run
|
|
4
|
+
* candidates later) runs here instead of being injected into the user's
|
|
5
|
+
* interactive session, so a long LLM turn can't hijack their thread.
|
|
6
|
+
*
|
|
7
|
+
* Deliberately NOT SessionManager:
|
|
8
|
+
* - Tasks are spawned via plain child_process (no pty): `claude -p` is
|
|
9
|
+
* non-interactive by design — stdout is a machine-readable event stream to
|
|
10
|
+
* parse, not a TUI to render, and a non-TTY stdout also guarantees the
|
|
11
|
+
* trust dialog is skipped (see the adapter's launchTask contract).
|
|
12
|
+
* - Records live only in memory and never in the session registry, so a task
|
|
13
|
+
* can't appear as a session tab or strand a ghost record: the process
|
|
14
|
+
* exits on its own when its single turn completes, and `exit` is the one
|
|
15
|
+
* lifecycle signal — no readiness gating, no liveness sweep.
|
|
16
|
+
* - The task's generated config dir (keyed by task id, exactly like a
|
|
17
|
+
* session's) is deleted via `onCleanup` when it exits; a crash leaves it
|
|
18
|
+
* to the same boot-time retention sweep real sessions use.
|
|
19
|
+
*/
|
|
20
|
+
import { randomUUID } from "node:crypto";
|
|
21
|
+
import { EventEmitter } from "node:events";
|
|
22
|
+
import { spawn as spawnChildProcess } from "node:child_process";
|
|
23
|
+
import { createInterface } from "node:readline";
|
|
24
|
+
import { ENV, } from "../shared/types.js";
|
|
25
|
+
import { parseTaskStreamLine } from "./task-stream.js";
|
|
26
|
+
/** Rolling status-line window kept per task — enough for the activity view's
|
|
27
|
+
* recent-history list without unbounded growth on a chatty run. */
|
|
28
|
+
const MAX_STATUS_LINES = 24;
|
|
29
|
+
/** Rolling stderr tail kept for failure display. */
|
|
30
|
+
const MAX_STDERR_CHARS = 2000;
|
|
31
|
+
/** Finished tasks retained (per whole manager) for late-mounting clients;
|
|
32
|
+
* running tasks are always retained regardless. */
|
|
33
|
+
const MAX_FINISHED_TASKS = 20;
|
|
34
|
+
const defaultSpawn = (command, args, options) => spawnChildProcess(command, args, { ...options, stdio: ["ignore", "pipe", "pipe"] });
|
|
35
|
+
/** Thrown when the session's harness adapter has no `launchTask` (codex,
|
|
36
|
+
* today) — the macros router surfaces this as a 400 with this message. */
|
|
37
|
+
export class TaskNotSupportedError extends Error {
|
|
38
|
+
constructor(harness, label) {
|
|
39
|
+
super(`${label} runs as a background task, which "${harness}" sessions don't support yet — use a Claude Code session.`);
|
|
40
|
+
this.name = "TaskNotSupportedError";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Thrown when the same macro is already running against the same target —
|
|
44
|
+
* two concurrent enrichment runs for one workflow would race on the same
|
|
45
|
+
* render/cache files. The target is the workflow when both tasks carry one
|
|
46
|
+
* (so one session CAN enrich two different workflows concurrently, and two
|
|
47
|
+
* sessions can NEVER double-enrich the same workflow), falling back to the
|
|
48
|
+
* session for workflow-less tasks. */
|
|
49
|
+
export class TaskAlreadyRunningError extends Error {
|
|
50
|
+
constructor(label) {
|
|
51
|
+
super(`${label} is already running.`);
|
|
52
|
+
this.name = "TaskAlreadyRunningError";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class TaskManager {
|
|
56
|
+
constructor(options) {
|
|
57
|
+
this.tasks = new Map();
|
|
58
|
+
/** Runs admitted past the dedupe check but not yet registered in `tasks`
|
|
59
|
+
* — the check→register window contains an await (buildLaunchOpts), so
|
|
60
|
+
* without this reservation two near-simultaneous run() calls for the
|
|
61
|
+
* same target both pass the check and both spawn. */
|
|
62
|
+
this.pendingRuns = [];
|
|
63
|
+
this.processes = new Map();
|
|
64
|
+
this.stderrTails = new Map();
|
|
65
|
+
/** The final result event's error text, when the stream produced one —
|
|
66
|
+
* preferred over a raw stderr tail for failure display. */
|
|
67
|
+
this.resultErrors = new Map();
|
|
68
|
+
/** The final result event's success text — published on the finished task
|
|
69
|
+
* as `resultText`, so a structured task's caller can parse the answer. */
|
|
70
|
+
this.resultTexts = new Map();
|
|
71
|
+
this.statusEmitter = new EventEmitter();
|
|
72
|
+
this.adapters = options.adapters;
|
|
73
|
+
this.ingestUrl = options.ingestUrl;
|
|
74
|
+
this.ingestToken = options.ingestToken;
|
|
75
|
+
this.collectorUrl = options.collectorUrl;
|
|
76
|
+
this.buildLaunchOpts = options.buildLaunchOpts ?? (() => ({}));
|
|
77
|
+
this.spawnProcess = options.spawnProcess ?? defaultSpawn;
|
|
78
|
+
this.onCleanup = options.onCleanup ?? (() => { });
|
|
79
|
+
this.now = options.now ?? (() => new Date().toISOString());
|
|
80
|
+
this.generateId = options.generateId ?? randomUUID;
|
|
81
|
+
this.statusEmitter.setMaxListeners(0);
|
|
82
|
+
}
|
|
83
|
+
list() {
|
|
84
|
+
return Array.from(this.tasks.values());
|
|
85
|
+
}
|
|
86
|
+
get(id) {
|
|
87
|
+
return this.tasks.get(id);
|
|
88
|
+
}
|
|
89
|
+
onStatusChange(listener) {
|
|
90
|
+
this.statusEmitter.on("status", listener);
|
|
91
|
+
return () => {
|
|
92
|
+
this.statusEmitter.off("status", listener);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Spawns one background task. Resolves once the process is launched (not
|
|
97
|
+
* when it finishes — completion arrives as a task.status broadcast).
|
|
98
|
+
* Throws TaskNotSupportedError / TaskAlreadyRunningError for the two
|
|
99
|
+
* user-addressable refusals; anything else (spawn failure, config
|
|
100
|
+
* generation failure) propagates as-is.
|
|
101
|
+
*/
|
|
102
|
+
async run(req) {
|
|
103
|
+
const adapter = this.adapters[req.harness];
|
|
104
|
+
if (!adapter)
|
|
105
|
+
throw new Error(`No adapter registered for harness "${req.harness}"`);
|
|
106
|
+
if (!adapter.launchTask)
|
|
107
|
+
throw new TaskNotSupportedError(req.harness, req.label);
|
|
108
|
+
const reqWorkflowPath = req.workflowPath ?? null;
|
|
109
|
+
// Workflow-targeted tasks dedupe on the workflow (never two enrichments
|
|
110
|
+
// of one workflow, from any session); workflow-less tasks keep the old
|
|
111
|
+
// per-session key. Checked against running tasks AND runs still being
|
|
112
|
+
// admitted (pendingRuns — see its comment).
|
|
113
|
+
const sameTarget = (other) => other.macroId === req.macroId &&
|
|
114
|
+
(other.workflowPath !== null && reqWorkflowPath !== null
|
|
115
|
+
? other.workflowPath === reqWorkflowPath
|
|
116
|
+
: other.harnessSessionId === req.harnessSessionId);
|
|
117
|
+
for (const task of this.tasks.values()) {
|
|
118
|
+
if (task.status === "running" && sameTarget(task))
|
|
119
|
+
throw new TaskAlreadyRunningError(req.label);
|
|
120
|
+
}
|
|
121
|
+
if (this.pendingRuns.some(sameTarget))
|
|
122
|
+
throw new TaskAlreadyRunningError(req.label);
|
|
123
|
+
const pending = { macroId: req.macroId, harnessSessionId: req.harnessSessionId, workflowPath: reqWorkflowPath };
|
|
124
|
+
this.pendingRuns.push(pending);
|
|
125
|
+
const releasePending = () => {
|
|
126
|
+
const index = this.pendingRuns.indexOf(pending);
|
|
127
|
+
if (index !== -1)
|
|
128
|
+
this.pendingRuns.splice(index, 1);
|
|
129
|
+
};
|
|
130
|
+
const id = this.generateId();
|
|
131
|
+
let spec;
|
|
132
|
+
try {
|
|
133
|
+
const opts = {
|
|
134
|
+
harnessSessionId: id,
|
|
135
|
+
cwd: req.cwd,
|
|
136
|
+
prompt: req.prompt,
|
|
137
|
+
...(req.model !== undefined ? { model: req.model } : {}),
|
|
138
|
+
...(req.maxTurns !== undefined ? { maxTurns: req.maxTurns } : {}),
|
|
139
|
+
...(await this.buildLaunchOpts(id, { cwd: req.cwd, harness: req.harness })),
|
|
140
|
+
};
|
|
141
|
+
spec = adapter.launchTask(opts);
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
releasePending();
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
const env = {};
|
|
148
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
149
|
+
if (value !== undefined)
|
|
150
|
+
env[key] = value;
|
|
151
|
+
}
|
|
152
|
+
for (const [key, value] of Object.entries(spec.env)) {
|
|
153
|
+
if (value === null)
|
|
154
|
+
delete env[key];
|
|
155
|
+
else
|
|
156
|
+
env[key] = value;
|
|
157
|
+
}
|
|
158
|
+
env[ENV.ingestUrl] = `${this.ingestUrl.replace(/\/$/, "")}/ingest`;
|
|
159
|
+
env[ENV.ingestToken] = this.ingestToken;
|
|
160
|
+
env[ENV.sessionId] = id;
|
|
161
|
+
if (this.collectorUrl)
|
|
162
|
+
env[ENV.collectorUrl] = this.collectorUrl;
|
|
163
|
+
const task = {
|
|
164
|
+
id,
|
|
165
|
+
macroId: req.macroId,
|
|
166
|
+
label: req.label,
|
|
167
|
+
harnessSessionId: req.harnessSessionId,
|
|
168
|
+
cwd: req.cwd,
|
|
169
|
+
workflowPath: reqWorkflowPath,
|
|
170
|
+
status: "running",
|
|
171
|
+
startedAt: this.now(),
|
|
172
|
+
endedAt: null,
|
|
173
|
+
exitCode: null,
|
|
174
|
+
statusLines: [],
|
|
175
|
+
resultText: null,
|
|
176
|
+
errorTail: null,
|
|
177
|
+
};
|
|
178
|
+
let child;
|
|
179
|
+
try {
|
|
180
|
+
child = this.spawnProcess(spec.command, spec.args, { cwd: spec.cwd, env });
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
// Never launched — nothing to track, but the generated config files
|
|
184
|
+
// buildLaunchOpts just wrote still need their exit-time cleanup.
|
|
185
|
+
releasePending();
|
|
186
|
+
this.onCleanup(id);
|
|
187
|
+
throw err;
|
|
188
|
+
}
|
|
189
|
+
this.tasks.set(id, task);
|
|
190
|
+
// Registered — the running-task check owns dedupe from here.
|
|
191
|
+
releasePending();
|
|
192
|
+
this.processes.set(id, child);
|
|
193
|
+
this.trimFinished();
|
|
194
|
+
this.emitStatus(task);
|
|
195
|
+
if (child.stdout) {
|
|
196
|
+
const lines = createInterface({ input: child.stdout });
|
|
197
|
+
lines.on("line", (line) => this.handleStdoutLine(id, line));
|
|
198
|
+
}
|
|
199
|
+
child.stderr?.on("data", (chunk) => {
|
|
200
|
+
const tail = (this.stderrTails.get(id) ?? "") + String(chunk);
|
|
201
|
+
this.stderrTails.set(id, tail.slice(-MAX_STDERR_CHARS));
|
|
202
|
+
});
|
|
203
|
+
// A spawn-time failure surfacing async (ENOENT for a missing binary
|
|
204
|
+
// arrives as "error", not "exit") still needs the task reconciled —
|
|
205
|
+
// record the message where the exit handler will pick it up. "error"
|
|
206
|
+
// without a later "exit" is possible for pre-spawn failures, so finish
|
|
207
|
+
// directly; the guard in finish() makes a double call harmless.
|
|
208
|
+
child.on("error", (err) => {
|
|
209
|
+
this.stderrTails.set(id, ((this.stderrTails.get(id) ?? "") + `\n${err.message}`).slice(-MAX_STDERR_CHARS));
|
|
210
|
+
this.finish(id, null);
|
|
211
|
+
});
|
|
212
|
+
child.on("exit", (code) => this.finish(id, code));
|
|
213
|
+
return task;
|
|
214
|
+
}
|
|
215
|
+
/** Kills every still-running task process. Call on server shutdown, same
|
|
216
|
+
* reason as SessionManager.killAll — child processes aren't torn down by
|
|
217
|
+
* the HTTP server closing. */
|
|
218
|
+
killAll() {
|
|
219
|
+
for (const child of this.processes.values()) {
|
|
220
|
+
try {
|
|
221
|
+
child.kill("SIGTERM");
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
// Already gone.
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
handleStdoutLine(id, line) {
|
|
229
|
+
const task = this.tasks.get(id);
|
|
230
|
+
if (!task || task.status !== "running")
|
|
231
|
+
return;
|
|
232
|
+
const update = parseTaskStreamLine(line);
|
|
233
|
+
if (!update)
|
|
234
|
+
return;
|
|
235
|
+
if (update.result?.isError && update.result.text) {
|
|
236
|
+
this.resultErrors.set(id, update.result.text);
|
|
237
|
+
}
|
|
238
|
+
else if (update.result && !update.result.isError) {
|
|
239
|
+
this.resultTexts.set(id, update.result.text);
|
|
240
|
+
}
|
|
241
|
+
if (update.statusLines.length === 0)
|
|
242
|
+
return;
|
|
243
|
+
task.statusLines = [...task.statusLines, ...update.statusLines].slice(-MAX_STATUS_LINES);
|
|
244
|
+
this.emitStatus(task);
|
|
245
|
+
}
|
|
246
|
+
/** The single running→finished transition — shared by "exit" and "error",
|
|
247
|
+
* which can both fire for one process, so it's idempotent. */
|
|
248
|
+
finish(id, exitCode) {
|
|
249
|
+
const task = this.tasks.get(id);
|
|
250
|
+
if (!task || task.status !== "running")
|
|
251
|
+
return;
|
|
252
|
+
const resultError = this.resultErrors.get(id);
|
|
253
|
+
const failed = exitCode !== 0 || resultError !== undefined;
|
|
254
|
+
task.status = failed ? "failed" : "completed";
|
|
255
|
+
task.exitCode = exitCode;
|
|
256
|
+
task.endedAt = this.now();
|
|
257
|
+
if (failed) {
|
|
258
|
+
const stderrTail = this.stderrTails.get(id)?.trim();
|
|
259
|
+
task.errorTail = resultError ?? (stderrTail || `exited with code ${exitCode ?? "unknown"}`);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
task.resultText = this.resultTexts.get(id) ?? null;
|
|
263
|
+
}
|
|
264
|
+
this.processes.delete(id);
|
|
265
|
+
this.stderrTails.delete(id);
|
|
266
|
+
this.resultErrors.delete(id);
|
|
267
|
+
this.resultTexts.delete(id);
|
|
268
|
+
this.emitStatus(task);
|
|
269
|
+
this.onCleanup(id);
|
|
270
|
+
}
|
|
271
|
+
/** Drops the oldest finished tasks beyond MAX_FINISHED_TASKS — running
|
|
272
|
+
* tasks are never dropped. */
|
|
273
|
+
trimFinished() {
|
|
274
|
+
const finished = this.list().filter((task) => task.status !== "running");
|
|
275
|
+
if (finished.length <= MAX_FINISHED_TASKS)
|
|
276
|
+
return;
|
|
277
|
+
finished
|
|
278
|
+
.sort((a, b) => (a.endedAt ?? "").localeCompare(b.endedAt ?? ""))
|
|
279
|
+
.slice(0, finished.length - MAX_FINISHED_TASKS)
|
|
280
|
+
.forEach((task) => this.tasks.delete(task.id));
|
|
281
|
+
}
|
|
282
|
+
emitStatus(task) {
|
|
283
|
+
this.statusEmitter.emit("status", { ...task, statusLines: [...task.statusLines] });
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=task-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/core/task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses the line-oriented JSON a background task's agent process writes to
|
|
3
|
+
* stdout (`claude -p --output-format stream-json --verbose`) into the two
|
|
4
|
+
* things TaskManager actually needs: compact human-readable progress lines
|
|
5
|
+
* for the canvas pane's live activity view, and the final result event's
|
|
6
|
+
* error state. Pure and defensive — a task's stdout is another program's
|
|
7
|
+
* output format, so anything unrecognized degrades to "no update", never a
|
|
8
|
+
* throw.
|
|
9
|
+
*
|
|
10
|
+
* Event shapes handled (everything else is ignored):
|
|
11
|
+
* - {"type":"system","subtype":"init",...} → "Agent started"
|
|
12
|
+
* - {"type":"assistant","message":{"content":[...]}} → one line per block:
|
|
13
|
+
* {"type":"tool_use","name":"Write","input":{...}} → "Write <path/hint>"
|
|
14
|
+
* {"type":"text","text":"..."} → truncated snippet
|
|
15
|
+
* - {"type":"result","is_error":bool,"result":"..."} → final result
|
|
16
|
+
*/
|
|
17
|
+
export interface TaskStreamUpdate {
|
|
18
|
+
/** Zero or more new progress lines (an assistant message can carry several
|
|
19
|
+
* content blocks). */
|
|
20
|
+
statusLines: string[];
|
|
21
|
+
/** Present only for the final "result" event. */
|
|
22
|
+
result?: {
|
|
23
|
+
isError: boolean;
|
|
24
|
+
text: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parses one stdout line. Returns null for anything that isn't a recognized
|
|
29
|
+
* stream event (blank lines, non-JSON noise, event types we don't render).
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseTaskStreamLine(line: string): TaskStreamUpdate | null;
|
|
32
|
+
//# sourceMappingURL=task-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-stream.d.ts","sourceRoot":"","sources":["../../src/core/task-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,MAAM,WAAW,gBAAgB;IAC/B;2BACuB;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iDAAiD;IACjD,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AA6BD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA2CzE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses the line-oriented JSON a background task's agent process writes to
|
|
3
|
+
* stdout (`claude -p --output-format stream-json --verbose`) into the two
|
|
4
|
+
* things TaskManager actually needs: compact human-readable progress lines
|
|
5
|
+
* for the canvas pane's live activity view, and the final result event's
|
|
6
|
+
* error state. Pure and defensive — a task's stdout is another program's
|
|
7
|
+
* output format, so anything unrecognized degrades to "no update", never a
|
|
8
|
+
* throw.
|
|
9
|
+
*
|
|
10
|
+
* Event shapes handled (everything else is ignored):
|
|
11
|
+
* - {"type":"system","subtype":"init",...} → "Agent started"
|
|
12
|
+
* - {"type":"assistant","message":{"content":[...]}} → one line per block:
|
|
13
|
+
* {"type":"tool_use","name":"Write","input":{...}} → "Write <path/hint>"
|
|
14
|
+
* {"type":"text","text":"..."} → truncated snippet
|
|
15
|
+
* - {"type":"result","is_error":bool,"result":"..."} → final result
|
|
16
|
+
*/
|
|
17
|
+
/** Keep progress lines short enough to render as single status rows. */
|
|
18
|
+
const MAX_LINE_CHARS = 120;
|
|
19
|
+
function truncate(text) {
|
|
20
|
+
const flattened = text.replace(/\s+/g, " ").trim();
|
|
21
|
+
return flattened.length > MAX_LINE_CHARS ? `${flattened.slice(0, MAX_LINE_CHARS - 1)}…` : flattened;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The one input field per tool that identifies what it's acting on — enough
|
|
25
|
+
* for a "Write .sapiom/canvas/index.html"-style status line without dumping
|
|
26
|
+
* whole tool inputs (a Write's `content` can be an entire HTML file).
|
|
27
|
+
*/
|
|
28
|
+
function toolInputHint(input) {
|
|
29
|
+
if (typeof input !== "object" || input === null)
|
|
30
|
+
return "";
|
|
31
|
+
const record = input;
|
|
32
|
+
for (const key of ["file_path", "path", "command", "pattern", "url", "description"]) {
|
|
33
|
+
const value = record[key];
|
|
34
|
+
if (typeof value === "string" && value.trim())
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parses one stdout line. Returns null for anything that isn't a recognized
|
|
41
|
+
* stream event (blank lines, non-JSON noise, event types we don't render).
|
|
42
|
+
*/
|
|
43
|
+
export function parseTaskStreamLine(line) {
|
|
44
|
+
const trimmed = line.trim();
|
|
45
|
+
if (!trimmed)
|
|
46
|
+
return null;
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(trimmed);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
55
|
+
return null;
|
|
56
|
+
const event = parsed;
|
|
57
|
+
if (event.type === "system" && event.subtype === "init") {
|
|
58
|
+
return { statusLines: ["Agent started"] };
|
|
59
|
+
}
|
|
60
|
+
if (event.type === "assistant") {
|
|
61
|
+
const message = event.message;
|
|
62
|
+
if (!Array.isArray(message?.content))
|
|
63
|
+
return null;
|
|
64
|
+
const statusLines = [];
|
|
65
|
+
for (const block of message.content) {
|
|
66
|
+
if (block?.type === "tool_use" && typeof block.name === "string") {
|
|
67
|
+
const hint = toolInputHint(block.input);
|
|
68
|
+
statusLines.push(truncate(hint ? `${block.name} ${hint}` : block.name));
|
|
69
|
+
}
|
|
70
|
+
else if (block?.type === "text" && typeof block.text === "string" && block.text.trim()) {
|
|
71
|
+
statusLines.push(truncate(block.text));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return statusLines.length > 0 ? { statusLines } : null;
|
|
75
|
+
}
|
|
76
|
+
if (event.type === "result") {
|
|
77
|
+
return {
|
|
78
|
+
statusLines: [],
|
|
79
|
+
result: {
|
|
80
|
+
isError: event.is_error === true,
|
|
81
|
+
text: typeof event.result === "string" ? event.result : "",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=task-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-stream.js","sourceRoot":"","sources":["../../src/core/task-stream.ts"],"names":[],"mappings":"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"}
|