@felan-ai/ext-codex 0.3.6 → 0.5.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/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, exec shutdown, and structured skill-prompt
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
- patch parsing and matching, model activation policy, structured skill-prompt
24
- preservation, OpenAI request options, cached WebSocket transport selection,
25
- and local TUI tool labels. Felan implements process and file operations against
26
- AgentRuntime and uses Pi 0.85.1's native OpenAI Codex transport for connection
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 replaces `read`, `bash`, `edit`, and `write` with
8
- `exec_command`, `write_stdin`, and `apply_patch`; image-capable models also get
9
- `view_image`. Other Felan tools remain active. Switching to another model
10
- restores the ordinary tools. All shell and filesystem operations use the
11
- current `AgentRuntime`.
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 tool replacement, request
102
- controls, PTY/session handling, and bounded image delivery; it does not register
103
- or replace a provider. Filesystem, process, PTY, and image reads go through the
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. Runtime adapters without persistent-process support retain Felan's
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, MAX_VIEW_IMAGE_INPUT_BYTES, createCodexTools } from './tools.js';
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
@@ -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;AAW9B,eAAO,MAAM,qBAAqB,6BAA6B,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,QAAA,MAAM,cAAc,EAAE,cAwCrB,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,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACpG,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AACtG,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,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EACL,gCAAgC,EAChC,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,eAAe,cAAc,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 { ExecSessionManager } from './exec-session-manager.js';
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(['read', 'bash', 'edit', 'write']);
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, sessions))
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) && pi.runtime.processes !== undefined;
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.filter((name) => name !== 'view_image' || supportsImageInput(model)),
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, MAX_VIEW_IMAGE_INPUT_BYTES, createCodexTools } from './tools.js';
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,OAAO,CAEzE"}
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"}
@@ -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
@@ -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;AAED,MAAM,UAAU,kBAAkB,CAAC,KAA6B;IAC9D,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAM,CAAC,KAAK,CAAC,IAAI,KAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpG,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
- import { ExecSessionManager } from './exec-session-manager.js';
3
- export declare const CODEX_TOOL_NAMES: readonly ["exec_command", "write_stdin", "apply_patch", "view_image"];
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
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,kBAAkB,EAAoB,MAAM,2BAA2B,CAAC;AAoCjF,eAAO,MAAM,gBAAgB,uEAKnB,CAAC;AAEX,eAAO,MAAM,0BAA0B,QAAmB,CAAC;AAI3D,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,kBAAkB,GAC3B,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAkIjC;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,GAAG,IAAI,CAWhF"}
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 { resizeImage, } from '@felan-ai/agent-core';
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 ViewImageParams = Type.Object({
28
- path: Type.String(),
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
- const viewImage = {
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":"AAAA,OAAO,EAAkE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAe,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,gTAAgT;KAC9T,CAAC;CACH,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAIpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,aAAa,CAAU,CAAC;AAEzD,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,MAAM,cAAc,GAA4C;QAC9D,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,oDAAoD;QACjE,aAAa,EAAE,oCAAoC;QACnD,gBAAgB,EAAE,CAAC,4FAA4F,CAAC;QAChH,UAAU,EAAE,gBAAgB;QAC5B,aAAa,EAAE,YAAY;QAC3B,gBAAgB,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAqB;QACpF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM;YACvC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC;YACnH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,eAAe,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAC/F,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,kBAAkB,KAAK,CAAC,UAAU,2DAA2D;yBACpH,CAAC;oBACF,OAAO,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE;iBAC3F,CAAC;YACJ,CAAC;QACH,CAAC;QACD,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;IAEF,OAAO,CAAC,cAAc,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,EAAiC;IACxE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;QAC7B,IACE,KAAK,CAAC,QAAQ,KAAK,aAAa;eAC7B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;eACjC,KAAK,CAAC,OAAO,KAAK,IAAI;eACtB,QAAQ,IAAI,KAAK,CAAC,OAAO;eACzB,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,iBAAiB;YAC7C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAa;IAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACzE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA8C;IACxE,OAAO;QACL,4BAA4B;QAC5B,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;QAC9C,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;QAC9C,kBAAkB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE;QAC9C,gBAAgB,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE;QAC1C,SAAS,MAAM,CAAC,IAAI,EAAE;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAOD,SAAS,kBAAkB,CACzB,KAA0B,EAC1B,KAAa,EACb,MAA0B,EAC1B,OAAgB,EAChB,MAAM,GAAG,GAAG;IAEZ,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,aAAa,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,OAAO,UAAU,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;AACjF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@felan-ai/ext-codex",
3
- "version": "0.3.6",
3
+ "version": "0.5.0",
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.5.0"
32
+ "@felan-ai/agent-core": "^0.6.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@felan-ai/agent-core": "0.5.10"
35
+ "@felan-ai/agent-core": "0.6.1"
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":"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"}
package/dist/prompt.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { Skill } from '@felan-ai/agent-core';
2
- export declare function injectCodexSkills(systemPrompt: string, skills: readonly Skill[] | undefined): string;
3
- //# sourceMappingURL=prompt.d.ts.map
@@ -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, '&amp;')
55
- .replace(/</gu, '&lt;')
56
- .replace(/>/gu, '&gt;')
57
- .replace(/"/gu, '&quot;')
58
- .replace(/'/gu, '&apos;');
59
- }
60
- //# sourceMappingURL=prompt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAQA,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAEpD,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,MAAoC;IAEpC,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,YAAY,CAAC;IACpE,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;SACjC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;SAChD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/E,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACpD,OAAO,2BAA2B,CAAC,YAAY,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA8B;IACzD,MAAM,KAAK,GAAG;QACZ,mBAAmB;QACnB,WAAW;QACX,2DAA2D;QAC3D,sBAAsB;QACtB,oBAAoB;KACrB,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,aAAa,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;IACnG,KAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC;IACjG,KAAK,CAAC,IAAI,CAAC,wIAAwI,CAAC,CAAC;IACrJ,KAAK,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC3F,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,mHAAmH,CAAC,CAAC;IAChI,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,2BAA2B,CAAC,YAAoB,EAAE,OAAe;IACxE,MAAM,OAAO,GAAG,CAAC,8BAA8B,EAAE,iBAAiB,CAAC,CAAC;IACpE,IAAI,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC;IACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,cAAc,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,OAAO,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;AACvG,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK;SACT,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;SACxB,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC"}