@comput/pi-intercom 0.8.1 → 0.9.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 +48 -2
- package/dist/config.d.ts +7 -0
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/core-monitor.d.ts +30 -0
- package/dist/core-monitor.js +528 -0
- package/dist/core-monitor.js.map +1 -0
- package/dist/core-pane-close.d.ts +34 -0
- package/dist/core-pane-close.js +335 -0
- package/dist/core-pane-close.js.map +1 -0
- package/dist/core-worker-layout.d.ts +50 -0
- package/dist/core-worker-layout.js +236 -0
- package/dist/core-worker-layout.js.map +1 -0
- package/dist/herdr-core.d.ts +53 -0
- package/dist/herdr-core.js +380 -0
- package/dist/herdr-core.js.map +1 -0
- package/dist/index.js +42 -10
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts +2 -0
- package/dist/launcher.js +48 -2
- package/dist/launcher.js.map +1 -1
- package/dist/monitor-launcher.d.ts +8 -0
- package/dist/monitor-launcher.js +111 -25
- package/dist/monitor-launcher.js.map +1 -1
- package/dist/pane-close.js +3 -0
- package/dist/pane-close.js.map +1 -1
- package/dist/runtime.d.ts +17 -1
- package/dist/runtime.js +51 -1
- package/dist/runtime.js.map +1 -1
- package/package.json +5 -3
- package/references/herdr-core-migration.md +44 -0
- package/references/v1-specification.md +7 -4
- package/src/config.ts +10 -1
- package/src/core-monitor.ts +410 -0
- package/src/core-pane-close.ts +328 -0
- package/src/core-worker-layout.ts +240 -0
- package/src/herdr-core.ts +287 -0
- package/src/index.ts +38 -11
- package/src/launcher.ts +46 -2
- package/src/monitor-launcher.ts +95 -21
- package/src/pane-close.ts +2 -0
- package/src/runtime.ts +47 -1
package/dist/launcher.js
CHANGED
|
@@ -2,6 +2,8 @@ import { execFile } from 'node:child_process';
|
|
|
2
2
|
import { promisify } from 'node:util';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fail } from './config.js';
|
|
5
|
+
import { renameCoreTab, withCoreSession } from './herdr-core.js';
|
|
6
|
+
import { preflightCoreWorkerLayout, attachCoreWorkerLayout } from './core-worker-layout.js';
|
|
5
7
|
export const run = async (file, args) => {
|
|
6
8
|
const { stdout } = await promisify(execFile)(file, args, { windowsHide: true, timeout: 40000, maxBuffer: 1024 * 1024 });
|
|
7
9
|
return stdout;
|
|
@@ -30,8 +32,48 @@ export function launchers(options) {
|
|
|
30
32
|
// Explicit per-child CLI scope cannot widen cwd or leak from a parent shell environment.
|
|
31
33
|
const args = ['-e', options.extension, '--intercom-root', request.workspaceRoot, ...(request.sessionId ? ['--session', request.sessionId] : [])];
|
|
32
34
|
if (request.multiplexer === 'herdr') {
|
|
35
|
+
// HC identity takes precedence even when stale legacy variables survive.
|
|
36
|
+
// Never reinterpret an HC failure as permission to create a legacy tab.
|
|
37
|
+
if (env.HC_TERMINAL_ID !== undefined) {
|
|
38
|
+
const caller = env.HC_TERMINAL_ID;
|
|
39
|
+
if (!/^t[0-9a-z]+$/.test(caller) || caller.trim() !== caller)
|
|
40
|
+
fail('HC launcher requires a local HC_TERMINAL_ID address; names and remote addresses are not accepted; no fallback');
|
|
41
|
+
// No template/task/message/provider override. Use an explicit shell and
|
|
42
|
+
// preserve the user's Pi defaults and literal root/session arguments.
|
|
43
|
+
const argv = platform === 'win32'
|
|
44
|
+
? ['powershell.exe', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-EncodedCommand', encoded(`$ErrorActionPreference='Stop'; Set-Location -LiteralPath ${psQuote(request.cwd)}; & (Get-Command pi.ps1 -ErrorAction Stop).Source ${args.map(psQuote).join(' ')}; exit $LASTEXITCODE`)]
|
|
45
|
+
: ['/bin/sh', '-c', `exec pi ${args.map(shQuote).join(' ')}`];
|
|
46
|
+
let attempted = false;
|
|
47
|
+
const operation = async (call) => {
|
|
48
|
+
// Refuse missing/unsupported app layout BEFORE creating a terminal.
|
|
49
|
+
// All reads, spawn, CAS placement and readback share this connection.
|
|
50
|
+
const ticket = await preflightCoreWorkerLayout({ caller, cwd: request.cwd, workspaceRoot: request.workspaceRoot, platform }, call);
|
|
51
|
+
attempted = true;
|
|
52
|
+
const created = await call('terminal.run', {
|
|
53
|
+
argv, cwd: request.cwd, caller, parent: caller,
|
|
54
|
+
outlive_parent: true, no_notify: true, wait: false, keep: false,
|
|
55
|
+
});
|
|
56
|
+
const placement = await attachCoreWorkerLayout(ticket, created, call);
|
|
57
|
+
return { commandSubmitted: true, ...placement, terminalState: created.state,
|
|
58
|
+
ui: 'render-unverified',
|
|
59
|
+
uiReason: 'Dedicated tab confirmed in shared app layout; remote UI rendering is not observed.',
|
|
60
|
+
piReadiness: 'not observed; terminal creation and layout confirmation are not Pi readiness', registrationAwaited: false };
|
|
61
|
+
};
|
|
62
|
+
try {
|
|
63
|
+
// Injection is a trusted test seam; production verifies hello/status
|
|
64
|
+
// for core 0.1.18 once, without reconnecting between launch steps.
|
|
65
|
+
return await (options.coreCall ? operation(options.coreCall) : withCoreSession(operation, { endpoint: env.HC_SOCKET }));
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
if (attempted)
|
|
69
|
+
throw Object.assign(new Error('HC worker launch or placement failed; outcome unknown, terminal/process and app tab may remain; no automatic cleanup/retry/replacement or legacy fallback'), { outcomeUncertain: true });
|
|
70
|
+
fail(`HC launch preflight failed: ${String(e)}; no fallback or launch attempted`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Compatibility is selected only by explicit legacy identity, never by an
|
|
74
|
+
// HC error or by discovering an arbitrary running Herdr window.
|
|
33
75
|
if (env.HERDR_ENV !== '1' || !env.HERDR_WORKSPACE_ID)
|
|
34
|
-
fail('Herdr launcher requires
|
|
76
|
+
fail('Herdr launcher requires HC_TERMINAL_ID or explicit legacy HERDR_ENV=1 and HERDR_WORKSPACE_ID; no fallback');
|
|
35
77
|
let created;
|
|
36
78
|
try {
|
|
37
79
|
created = JSON.parse(await exec('herdr', ['tab', 'create', '--workspace', env.HERDR_WORKSPACE_ID, '--cwd', request.cwd, '--label', 'Intercom (anonymous)', '--no-focus']));
|
|
@@ -62,7 +104,7 @@ export function launchers(options) {
|
|
|
62
104
|
fail('unsupported multiplexer');
|
|
63
105
|
// Use encoded PowerShell rather than constructing cmd.exe command strings.
|
|
64
106
|
// The outer process reports only successful visible terminal creation, not Pi readiness.
|
|
65
|
-
const child = `$ErrorActionPreference='Stop'; Get-ChildItem Env: | Where-Object { $_.Name -like 'HERDR_*' -or $_.Name -like 'PI_SESSION_*' } | ForEach-Object { Remove-Item ('Env:' + $_.Name) }; Set-Location -LiteralPath ${psQuote(request.cwd)}; & (Get-Command pi.cmd -ErrorAction Stop).Source ${args.map(psQuote).join(' ')}; if ($LASTEXITCODE -ne 0) { Write-Error ('Pi exited with code ' + $LASTEXITCODE) }`;
|
|
107
|
+
const child = `$ErrorActionPreference='Stop'; Get-ChildItem Env: | Where-Object { $_.Name -like 'HERDR_*' -or $_.Name -like 'HC_*' -or $_.Name -like 'PI_SESSION_*' } | ForEach-Object { Remove-Item ('Env:' + $_.Name) }; Set-Location -LiteralPath ${psQuote(request.cwd)}; & (Get-Command pi.cmd -ErrorAction Stop).Source ${args.map(psQuote).join(' ')}; if ($LASTEXITCODE -ne 0) { Write-Error ('Pi exited with code ' + $LASTEXITCODE) }`;
|
|
66
108
|
const outer = `$ErrorActionPreference='Stop'; $null=Get-Command pi.cmd -ErrorAction Stop; $p=Start-Process -FilePath (Join-Path $PSHOME 'powershell.exe') -WorkingDirectory ${psQuote(request.cwd)} -ArgumentList @('-NoProfile','-NoExit','-EncodedCommand',${psQuote(encoded(child))}) -WindowStyle Normal -PassThru; $p.Id`;
|
|
67
109
|
const result = await exec('powershell.exe', ['-NoProfile', '-NonInteractive', '-EncodedCommand', encoded(outer)]);
|
|
68
110
|
const pid = Number(result.trim());
|
|
@@ -71,6 +113,10 @@ export function launchers(options) {
|
|
|
71
113
|
return { terminalLaunched: true, pid, piReadiness: 'not observed; inspect visible terminal for startup failures', registrationAwaited: false };
|
|
72
114
|
}
|
|
73
115
|
async function syncName(name) {
|
|
116
|
+
if (env.HC_TERMINAL_ID !== undefined) {
|
|
117
|
+
await renameCoreTab(env.HC_TERMINAL_ID, name, options.coreCall);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
74
120
|
if (env.HERDR_ENV !== '1')
|
|
75
121
|
return;
|
|
76
122
|
// Resolve inherited pane context, including panes moved since launch.
|
package/dist/launcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"launcher.js","sourceRoot":"","sources":["../src/launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type Run } from './launcher.js';
|
|
2
|
+
import { type CoreCall } from './herdr-core.js';
|
|
3
|
+
export type MonitorPlacement = 'coordinator-tab' | 'new-tab';
|
|
2
4
|
export interface MonitorLaunchOptions {
|
|
3
5
|
root: string;
|
|
4
6
|
sessionId: string;
|
|
@@ -7,6 +9,8 @@ export interface MonitorLaunchOptions {
|
|
|
7
9
|
platform?: string;
|
|
8
10
|
env?: NodeJS.ProcessEnv;
|
|
9
11
|
run?: Run;
|
|
12
|
+
placement?: MonitorPlacement;
|
|
13
|
+
coreCall?: CoreCall;
|
|
10
14
|
assertCurrent?(): void;
|
|
11
15
|
}
|
|
12
16
|
/** Pane ownership is separate from agent config. Pending records fence uncertain
|
|
@@ -15,3 +19,7 @@ export declare function ensureMonitorPane(options: MonitorLaunchOptions): Promis
|
|
|
15
19
|
outcome: string;
|
|
16
20
|
pane?: string;
|
|
17
21
|
}>;
|
|
22
|
+
export declare function closeMonitorPane(options: MonitorLaunchOptions): Promise<{
|
|
23
|
+
outcome: string;
|
|
24
|
+
pane?: string;
|
|
25
|
+
}>;
|
package/dist/monitor-launcher.js
CHANGED
|
@@ -2,9 +2,28 @@ import path from 'node:path';
|
|
|
2
2
|
import { createHash, randomUUID } from 'node:crypto';
|
|
3
3
|
import { access, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
|
|
4
4
|
import { run, shQuote, psQuote, encoded } from './launcher.js';
|
|
5
|
+
import { ensureCoreMonitorPane, closeCoreMonitorPane } from './core-monitor.js';
|
|
6
|
+
import { withCoreSession } from './herdr-core.js';
|
|
5
7
|
/** Pane ownership is separate from agent config. Pending records fence uncertain
|
|
6
8
|
* mutations across reloads; neither errors nor absence of readiness cause retries. */
|
|
7
9
|
export async function ensureMonitorPane(options) {
|
|
10
|
+
if ((options.env ?? process.env).HC_TERMINAL_ID !== undefined) {
|
|
11
|
+
const open = (call) => ensureCoreMonitorPane({ ...options, placement: options.placement ?? 'coordinator-tab', call });
|
|
12
|
+
return options.coreCall ? open(options.coreCall) : withCoreSession(open);
|
|
13
|
+
}
|
|
14
|
+
return monitorPane(options, false);
|
|
15
|
+
}
|
|
16
|
+
export async function closeMonitorPane(options) {
|
|
17
|
+
if ((options.env ?? process.env).HC_TERMINAL_ID !== undefined) {
|
|
18
|
+
const close = (call) => closeCoreMonitorPane({ ...options, call });
|
|
19
|
+
return options.coreCall ? close(options.coreCall) : withCoreSession(close);
|
|
20
|
+
}
|
|
21
|
+
return monitorPane(options, true);
|
|
22
|
+
}
|
|
23
|
+
async function monitorPane(options, closing) {
|
|
24
|
+
const placement = options.placement ?? 'coordinator-tab';
|
|
25
|
+
if (!['coordinator-tab', 'new-tab'].includes(placement))
|
|
26
|
+
throw new Error('Invalid monitor placement');
|
|
8
27
|
const env = options.env ?? process.env;
|
|
9
28
|
if (env.HERDR_ENV !== '1')
|
|
10
29
|
return { outcome: 'unavailable: coordinator is not inside Herdr' };
|
|
@@ -20,18 +39,24 @@ export async function ensureMonitorPane(options) {
|
|
|
20
39
|
const output = await exec('herdr', args);
|
|
21
40
|
check();
|
|
22
41
|
// pane run acknowledges command submission with an empty stdout on current Herdr.
|
|
23
|
-
if (!output.trim() && args[1]
|
|
42
|
+
if (!output.trim() && ['run', 'close'].includes(args[1]))
|
|
24
43
|
return {};
|
|
25
44
|
return JSON.parse(output).result;
|
|
26
45
|
};
|
|
27
46
|
const caller = (await call(['pane', 'current', '--current']))?.pane;
|
|
28
47
|
if (!caller?.pane_id || !caller.tab_id || !caller.workspace_id)
|
|
29
|
-
throw new Error('Missing current Herdr pane identity');
|
|
48
|
+
throw new Error('Missing current Herdr caller pane identity');
|
|
49
|
+
// Herdr documents inherited moved-pane aliases for --current. Preserve that
|
|
50
|
+
// resolution for opening; destructive close conservatively requires exact ID.
|
|
51
|
+
if (closing && caller.pane_id !== env.HERDR_PANE_ID)
|
|
52
|
+
throw new Error('Mismatched current Herdr caller pane identity; refusing close');
|
|
30
53
|
const label = 'Intercom monitor';
|
|
31
54
|
const legacyMarker = `Intercom monitor [${options.sessionId}]`;
|
|
32
55
|
const key = createHash('sha256').update(options.sessionId).digest('hex').slice(0, 24);
|
|
33
56
|
const directory = path.join(options.root, '.pi-intercom');
|
|
57
|
+
check();
|
|
34
58
|
await mkdir(directory, { recursive: true });
|
|
59
|
+
check();
|
|
35
60
|
const file = path.join(directory, `monitor-${key}.json`), lock = `${file}.lock`;
|
|
36
61
|
check();
|
|
37
62
|
try {
|
|
@@ -42,9 +67,11 @@ export async function ensureMonitorPane(options) {
|
|
|
42
67
|
}
|
|
43
68
|
let state;
|
|
44
69
|
const save = async () => {
|
|
70
|
+
check();
|
|
45
71
|
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
46
72
|
try {
|
|
47
73
|
await writeFile(temporary, JSON.stringify(state), { flag: 'wx', mode: 0o600 });
|
|
74
|
+
check();
|
|
48
75
|
await rename(temporary, file);
|
|
49
76
|
}
|
|
50
77
|
finally {
|
|
@@ -52,9 +79,16 @@ export async function ensureMonitorPane(options) {
|
|
|
52
79
|
}
|
|
53
80
|
};
|
|
54
81
|
try {
|
|
82
|
+
check();
|
|
55
83
|
try {
|
|
56
84
|
state = JSON.parse(await readFile(file, 'utf8'));
|
|
57
|
-
|
|
85
|
+
check();
|
|
86
|
+
if (state?.version !== 1 || state.sessionId !== options.sessionId || typeof state.stage !== 'string' ||
|
|
87
|
+
typeof state.workspace !== 'string' || typeof state.caller !== 'string' ||
|
|
88
|
+
(state.placement !== undefined && !['coordinator-tab', 'new-tab'].includes(state.placement)) ||
|
|
89
|
+
(state.tab !== undefined && typeof state.tab !== 'string') ||
|
|
90
|
+
(state.pane !== undefined && typeof state.pane !== 'string') ||
|
|
91
|
+
(state.placement === 'new-tab' && ['submitted', 'observed'].includes(state.stage) && !state.tab))
|
|
58
92
|
throw new Error('Invalid monitor ownership record');
|
|
59
93
|
}
|
|
60
94
|
catch (e) {
|
|
@@ -62,7 +96,7 @@ export async function ensureMonitorPane(options) {
|
|
|
62
96
|
throw e;
|
|
63
97
|
}
|
|
64
98
|
const panes = (await call(['pane', 'list', '--workspace', caller.workspace_id]))?.panes;
|
|
65
|
-
if (!Array.isArray(panes) || panes.some(p => !p?.pane_id || !p.tab_id))
|
|
99
|
+
if (!Array.isArray(panes) || panes.some(p => !p?.pane_id || !p.tab_id || p.workspace_id && p.workspace_id !== caller.workspace_id) || new Set(panes.map(p => p.pane_id)).size !== panes.length || !panes.some(p => p.pane_id === caller.pane_id && p.tab_id === caller.tab_id))
|
|
66
100
|
throw new Error('Invalid Herdr pane inventory');
|
|
67
101
|
const matches = panes.filter(p => p.label === legacyMarker ||
|
|
68
102
|
(state && state.workspace === caller.workspace_id && state.pane === p.pane_id));
|
|
@@ -70,8 +104,14 @@ export async function ensureMonitorPane(options) {
|
|
|
70
104
|
throw new Error('Multiple monitor markers; inspect panes. No automatic changes.');
|
|
71
105
|
if (matches.length === 1) {
|
|
72
106
|
const pane = matches[0];
|
|
73
|
-
if (
|
|
74
|
-
throw new Error('
|
|
107
|
+
if (panes.some(other => other.pane_id !== pane.pane_id && other.label === label))
|
|
108
|
+
throw new Error('Multiple monitor labels in workspace; inspect panes. No automatic changes.');
|
|
109
|
+
const savedPlacement = state?.placement ?? 'coordinator-tab';
|
|
110
|
+
if (pane.pane_id === caller.pane_id || pane.tab_id !== (state?.tab ?? caller.tab_id) ||
|
|
111
|
+
(savedPlacement === 'coordinator-tab' ? pane.tab_id !== caller.tab_id : pane.tab_id === caller.tab_id))
|
|
112
|
+
throw new Error('Monitor marker is on caller or moved to another tab; no automatic changes');
|
|
113
|
+
if (!closing && savedPlacement !== placement)
|
|
114
|
+
throw new Error('Monitor already exists in a different placement; close it first before opening elsewhere');
|
|
75
115
|
if (state && (state.workspace !== caller.workspace_id || state.caller !== caller.pane_id || (state.pane && state.pane !== pane.pane_id))) {
|
|
76
116
|
throw new Error('Monitor ownership differs from current caller; no automatic changes');
|
|
77
117
|
}
|
|
@@ -79,42 +119,88 @@ export async function ensureMonitorPane(options) {
|
|
|
79
119
|
throw new Error(`Monitor partial launch needs inspection (${state.stage}); no retry or duplicate`);
|
|
80
120
|
}
|
|
81
121
|
if (!state) {
|
|
82
|
-
|
|
122
|
+
if (closing)
|
|
123
|
+
throw new Error('Legacy monitor marker has no saved ownership; manual inspection required, no automatic close');
|
|
124
|
+
state = { version: 1, sessionId: options.sessionId, workspace: caller.workspace_id, caller: caller.pane_id, pane: pane.pane_id, tab: pane.tab_id, placement: 'coordinator-tab', stage: 'observed' };
|
|
83
125
|
await save();
|
|
84
126
|
}
|
|
127
|
+
if (closing) {
|
|
128
|
+
if (state.stage !== 'submitted')
|
|
129
|
+
throw new Error('Legacy observed monitor lacks launcher-created ownership proof; refusing close');
|
|
130
|
+
if (pane.label !== label && pane.label !== legacyMarker)
|
|
131
|
+
throw new Error('Owned monitor label changed; refusing to close a potentially reused pane');
|
|
132
|
+
state.stage = 'close_pending';
|
|
133
|
+
await save();
|
|
134
|
+
const finalCaller = (await call(['pane', 'current', '--current']))?.pane;
|
|
135
|
+
const finalPanes = (await call(['pane', 'list', '--workspace', caller.workspace_id]))?.panes;
|
|
136
|
+
if (finalCaller?.pane_id !== caller.pane_id || finalCaller.tab_id !== caller.tab_id || finalCaller.workspace_id !== caller.workspace_id ||
|
|
137
|
+
!Array.isArray(finalPanes) || finalPanes.some(p => !p?.pane_id || !p.tab_id || p.workspace_id && p.workspace_id !== caller.workspace_id) ||
|
|
138
|
+
new Set(finalPanes.map(p => p.pane_id)).size !== finalPanes.length ||
|
|
139
|
+
!finalPanes.some(p => p.pane_id === caller.pane_id && p.tab_id === caller.tab_id) ||
|
|
140
|
+
finalPanes.filter(p => p.pane_id === pane.pane_id && p.tab_id === pane.tab_id && p.label === pane.label).length !== 1 ||
|
|
141
|
+
finalPanes.some(p => p.pane_id !== pane.pane_id && [label, legacyMarker].includes(p.label ?? '')))
|
|
142
|
+
throw new Error('Monitor ownership changed before close; pending outcome fenced, inspect manually');
|
|
143
|
+
// Herdr has no compare-and-close primitive: this minimizes but cannot
|
|
144
|
+
// eliminate an external topology race between inventory and pane close.
|
|
145
|
+
await call(['pane', 'close', pane.pane_id]);
|
|
146
|
+
const remaining = (await call(['pane', 'list', '--workspace', caller.workspace_id]))?.panes;
|
|
147
|
+
if (!Array.isArray(remaining) || remaining.some(p => !p?.pane_id || !p.tab_id || p.workspace_id && p.workspace_id !== caller.workspace_id) || new Set(remaining.map(p => p.pane_id)).size !== remaining.length || remaining.some(p => p.pane_id === pane.pane_id) || !remaining.some(p => p.pane_id === caller.pane_id && p.tab_id === caller.tab_id))
|
|
148
|
+
throw new Error('Monitor pane absence not confirmed; close outcome uncertain, do not retry');
|
|
149
|
+
state.stage = 'closed';
|
|
150
|
+
await save();
|
|
151
|
+
return { outcome: 'monitor pane absence observed; no claim about child processes', pane: pane.pane_id };
|
|
152
|
+
}
|
|
85
153
|
if (pane.label !== label)
|
|
86
154
|
await call(['pane', 'rename', pane.pane_id, label]);
|
|
87
155
|
return { outcome: 'existing pane preserved; process readiness not checked', pane: pane.pane_id };
|
|
88
156
|
}
|
|
89
|
-
if (panes.some(p => p.
|
|
90
|
-
throw new Error('Unowned monitor label in
|
|
157
|
+
if (panes.some(p => p.label === label)) {
|
|
158
|
+
throw new Error('Unowned monitor label in workspace; inspect before creating or closing a pane');
|
|
91
159
|
}
|
|
92
|
-
if (state && (!['submitted', 'observed'].includes(state.stage) || state.workspace !== caller.workspace_id || panes.some(p => p.pane_id === state.pane))) {
|
|
160
|
+
if (state && (!['submitted', 'observed', 'closed'].includes(state.stage) || state.workspace !== caller.workspace_id || state.caller !== caller.pane_id || panes.some(p => p.pane_id === state.pane))) {
|
|
93
161
|
throw new Error(`Monitor ownership/partial launch needs inspection (${state.stage}, pane ${state.pane ?? 'unknown'}); no retry or duplicate`);
|
|
94
162
|
}
|
|
163
|
+
if (closing)
|
|
164
|
+
return { outcome: 'no owned monitor pane present; no close submitted' };
|
|
95
165
|
await access(options.script); // Missing build must not leave a new empty pane.
|
|
96
166
|
check();
|
|
97
|
-
state = { version: 1, sessionId: options.sessionId, workspace: caller.workspace_id, caller: caller.pane_id, stage: 'split_pending' };
|
|
167
|
+
state = { version: 1, sessionId: options.sessionId, workspace: caller.workspace_id, caller: caller.pane_id, placement, tab: placement === 'coordinator-tab' ? caller.tab_id : undefined, stage: placement === 'new-tab' ? 'tab_pending' : 'split_pending' };
|
|
98
168
|
await save();
|
|
99
169
|
// Small top quarter after swapping pane identities. Verify actual geometry below.
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
170
|
+
const created = placement === 'new-tab'
|
|
171
|
+
? await call(['tab', 'create', '--workspace', caller.workspace_id, '--cwd', options.root, '--label', label, '--no-focus'])
|
|
172
|
+
: await call(['pane', 'split', '--pane', caller.pane_id, '--direction', 'down', '--ratio', '0.25', '--cwd', options.root, '--no-focus']);
|
|
173
|
+
const pane = placement === 'new-tab' ? created?.root_pane?.pane_id : created?.pane?.pane_id;
|
|
174
|
+
if (typeof pane !== 'string' || pane === caller.pane_id || panes.some(p => p.pane_id === pane))
|
|
175
|
+
throw new Error('Creation returned no distinct new pane ID');
|
|
176
|
+
if (placement === 'new-tab') {
|
|
177
|
+
const tab = created?.tab?.tab_id;
|
|
178
|
+
if (typeof tab !== 'string' || tab === caller.tab_id || panes.some(p => p.tab_id === tab))
|
|
179
|
+
throw new Error('Creation returned no distinct new tab ID');
|
|
180
|
+
state.tab = tab;
|
|
181
|
+
}
|
|
104
182
|
state.pane = pane;
|
|
105
183
|
state.stage = 'rename_pending';
|
|
106
184
|
await save();
|
|
107
185
|
await call(['pane', 'rename', pane, label]);
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
186
|
+
if (placement === 'coordinator-tab') {
|
|
187
|
+
state.stage = 'swap_pending';
|
|
188
|
+
await save();
|
|
189
|
+
const swapped = await call(['pane', 'swap', '--source-pane', caller.pane_id, '--target-pane', pane]);
|
|
190
|
+
if (swapped?.swap?.changed !== true)
|
|
191
|
+
throw new Error('Herdr did not confirm pane swap');
|
|
192
|
+
const layout = (await call(['pane', 'layout', '--pane', caller.pane_id]))?.layout;
|
|
193
|
+
const top = layout?.panes?.find((p) => p.pane_id === pane)?.rect;
|
|
194
|
+
const bottom = layout?.panes?.find((p) => p.pane_id === caller.pane_id)?.rect;
|
|
195
|
+
if (!top || !bottom || top.y >= bottom.y || layout.focused_pane_id !== caller.pane_id)
|
|
196
|
+
throw new Error('Monitor geometry/focus not confirmed; inspect panes before recovery');
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
const inventory = (await call(['pane', 'list', '--workspace', caller.workspace_id]))?.panes;
|
|
200
|
+
const current = (await call(['pane', 'current', '--current']))?.pane;
|
|
201
|
+
if (!Array.isArray(inventory) || inventory.some(p => !p?.pane_id || !p.tab_id || p.workspace_id && p.workspace_id !== caller.workspace_id) || new Set(inventory.map(p => p.pane_id)).size !== inventory.length || inventory.filter(p => p?.pane_id === pane && p.tab_id === state.tab).length !== 1 || !inventory.some(p => p.pane_id === caller.pane_id && p.tab_id === caller.tab_id) || current?.pane_id !== caller.pane_id || current.tab_id !== caller.tab_id || current.workspace_id !== caller.workspace_id)
|
|
202
|
+
throw new Error('New monitor tab/caller identity not confirmed; inspect before recovery');
|
|
203
|
+
}
|
|
118
204
|
state.stage = 'run_pending';
|
|
119
205
|
await save();
|
|
120
206
|
const args = [options.script, '--root', options.root];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-launcher.js","sourceRoot":"","sources":["../src/monitor-launcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-launcher.js","sourceRoot":"","sources":["../src/monitor-launcher.ts"],"names":[],"mappings":"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"}
|
package/dist/pane-close.js
CHANGED
|
@@ -3,6 +3,7 @@ import { promisify } from 'node:util';
|
|
|
3
3
|
import { constants } from 'node:fs';
|
|
4
4
|
import { open, readFile, realpath } from 'node:fs/promises';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
+
import { createCoreCloseProvider } from './core-pane-close.js';
|
|
6
7
|
const rejected = () => new Error('PiIntercom: worker pane identity could not be verified; no close submitted.');
|
|
7
8
|
const exec = async (file, args) => (await promisify(execFile)(file, args, {
|
|
8
9
|
windowsHide: true, timeout: 4000, maxBuffer: 1024 * 1024,
|
|
@@ -50,6 +51,8 @@ const alive = (identity, start) => !!identity && identity.start === start && !['
|
|
|
50
51
|
/** Linux Herdr only. Identity-checked best effort; Herdr has no atomic compare-and-close API. */
|
|
51
52
|
export function createCloseProvider(options) {
|
|
52
53
|
const env = options.env ?? process.env;
|
|
54
|
+
if (env.HC_TERMINAL_ID !== undefined)
|
|
55
|
+
return createCoreCloseProvider(options);
|
|
53
56
|
if ((options.platform ?? process.platform) !== 'linux' || env.HERDR_ENV !== '1' || !env.HERDR_PANE_ID)
|
|
54
57
|
return;
|
|
55
58
|
const run = options.run ?? exec;
|
package/dist/pane-close.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pane-close.js","sourceRoot":"","sources":["../src/pane-close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"pane-close.js","sourceRoot":"","sources":["../src/pane-close.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Observer, type EventType, type EventMetadata } from './observability.js';
|
|
2
|
-
import { ConfigStore, type Agent, type Config } from './config.js';
|
|
2
|
+
import { ConfigStore, type MonitorSettings, type Agent, type Config } from './config.js';
|
|
3
3
|
import { listen, send, type Endpoint, type Envelope, type Kind } from './transport.js';
|
|
4
4
|
import { probeWorker } from './connections.js';
|
|
5
5
|
import { type CloseProvider } from './handoff.js';
|
|
@@ -19,6 +19,17 @@ export interface LaunchRequest {
|
|
|
19
19
|
workspaceRoot: string;
|
|
20
20
|
sessionId?: string;
|
|
21
21
|
}
|
|
22
|
+
export interface MonitorRequest {
|
|
23
|
+
root: string;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
assertCurrent(): void;
|
|
26
|
+
}
|
|
27
|
+
export interface MonitorOperations {
|
|
28
|
+
open(request: MonitorRequest & {
|
|
29
|
+
placement: MonitorSettings['placement'];
|
|
30
|
+
}): Promise<unknown>;
|
|
31
|
+
close(request: MonitorRequest): Promise<unknown>;
|
|
32
|
+
}
|
|
22
33
|
export interface RuntimeOptions {
|
|
23
34
|
launch(request: LaunchRequest): Promise<unknown>;
|
|
24
35
|
listen?: typeof listen;
|
|
@@ -30,6 +41,7 @@ export interface RuntimeOptions {
|
|
|
30
41
|
/** Test seam; production defaults to 120 seconds, values above that are capped. */
|
|
31
42
|
closeTimeoutMs?: number;
|
|
32
43
|
reminderClock?: ReminderClock;
|
|
44
|
+
monitor?: MonitorOperations;
|
|
33
45
|
/** Explicit launcher-provided root must equal canonical cwd; no parent-root exception. */
|
|
34
46
|
workspaceRoot?: string;
|
|
35
47
|
}
|
|
@@ -68,6 +80,10 @@ export declare class Intercom {
|
|
|
68
80
|
config: Config;
|
|
69
81
|
me?: Agent;
|
|
70
82
|
}>;
|
|
83
|
+
getMonitorSettings(): Promise<MonitorSettings>;
|
|
84
|
+
/** Automatic admission is internal: explicit open remains allowed with disabled auto-open or no workers. */
|
|
85
|
+
autoOpenMonitor(assertAdmission?: () => void): Promise<unknown>;
|
|
86
|
+
private operateMonitor;
|
|
71
87
|
/** Accept old configs, but retire the removed browser dashboard's discovery metadata. */
|
|
72
88
|
retireDashboardMetadata(): Promise<void>;
|
|
73
89
|
reload(): Promise<void>;
|
package/dist/runtime.js
CHANGED
|
@@ -2,7 +2,7 @@ import path from 'node:path';
|
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { realpath } from 'node:fs/promises';
|
|
4
4
|
import { LocalObserver, LOG_LIMITS, observationError } from './observability.js';
|
|
5
|
-
import { ConfigStore, coordinator, directory, fail, named, requireCoordinator, text, validateConfig } from './config.js';
|
|
5
|
+
import { ConfigStore, coordinator, directory, fail, named, requireCoordinator, text, validateConfig, monitorSettings, validateMonitorSettings } from './config.js';
|
|
6
6
|
import { listen, send, reportPayload } from './transport.js';
|
|
7
7
|
import { saveWorkerReport } from './reports.js';
|
|
8
8
|
import { readObservationSnapshot } from './snapshot.js';
|
|
@@ -254,6 +254,41 @@ export class Intercom {
|
|
|
254
254
|
assertValid();
|
|
255
255
|
return { id, config, me: config.agents.find(a => a.sessionId === id) };
|
|
256
256
|
}
|
|
257
|
+
async getMonitorSettings() {
|
|
258
|
+
const assertValid = this.validity();
|
|
259
|
+
const { id, config } = await this.state();
|
|
260
|
+
assertValid();
|
|
261
|
+
requireCoordinator(config, id);
|
|
262
|
+
return monitorSettings(config);
|
|
263
|
+
}
|
|
264
|
+
/** Automatic admission is internal: explicit open remains allowed with disabled auto-open or no workers. */
|
|
265
|
+
async autoOpenMonitor(assertAdmission = () => { }) { return this.operateMonitor('open_monitor', {}, true, assertAdmission); }
|
|
266
|
+
async operateMonitor(operation, args, automatic = false, assertAdmission = () => { }) {
|
|
267
|
+
const lifecycle = this.validity();
|
|
268
|
+
const assertValid = () => { lifecycle(); assertAdmission(); };
|
|
269
|
+
assertValid();
|
|
270
|
+
if (Object.keys(args).some(key => operation === 'close_monitor' || key !== 'placement'))
|
|
271
|
+
fail('invalid monitor operation arguments');
|
|
272
|
+
if (operation === 'open_monitor' && !automatic && !['coordinator-tab', 'new-tab'].includes(args.placement))
|
|
273
|
+
fail('explicit monitor placement is required; ask the user if unknown');
|
|
274
|
+
const fresh = await this.state();
|
|
275
|
+
assertValid();
|
|
276
|
+
requireCoordinator(fresh.config, fresh.id);
|
|
277
|
+
const settings = monitorSettings(fresh.config);
|
|
278
|
+
if (automatic && (!settings.autoOpen || !fresh.config.agents.some(agent => !agent.coordinator)))
|
|
279
|
+
return { outcome: 'automatic monitor skipped' };
|
|
280
|
+
if (!this.options.monitor)
|
|
281
|
+
fail('monitor adapter unavailable; no pane action attempted');
|
|
282
|
+
const request = { root: this.store.root, sessionId: fresh.id, assertCurrent: assertValid };
|
|
283
|
+
const result = operation === 'open_monitor'
|
|
284
|
+
? await this.options.monitor.open({ ...request, placement: (automatic ? settings.placement : args.placement) })
|
|
285
|
+
: await this.options.monitor.close(request);
|
|
286
|
+
assertValid();
|
|
287
|
+
const after = await this.state();
|
|
288
|
+
assertValid();
|
|
289
|
+
requireCoordinator(after.config, fresh.id);
|
|
290
|
+
return result;
|
|
291
|
+
}
|
|
257
292
|
/** Accept old configs, but retire the removed browser dashboard's discovery metadata. */
|
|
258
293
|
async retireDashboardMetadata() {
|
|
259
294
|
const record = this.captureObserver(), assertValid = this.validity();
|
|
@@ -519,6 +554,21 @@ export class Intercom {
|
|
|
519
554
|
return { accepted: true, completion: 'not awaited' };
|
|
520
555
|
}
|
|
521
556
|
requireCoordinator(config, id);
|
|
557
|
+
if (operation === 'configure_monitor') {
|
|
558
|
+
const keys = Object.keys(args);
|
|
559
|
+
if (!keys.length || keys.some(key => !['autoOpen', 'placement'].includes(key)))
|
|
560
|
+
fail('configure_monitor requires autoOpen and/or placement only');
|
|
561
|
+
validateMonitorSettings({ ...monitorSettings(config), ...args });
|
|
562
|
+
const updated = await this.store.update(id, current => {
|
|
563
|
+
current.monitor = { ...monitorSettings(current), ...args };
|
|
564
|
+
validateMonitorSettings(current.monitor);
|
|
565
|
+
}, assertValid);
|
|
566
|
+
assertValid();
|
|
567
|
+
return { written: true, monitor: monitorSettings(updated), paneEffects: false };
|
|
568
|
+
}
|
|
569
|
+
if (operation === 'open_monitor' || operation === 'close_monitor') {
|
|
570
|
+
return this.operateMonitor(operation, args);
|
|
571
|
+
}
|
|
522
572
|
if (operation === 'stop_reminders') {
|
|
523
573
|
const current = invocation >= this.reminderRevision;
|
|
524
574
|
if (current) {
|