@xemahq/opencode-xema-plugin 0.3.0 → 0.4.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 +33 -40
- package/dist/.source-stamp.json +2 -2
- package/dist/context.d.ts +5 -14
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -13
- package/dist/context.js.map +1 -1
- package/dist/hooks/compaction-invariants.d.ts +8 -0
- package/dist/hooks/compaction-invariants.d.ts.map +1 -0
- package/dist/hooks/compaction-invariants.js +60 -0
- package/dist/hooks/compaction-invariants.js.map +1 -0
- package/dist/hooks/root-turn-completion.d.ts +14 -0
- package/dist/hooks/root-turn-completion.d.ts.map +1 -0
- package/dist/hooks/root-turn-completion.js +84 -0
- package/dist/hooks/root-turn-completion.js.map +1 -0
- package/dist/hooks/shell-env-hygiene.d.ts +6 -0
- package/dist/hooks/shell-env-hygiene.d.ts.map +1 -0
- package/dist/hooks/shell-env-hygiene.js +10 -0
- package/dist/hooks/shell-env-hygiene.js.map +1 -0
- package/dist/hooks/subagent-fanout-ceiling.d.ts +18 -17
- package/dist/hooks/subagent-fanout-ceiling.d.ts.map +1 -1
- package/dist/hooks/subagent-fanout-ceiling.js +106 -92
- package/dist/hooks/subagent-fanout-ceiling.js.map +1 -1
- package/dist/hooks/system-overlay.d.ts +6 -0
- package/dist/hooks/system-overlay.d.ts.map +1 -0
- package/dist/hooks/system-overlay.js +40 -0
- package/dist/hooks/system-overlay.js.map +1 -0
- package/dist/hooks/tool-surface-observation.d.ts +14 -0
- package/dist/hooks/tool-surface-observation.d.ts.map +1 -0
- package/dist/hooks/tool-surface-observation.js +30 -0
- package/dist/hooks/tool-surface-observation.js.map +1 -0
- package/dist/hooks/workspace-listing.js +3 -3
- package/dist/hooks/workspace-listing.js.map +1 -1
- package/dist/index.d.ts +9 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -70
- package/dist/index.js.map +1 -1
- package/dist/plugin-id.d.ts +2 -0
- package/dist/plugin-id.d.ts.map +1 -0
- package/dist/plugin-id.js +2 -0
- package/dist/plugin-id.js.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +86 -0
- package/dist/plugin.js.map +1 -0
- package/dist/runtime-events.d.ts +17 -0
- package/dist/runtime-events.d.ts.map +1 -0
- package/dist/runtime-events.js +39 -0
- package/dist/runtime-events.js.map +1 -0
- package/package.json +12 -16
- package/{plugin.mjs → plugin/xema-runtime-bridge/index.js} +407 -415
- package/plugin/xema-runtime-bridge/package.json +8 -0
- package/dist/hooks/session-idle-autocommit.d.ts +0 -11
- package/dist/hooks/session-idle-autocommit.d.ts.map +0 -1
- package/dist/hooks/session-idle-autocommit.js +0 -206
- package/dist/hooks/session-idle-autocommit.js.map +0 -1
- package/dist/hooks/system-prompt-overlay.d.ts +0 -3
- package/dist/hooks/system-prompt-overlay.d.ts.map +0 -1
- package/dist/hooks/system-prompt-overlay.js +0 -30
- package/dist/hooks/system-prompt-overlay.js.map +0 -1
- package/dist/opencode-types.d.ts +0 -49
- package/dist/opencode-types.d.ts.map +0 -1
- package/dist/opencode-types.js +0 -2
- package/dist/opencode-types.js.map +0 -1
- package/dist/plugin-entry.d.ts +0 -2
- package/dist/plugin-entry.d.ts.map +0 -1
- package/dist/plugin-entry.js +0 -2
- package/dist/plugin-entry.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { info, warn
|
|
2
|
-
export const
|
|
1
|
+
import { debug, info, warn } from '../logger.js';
|
|
2
|
+
export const SUBAGENT_TOOL_ID = 'subagent';
|
|
3
3
|
export const DEFAULT_SUBAGENT_FANOUT_LIMIT = 8;
|
|
4
4
|
export const DEFAULT_FANOUT_WAIT_TIMEOUT_MS = 10 * 60 * 1000;
|
|
5
|
-
export const
|
|
5
|
+
export const DEFAULT_ACTIVE_CHILD_TTL_MS = 30 * 60 * 1000;
|
|
6
|
+
export const DEFAULT_PENDING_SLOT_TTL_MS = 2 * 60 * 1000;
|
|
6
7
|
export const FANOUT_LIMIT_ENV = 'XEMA_SUBAGENT_FANOUT_LIMIT';
|
|
7
8
|
export function resolveSubagentFanoutLimit(env = process.env) {
|
|
8
9
|
const declared = env[FANOUT_LIMIT_ENV];
|
|
@@ -12,7 +13,7 @@ export function resolveSubagentFanoutLimit(env = process.env) {
|
|
|
12
13
|
const parsed = Number(declared.trim());
|
|
13
14
|
if (!Number.isInteger(parsed)) {
|
|
14
15
|
throw new Error(`${FANOUT_LIMIT_ENV}="${declared}" is not an integer. Expected a whole number of ` +
|
|
15
|
-
`concurrently
|
|
16
|
+
`concurrently running sub-agents between 1 and ${DEFAULT_SUBAGENT_FANOUT_LIMIT}.`);
|
|
16
17
|
}
|
|
17
18
|
if (parsed < 1) {
|
|
18
19
|
throw new Error(`${FANOUT_LIMIT_ENV}="${declared}" is below 1. A ceiling of 0 would park EVERY delegation ` +
|
|
@@ -30,15 +31,17 @@ export function resolveSubagentFanoutLimit(env = process.env) {
|
|
|
30
31
|
export function createSubagentFanoutCeiling(options) {
|
|
31
32
|
const limit = options.limit;
|
|
32
33
|
const waitTimeoutMs = options.waitTimeoutMs ?? DEFAULT_FANOUT_WAIT_TIMEOUT_MS;
|
|
33
|
-
const
|
|
34
|
+
const pendingSlotTtlMs = options.pendingSlotTtlMs ?? DEFAULT_PENDING_SLOT_TTL_MS;
|
|
35
|
+
const activeChildTtlMs = options.activeChildTtlMs ?? DEFAULT_ACTIVE_CHILD_TTL_MS;
|
|
34
36
|
const now = options.now ?? (() => Date.now());
|
|
35
|
-
const
|
|
37
|
+
const pending = [];
|
|
38
|
+
const active = new Map();
|
|
36
39
|
const waiters = [];
|
|
40
|
+
const armed = new Set();
|
|
37
41
|
let waitedCount = 0;
|
|
38
42
|
let timedOutCount = 0;
|
|
39
|
-
let
|
|
40
|
-
let
|
|
41
|
-
const armed = new Set();
|
|
43
|
+
let pendingTtlReclaimedCount = 0;
|
|
44
|
+
let activeTtlReclaimedCount = 0;
|
|
42
45
|
function arm(fn, ms, keepProcessAlive) {
|
|
43
46
|
const timer = setTimeout(() => {
|
|
44
47
|
armed.delete(timer);
|
|
@@ -55,132 +58,143 @@ export function createSubagentFanoutCeiling(options) {
|
|
|
55
58
|
clearTimeout(timer);
|
|
56
59
|
armed.delete(timer);
|
|
57
60
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
const occupied = () => pending.length + active.size;
|
|
62
|
+
function reserve(callId, parentSessionId) {
|
|
63
|
+
const slot = { callId, parentSessionId, since: now(), timer: undefined };
|
|
64
|
+
slot.timer = arm(() => {
|
|
65
|
+
const index = pending.indexOf(slot);
|
|
66
|
+
if (index === -1)
|
|
67
|
+
return;
|
|
68
|
+
pending.splice(index, 1);
|
|
69
|
+
pendingTtlReclaimedCount += 1;
|
|
70
|
+
warn(`fanout-ceiling: reserved slot for call=${callId} session=${parentSessionId} never ` +
|
|
71
|
+
`became a child session within ${pendingSlotTtlMs}ms — reclaiming (its ` +
|
|
72
|
+
`execute.after was lost; V2 does not guarantee it on abort).`);
|
|
73
|
+
drain();
|
|
74
|
+
}, pendingSlotTtlMs, false);
|
|
75
|
+
pending.push(slot);
|
|
76
|
+
}
|
|
77
|
+
function activate(childSessionId, parentSessionId) {
|
|
78
|
+
const timer = arm(() => {
|
|
79
|
+
if (!active.has(childSessionId))
|
|
61
80
|
return;
|
|
62
|
-
|
|
63
|
-
warn(`fanout-ceiling:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
held.set(callId, { sessionId, acquiredAt: now(), ttlTimer });
|
|
81
|
+
activeTtlReclaimedCount += 1;
|
|
82
|
+
warn(`fanout-ceiling: child session=${childSessionId} held a slot for ${activeChildTtlMs}ms ` +
|
|
83
|
+
`with no terminal event — force-releasing so the pool cannot shrink permanently.`);
|
|
84
|
+
releaseActive(childSessionId, 'active-ttl');
|
|
85
|
+
}, activeChildTtlMs, false);
|
|
86
|
+
active.set(childSessionId, { childSessionId, parentSessionId, since: now(), timer });
|
|
69
87
|
}
|
|
70
|
-
function
|
|
71
|
-
const
|
|
72
|
-
if (
|
|
88
|
+
function releaseActive(childSessionId, reason) {
|
|
89
|
+
const child = active.get(childSessionId);
|
|
90
|
+
if (child === undefined)
|
|
73
91
|
return;
|
|
74
|
-
disarm(
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
`(held ${now() - permit.acquiredAt}ms)`);
|
|
79
|
-
}
|
|
92
|
+
disarm(child.timer);
|
|
93
|
+
active.delete(childSessionId);
|
|
94
|
+
debug(`fanout-ceiling: released child=${childSessionId} via ${reason} ` +
|
|
95
|
+
`(held ${now() - child.since}ms, occupied=${occupied()}/${limit})`);
|
|
80
96
|
drain();
|
|
81
97
|
}
|
|
82
98
|
function drain() {
|
|
83
|
-
while (waiters.length > 0 &&
|
|
99
|
+
while (waiters.length > 0 && occupied() < limit) {
|
|
84
100
|
const next = waiters.shift();
|
|
85
101
|
if (next === undefined)
|
|
86
102
|
return;
|
|
87
103
|
disarm(next.timer);
|
|
88
|
-
const waitedMs = now() - next.since;
|
|
89
104
|
waitedCount += 1;
|
|
90
|
-
|
|
91
|
-
info(`fanout-ceiling: admitted call=${next.callId} session=${next.
|
|
92
|
-
|
|
105
|
+
reserve(next.callId, next.parentSessionId);
|
|
106
|
+
info(`fanout-ceiling: admitted call=${next.callId} session=${next.parentSessionId} after ` +
|
|
107
|
+
`waiting ${now() - next.since}ms (limit=${limit}, occupied=${occupied()}, ` +
|
|
108
|
+
`still waiting=${waiters.length})`);
|
|
93
109
|
next.grant();
|
|
94
110
|
}
|
|
95
111
|
}
|
|
96
|
-
async function
|
|
97
|
-
if (input.tool !==
|
|
112
|
+
async function beforeToolCall(input) {
|
|
113
|
+
if (input.tool !== SUBAGENT_TOOL_ID)
|
|
98
114
|
return;
|
|
99
|
-
const {
|
|
100
|
-
if (
|
|
101
|
-
|
|
102
|
-
debug(`fanout-ceiling: admitted call=${callId} immediately ` +
|
|
103
|
-
`(in-flight=${held.size}/${limit})`);
|
|
115
|
+
const { id: callId, sessionID: parentSessionId } = input;
|
|
116
|
+
if (occupied() < limit) {
|
|
117
|
+
reserve(callId, parentSessionId);
|
|
104
118
|
return;
|
|
105
119
|
}
|
|
106
120
|
const since = now();
|
|
107
|
-
warn(`fanout-ceiling: sub-agent fan-out at ceiling — call=${callId} session=${
|
|
108
|
-
`WAITING (limit=${limit},
|
|
109
|
-
`
|
|
121
|
+
warn(`fanout-ceiling: sub-agent fan-out at ceiling — call=${callId} session=${parentSessionId} ` +
|
|
122
|
+
`is WAITING (limit=${limit}, pending=${pending.length}, active=${active.size}, ` +
|
|
123
|
+
`already waiting=${waiters.length}). Backpressure, not a refusal.`);
|
|
110
124
|
await new Promise((resolve) => {
|
|
111
|
-
const waiter = {
|
|
112
|
-
callId,
|
|
113
|
-
sessionId,
|
|
114
|
-
since,
|
|
115
|
-
grant: resolve,
|
|
116
|
-
timer: undefined,
|
|
117
|
-
};
|
|
125
|
+
const waiter = { callId, parentSessionId, since, grant: resolve, timer: undefined };
|
|
118
126
|
waiter.timer = arm(() => {
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
127
|
+
const index = waiters.indexOf(waiter);
|
|
128
|
+
if (index === -1)
|
|
121
129
|
return;
|
|
122
|
-
waiters.splice(
|
|
130
|
+
waiters.splice(index, 1);
|
|
123
131
|
timedOutCount += 1;
|
|
124
|
-
warn(`fanout-ceiling: call=${callId} session=${
|
|
125
|
-
`
|
|
126
|
-
`
|
|
127
|
-
|
|
132
|
+
warn(`fanout-ceiling: call=${callId} session=${parentSessionId} waited ${waitTimeoutMs}ms ` +
|
|
133
|
+
`and is ADMITTED OVER the ceiling (limit=${limit}, occupied=${occupied()}). ` +
|
|
134
|
+
`Suspect a leaked slot or a stuck sub-agent.`);
|
|
135
|
+
reserve(callId, parentSessionId);
|
|
128
136
|
resolve();
|
|
129
137
|
}, waitTimeoutMs, true);
|
|
130
138
|
waiters.push(waiter);
|
|
131
139
|
});
|
|
132
140
|
}
|
|
133
|
-
function
|
|
134
|
-
if (input.tool !==
|
|
141
|
+
function afterToolCall(input) {
|
|
142
|
+
if (input.tool !== SUBAGENT_TOOL_ID)
|
|
143
|
+
return;
|
|
144
|
+
const index = pending.findIndex((slot) => slot.callId === input.id);
|
|
145
|
+
if (index === -1)
|
|
135
146
|
return;
|
|
136
|
-
|
|
147
|
+
const [slot] = pending.splice(index, 1);
|
|
148
|
+
disarm(slot?.timer);
|
|
149
|
+
debug(`fanout-ceiling: call=${input.id} ended before any child existed — slot released`);
|
|
150
|
+
drain();
|
|
137
151
|
}
|
|
138
|
-
function
|
|
139
|
-
|
|
140
|
-
for (const [callId, permit] of held) {
|
|
141
|
-
if (permit.sessionId === sessionId)
|
|
142
|
-
stale.push(callId);
|
|
143
|
-
}
|
|
144
|
-
if (stale.length === 0)
|
|
152
|
+
function onSessionCreated(sessionId, parentId) {
|
|
153
|
+
if (parentId === undefined || active.has(sessionId))
|
|
145
154
|
return;
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
`
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
155
|
+
const index = pending.findIndex((slot) => slot.parentSessionId === parentId);
|
|
156
|
+
if (index === -1) {
|
|
157
|
+
debug(`fanout-ceiling: unreserved child=${sessionId} of parent=${parentId} — counted`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const [slot] = pending.splice(index, 1);
|
|
161
|
+
disarm(slot?.timer);
|
|
162
|
+
}
|
|
163
|
+
activate(sessionId, parentId);
|
|
164
|
+
}
|
|
165
|
+
function onSessionTerminal(sessionId) {
|
|
166
|
+
releaseActive(sessionId, 'terminal');
|
|
152
167
|
}
|
|
153
168
|
function dispose() {
|
|
154
|
-
const parked = waiters.length;
|
|
155
|
-
const outstanding = held.size;
|
|
156
169
|
while (waiters.length > 0) {
|
|
157
|
-
const
|
|
158
|
-
if (
|
|
170
|
+
const waiter = waiters.shift();
|
|
171
|
+
if (waiter === undefined)
|
|
159
172
|
break;
|
|
160
|
-
disarm(
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
for (const permit of held.values())
|
|
164
|
-
disarm(permit.ttlTimer);
|
|
165
|
-
held.clear();
|
|
166
|
-
if (parked > 0 || outstanding > 0) {
|
|
167
|
-
info(`fanout-ceiling: disposed — released ${parked} parked task(s) and disarmed ` +
|
|
168
|
-
`${outstanding} permit timer(s).`);
|
|
173
|
+
disarm(waiter.timer);
|
|
174
|
+
waiter.grant();
|
|
169
175
|
}
|
|
176
|
+
for (const slot of pending)
|
|
177
|
+
disarm(slot.timer);
|
|
178
|
+
pending.length = 0;
|
|
179
|
+
for (const child of active.values())
|
|
180
|
+
disarm(child.timer);
|
|
181
|
+
active.clear();
|
|
170
182
|
}
|
|
171
183
|
return {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
184
|
+
beforeToolCall,
|
|
185
|
+
afterToolCall,
|
|
186
|
+
onSessionCreated,
|
|
187
|
+
onSessionTerminal,
|
|
175
188
|
dispose,
|
|
176
189
|
stats: () => ({
|
|
177
190
|
limit,
|
|
178
|
-
|
|
191
|
+
pending: pending.length,
|
|
192
|
+
active: active.size,
|
|
179
193
|
waiting: waiters.length,
|
|
180
194
|
waitedCount,
|
|
181
195
|
timedOutCount,
|
|
182
|
-
|
|
183
|
-
|
|
196
|
+
pendingTtlReclaimedCount,
|
|
197
|
+
activeTtlReclaimedCount,
|
|
184
198
|
armedTimers: armed.size,
|
|
185
199
|
}),
|
|
186
200
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-fanout-ceiling.js","sourceRoot":"","sources":["../../src/hooks/subagent-fanout-ceiling.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subagent-fanout-ceiling.js","sourceRoot":"","sources":["../../src/hooks/subagent-fanout-ceiling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SessionContext } from '@opencode/plugin/promise/session';
|
|
2
|
+
export type OverlaySystemPart = SessionContext['system'][number];
|
|
3
|
+
export type OverlayContextInput = Pick<SessionContext, 'sessionID' | 'system'>;
|
|
4
|
+
export declare const XEMA_OVERLAY_METADATA_KEY = "xema.system-overlay";
|
|
5
|
+
export declare function buildSystemOverlayHook(directory: string): (input: OverlayContextInput) => void;
|
|
6
|
+
//# sourceMappingURL=system-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-overlay.d.ts","sourceRoot":"","sources":["../../src/hooks/system-overlay.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAQvE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAGjE,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC;AAM/E,eAAO,MAAM,yBAAyB,wBAAwB,CAAC;AAoC/D,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,IAC9C,OAAO,mBAAmB,KAAG,IAAI,CAmC1C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { readInvocationContextForHook } from '../context.js';
|
|
4
|
+
import { XemaSystemOverlayMissingError } from '../errors.js';
|
|
5
|
+
import { debug } from '../logger.js';
|
|
6
|
+
import { renderWorkspaceListing } from './workspace-listing.js';
|
|
7
|
+
export const XEMA_OVERLAY_METADATA_KEY = 'xema.system-overlay';
|
|
8
|
+
export function buildSystemOverlayHook(directory) {
|
|
9
|
+
return (input) => {
|
|
10
|
+
const ctx = readInvocationContextForHook(directory, 'session.context');
|
|
11
|
+
if (!ctx) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const overlayPath = join(directory, '.xema', 'system-overlay.md');
|
|
15
|
+
if (!existsSync(overlayPath)) {
|
|
16
|
+
throw new XemaSystemOverlayMissingError(`Xema session ${ctx.invocation.runId ?? 'unknown'} (role=${ctx.invocation.role}, ` +
|
|
17
|
+
`sessionId=${ctx.invocation.sessionId ?? '-'}) is missing /workspace/.xema/system-overlay.md. ` +
|
|
18
|
+
`The platform contract is undefined; refusing the model request. ` +
|
|
19
|
+
`Verify the agent-run-context render flow emitted the system-overlay slot.`);
|
|
20
|
+
}
|
|
21
|
+
const bytes = readFileSync(overlayPath, 'utf8');
|
|
22
|
+
const listing = renderWorkspaceListing(directory);
|
|
23
|
+
const part = {
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: `${bytes}\n\n${listing}`,
|
|
26
|
+
metadata: { [XEMA_OVERLAY_METADATA_KEY]: true },
|
|
27
|
+
};
|
|
28
|
+
const existing = input.system.findIndex((entry) => entry.metadata?.[XEMA_OVERLAY_METADATA_KEY] === true);
|
|
29
|
+
if (existing === -1) {
|
|
30
|
+
input.system.push(part);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
input.system[existing] = part;
|
|
34
|
+
}
|
|
35
|
+
debug(`session.context: ${existing === -1 ? 'appended' : 'replaced'} overlay part ` +
|
|
36
|
+
`(${bytes.length} overlay + ${listing.length} listing bytes, role=${ctx.invocation.role}, ` +
|
|
37
|
+
`opencodeSession=${input.sessionID})`);
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=system-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-overlay.js","sourceRoot":"","sources":["../../src/hooks/system-overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAYhE,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAoC/D,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,CAAC,KAA0B,EAAQ,EAAE;QAC1C,MAAM,GAAG,GAAG,4BAA4B,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,6BAA6B,CACrC,gBAAgB,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,SAAS,UAAU,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI;gBAChF,aAAa,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,GAAG,mDAAmD;gBAC/F,kEAAkE;gBAClE,2EAA2E,CAC9E,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,IAAI,GAAsB;YAC9B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG,KAAK,OAAO,OAAO,EAAE;YAC9B,QAAQ,EAAE,EAAE,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE;SAChD,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CACrC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAChE,CAAC;QACF,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAChC,CAAC;QACD,KAAK,CACH,oBAAoB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,gBAAgB;YAC3E,IAAI,KAAK,CAAC,MAAM,cAAc,OAAO,CAAC,MAAM,wBAAwB,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI;YAC3F,mBAAmB,KAAK,CAAC,SAAS,GAAG,CACxC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const TOOL_SURFACE_FILE = "opencode-tool-surface.json";
|
|
2
|
+
export declare const DEFAULT_RUNTIME_STATE_DIR = "/run/xema/runtime";
|
|
3
|
+
export declare const RUNTIME_STATE_DIR_ENV = "XEMA_RUNTIME_STATE_DIR";
|
|
4
|
+
export interface ToolSurfaceDocument {
|
|
5
|
+
readonly observedAt: number;
|
|
6
|
+
readonly tools: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveRuntimeStateDir(env?: Readonly<Record<string, string | undefined>>): string;
|
|
9
|
+
export declare function observeToolSurface(options: {
|
|
10
|
+
readonly listToolIds: () => Promise<readonly string[]>;
|
|
11
|
+
readonly stateDir: string;
|
|
12
|
+
readonly now?: () => number;
|
|
13
|
+
}): Promise<ToolSurfaceDocument | undefined>;
|
|
14
|
+
//# sourceMappingURL=tool-surface-observation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-surface-observation.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-surface-observation.ts"],"names":[],"mappings":"AAoBA,eAAO,MAAM,iBAAiB,+BAA+B,CAAC;AAC9D,eAAO,MAAM,yBAAyB,sBAAsB,CAAC;AAC7D,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAElC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAe,GAC9D,MAAM,CAGR;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAmB3C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { mkdirSync, renameSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { debug, warn } from '../logger.js';
|
|
4
|
+
export const TOOL_SURFACE_FILE = 'opencode-tool-surface.json';
|
|
5
|
+
export const DEFAULT_RUNTIME_STATE_DIR = '/run/xema/runtime';
|
|
6
|
+
export const RUNTIME_STATE_DIR_ENV = 'XEMA_RUNTIME_STATE_DIR';
|
|
7
|
+
export function resolveRuntimeStateDir(env = process.env) {
|
|
8
|
+
const declared = env[RUNTIME_STATE_DIR_ENV];
|
|
9
|
+
return declared !== undefined && declared.trim() !== '' ? declared : DEFAULT_RUNTIME_STATE_DIR;
|
|
10
|
+
}
|
|
11
|
+
export async function observeToolSurface(options) {
|
|
12
|
+
try {
|
|
13
|
+
const observedAt = (options.now ?? Date.now)();
|
|
14
|
+
const ids = [...(await options.listToolIds())].sort();
|
|
15
|
+
const doc = { observedAt, tools: ids };
|
|
16
|
+
mkdirSync(options.stateDir, { recursive: true });
|
|
17
|
+
const target = join(options.stateDir, TOOL_SURFACE_FILE);
|
|
18
|
+
const temp = `${target}.${process.pid}.tmp`;
|
|
19
|
+
writeFileSync(temp, `${JSON.stringify(doc)}\n`, 'utf8');
|
|
20
|
+
renameSync(temp, target);
|
|
21
|
+
debug(`tool-surface: observed ${ids.length} tool(s) → ${target}`);
|
|
22
|
+
return doc;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
warn(`tool-surface: observation failed (observation only — no authority is affected): ` +
|
|
26
|
+
(err instanceof Error ? err.message : String(err)));
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=tool-surface-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-surface-observation.js","sourceRoot":"","sources":["../../src/hooks/tool-surface-observation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAiB3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAC9D,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAC7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAQ9D,MAAM,UAAU,sBAAsB,CACpC,MAAoD,OAAO,CAAC,GAAG;IAE/D,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC5C,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC;AACjG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAIxC;IACC,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,GAAG,GAAwB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC5D,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;QAC5C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxD,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzB,KAAK,CAAC,0BAA0B,GAAG,CAAC,MAAM,cAAc,MAAM,EAAE,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CACF,kFAAkF;YAChF,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACrD,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -19,7 +19,7 @@ export function renderWorkspaceListing(workspaceRoot) {
|
|
|
19
19
|
const lines = [
|
|
20
20
|
'## Current workspace contents (depth 1)',
|
|
21
21
|
'',
|
|
22
|
-
'This is a snapshot of `/workspace/` taken at the start of this turn. Use it to orient before reaching for `glob
|
|
22
|
+
'This is a snapshot of `/workspace/` taken at the start of this turn. Use it to orient before reaching for `glob` or `read`. Hidden: platform-private slots (`.xema/`, `.opencode/`).',
|
|
23
23
|
'',
|
|
24
24
|
];
|
|
25
25
|
let topLevel;
|
|
@@ -48,7 +48,7 @@ function renderTopLevelEntry(workspaceRoot, entry) {
|
|
|
48
48
|
}
|
|
49
49
|
if (SKIP_CHILD_EXPANSION_TOP_LEVEL.has(entry.name)) {
|
|
50
50
|
return [
|
|
51
|
-
`- \`/workspace/${relPath}/\` _(children omitted: known implicit/noisy directory — use \`glob
|
|
51
|
+
`- \`/workspace/${relPath}/\` _(children omitted: known implicit/noisy directory — use \`glob\` if needed)_`,
|
|
52
52
|
];
|
|
53
53
|
}
|
|
54
54
|
let children;
|
|
@@ -68,7 +68,7 @@ function renderTopLevelEntry(workspaceRoot, entry) {
|
|
|
68
68
|
});
|
|
69
69
|
const overflow = children.length - shown.length;
|
|
70
70
|
const overflowLine = overflow > 0
|
|
71
|
-
? [` - _(${overflow} more entr${overflow === 1 ? 'y' : 'ies'} — use \`glob
|
|
71
|
+
? [` - _(${overflow} more entr${overflow === 1 ? 'y' : 'ies'} — use \`glob\` to enumerate)_`]
|
|
72
72
|
: [];
|
|
73
73
|
return [`- \`/workspace/${relPath}/\``, ...childLines, ...overflowLine];
|
|
74
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-listing.js","sourceRoot":"","sources":["../../src/hooks/workspace-listing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAe,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAiCjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAOtC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAS9E,MAAM,8BAA8B,GAAwB,IAAI,GAAG,CAAC;IAClE,MAAM;IACN,cAAc;IACd,OAAO;IACP,MAAM;IACN,aAAa;IACb,aAAa;IACb,eAAe;IACf,aAAa;IACb,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAC;AAOH,MAAM,UAAU,sBAAsB,CAAC,aAAqB;IAC1D,MAAM,KAAK,GAAa;QACtB,yCAAyC;QACzC,EAAE;QACF
|
|
1
|
+
{"version":3,"file":"workspace-listing.js","sourceRoot":"","sources":["../../src/hooks/workspace-listing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export {
|
|
1
|
+
export { default } from './plugin.js';
|
|
2
|
+
export { XEMA_RUNTIME_BRIDGE_PLUGIN_ID } from './plugin-id.js';
|
|
3
|
+
export { createSubagentFanoutCeiling, resolveSubagentFanoutLimit, DEFAULT_SUBAGENT_FANOUT_LIMIT, DEFAULT_FANOUT_WAIT_TIMEOUT_MS, DEFAULT_ACTIVE_CHILD_TTL_MS, DEFAULT_PENDING_SLOT_TTL_MS, FANOUT_LIMIT_ENV, SUBAGENT_TOOL_ID, type SubagentFanoutCeiling, type FanoutCeilingOptions, type FanoutCeilingStats, } from './hooks/subagent-fanout-ceiling.js';
|
|
4
|
+
export { buildSystemOverlayHook, XEMA_OVERLAY_METADATA_KEY, } from './hooks/system-overlay.js';
|
|
5
|
+
export { buildCompactionInvariantsHook, renderCompactionInvariants, MAX_COMPACTION_INVARIANTS_CHARS, XEMA_COMPACTION_METADATA_KEY, } from './hooks/compaction-invariants.js';
|
|
6
|
+
export { createRootTurnCompletion, TURN_COMPLETED_PATH, WORKSPACE_PROXY_URL_ENV, SERVER_PASSWORD_ENV, } from './hooks/root-turn-completion.js';
|
|
7
|
+
export { observeToolSurface, resolveRuntimeStateDir, TOOL_SURFACE_FILE, DEFAULT_RUNTIME_STATE_DIR, RUNTIME_STATE_DIR_ENV, type ToolSurfaceDocument, } from './hooks/tool-surface-observation.js';
|
|
8
|
+
export { scrubShellEnv, SERVER_PASSWORD_ENV_KEYS } from './hooks/shell-env-hygiene.js';
|
|
9
|
+
export { parseRuntimeSessionEvent, SessionExecutionOutcome } from './runtime-events.js';
|
|
6
10
|
export { readInvocationContext } from './context.js';
|
|
7
11
|
export type { InvocationContext, InvocationRole } from './context.js';
|
|
8
12
|
export * from './errors.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,mBAAmB,GACzB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,73 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
const cached = bootCache.get(directory);
|
|
11
|
-
if (cached !== undefined) {
|
|
12
|
-
return cached;
|
|
13
|
-
}
|
|
14
|
-
const booting = doBoot(directory);
|
|
15
|
-
bootCache.set(directory, booting);
|
|
16
|
-
try {
|
|
17
|
-
return await booting;
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
bootCache.delete(directory);
|
|
21
|
-
throw err;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
async function doBoot(directory) {
|
|
25
|
-
const contextPath = join(directory, 'context.json');
|
|
26
|
-
const contextPresentAtBoot = existsSync(contextPath);
|
|
27
|
-
info(`boot: directory=${directory} tools=0 (hooks only) ` +
|
|
28
|
-
`context.json=${contextPresentAtBoot ? 'present' : 'absent'} ` +
|
|
29
|
-
`debug=${isDebug() ? 'on' : 'off'}`);
|
|
30
|
-
const fanoutLimit = resolveSubagentFanoutLimit();
|
|
31
|
-
const fanout = createSubagentFanoutCeiling({ limit: fanoutLimit });
|
|
32
|
-
const autocommit = buildSessionIdleAutocommit(directory);
|
|
33
|
-
info(`boot: subagent fan-out ceiling active (limit=${fanoutLimit} concurrent task calls ` +
|
|
34
|
-
`per worker; tighten with XEMA_SUBAGENT_FANOUT_LIMIT)`);
|
|
35
|
-
const hooks = {
|
|
36
|
-
'experimental.chat.system.transform': buildSystemPromptOverlay(directory),
|
|
37
|
-
'tool.execute.before': async (input) => {
|
|
38
|
-
await fanout.before(input);
|
|
39
|
-
},
|
|
40
|
-
'tool.execute.after': (input) => {
|
|
41
|
-
fanout.after(input);
|
|
42
|
-
},
|
|
43
|
-
dispose: async () => {
|
|
44
|
-
fanout.dispose();
|
|
45
|
-
},
|
|
46
|
-
event: async (input) => {
|
|
47
|
-
const evt = input.event;
|
|
48
|
-
if (evt.type === 'session.idle') {
|
|
49
|
-
const sessionId = evt.properties
|
|
50
|
-
?.sessionID;
|
|
51
|
-
if (sessionId) {
|
|
52
|
-
try {
|
|
53
|
-
fanout.onSessionIdle(sessionId);
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
57
|
-
warn(`fanout-ceiling: session-idle sweep failed: ${message}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
await autocommit(input);
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
return hooks;
|
|
65
|
-
}
|
|
66
|
-
export function __resetBootCacheForTests() {
|
|
67
|
-
bootCache.clear();
|
|
68
|
-
}
|
|
69
|
-
export default XemaPlugin;
|
|
70
|
-
export { createSubagentFanoutCeiling, resolveSubagentFanoutLimit, DEFAULT_SUBAGENT_FANOUT_LIMIT, DEFAULT_FANOUT_WAIT_TIMEOUT_MS, DEFAULT_PERMIT_TTL_MS, FANOUT_LIMIT_ENV, TASK_TOOL_ID, } from './hooks/subagent-fanout-ceiling.js';
|
|
1
|
+
export { default } from './plugin.js';
|
|
2
|
+
export { XEMA_RUNTIME_BRIDGE_PLUGIN_ID } from './plugin-id.js';
|
|
3
|
+
export { createSubagentFanoutCeiling, resolveSubagentFanoutLimit, DEFAULT_SUBAGENT_FANOUT_LIMIT, DEFAULT_FANOUT_WAIT_TIMEOUT_MS, DEFAULT_ACTIVE_CHILD_TTL_MS, DEFAULT_PENDING_SLOT_TTL_MS, FANOUT_LIMIT_ENV, SUBAGENT_TOOL_ID, } from './hooks/subagent-fanout-ceiling.js';
|
|
4
|
+
export { buildSystemOverlayHook, XEMA_OVERLAY_METADATA_KEY, } from './hooks/system-overlay.js';
|
|
5
|
+
export { buildCompactionInvariantsHook, renderCompactionInvariants, MAX_COMPACTION_INVARIANTS_CHARS, XEMA_COMPACTION_METADATA_KEY, } from './hooks/compaction-invariants.js';
|
|
6
|
+
export { createRootTurnCompletion, TURN_COMPLETED_PATH, WORKSPACE_PROXY_URL_ENV, SERVER_PASSWORD_ENV, } from './hooks/root-turn-completion.js';
|
|
7
|
+
export { observeToolSurface, resolveRuntimeStateDir, TOOL_SURFACE_FILE, DEFAULT_RUNTIME_STATE_DIR, RUNTIME_STATE_DIR_ENV, } from './hooks/tool-surface-observation.js';
|
|
8
|
+
export { scrubShellEnv, SERVER_PASSWORD_ENV_KEYS } from './hooks/shell-env-hygiene.js';
|
|
9
|
+
export { parseRuntimeSessionEvent, SessionExecutionOutcome } from './runtime-events.js';
|
|
71
10
|
export { readInvocationContext } from './context.js';
|
|
72
11
|
export * from './errors.js';
|
|
73
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,GAIjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-id.d.ts","sourceRoot":"","sources":["../src/plugin-id.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,wBAAwB,CAAC"}
|