@felan-ai/ext-codex 0.4.0 → 0.5.1
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/NOTICE +6 -8
- package/README.md +9 -67
- package/dist/index.d.ts +1 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -21
- package/dist/index.js.map +1 -1
- package/dist/model-policy.d.ts +0 -1
- package/dist/model-policy.d.ts.map +1 -1
- package/dist/model-policy.js +0 -3
- package/dist/model-policy.js.map +1 -1
- package/dist/tools.d.ts +2 -4
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +4 -171
- package/dist/tools.js.map +1 -1
- package/package.json +3 -3
- package/dist/exec-session-manager.d.ts +0 -35
- package/dist/exec-session-manager.d.ts.map +0 -1
- package/dist/exec-session-manager.js +0 -465
- package/dist/exec-session-manager.js.map +0 -1
- package/dist/prompt.d.ts +0 -3
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js +0 -60
- package/dist/prompt.js.map +0 -1
package/NOTICE
CHANGED
|
@@ -5,8 +5,7 @@ Includes selected code and behavior adapted from
|
|
|
5
5
|
62d1501ac0c6acb39c4b4d225a9e9056a7ba3b91,
|
|
6
6
|
https://github.com/IgorWarzocha/howaboua-pi-stuff/tree/62d1501ac0c6acb39c4b4d225a9e9056a7ba3b91/packages/pi-codex-conversion.
|
|
7
7
|
|
|
8
|
-
Additional patch replacement
|
|
9
|
-
preservation behavior is adapted from
|
|
8
|
+
Additional patch replacement behavior is adapted from
|
|
10
9
|
@howaboua/pi-codex-conversion 3.0.15 at npm gitHead
|
|
11
10
|
b4b99630cda3c066749af0fb3ac9b8184b2a4c7d,
|
|
12
11
|
https://github.com/IgorWarzocha/howaboua-pi-stuff/tree/b4b99630cda3c066749af0fb3ac9b8184b2a4c7d/packages/pi-codex-conversion.
|
|
@@ -19,12 +18,11 @@ https://github.com/IgorWarzocha/howaboua-pi-stuff/tree/f16fee563f71849cc2b9a94be
|
|
|
19
18
|
Copyright (c) 2026 Umberto B.
|
|
20
19
|
Licensed under the MIT License included in this package.
|
|
21
20
|
|
|
22
|
-
Adapted portions include structured tool schemas and output conventions,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
and
|
|
26
|
-
|
|
27
|
-
reuse and cached continuation.
|
|
21
|
+
Adapted portions include structured tool schemas and output conventions, patch parsing and matching,
|
|
22
|
+
model activation policy, OpenAI request options, cached WebSocket transport
|
|
23
|
+
selection, and local TUI tool labels. Felan applies patches through AgentRuntime
|
|
24
|
+
and uses Pi 0.85.1's native OpenAI Codex transport for connection reuse and
|
|
25
|
+
cached continuation.
|
|
28
26
|
|
|
29
27
|
This package uses @earendil-works/pi-tui 0.85.1 from
|
|
30
28
|
https://github.com/earendil-works/pi, licensed under the MIT License.
|
package/README.md
CHANGED
|
@@ -4,66 +4,11 @@ First-party Felan support for the compact structured tool surface used by GPT
|
|
|
4
4
|
coding models. It activates only when the selected model ID is GPT-family and
|
|
5
5
|
the provider is exactly `openai` or `openai-codex`.
|
|
6
6
|
|
|
7
|
-
Active mode
|
|
8
|
-
`
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
After each tool-mode synchronization, the extension publishes whether Codex
|
|
13
|
-
replacement is active. MarkItDown uses that lifecycle signal to expose its
|
|
14
|
-
`read_document` fallback only while ordinary `read` is replaced; non-Codex
|
|
15
|
-
models therefore see only the ordinary reader.
|
|
16
|
-
Runtimes without persistent-process support keep Felan's ordinary coding tools.
|
|
17
|
-
Because Pi normally exposes skill metadata only while `read` is active, Codex
|
|
18
|
-
mode restores that metadata from Pi's structured prompt options. Matching
|
|
19
|
-
skills remain progressively disclosed: the model opens the selected `SKILL.md`
|
|
20
|
-
through `exec_command` and loads referenced files only as needed.
|
|
21
|
-
The local TUI presents Codex tool calls with friendly action labels while
|
|
22
|
-
headless modes continue to expose the stable tool names and raw results.
|
|
23
|
-
|
|
24
|
-
Optional settings live under `extensionConfig.codex` in
|
|
25
|
-
`$FELAN_AGENT_DIR/settings.json`:
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"fast": false,
|
|
30
|
-
"verbosity": "low",
|
|
31
|
-
"forceCachedWebSockets": true,
|
|
32
|
-
"postAgentRunCompaction": true
|
|
33
|
-
}
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
`fast` and `verbosity` modify eligible OpenAI Responses requests through a
|
|
37
|
-
session-scoped stream wrapper and the provider-request event. For the OpenAI
|
|
38
|
-
Codex provider, `forceCachedWebSockets` upgrades an explicit `websocket`
|
|
39
|
-
preference to Pi's native `websocket-cached` transport. Explicit `sse` and
|
|
40
|
-
`auto` remain unchanged. Pi owns connection reuse, SSE fallback, cached
|
|
41
|
-
continuation, and session cleanup. The extension does not register or replace
|
|
42
|
-
providers.
|
|
43
|
-
|
|
44
|
-
`view_image` is active only when the selected model declares image input. Raw
|
|
45
|
-
image reads are limited to 20 MiB, then Pi decodes and resizes supported images
|
|
46
|
-
to at most 2000×2000 with a base64 payload below 4 MiB. Malformed,
|
|
47
|
-
unsupported, and unresizable images are rejected.
|
|
48
|
-
|
|
49
|
-
`tty: true` allocates a real operating-system PTY through the runtime terminal
|
|
50
|
-
capability. `write_stdin` sends terminal input; for non-TTY sessions, the exact
|
|
51
|
-
Ctrl-C byte interrupts the process group and other input is rejected. Process
|
|
52
|
-
output is decoded incrementally and terminal control sequences are removed
|
|
53
|
-
before tool text is returned to the model. Each `exec_command` or `write_stdin`
|
|
54
|
-
result defaults to a 10000-token output budget, clamps requested budgets above
|
|
55
|
-
25000 tokens, shortens individual lines over 2000 characters with an explicit
|
|
56
|
-
`…[line truncated]` marker, and keeps a head-and-tail preview marked
|
|
57
|
-
`[... output truncated ...]` when the total output still exceeds the budget.
|
|
58
|
-
`Original token count` reports the untruncated size.
|
|
59
|
-
|
|
60
|
-
Initial commands wait 250-30000 ms and default to 10000 ms; Windows uses a
|
|
61
|
-
10000 ms minimum. Non-empty `write_stdin` calls wait 250-30000 ms and default
|
|
62
|
-
to 250 ms; empty polls wait 5000-300000 ms and default to 5000 ms.
|
|
63
|
-
Interactions targeting one session are serialized. Cancelling a tool wait
|
|
64
|
-
leaves its process available for a later `write_stdin` call, while session
|
|
65
|
-
shutdown terminates all remaining processes. Sessions are in-memory and do
|
|
66
|
-
not survive application restart.
|
|
7
|
+
Active mode keeps ordinary `read`, `bash`, and all unrelated tools, replacing only
|
|
8
|
+
`edit` and `write` with `apply_patch`. Switching to another model restores the
|
|
9
|
+
ordinary editing tools. File operations use the current `AgentRuntime`.
|
|
10
|
+
The local TUI presents patch calls with friendly action labels while headless
|
|
11
|
+
modes continue to expose the stable tool name and raw results.
|
|
67
12
|
|
|
68
13
|
`postAgentRunCompaction` is enabled by default. It makes eligible GPT runs defer
|
|
69
14
|
Pi's automatic threshold compaction until the current agent run settles, which
|
|
@@ -98,15 +43,12 @@ See [NOTICE](NOTICE) for upstream attribution.
|
|
|
98
43
|
## Package boundary and requirements
|
|
99
44
|
|
|
100
45
|
Agent Core owns the runtime contract and Pi owns provider transport. This
|
|
101
|
-
package owns provider/model eligibility, structured
|
|
102
|
-
controls
|
|
103
|
-
|
|
104
|
-
active `AgentRuntime`.
|
|
46
|
+
package owns provider/model eligibility, structured patch replacement, and
|
|
47
|
+
request controls; it does not register or replace a provider. File operations
|
|
48
|
+
go through the active `AgentRuntime`.
|
|
105
49
|
|
|
106
50
|
The package requires a compatible `@felan-ai/agent-core` peer, TypeBox, and
|
|
107
|
-
Pi-TUI.
|
|
108
|
-
ordinary coding tools rather than registering unusable Codex controls. Host
|
|
109
|
-
mode remains current-user access and is not a sandbox.
|
|
51
|
+
Pi-TUI. Host mode remains current-user access and is not a sandbox.
|
|
110
52
|
|
|
111
53
|
## Related documentation
|
|
112
54
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { type FelanExtension } from '@felan-ai/agent-core';
|
|
2
|
-
export declare const CODEX_TOOL_MODE_EVENT = "felan:codex:tool-mode:v1";
|
|
3
|
-
export interface CodexToolModeEvent {
|
|
4
|
-
readonly version: 1;
|
|
5
|
-
readonly active: boolean;
|
|
6
|
-
}
|
|
7
2
|
declare const codexExtension: FelanExtension;
|
|
8
3
|
export { CODEX_CONFIG, DEFAULT_CODEX_CONFIG, validateCodexConfig } from './config.js';
|
|
9
4
|
export type { CodexConfig, CodexVerbosity } from './config.js';
|
|
10
|
-
export { ExecSessionManager, MAX_OUTPUT_TOKENS, formatExecResult } from './exec-session-manager.js';
|
|
11
|
-
export type { ExecCommandInput, UnifiedExecResult, WriteStdinInput } from './exec-session-manager.js';
|
|
12
5
|
export { supportsCodexModel, supportsCodexResponsesRequest } from './model-policy.js';
|
|
13
6
|
export { registerPostAgentRunCompaction } from './compaction.js';
|
|
14
7
|
export { applyCodexRequestOptions } from './request-options.js';
|
|
15
|
-
export { CODEX_TOOL_NAMES,
|
|
8
|
+
export { CODEX_TOOL_NAMES, createCodexTools } from './tools.js';
|
|
16
9
|
export { createCodexStreamFunctionWrapper, resolveCodexStreamOptions, resolveCodexTransport, } from './transport.js';
|
|
17
10
|
export default codexExtension;
|
|
18
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,sBAAsB,CAAC;AAS9B,QAAA,MAAM,cAAc,EAAE,cA8BrB,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,eAAe,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,30 +1,26 @@
|
|
|
1
1
|
import { associateExtensionConfig, } from '@felan-ai/agent-core';
|
|
2
2
|
import { CODEX_CONFIG, DEFAULT_CODEX_CONFIG } from './config.js';
|
|
3
3
|
import { registerPostAgentRunCompaction } from './compaction.js';
|
|
4
|
-
import {
|
|
5
|
-
import { supportsCodexModel, supportsImageInput } from './model-policy.js';
|
|
6
|
-
import { injectCodexSkills } from './prompt.js';
|
|
4
|
+
import { supportsCodexModel } from './model-policy.js';
|
|
7
5
|
import { applyCodexRequestOptions } from './request-options.js';
|
|
8
6
|
import { CODEX_TOOL_NAMES, createCodexTools, registerPatchResultEvent } from './tools.js';
|
|
9
|
-
const REPLACED_TOOL_NAMES = new Set(['
|
|
7
|
+
const REPLACED_TOOL_NAMES = new Set(['edit', 'write']);
|
|
10
8
|
const CODEX_TOOL_NAME_SET = new Set(CODEX_TOOL_NAMES);
|
|
11
|
-
export const CODEX_TOOL_MODE_EVENT = 'felan:codex:tool-mode:v1';
|
|
12
9
|
const codexExtension = async (pi) => {
|
|
13
10
|
const config = { ...DEFAULT_CODEX_CONFIG, ...pi.config };
|
|
14
|
-
const sessions = new ExecSessionManager(pi.runtime);
|
|
15
11
|
registerPostAgentRunCompaction(pi, config);
|
|
16
|
-
for (const tool of createCodexTools(pi.runtime
|
|
12
|
+
for (const tool of createCodexTools(pi.runtime))
|
|
17
13
|
pi.registerTool(tool);
|
|
18
14
|
registerPatchResultEvent(pi);
|
|
19
15
|
let ordinaryTools;
|
|
20
16
|
const synchronizeTools = (model) => {
|
|
21
17
|
const current = pi.getActiveTools();
|
|
22
18
|
ordinaryTools ??= current.filter((name) => !CODEX_TOOL_NAME_SET.has(name));
|
|
23
|
-
const active = supportsCodexModel(model)
|
|
19
|
+
const active = supportsCodexModel(model);
|
|
24
20
|
if (active) {
|
|
25
21
|
pi.setActiveTools([
|
|
26
22
|
...current.filter((name) => !REPLACED_TOOL_NAMES.has(name) && !CODEX_TOOL_NAME_SET.has(name)),
|
|
27
|
-
...CODEX_TOOL_NAMES
|
|
23
|
+
...CODEX_TOOL_NAMES,
|
|
28
24
|
]);
|
|
29
25
|
}
|
|
30
26
|
else {
|
|
@@ -35,27 +31,16 @@ const codexExtension = async (pi) => {
|
|
|
35
31
|
}
|
|
36
32
|
pi.setActiveTools(restored);
|
|
37
33
|
}
|
|
38
|
-
pi.events.emit(CODEX_TOOL_MODE_EVENT, { version: 1, active });
|
|
39
34
|
};
|
|
40
35
|
pi.on('session_start', (_event, ctx) => synchronizeTools(ctx.model));
|
|
41
36
|
pi.on('model_select', (event) => synchronizeTools(event.model));
|
|
42
|
-
pi.on('before_agent_start', (event, ctx) => {
|
|
43
|
-
if (!supportsCodexModel(ctx.model) || !pi.runtime.processes)
|
|
44
|
-
return undefined;
|
|
45
|
-
const systemPrompt = injectCodexSkills(event.systemPrompt, event.systemPromptOptions.skills);
|
|
46
|
-
return systemPrompt === event.systemPrompt ? undefined : { systemPrompt };
|
|
47
|
-
});
|
|
48
37
|
pi.on('before_provider_request', (event, ctx) => (applyCodexRequestOptions(event.payload, ctx, config)));
|
|
49
|
-
pi.on('session_shutdown', async () => {
|
|
50
|
-
await sessions.shutdown();
|
|
51
|
-
});
|
|
52
38
|
};
|
|
53
39
|
export { CODEX_CONFIG, DEFAULT_CODEX_CONFIG, validateCodexConfig } from './config.js';
|
|
54
|
-
export { ExecSessionManager, MAX_OUTPUT_TOKENS, formatExecResult } from './exec-session-manager.js';
|
|
55
40
|
export { supportsCodexModel, supportsCodexResponsesRequest } from './model-policy.js';
|
|
56
41
|
export { registerPostAgentRunCompaction } from './compaction.js';
|
|
57
42
|
export { applyCodexRequestOptions } from './request-options.js';
|
|
58
|
-
export { CODEX_TOOL_NAMES,
|
|
43
|
+
export { CODEX_TOOL_NAMES, createCodexTools } from './tools.js';
|
|
59
44
|
export { createCodexStreamFunctionWrapper, resolveCodexStreamOptions, resolveCodexTransport, } from './transport.js';
|
|
60
45
|
export default codexExtension;
|
|
61
46
|
associateExtensionConfig(codexExtension, CODEX_CONFIG);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,GAIzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/model-policy.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { Api, Model } from '@felan-ai/agent-core';
|
|
2
2
|
export declare function supportsCodexModel(model: Model<Api> | undefined): boolean;
|
|
3
3
|
export declare function supportsCodexResponsesRequest(model: Model<Api> | undefined): boolean;
|
|
4
|
-
export declare function supportsImageInput(model: Model<Api> | undefined): boolean;
|
|
5
4
|
//# sourceMappingURL=model-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-policy.d.ts","sourceRoot":"","sources":["../src/model-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,CAGzE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,CAGpF
|
|
1
|
+
{"version":3,"file":"model-policy.d.ts","sourceRoot":"","sources":["../src/model-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,CAGzE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,CAGpF"}
|
package/dist/model-policy.js
CHANGED
|
@@ -8,7 +8,4 @@ export function supportsCodexResponsesRequest(model) {
|
|
|
8
8
|
return supportsCodexModel(model)
|
|
9
9
|
&& (model.api === 'openai-responses' || model.api === 'openai-codex-responses');
|
|
10
10
|
}
|
|
11
|
-
export function supportsImageInput(model) {
|
|
12
|
-
return supportsCodexModel(model) && Array.isArray(model.input) && model.input.includes('image');
|
|
13
|
-
}
|
|
14
11
|
//# sourceMappingURL=model-policy.js.map
|
package/dist/model-policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../src/model-policy.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAEjF,MAAM,UAAU,kBAAkB,CAAC,KAA6B;IAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAA6B;IACzE,OAAO,kBAAkB,CAAC,KAAK,CAAC;WAC3B,CAAC,KAAM,CAAC,GAAG,KAAK,kBAAkB,IAAI,KAAM,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC;AACtF,CAAC
|
|
1
|
+
{"version":3,"file":"model-policy.js","sourceRoot":"","sources":["../src/model-policy.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAEjF,MAAM,UAAU,kBAAkB,CAAC,KAA6B;IAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAA6B;IACzE,OAAO,kBAAkB,CAAC,KAAK,CAAC;WAC3B,CAAC,KAAM,CAAC,GAAG,KAAK,kBAAkB,IAAI,KAAM,CAAC,GAAG,KAAK,wBAAwB,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/tools.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { type AgentRuntime, type FelanExtensionAPI, type ToolDefinition } from '@felan-ai/agent-core';
|
|
2
|
-
|
|
3
|
-
export declare
|
|
4
|
-
export declare const MAX_VIEW_IMAGE_INPUT_BYTES: number;
|
|
5
|
-
export declare function createCodexTools(runtime: AgentRuntime, sessions: ExecSessionManager): ToolDefinition<any, any, any>[];
|
|
2
|
+
export declare const CODEX_TOOL_NAMES: readonly ["apply_patch"];
|
|
3
|
+
export declare function createCodexTools(runtime: AgentRuntime): ToolDefinition<any, any, any>[];
|
|
6
4
|
export declare function registerPatchResultEvent(pi: Pick<FelanExtensionAPI, 'on'>): void;
|
|
7
5
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatG,eAAO,MAAM,gBAAgB,0BAA2B,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAgCvF;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,IAAI,CAWhF"}
|
package/dist/tools.js
CHANGED
|
@@ -1,97 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {} from '@felan-ai/agent-core';
|
|
2
2
|
import { Text } from '@earendil-works/pi-tui';
|
|
3
3
|
import { Type } from 'typebox';
|
|
4
|
-
import { ExecSessionManager, formatExecResult } from './exec-session-manager.js';
|
|
5
4
|
import { ApplyPatchError, applyPatch } from './patch.js';
|
|
6
|
-
import { supportsImageInput } from './model-policy.js';
|
|
7
|
-
const ExecCommandParams = Type.Object({
|
|
8
|
-
cmd: Type.String({ description: 'Raw command string interpreted by the current shell; do not quote the entire command' }),
|
|
9
|
-
workdir: Type.Optional(Type.String({ description: 'Cwd' })),
|
|
10
|
-
shell: Type.Optional(Type.String()),
|
|
11
|
-
tty: Type.Optional(Type.Boolean({ description: 'Run the command in a real PTY for ongoing interaction' })),
|
|
12
|
-
yield_time_ms: Type.Optional(Type.Number({ description: 'Wait before yielding output. Defaults to 10000 ms and clamps to 250-30000 ms; Windows uses a 10000 ms minimum.' })),
|
|
13
|
-
max_output_tokens: Type.Optional(Type.Number({ description: 'Output token budget. Defaults to 10000 tokens and caps at 25000 tokens; long lines are clamped before head/tail truncation.' })),
|
|
14
|
-
login: Type.Optional(Type.Boolean({ description: 'Login shell' })),
|
|
15
|
-
}, { additionalProperties: false });
|
|
16
|
-
const WriteStdinParams = Type.Object({
|
|
17
|
-
session_id: Type.Number({ description: 'Session ID' }),
|
|
18
|
-
chars: Type.Optional(Type.String({ description: 'Bytes to write to stdin. Defaults to empty, which polls without writing.' })),
|
|
19
|
-
yield_time_ms: Type.Optional(Type.Number({ description: 'Wait before yielding output. Non-empty writes default to 250 ms and cap at 30000 ms; empty polls wait 5000-300000 ms by default.' })),
|
|
20
|
-
max_output_tokens: Type.Optional(Type.Number({ description: 'Output token budget. Defaults to 10000 tokens and caps at 25000 tokens; long lines are clamped before head/tail truncation.' })),
|
|
21
|
-
}, { additionalProperties: false });
|
|
22
5
|
const ApplyPatchParams = Type.Object({
|
|
23
6
|
input: Type.String({
|
|
24
7
|
description: 'Full patch text. Use *** Begin Patch / *** End Patch with Add/Update/Delete File sections. *** Move to: path must immediately follow its Update File header and still needs a nonempty @@ hunk; use one unchanged context line for a pure move. Order each file\'s hunks top-to-bottom; indentation is literal',
|
|
25
8
|
}),
|
|
26
9
|
}, { additionalProperties: false });
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
}, { additionalProperties: false });
|
|
30
|
-
export const CODEX_TOOL_NAMES = [
|
|
31
|
-
'exec_command',
|
|
32
|
-
'write_stdin',
|
|
33
|
-
'apply_patch',
|
|
34
|
-
'view_image',
|
|
35
|
-
];
|
|
36
|
-
export const MAX_VIEW_IMAGE_INPUT_BYTES = 20 * 1024 * 1024;
|
|
37
|
-
const MAX_VIEW_IMAGE_BASE64_BYTES = 4 * 1024 * 1024;
|
|
38
|
-
const MAX_VIEW_IMAGE_DIMENSION = 2_000;
|
|
39
|
-
export function createCodexTools(runtime, sessions) {
|
|
40
|
-
const execCommand = {
|
|
41
|
-
name: 'exec_command',
|
|
42
|
-
label: 'exec_command',
|
|
43
|
-
description: 'Runs a command, returning output or a session ID for ongoing interaction.',
|
|
44
|
-
promptSnippet: 'Run commands; use tty=true for a PTY and write_stdin to poll or interact',
|
|
45
|
-
parameters: ExecCommandParams,
|
|
46
|
-
prepareArguments: (args) => prepareExecArguments(args),
|
|
47
|
-
async execute(_toolCallId, params, signal, onUpdate) {
|
|
48
|
-
const result = await sessions.exec(params, signal, onUpdate
|
|
49
|
-
? (partial) => onUpdate({
|
|
50
|
-
content: [{ type: 'text', text: formatExecResult(partial) }],
|
|
51
|
-
details: partial,
|
|
52
|
-
})
|
|
53
|
-
: undefined);
|
|
54
|
-
return {
|
|
55
|
-
content: [{ type: 'text', text: formatExecResult(result) }],
|
|
56
|
-
details: result,
|
|
57
|
-
};
|
|
58
|
-
},
|
|
59
|
-
renderCall(params, theme, context) {
|
|
60
|
-
const title = context.isError ? 'Command failed' : context.isPartial ? 'Running' : 'Ran';
|
|
61
|
-
return renderFriendlyCall(theme, title, params.cmd, context.isError);
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
const writeStdin = {
|
|
65
|
-
name: 'write_stdin',
|
|
66
|
-
label: 'write_stdin',
|
|
67
|
-
description: 'Writes characters to an existing exec_command session and returns recent output.',
|
|
68
|
-
promptSnippet: 'Write to or poll a running exec_command session',
|
|
69
|
-
parameters: WriteStdinParams,
|
|
70
|
-
async execute(_toolCallId, params, signal, onUpdate) {
|
|
71
|
-
const result = await sessions.write(params, signal, onUpdate
|
|
72
|
-
? (partial) => onUpdate({
|
|
73
|
-
content: [{ type: 'text', text: formatExecResult(partial) }],
|
|
74
|
-
details: partial,
|
|
75
|
-
})
|
|
76
|
-
: undefined);
|
|
77
|
-
return {
|
|
78
|
-
content: [{ type: 'text', text: formatExecResult(result) }],
|
|
79
|
-
details: result,
|
|
80
|
-
};
|
|
81
|
-
},
|
|
82
|
-
renderCall(params, theme, context) {
|
|
83
|
-
const interacted = typeof params.chars === 'string' && params.chars.length > 0;
|
|
84
|
-
let title;
|
|
85
|
-
if (context.isError)
|
|
86
|
-
title = 'Terminal interaction failed';
|
|
87
|
-
else if (interacted) {
|
|
88
|
-
title = context.isPartial ? 'Interacting with background terminal' : 'Interacted with background terminal';
|
|
89
|
-
}
|
|
90
|
-
else
|
|
91
|
-
title = context.isPartial ? 'Waiting for background terminal' : 'Waited for background terminal';
|
|
92
|
-
return renderFriendlyCall(theme, title, `#${params.session_id}`, context.isError, interacted ? '↳' : '•');
|
|
93
|
-
},
|
|
94
|
-
};
|
|
10
|
+
export const CODEX_TOOL_NAMES = ['apply_patch'];
|
|
11
|
+
export function createCodexTools(runtime) {
|
|
95
12
|
const applyPatchTool = {
|
|
96
13
|
name: 'apply_patch',
|
|
97
14
|
label: 'apply_patch',
|
|
@@ -123,53 +40,7 @@ export function createCodexTools(runtime, sessions) {
|
|
|
123
40
|
return renderFriendlyCall(theme, title, undefined, context.isError);
|
|
124
41
|
},
|
|
125
42
|
};
|
|
126
|
-
|
|
127
|
-
name: 'view_image',
|
|
128
|
-
label: 'view_image',
|
|
129
|
-
description: 'View an image from the workspace',
|
|
130
|
-
promptSnippet: 'View an image file',
|
|
131
|
-
parameters: ViewImageParams,
|
|
132
|
-
prepareArguments: (args) => prepareImageArguments(args),
|
|
133
|
-
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
134
|
-
if (!supportsImageInput(ctx.model)) {
|
|
135
|
-
throw new Error('view_image is unavailable because the selected model does not support image input');
|
|
136
|
-
}
|
|
137
|
-
if (signal?.aborted)
|
|
138
|
-
throw new Error('view_image aborted');
|
|
139
|
-
const path = params.path.startsWith('@') ? params.path.slice(1) : params.path;
|
|
140
|
-
const data = await runtime.readFile(path, { maxBytes: MAX_VIEW_IMAGE_INPUT_BYTES });
|
|
141
|
-
if (signal?.aborted)
|
|
142
|
-
throw new Error('view_image aborted');
|
|
143
|
-
const mimeType = detectImageMimeType(data);
|
|
144
|
-
if (!mimeType)
|
|
145
|
-
throw new Error('view_image expected a PNG, JPEG, GIF, or WebP image');
|
|
146
|
-
const resized = await resizeImage(data, mimeType, {
|
|
147
|
-
maxWidth: MAX_VIEW_IMAGE_DIMENSION,
|
|
148
|
-
maxHeight: MAX_VIEW_IMAGE_DIMENSION,
|
|
149
|
-
maxBytes: MAX_VIEW_IMAGE_BASE64_BYTES,
|
|
150
|
-
});
|
|
151
|
-
if (!resized) {
|
|
152
|
-
throw new Error('view_image could not decode or resize the image within safety limits');
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
content: [{ type: 'image', data: resized.data, mimeType: resized.mimeType }],
|
|
156
|
-
details: {
|
|
157
|
-
path,
|
|
158
|
-
originalWidth: resized.originalWidth,
|
|
159
|
-
originalHeight: resized.originalHeight,
|
|
160
|
-
width: resized.width,
|
|
161
|
-
height: resized.height,
|
|
162
|
-
wasResized: resized.wasResized,
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
},
|
|
166
|
-
renderCall(params, theme, context) {
|
|
167
|
-
const title = context.isError ? 'Image view failed' : context.isPartial ? 'Viewing image' : 'Viewed image';
|
|
168
|
-
const path = params.path.startsWith('@') ? params.path.slice(1) : params.path;
|
|
169
|
-
return renderFriendlyCall(theme, title, path, context.isError);
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
return [execCommand, writeStdin, applyPatchTool, viewImage];
|
|
43
|
+
return [applyPatchTool];
|
|
173
44
|
}
|
|
174
45
|
export function registerPatchResultEvent(pi) {
|
|
175
46
|
pi.on('tool_result', (event) => {
|
|
@@ -182,20 +53,6 @@ export function registerPatchResultEvent(pi) {
|
|
|
182
53
|
return undefined;
|
|
183
54
|
});
|
|
184
55
|
}
|
|
185
|
-
function prepareExecArguments(args) {
|
|
186
|
-
if (!isRecord(args))
|
|
187
|
-
return args;
|
|
188
|
-
const prepared = { ...args };
|
|
189
|
-
if (!('cmd' in prepared) && typeof prepared.command === 'string')
|
|
190
|
-
prepared.cmd = prepared.command;
|
|
191
|
-
if (!('workdir' in prepared)) {
|
|
192
|
-
if (typeof prepared.cwd === 'string')
|
|
193
|
-
prepared.workdir = prepared.cwd;
|
|
194
|
-
else if (typeof prepared.working_directory === 'string')
|
|
195
|
-
prepared.workdir = prepared.working_directory;
|
|
196
|
-
}
|
|
197
|
-
return prepared;
|
|
198
|
-
}
|
|
199
56
|
function preparePatchArguments(args) {
|
|
200
57
|
if (!isRecord(args) || typeof args.input === 'string')
|
|
201
58
|
return args;
|
|
@@ -205,30 +62,6 @@ function preparePatchArguments(args) {
|
|
|
205
62
|
return { input: args.patch };
|
|
206
63
|
return args;
|
|
207
64
|
}
|
|
208
|
-
function prepareImageArguments(args) {
|
|
209
|
-
if (!isRecord(args) || typeof args.path === 'string')
|
|
210
|
-
return args;
|
|
211
|
-
if (typeof args.file_path === 'string')
|
|
212
|
-
return { path: args.file_path };
|
|
213
|
-
if (typeof args.image_path === 'string')
|
|
214
|
-
return { path: args.image_path };
|
|
215
|
-
return args;
|
|
216
|
-
}
|
|
217
|
-
function detectImageMimeType(data) {
|
|
218
|
-
if (startsWith(data, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))
|
|
219
|
-
return 'image/png';
|
|
220
|
-
if (startsWith(data, [0xff, 0xd8, 0xff]))
|
|
221
|
-
return 'image/jpeg';
|
|
222
|
-
const header = new TextDecoder().decode(data.subarray(0, 12));
|
|
223
|
-
if (header.startsWith('GIF87a') || header.startsWith('GIF89a'))
|
|
224
|
-
return 'image/gif';
|
|
225
|
-
if (header.startsWith('RIFF') && header.slice(8, 12) === 'WEBP')
|
|
226
|
-
return 'image/webp';
|
|
227
|
-
return undefined;
|
|
228
|
-
}
|
|
229
|
-
function startsWith(data, prefix) {
|
|
230
|
-
return prefix.every((byte, index) => data[index] === byte);
|
|
231
|
-
}
|
|
232
65
|
function formatPatchSuccess(result) {
|
|
233
66
|
return [
|
|
234
67
|
'Applied patch successfully',
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@felan-ai/ext-codex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "Codex-compatible structured tools and OpenAI request controls for Felan",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -29,10 +29,10 @@
|
|
|
29
29
|
"typebox": "1.1.38"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"@felan-ai/agent-core": "^0.
|
|
32
|
+
"@felan-ai/agent-core": "^0.7.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@felan-ai/agent-core": "0.
|
|
35
|
+
"@felan-ai/agent-core": "0.7.0"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public",
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { AgentRuntime } from '@felan-ai/agent-core';
|
|
2
|
-
export interface ExecCommandInput {
|
|
3
|
-
readonly cmd: string;
|
|
4
|
-
readonly workdir?: string;
|
|
5
|
-
readonly shell?: string;
|
|
6
|
-
readonly tty?: boolean;
|
|
7
|
-
readonly yield_time_ms?: number;
|
|
8
|
-
readonly max_output_tokens?: number;
|
|
9
|
-
readonly login?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface WriteStdinInput {
|
|
12
|
-
readonly session_id: number;
|
|
13
|
-
readonly chars?: string;
|
|
14
|
-
readonly yield_time_ms?: number;
|
|
15
|
-
readonly max_output_tokens?: number;
|
|
16
|
-
}
|
|
17
|
-
export interface UnifiedExecResult {
|
|
18
|
-
readonly chunk_id: string;
|
|
19
|
-
readonly wall_time_seconds: number;
|
|
20
|
-
readonly output: string;
|
|
21
|
-
readonly exit_code?: number;
|
|
22
|
-
readonly session_id?: number;
|
|
23
|
-
readonly original_token_count?: number;
|
|
24
|
-
}
|
|
25
|
-
export declare const MAX_OUTPUT_TOKENS = 25000;
|
|
26
|
-
export declare class ExecSessionManager {
|
|
27
|
-
#private;
|
|
28
|
-
private readonly runtime;
|
|
29
|
-
constructor(runtime: AgentRuntime);
|
|
30
|
-
exec(input: ExecCommandInput, signal?: AbortSignal, onUpdate?: (result: UnifiedExecResult) => void): Promise<UnifiedExecResult>;
|
|
31
|
-
write(input: WriteStdinInput, signal?: AbortSignal, onUpdate?: (result: UnifiedExecResult) => void): Promise<UnifiedExecResult>;
|
|
32
|
-
shutdown(): Promise<void>;
|
|
33
|
-
}
|
|
34
|
-
export declare function formatExecResult(result: UnifiedExecResult): string;
|
|
35
|
-
//# sourceMappingURL=exec-session-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec-session-manager.d.ts","sourceRoot":"","sources":["../src/exec-session-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,sBAAsB,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAsBD,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAUxC,qBAAa,kBAAkB;;IAQjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAE5C,IAAI,CACR,KAAK,EAAE,gBAAgB,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAC7C,OAAO,CAAC,iBAAiB,CAAC;IAwCvB,KAAK,CACT,KAAK,EAAE,eAAe,EACtB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAC7C,OAAO,CAAC,iBAAiB,CAAC;IA4C7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAiM1B;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAalE"}
|
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
import { randomBytes, randomInt } from 'node:crypto';
|
|
2
|
-
const DEFAULT_EXEC_YIELD_MS = 10_000;
|
|
3
|
-
const DEFAULT_WRITE_YIELD_MS = 250;
|
|
4
|
-
const MIN_YIELD_MS = 250;
|
|
5
|
-
const MIN_EMPTY_POLL_YIELD_MS = 5_000;
|
|
6
|
-
const MAX_YIELD_MS = 30_000;
|
|
7
|
-
const MAX_EMPTY_POLL_YIELD_MS = 300_000;
|
|
8
|
-
const DEFAULT_MAX_OUTPUT_TOKENS = 10_000;
|
|
9
|
-
export const MAX_OUTPUT_TOKENS = 25_000;
|
|
10
|
-
const MAX_RETAINED_OUTPUT_CHARS = MAX_OUTPUT_TOKENS * 4;
|
|
11
|
-
const MAX_RETAINED_LINE_CHARS = 2_000;
|
|
12
|
-
const LONG_LINE_PATTERN = new RegExp(`[^\\n]{${MAX_RETAINED_LINE_CHARS + 1},}`, 'g');
|
|
13
|
-
const LINE_TRUNCATION_MARKER = '…[line truncated]';
|
|
14
|
-
const OUTPUT_TRUNCATION_MARKER = '\n[... output truncated ...]\n';
|
|
15
|
-
const COMPLETED_HISTORY_LIMIT = 32;
|
|
16
|
-
const SESSION_ID_MIN = 1_000;
|
|
17
|
-
const SESSION_ID_MAX_EXCLUSIVE = 100_000;
|
|
18
|
-
export class ExecSessionManager {
|
|
19
|
-
runtime;
|
|
20
|
-
#sessions = new Map();
|
|
21
|
-
#completed = new Map();
|
|
22
|
-
#starting = new Set();
|
|
23
|
-
#shutdownFailures = [];
|
|
24
|
-
#shuttingDown = false;
|
|
25
|
-
#shutdownPromise;
|
|
26
|
-
constructor(runtime) {
|
|
27
|
-
this.runtime = runtime;
|
|
28
|
-
}
|
|
29
|
-
async exec(input, signal, onUpdate) {
|
|
30
|
-
this.#assertAvailable();
|
|
31
|
-
const processes = this.runtime.processes;
|
|
32
|
-
if (!processes)
|
|
33
|
-
throw new Error('exec_command requires runtime process support');
|
|
34
|
-
if (signal?.aborted)
|
|
35
|
-
throw new Error('exec_command aborted');
|
|
36
|
-
const startedAt = Date.now();
|
|
37
|
-
const processOptions = {
|
|
38
|
-
...(input.workdir === undefined ? {} : { cwd: input.workdir }),
|
|
39
|
-
...(input.shell === undefined ? {} : { shell: input.shell }),
|
|
40
|
-
...(input.login === undefined ? {} : { login: input.login }),
|
|
41
|
-
};
|
|
42
|
-
const session = await this.#startSession(input, processOptions, processes);
|
|
43
|
-
this.#assertAvailable();
|
|
44
|
-
try {
|
|
45
|
-
return await this.#withInteraction(session, async () => {
|
|
46
|
-
onUpdate?.(this.#emptyResult(session, startedAt));
|
|
47
|
-
const snapshot = await readFor(session, 0, execYield(input.yield_time_ms), input.max_output_tokens, signal);
|
|
48
|
-
session.offset = snapshot.nextOffset;
|
|
49
|
-
if (signal?.aborted) {
|
|
50
|
-
await this.#preserveAbortedRead(session, snapshot, startedAt);
|
|
51
|
-
throw new Error(`exec_command aborted; process continues as session ${session.id}`);
|
|
52
|
-
}
|
|
53
|
-
const result = this.#consumeRead(session, snapshot, startedAt, input.max_output_tokens);
|
|
54
|
-
if (!snapshot.running)
|
|
55
|
-
await this.#complete(session, result);
|
|
56
|
-
return result;
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
if (signal?.aborted && !String(error).includes(`session ${session.id}`)) {
|
|
61
|
-
throw new Error(`exec_command aborted; process continues as session ${session.id}`, { cause: error });
|
|
62
|
-
}
|
|
63
|
-
throw error;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async write(input, signal, onUpdate) {
|
|
67
|
-
this.#assertAvailable();
|
|
68
|
-
const session = this.#sessions.get(input.session_id);
|
|
69
|
-
if (!session) {
|
|
70
|
-
return this.#completedResult(input);
|
|
71
|
-
}
|
|
72
|
-
const startedAt = Date.now();
|
|
73
|
-
try {
|
|
74
|
-
return await this.#withInteraction(session, async () => {
|
|
75
|
-
this.#assertAvailable();
|
|
76
|
-
if (this.#sessions.get(input.session_id) !== session)
|
|
77
|
-
return this.#completedResult(input);
|
|
78
|
-
const chars = input.chars ?? '';
|
|
79
|
-
if (chars) {
|
|
80
|
-
this.#validateInput(session, chars);
|
|
81
|
-
await this.#writeInput(session, chars);
|
|
82
|
-
}
|
|
83
|
-
if (signal?.aborted) {
|
|
84
|
-
throw new Error(`write_stdin aborted; session ${session.id} remains available`);
|
|
85
|
-
}
|
|
86
|
-
onUpdate?.(this.#emptyResult(session, startedAt));
|
|
87
|
-
const snapshot = await readFor(session, session.offset, writeYield(chars, input.yield_time_ms), input.max_output_tokens, signal);
|
|
88
|
-
session.offset = snapshot.nextOffset;
|
|
89
|
-
if (signal?.aborted) {
|
|
90
|
-
await this.#preserveAbortedRead(session, snapshot, startedAt);
|
|
91
|
-
throw new Error(`write_stdin aborted; session ${session.id} remains available`);
|
|
92
|
-
}
|
|
93
|
-
const result = this.#consumeRead(session, snapshot, startedAt, input.max_output_tokens);
|
|
94
|
-
if (!snapshot.running)
|
|
95
|
-
await this.#complete(session, result);
|
|
96
|
-
return result;
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
if (signal?.aborted && !String(error).includes(`session ${session.id}`)) {
|
|
101
|
-
throw new Error(`write_stdin aborted; session ${session.id} remains available`, { cause: error });
|
|
102
|
-
}
|
|
103
|
-
throw error;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
shutdown() {
|
|
107
|
-
if (this.#shutdownPromise)
|
|
108
|
-
return this.#shutdownPromise;
|
|
109
|
-
this.#shuttingDown = true;
|
|
110
|
-
this.#shutdownPromise = this.#finishShutdown();
|
|
111
|
-
return this.#shutdownPromise;
|
|
112
|
-
}
|
|
113
|
-
#emptyResult(session, startedAt) {
|
|
114
|
-
return {
|
|
115
|
-
chunk_id: chunkId(),
|
|
116
|
-
wall_time_seconds: (Date.now() - startedAt) / 1_000,
|
|
117
|
-
output: '',
|
|
118
|
-
session_id: session.id,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
async #complete(session, result) {
|
|
122
|
-
try {
|
|
123
|
-
await this.#disposeSession(session);
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
if (this.#sessions.get(session.id) === session)
|
|
127
|
-
this.#sessions.delete(session.id);
|
|
128
|
-
}
|
|
129
|
-
if (this.#shuttingDown)
|
|
130
|
-
return;
|
|
131
|
-
this.#completed.set(session.id, result);
|
|
132
|
-
while (this.#completed.size > COMPLETED_HISTORY_LIMIT) {
|
|
133
|
-
const oldest = this.#completed.keys().next().value;
|
|
134
|
-
if (oldest === undefined)
|
|
135
|
-
break;
|
|
136
|
-
this.#completed.delete(oldest);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
async #startSession(input, options, processes) {
|
|
140
|
-
let finishStart;
|
|
141
|
-
const starting = new Promise((resolveStart) => { finishStart = resolveStart; });
|
|
142
|
-
this.#starting.add(starting);
|
|
143
|
-
let process;
|
|
144
|
-
try {
|
|
145
|
-
process = input.tty === true
|
|
146
|
-
? await this.#startTerminal(input.cmd, options)
|
|
147
|
-
: await processes.startShell(input.cmd, options);
|
|
148
|
-
this.#assertAvailable();
|
|
149
|
-
const session = {
|
|
150
|
-
id: this.#allocateSessionId(),
|
|
151
|
-
process,
|
|
152
|
-
tty: input.tty === true,
|
|
153
|
-
decoder: new TextDecoder(),
|
|
154
|
-
sanitizer: new TerminalSanitizer(),
|
|
155
|
-
interactionTail: Promise.resolve(),
|
|
156
|
-
offset: 0,
|
|
157
|
-
pendingOutput: '',
|
|
158
|
-
pendingOriginalCharCount: 0,
|
|
159
|
-
};
|
|
160
|
-
this.#sessions.set(session.id, session);
|
|
161
|
-
process = undefined;
|
|
162
|
-
return session;
|
|
163
|
-
}
|
|
164
|
-
finally {
|
|
165
|
-
try {
|
|
166
|
-
if (process) {
|
|
167
|
-
try {
|
|
168
|
-
await process.dispose();
|
|
169
|
-
}
|
|
170
|
-
catch (error) {
|
|
171
|
-
if (this.#shuttingDown)
|
|
172
|
-
this.#shutdownFailures.push(error);
|
|
173
|
-
throw error;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
finally {
|
|
178
|
-
this.#starting.delete(starting);
|
|
179
|
-
finishStart();
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
async #finishShutdown() {
|
|
184
|
-
await Promise.allSettled([...this.#starting]);
|
|
185
|
-
const sessions = [...this.#sessions.values()];
|
|
186
|
-
this.#sessions.clear();
|
|
187
|
-
this.#completed.clear();
|
|
188
|
-
const results = await Promise.allSettled(sessions.map((session) => this.#disposeSession(session)));
|
|
189
|
-
const failures = [
|
|
190
|
-
...this.#shutdownFailures,
|
|
191
|
-
...results.flatMap((result) => result.status === 'rejected' ? [result.reason] : []),
|
|
192
|
-
];
|
|
193
|
-
if (failures.length > 0)
|
|
194
|
-
throw new AggregateError(failures, 'Failed to shut down exec sessions');
|
|
195
|
-
}
|
|
196
|
-
#disposeSession(session) {
|
|
197
|
-
session.disposePromise ??= Promise.resolve().then(() => session.process.dispose());
|
|
198
|
-
return session.disposePromise;
|
|
199
|
-
}
|
|
200
|
-
#assertAvailable() {
|
|
201
|
-
if (this.#shuttingDown)
|
|
202
|
-
throw new Error('exec manager is shut down');
|
|
203
|
-
}
|
|
204
|
-
async #startTerminal(command, options) {
|
|
205
|
-
if (!this.runtime.terminals) {
|
|
206
|
-
throw new Error('exec_command with tty=true requires runtime terminal support');
|
|
207
|
-
}
|
|
208
|
-
return this.runtime.terminals.startShell(command, options);
|
|
209
|
-
}
|
|
210
|
-
async #writeInput(session, chars) {
|
|
211
|
-
if (session.tty) {
|
|
212
|
-
await session.process.write(new TextEncoder().encode(chars));
|
|
213
|
-
await delay(100);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
await session.process.interrupt();
|
|
217
|
-
}
|
|
218
|
-
#validateInput(session, chars) {
|
|
219
|
-
if (session.tty)
|
|
220
|
-
return;
|
|
221
|
-
if (chars !== '\u0003') {
|
|
222
|
-
throw new Error('stdin is closed for this session; rerun exec_command with tty=true to keep stdin open');
|
|
223
|
-
}
|
|
224
|
-
if (!session.process.interrupt)
|
|
225
|
-
throw new Error('Runtime process interruption is unavailable');
|
|
226
|
-
}
|
|
227
|
-
#completedResult(input) {
|
|
228
|
-
const completed = this.#completed.get(input.session_id);
|
|
229
|
-
if (completed && !(input.chars ?? ''))
|
|
230
|
-
return truncateResult(completed, input.max_output_tokens);
|
|
231
|
-
if (completed)
|
|
232
|
-
throw new Error(`Process id ${input.session_id} already exited; cannot write stdin`);
|
|
233
|
-
throw new Error(`Unknown process id ${input.session_id}`);
|
|
234
|
-
}
|
|
235
|
-
#consumeRead(session, read, startedAt, maxOutputTokens) {
|
|
236
|
-
const output = `${session.pendingOutput}${read.output}`;
|
|
237
|
-
const originalCharCount = session.pendingOriginalCharCount + read.originalCharCount;
|
|
238
|
-
session.pendingOutput = '';
|
|
239
|
-
session.pendingOriginalCharCount = 0;
|
|
240
|
-
return resultFromRead(session, { ...read, output, originalCharCount }, startedAt, maxOutputTokens);
|
|
241
|
-
}
|
|
242
|
-
async #preserveAbortedRead(session, read, startedAt) {
|
|
243
|
-
const combined = `${session.pendingOutput}${read.output}`;
|
|
244
|
-
session.pendingOutput = headAndTail(clampLongLines(combined), MAX_RETAINED_OUTPUT_CHARS);
|
|
245
|
-
session.pendingOriginalCharCount += read.originalCharCount;
|
|
246
|
-
if (!read.running) {
|
|
247
|
-
const result = this.#consumeRead(session, { ...read, output: '', originalCharCount: 0 }, startedAt, MAX_RETAINED_OUTPUT_CHARS / 4);
|
|
248
|
-
await this.#complete(session, result);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
async #withInteraction(session, operation) {
|
|
252
|
-
const previous = session.interactionTail;
|
|
253
|
-
let release;
|
|
254
|
-
const gate = new Promise((resolveGate) => { release = resolveGate; });
|
|
255
|
-
session.interactionTail = previous.then(() => gate);
|
|
256
|
-
try {
|
|
257
|
-
await previous;
|
|
258
|
-
return await operation();
|
|
259
|
-
}
|
|
260
|
-
finally {
|
|
261
|
-
release();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
#allocateSessionId() {
|
|
265
|
-
for (let attempt = 0; attempt < 1_000; attempt += 1) {
|
|
266
|
-
const id = randomInt(SESSION_ID_MIN, SESSION_ID_MAX_EXCLUSIVE);
|
|
267
|
-
if (!this.#sessions.has(id) && !this.#completed.has(id))
|
|
268
|
-
return id;
|
|
269
|
-
}
|
|
270
|
-
throw new Error('Unable to allocate a unified exec session id');
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
export function formatExecResult(result) {
|
|
274
|
-
const sections = [];
|
|
275
|
-
sections.push(`Chunk ID: ${result.chunk_id}`);
|
|
276
|
-
sections.push(`Wall time: ${result.wall_time_seconds.toFixed(4)} seconds`);
|
|
277
|
-
if (result.exit_code !== undefined)
|
|
278
|
-
sections.push(`Process exited with code ${result.exit_code}`);
|
|
279
|
-
if (result.session_id !== undefined) {
|
|
280
|
-
sections.push(`Process running with session ID ${result.session_id}`);
|
|
281
|
-
}
|
|
282
|
-
if (result.original_token_count !== undefined) {
|
|
283
|
-
sections.push(`Original token count: ${result.original_token_count}`);
|
|
284
|
-
}
|
|
285
|
-
sections.push('Output:', result.output);
|
|
286
|
-
return sections.join('\n');
|
|
287
|
-
}
|
|
288
|
-
function resultFromRead(session, read, startedAt, maxOutputTokens) {
|
|
289
|
-
const truncated = truncateOutput(read.output, maxOutputTokens, read.originalCharCount);
|
|
290
|
-
return {
|
|
291
|
-
chunk_id: chunkId(),
|
|
292
|
-
wall_time_seconds: (Date.now() - startedAt) / 1_000,
|
|
293
|
-
...truncated,
|
|
294
|
-
...(read.running ? { session_id: session.id } : { exit_code: read.exitCode ?? 1 }),
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
async function readFor(session, afterOffset, waitMs, maxOutputTokens, signal) {
|
|
298
|
-
const deadline = Date.now() + waitMs;
|
|
299
|
-
const maxChars = maxCharsForTokens(maxOutputTokens);
|
|
300
|
-
let output = '';
|
|
301
|
-
let originalCharCount = 0;
|
|
302
|
-
let offset = afterOffset;
|
|
303
|
-
let snapshot = await session.process.read(offset);
|
|
304
|
-
while (true) {
|
|
305
|
-
const decoded = session.decoder.decode(snapshot.output, { stream: snapshot.running });
|
|
306
|
-
const sanitized = session.sanitizer.write(decoded, !snapshot.running);
|
|
307
|
-
originalCharCount += sanitized.length;
|
|
308
|
-
output = headAndTail(clampLongLines(`${output}${sanitized}`), maxChars);
|
|
309
|
-
offset = snapshot.nextOffset;
|
|
310
|
-
if (!snapshot.running || signal?.aborted)
|
|
311
|
-
break;
|
|
312
|
-
const remaining = deadline - Date.now();
|
|
313
|
-
if (remaining <= 0)
|
|
314
|
-
break;
|
|
315
|
-
snapshot = await session.process.read(offset, {
|
|
316
|
-
waitMs: remaining,
|
|
317
|
-
...(signal === undefined ? {} : { signal }),
|
|
318
|
-
});
|
|
319
|
-
if (snapshot.output.length === 0 && snapshot.running)
|
|
320
|
-
break;
|
|
321
|
-
}
|
|
322
|
-
return {
|
|
323
|
-
output,
|
|
324
|
-
originalCharCount,
|
|
325
|
-
nextOffset: snapshot.nextOffset,
|
|
326
|
-
running: snapshot.running,
|
|
327
|
-
...(snapshot.exitCode === undefined ? {} : { exitCode: snapshot.exitCode }),
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
function truncateResult(result, maxOutputTokens) {
|
|
331
|
-
const originalCharCount = result.original_token_count === undefined
|
|
332
|
-
? result.output.length
|
|
333
|
-
: result.original_token_count * 4;
|
|
334
|
-
return { ...result, ...truncateOutput(result.output, maxOutputTokens, originalCharCount) };
|
|
335
|
-
}
|
|
336
|
-
function truncateOutput(output, maxOutputTokens = DEFAULT_MAX_OUTPUT_TOKENS, originalCharCount = output.length) {
|
|
337
|
-
const maxChars = maxCharsForTokens(maxOutputTokens);
|
|
338
|
-
const clampedOutput = clampLongLines(output);
|
|
339
|
-
const originalTokenCount = Math.ceil(Math.max(output.length, originalCharCount) / 4);
|
|
340
|
-
if (clampedOutput.length <= maxChars) {
|
|
341
|
-
return clampedOutput || originalCharCount > 0
|
|
342
|
-
? { output: clampedOutput, original_token_count: originalTokenCount }
|
|
343
|
-
: { output: clampedOutput };
|
|
344
|
-
}
|
|
345
|
-
return {
|
|
346
|
-
output: headAndTail(clampedOutput, maxChars),
|
|
347
|
-
original_token_count: originalTokenCount,
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
function maxCharsForTokens(maxOutputTokens = DEFAULT_MAX_OUTPUT_TOKENS) {
|
|
351
|
-
const requested = Number.isFinite(maxOutputTokens)
|
|
352
|
-
? Math.max(256, Math.floor(maxOutputTokens * 4))
|
|
353
|
-
: DEFAULT_MAX_OUTPUT_TOKENS * 4;
|
|
354
|
-
return Math.min(MAX_RETAINED_OUTPUT_CHARS, requested);
|
|
355
|
-
}
|
|
356
|
-
function clampLongLines(output) {
|
|
357
|
-
return output.replace(LONG_LINE_PATTERN, (line) => `${safeHead(line, MAX_RETAINED_LINE_CHARS)}${LINE_TRUNCATION_MARKER}`);
|
|
358
|
-
}
|
|
359
|
-
function headAndTail(output, maxChars) {
|
|
360
|
-
if (output.length <= maxChars)
|
|
361
|
-
return output;
|
|
362
|
-
const retained = maxChars - OUTPUT_TRUNCATION_MARKER.length;
|
|
363
|
-
if (retained <= 0)
|
|
364
|
-
return safeHead(output, maxChars);
|
|
365
|
-
const head = safeHead(output, Math.ceil(retained / 2));
|
|
366
|
-
const tail = safeTail(output, Math.floor(retained / 2));
|
|
367
|
-
return `${head}${OUTPUT_TRUNCATION_MARKER}${tail}`;
|
|
368
|
-
}
|
|
369
|
-
function safeHead(output, maxChars) {
|
|
370
|
-
let end = Math.min(output.length, Math.max(0, maxChars));
|
|
371
|
-
if (end > 0 && /[\uD800-\uDBFF]/u.test(output[end - 1]))
|
|
372
|
-
end -= 1;
|
|
373
|
-
return output.slice(0, end);
|
|
374
|
-
}
|
|
375
|
-
function safeTail(output, maxChars) {
|
|
376
|
-
let start = Math.max(0, output.length - maxChars);
|
|
377
|
-
if (start > 0 && /[\uDC00-\uDFFF]/u.test(output[start]))
|
|
378
|
-
start += 1;
|
|
379
|
-
return output.slice(start);
|
|
380
|
-
}
|
|
381
|
-
function execYield(value) {
|
|
382
|
-
const minimum = process.platform === 'win32' ? DEFAULT_EXEC_YIELD_MS : MIN_YIELD_MS;
|
|
383
|
-
return clampYield(value ?? DEFAULT_EXEC_YIELD_MS, minimum, MAX_YIELD_MS);
|
|
384
|
-
}
|
|
385
|
-
function writeYield(chars, value) {
|
|
386
|
-
const requested = value ?? DEFAULT_WRITE_YIELD_MS;
|
|
387
|
-
return chars
|
|
388
|
-
? clampYield(requested, MIN_YIELD_MS, MAX_YIELD_MS)
|
|
389
|
-
: clampYield(requested, MIN_EMPTY_POLL_YIELD_MS, MAX_EMPTY_POLL_YIELD_MS);
|
|
390
|
-
}
|
|
391
|
-
function clampYield(value, minimum, maximum) {
|
|
392
|
-
if (!Number.isFinite(value))
|
|
393
|
-
return minimum;
|
|
394
|
-
return Math.min(maximum, Math.max(minimum, Math.floor(value)));
|
|
395
|
-
}
|
|
396
|
-
function chunkId() {
|
|
397
|
-
return randomBytes(3).toString('hex');
|
|
398
|
-
}
|
|
399
|
-
function delay(ms) {
|
|
400
|
-
return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));
|
|
401
|
-
}
|
|
402
|
-
class TerminalSanitizer {
|
|
403
|
-
#state = 'text';
|
|
404
|
-
write(input, final) {
|
|
405
|
-
let output = '';
|
|
406
|
-
for (const character of input) {
|
|
407
|
-
const code = character.codePointAt(0);
|
|
408
|
-
switch (this.#state) {
|
|
409
|
-
case 'text':
|
|
410
|
-
if (code === 0x1b)
|
|
411
|
-
this.#state = 'escape';
|
|
412
|
-
else if (code === 0x9b)
|
|
413
|
-
this.#state = 'csi';
|
|
414
|
-
else if (code === 0x9d)
|
|
415
|
-
this.#state = 'osc';
|
|
416
|
-
else if ([0x90, 0x98, 0x9e, 0x9f].includes(code))
|
|
417
|
-
this.#state = 'string';
|
|
418
|
-
else if (character === '\t' || character === '\n' || (code >= 0x20 && code !== 0x7f && !(code >= 0x80 && code <= 0x9f))) {
|
|
419
|
-
output += character;
|
|
420
|
-
}
|
|
421
|
-
break;
|
|
422
|
-
case 'escape':
|
|
423
|
-
if (character === '[')
|
|
424
|
-
this.#state = 'csi';
|
|
425
|
-
else if (character === ']')
|
|
426
|
-
this.#state = 'osc';
|
|
427
|
-
else if (character === 'P' || character === 'X' || character === '^' || character === '_')
|
|
428
|
-
this.#state = 'string';
|
|
429
|
-
else if (code >= 0x20 && code <= 0x2f)
|
|
430
|
-
this.#state = 'escape-intermediate';
|
|
431
|
-
else
|
|
432
|
-
this.#state = 'text';
|
|
433
|
-
break;
|
|
434
|
-
case 'escape-intermediate':
|
|
435
|
-
if (code >= 0x30 && code <= 0x7e)
|
|
436
|
-
this.#state = 'text';
|
|
437
|
-
break;
|
|
438
|
-
case 'csi':
|
|
439
|
-
if (code >= 0x40 && code <= 0x7e)
|
|
440
|
-
this.#state = 'text';
|
|
441
|
-
break;
|
|
442
|
-
case 'osc':
|
|
443
|
-
if (code === 0x07)
|
|
444
|
-
this.#state = 'text';
|
|
445
|
-
else if (code === 0x1b)
|
|
446
|
-
this.#state = 'osc-escape';
|
|
447
|
-
break;
|
|
448
|
-
case 'osc-escape':
|
|
449
|
-
this.#state = character === '\\' ? 'text' : 'osc';
|
|
450
|
-
break;
|
|
451
|
-
case 'string':
|
|
452
|
-
if (code === 0x1b)
|
|
453
|
-
this.#state = 'string-escape';
|
|
454
|
-
break;
|
|
455
|
-
case 'string-escape':
|
|
456
|
-
this.#state = character === '\\' ? 'text' : 'string';
|
|
457
|
-
break;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
if (final)
|
|
461
|
-
this.#state = 'text';
|
|
462
|
-
return output;
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
//# sourceMappingURL=exec-session-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec-session-manager.js","sourceRoot":"","sources":["../src/exec-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AA0CrD,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,YAAY,GAAG,MAAM,CAAC;AAC5B,MAAM,uBAAuB,GAAG,OAAO,CAAC;AACxC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACxD,MAAM,uBAAuB,GAAG,KAAK,CAAC;AACtC,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,UAAU,uBAAuB,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrF,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AACnD,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAClE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,cAAc,GAAG,KAAK,CAAC;AAC7B,MAAM,wBAAwB,GAAG,OAAO,CAAC;AAEzC,MAAM,OAAO,kBAAkB;IAQA;IAPpB,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IAClD,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,iBAAiB,GAAc,EAAE,CAAC;IAC3C,aAAa,GAAG,KAAK,CAAC;IACtB,gBAAgB,CAAiB;IAEjC,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAEtD,KAAK,CAAC,IAAI,CACR,KAAuB,EACvB,MAAoB,EACpB,QAA8C;QAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACjF,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG;YACrB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9D,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAC5D,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;SAC7D,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;QAC3E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;gBACrD,QAAQ,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,OAAO,EACP,CAAC,EACD,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,EAC9B,KAAK,CAAC,iBAAiB,EACvB,MAAM,CACP,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAC9D,MAAM,IAAI,KAAK,CAAC,sDAAsD,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtF,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACxF,IAAI,CAAC,QAAQ,CAAC,OAAO;oBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,sDAAsD,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CACT,KAAsB,EACtB,MAAoB,EACpB,QAA8C;QAE9C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;gBACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChC,IAAI,KAAK,EAAE,CAAC;oBACV,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACpC,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;gBAClF,CAAC;gBACD,QAAQ,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,OAAO,EACP,OAAO,CAAC,MAAM,EACd,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,EACtC,KAAK,CAAC,iBAAiB,EACvB,MAAM,CACP,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;gBACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;oBAC9D,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,CAAC,EAAE,oBAAoB,CAAC,CAAC;gBAClF,CAAC;gBACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACxF,IAAI,CAAC,QAAQ,CAAC,OAAO;oBAAE,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,CAAC,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACpG,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,OAAoB,EAAE,SAAiB;QAClD,OAAO;YACL,QAAQ,EAAE,OAAO,EAAE;YACnB,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,KAAK;YACnD,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,OAAO,CAAC,EAAE;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAoB,EAAE,MAAyB;QAC7D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,uBAAuB,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;YACzE,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM;YAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,KAAuB,EACvB,OAA4E,EAC5E,SAAiD;QAEjD,IAAI,WAAwB,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,YAAY,EAAE,EAAE,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,OAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI;gBAC1B,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;gBAC/C,CAAC,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,OAAO,GAAgB;gBAC3B,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE;gBAC7B,OAAO;gBACP,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,IAAI;gBACvB,OAAO,EAAE,IAAI,WAAW,EAAE;gBAC1B,SAAS,EAAE,IAAI,iBAAiB,EAAE;gBAClC,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE;gBAClC,MAAM,EAAE,CAAC;gBACT,aAAa,EAAE,EAAE;gBACjB,wBAAwB,EAAE,CAAC;aAC5B,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACxC,OAAO,GAAG,SAAS,CAAC;YACpB,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC1B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC3D,MAAM,KAAK,CAAC;oBACd,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAChC,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnG,MAAM,QAAQ,GAAG;YACf,GAAG,IAAI,CAAC,iBAAiB;YACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;IACnG,CAAC;IAED,eAAe,CAAC,OAAoB;QAClC,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC,cAAc,CAAC;IAChC,CAAC;IAED,gBAAgB;QACd,IAAI,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,OAA4E;QAE5E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAoB,EAAE,KAAa;QACnD,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,CAAC,SAAU,EAAE,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,OAAoB,EAAE,KAAa;QAChD,IAAI,OAAO,CAAC,GAAG;YAAE,OAAO;QACxB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjG,CAAC;IAED,gBAAgB,CAAC,KAAsB;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAAE,OAAO,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjG,IAAI,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,UAAU,qCAAqC,CAAC,CAAC;QACpG,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,YAAY,CACV,OAAoB,EACpB,IAAuB,EACvB,SAAiB,EACjB,eAAwB;QAExB,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxD,MAAM,iBAAiB,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACpF,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;QAC3B,OAAO,CAAC,wBAAwB,GAAG,CAAC,CAAC;QACrC,OAAO,cAAc,CACnB,OAAO,EACP,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,EACtC,SAAS,EACT,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,OAAoB,EACpB,IAAuB,EACvB,SAAiB;QAEjB,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1D,OAAO,CAAC,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACzF,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAC9B,OAAO,EACP,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,EAC7C,SAAS,EACT,yBAAyB,GAAG,CAAC,CAC9B,CAAC;YACF,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,OAAoB,EACpB,SAA2B;QAE3B,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;QACzC,IAAI,OAAoB,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,WAAW,EAAE,EAAE,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC;YACf,OAAO,MAAM,SAAS,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;YAC/D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,EAAE,CAAC;QACrE,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;CAEF;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAyB;IACxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAUD,SAAS,cAAc,CACrB,OAAoB,EACpB,IAAuB,EACvB,SAAiB,EACjB,eAAwB;IAExB,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACvF,OAAO;QACL,QAAQ,EAAE,OAAO,EAAE;QACnB,iBAAiB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,KAAK;QACnD,GAAG,SAAS;QACZ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,OAAoB,EACpB,WAAmB,EACnB,MAAc,EACd,eAAwB,EACxB,MAAoB;IAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,MAAM,GAAG,WAAW,CAAC;IACzB,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACtF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtE,iBAAiB,IAAI,SAAS,CAAC,MAAM,CAAC;QACtC,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QACxE,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAChD,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAC1B,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5C,MAAM,EAAE,SAAS;YACjB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO;YAAE,MAAM;IAC9D,CAAC;IACD,OAAO;QACL,MAAM;QACN,iBAAiB;QACjB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,MAAyB,EAAE,eAAwB;IACzE,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,KAAK,SAAS;QACjE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;QACtB,CAAC,CAAC,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAC;IACpC,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,cAAc,CACrB,MAAc,EACd,eAAe,GAAG,yBAAyB,EAC3C,iBAAiB,GAAG,MAAM,CAAC,MAAM;IAKjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF,IAAI,aAAa,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QACrC,OAAO,aAAa,IAAI,iBAAiB,GAAG,CAAC;YAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;YACrE,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAChC,CAAC;IACD,OAAO;QACL,MAAM,EAAE,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC;QAC5C,oBAAoB,EAAE,kBAAkB;KACzC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,eAAe,GAAG,yBAAyB;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;QAChD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,yBAAyB,GAAG,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,OAAO,CACnB,iBAAiB,EACjB,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,GAAG,sBAAsB,EAAE,CAChF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,QAAgB;IACnD,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,GAAG,wBAAwB,CAAC,MAAM,CAAC;IAC5D,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,GAAG,IAAI,GAAG,wBAAwB,GAAG,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzD,IAAI,GAAG,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAE,CAAC;QAAE,GAAG,IAAI,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,QAAgB;IAChD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC;QAAE,KAAK,IAAI,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC;IACpF,OAAO,UAAU,CAAC,KAAK,IAAI,qBAAqB,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,KAAyB;IAC1D,MAAM,SAAS,GAAG,KAAK,IAAI,sBAAsB,CAAC;IAClD,OAAO,KAAK;QACV,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,CAAC;QACnD,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe;IACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,OAAO;IACd,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,CAAC;AAYD,MAAM,iBAAiB;IACrB,MAAM,GAAkB,MAAM,CAAC;IAE/B,KAAK,CAAC,KAAa,EAAE,KAAc;QACjC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YACvC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,MAAM;oBACT,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;yBACrC,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;yBACvC,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;yBACvC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;yBACpE,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;wBACxH,MAAM,IAAI,SAAS,CAAC;oBACtB,CAAC;oBACD,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,SAAS,KAAK,GAAG;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;yBACtC,IAAI,SAAS,KAAK,GAAG;wBAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;yBAC3C,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG;wBAAE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;yBAC7G,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC;;wBACtE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC1B,MAAM;gBACR,KAAK,qBAAqB;oBACxB,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACvD,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;oBACvD,MAAM;gBACR,KAAK,KAAK;oBACR,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;yBACnC,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;oBACnD,MAAM;gBACR,KAAK,YAAY;oBACf,IAAI,CAAC,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;oBAClD,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,IAAI,KAAK,IAAI;wBAAE,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;oBACjD,MAAM;gBACR,KAAK,eAAe;oBAClB,IAAI,CAAC,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACrD,MAAM;YACV,CAAC;QACH,CAAC;QACD,IAAI,KAAK;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
package/dist/prompt.d.ts
DELETED
package/dist/prompt.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAUlD,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,GACnC,MAAM,CAOR"}
|
package/dist/prompt.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
const SKILLS_SECTION_OPEN = '<skills_instructions>';
|
|
2
|
-
export function injectCodexSkills(systemPrompt, skills) {
|
|
3
|
-
if (systemPrompt.includes(SKILLS_SECTION_OPEN))
|
|
4
|
-
return systemPrompt;
|
|
5
|
-
const visibleSkills = (skills ?? [])
|
|
6
|
-
.filter((skill) => !skill.disableModelInvocation)
|
|
7
|
-
.map(({ name, description, filePath }) => ({ name, description, filePath }));
|
|
8
|
-
if (visibleSkills.length === 0)
|
|
9
|
-
return systemPrompt;
|
|
10
|
-
return insertBeforeTrailingContext(systemPrompt, formatSkillsSection(visibleSkills));
|
|
11
|
-
}
|
|
12
|
-
function formatSkillsSection(skills) {
|
|
13
|
-
const lines = [
|
|
14
|
-
SKILLS_SECTION_OPEN,
|
|
15
|
-
'## Skills',
|
|
16
|
-
'Skills are local instructions stored in `SKILL.md` files.',
|
|
17
|
-
'### Available skills',
|
|
18
|
-
'<available_skills>',
|
|
19
|
-
];
|
|
20
|
-
for (const skill of skills) {
|
|
21
|
-
lines.push(' <skill>');
|
|
22
|
-
lines.push(` <name>${escapeXml(skill.name)}</name>`);
|
|
23
|
-
lines.push(` <description>${escapeXml(skill.description)}</description>`);
|
|
24
|
-
lines.push(` <location>${escapeXml(skill.filePath)}</location>`);
|
|
25
|
-
lines.push(' </skill>');
|
|
26
|
-
}
|
|
27
|
-
lines.push('</available_skills>');
|
|
28
|
-
lines.push('### How to use skills');
|
|
29
|
-
lines.push('- Use a skill when the user names it or the request clearly matches its description.');
|
|
30
|
-
lines.push('- Use the minimal required set. If multiple skills apply, state the order briefly.');
|
|
31
|
-
lines.push('- Open each selected `SKILL.md` before acting, resolve relative paths from its directory, and load only the referenced files you need.');
|
|
32
|
-
lines.push('- Prefer existing skill scripts, assets, and templates over recreating them.');
|
|
33
|
-
lines.push('### Fallback');
|
|
34
|
-
lines.push('- If a skill is missing or its path cannot be read, say so briefly and continue with the best available approach.');
|
|
35
|
-
lines.push('</skills_instructions>');
|
|
36
|
-
return lines.join('\n');
|
|
37
|
-
}
|
|
38
|
-
function insertBeforeTrailingContext(systemPrompt, section) {
|
|
39
|
-
const markers = ['\nCurrent working directory:', '\nCurrent date:'];
|
|
40
|
-
let insertionIndex = systemPrompt.length;
|
|
41
|
-
for (const marker of markers) {
|
|
42
|
-
const index = systemPrompt.lastIndexOf(marker);
|
|
43
|
-
if (index !== -1)
|
|
44
|
-
insertionIndex = Math.min(insertionIndex, index);
|
|
45
|
-
}
|
|
46
|
-
if (insertionIndex === systemPrompt.length) {
|
|
47
|
-
const separator = systemPrompt.endsWith('\n') ? '\n' : '\n\n';
|
|
48
|
-
return `${systemPrompt}${separator}${section}`;
|
|
49
|
-
}
|
|
50
|
-
return `${systemPrompt.slice(0, insertionIndex)}\n\n${section}${systemPrompt.slice(insertionIndex)}`;
|
|
51
|
-
}
|
|
52
|
-
function escapeXml(value) {
|
|
53
|
-
return value
|
|
54
|
-
.replace(/&/gu, '&')
|
|
55
|
-
.replace(/</gu, '<')
|
|
56
|
-
.replace(/>/gu, '>')
|
|
57
|
-
.replace(/"/gu, '"')
|
|
58
|
-
.replace(/'/gu, ''');
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=prompt.js.map
|
package/dist/prompt.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|