@poncho-ai/harness 0.59.2 → 0.59.4

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @poncho-ai/harness@0.59.2 build /home/runner/work/poncho-ai/poncho-ai/packages/harness
2
+ > @poncho-ai/harness@0.59.4 build /home/runner/work/poncho-ai/poncho-ai/packages/harness
3
3
  > node scripts/embed-docs.js && tsup src/index.ts --format esm --dts
4
4
 
5
5
  [embed-docs] Generated poncho-docs.ts with 4 topics
@@ -8,9 +8,9 @@
8
8
  CLI tsup v8.5.1
9
9
  CLI Target: es2022
10
10
  ESM Build start
11
+ ESM dist/index.js 556.98 KB
11
12
  ESM dist/isolate-F2PPSUL6.js 53.82 KB
12
- ESM dist/index.js 567.57 KB
13
- ESM ⚡️ Build success in 251ms
13
+ ESM ⚡️ Build success in 270ms
14
14
  DTS Build start
15
- DTS ⚡️ Build success in 7447ms
16
- DTS dist/index.d.ts 104.68 KB
15
+ DTS ⚡️ Build success in 8326ms
16
+ DTS dist/index.d.ts 101.34 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @poncho-ai/harness
2
2
 
3
+ ## 0.59.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`3a25676`](https://github.com/cesr/poncho-ai/commit/3a2567666e1bc8d6650818db76d07765c0250264) Thanks [@cesr](https://github.com/cesr)! - Add a per-run `model` override to `RunInput` (and forward it from `runConversationTurn`'s opts). The override is captured once at run start and wins over the agent definition's `model.name` for every step of the run.
8
+
9
+ Previously the only way to vary the model per run kind on a shared harness was mutating `parsedAgent.frontmatter.model.name` before each run — but the harness re-reads that field at the start of every step, so a concurrent run's mutation flipped an in-flight run's model mid-turn. Besides being the wrong model, the switch invalidated the run's entire Anthropic prompt cache (caches are per-model), observed in production as the same ~104k-token prefix being cache-written twice back-to-back, once per model. Callers should pass `model` in the run input instead of mutating frontmatter.
10
+
11
+ - Updated dependencies [[`3a25676`](https://github.com/cesr/poncho-ai/commit/3a2567666e1bc8d6650818db76d07765c0250264)]:
12
+ - @poncho-ai/sdk@1.15.2
13
+
14
+ ## 0.59.3
15
+
16
+ ### Patch Changes
17
+
18
+ - [`c9f7331`](https://github.com/cesr/poncho-ai/commit/c9f733190103bcb1ec1b0173c6760a8ef4bea2f3) Thanks [@cesr](https://github.com/cesr)! - Reframe `conversation_entries` as the subagent delivery queue and delete the
19
+ abandoned transcript dual-write. The entry log now carries exactly two types
20
+ — `subagent_result` (race-free delivery of a finished subagent's result) and
21
+ `callback_started` (consumption marker) — which is the one conversation
22
+ field with concurrent writers. The unread transcript entry types
23
+ (user/assistant/harness messages, compaction overlays), their dual-write
24
+ call sites, and the parity checker were groundwork for a full blob
25
+ replacement that was deliberately abandoned after the 0.58.0 cutover
26
+ incident; they were already unfaithful for callback turns and are deleted
27
+ rather than maintained as drift-prone dead weight. Read paths now filter the
28
+ queue types explicitly, so legacy transcript rows are ignored. Also fixes
29
+ `conversations.rename` to update the title inside the `data` blob (via an
30
+ atomic in-database JSON set) — the 0.59.2 column-only update didn't surface
31
+ on reads, which parse the blob.
32
+
3
33
  ## 0.59.2
4
34
 
5
35
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -127,24 +127,39 @@ interface CompactResult {
127
127
  declare const compactMessages: (model: LanguageModel, messages: Message[], config: CompactionConfig, options?: CompactMessagesOptions) => Promise<CompactResult>;
128
128
 
129
129
  /**
130
- * Append-only conversation entries (Phase 3 substrate).
130
+ * The subagent delivery queue: append-only `conversation_entries` rows that
131
+ * carry a finished subagent's result to its parent conversation.
131
132
  *
132
- * The eventual replacement for the mutable per-conversation JSON blob: a
133
- * conversation becomes an ordered, append-only list of entries, and the
134
- * mutable-blob clobber race (two writers serializing a stale whole-blob
135
- * snapshot over each other the root cause behind lost subagent results)
136
- * stops being expressible.
133
+ * Why this exists: subagent results are the ONE conversation field with
134
+ * concurrent writers. A subagent finishes whenever it finishes possibly
135
+ * while the parent turn is mid-stream doing whole-blob writes — so a
136
+ * read-modify-write on the mutable conversation row could serialize a stale
137
+ * snapshot over the result (the historical "lost subagent result" clobber).
138
+ * An append-only INSERT can't express that race. Everything single-writer
139
+ * (message history, metadata) stays on the conversation row, where the
140
+ * orchestrator's per-conversation turn serialization already makes mutation
141
+ * safe.
137
142
  *
138
- * This module is intentionally PURE: it defines the entry shapes and the
139
- * functions that rebuild a conversation's LLM context / display transcript
140
- * / pending-subagent-results from an entry list. No storage engine, no DB,
141
- * no wiring into the live run loop yet — so it deploys nothing and is
142
- * fully unit-testable. The engine implementations (append/read on
143
- * postgres/sqlite/memory) and the write-site conversions come in later PRs
144
- * once this rebuild logic is proven.
143
+ * Two entry types:
144
+ * - `subagent_result`: a finished subagent's result, appended by the
145
+ * orchestrator's result-delivery path.
146
+ * - `callback_started`: marks which result entries a callback turn
147
+ * consumed (by seq). Consumption is an append, never a delete — a
148
+ * result is "pending" until a later callback_started lists its seq.
145
149
  *
146
- * Ordering: every entry carries a monotonic per-conversation `seq`. Entries
147
- * are assumed sorted by `seq` ascending when passed to the rebuild fns.
150
+ * Historical note: this module once defined a full transcript's worth of
151
+ * entry types (user/assistant/harness messages, compaction overlays) as
152
+ * groundwork for replacing the conversation blob entirely. The full read
153
+ * cutover shipped briefly (harness 0.58.0), proved unfaithful for callback
154
+ * turns, and was reverted; the unread types + dual-writes were then deleted
155
+ * rather than maintained as drift-prone dead weight. If a future feature
156
+ * needs real history semantics (editing, branching, audit), design that
157
+ * migration fresh — and remember the 0.58.0 lesson: an append-only log is
158
+ * only as good as the completeness of its writers.
159
+ *
160
+ * Ordering: every entry carries a monotonic per-conversation `seq`,
161
+ * assigned by the engine at append time. Entries are sorted by `seq`
162
+ * ascending when passed to the rebuild fn.
148
163
  */
149
164
  interface BaseEntry {
150
165
  /** Stable cross-reference id (uuid). */
@@ -153,48 +168,6 @@ interface BaseEntry {
153
168
  seq: number;
154
169
  createdAt: number;
155
170
  }
156
- /** A user-role display message (incl. typed subagent-callback messages). */
157
- interface UserMessageEntry extends BaseEntry {
158
- type: "user_message";
159
- message: Message;
160
- turnId: string;
161
- /** Hidden from the display transcript (e.g. a framed job prompt, an
162
- * onboarding seed, or an injected subagent-result message). Still part
163
- * of the record; just not rendered as a chat bubble. */
164
- hidden?: boolean;
165
- }
166
- /** The final assistant bubble for a completed/cancelled/errored turn. */
167
- interface AssistantMessageEntry extends BaseEntry {
168
- type: "assistant_message";
169
- message: Message;
170
- turnId: string;
171
- runId: string;
172
- }
173
- /** A post-hoc edit to an already-emitted assistant message — replaces the
174
- * orchestrator/resume "mutate the last assistant message in place" writes
175
- * with an append. Applied at rebuild time. */
176
- interface AssistantAmendmentEntry extends BaseEntry {
177
- type: "assistant_amendment";
178
- targetEntryId: string;
179
- appendText?: string;
180
- }
181
- /** One LLM-transcript message (the model-visible form). Appended from the
182
- * run loop per step — never diffed from an array. */
183
- interface HarnessMessageEntry extends BaseEntry {
184
- type: "harness_message";
185
- message: Message;
186
- turnId: string;
187
- }
188
- /** Compaction overlay: nothing is deleted. At rebuild, the LLM context is
189
- * the latest compaction's `summaryMessage` followed by the harness
190
- * messages from `firstKeptSeq` onward. */
191
- interface CompactionEntry extends BaseEntry {
192
- type: "compaction";
193
- summaryMessage: Message;
194
- firstKeptSeq: number;
195
- tokensBefore?: number;
196
- tokensAfter?: number;
197
- }
198
171
  /** A finished subagent's result arriving for the parent. Pending = a
199
172
  * subagent_result whose seq is not listed in any later callback_started. */
200
173
  interface SubagentResultEntry extends BaseEntry {
@@ -207,38 +180,15 @@ interface CallbackStartedEntry extends BaseEntry {
207
180
  type: "callback_started";
208
181
  consumedSeqs: number[];
209
182
  }
210
- type ConversationEntry = UserMessageEntry | AssistantMessageEntry | AssistantAmendmentEntry | HarnessMessageEntry | CompactionEntry | SubagentResultEntry | CallbackStartedEntry;
183
+ type ConversationEntry = SubagentResultEntry | CallbackStartedEntry;
211
184
  /**
212
185
  * An entry to append, before the engine assigns `seq` and `createdAt`. This
213
186
  * is a DISTRIBUTIVE omit — `Omit<ConversationEntry, K>` over a union would
214
- * collapse to only the keys common to every member (dropping `message`,
215
- * `summaryMessage`, etc.), so we distribute over the union with a
216
- * conditional type to omit those fields from each member individually.
187
+ * collapse to only the keys common to every member, so we distribute over
188
+ * the union with a conditional type to omit those fields from each member
189
+ * individually.
217
190
  */
218
191
  type NewConversationEntry = ConversationEntry extends infer T ? T extends ConversationEntry ? Omit<T, "seq" | "createdAt"> : never : never;
219
- /**
220
- * Rebuild the LLM-visible message context from the entry log.
221
- *
222
- * If a compaction overlay exists, the context is its summary message
223
- * followed by every harness message with seq >= firstKeptSeq (a later
224
- * compaction's firstKeptSeq can point at an earlier summary that was
225
- * itself appended as a harness message, so layered compactions just work).
226
- * With no compaction, it's every harness message in order.
227
- */
228
- declare function buildLlmContext(entries: ConversationEntry[]): Message[];
229
- interface DisplaySnapshot {
230
- messages: Message[];
231
- /** Total display messages available (for pagination UIs). */
232
- totalMessages: number;
233
- /** seq of the first message returned (a `beforeSeq` pagination cursor). */
234
- headSeq: number | null;
235
- }
236
- /**
237
- * Rebuild the display transcript (the user-visible chat) from the entry
238
- * log, returning the trailing `tailN` messages. Amendments are folded into
239
- * their target assistant message; hidden user messages are dropped.
240
- */
241
- declare function buildDisplaySnapshot(entries: ConversationEntry[], tailN: number): DisplaySnapshot;
242
192
  /**
243
193
  * Subagent results that have arrived but not yet been consumed by a
244
194
  * callback turn — the append-only replacement for the mutable
@@ -2384,6 +2334,12 @@ interface RunConversationTurnOpts {
2384
2334
  * built with an OTLP exporter attached.
2385
2335
  */
2386
2336
  suppressTelemetry?: boolean;
2337
+ /**
2338
+ * Forwarded to `RunInput.model`. Per-run model override, captured once at
2339
+ * run start — safe under concurrent runs on a shared harness, unlike
2340
+ * mutating the parsed agent's frontmatter.
2341
+ */
2342
+ model?: string;
2387
2343
  /** Per-event hook — called for every AgentEvent yielded by the run, in order. */
2388
2344
  onEvent?: (event: AgentEvent) => void | Promise<void>;
2389
2345
  }
@@ -2403,45 +2359,16 @@ interface RunConversationTurnResult {
2403
2359
  }
2404
2360
  declare const runConversationTurn: (opts: RunConversationTurnOpts) => Promise<RunConversationTurnResult>;
2405
2361
 
2406
- /** True when dual-write parity verification is opted in via env. */
2407
- declare const entriesParityEnabled: () => boolean;
2408
2362
  type NewEntryNoId = NewConversationEntry extends infer T ? T extends NewConversationEntry ? Omit<T, "id"> : never : never;
2409
2363
  /**
2410
- * Append entries to the conversation's append-only log, mirroring an existing
2411
- * blob write. Best-effort and non-blocking by contract:
2364
+ * Append entries to the conversation's queue. Best-effort by contract:
2412
2365
  * - stamps a fresh uuid `id` on each entry (required input column),
2413
2366
  * - never throws (logs and returns [] on failure),
2414
- * - is safe to `void` (callers needn't await).
2367
+ * - safe to `void` when the caller doesn't need the stored rows.
2415
2368
  *
2416
- * Returns the stored entries (with seq/createdAt) for callers that want them
2417
- * (e.g. to learn the assistant entry's id for a later amendment), or [] on
2418
- * empty input / failure.
2369
+ * Returns the stored entries (with seq/createdAt) the callback path needs
2370
+ * the seqs to record consumption.
2419
2371
  */
2420
2372
  declare const appendEntriesSafe: (store: ConversationStore, conversation: Pick<Conversation, "conversationId" | "ownerId" | "tenantId">, entries: NewEntryNoId[], log: Logger) => Promise<ConversationEntry[]>;
2421
- /**
2422
- * The harness messages added during the just-finished turn — i.e. the suffix
2423
- * of the new `_harnessMessages` array beyond what was there before the turn.
2424
- *
2425
- * BEST-EFFORT: the blob replaces `_harnessMessages` wholesale (it's not an
2426
- * append log), so we recover "what's new" by length-diffing prev vs next.
2427
- * When a compaction collapsed history this turn, `next` can be SHORTER than
2428
- * `prev`; in that case there's no clean suffix and we return the whole `next`
2429
- * so the entry log still ends up with the model-visible context (parity will
2430
- * flag the over-count for review). The compaction entry (appended separately)
2431
- * is what makes rebuild correct in that case.
2432
- */
2433
- declare const newHarnessMessagesThisTurn: (prev: Message[] | undefined, next: Message[] | undefined) => {
2434
- messages: Message[];
2435
- approximate: boolean;
2436
- };
2437
- /**
2438
- * Rebuild LLM context + display snapshot from the entry log and diff against
2439
- * the blob. Logs under `[entries-parity]` with the conversationId. Never
2440
- * throws. No-op unless PONCHO_VERIFY_ENTRIES === "1".
2441
- */
2442
- declare const verifyEntriesParity: (store: ConversationStore, conversationId: string, blob: {
2443
- harnessMessages?: Message[];
2444
- displayMessages?: Message[];
2445
- }, log: Logger) => Promise<void>;
2446
2373
 
2447
- export { type ActiveConversationRun, type ActiveSubagentRun, type AgentFrontmatter, AgentHarness, type AgentIdentity, type AgentLimitsConfig, type AgentModelConfig, AgentOrchestrator, type ApprovalEventItem, type ArchivedToolResult$1 as ArchivedToolResult, type AssistantAmendmentEntry, type AssistantMessageEntry, type BashConfig, BashEnvironmentManager, type BashExecutionLimits, type BuiltInToolToggles, CALLBACK_LOCK_STALE_MS, type CallbackStartedEntry, type CompactMessagesOptions, type CompactResult, type CompactionConfig, type CompactionEntry, type ContinuationHooks, type Conversation, type ConversationCreateInit, type ConversationEntry, type ConversationState, type ConversationStatusSnapshot, type ConversationStore, type ConversationSummary, type CreateSkillToolsOptions, type CronJobConfig, DEFAULT_AGENT_DESCRIPTION, DEFAULT_AGENT_NAME, DEFAULT_MAX_STEPS, DEFAULT_MODEL_NAME, DEFAULT_MODEL_PROVIDER, DEFAULT_TEMPERATURE, DEFAULT_TIMEOUT, type DefaultAgentDefinitionOptions, type DisplaySnapshot, type EventSink, type ExecuteTurnResult, type HarnessMessageEntry, type HarnessOptions, type HarnessRunOutput, type HistorySource, InMemoryConversationStore, InMemoryEngine, InMemoryStateStore, type IsolateBinding, type IsolateConfig, LocalMcpBridge, LocalUploadStore, MAX_CONCURRENT_SUBAGENTS, MAX_CONTINUATION_COUNT, MAX_SUBAGENT_CALLBACK_COUNT, MAX_SUBAGENT_NESTING, type MainMemory, type McpConfig, type MemoryConfig, type MemoryStore, type MessagingChannelConfig, type ModelProviderFactory, type MountProvider, type NetworkConfig, type NewConversationEntry, OPENAI_CODEX_CLIENT_ID, type OpenAICodexAuthConfig, type OpenAICodexDeviceAuthRequest, type OpenAICodexSession, type OrchestratorHooks, type OrchestratorOptions, type OtlpConfig, type OtlpOption, PONCHO_UPLOAD_SCHEME, type ParsedAgent, type PendingSubagentApproval, type PendingSubagentResult, type PendingToolCall, type PonchoConfig, PonchoFsAdapter, PostgresEngine, type ProviderConfig, type Recurrence, type RecurrenceType, type Reminder, type ReminderCreateInput, type ReminderStatus, type ReminderStore, type RemoteMcpServerConfig, type RunConversationTurnOpts, type RunConversationTurnResult, type RunOutcome, type RunRequest, type RuntimeRenderContext, S3UploadStore, STALE_SUBAGENT_THRESHOLD_MS, STORAGE_SCHEMA_VERSION, type SecretsStore, type SkillContextEntry, type SkillMetadata, type SkillSource, SqliteEngine, type StateConfig, type StateProviderName, type StateStore, type StorageConfig, type StorageEngine, type StorageFactoryOptions, type StorageProvider, type StoredApproval, type SubagentManager, type SubagentResult, type SubagentResultEntry, type SubagentSpawnResult, type SubagentSummary, type SubagentTranscript, type SubagentTranscriptMode, TOOL_RESULT_ARCHIVE_PARAM, type TelemetryConfig, TelemetryEmitter, type TenantTokenPayload, type ToolAccess, type ToolCall, ToolDispatcher, type ToolExecutionResult, type TurnDraftState, type TurnResultMetadata, type TurnSection, type UploadStore, type UploadsConfig, type UserMessageEntry, VFS_SCHEME, VercelBlobUploadStore, type VfsDirEntry, type VfsStat, type VirtualMount, abnormalEndResponse, appendEntriesSafe, applyTurnMetadata, buildAgentDirectoryName, buildApprovalCheckpoints, buildAssistantMetadata, buildDisplaySnapshot, buildLlmContext, buildSkillContextWindow, buildToolCompletedText, cloneSections, compactMessages, completeOpenAICodexDeviceAuth, computeNextOccurrence, createBashTool, createConversationStore, createConversationStoreFromEngine, createDefaultTools, createDeleteDirectoryTool, createDeleteTool, createEditTool, createMemoryStore, createMemoryStoreFromEngine, createMemoryTools, createModelProvider, createReminderStore, createReminderStoreFromEngine, createReminderTools, createSearchTools, createSecretsStore, createSkillTools, createStateStore, createStorageEngine, createSubagentTools, createTodoStoreFromEngine, createTurnDraftState, createUploadStore, createWriteTool, decodeFileInputData, defaultAgentDefinition, deleteOpenAICodexSession, deriveUploadKey, ensureAgentIdentity, entriesParityEnabled, estimateTokens, estimateTotalTokens, executeConversationTurn, findSafeSplitPoint, flushTurnDraft, generateAgentId, getAgentStoreDirectory, getModelContextWindow, getOpenAICodexAccessToken, getOpenAICodexAuthFilePath, getOpenAICodexRequiredScopes, getPendingSubagentResults, getPonchoStoreRoot, isMessageArray, jsonSchemaToZod, lastAssistantText, loadCanonicalHistory, loadPonchoConfig, loadRunHistory, loadSkillContext, loadSkillInstructions, loadSkillMetadata, loadSkillMetadataFromDirs, loadVfsSkillMetadata, mergeSkills, newHarnessMessagesThisTurn, normalizeApprovalCheckpoint, normalizeOtlp, normalizeScriptPolicyPath, normalizeToolAccess, parseAgentFile, parseAgentMarkdown, parseSkillFrontmatter, ponchoDocsTool, readOpenAICodexSession, readSkillResource, realResponseText, recordStandardTurnEvent, renderAgentPrompt, resolveAgentIdentity, resolveCompactionConfig, resolveEnv, resolveMemoryConfig, resolveRunRequest, resolveSkillDirs, resolveStateConfig, runConversationTurn, slugifyStorageComponent, startOpenAICodexDeviceAuth, verifyEntriesParity, verifyTenantToken, withToolResultArchiveParam, writeOpenAICodexSession };
2374
+ export { type ActiveConversationRun, type ActiveSubagentRun, type AgentFrontmatter, AgentHarness, type AgentIdentity, type AgentLimitsConfig, type AgentModelConfig, AgentOrchestrator, type ApprovalEventItem, type ArchivedToolResult$1 as ArchivedToolResult, type BashConfig, BashEnvironmentManager, type BashExecutionLimits, type BuiltInToolToggles, CALLBACK_LOCK_STALE_MS, type CallbackStartedEntry, type CompactMessagesOptions, type CompactResult, type CompactionConfig, type ContinuationHooks, type Conversation, type ConversationCreateInit, type ConversationEntry, type ConversationState, type ConversationStatusSnapshot, type ConversationStore, type ConversationSummary, type CreateSkillToolsOptions, type CronJobConfig, DEFAULT_AGENT_DESCRIPTION, DEFAULT_AGENT_NAME, DEFAULT_MAX_STEPS, DEFAULT_MODEL_NAME, DEFAULT_MODEL_PROVIDER, DEFAULT_TEMPERATURE, DEFAULT_TIMEOUT, type DefaultAgentDefinitionOptions, type EventSink, type ExecuteTurnResult, type HarnessOptions, type HarnessRunOutput, type HistorySource, InMemoryConversationStore, InMemoryEngine, InMemoryStateStore, type IsolateBinding, type IsolateConfig, LocalMcpBridge, LocalUploadStore, MAX_CONCURRENT_SUBAGENTS, MAX_CONTINUATION_COUNT, MAX_SUBAGENT_CALLBACK_COUNT, MAX_SUBAGENT_NESTING, type MainMemory, type McpConfig, type MemoryConfig, type MemoryStore, type MessagingChannelConfig, type ModelProviderFactory, type MountProvider, type NetworkConfig, type NewConversationEntry, OPENAI_CODEX_CLIENT_ID, type OpenAICodexAuthConfig, type OpenAICodexDeviceAuthRequest, type OpenAICodexSession, type OrchestratorHooks, type OrchestratorOptions, type OtlpConfig, type OtlpOption, PONCHO_UPLOAD_SCHEME, type ParsedAgent, type PendingSubagentApproval, type PendingSubagentResult, type PendingToolCall, type PonchoConfig, PonchoFsAdapter, PostgresEngine, type ProviderConfig, type Recurrence, type RecurrenceType, type Reminder, type ReminderCreateInput, type ReminderStatus, type ReminderStore, type RemoteMcpServerConfig, type RunConversationTurnOpts, type RunConversationTurnResult, type RunOutcome, type RunRequest, type RuntimeRenderContext, S3UploadStore, STALE_SUBAGENT_THRESHOLD_MS, STORAGE_SCHEMA_VERSION, type SecretsStore, type SkillContextEntry, type SkillMetadata, type SkillSource, SqliteEngine, type StateConfig, type StateProviderName, type StateStore, type StorageConfig, type StorageEngine, type StorageFactoryOptions, type StorageProvider, type StoredApproval, type SubagentManager, type SubagentResult, type SubagentResultEntry, type SubagentSpawnResult, type SubagentSummary, type SubagentTranscript, type SubagentTranscriptMode, TOOL_RESULT_ARCHIVE_PARAM, type TelemetryConfig, TelemetryEmitter, type TenantTokenPayload, type ToolAccess, type ToolCall, ToolDispatcher, type ToolExecutionResult, type TurnDraftState, type TurnResultMetadata, type TurnSection, type UploadStore, type UploadsConfig, VFS_SCHEME, VercelBlobUploadStore, type VfsDirEntry, type VfsStat, type VirtualMount, abnormalEndResponse, appendEntriesSafe, applyTurnMetadata, buildAgentDirectoryName, buildApprovalCheckpoints, buildAssistantMetadata, buildSkillContextWindow, buildToolCompletedText, cloneSections, compactMessages, completeOpenAICodexDeviceAuth, computeNextOccurrence, createBashTool, createConversationStore, createConversationStoreFromEngine, createDefaultTools, createDeleteDirectoryTool, createDeleteTool, createEditTool, createMemoryStore, createMemoryStoreFromEngine, createMemoryTools, createModelProvider, createReminderStore, createReminderStoreFromEngine, createReminderTools, createSearchTools, createSecretsStore, createSkillTools, createStateStore, createStorageEngine, createSubagentTools, createTodoStoreFromEngine, createTurnDraftState, createUploadStore, createWriteTool, decodeFileInputData, defaultAgentDefinition, deleteOpenAICodexSession, deriveUploadKey, ensureAgentIdentity, estimateTokens, estimateTotalTokens, executeConversationTurn, findSafeSplitPoint, flushTurnDraft, generateAgentId, getAgentStoreDirectory, getModelContextWindow, getOpenAICodexAccessToken, getOpenAICodexAuthFilePath, getOpenAICodexRequiredScopes, getPendingSubagentResults, getPonchoStoreRoot, isMessageArray, jsonSchemaToZod, lastAssistantText, loadCanonicalHistory, loadPonchoConfig, loadRunHistory, loadSkillContext, loadSkillInstructions, loadSkillMetadata, loadSkillMetadataFromDirs, loadVfsSkillMetadata, mergeSkills, normalizeApprovalCheckpoint, normalizeOtlp, normalizeScriptPolicyPath, normalizeToolAccess, parseAgentFile, parseAgentMarkdown, parseSkillFrontmatter, ponchoDocsTool, readOpenAICodexSession, readSkillResource, realResponseText, recordStandardTurnEvent, renderAgentPrompt, resolveAgentIdentity, resolveCompactionConfig, resolveEnv, resolveMemoryConfig, resolveRunRequest, resolveSkillDirs, resolveStateConfig, runConversationTurn, slugifyStorageComponent, startOpenAICodexDeviceAuth, verifyTenantToken, withToolResultArchiveParam, writeOpenAICodexSession };