@poncho-ai/harness 0.40.1 → 0.42.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/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +137 -0
- package/dist/index.d.ts +92 -5
- package/dist/index.js +441 -36
- package/package.json +1 -1
- package/src/harness.ts +88 -18
- package/src/mcp.ts +102 -23
- package/src/orchestrator/index.ts +6 -0
- package/src/orchestrator/run-conversation-turn.ts +420 -0
- package/src/storage/engine.ts +2 -0
- package/src/storage/memory-engine.ts +1 -1
- package/src/storage/sql-dialect.ts +1 -1
- package/test/harness-config-injection.test.ts +63 -0
- package/test/harness-injection.test.ts +93 -0
- package/test/mcp-tenant-cache.test.ts +311 -0
- package/test/mcp.test.ts +174 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @poncho-ai/harness@0.
|
|
2
|
+
> @poncho-ai/harness@0.42.0 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
|
[34mCLI[39m tsup v8.5.1
|
|
9
9
|
[34mCLI[39m Target: es2022
|
|
10
10
|
[34mESM[39m Build start
|
|
11
|
-
[32mESM[39m [1mdist/index.js [22m[
|
|
11
|
+
[32mESM[39m [1mdist/index.js [22m[32m504.78 KB[39m
|
|
12
12
|
[32mESM[39m [1mdist/isolate-VY35DGLM.js [22m[32m49.43 KB[39m
|
|
13
|
-
[32mESM[39m ⚡️ Build success in
|
|
13
|
+
[32mESM[39m ⚡️ Build success in 228ms
|
|
14
14
|
[34mDTS[39m Build start
|
|
15
|
-
[32mDTS[39m ⚡️ Build success in
|
|
16
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
15
|
+
[32mDTS[39m ⚡️ Build success in 7856ms
|
|
16
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m79.11 KB[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,142 @@
|
|
|
1
1
|
# @poncho-ai/harness
|
|
2
2
|
|
|
3
|
+
## 0.42.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`39793b0`](https://github.com/cesr/poncho-ai/commit/39793b0ab11ed26f140af6fc9c0cd3e1b1c83fec) Thanks [@cesr](https://github.com/cesr)! - harness: extract `runConversationTurn` helper; refactor CLI to use it
|
|
8
|
+
|
|
9
|
+
Lifts the inline turn lifecycle from the CLI's
|
|
10
|
+
`POST /api/conversations/:id/messages` handler (~280 lines of orchestration)
|
|
11
|
+
into a new public helper at `@poncho-ai/harness`.
|
|
12
|
+
|
|
13
|
+
The helper handles the full conversation lifecycle for a primary chat
|
|
14
|
+
turn: load the conversation with archive, resolve canonical history,
|
|
15
|
+
upload files via the harness's upload store, build stable user/assistant
|
|
16
|
+
ids, persist the user message immediately, drive `executeConversationTurn`,
|
|
17
|
+
periodically persist the in-flight assistant draft on `step:completed`
|
|
18
|
+
and `tool:approval:required`, persist on `tool:approval:checkpoint` and
|
|
19
|
+
`run:completed` continuation, rebuild history on `compaction:completed`,
|
|
20
|
+
apply turn metadata on success, and persist partial state on
|
|
21
|
+
cancel/error.
|
|
22
|
+
|
|
23
|
+
Caller responsibilities (auth, active-run dedup, streaming, continuation
|
|
24
|
+
HTTP self-fetch, title inference) stay outside the helper — passed in
|
|
25
|
+
via opts or handled around the call. `opts.onEvent` is invoked for every
|
|
26
|
+
`AgentEvent` for downstream forwarding (SSE, WebSocket, telemetry, etc.).
|
|
27
|
+
|
|
28
|
+
The CLI's handler now delegates to `runConversationTurn` (drops from
|
|
29
|
+
~430 to ~150 lines). Consumers like PonchOS can call the same helper
|
|
30
|
+
to ship the _exact_ same conversation lifecycle without duplicating
|
|
31
|
+
the orchestration.
|
|
32
|
+
|
|
33
|
+
Public API additions:
|
|
34
|
+
- `runConversationTurn(opts): Promise<RunConversationTurnResult>`
|
|
35
|
+
- `RunConversationTurnOpts`
|
|
36
|
+
- `RunConversationTurnResult`
|
|
37
|
+
|
|
38
|
+
No behavior changes. The helper is a verbatim extraction of the CLI's
|
|
39
|
+
prior inline implementation.
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- [`111d24e`](https://github.com/cesr/poncho-ai/commit/111d24efaab054ef7543c396085f8f4d41e7976a) Thanks [@cesr](https://github.com/cesr)! - cli: include VFS skills in the chat input slash command menu
|
|
44
|
+
|
|
45
|
+
The `/api/slash-commands` endpoint was returning only repo-loaded skills,
|
|
46
|
+
so tenant-authored skills stored in the VFS (`/skills/<name>/SKILL.md`)
|
|
47
|
+
never appeared in the `/` autocomplete bar even though the agent could
|
|
48
|
+
already see and run them at conversation time.
|
|
49
|
+
|
|
50
|
+
The endpoint now resolves skills per-tenant via a new
|
|
51
|
+
`harness.listSkillsForTenant(tenantId)` and applies the same repo-wins
|
|
52
|
+
collision semantics used elsewhere in the harness.
|
|
53
|
+
|
|
54
|
+
## 0.41.0
|
|
55
|
+
|
|
56
|
+
### Minor Changes
|
|
57
|
+
|
|
58
|
+
- [#110](https://github.com/cesr/poncho-ai/pull/110) [`7d57a88`](https://github.com/cesr/poncho-ai/commit/7d57a88e55a49ec04de3dbd415b2440bb727e31f) Thanks [@cesr](https://github.com/cesr)! - harness: allow programmatic agent + storage injection (no AGENT.md required)
|
|
59
|
+
|
|
60
|
+
`HarnessOptions` gains two optional fields that let callers construct a
|
|
61
|
+
`Harness` without an `AGENT.md` on disk and without the
|
|
62
|
+
`ensureAgentIdentity` filesystem dance:
|
|
63
|
+
- `agentDefinition?: string | ParsedAgent` — raw markdown or a pre-parsed
|
|
64
|
+
agent. When provided, `initialize()` skips the `AGENT.md` read.
|
|
65
|
+
- `storageEngine?: StorageEngine` — pre-constructed engine; required
|
|
66
|
+
whenever `agentDefinition` is provided. The engine's `agentId` (now a
|
|
67
|
+
public readonly field on the `StorageEngine` interface) becomes the
|
|
68
|
+
source of truth for partitioning, and is mirrored onto
|
|
69
|
+
`parsedAgent.frontmatter.id` so existing downstream readers continue
|
|
70
|
+
to resolve correctly.
|
|
71
|
+
|
|
72
|
+
When neither field is provided, behaviour is unchanged: the harness
|
|
73
|
+
reads `AGENT.md` from `workingDir`, calls `ensureAgentIdentity`, and
|
|
74
|
+
constructs the `StorageEngine` internally.
|
|
75
|
+
|
|
76
|
+
`refreshAgentIfChanged()` short-circuits when an agent definition was
|
|
77
|
+
injected — callers who update an agent re-instantiate the harness
|
|
78
|
+
rather than relying on disk file watching.
|
|
79
|
+
|
|
80
|
+
This is the first of a small set of changes that lets `@poncho-ai/harness`
|
|
81
|
+
be embedded as a library by consumer SaaS apps where each user has
|
|
82
|
+
their own per-tenant agent state in a database, no filesystem layout.
|
|
83
|
+
|
|
84
|
+
- [#111](https://github.com/cesr/poncho-ai/pull/111) [`ac18616`](https://github.com/cesr/poncho-ai/commit/ac18616b864189c91d0957c72c537933497505f4) Thanks [@cesr](https://github.com/cesr)! - harness: allow programmatic `PonchoConfig` injection
|
|
85
|
+
|
|
86
|
+
`HarnessOptions` gains an optional `config?: PonchoConfig` field. When
|
|
87
|
+
provided, `initialize()` skips `loadPonchoConfig` (which imports
|
|
88
|
+
`poncho.config.js` from `workingDir`) and uses the supplied object
|
|
89
|
+
directly. Downstream resolvers (`resolveMemoryConfig`,
|
|
90
|
+
`resolveStateConfig`, etc.) run as today, so any validation/normalization
|
|
91
|
+
they perform applies to injected configs identically.
|
|
92
|
+
|
|
93
|
+
Behaviour is unchanged when the field is absent: the disk loader runs
|
|
94
|
+
as before.
|
|
95
|
+
|
|
96
|
+
This is part of a small series of changes that enables
|
|
97
|
+
`@poncho-ai/harness` to be embedded as a library by a consumer SaaS
|
|
98
|
+
where each user's agent configuration comes from a database row, not a
|
|
99
|
+
`poncho.config.js` on disk.
|
|
100
|
+
|
|
101
|
+
- [#112](https://github.com/cesr/poncho-ai/pull/112) [`c22416b`](https://github.com/cesr/poncho-ai/commit/c22416b3d4c4557277aeabf53e70877be6436e85) Thanks [@cesr](https://github.com/cesr)! - harness: cache MCP clients per `(serverName, tenantId)` instead of rebuilding per call
|
|
102
|
+
|
|
103
|
+
When a tenant resolves a different bearer token than the host's
|
|
104
|
+
`process.env` default for an MCP server, the per-call handler used to
|
|
105
|
+
construct a brand-new `StreamableHttpMcpRpcClient` on every tool call.
|
|
106
|
+
For builders this rarely triggered. For consumer/SaaS deployments where
|
|
107
|
+
**every** call resolves a different per-user token, every tool call
|
|
108
|
+
forced a fresh `initialize` round-trip — no session reuse, high
|
|
109
|
+
latency, and a behaviour the recently-added 404 session-retry can't
|
|
110
|
+
help with because there was nothing to retry.
|
|
111
|
+
|
|
112
|
+
`LocalMcpBridge` now keeps a `Map<key, { client, token, lastUsed }>`
|
|
113
|
+
keyed by `(serverName, tenantId)`. Lookups reuse the cached client when
|
|
114
|
+
the token is unchanged and the entry is within the configured idle TTL
|
|
115
|
+
(default 15 minutes). On token rotation or TTL expiry the entry is
|
|
116
|
+
evicted lazily and rebuilt. `stopLocalServers()` closes all cached
|
|
117
|
+
tenant clients alongside the server-default ones.
|
|
118
|
+
|
|
119
|
+
The TTL is configurable via a constructor option (`tenantClientTtlMs`)
|
|
120
|
+
for tests and tuning.
|
|
121
|
+
|
|
122
|
+
### Patch Changes
|
|
123
|
+
|
|
124
|
+
- [#109](https://github.com/cesr/poncho-ai/pull/109) [`4b5d974`](https://github.com/cesr/poncho-ai/commit/4b5d974345733ac9e68f36201dff7e7d8a8f0327) Thanks [@cesr](https://github.com/cesr)! - harness: re-initialize MCP session on 404 instead of staying wedged
|
|
125
|
+
|
|
126
|
+
Streamable-HTTP MCP clients with session state (e.g. Arcade's gateway
|
|
127
|
+
for Gmail / Google Calendar) issue an `Mcp-Session-Id` on initialize
|
|
128
|
+
and expire it after some idle window. The bridge cached `sessionId`
|
|
129
|
+
and `initialized` in process memory and never reset them, so once the
|
|
130
|
+
server returned 404 for a stale session every subsequent tool call
|
|
131
|
+
also 404'd until the host process restarted. Long-lived deployments
|
|
132
|
+
(e.g. Railway) hit this; serverless platforms masked it because each
|
|
133
|
+
invocation re-initialized.
|
|
134
|
+
|
|
135
|
+
The client now treats `404` with a stored `sessionId` as a session
|
|
136
|
+
expiry signal: it clears the session, re-runs `initialize`, and
|
|
137
|
+
retries the request once. A 404 from initialize itself (no session
|
|
138
|
+
yet) is still treated as a hard endpoint failure with no retry.
|
|
139
|
+
|
|
3
140
|
## 0.40.1
|
|
4
141
|
|
|
5
142
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LanguageModel } from 'ai';
|
|
2
2
|
import * as _poncho_ai_sdk from '@poncho-ai/sdk';
|
|
3
|
-
import { Message, ToolContext, ToolDefinition, JsonSchema, RunResult, AgentFailure, RunInput, AgentEvent } from '@poncho-ai/sdk';
|
|
3
|
+
import { Message, ToolContext, ToolDefinition, JsonSchema, RunResult, AgentFailure, RunInput, AgentEvent, FileInput } from '@poncho-ai/sdk';
|
|
4
4
|
export { ToolDefinition, defineTool } from '@poncho-ai/sdk';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { IFileSystem, BufferEncoding, FsStat, FileContent, MkdirOptions, RmOptions, CpOptions, Bash } from 'just-bash';
|
|
@@ -370,12 +370,26 @@ declare class LocalMcpBridge {
|
|
|
370
370
|
private readonly unavailableServers;
|
|
371
371
|
private readonly authFailedServers;
|
|
372
372
|
private envResolver?;
|
|
373
|
+
/**
|
|
374
|
+
* Per-tenant MCP client cache. For consumer/SaaS deployments where every
|
|
375
|
+
* call resolves a different bearer token, building a fresh
|
|
376
|
+
* `StreamableHttpMcpRpcClient` per call would force a fresh `initialize`
|
|
377
|
+
* round-trip every time. We keep one client per `(serverName, tenantId)`
|
|
378
|
+
* with TTL-based idle eviction; on token rotation we evict the entry
|
|
379
|
+
* lazily and rebuild.
|
|
380
|
+
*/
|
|
381
|
+
private readonly tenantClients;
|
|
382
|
+
/** Test/observability hook: bumped every time a new tenant client is constructed. */
|
|
383
|
+
tenantClientConstructions: number;
|
|
384
|
+
private readonly tenantClientTtlMs;
|
|
373
385
|
/**
|
|
374
386
|
* Set a resolver for per-tenant env vars (e.g. MCP auth tokens).
|
|
375
387
|
* Called by the harness after creating the secrets store.
|
|
376
388
|
*/
|
|
377
389
|
setEnvResolver(resolver: (tenantId: string | undefined, envName: string) => Promise<string | undefined>): void;
|
|
378
|
-
constructor(config: McpConfig | undefined
|
|
390
|
+
constructor(config: McpConfig | undefined, options?: {
|
|
391
|
+
tenantClientTtlMs?: number;
|
|
392
|
+
});
|
|
379
393
|
private getServerName;
|
|
380
394
|
private log;
|
|
381
395
|
/** Set of servers where discovery was deferred (no default token, has env resolver). */
|
|
@@ -389,6 +403,7 @@ declare class LocalMcpBridge {
|
|
|
389
403
|
private tryDeferredDiscovery;
|
|
390
404
|
startLocalServers(): Promise<void>;
|
|
391
405
|
stopLocalServers(): Promise<void>;
|
|
406
|
+
private getOrCreateTenantClient;
|
|
392
407
|
listServers(): RemoteMcpServerConfig[];
|
|
393
408
|
listRemoteServers(): RemoteMcpServerConfig[];
|
|
394
409
|
checkRemoteConnectivity(): Promise<Array<{
|
|
@@ -806,6 +821,8 @@ interface VfsDirEntry {
|
|
|
806
821
|
type: "file" | "directory" | "symlink";
|
|
807
822
|
}
|
|
808
823
|
interface StorageEngine {
|
|
824
|
+
/** Partition key: every read/write is scoped to this agent id. */
|
|
825
|
+
readonly agentId: string;
|
|
809
826
|
/** Run migrations and prepare the storage backend. */
|
|
810
827
|
initialize(): Promise<void>;
|
|
811
828
|
/** Gracefully release resources. */
|
|
@@ -1007,6 +1024,27 @@ interface HarnessOptions {
|
|
|
1007
1024
|
toolDefinitions?: ToolDefinition[];
|
|
1008
1025
|
modelProvider?: ModelProviderFactory;
|
|
1009
1026
|
uploadStore?: UploadStore;
|
|
1027
|
+
/**
|
|
1028
|
+
* Inject the agent definition directly instead of reading AGENT.md from
|
|
1029
|
+
* `workingDir`. Pass raw markdown (string) or a pre-parsed `ParsedAgent`.
|
|
1030
|
+
* When provided, `storageEngine` is also required — the engine's
|
|
1031
|
+
* `agentId` becomes the source of truth for partitioning, and the
|
|
1032
|
+
* filesystem identity dance (`ensureAgentIdentity`) is skipped.
|
|
1033
|
+
*/
|
|
1034
|
+
agentDefinition?: string | ParsedAgent;
|
|
1035
|
+
/**
|
|
1036
|
+
* Pre-constructed storage engine. When provided, the harness will not
|
|
1037
|
+
* create one internally. The engine's `agentId` is used wherever the
|
|
1038
|
+
* harness today reads `parsedAgent.frontmatter.id`.
|
|
1039
|
+
*/
|
|
1040
|
+
storageEngine?: StorageEngine;
|
|
1041
|
+
/**
|
|
1042
|
+
* Inject a `PonchoConfig` object directly instead of importing
|
|
1043
|
+
* `poncho.config.js` from `workingDir`. When provided, the disk-based
|
|
1044
|
+
* loader is skipped. Downstream resolvers (`resolveMemoryConfig`,
|
|
1045
|
+
* `resolveStateConfig`, etc.) run as today regardless of source.
|
|
1046
|
+
*/
|
|
1047
|
+
config?: PonchoConfig;
|
|
1010
1048
|
}
|
|
1011
1049
|
interface HarnessRunOutput {
|
|
1012
1050
|
runId: string;
|
|
@@ -1037,6 +1075,7 @@ declare class AgentHarness {
|
|
|
1037
1075
|
reminderStore?: ReminderStore;
|
|
1038
1076
|
secretsStore?: SecretsStore;
|
|
1039
1077
|
private loadedConfig?;
|
|
1078
|
+
private readonly injectedConfig?;
|
|
1040
1079
|
private loadedSkills;
|
|
1041
1080
|
private skillFingerprint;
|
|
1042
1081
|
private lastSkillRefreshAt;
|
|
@@ -1051,6 +1090,8 @@ declare class AgentHarness {
|
|
|
1051
1090
|
private _browserMod?;
|
|
1052
1091
|
private parsedAgent?;
|
|
1053
1092
|
private agentFileFingerprint;
|
|
1093
|
+
private injectedAgentDefinition?;
|
|
1094
|
+
private injectedStorageEngine;
|
|
1054
1095
|
private mcpBridge?;
|
|
1055
1096
|
private subagentManager?;
|
|
1056
1097
|
private readonly archivedToolResultsByConversation;
|
|
@@ -1145,6 +1186,10 @@ declare class AgentHarness {
|
|
|
1145
1186
|
name: string;
|
|
1146
1187
|
description: string;
|
|
1147
1188
|
}>;
|
|
1189
|
+
listSkillsForTenant(tenantId: string | undefined | null): Promise<Array<{
|
|
1190
|
+
name: string;
|
|
1191
|
+
description: string;
|
|
1192
|
+
}>>;
|
|
1148
1193
|
/**
|
|
1149
1194
|
* Wraps the run() generator with an OTel root span (invoke_agent) so all
|
|
1150
1195
|
* child spans (LLM calls via AI SDK, tool execution) group under one trace.
|
|
@@ -1279,7 +1324,7 @@ declare class TelemetryEmitter {
|
|
|
1279
1324
|
}
|
|
1280
1325
|
|
|
1281
1326
|
declare class InMemoryEngine implements StorageEngine {
|
|
1282
|
-
|
|
1327
|
+
readonly agentId: string;
|
|
1283
1328
|
private convs;
|
|
1284
1329
|
private mem;
|
|
1285
1330
|
private todoData;
|
|
@@ -1394,7 +1439,7 @@ declare class ConversationEgressMeter {
|
|
|
1394
1439
|
}
|
|
1395
1440
|
declare abstract class SqlStorageEngine implements StorageEngine {
|
|
1396
1441
|
protected readonly dialect: Dialect;
|
|
1397
|
-
|
|
1442
|
+
readonly agentId: string;
|
|
1398
1443
|
protected abstract readonly executor: QueryExecutor;
|
|
1399
1444
|
protected readonly egressMeter: ConversationEgressMeter;
|
|
1400
1445
|
constructor(dialect: Dialect, agentId: string);
|
|
@@ -1838,4 +1883,46 @@ declare class AgentOrchestrator {
|
|
|
1838
1883
|
recoverStaleSubagents(): Promise<void>;
|
|
1839
1884
|
}
|
|
1840
1885
|
|
|
1841
|
-
|
|
1886
|
+
interface RunConversationTurnOpts {
|
|
1887
|
+
/** Initialised harness instance. */
|
|
1888
|
+
harness: AgentHarness;
|
|
1889
|
+
/** Conversation store backing the turn (typically `engine.conversations` from a StorageEngine). */
|
|
1890
|
+
conversationStore: ConversationStore;
|
|
1891
|
+
conversationId: string;
|
|
1892
|
+
/** The user's new message text. Required (use `""` if you only want to attach files). */
|
|
1893
|
+
task: string;
|
|
1894
|
+
/**
|
|
1895
|
+
* Optional file attachments (FileInput.data is base64 / data URI / https URL).
|
|
1896
|
+
* Files are uploaded via `harness.uploadStore` first so the persisted user
|
|
1897
|
+
* message references stable URLs instead of fat base64 blobs.
|
|
1898
|
+
*/
|
|
1899
|
+
files?: FileInput[];
|
|
1900
|
+
/**
|
|
1901
|
+
* Extra parameters merged into runInput.parameters. Use this for recall
|
|
1902
|
+
* corpus, archive lookup keys, messaging metadata, etc. Do NOT include
|
|
1903
|
+
* `__activeConversationId`, `__ownerId`, or the tool-result-archive — the
|
|
1904
|
+
* helper sets those itself.
|
|
1905
|
+
*/
|
|
1906
|
+
parameters?: Record<string, unknown>;
|
|
1907
|
+
abortSignal?: AbortSignal;
|
|
1908
|
+
tenantId?: string | null;
|
|
1909
|
+
/** Per-event hook — called for every AgentEvent yielded by the run, in order. */
|
|
1910
|
+
onEvent?: (event: AgentEvent) => void | Promise<void>;
|
|
1911
|
+
}
|
|
1912
|
+
interface RunConversationTurnResult {
|
|
1913
|
+
/** runId of the most recent run started during this turn. */
|
|
1914
|
+
latestRunId: string;
|
|
1915
|
+
/** True if the run was cancelled (via abortSignal or run:cancelled event). */
|
|
1916
|
+
cancelled: boolean;
|
|
1917
|
+
/** True if the run errored. The error has been emitted via onEvent as run:error. */
|
|
1918
|
+
errored: boolean;
|
|
1919
|
+
/** True if the run requested a continuation. Caller is responsible for triggering the continuation. */
|
|
1920
|
+
continuation: boolean;
|
|
1921
|
+
/** True if the run paused at a tool-approval checkpoint. */
|
|
1922
|
+
checkpointed: boolean;
|
|
1923
|
+
contextTokens: number;
|
|
1924
|
+
contextWindow: number;
|
|
1925
|
+
}
|
|
1926
|
+
declare const runConversationTurn: (opts: RunConversationTurnOpts) => Promise<RunConversationTurnResult>;
|
|
1927
|
+
|
|
1928
|
+
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 CompactMessagesOptions, type CompactResult, type CompactionConfig, type ContinuationHooks, type Conversation, type ConversationCreateInit, type ConversationState, type ConversationStatusSnapshot, type ConversationStore, type ConversationSummary, type CreateSkillToolsOptions, type CronJobConfig, 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 NetworkConfig, 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 SubagentSpawnResult, type SubagentSummary, 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, 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, deleteOpenAICodexSession, deriveUploadKey, ensureAgentIdentity, estimateTokens, estimateTotalTokens, executeConversationTurn, findSafeSplitPoint, flushTurnDraft, generateAgentId, getAgentStoreDirectory, getModelContextWindow, getOpenAICodexAccessToken, getOpenAICodexAuthFilePath, getOpenAICodexRequiredScopes, getPonchoStoreRoot, isMessageArray, jsonSchemaToZod, loadCanonicalHistory, loadPonchoConfig, loadRunHistory, loadSkillContext, loadSkillInstructions, loadSkillMetadata, loadVfsSkillMetadata, mergeSkills, normalizeApprovalCheckpoint, normalizeOtlp, normalizeScriptPolicyPath, parseAgentFile, parseAgentMarkdown, parseSkillFrontmatter, ponchoDocsTool, readOpenAICodexSession, readSkillResource, recordStandardTurnEvent, renderAgentPrompt, resolveAgentIdentity, resolveCompactionConfig, resolveEnv, resolveMemoryConfig, resolveRunRequest, resolveSkillDirs, resolveStateConfig, runConversationTurn, slugifyStorageComponent, startOpenAICodexDeviceAuth, verifyTenantToken, withToolResultArchiveParam, writeOpenAICodexSession };
|