@berthdev/berth 0.3.6 → 0.4.2
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 +7 -1
- package/dist/src/agents/capabilities.d.ts +13 -0
- package/dist/src/agents/capabilities.js +52 -0
- package/dist/src/agents/capabilities.js.map +1 -0
- package/dist/src/agents/codex-binding.d.ts +10 -0
- package/dist/src/agents/codex-binding.js +105 -0
- package/dist/src/agents/codex-binding.js.map +1 -0
- package/dist/src/agents/commands.d.ts +4 -2
- package/dist/src/agents/commands.js +41 -9
- package/dist/src/agents/commands.js.map +1 -1
- package/dist/src/agents/copilot-state.d.ts +3 -0
- package/dist/src/agents/copilot-state.js +94 -0
- package/dist/src/agents/copilot-state.js.map +1 -0
- package/dist/src/agents/gemini-state.d.ts +3 -0
- package/dist/src/agents/gemini-state.js +41 -0
- package/dist/src/agents/gemini-state.js.map +1 -0
- package/dist/src/agents/hook-files.d.ts +1 -3
- package/dist/src/agents/hook-files.js +69 -53
- package/dist/src/agents/hook-files.js.map +1 -1
- package/dist/src/agents/hook-health.d.ts +4 -0
- package/dist/src/agents/hook-health.js +95 -0
- package/dist/src/agents/hook-health.js.map +1 -0
- package/dist/src/agents/hooks.d.ts +4 -1
- package/dist/src/agents/hooks.js +153 -21
- package/dist/src/agents/hooks.js.map +1 -1
- package/dist/src/agents/jsonl-titles.d.ts +8 -0
- package/dist/src/agents/jsonl-titles.js +124 -0
- package/dist/src/agents/jsonl-titles.js.map +1 -0
- package/dist/src/agents/late-binding.d.ts +2 -0
- package/dist/src/agents/late-binding.js +25 -0
- package/dist/src/agents/late-binding.js.map +1 -0
- package/dist/src/agents/profile.d.ts +14 -0
- package/dist/src/agents/profile.js +75 -0
- package/dist/src/agents/profile.js.map +1 -0
- package/dist/src/agents/registry.d.ts +12 -3
- package/dist/src/agents/registry.js +52 -19
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/roots.d.ts +2 -0
- package/dist/src/agents/roots.js +21 -0
- package/dist/src/agents/roots.js.map +1 -0
- package/dist/src/agents/titles.d.ts +14 -0
- package/dist/src/agents/titles.js +82 -0
- package/dist/src/agents/titles.js.map +1 -0
- package/dist/src/agents/transcript-cursor.d.ts +9 -0
- package/dist/src/agents/transcript-cursor.js +86 -0
- package/dist/src/agents/transcript-cursor.js.map +1 -0
- package/dist/src/cli/main.js +40 -7
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/config/index.d.ts +6 -0
- package/dist/src/config/index.js +37 -6
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/config/write.d.ts +2 -0
- package/dist/src/config/write.js +41 -0
- package/dist/src/config/write.js.map +1 -0
- package/dist/src/context.js +1 -1
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.d.ts +11 -5
- package/dist/src/index.js +10 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/iterm2/install.d.ts +2 -0
- package/dist/src/iterm2/install.js +37 -12
- package/dist/src/iterm2/install.js.map +1 -1
- package/dist/src/present/attach.js +17 -5
- package/dist/src/present/attach.js.map +1 -1
- package/dist/src/present/state.d.ts +3 -0
- package/dist/src/present/state.js +12 -8
- package/dist/src/present/state.js.map +1 -1
- package/dist/src/process-arguments.d.ts +2 -0
- package/dist/src/process-arguments.js +59 -0
- package/dist/src/process-arguments.js.map +1 -0
- package/dist/src/process-directory.d.ts +2 -0
- package/dist/src/process-directory.js +37 -0
- package/dist/src/process-directory.js.map +1 -0
- package/dist/src/process-owner.d.ts +7 -0
- package/dist/src/process-owner.js +51 -0
- package/dist/src/process-owner.js.map +1 -0
- package/dist/src/registry/directory.d.ts +2 -0
- package/dist/src/registry/directory.js +19 -0
- package/dist/src/registry/directory.js.map +1 -0
- package/dist/src/registry/discover.d.ts +15 -5
- package/dist/src/registry/discover.js +135 -38
- package/dist/src/registry/discover.js.map +1 -1
- package/dist/src/registry/doctor.d.ts +5 -1
- package/dist/src/registry/doctor.js +53 -12
- package/dist/src/registry/doctor.js.map +1 -1
- package/dist/src/registry/hosts.d.ts +28 -0
- package/dist/src/registry/hosts.js +73 -0
- package/dist/src/registry/hosts.js.map +1 -0
- package/dist/src/registry/launch.d.ts +3 -0
- package/dist/src/registry/launch.js +29 -0
- package/dist/src/registry/launch.js.map +1 -0
- package/dist/src/registry/native-state.d.ts +20 -0
- package/dist/src/registry/native-state.js +127 -0
- package/dist/src/registry/native-state.js.map +1 -0
- package/dist/src/registry/sessions.d.ts +21 -3
- package/dist/src/registry/sessions.js +178 -37
- package/dist/src/registry/sessions.js.map +1 -1
- package/dist/src/restore/ensure.d.ts +12 -2
- package/dist/src/restore/ensure.js +171 -37
- package/dist/src/restore/ensure.js.map +1 -1
- package/dist/src/restore/lock.d.ts +3 -5
- package/dist/src/restore/lock.js +82 -52
- package/dist/src/restore/lock.js.map +1 -1
- package/dist/src/restore/status.d.ts +9 -0
- package/dist/src/restore/status.js +16 -0
- package/dist/src/restore/status.js.map +1 -0
- package/dist/src/snapshot/identity.d.ts +7 -0
- package/dist/src/snapshot/identity.js +20 -0
- package/dist/src/snapshot/identity.js.map +1 -0
- package/dist/src/snapshot/lifecycle.d.ts +9 -0
- package/dist/src/snapshot/lifecycle.js +37 -0
- package/dist/src/snapshot/lifecycle.js.map +1 -0
- package/dist/src/snapshot/store.d.ts +11 -1
- package/dist/src/snapshot/store.js +28 -9
- package/dist/src/snapshot/store.js.map +1 -1
- package/dist/src/snapshot/take.d.ts +2 -1
- package/dist/src/snapshot/take.js +29 -25
- package/dist/src/snapshot/take.js.map +1 -1
- package/dist/src/tmux/client.d.ts +6 -2
- package/dist/src/tmux/client.js +49 -25
- package/dist/src/tmux/client.js.map +1 -1
- package/dist/src/tmux/connections.d.ts +22 -0
- package/dist/src/tmux/connections.js +70 -0
- package/dist/src/tmux/connections.js.map +1 -0
- package/dist/src/tmux/fields.d.ts +7 -0
- package/dist/src/tmux/fields.js +23 -0
- package/dist/src/tmux/fields.js.map +1 -0
- package/dist/src/tmux/install.js +31 -18
- package/dist/src/tmux/install.js.map +1 -1
- package/dist/src/tools.d.ts +3 -1
- package/dist/src/tools.js +23 -11
- package/dist/src/tools.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/agents/name-key.d.ts +0 -1
- package/dist/src/agents/name-key.js +0 -66
- package/dist/src/agents/name-key.js.map +0 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { copilotState } from '../agents/copilot-state.js';
|
|
2
|
+
import { geminiInactive } from '../agents/gemini-state.js';
|
|
3
|
+
import { spawnSync } from 'node:child_process';
|
|
4
|
+
import { readProfile, profileEnvironment, profileKey } from '../agents/profile.js';
|
|
5
|
+
import { processLifetime } from '../process-owner.js';
|
|
6
|
+
import { presentState } from '../present/state.js';
|
|
7
|
+
import { nameCollision } from '../snapshot/identity.js';
|
|
8
|
+
import { resolveBinary } from '../tools.js';
|
|
9
|
+
import { processes, sessionProducers } from './discover.js';
|
|
10
|
+
function eligible(session) {
|
|
11
|
+
const m = session.meta;
|
|
12
|
+
return (m.agent === 'claude' || (['gemini', 'copilot'].includes(m.agent || '') && !!m.nativeTranscript)) && !!m.conversation && !m.bindingIssue
|
|
13
|
+
&& !!m.producerPane && !!m.producerLifetime
|
|
14
|
+
&& (m.state === 'working' || m.state === 'waiting' || (m.agent === 'gemini' && m.state === 'done'));
|
|
15
|
+
}
|
|
16
|
+
/** Called under the state lock; one least-recently attempted profile per pass. */
|
|
17
|
+
export function prepareNativeState(ctx) {
|
|
18
|
+
const live = ctx.tmux.listSessions().filter(eligible);
|
|
19
|
+
const saved = ctx.store.newest()?.sessions ?? [];
|
|
20
|
+
const groups = new Map();
|
|
21
|
+
for (const session of live) {
|
|
22
|
+
const profile = readProfile(session.meta.agent, session.meta.profile);
|
|
23
|
+
if (!profile || nameCollision(ctx, session, saved))
|
|
24
|
+
continue;
|
|
25
|
+
const key = profileKey(session.meta.agent, profile);
|
|
26
|
+
groups.set(key, [...(groups.get(key) ?? []), session]);
|
|
27
|
+
}
|
|
28
|
+
const attempted = (rows) => Math.max(0, ...rows.map((s) => Number(s.meta.nativeCheckedAt) || 0));
|
|
29
|
+
const selected = [...groups.values()].sort((a, b) => attempted(a) - attempted(b))[0];
|
|
30
|
+
if (!selected)
|
|
31
|
+
return [];
|
|
32
|
+
const now = String(Date.now());
|
|
33
|
+
const procs = processes();
|
|
34
|
+
return selected.flatMap((session) => {
|
|
35
|
+
ctx.tmux.setMeta(session.name, { nativeCheckedAt: now });
|
|
36
|
+
const updated = { ...session, meta: { ...session.meta, nativeCheckedAt: now } };
|
|
37
|
+
try {
|
|
38
|
+
const producers = sessionProducers(ctx, session.name, procs);
|
|
39
|
+
const producer = producers.length === 1 ? producers[0] : undefined;
|
|
40
|
+
const lifetime = producer && processLifetime(producer.pid);
|
|
41
|
+
if (!producer || producer.agent !== session.meta.agent || producer.argvIssue
|
|
42
|
+
|| producer.pane !== session.meta.producerPane || !lifetime
|
|
43
|
+
|| lifetime.key !== session.meta.producerLifetime)
|
|
44
|
+
return [];
|
|
45
|
+
return [{ session: updated, pid: producer.pid, bornAt: lifetime.bornAt }];
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return [];
|
|
49
|
+
} // Unverifiable ownership is not an idle observation.
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/** Native schemas are versioned externally; unknown or ambiguous data is inert. */
|
|
53
|
+
export function nativeIdle(data, candidate) {
|
|
54
|
+
if (!Array.isArray(data))
|
|
55
|
+
return false;
|
|
56
|
+
const records = data.filter((row) => row && typeof row === 'object'
|
|
57
|
+
&& (row.pid === candidate.pid || row.sessionId === candidate.session.meta.conversation));
|
|
58
|
+
if (records.length !== 1)
|
|
59
|
+
return false;
|
|
60
|
+
const row = records[0];
|
|
61
|
+
return row.pid === candidate.pid && row.sessionId === candidate.session.meta.conversation
|
|
62
|
+
&& row.kind === 'interactive' && row.status === 'idle'
|
|
63
|
+
&& typeof row.startedAt === 'number' && Number.isFinite(row.startedAt)
|
|
64
|
+
&& row.startedAt >= candidate.bornAt && row.startedAt <= Date.now();
|
|
65
|
+
}
|
|
66
|
+
/** No shared state lock may be held while invoking the native CLI. */
|
|
67
|
+
export function observeNativeState(ctx, candidates) {
|
|
68
|
+
const first = candidates[0];
|
|
69
|
+
const agent = first?.session.meta.agent;
|
|
70
|
+
const profile = first && agent && readProfile(agent, first.session.meta.profile);
|
|
71
|
+
if (!profile)
|
|
72
|
+
return [];
|
|
73
|
+
const env = profileEnvironment(agent, profile, ctx.env);
|
|
74
|
+
if (agent === 'copilot')
|
|
75
|
+
return candidates.flatMap((candidate) => {
|
|
76
|
+
const { session } = candidate;
|
|
77
|
+
const state = copilotState(session.meta.nativeTranscript, session.meta.conversation, env);
|
|
78
|
+
if (state === undefined || state === session.meta.state)
|
|
79
|
+
return [];
|
|
80
|
+
return [{ ...candidate, ...(state === 'working' ? { state } : {}) }];
|
|
81
|
+
});
|
|
82
|
+
if (agent === 'gemini')
|
|
83
|
+
return candidates.filter(({ session }) => geminiInactive(session.meta.nativeTranscript, session.meta.conversation, env, session.meta.state === 'done'));
|
|
84
|
+
try {
|
|
85
|
+
const result = spawnSync(resolveBinary('claude', env), ['agents', '--json'], {
|
|
86
|
+
env, encoding: 'utf8', timeout: 1500, killSignal: 'SIGKILL', maxBuffer: 1024 * 1024,
|
|
87
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
88
|
+
});
|
|
89
|
+
if (result.error || result.status !== 0)
|
|
90
|
+
return [];
|
|
91
|
+
const data = JSON.parse(result.stdout);
|
|
92
|
+
return candidates.filter((candidate) => nativeIdle(data, candidate));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function sameNativeCandidate(before, after) {
|
|
99
|
+
return before.name === after.name && before.serverStart === after.serverStart
|
|
100
|
+
&& before.sessionId === after.sessionId
|
|
101
|
+
&& Object.keys({ ...before.meta, ...after.meta }).filter((key) => key !== 'nativeCheckedAt').every((key) => before.meta[key] === after.meta[key]);
|
|
102
|
+
}
|
|
103
|
+
/** Called under the state lock; observations never establish session identity. */
|
|
104
|
+
export function applyNativeState(ctx, observations) {
|
|
105
|
+
if (!observations.length)
|
|
106
|
+
return;
|
|
107
|
+
const live = ctx.tmux.listSessions();
|
|
108
|
+
const saved = ctx.store.newest()?.sessions ?? [];
|
|
109
|
+
const procs = processes();
|
|
110
|
+
for (const observation of observations) {
|
|
111
|
+
const current = live.find((s) => sameNativeCandidate(observation.session, s));
|
|
112
|
+
if (!current || !eligible(current) || nameCollision(ctx, current, saved))
|
|
113
|
+
continue;
|
|
114
|
+
try {
|
|
115
|
+
const producers = sessionProducers(ctx, current.name, procs);
|
|
116
|
+
const producer = producers.length === 1 ? producers[0] : undefined;
|
|
117
|
+
if (!producer || producer.pid !== observation.pid || producer.agent !== current.meta.agent
|
|
118
|
+
|| producer.argvIssue || producer.pane !== current.meta.producerPane
|
|
119
|
+
|| processLifetime(producer.pid)?.key !== current.meta.producerLifetime)
|
|
120
|
+
continue;
|
|
121
|
+
ctx.tmux.setMeta(current.name, { state: observation.state ?? '', note: '' });
|
|
122
|
+
presentState(ctx.tmux, current.name, observation.state ?? '');
|
|
123
|
+
}
|
|
124
|
+
catch { /* A disappearing or unverifiable producer leaves hooks authoritative. */ }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=native-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-state.js","sourceRoot":"","sources":["../../../src/registry/native-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAU5D,SAAS,QAAQ,CAAC,OAAoB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY;WAC1I,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB;WACxC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AACxG,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,SAAS;QAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAM,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAClC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,EAAE,CAAC;QAChF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,MAAM,QAAQ,GAAG,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,SAAS;mBACvE,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,QAAQ;mBACxD,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO,EAAE,CAAC;YAC/D,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,qDAAqD;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,UAAU,CAAC,IAAa,EAAE,SAA0B;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;WAC9D,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY;WACpF,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;WACnD,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;WACnE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACxE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,GAAY,EAAE,UAA6B;IAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjF,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,kBAAkB,CAAC,KAAM,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAuB,EAAE;YACpF,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;YAC9B,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,YAAa,EAAE,GAAG,CAAC,CAAC;YAC3F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACnE,OAAO,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC/D,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,YAAa,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;IACjH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YAC3E,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI;YACnF,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACnD,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAmB,EAAE,KAAkB;IACzE,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;WACxE,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;WACpC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACzG,MAAM,CAAC,IAAI,CAAC,GAA+B,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,YAAiC;IAC9E,IAAI,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;YAAE,SAAS;QACnF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK;mBACrF,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY;mBACjE,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB;gBAAE,SAAS;YACpF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7E,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC,CAAC,yEAAyE,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import { type AgentProfile } from '../agents/profile.js';
|
|
2
|
+
import { type RecoveryStatus } from '../restore/status.js';
|
|
3
|
+
import { type ConnectionInfo } from '../tmux/connections.js';
|
|
1
4
|
import type { Context } from '../context.js';
|
|
2
5
|
import { type HookStatus } from '../agents/hooks.js';
|
|
3
6
|
/** One row of `berth ls` (implementation §2.2). */
|
|
4
|
-
export interface SessionRow {
|
|
7
|
+
export interface SessionRow extends RecoveryStatus {
|
|
5
8
|
name: string;
|
|
6
9
|
managed: boolean;
|
|
7
10
|
agent: string;
|
|
@@ -10,13 +13,24 @@ export interface SessionRow {
|
|
|
10
13
|
origin: string;
|
|
11
14
|
state: string;
|
|
12
15
|
note: string;
|
|
16
|
+
/** First line of the user's latest prompt (spec §4.2). */
|
|
17
|
+
topic: string;
|
|
13
18
|
attachedClients: number;
|
|
19
|
+
connections?: ConnectionInfo[];
|
|
20
|
+
conversationTitle?: string;
|
|
21
|
+
bindingIssue?: string;
|
|
22
|
+
ownerWorkspace?: string;
|
|
14
23
|
live: boolean;
|
|
15
24
|
/** Whether the agent's Berth hooks are installed (spec §4.2). */
|
|
16
25
|
hooks: HookStatus;
|
|
26
|
+
hookSetup?: string;
|
|
27
|
+
profile?: AgentProfile;
|
|
28
|
+
recoveryOptionsRequired?: boolean;
|
|
17
29
|
}
|
|
18
30
|
export declare const ORIGINS: readonly ["vscode", "iterm2", "none"];
|
|
19
31
|
export declare function list(ctx: Context): SessionRow[];
|
|
32
|
+
/** Reconcile discovery and externally renamed live sessions before presenting inventory. */
|
|
33
|
+
export declare function inventory(ctx: Context): SessionRow[];
|
|
20
34
|
export declare function sanitizeName(raw: string): string;
|
|
21
35
|
/** Default name from the cwd's basename; suffix -2, -3, … on collision with any live session. */
|
|
22
36
|
export declare function uniqueName(ctx: Context, base: string): string;
|
|
@@ -36,6 +50,10 @@ export declare function requireLive(ctx: Context, name: string): void;
|
|
|
36
50
|
* project), else the session's start directory.
|
|
37
51
|
*/
|
|
38
52
|
export declare function adopt(ctx: Context, name: string, agent: string, origin?: string): void;
|
|
53
|
+
/** Rename live identity and its recovery record before hosts update their references. */
|
|
54
|
+
export declare function rename(ctx: Context, from: string, to: string): void;
|
|
55
|
+
/** Intentional end must not be mistaken for the last server disappearing. */
|
|
56
|
+
export declare function end(ctx: Context, name: string): void;
|
|
39
57
|
/** Give up a stopped session: it is no longer restored or listed (spec §5.3). */
|
|
40
58
|
export declare function forget(ctx: Context, name: string): void;
|
|
41
59
|
export declare function stamp(ctx: Context, name: string, values: Record<string, string>): void;
|
|
@@ -44,8 +62,8 @@ export declare const BELL_NOTE = "bell";
|
|
|
44
62
|
/**
|
|
45
63
|
* A terminal bell from a managed session (tmux alert-bell). Agents without
|
|
46
64
|
* Berth hooks get state `waiting`, so every agent can ask for attention; for
|
|
47
|
-
* agents
|
|
48
|
-
* the bell is ignored. Returns whether the state changed.
|
|
65
|
+
* agents with complete waiting hooks and no independent hook trust gate,
|
|
66
|
+
* the bell is ignored. Existing explicit waiting information is preserved. Returns whether the state changed.
|
|
49
67
|
*/
|
|
50
68
|
export declare function bellRang(ctx: Context, name: string, env?: NodeJS.ProcessEnv): boolean;
|
|
51
69
|
/** Seeing a session answers its bell: clear a bell-raised waiting state. */
|
|
@@ -1,41 +1,86 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { prepareNativeState, observeNativeState, applyNativeState } from './native-state.js';
|
|
2
|
+
import { processLifetime } from '../process-owner.js';
|
|
3
|
+
import { applyLaunchEnvironment, captureProfile, profileEnvironment, profileKey, readProfile } from '../agents/profile.js';
|
|
4
|
+
import { withLock } from '../restore/lock.js';
|
|
5
|
+
import { nameCollision, COLLISION_HINT } from '../snapshot/identity.js';
|
|
6
|
+
import { withPlaceholder } from './launch.js';
|
|
7
|
+
import { usableDirectory } from './directory.js';
|
|
8
|
+
import { wasClosed } from '../snapshot/lifecycle.js';
|
|
9
|
+
import { recoveryStatus } from '../restore/status.js';
|
|
10
|
+
import { profiledTitleLookup } from '../agents/titles.js';
|
|
11
|
+
import { connections } from '../tmux/connections.js';
|
|
12
|
+
import { basename, join } from 'node:path';
|
|
2
13
|
import { BerthError, ExitCode } from '../errors.js';
|
|
3
|
-
import { launchCommand, requireAdapter } from '../agents/commands.js';
|
|
4
|
-
import { hooksInstalled, hookStatus } from '../agents/hooks.js';
|
|
14
|
+
import { launchCommand, recoveryOptionsRequired, requireAdapter } from '../agents/commands.js';
|
|
15
|
+
import { hooksInstalled, hookStatus, hookSetupGuidance } from '../agents/hooks.js';
|
|
16
|
+
import { registeredHosts } from './hosts.js';
|
|
17
|
+
import { discover, sessionProducers } from './discover.js';
|
|
5
18
|
import { getAdapter } from '../agents/registry.js';
|
|
6
19
|
import { snapshotQuietly, takeSnapshot } from '../snapshot/take.js';
|
|
7
20
|
import { presentState } from '../present/state.js';
|
|
8
21
|
export const ORIGINS = ['vscode', 'iterm2', 'none'];
|
|
9
22
|
export function list(ctx) {
|
|
10
23
|
const live = ctx.tmux.listSessions();
|
|
24
|
+
const saved = ctx.store.newest()?.sessions ?? [];
|
|
25
|
+
const title = profiledTitleLookup([...live.map((row) => ({ agent: row.meta.agent ?? '', conversation: row.meta.conversation ?? '', profile: readProfile(row.meta.agent ?? '', row.meta.profile) })), ...saved], ctx.env, join(ctx.config.stateDir, 'title-cache'));
|
|
26
|
+
const clients = connections(ctx.tmux, registeredHosts(ctx.config.stateDir));
|
|
11
27
|
const statuses = new Map();
|
|
12
|
-
const hooks = (agent) => {
|
|
13
|
-
if (!agent)
|
|
28
|
+
const hooks = (agent, profile) => {
|
|
29
|
+
if (!agent || agent === 'shell')
|
|
14
30
|
return 'none';
|
|
15
|
-
if (!
|
|
16
|
-
|
|
17
|
-
|
|
31
|
+
if (!profile)
|
|
32
|
+
return 'unknown';
|
|
33
|
+
const key = profileKey(agent, profile);
|
|
34
|
+
if (!statuses.has(key))
|
|
35
|
+
statuses.set(key, hookStatus(agent, profileEnvironment(agent, profile, ctx.env)));
|
|
36
|
+
return statuses.get(key);
|
|
18
37
|
};
|
|
19
38
|
const rows = live.map((s) => ({
|
|
20
39
|
name: s.name,
|
|
40
|
+
profile: readProfile(s.meta.agent ?? '', s.meta.profile),
|
|
41
|
+
...recoveryStatus(ctx.tmux, s.name, s.meta),
|
|
21
42
|
managed: Boolean(s.meta.agent),
|
|
22
43
|
agent: s.meta.agent ?? '',
|
|
23
44
|
cwd: s.meta.cwd ?? s.path,
|
|
45
|
+
bindingIssue: nameCollision(ctx, s, saved) ? COLLISION_HINT : s.meta.bindingIssue,
|
|
46
|
+
ownerWorkspace: s.meta.ownerWorkspace,
|
|
24
47
|
conversation: s.meta.conversation ?? '',
|
|
48
|
+
conversationTitle: title(s.meta.agent ?? '', s.meta.cwd ?? s.path, s.meta.conversation ?? '', readProfile(s.meta.agent ?? '', s.meta.profile)),
|
|
25
49
|
origin: s.meta.origin ?? (s.meta.agent ? 'none' : ''),
|
|
26
50
|
state: s.meta.state ?? '',
|
|
27
51
|
note: s.meta.note ?? '',
|
|
52
|
+
topic: s.meta.topic ?? '',
|
|
28
53
|
attachedClients: s.attachedClients,
|
|
54
|
+
connections: clients.get(s.name) ?? [],
|
|
29
55
|
live: true,
|
|
30
|
-
hooks: hooks(s.meta.agent ?? ''),
|
|
56
|
+
hooks: hooks(s.meta.agent ?? '', readProfile(s.meta.agent ?? '', s.meta.profile)),
|
|
31
57
|
}));
|
|
32
58
|
const liveNames = new Set(live.map((s) => s.name));
|
|
33
|
-
for (const s of
|
|
34
|
-
if (liveNames.has(s.name))
|
|
59
|
+
for (const s of saved) {
|
|
60
|
+
if (liveNames.has(s.name) || wasClosed(ctx, s))
|
|
35
61
|
continue;
|
|
36
|
-
rows.push({ ...s, managed: true, state: '', note: '', attachedClients: 0, live: false, hooks: hooks(s.agent) });
|
|
62
|
+
rows.push({ ...s, recoveryOptionsRequired: recoveryOptionsRequired(s.agent, s.argv, s.argvVerified), conversationTitle: title(s.agent, s.cwd, s.conversation, readProfile(s.agent, s.profile)), managed: true, state: '', note: '', topic: '', attachedClients: 0, live: false, hooks: hooks(s.agent, readProfile(s.agent, s.profile)) });
|
|
37
63
|
}
|
|
38
|
-
return rows;
|
|
64
|
+
return rows.map((row) => row.hooks === 'installed' ? { ...row, hookSetup: hookSetupGuidance(row.agent) } : row);
|
|
65
|
+
}
|
|
66
|
+
/** Reconcile discovery and externally renamed live sessions before presenting inventory. */
|
|
67
|
+
export function inventory(ctx) {
|
|
68
|
+
const candidates = withLock(ctx.config.stateDir, () => prepareNativeState(ctx));
|
|
69
|
+
const observations = observeNativeState(ctx, candidates);
|
|
70
|
+
return withLock(ctx.config.stateDir, () => {
|
|
71
|
+
applyNativeState(ctx, observations);
|
|
72
|
+
return inventoryLocked(ctx);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function inventoryLocked(ctx) {
|
|
76
|
+
const adopted = discover(ctx);
|
|
77
|
+
const live = ctx.tmux.listSessions();
|
|
78
|
+
const server = live[0]?.serverStart;
|
|
79
|
+
const current = live.filter((session) => session.meta.agent).map((session) => session.name).sort();
|
|
80
|
+
const saved = (ctx.store.newest()?.sessions ?? []).filter((session) => session.serverStart === server).map((session) => session.name).sort();
|
|
81
|
+
if (adopted.length || (server && current.some((name) => !saved.includes(name))))
|
|
82
|
+
takeSnapshot(ctx);
|
|
83
|
+
return list(ctx);
|
|
39
84
|
}
|
|
40
85
|
export function sanitizeName(raw) {
|
|
41
86
|
const cleaned = raw.replace(/[^A-Za-z0-9_-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
@@ -43,7 +88,7 @@ export function sanitizeName(raw) {
|
|
|
43
88
|
}
|
|
44
89
|
/** Default name from the cwd's basename; suffix -2, -3, … on collision with any live session. */
|
|
45
90
|
export function uniqueName(ctx, base) {
|
|
46
|
-
const taken = new Set(ctx.tmux.listSessions().map((s) => s.name));
|
|
91
|
+
const taken = new Set([...ctx.tmux.listSessions(), ...(ctx.store.newest()?.sessions ?? [])].map((s) => s.name));
|
|
47
92
|
const name = sanitizeName(base);
|
|
48
93
|
if (!taken.has(name))
|
|
49
94
|
return name;
|
|
@@ -58,21 +103,34 @@ export function checkOrigin(origin) {
|
|
|
58
103
|
return origin;
|
|
59
104
|
}
|
|
60
105
|
export function create(ctx, options) {
|
|
106
|
+
return withLock(ctx.config.stateDir, () => createLocked(ctx, options));
|
|
107
|
+
}
|
|
108
|
+
function createLocked(ctx, options) {
|
|
61
109
|
const adapter = requireAdapter(options.agent);
|
|
62
110
|
const name = options.name ? sanitizeName(options.name) : uniqueName(ctx, basename(options.cwd));
|
|
63
|
-
if (ctx.tmux.hasSession(name))
|
|
64
|
-
throw new BerthError(`session already
|
|
111
|
+
if (ctx.tmux.hasSession(name) || ctx.store.newest()?.sessions.some((saved) => saved.name === name && !wasClosed(ctx, saved))) {
|
|
112
|
+
throw new BerthError(`session name is already reserved: ${name}; resume or forget the stopped conversation first`, ExitCode.usage);
|
|
113
|
+
}
|
|
65
114
|
const command = launchCommand({ adapter, name, cwd: options.cwd, extraArgs: options.extraArgs, overrides: ctx.config.agents });
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
115
|
+
const origin = checkOrigin(options.origin ?? 'none');
|
|
116
|
+
if (!usableDirectory(options.cwd))
|
|
117
|
+
throw new BerthError('Choose an existing accessible folder.', ExitCode.usage);
|
|
118
|
+
const profile = adapter.id === 'shell' ? undefined : captureProfile(adapter.id, ctx.env);
|
|
119
|
+
return withPlaceholder(ctx, name, options.cwd, () => {
|
|
120
|
+
if (profile)
|
|
121
|
+
applyLaunchEnvironment(ctx, name, adapter.id, profile);
|
|
122
|
+
ctx.tmux.setMeta(name, {
|
|
123
|
+
agent: adapter.id,
|
|
124
|
+
profile: profile ? JSON.stringify(profile) : undefined,
|
|
125
|
+
cwd: options.cwd,
|
|
126
|
+
argv: command, argvVerified: '1',
|
|
127
|
+
origin,
|
|
128
|
+
});
|
|
129
|
+
ctx.tmux.setTitle(name);
|
|
130
|
+
ctx.tmux.run(['respawn-pane', '-k', '-t', `=${name}:`, ...(command ? [command] : [])]);
|
|
131
|
+
snapshotQuietly(ctx);
|
|
132
|
+
return name;
|
|
72
133
|
});
|
|
73
|
-
ctx.tmux.setTitle(name);
|
|
74
|
-
snapshotQuietly(ctx);
|
|
75
|
-
return name;
|
|
76
134
|
}
|
|
77
135
|
export function requireLive(ctx, name) {
|
|
78
136
|
if (!ctx.tmux.hasSession(name))
|
|
@@ -84,30 +142,89 @@ export function requireLive(ctx, name) {
|
|
|
84
142
|
* project), else the session's start directory.
|
|
85
143
|
*/
|
|
86
144
|
export function adopt(ctx, name, agent, origin) {
|
|
145
|
+
return withLock(ctx.config.stateDir, () => adoptLocked(ctx, name, agent, origin));
|
|
146
|
+
}
|
|
147
|
+
function adoptLocked(ctx, name, agent, origin) {
|
|
87
148
|
requireLive(ctx, name);
|
|
88
149
|
const adapter = requireAdapter(agent);
|
|
89
150
|
const live = ctx.tmux.listSessions().find((s) => s.name === name);
|
|
151
|
+
const changingAgent = Boolean(live?.meta.agent && live.meta.agent !== agent);
|
|
152
|
+
const producers = sessionProducers(ctx, name);
|
|
153
|
+
if (producers.some((producer) => producer.argvIssue))
|
|
154
|
+
throw new BerthError(producers.find((producer) => producer.argvIssue).argvIssue);
|
|
155
|
+
const lifetime = producers[0] ? processLifetime(producers[0].pid)?.key : undefined;
|
|
156
|
+
const resetBinding = Boolean(live?.meta.bindingIssue || changingAgent || (lifetime && live?.meta.conversation && live.meta.producerLifetime !== lifetime));
|
|
157
|
+
if (producers.length > 1 || (producers.length === 1 && producers[0].agent !== agent)) {
|
|
158
|
+
throw new BerthError('Selected agent does not match the independent producer in this session.', ExitCode.usage);
|
|
159
|
+
}
|
|
160
|
+
if (live?.meta.bindingIssue && (producers.length !== 1 || producers[0].agent !== agent)) {
|
|
161
|
+
throw new BerthError('Separate independent agents into their own sessions before adopting again.', ExitCode.usage);
|
|
162
|
+
}
|
|
90
163
|
ctx.tmux.setMeta(name, {
|
|
164
|
+
...(resetBinding ? { bindingIssue: '', producerPane: producers[0]?.pane ?? '', producerLifetime: lifetime ?? '', restoreSource: '', profile: '', conversation: '', state: '', topic: '', note: '', recovery: '', recoveryAt: '', recoveryDetail: '' } : {}),
|
|
165
|
+
argvVerified: producers[0] ? '1' : (changingAgent ? '' : live?.meta.argvVerified),
|
|
91
166
|
agent: adapter.id,
|
|
92
|
-
cwd: live?.meta.cwd ?? ctx.tmux.paneCurrentPath(name) ?? live?.path ?? '',
|
|
93
|
-
argv: live?.meta.argv ?? adapter.launch.replace(/\{\w+\}/g, '').trim(),
|
|
167
|
+
cwd: producers[0]?.cwd ?? live?.meta.cwd ?? ctx.tmux.paneCurrentPath(name) ?? live?.path ?? '',
|
|
168
|
+
argv: producers[0]?.argv ?? (changingAgent ? undefined : live?.meta.argv) ?? adapter.launch.replace(/\{\w+\}/g, '').trim(),
|
|
94
169
|
origin: checkOrigin(origin ?? live?.meta.origin ?? 'none'),
|
|
95
170
|
});
|
|
96
171
|
ctx.tmux.setTitle(name);
|
|
97
172
|
snapshotQuietly(ctx);
|
|
98
173
|
}
|
|
174
|
+
/** Rename live identity and its recovery record before hosts update their references. */
|
|
175
|
+
export function rename(ctx, from, to) {
|
|
176
|
+
return withLock(ctx.config.stateDir, () => renameLocked(ctx, from, to));
|
|
177
|
+
}
|
|
178
|
+
function renameLocked(ctx, from, to) {
|
|
179
|
+
requireLive(ctx, from);
|
|
180
|
+
if (!to || sanitizeName(to) !== to)
|
|
181
|
+
throw new BerthError('invalid session name', ExitCode.usage);
|
|
182
|
+
if (from === to)
|
|
183
|
+
return;
|
|
184
|
+
if (ctx.tmux.hasSession(to) || ctx.store.newest()?.sessions.some((s) => s.name === to)) {
|
|
185
|
+
throw new BerthError(`session already exists: ${to}`, ExitCode.usage);
|
|
186
|
+
}
|
|
187
|
+
const live = ctx.tmux.listSessions().find((session) => session.name === from);
|
|
188
|
+
const collision = nameCollision(ctx, live, ctx.store.newest()?.sessions ?? []);
|
|
189
|
+
ctx.tmux.renameSession(from, to);
|
|
190
|
+
try {
|
|
191
|
+
takeSnapshot(ctx, new Date(), collision ? [] : [from], collision ? [collision] : []);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
ctx.tmux.renameSession(to, from);
|
|
195
|
+
snapshotQuietly(ctx);
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/** Intentional end must not be mistaken for the last server disappearing. */
|
|
200
|
+
export function end(ctx, name) {
|
|
201
|
+
return withLock(ctx.config.stateDir, () => endLocked(ctx, name));
|
|
202
|
+
}
|
|
203
|
+
function endLocked(ctx, name) {
|
|
204
|
+
requireLive(ctx, name);
|
|
205
|
+
const live = ctx.tmux.listSessions().find((session) => session.name === name);
|
|
206
|
+
const collision = nameCollision(ctx, live, ctx.store.newest()?.sessions ?? []);
|
|
207
|
+
ctx.tmux.killSession(name);
|
|
208
|
+
takeSnapshot(ctx, new Date(), collision ? [] : [name], collision ? [collision] : []);
|
|
209
|
+
}
|
|
99
210
|
/** Give up a stopped session: it is no longer restored or listed (spec §5.3). */
|
|
100
211
|
export function forget(ctx, name) {
|
|
212
|
+
return withLock(ctx.config.stateDir, () => forgetLocked(ctx, name));
|
|
213
|
+
}
|
|
214
|
+
function forgetLocked(ctx, name) {
|
|
101
215
|
if (ctx.tmux.hasSession(name))
|
|
102
216
|
throw new BerthError(`${name} is running; end it instead`, ExitCode.usage);
|
|
103
217
|
if (!ctx.store.newest()?.sessions.some((s) => s.name === name))
|
|
104
218
|
throw new BerthError(`no stopped session ${name}`, ExitCode.notFound);
|
|
105
219
|
takeSnapshot(ctx, new Date(), [name]);
|
|
106
220
|
}
|
|
107
|
-
const STAMPABLE = new Set(['agent', 'cwd', 'argv', 'conversation', 'origin', 'state', 'note']);
|
|
221
|
+
const STAMPABLE = new Set(['agent', 'cwd', 'argv', 'conversation', 'origin', 'state', 'note', 'topic', 'ownerWorkspace']);
|
|
108
222
|
export function stamp(ctx, name, values) {
|
|
223
|
+
return withLock(ctx.config.stateDir, () => stampLocked(ctx, name, values));
|
|
224
|
+
}
|
|
225
|
+
function stampLocked(ctx, name, values) {
|
|
109
226
|
requireLive(ctx, name);
|
|
110
|
-
|
|
227
|
+
let meta = {};
|
|
111
228
|
for (const [key, value] of Object.entries(values)) {
|
|
112
229
|
if (!STAMPABLE.has(key))
|
|
113
230
|
throw new BerthError(`cannot stamp ${key}`, ExitCode.usage);
|
|
@@ -115,7 +232,26 @@ export function stamp(ctx, name, values) {
|
|
|
115
232
|
checkOrigin(value);
|
|
116
233
|
if (key === 'agent')
|
|
117
234
|
requireAdapter(value);
|
|
118
|
-
meta[key]
|
|
235
|
+
meta = { ...meta, [key]: value };
|
|
236
|
+
}
|
|
237
|
+
if (meta.argv !== undefined)
|
|
238
|
+
meta = { ...meta, argvVerified: '1' };
|
|
239
|
+
const prior = ctx.tmux.listSessions().find((session) => session.name === name)?.meta;
|
|
240
|
+
if (meta.agent && prior?.agent && meta.agent !== prior.agent)
|
|
241
|
+
adoptLocked(ctx, name, meta.agent, meta.origin);
|
|
242
|
+
if (meta.conversation !== undefined && meta.conversation !== prior?.conversation) {
|
|
243
|
+
meta = { ...meta, recovery: '', recoveryAt: '', recoveryDetail: '', state: meta.state ?? '', note: meta.note ?? '', topic: meta.topic ?? '' };
|
|
244
|
+
}
|
|
245
|
+
if (meta.conversation) {
|
|
246
|
+
const agent = meta.agent ?? prior?.agent;
|
|
247
|
+
if (agent && agent !== 'shell') {
|
|
248
|
+
const producers = sessionProducers(ctx, name);
|
|
249
|
+
if (producers.length > 1 || (producers[0] && producers[0].agent !== agent))
|
|
250
|
+
throw new BerthError('Cannot bind a conversation to an incompatible producer.');
|
|
251
|
+
meta = { ...meta, profile: JSON.stringify(captureProfile(agent, ctx.env)), ...(producers[0] ? {
|
|
252
|
+
producerPane: producers[0].pane, producerLifetime: processLifetime(producers[0].pid)?.key,
|
|
253
|
+
} : {}) };
|
|
254
|
+
}
|
|
119
255
|
}
|
|
120
256
|
ctx.tmux.setMeta(name, meta);
|
|
121
257
|
// A state change shows on attached terminals whoever reports it (spec §6, §7).
|
|
@@ -124,7 +260,7 @@ export function stamp(ctx, name, values) {
|
|
|
124
260
|
presentState(ctx.tmux, name, meta.state, { note });
|
|
125
261
|
}
|
|
126
262
|
// What a restore needs changed: record it now, not at the next session event.
|
|
127
|
-
if (['agent', 'cwd', 'argv', 'conversation', 'origin'].some((k) => k in meta))
|
|
263
|
+
if (['agent', 'cwd', 'argv', 'conversation', 'origin', 'ownerWorkspace'].some((k) => k in meta))
|
|
128
264
|
snapshotQuietly(ctx);
|
|
129
265
|
}
|
|
130
266
|
/** Note that marks a waiting state raised by a terminal bell rather than a hook. */
|
|
@@ -132,8 +268,8 @@ export const BELL_NOTE = 'bell';
|
|
|
132
268
|
/**
|
|
133
269
|
* A terminal bell from a managed session (tmux alert-bell). Agents without
|
|
134
270
|
* Berth hooks get state `waiting`, so every agent can ask for attention; for
|
|
135
|
-
* agents
|
|
136
|
-
* the bell is ignored. Returns whether the state changed.
|
|
271
|
+
* agents with complete waiting hooks and no independent hook trust gate,
|
|
272
|
+
* the bell is ignored. Existing explicit waiting information is preserved. Returns whether the state changed.
|
|
137
273
|
*/
|
|
138
274
|
export function bellRang(ctx, name, env = process.env) {
|
|
139
275
|
const live = ctx.tmux.listSessions().find((s) => s.name === name);
|
|
@@ -141,15 +277,20 @@ export function bellRang(ctx, name, env = process.env) {
|
|
|
141
277
|
if (!agent)
|
|
142
278
|
return false;
|
|
143
279
|
const adapter = getAdapter(agent);
|
|
144
|
-
|
|
280
|
+
const profile = readProfile(agent, live?.meta.profile);
|
|
281
|
+
if (live?.meta.state === 'waiting' && live.meta.note !== BELL_NOTE)
|
|
282
|
+
return false;
|
|
283
|
+
if (!adapter?.requiresHookTrust && adapter?.events.waiting.length && profile && hooksInstalled(agent, profileEnvironment(agent, profile, env)))
|
|
145
284
|
return false;
|
|
146
285
|
stamp(ctx, name, { state: 'waiting', note: BELL_NOTE });
|
|
147
286
|
return true;
|
|
148
287
|
}
|
|
149
288
|
/** Seeing a session answers its bell: clear a bell-raised waiting state. */
|
|
150
289
|
export function clearBell(ctx, name) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
290
|
+
withLock(ctx.config.stateDir, () => {
|
|
291
|
+
const live = ctx.tmux.listSessions().find((s) => s.name === name);
|
|
292
|
+
if (live?.meta.state === 'waiting' && live.meta.note === BELL_NOTE)
|
|
293
|
+
stamp(ctx, name, { state: '', note: '' });
|
|
294
|
+
}, 3000);
|
|
154
295
|
}
|
|
155
296
|
//# sourceMappingURL=sessions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/registry/sessions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/registry/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type AgentProfile } from '../agents/profile.js';
|
|
1
2
|
import type { Context } from '../context.js';
|
|
2
3
|
import type { StoredSnapshot } from '../snapshot/store.js';
|
|
3
|
-
export type RestoreOutcome = '
|
|
4
|
+
export type RestoreOutcome = 'resume-requested' | 'launched' | 'skipped-live' | 'skipped-missing-cwd' | 'skipped-binding-conflict' | 'skipped-unbound' | 'skipped-missing-binary' | 'skipped-unsupported-resume' | 'failed' | 'skipped-name-conflict' | 'skipped-unknown-profile' | 'skipped-unverified-arguments';
|
|
4
5
|
export interface RestoreResult {
|
|
5
6
|
name: string;
|
|
6
7
|
outcome: RestoreOutcome;
|
|
@@ -8,10 +9,19 @@ export interface RestoreResult {
|
|
|
8
9
|
}
|
|
9
10
|
export interface RestoreOptions {
|
|
10
11
|
origin?: string;
|
|
12
|
+
ownerWorkspace?: string;
|
|
11
13
|
session?: string;
|
|
12
14
|
/** How long to wait for another restore to finish; editors pass a short one so they never freeze. */
|
|
13
15
|
lockTimeoutMs?: number;
|
|
14
16
|
}
|
|
15
|
-
/**
|
|
17
|
+
/** Explicit restore uses its chosen snapshot; ensure reads latest inside the lock. */
|
|
16
18
|
export declare function restoreFrom(ctx: Context, snapshot: StoredSnapshot | undefined, options?: RestoreOptions): RestoreResult[];
|
|
17
19
|
export declare function ensure(ctx: Context, options?: RestoreOptions): RestoreResult[];
|
|
20
|
+
/** Replace only an explicitly failed/unconfirmed attempt, keeping its exact target. */
|
|
21
|
+
export declare function retryRecovery(ctx: Context, name: string): RestoreResult;
|
|
22
|
+
/** Relocate one stopped recovery record without changing its conversation identity. */
|
|
23
|
+
export declare function relocateRecovery(ctx: Context, name: string, cwd: string): void;
|
|
24
|
+
/** Explicitly choose a stopped conversation's profile; never infer it from the host. */
|
|
25
|
+
export declare function setRecoveryProfile(ctx: Context, name: string, root?: string): AgentProfile;
|
|
26
|
+
/** Explicitly replace only the options an adapter can preserve on resume. */
|
|
27
|
+
export declare function setRecoveryOptions(ctx: Context, name: string, options: readonly string[]): void;
|