dsh-super-code 0.3.7 → 0.3.8

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 (47) hide show
  1. package/README.md +14 -10
  2. package/client/index.js +576 -24
  3. package/cordis.patch.yml +1 -1
  4. package/docs/Changelog.md +9 -0
  5. package/docs/Compatibility.md +30 -0
  6. package/docs/UsageGuide.md +60 -0
  7. package/lib/connection/directories.d.ts +30 -0
  8. package/lib/connection/directories.d.ts.map +1 -0
  9. package/lib/connection/directories.js +82 -0
  10. package/lib/connection/directories.js.map +1 -0
  11. package/lib/connection/git.d.ts +5 -0
  12. package/lib/connection/git.d.ts.map +1 -0
  13. package/lib/connection/git.js +86 -0
  14. package/lib/connection/git.js.map +1 -0
  15. package/lib/connection/http.d.ts +38 -0
  16. package/lib/connection/http.d.ts.map +1 -0
  17. package/lib/connection/http.js +275 -0
  18. package/lib/connection/http.js.map +1 -0
  19. package/lib/connection/service.d.ts +57 -0
  20. package/lib/connection/service.d.ts.map +1 -0
  21. package/lib/connection/service.js +168 -0
  22. package/lib/connection/service.js.map +1 -0
  23. package/lib/connection/store.d.ts +21 -0
  24. package/lib/connection/store.d.ts.map +1 -0
  25. package/lib/connection/store.js +139 -0
  26. package/lib/connection/store.js.map +1 -0
  27. package/lib/connection/tasks.d.ts +84 -0
  28. package/lib/connection/tasks.d.ts.map +1 -0
  29. package/lib/connection/tasks.js +270 -0
  30. package/lib/connection/tasks.js.map +1 -0
  31. package/lib/connection/types.d.ts +90 -0
  32. package/lib/connection/types.d.ts.map +1 -0
  33. package/lib/connection/types.js +21 -0
  34. package/lib/connection/types.js.map +1 -0
  35. package/lib/dsh/connection-host.d.ts +81 -0
  36. package/lib/dsh/connection-host.d.ts.map +1 -0
  37. package/lib/dsh/connection-host.js +130 -0
  38. package/lib/dsh/connection-host.js.map +1 -0
  39. package/lib/dsh/connection.d.ts +72 -0
  40. package/lib/dsh/connection.d.ts.map +1 -0
  41. package/lib/dsh/connection.js +183 -0
  42. package/lib/dsh/connection.js.map +1 -0
  43. package/lib/dsh/index.d.ts.map +1 -1
  44. package/lib/dsh/index.js +2 -0
  45. package/lib/dsh/index.js.map +1 -1
  46. package/package.json +7 -6
  47. package/presets/super-code/agent.cordis.yml +1 -1
