agent-conveyor 0.1.0
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/README.md +1123 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +19 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/program-name.d.ts +2 -0
- package/dist/cli/program-name.js +12 -0
- package/dist/cli/program-name.js.map +1 -0
- package/dist/cli/typescript-runtime.d.ts +52 -0
- package/dist/cli/typescript-runtime.js +18009 -0
- package/dist/cli/typescript-runtime.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/audit.d.ts +96 -0
- package/dist/runtime/audit.js +298 -0
- package/dist/runtime/audit.js.map +1 -0
- package/dist/runtime/classify.d.ts +8 -0
- package/dist/runtime/classify.js +128 -0
- package/dist/runtime/classify.js.map +1 -0
- package/dist/runtime/codex-session.d.ts +103 -0
- package/dist/runtime/codex-session.js +408 -0
- package/dist/runtime/codex-session.js.map +1 -0
- package/dist/runtime/commands.d.ts +92 -0
- package/dist/runtime/commands.js +408 -0
- package/dist/runtime/commands.js.map +1 -0
- package/dist/runtime/dispatch.d.ts +74 -0
- package/dist/runtime/dispatch.js +669 -0
- package/dist/runtime/dispatch.js.map +1 -0
- package/dist/runtime/export.d.ts +22 -0
- package/dist/runtime/export.js +77 -0
- package/dist/runtime/export.js.map +1 -0
- package/dist/runtime/ingest.d.ts +28 -0
- package/dist/runtime/ingest.js +177 -0
- package/dist/runtime/ingest.js.map +1 -0
- package/dist/runtime/loop-evidence.d.ts +87 -0
- package/dist/runtime/loop-evidence.js +448 -0
- package/dist/runtime/loop-evidence.js.map +1 -0
- package/dist/runtime/manager-config.d.ts +20 -0
- package/dist/runtime/manager-config.js +34 -0
- package/dist/runtime/manager-config.js.map +1 -0
- package/dist/runtime/manager-permissions.d.ts +7 -0
- package/dist/runtime/manager-permissions.js +85 -0
- package/dist/runtime/manager-permissions.js.map +1 -0
- package/dist/runtime/notifications.d.ts +89 -0
- package/dist/runtime/notifications.js +208 -0
- package/dist/runtime/notifications.js.map +1 -0
- package/dist/runtime/replay.d.ts +29 -0
- package/dist/runtime/replay.js +331 -0
- package/dist/runtime/replay.js.map +1 -0
- package/dist/runtime/tasks.d.ts +54 -0
- package/dist/runtime/tasks.js +195 -0
- package/dist/runtime/tasks.js.map +1 -0
- package/dist/runtime/tmux.d.ts +61 -0
- package/dist/runtime/tmux.js +189 -0
- package/dist/runtime/tmux.js.map +1 -0
- package/dist/runtime/visual-diff.d.ts +23 -0
- package/dist/runtime/visual-diff.js +234 -0
- package/dist/runtime/visual-diff.js.map +1 -0
- package/dist/state/database.d.ts +21 -0
- package/dist/state/database.js +142 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/files.d.ts +38 -0
- package/dist/state/files.js +73 -0
- package/dist/state/files.js.map +1 -0
- package/dist/state/schema-v22.d.ts +1 -0
- package/dist/state/schema-v22.js +566 -0
- package/dist/state/schema-v22.js.map +1 -0
- package/dist/state/sqlite-contract.d.ts +4 -0
- package/dist/state/sqlite-contract.js +78 -0
- package/dist/state/sqlite-contract.js.map +1 -0
- package/dist/state/status.d.ts +12 -0
- package/dist/state/status.js +40 -0
- package/dist/state/status.js.map +1 -0
- package/docs/typescript-migration/cli-contract.md +147 -0
- package/docs/typescript-migration/dashboard-contract.md +76 -0
- package/docs/typescript-migration/package-install-contract.md +98 -0
- package/docs/typescript-migration/qa-gate-matrix.md +103 -0
- package/docs/typescript-migration/sqlite-state-contract.md +92 -0
- package/docs/typescript-migration/t005-runtime-parity.md +47 -0
- package/package.json +88 -0
- package/scripts/capture-static-html-screenshot.mjs +88 -0
- package/skills/codex-review/SKILL.md +116 -0
- package/skills/codex-review/scripts/codex-review +344 -0
- package/skills/manage-codex-workers/SKILL.md +696 -0
- package/skills/manage-codex-workers/agents/openai.yaml +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/runtime/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { DatabaseSync } from "node:sqlite";
|
|
2
|
+
export interface TaskBudget {
|
|
3
|
+
expires_at: string;
|
|
4
|
+
max_nudges: number;
|
|
5
|
+
nudges_remaining: number;
|
|
6
|
+
nudges_used: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TaskRecord {
|
|
9
|
+
budget: TaskBudget | null;
|
|
10
|
+
created_at: string;
|
|
11
|
+
goal: string;
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
state: string;
|
|
15
|
+
summary: string | null;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SessionBindingRecord {
|
|
19
|
+
binding_id: string;
|
|
20
|
+
created_at: string;
|
|
21
|
+
ended_at?: string | null;
|
|
22
|
+
manager_session_id: string;
|
|
23
|
+
manager_session_name: string;
|
|
24
|
+
state: string;
|
|
25
|
+
task_id: string;
|
|
26
|
+
worker_session_id: string;
|
|
27
|
+
worker_session_name: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class TaskLifecycleError extends Error {
|
|
30
|
+
constructor(message: string);
|
|
31
|
+
}
|
|
32
|
+
export declare function createTaskSync(database: DatabaseSync, options: {
|
|
33
|
+
goal: string;
|
|
34
|
+
name: string;
|
|
35
|
+
now?: string;
|
|
36
|
+
summary?: string | null;
|
|
37
|
+
taskId?: string;
|
|
38
|
+
}): string;
|
|
39
|
+
export declare function bindSessionsSync(database: DatabaseSync, options: {
|
|
40
|
+
bindingId?: string;
|
|
41
|
+
managerSessionName: string;
|
|
42
|
+
now?: string;
|
|
43
|
+
taskName: string;
|
|
44
|
+
workerSessionName: string;
|
|
45
|
+
}): string;
|
|
46
|
+
export declare function unbindTaskSync(database: DatabaseSync, options: {
|
|
47
|
+
now?: string;
|
|
48
|
+
taskName: string;
|
|
49
|
+
}): void;
|
|
50
|
+
export declare function activeBindingForTaskSync(database: DatabaseSync, taskName: string): SessionBindingRecord;
|
|
51
|
+
export declare function latestSessionBindingForTaskSync(database: DatabaseSync, taskName: string): SessionBindingRecord;
|
|
52
|
+
export declare function listTasksSync(database: DatabaseSync, options?: {
|
|
53
|
+
activeOnly?: boolean;
|
|
54
|
+
}): TaskRecord[];
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
export class TaskLifecycleError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = "TaskLifecycleError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export function createTaskSync(database, options) {
|
|
9
|
+
const taskId = options.taskId ?? `task-${randomUUID()}`;
|
|
10
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
11
|
+
database.prepare(`
|
|
12
|
+
insert into tasks(id, name, goal, summary, state, created_at, updated_at)
|
|
13
|
+
values (?, ?, ?, ?, 'candidate', ?, ?)
|
|
14
|
+
`).run(taskId, options.name, options.goal, options.summary ?? null, timestamp, timestamp);
|
|
15
|
+
database.prepare(`
|
|
16
|
+
insert into events(created_at, actor, task_id, type, payload_json)
|
|
17
|
+
values (?, ?, ?, ?, ?)
|
|
18
|
+
`).run(timestamp, "workerctl", taskId, "task_created", stableJson({ goal: options.goal, name: options.name, summary: options.summary ?? null }));
|
|
19
|
+
return taskId;
|
|
20
|
+
}
|
|
21
|
+
export function bindSessionsSync(database, options) {
|
|
22
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
23
|
+
const task = taskRow(database, options.taskName);
|
|
24
|
+
const workerSession = sessionRow(database, options.workerSessionName, "worker");
|
|
25
|
+
const managerSession = sessionRow(database, options.managerSessionName, "manager");
|
|
26
|
+
const existing = database.prepare(`
|
|
27
|
+
select id
|
|
28
|
+
from bindings
|
|
29
|
+
where task_id = ?
|
|
30
|
+
and state in ('active', 'ending')
|
|
31
|
+
`).get(task.id);
|
|
32
|
+
if (existing) {
|
|
33
|
+
throw new TaskLifecycleError(`task ${JSON.stringify(options.taskName)} already has an active binding ${JSON.stringify(existing.id)}`);
|
|
34
|
+
}
|
|
35
|
+
for (const [label, session] of [["worker", workerSession], ["manager", managerSession]]) {
|
|
36
|
+
const alreadyBound = database.prepare(`
|
|
37
|
+
select id, task_id
|
|
38
|
+
from bindings
|
|
39
|
+
where state in ('active', 'ending')
|
|
40
|
+
and (worker_session_id = ? or manager_session_id = ?)
|
|
41
|
+
limit 1
|
|
42
|
+
`).get(session.id, session.id);
|
|
43
|
+
if (alreadyBound) {
|
|
44
|
+
throw new TaskLifecycleError(`${label} session ${JSON.stringify(session.name)} is already bound to task `
|
|
45
|
+
+ `${JSON.stringify(alreadyBound.task_id)} (binding ${JSON.stringify(alreadyBound.id)})`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const bindingId = options.bindingId ?? `binding-${randomUUID()}`;
|
|
49
|
+
database.prepare(`
|
|
50
|
+
insert into bindings(
|
|
51
|
+
id, task_id, worker_session_id, manager_session_id, state, created_at
|
|
52
|
+
)
|
|
53
|
+
values (?, ?, ?, ?, 'active', ?)
|
|
54
|
+
`).run(bindingId, task.id, workerSession.id, managerSession.id, timestamp);
|
|
55
|
+
return bindingId;
|
|
56
|
+
}
|
|
57
|
+
export function unbindTaskSync(database, options) {
|
|
58
|
+
const task = taskRow(database, options.taskName);
|
|
59
|
+
const timestamp = options.now ?? new Date().toISOString();
|
|
60
|
+
const result = database.prepare(`
|
|
61
|
+
update bindings
|
|
62
|
+
set state = 'ended', ended_at = ?
|
|
63
|
+
where task_id = ?
|
|
64
|
+
and state in ('active', 'ending')
|
|
65
|
+
`).run(timestamp, task.id);
|
|
66
|
+
if (result.changes === 0) {
|
|
67
|
+
throw new TaskLifecycleError(`no active binding for task ${JSON.stringify(options.taskName)}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function activeBindingForTaskSync(database, taskName) {
|
|
71
|
+
const task = taskRow(database, taskName);
|
|
72
|
+
const row = sessionBindingQuery(database, `
|
|
73
|
+
where b.task_id = ?
|
|
74
|
+
and b.state in ('active', 'ending')
|
|
75
|
+
order by b.created_at desc
|
|
76
|
+
limit 1
|
|
77
|
+
`).get(task.id);
|
|
78
|
+
if (!row) {
|
|
79
|
+
throw new TaskLifecycleError(`no active session-based binding for task ${JSON.stringify(taskName)}`);
|
|
80
|
+
}
|
|
81
|
+
return bindingRecord(row, { includeEndedAt: false });
|
|
82
|
+
}
|
|
83
|
+
export function latestSessionBindingForTaskSync(database, taskName) {
|
|
84
|
+
const task = taskRow(database, taskName);
|
|
85
|
+
const row = sessionBindingQuery(database, `
|
|
86
|
+
where b.task_id = ?
|
|
87
|
+
and b.worker_session_id is not null
|
|
88
|
+
and b.manager_session_id is not null
|
|
89
|
+
order by b.created_at desc
|
|
90
|
+
limit 1
|
|
91
|
+
`).get(task.id);
|
|
92
|
+
if (!row) {
|
|
93
|
+
throw new TaskLifecycleError(`no session-based binding for task ${JSON.stringify(taskName)}`);
|
|
94
|
+
}
|
|
95
|
+
return bindingRecord(row, { includeEndedAt: true });
|
|
96
|
+
}
|
|
97
|
+
export function listTasksSync(database, options) {
|
|
98
|
+
const where = options?.activeOnly ? "where tasks.state in ('candidate', 'managed', 'paused')" : "";
|
|
99
|
+
const rows = database.prepare(`
|
|
100
|
+
select tasks.id, tasks.name, tasks.goal, tasks.summary, tasks.state,
|
|
101
|
+
tasks.created_at, tasks.updated_at,
|
|
102
|
+
budgets.max_nudges, budgets.nudges_used, budgets.expires_at
|
|
103
|
+
from tasks
|
|
104
|
+
left join budgets on budgets.task_id = tasks.id
|
|
105
|
+
${where}
|
|
106
|
+
order by tasks.created_at, tasks.id
|
|
107
|
+
`).all();
|
|
108
|
+
return rows.map((row) => ({
|
|
109
|
+
budget: row.max_nudges === null ? null : {
|
|
110
|
+
expires_at: row.expires_at ?? "",
|
|
111
|
+
max_nudges: row.max_nudges,
|
|
112
|
+
nudges_remaining: row.max_nudges - (row.nudges_used ?? 0),
|
|
113
|
+
nudges_used: row.nudges_used ?? 0,
|
|
114
|
+
},
|
|
115
|
+
created_at: row.created_at,
|
|
116
|
+
goal: row.goal,
|
|
117
|
+
id: row.id,
|
|
118
|
+
name: row.name,
|
|
119
|
+
state: row.state,
|
|
120
|
+
summary: row.summary,
|
|
121
|
+
updated_at: row.updated_at,
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
124
|
+
function taskRow(database, taskName) {
|
|
125
|
+
const row = database.prepare(`
|
|
126
|
+
select id, name
|
|
127
|
+
from tasks
|
|
128
|
+
where id = ? or name = ?
|
|
129
|
+
order by created_at desc
|
|
130
|
+
limit 1
|
|
131
|
+
`).get(taskName, taskName);
|
|
132
|
+
if (!row) {
|
|
133
|
+
throw new TaskLifecycleError(`Unknown task: ${taskName}`);
|
|
134
|
+
}
|
|
135
|
+
return row;
|
|
136
|
+
}
|
|
137
|
+
function sessionRow(database, name, role) {
|
|
138
|
+
const row = database.prepare("select id, name, role from sessions where name = ?").get(name);
|
|
139
|
+
if (!row) {
|
|
140
|
+
throw new TaskLifecycleError(`no session registered with name ${JSON.stringify(name)}`);
|
|
141
|
+
}
|
|
142
|
+
if (row.role !== role) {
|
|
143
|
+
throw new TaskLifecycleError(`session ${JSON.stringify(name)} has role ${JSON.stringify(row.role)}, expected ${JSON.stringify(role)}`);
|
|
144
|
+
}
|
|
145
|
+
return row;
|
|
146
|
+
}
|
|
147
|
+
function sessionBindingQuery(database, whereClause) {
|
|
148
|
+
return database.prepare(`
|
|
149
|
+
select
|
|
150
|
+
b.id as binding_id,
|
|
151
|
+
b.task_id as task_id,
|
|
152
|
+
b.worker_session_id as worker_session_id,
|
|
153
|
+
b.manager_session_id as manager_session_id,
|
|
154
|
+
ws.name as worker_session_name,
|
|
155
|
+
ms.name as manager_session_name,
|
|
156
|
+
b.state as state,
|
|
157
|
+
b.created_at as created_at,
|
|
158
|
+
b.ended_at as ended_at
|
|
159
|
+
from bindings b
|
|
160
|
+
join sessions ws on ws.id = b.worker_session_id
|
|
161
|
+
join sessions ms on ms.id = b.manager_session_id
|
|
162
|
+
${whereClause}
|
|
163
|
+
`);
|
|
164
|
+
}
|
|
165
|
+
function bindingRecord(row, options) {
|
|
166
|
+
const record = {
|
|
167
|
+
binding_id: row.binding_id,
|
|
168
|
+
created_at: row.created_at,
|
|
169
|
+
manager_session_id: row.manager_session_id,
|
|
170
|
+
manager_session_name: row.manager_session_name,
|
|
171
|
+
state: row.state,
|
|
172
|
+
task_id: row.task_id,
|
|
173
|
+
worker_session_id: row.worker_session_id,
|
|
174
|
+
worker_session_name: row.worker_session_name,
|
|
175
|
+
};
|
|
176
|
+
if (options.includeEndedAt) {
|
|
177
|
+
record.ended_at = row.ended_at;
|
|
178
|
+
}
|
|
179
|
+
return record;
|
|
180
|
+
}
|
|
181
|
+
function stableJson(value) {
|
|
182
|
+
return JSON.stringify(sortJson(value));
|
|
183
|
+
}
|
|
184
|
+
function sortJson(value) {
|
|
185
|
+
if (Array.isArray(value)) {
|
|
186
|
+
return value.map(sortJson);
|
|
187
|
+
}
|
|
188
|
+
if (value !== null && typeof value === "object") {
|
|
189
|
+
return Object.fromEntries(Object.entries(value)
|
|
190
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
191
|
+
.map(([key, child]) => [key, sortJson(child)]));
|
|
192
|
+
}
|
|
193
|
+
return value;
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/runtime/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiCzC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAC5B,QAAsB,EACtB,OAMC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,UAAU,EAAE,EAAE,CAAC;IACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC;;;GAGhB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAC1F,QAAQ,CAAC,OAAO,CAAC;;;GAGhB,CAAC,CAAC,GAAG,CACJ,SAAS,EACT,WAAW,EACX,MAAM,EACN,cAAc,EACd,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC,CACzF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAsB,EACtB,OAMC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;GAKjC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAA+B,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,kCAAkC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CACxG,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAU,EAAE,CAAC;QACjG,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;KAMrC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAgD,CAAC;QAC9E,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,kBAAkB,CAC1B,GAAG,KAAK,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,4BAA4B;kBAC1E,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,WAAW,UAAU,EAAE,EAAE,CAAC;IACjE,QAAQ,CAAC,OAAO,CAAC;;;;;GAKhB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,QAAsB,EACtB,OAA2C;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;GAK/B,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,QAAsB,EAAE,QAAgB;IAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,EAAE;;;;;GAKzC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAA2B,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,kBAAkB,CAAC,4CAA4C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,QAAsB,EAAE,QAAgB;IACtF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,EAAE;;;;;;GAMzC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAA2B,CAAC;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,kBAAkB,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAsB,EAAE,OAAkC;IACtF,MAAM,KAAK,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,yDAAyD,CAAC,CAAC,CAAC,EAAE,CAAC;IACnG,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;MAM1B,KAAK;;GAER,CAAC,CAAC,GAAG,EAWJ,CAAC;IAEH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE;YAChC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,gBAAgB,EAAE,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;YACzD,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC;SAClC;QACD,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,OAAO,CAAC,QAAsB,EAAE,QAAgB;IACvD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;;;;;;GAM5B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAA6C,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAAsB,EAAE,IAAY,EAAE,IAA0B;IAClF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAAC,IAAI,CAI9E,CAAC;IACd,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,kBAAkB,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzI,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAcD,SAAS,mBAAmB,CAAC,QAAsB,EAAE,WAAmB;IACtE,OAAO,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;;;;;MAcpB,WAAW;GACd,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,GAAe,EAAE,OAAoC;IAC1E,MAAM,MAAM,GAAyB;QACnC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;QAC1C,oBAAoB,EAAE,GAAG,CAAC,oBAAoB;QAC9C,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;KAC7C,CAAC;IACF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACpD,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CACjD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export interface TmuxCommandResult {
|
|
2
|
+
status: number;
|
|
3
|
+
stderr?: string;
|
|
4
|
+
stdout?: string;
|
|
5
|
+
}
|
|
6
|
+
export type TmuxRunner = (args: string[], options?: {
|
|
7
|
+
check?: boolean;
|
|
8
|
+
}) => TmuxCommandResult;
|
|
9
|
+
export interface SendTextResult {
|
|
10
|
+
dry_run: boolean;
|
|
11
|
+
session?: string;
|
|
12
|
+
side_effect_completed: boolean;
|
|
13
|
+
side_effect_started: boolean;
|
|
14
|
+
target: string;
|
|
15
|
+
text: string;
|
|
16
|
+
time: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function tmuxSession(name: string): string;
|
|
19
|
+
export declare function tmuxTarget(name: string): string;
|
|
20
|
+
export declare function hasSessionArgs(name: string): string[];
|
|
21
|
+
export declare function listPanesArgs(target: string): string[];
|
|
22
|
+
export declare function capturePaneArgs(target: string, historyLines: number): string[];
|
|
23
|
+
export declare function currentPaneIdWithRunner(target: string, runner: TmuxRunner): string | null;
|
|
24
|
+
export declare function captureTmuxTargetWithRunner(target: string, historyLines: number, runner: TmuxRunner): string;
|
|
25
|
+
export declare function captureTranscriptTmuxTargetWithRunner(target: string, historyLines: number, runner: TmuxRunner): string;
|
|
26
|
+
export declare function isTmuxPermissionError(detail: string): boolean;
|
|
27
|
+
export declare function tmuxPermissionErrorMessage(detail: string): string;
|
|
28
|
+
export declare function tmuxCommandFailureMessage(args: string[], detail: string): string;
|
|
29
|
+
export declare function raiseForTmuxPermissionFailure(result: TmuxCommandResult): void;
|
|
30
|
+
export declare function tmuxSessionRunning(tmuxSessionName: string, runner: TmuxRunner): boolean;
|
|
31
|
+
export declare function killTmuxSessionWithRunner(tmuxSessionName: string, runner: TmuxRunner): void;
|
|
32
|
+
export declare function startTmuxSessionWithRunner(options: {
|
|
33
|
+
cwd: string;
|
|
34
|
+
shellCommand: string;
|
|
35
|
+
tmuxSessionName: string;
|
|
36
|
+
}, runner: TmuxRunner): void;
|
|
37
|
+
export declare function sendEnterToTmuxSessionWithRunner(tmuxSessionName: string, runner: TmuxRunner): void;
|
|
38
|
+
export declare function sessionExists(name: string, runner: TmuxRunner): boolean;
|
|
39
|
+
export declare function sendTextCommandSequence(name: string, text: string): string[][];
|
|
40
|
+
export declare function sendTextWithRunner(name: string, text: string, runner: TmuxRunner, options?: {
|
|
41
|
+
sleep?: (milliseconds: number) => void;
|
|
42
|
+
}): void;
|
|
43
|
+
export declare function sessionTmuxTarget(row: {
|
|
44
|
+
tmux_pane_id?: string | null;
|
|
45
|
+
tmux_session?: string | null;
|
|
46
|
+
}): string;
|
|
47
|
+
export declare function sendTextToSessionWithRunner(row: {
|
|
48
|
+
name: string;
|
|
49
|
+
tmux_pane_id?: string | null;
|
|
50
|
+
tmux_session?: string | null;
|
|
51
|
+
}, text: string, runner: TmuxRunner, options?: {
|
|
52
|
+
dryRun?: boolean;
|
|
53
|
+
now?: () => string;
|
|
54
|
+
sideEffectAudit?: {
|
|
55
|
+
side_effect_completed?: boolean;
|
|
56
|
+
side_effect_started?: boolean;
|
|
57
|
+
target?: string;
|
|
58
|
+
};
|
|
59
|
+
sideEffectStartedCallback?: () => void;
|
|
60
|
+
sleep?: (milliseconds: number) => void;
|
|
61
|
+
}): SendTextResult;
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
const PASTE_SUBMIT_DELAY_SECONDS = 0.1;
|
|
2
|
+
const SUBMIT_KEY = "C-m";
|
|
3
|
+
const TMUX_PERMISSION_MARKERS = [
|
|
4
|
+
"operation not permitted",
|
|
5
|
+
"permission denied",
|
|
6
|
+
"not authorized",
|
|
7
|
+
"not authorised",
|
|
8
|
+
];
|
|
9
|
+
export function tmuxSession(name) {
|
|
10
|
+
return `codex-${name}`;
|
|
11
|
+
}
|
|
12
|
+
export function tmuxTarget(name) {
|
|
13
|
+
return tmuxSession(name);
|
|
14
|
+
}
|
|
15
|
+
export function hasSessionArgs(name) {
|
|
16
|
+
return ["tmux", "has-session", "-t", tmuxTarget(name)];
|
|
17
|
+
}
|
|
18
|
+
export function listPanesArgs(target) {
|
|
19
|
+
return ["tmux", "list-panes", "-t", target, "-F", "#{pane_id}"];
|
|
20
|
+
}
|
|
21
|
+
export function capturePaneArgs(target, historyLines) {
|
|
22
|
+
return ["tmux", "capture-pane", "-p", "-S", `-${historyLines}`, "-t", target];
|
|
23
|
+
}
|
|
24
|
+
function transcriptCapturePaneArgs(target, historyLines) {
|
|
25
|
+
return ["tmux", "capture-pane", "-p", "-t", target, "-S", `-${historyLines}`];
|
|
26
|
+
}
|
|
27
|
+
export function currentPaneIdWithRunner(target, runner) {
|
|
28
|
+
const result = runTmuxChecked(runner, listPanesArgs(target), { check: false });
|
|
29
|
+
raiseForTmuxPermissionFailure(result);
|
|
30
|
+
if (result.status !== 0) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
for (const line of (result.stdout ?? "").split(/\r?\n/)) {
|
|
34
|
+
const paneId = line.trim();
|
|
35
|
+
if (paneId) {
|
|
36
|
+
return paneId;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
export function captureTmuxTargetWithRunner(target, historyLines, runner) {
|
|
42
|
+
const result = runTmuxChecked(runner, capturePaneArgs(target, historyLines));
|
|
43
|
+
return (result.stdout ?? "").replace(/\n+$/, "");
|
|
44
|
+
}
|
|
45
|
+
export function captureTranscriptTmuxTargetWithRunner(target, historyLines, runner) {
|
|
46
|
+
const result = runTmuxChecked(runner, transcriptCapturePaneArgs(target, historyLines));
|
|
47
|
+
return result.stdout ?? "";
|
|
48
|
+
}
|
|
49
|
+
export function isTmuxPermissionError(detail) {
|
|
50
|
+
const lowered = detail.toLowerCase();
|
|
51
|
+
return TMUX_PERMISSION_MARKERS.some((marker) => lowered.includes(marker));
|
|
52
|
+
}
|
|
53
|
+
export function tmuxPermissionErrorMessage(detail) {
|
|
54
|
+
const normalizedDetail = detail.trim() || "permission denied";
|
|
55
|
+
return "tmux access was denied by the operating system or sandbox: "
|
|
56
|
+
+ `${normalizedDetail}. Retry from a terminal/session with tmux PTY permissions; `
|
|
57
|
+
+ "on macOS, grant the terminal app appropriate Privacy & Security access "
|
|
58
|
+
+ "and restart the terminal/tmux server.";
|
|
59
|
+
}
|
|
60
|
+
export function tmuxCommandFailureMessage(args, detail) {
|
|
61
|
+
const command = args.join(" ");
|
|
62
|
+
if (args[0] === "tmux" && isTmuxPermissionError(detail)) {
|
|
63
|
+
return `${command} failed: ${tmuxPermissionErrorMessage(detail)}`;
|
|
64
|
+
}
|
|
65
|
+
return `${command} failed: ${detail}`;
|
|
66
|
+
}
|
|
67
|
+
export function raiseForTmuxPermissionFailure(result) {
|
|
68
|
+
if (result.status === 0) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const detail = (result.stderr || result.stdout || "").trim();
|
|
72
|
+
if (isTmuxPermissionError(detail)) {
|
|
73
|
+
throw new Error(tmuxPermissionErrorMessage(detail));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function runTmuxChecked(runner, args, options) {
|
|
77
|
+
const check = options?.check ?? true;
|
|
78
|
+
const result = runner(args, { check });
|
|
79
|
+
if (check && result.status !== 0) {
|
|
80
|
+
const detail = (result.stderr || result.stdout || `exit code ${result.status}`).trim();
|
|
81
|
+
throw new Error(tmuxCommandFailureMessage(args, detail));
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
export function tmuxSessionRunning(tmuxSessionName, runner) {
|
|
86
|
+
const result = runTmuxChecked(runner, ["tmux", "has-session", "-t", tmuxSessionName], { check: false });
|
|
87
|
+
raiseForTmuxPermissionFailure(result);
|
|
88
|
+
return result.status === 0;
|
|
89
|
+
}
|
|
90
|
+
export function killTmuxSessionWithRunner(tmuxSessionName, runner) {
|
|
91
|
+
runTmuxChecked(runner, ["tmux", "kill-session", "-t", tmuxSessionName]);
|
|
92
|
+
}
|
|
93
|
+
export function startTmuxSessionWithRunner(options, runner) {
|
|
94
|
+
runTmuxChecked(runner, [
|
|
95
|
+
"tmux",
|
|
96
|
+
"new-session",
|
|
97
|
+
"-d",
|
|
98
|
+
"-s",
|
|
99
|
+
options.tmuxSessionName,
|
|
100
|
+
"-c",
|
|
101
|
+
options.cwd,
|
|
102
|
+
options.shellCommand,
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
105
|
+
export function sendEnterToTmuxSessionWithRunner(tmuxSessionName, runner) {
|
|
106
|
+
runTmuxChecked(runner, ["tmux", "send-keys", "-t", tmuxSessionName, "Enter"]);
|
|
107
|
+
}
|
|
108
|
+
export function sessionExists(name, runner) {
|
|
109
|
+
const result = runTmuxChecked(runner, hasSessionArgs(name), { check: false });
|
|
110
|
+
raiseForTmuxPermissionFailure(result);
|
|
111
|
+
return result.status === 0;
|
|
112
|
+
}
|
|
113
|
+
export function sendTextCommandSequence(name, text) {
|
|
114
|
+
const bufferName = `workerctl-${name}`;
|
|
115
|
+
return [
|
|
116
|
+
["tmux", "set-buffer", "-b", bufferName, text],
|
|
117
|
+
["tmux", "paste-buffer", "-b", bufferName, "-t", tmuxTarget(name)],
|
|
118
|
+
["tmux", "send-keys", "-t", tmuxTarget(name), SUBMIT_KEY],
|
|
119
|
+
["tmux", "delete-buffer", "-b", bufferName],
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
export function sendTextWithRunner(name, text, runner, options) {
|
|
123
|
+
if (!sessionExists(name, runner)) {
|
|
124
|
+
throw new Error(`tmux session is not running for worker ${name}: ${tmuxTarget(name)}`);
|
|
125
|
+
}
|
|
126
|
+
const bufferName = `workerctl-${name}`;
|
|
127
|
+
runTmuxChecked(runner, ["tmux", "set-buffer", "-b", bufferName, text]);
|
|
128
|
+
try {
|
|
129
|
+
runTmuxChecked(runner, ["tmux", "paste-buffer", "-b", bufferName, "-t", tmuxTarget(name)]);
|
|
130
|
+
options?.sleep?.(PASTE_SUBMIT_DELAY_SECONDS * 1000);
|
|
131
|
+
runTmuxChecked(runner, ["tmux", "send-keys", "-t", tmuxTarget(name), SUBMIT_KEY]);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
runTmuxChecked(runner, ["tmux", "delete-buffer", "-b", bufferName], { check: false });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function sessionTmuxTarget(row) {
|
|
138
|
+
if (!row.tmux_session) {
|
|
139
|
+
throw new Error("session has no tmux_session; cannot build tmux target (session likely registered outside tmux)");
|
|
140
|
+
}
|
|
141
|
+
if (row.tmux_pane_id) {
|
|
142
|
+
return `${row.tmux_session}:${row.tmux_pane_id}`;
|
|
143
|
+
}
|
|
144
|
+
return row.tmux_session;
|
|
145
|
+
}
|
|
146
|
+
export function sendTextToSessionWithRunner(row, text, runner, options) {
|
|
147
|
+
const target = sessionTmuxTarget(row);
|
|
148
|
+
const result = {
|
|
149
|
+
dry_run: options?.dryRun ?? false,
|
|
150
|
+
session: row.name,
|
|
151
|
+
side_effect_completed: false,
|
|
152
|
+
side_effect_started: false,
|
|
153
|
+
target,
|
|
154
|
+
text,
|
|
155
|
+
time: options?.now?.() ?? new Date().toISOString(),
|
|
156
|
+
};
|
|
157
|
+
if (options?.sideEffectAudit) {
|
|
158
|
+
options.sideEffectAudit.side_effect_completed = false;
|
|
159
|
+
options.sideEffectAudit.side_effect_started = false;
|
|
160
|
+
options.sideEffectAudit.target = target;
|
|
161
|
+
}
|
|
162
|
+
if (result.dry_run) {
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
if (!row.tmux_session || !tmuxSessionRunning(row.tmux_session, runner)) {
|
|
166
|
+
throw new Error(`tmux session is not running for session ${JSON.stringify(row.name)}: ${row.tmux_session}`);
|
|
167
|
+
}
|
|
168
|
+
const bufferName = `workerctl-session-${row.name}`;
|
|
169
|
+
try {
|
|
170
|
+
runTmuxChecked(runner, ["tmux", "set-buffer", "-b", bufferName, text]);
|
|
171
|
+
options?.sideEffectStartedCallback?.();
|
|
172
|
+
result.side_effect_started = true;
|
|
173
|
+
if (options?.sideEffectAudit) {
|
|
174
|
+
options.sideEffectAudit.side_effect_started = true;
|
|
175
|
+
}
|
|
176
|
+
runTmuxChecked(runner, ["tmux", "paste-buffer", "-b", bufferName, "-t", target]);
|
|
177
|
+
options?.sleep?.(PASTE_SUBMIT_DELAY_SECONDS * 1000);
|
|
178
|
+
runTmuxChecked(runner, ["tmux", "send-keys", "-t", target, SUBMIT_KEY]);
|
|
179
|
+
result.side_effect_completed = true;
|
|
180
|
+
if (options?.sideEffectAudit) {
|
|
181
|
+
options.sideEffectAudit.side_effect_completed = true;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
runTmuxChecked(runner, ["tmux", "delete-buffer", "-b", bufferName], { check: false });
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=tmux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/runtime/tmux.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface VisualDiffReport {
|
|
2
|
+
below_threshold: boolean;
|
|
3
|
+
candidate: string;
|
|
4
|
+
changed_pixels: number;
|
|
5
|
+
diff_image: string | null;
|
|
6
|
+
diff_score: number;
|
|
7
|
+
reference: string;
|
|
8
|
+
threshold: number;
|
|
9
|
+
total_pixels: number;
|
|
10
|
+
viewport: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class VisualDiffError extends Error {
|
|
13
|
+
constructor(message: string);
|
|
14
|
+
}
|
|
15
|
+
export declare function computeVisualDiffSync(options: {
|
|
16
|
+
candidatePath: string;
|
|
17
|
+
diffOutput?: string | null;
|
|
18
|
+
referencePath: string;
|
|
19
|
+
reportOutput?: string | null;
|
|
20
|
+
threshold: number;
|
|
21
|
+
}): VisualDiffReport;
|
|
22
|
+
export type Pixel = [number, number, number, number];
|
|
23
|
+
export declare function writePngRgba(path: string, width: number, height: number, pixels: Pixel[]): void;
|