@@ -0,0 +1,139 @@
1
+ /** Profile-local storage. Claim before reading/writing; never replay dispatch intents on boot. */
2
+ import { chmod, mkdir, open, readFile, rename, unlink, lstat } from 'node:fs/promises';
3
+ import { join, isAbsolute, relative } from 'node:path';
4
+ import { randomBytes, randomUUID } from 'node:crypto';
5
+ import { z } from 'zod';
6
+ import { connectionConfigSchema, defaultConnectionConfig, ConnectionError } from './types.js';
7
+ const taskSchema = z.object({
8
+ id: z.string().regex(/^sc-[a-f0-9-]{36}$/), sessionId: z.string(), requestId: z.string().min(1).max(128), fingerprint: z.string().length(64),
9
+ cwd: z.string().max(4096), preset: z.string().min(1).max(128), client: z.string().max(80),
10
+ status: z.enum(['starting', 'running', 'waiting_confirmation', 'cancelling', 'finished', 'failed', 'cancelled', 'interrupted', 'unavailable']),
11
+ cancellationRequested: z.boolean(), createdAt: z.number(), updatedAt: z.number(), currentRequest: z.string(), output: z.string().max(12000),
12
+ sequence: z.number().int().nonnegative(), events: z.array(z.object({ cursor: z.number().int().positive(), time: z.number(), status: z.string(), message: z.string().max(1000) }).strict()).max(200),
13
+ operations: z.record(z.string(), z.string().length(64)).refine(value => Object.keys(value).length <= 128),
14
+ connectionId: z.string().max(128).optional(),
15
+ baseline: z.object({ available: z.boolean(), root: z.string(), head: z.string(), fingerprint: z.string(), dirty: z.array(z.string()).max(160) }).strict(),
16
+ }).strict().refine(value => value.sessionId === value.id && isAbsolute(value.cwd));
17
+ const settingsSchema = z.object({ revision: z.number().int().nonnegative(), config: connectionConfigSchema,
18
+ token: z.string().regex(/^[a-f0-9]{64}$/) }).strict();
19
+ export class ConnectionStore {
20
+ directory;
21
+ lock = '';
22
+ owned = false;
23
+ constructor(directory) {
24
+ this.directory = directory;
25
+ }
26
+ async initialize() {
27
+ if (!isAbsolute(this.directory))
28
+ throw new ConnectionError('storage-unavailable');
29
+ await mkdir(this.directory, { recursive: true, mode: 0o700 });
30
+ const info = await lstat(this.directory);
31
+ if (!info.isDirectory() || info.isSymbolicLink())
32
+ throw new ConnectionError('storage-unavailable');
33
+ await chmod(this.directory, 0o700);
34
+ const path = join(this.directory, 'owner.lock');
35
+ this.lock = `${process.pid}:${randomUUID()}`;
36
+ try {
37
+ await this.claim(path);
38
+ }
39
+ catch (error) {
40
+ if (error.code !== 'EEXIST')
41
+ throw error;
42
+ // A separate exclusive claim serializes stale-lock recovery by competing hosts.
43
+ const recovery = await open(join(this.directory, 'recovery.lock'), 'wx', 0o600).catch(() => { throw new ConnectionError('profile-busy'); });
44
+ try {
45
+ const previous = await readFile(path, 'utf8');
46
+ const pid = Number(previous.split(':')[0]);
47
+ if (!Number.isSafeInteger(pid) || pid <= 0)
48
+ throw new ConnectionError('profile-busy');
49
+ try {
50
+ process.kill(pid, 0);
51
+ throw new ConnectionError('profile-busy');
52
+ }
53
+ catch (failure) {
54
+ if (failure.code !== 'ESRCH')
55
+ throw failure;
56
+ }
57
+ await unlink(path);
58
+ await this.claim(path);
59
+ }
60
+ finally {
61
+ await recovery.close();
62
+ await unlink(join(this.directory, 'recovery.lock'));
63
+ }
64
+ }
65
+ this.owned = true;
66
+ }
67
+ async claim(path) {
68
+ const file = await open(path, 'wx', 0o600);
69
+ try {
70
+ await file.writeFile(this.lock);
71
+ await file.sync();
72
+ }
73
+ finally {
74
+ await file.close();
75
+ }
76
+ }
77
+ async close() {
78
+ if (!this.owned)
79
+ return;
80
+ this.owned = false;
81
+ const path = join(this.directory, 'owner.lock');
82
+ if (await readFile(path, 'utf8') === this.lock)
83
+ await unlink(path);
84
+ }
85
+ async settings() {
86
+ try {
87
+ const stored = settingsSchema.parse(JSON.parse(await readFile(join(this.directory, 'settings.json'), 'utf8')));
88
+ if (stored.config.maxConcurrent !== stored.config.maxConnections) {
89
+ stored.config.maxConcurrent = stored.config.maxConnections;
90
+ await this.write('settings.json', stored);
91
+ }
92
+ return stored;
93
+ }
94
+ catch (error) {
95
+ if (error.code !== 'ENOENT')
96
+ throw new ConnectionError('storage-unavailable');
97
+ const value = { revision: 0, config: structuredClone(defaultConnectionConfig), token: randomBytes(32).toString('hex') };
98
+ await this.write('settings.json', value);
99
+ return value;
100
+ }
101
+ }
102
+ async saveSettings(value) {
103
+ const normalized = settingsSchema.parse(value);
104
+ normalized.config.maxConcurrent = normalized.config.maxConnections;
105
+ await this.write('settings.json', normalized);
106
+ }
107
+ async tasks() {
108
+ try {
109
+ const path = join(this.directory, 'tasks.json');
110
+ if ((await lstat(path)).size > 16 * 1024 * 1024)
111
+ throw new ConnectionError('storage-unavailable');
112
+ return z.array(taskSchema).max(200).parse(JSON.parse(await readFile(path, 'utf8')));
113
+ }
114
+ catch (error) {
115
+ if (error.code === 'ENOENT')
116
+ return [];
117
+ throw new ConnectionError('storage-unavailable');
118
+ }
119
+ }
120
+ async saveTasks(tasks) { await this.write('tasks.json', tasks); }
121
+ async write(name, value) {
122
+ if (!this.owned || relative(this.directory, join(this.directory, name)).startsWith('..'))
123
+ throw new ConnectionError('storage-unavailable');
124
+ const target = join(this.directory, name), temporary = `${target}.${randomUUID()}.tmp`;
125
+ const file = await open(temporary, 'wx', 0o600);
126
+ try {
127
+ await file.writeFile(JSON.stringify(value));
128
+ await file.sync();
129
+ await file.close();
130
+ await rename(temporary, target);
131
+ }
132
+ catch (error) {
133
+ await file.close().catch(() => { });
134
+ await unlink(temporary).catch(() => { });
135
+ throw error;
136
+ }
137
+ }
138
+ }
139
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/connection/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { ConnectionConfig, DelegationHost, TaskStatus, TaskView } from './types.js';
2
+ import type { ConnectionStore } from './store.js';
3
+ export declare function withinDirectory(root: string, cwd: string): boolean;
4
+ export declare class DelegatedTasks {
5
+ private readonly store;
6
+ private readonly host;
7
+ private readonly configuration;
8
+ private records;
9
+ private tail;
10
+ private closed;
11
+ constructor(store: ConnectionStore, host: DelegationHost, configuration: () => ConnectionConfig);
12
+ initialize(): Promise<void>;
13
+ private exclusive;
14
+ private event;
15
+ private persist;
16
+ private owned;
17
+ private enabled;
18
+ private directory;
19
+ private capacity;
20
+ run(input: {
21
+ requestId: string;
22
+ cwd: string;
23
+ prompt: string;
24
+ client?: string;
25
+ connectionId?: string;
26
+ }): Promise<TaskView>;
27
+ send(input: {
28
+ taskId: string;
29
+ requestId: string;
30
+ cwd?: string;
31
+ prompt: string;
32
+ connectionId?: string;
33
+ }): Promise<TaskView>;
34
+ cancel(id: string): Promise<TaskView>;
35
+ private refresh;
36
+ tick(): Promise<void>;
37
+ view(id: string, cursor: number): Promise<TaskView>;
38
+ list(cursor: number): Promise<{
39
+ tasks: {
40
+ taskId: string;
41
+ sessionId: string;
42
+ cwd: string;
43
+ client: string;
44
+ status: TaskStatus;
45
+ updatedAt: number;
46
+ }[];
47
+ nextCursor: number | false;
48
+ }>;
49
+ sessions(cwd: string, limit: number, status: {
50
+ connections: number;
51
+ maxConnections: number;
52
+ ids: readonly string[];
53
+ }): Promise<{
54
+ cwd: string;
55
+ connections: number;
56
+ maxConnections: number;
57
+ availableConnections: number;
58
+ activeTasks: number;
59
+ availableTasks: number;
60
+ sessions: {
61
+ taskId: string;
62
+ sessionId: string;
63
+ cwd: string;
64
+ client: string;
65
+ status: TaskStatus;
66
+ createdAt: number;
67
+ updatedAt: number;
68
+ connectionCount: number;
69
+ reusable: boolean;
70
+ }[];
71
+ }>;
72
+ overview(): {
73
+ taskId: string;
74
+ sessionId: string;
75
+ cwd: string;
76
+ client: string;
77
+ connectionId: string;
78
+ status: TaskStatus;
79
+ updatedAt: number;
80
+ }[];
81
+ wait(id: string, cursor: number, waitMs: number, signal?: AbortSignal): Promise<TaskView>;
82
+ close(): Promise<void>;
83
+ }
84
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/connection/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ import { randomUUID, createHash } from 'node:crypto';
2
+ import { realpath, stat } from 'node:fs/promises';
3
+ import { isAbsolute, relative, sep } from 'node:path';
4
+ import { setTimeout as pause } from 'node:timers/promises';
5
+ import { activeTask, ConnectionError } from './types.js';
6
+ import { gitSnapshot, gitWorktreeRoot, workspaceChanges } from './git.js';
7
+ export function withinDirectory(root, cwd) {
8
+ const path = relative(root, cwd);
9
+ return path === '' || (!path.startsWith(`..${sep}`) && path !== '..' && !isAbsolute(path));
10
+ }
11
+ function digest(value) { return createHash('sha256').update(JSON.stringify(value)).digest('hex'); }
12
+ export class DelegatedTasks {
13
+ store;
14
+ host;
15
+ configuration;
16
+ records = [];
17
+ tail = Promise.resolve();
18
+ closed = false;
19
+ constructor(store, host, configuration) {
20
+ this.store = store;
21
+ this.host = host;
22
+ this.configuration = configuration;
23
+ }
24
+ async initialize() {
25
+ this.records = await this.store.tasks();
26
+ for (const task of this.records)
27
+ if (activeTask(task.status))
28
+ this.event(task, 'interrupted', 'Service restarted; no request was replayed. Observe or explicitly continue this task.');
29
+ await this.persist();
30
+ }
31
+ exclusive(run) {
32
+ const operation = this.tail.then(run);
33
+ this.tail = operation.catch(() => { });
34
+ return operation;
35
+ }
36
+ event(task, status, message) {
37
+ task.status = status;
38
+ task.updatedAt = Date.now();
39
+ task.events.push({ cursor: ++task.sequence, time: task.updatedAt, status, message: message.slice(0, 1000) });
40
+ task.events = task.events.slice(-200);
41
+ }
42
+ async persist() { await this.store.saveTasks(this.records); }
43
+ owned(id) {
44
+ const task = this.records.find(row => row.id === id);
45
+ if (!task)
46
+ throw new ConnectionError('task-not-found');
47
+ return task;
48
+ }
49
+ enabled() {
50
+ if (this.closed || !this.configuration().enabled)
51
+ throw new ConnectionError('connection-disabled');
52
+ }
53
+ async directory(cwd) {
54
+ if (!isAbsolute(cwd))
55
+ throw new ConnectionError('absolute-directory-required');
56
+ let canonical;
57
+ try {
58
+ canonical = await realpath(cwd);
59
+ if (!(await stat(canonical)).isDirectory())
60
+ throw new Error();
61
+ }
62
+ catch {
63
+ throw new ConnectionError('directory-unavailable');
64
+ }
65
+ const roots = await Promise.all(this.configuration().allowedDirectories.map(path => realpath(path)));
66
+ if (!roots.some(root => withinDirectory(root, canonical)))
67
+ throw new ConnectionError('directory-not-allowed');
68
+ return canonical;
69
+ }
70
+ async capacity(cwd, except = '') {
71
+ const pending = this.records.filter(row => row.id !== except && (activeTask(row.status) || row.status === 'interrupted'));
72
+ if (pending.length >= this.configuration().maxConnections)
73
+ throw new ConnectionError('concurrency-limit');
74
+ const root = await gitWorktreeRoot(cwd);
75
+ const roots = await Promise.all(pending.map(row => gitWorktreeRoot(row.cwd)));
76
+ if (pending.some((row, index) => withinDirectory(row.cwd, cwd) || withinDirectory(cwd, row.cwd)
77
+ || root !== false && root === roots[index]))
78
+ throw new ConnectionError('workspace-busy');
79
+ }
80
+ async run(input) {
81
+ const task = await this.exclusive(async () => {
82
+ this.enabled();
83
+ const cwd = await this.directory(input.cwd);
84
+ const fingerprint = digest({ cwd, prompt: input.prompt, client: input.client ?? 'mcp' });
85
+ const prior = this.records.find(row => row.requestId === input.requestId);
86
+ if (prior) {
87
+ if (prior.fingerprint !== fingerprint)
88
+ throw new ConnectionError('request-conflict');
89
+ if (input.connectionId && prior.connectionId !== input.connectionId) {
90
+ prior.connectionId = input.connectionId;
91
+ await this.persist();
92
+ }
93
+ return prior;
94
+ }
95
+ if (this.records.length >= 200)
96
+ throw new ConnectionError('task-history-full');
97
+ await this.capacity(cwd);
98
+ const preset = await this.host.preset(), id = `sc-${randomUUID()}`, now = Date.now();
99
+ const row = { id, sessionId: id, requestId: input.requestId, fingerprint, cwd, preset,
100
+ client: input.client ?? 'mcp', status: 'starting', cancellationRequested: false, createdAt: now, updatedAt: now, currentRequest: randomUUID(),
101
+ output: '', sequence: 0, events: [], operations: {}, baseline: await gitSnapshot(cwd), ...(input.connectionId ? { connectionId: input.connectionId } : {}) };
102
+ this.event(row, 'starting', 'Dispatch intent saved. A DSH turn ending does not verify task acceptance.');
103
+ this.records.push(row);
104
+ await this.persist();
105
+ try {
106
+ await this.host.create(row.sessionId, cwd, preset);
107
+ }
108
+ catch {
109
+ this.event(row, 'failed', 'Session creation failed. No prompt was sent.');
110
+ await this.persist();
111
+ return row;
112
+ }
113
+ try {
114
+ await this.host.prompt(row.sessionId, row.currentRequest, input.prompt);
115
+ this.event(row, 'running', 'Prompt accepted by DSH.');
116
+ }
117
+ catch {
118
+ this.event(row, 'interrupted', 'Prompt admission could not be confirmed. No automatic retry; inspect the DSH session before continuing.');
119
+ }
120
+ await this.persist();
121
+ return row;
122
+ });
123
+ return this.view(task.id, 0);
124
+ }
125
+ async send(input) {
126
+ await this.exclusive(async () => {
127
+ this.enabled();
128
+ const task = this.owned(input.taskId), fingerprint = digest(input.prompt);
129
+ const cwd = await this.directory(input.cwd ?? task.cwd);
130
+ if (cwd !== task.cwd)
131
+ throw new ConnectionError('task-directory-mismatch');
132
+ const prior = Object.hasOwn(task.operations, input.requestId) ? task.operations[input.requestId] : false;
133
+ if (prior) {
134
+ if (prior !== fingerprint)
135
+ throw new ConnectionError('request-conflict');
136
+ if (input.connectionId && task.connectionId !== input.connectionId) {
137
+ task.connectionId = input.connectionId;
138
+ await this.persist();
139
+ }
140
+ return;
141
+ }
142
+ if (Object.keys(task.operations).length >= 128)
143
+ throw new ConnectionError('task-operation-limit');
144
+ await this.refresh(task);
145
+ if (task.status === 'cancelling' || task.status === 'waiting_confirmation')
146
+ throw new ConnectionError('resolve-in-dsh-first');
147
+ await this.capacity(task.cwd, task.id);
148
+ // Persist the operation before admission. A retry observes this intent; it never resends it.
149
+ Object.defineProperty(task.operations, input.requestId, { value: fingerprint, enumerable: true, configurable: true, writable: true });
150
+ task.currentRequest = randomUUID();
151
+ task.cancellationRequested = false;
152
+ if (input.connectionId)
153
+ task.connectionId = input.connectionId;
154
+ this.event(task, 'starting', 'Explicit continuation intent saved.');
155
+ await this.persist();
156
+ try {
157
+ await this.host.prompt(task.sessionId, task.currentRequest, input.prompt);
158
+ this.event(task, 'running', 'Continuation accepted by DSH.');
159
+ }
160
+ catch {
161
+ this.event(task, 'interrupted', 'Continuation admission could not be confirmed; no automatic retry.');
162
+ }
163
+ await this.persist();
164
+ });
165
+ return this.view(input.taskId, 0);
166
+ }
167
+ async cancel(id) {
168
+ await this.exclusive(async () => {
169
+ this.enabled();
170
+ const task = this.owned(id);
171
+ await this.refresh(task);
172
+ if (!activeTask(task.status) && task.status !== 'interrupted')
173
+ return;
174
+ task.cancellationRequested = true;
175
+ this.event(task, 'cancelling', 'Cancellation requested; waiting for the root and managed descendants to stop.');
176
+ await this.persist();
177
+ try {
178
+ await this.host.cancel(task.sessionId);
179
+ }
180
+ catch {
181
+ this.event(task, 'unavailable', 'Could not confirm cancellation of the complete task tree. Check DSH.');
182
+ await this.persist();
183
+ return;
184
+ }
185
+ await this.refresh(task);
186
+ await this.persist();
187
+ });
188
+ return this.view(id, 0);
189
+ }
190
+ async refresh(task) {
191
+ if (!activeTask(task.status) && task.status !== 'interrupted')
192
+ return;
193
+ if (task.cancellationRequested)
194
+ await this.host.cancel(task.sessionId).catch(() => { });
195
+ const observation = await this.host.observe(task.sessionId, task.currentRequest, task.cancellationRequested);
196
+ const status = task.cancellationRequested
197
+ ? ['finished', 'interrupted', 'failed'].includes(observation.status) ? 'cancelled' : observation.status === 'unavailable' ? 'unavailable' : 'cancelling'
198
+ : observation.status;
199
+ const changed = task.output !== observation.output;
200
+ task.output = observation.output.slice(-12000);
201
+ if (task.status !== status || changed) {
202
+ this.event(task, status, observation.detail);
203
+ await this.persist();
204
+ }
205
+ }
206
+ async tick() {
207
+ await this.exclusive(async () => {
208
+ if (this.closed)
209
+ return;
210
+ for (const task of this.records)
211
+ if (activeTask(task.status) || task.status === 'interrupted') {
212
+ try {
213
+ await this.refresh(task);
214
+ }
215
+ catch {
216
+ if (task.status !== 'unavailable') {
217
+ this.event(task, 'unavailable', 'Task observation is unavailable; no request was replayed.');
218
+ await this.persist();
219
+ }
220
+ }
221
+ }
222
+ });
223
+ }
224
+ async view(id, cursor) {
225
+ const task = await this.exclusive(async () => { const row = this.owned(id); await this.refresh(row); return structuredClone(row); });
226
+ return { taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, preset: task.preset, client: task.client,
227
+ status: task.status, createdAt: task.createdAt, updatedAt: task.updatedAt, output: task.output,
228
+ events: task.events.filter(event => event.cursor > cursor), cursor: task.sequence,
229
+ eventsTruncated: cursor < (task.events[0]?.cursor ?? 1) - 1, acceptance: 'not-verified',
230
+ workspace: await workspaceChanges(task.cwd, task.baseline) };
231
+ }
232
+ async list(cursor) {
233
+ return this.exclusive(async () => {
234
+ const rows = [...this.records].reverse();
235
+ return { tasks: rows.slice(cursor, cursor + 25).map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client, status: task.status, updatedAt: task.updatedAt })),
236
+ nextCursor: cursor + 25 < rows.length ? cursor + 25 : false };
237
+ });
238
+ }
239
+ async sessions(cwd, limit, status) {
240
+ this.enabled();
241
+ const canonical = await this.directory(cwd);
242
+ return this.exclusive(async () => {
243
+ const rows = this.records.filter(task => task.cwd === canonical).sort((a, b) => b.updatedAt - a.updatedAt || b.createdAt - a.createdAt).slice(0, Math.min(Math.max(limit, 1), 25));
244
+ const reusable = new Set(['finished', 'failed', 'cancelled']);
245
+ const activeTasks = this.records.filter(task => activeTask(task.status) || task.status === 'interrupted').length;
246
+ return { cwd: canonical, connections: status.connections, maxConnections: status.maxConnections,
247
+ availableConnections: Math.max(status.maxConnections - status.connections, 0),
248
+ activeTasks, availableTasks: Math.max(status.maxConnections - activeTasks, 0),
249
+ sessions: rows.map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client, status: task.status,
250
+ createdAt: task.createdAt, updatedAt: task.updatedAt, connectionCount: task.connectionId && status.ids.includes(task.connectionId) ? 1 : 0,
251
+ reusable: reusable.has(task.status) })) };
252
+ });
253
+ }
254
+ overview() {
255
+ return [...this.records].reverse().map(task => ({ taskId: task.id, sessionId: task.sessionId, cwd: task.cwd, client: task.client,
256
+ connectionId: task.connectionId ?? '', status: task.status, updatedAt: task.updatedAt }));
257
+ }
258
+ async wait(id, cursor, waitMs, signal) {
259
+ const deadline = Date.now() + Math.min(Math.max(waitMs, 0), 30000);
260
+ let view = await this.view(id, cursor);
261
+ while (activeTask(view.status) && view.status !== 'waiting_confirmation' && view.cursor <= cursor && Date.now() < deadline) {
262
+ signal?.throwIfAborted();
263
+ await pause(Math.min(250, Math.max(1, deadline - Date.now())), undefined, { signal });
264
+ view = await this.view(id, cursor);
265
+ }
266
+ return view;
267
+ }
268
+ async close() { await this.exclusive(async () => { this.closed = true; await this.persist(); }); }
269
+ }
270
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/connection/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { z } from 'zod';
2
+ export interface ConnectionConfig {
3
+ enabled: boolean;
4
+ port: number;
5
+ allowedDirectories: string[];
6
+ knownDirectories: string[];
7
+ maxConcurrent: number;
8
+ maxConnections: number;
9
+ directoriesConfigured: boolean;
10
+ }
11
+ export declare const connectionConfigSchema: z.ZodType<ConnectionConfig>;
12
+ export declare const defaultConnectionConfig: ConnectionConfig;
13
+ export type TaskStatus = 'starting' | 'running' | 'waiting_confirmation' | 'cancelling' | 'finished' | 'failed' | 'cancelled' | 'interrupted' | 'unavailable';
14
+ export interface TaskEvent {
15
+ cursor: number;
16
+ time: number;
17
+ status: TaskStatus;
18
+ message: string;
19
+ }
20
+ export interface GitSnapshot {
21
+ available: boolean;
22
+ root: string;
23
+ head: string;
24
+ fingerprint: string;
25
+ dirty: string[];
26
+ }
27
+ export interface WorkspaceChanges {
28
+ available: boolean;
29
+ baselineDirty: string[];
30
+ currentDirty: string[];
31
+ changedSinceStart: boolean;
32
+ headChanged: boolean;
33
+ diffStat: string;
34
+ truncated: boolean;
35
+ attribution: 'workspace-observation';
36
+ }
37
+ export interface DelegatedTask {
38
+ id: string;
39
+ requestId: string;
40
+ fingerprint: string;
41
+ sessionId: string;
42
+ cwd: string;
43
+ preset: string;
44
+ client: string;
45
+ status: TaskStatus;
46
+ cancellationRequested: boolean;
47
+ createdAt: number;
48
+ updatedAt: number;
49
+ currentRequest: string;
50
+ output: string;
51
+ sequence: number;
52
+ events: TaskEvent[];
53
+ operations: Record<string, string>;
54
+ baseline: GitSnapshot;
55
+ connectionId?: string;
56
+ }
57
+ export interface TaskView {
58
+ taskId: string;
59
+ sessionId: string;
60
+ cwd: string;
61
+ preset: string;
62
+ client: string;
63
+ status: TaskStatus;
64
+ createdAt: number;
65
+ updatedAt: number;
66
+ output: string;
67
+ events: TaskEvent[];
68
+ cursor: number;
69
+ eventsTruncated: boolean;
70
+ acceptance: 'not-verified';
71
+ workspace: WorkspaceChanges;
72
+ }
73
+ export interface HostObservation {
74
+ status: 'running' | 'waiting_confirmation' | 'finished' | 'failed' | 'interrupted' | 'unavailable';
75
+ output: string;
76
+ detail: string;
77
+ }
78
+ export interface DelegationHost {
79
+ preset(): Promise<string>;
80
+ create(sessionId: string, cwd: string, preset: string): Promise<void>;
81
+ prompt(sessionId: string, requestId: string, prompt: string): Promise<void>;
82
+ observe(sessionId: string, requestId: string, cancelling?: boolean): Promise<HostObservation>;
83
+ cancel(sessionId: string): Promise<void>;
84
+ }
85
+ export declare class ConnectionError extends Error {
86
+ readonly code: string;
87
+ constructor(code: string);
88
+ }
89
+ export declare function activeTask(status: TaskStatus): boolean;
90
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connection/types.ts"],"names":[],"mappings":"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"}