@letta-ai/letta-agent-sdk 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -11
- package/dist/app-server-session.d.ts +2 -1
- package/dist/app-server-session.d.ts.map +1 -1
- package/dist/cloud-session.d.ts +13 -0
- package/dist/cloud-session.d.ts.map +1 -1
- package/dist/dream/agent.d.ts +55 -0
- package/dist/dream/agent.d.ts.map +1 -0
- package/dist/dream/aggregate.d.ts +38 -0
- package/dist/dream/aggregate.d.ts.map +1 -0
- package/dist/dream/batching.d.ts +12 -0
- package/dist/dream/batching.d.ts.map +1 -0
- package/dist/dream/clone.d.ts +14 -0
- package/dist/dream/clone.d.ts.map +1 -0
- package/dist/dream/cursors.d.ts +7 -0
- package/dist/dream/cursors.d.ts.map +1 -0
- package/dist/dream/index.d.ts +67 -0
- package/dist/dream/index.d.ts.map +1 -0
- package/dist/dream/memfs.d.ts +75 -0
- package/dist/dream/memfs.d.ts.map +1 -0
- package/dist/dream/normalize-core.d.ts +67 -0
- package/dist/dream/normalize-core.d.ts.map +1 -0
- package/dist/dream/prompts.d.ts +26 -0
- package/dist/dream/prompts.d.ts.map +1 -0
- package/dist/dream/redact.d.ts +3 -0
- package/dist/dream/redact.d.ts.map +1 -0
- package/dist/dream/reflect.d.ts +49 -0
- package/dist/dream/reflect.d.ts.map +1 -0
- package/dist/dream/registry.d.ts +4 -0
- package/dist/dream/registry.d.ts.map +1 -0
- package/dist/dream/runner.d.ts +30 -0
- package/dist/dream/runner.d.ts.map +1 -0
- package/dist/dream/sdk-messages.d.ts +4 -0
- package/dist/dream/sdk-messages.d.ts.map +1 -0
- package/dist/dream/select.d.ts +6 -0
- package/dist/dream/select.d.ts.map +1 -0
- package/dist/dream/sources/claude-code.d.ts +18 -0
- package/dist/dream/sources/claude-code.d.ts.map +1 -0
- package/dist/dream/sources/codex.d.ts +20 -0
- package/dist/dream/sources/codex.d.ts.map +1 -0
- package/dist/dream/sources/letta.d.ts +3 -0
- package/dist/dream/sources/letta.d.ts.map +1 -0
- package/dist/dream/sources/openhands.d.ts +43 -0
- package/dist/dream/sources/openhands.d.ts.map +1 -0
- package/dist/dream/sources/transcript-file.d.ts +8 -0
- package/dist/dream/sources/transcript-file.d.ts.map +1 -0
- package/dist/dream/store-utils.d.ts +21 -0
- package/dist/dream/store-utils.d.ts.map +1 -0
- package/dist/dream/transcripts.d.ts +27 -0
- package/dist/dream/transcripts.d.ts.map +1 -0
- package/dist/dream/types.d.ts +48 -0
- package/dist/dream/types.d.ts.map +1 -0
- package/dist/dream/workers.d.ts +12 -0
- package/dist/dream/workers.d.ts.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7574 -4165
- package/dist/index.js.map +35 -11
- package/dist/remote-client-session-core.d.ts +7 -2
- package/dist/remote-client-session-core.d.ts.map +1 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/tests/advanced-session.d.ts +6 -0
- package/dist/tests/advanced-session.d.ts.map +1 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/types.d.ts +40 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -116,9 +116,12 @@ for await (const msg of session.stream()) {
|
|
|
116
116
|
### Constellation
|
|
117
117
|
|
|
118
118
|
Use `backend: "cloud"` to create or resume agents hosted on Constellation. If
|
|
119
|
-
no `environment` is provided, the SDK creates
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
no `environment` is provided, the SDK creates a managed sandbox, waits for it to
|
|
120
|
+
come online, and refreshes it while the session is active. Non-default
|
|
121
|
+
conversations request a conversation-scoped sandbox from supporting servers;
|
|
122
|
+
the default conversation and legacy servers retain the agent-scoped lifecycle.
|
|
123
|
+
Managed sandboxes are left for TTL cleanup by default so another session for the
|
|
124
|
+
same conversation can reconnect to them.
|
|
122
125
|
|
|
123
126
|
```ts
|
|
124
127
|
const client = new LettaAgentClient({
|
|
@@ -127,8 +130,8 @@ const client = new LettaAgentClient({
|
|
|
127
130
|
sandbox: {
|
|
128
131
|
// Optional: defaults to a 5-minute refresh TTL.
|
|
129
132
|
ttlMinutes: 5,
|
|
130
|
-
// Optional: defaults
|
|
131
|
-
terminateOnClose:
|
|
133
|
+
// Optional: defaults false. Set true only with exclusive ownership.
|
|
134
|
+
terminateOnClose: false,
|
|
132
135
|
},
|
|
133
136
|
});
|
|
134
137
|
|
|
@@ -138,7 +141,7 @@ const agentId = await client.createAgent({
|
|
|
138
141
|
});
|
|
139
142
|
|
|
140
143
|
await using session = client.resumeSession(agentId, {
|
|
141
|
-
permissionMode: "
|
|
144
|
+
permissionMode: "unrestricted",
|
|
142
145
|
});
|
|
143
146
|
|
|
144
147
|
await session.send("Summarize this repository.");
|
|
@@ -180,10 +183,52 @@ await using session = client.resumeSession(agentId, {
|
|
|
180
183
|
`environment` also accepts `{ id: "env-..." }` for an environment record or
|
|
181
184
|
`{ deviceId: "device-..." }` for a stable device selector.
|
|
182
185
|
|
|
183
|
-
`environment` and `sandbox` are mutually exclusive.
|
|
184
|
-
|
|
185
|
-
`sandbox.terminateOnClose:
|
|
186
|
-
|
|
186
|
+
`environment` and `sandbox` are mutually exclusive. Conversation-scoped
|
|
187
|
+
sandboxes refresh and terminate by sandbox ID. Legacy agent-scoped sandboxes
|
|
188
|
+
retain the latest-active ownership check. Pass `sandbox.terminateOnClose: true`
|
|
189
|
+
to request best-effort eager cleanup, but only when no other session or
|
|
190
|
+
reconnecting client needs the sandbox.
|
|
191
|
+
|
|
192
|
+
If Cloud reaps a conversation-scoped sandbox before the next refresh,
|
|
193
|
+
`send()` throws `CloudManagedSandboxExpiredError` before transmitting the turn.
|
|
194
|
+
Close the old SDK session and resume the same conversation to create a fresh
|
|
195
|
+
connection, then retry safely:
|
|
196
|
+
|
|
197
|
+
```ts
|
|
198
|
+
import {
|
|
199
|
+
CloudManagedSandboxExpiredError,
|
|
200
|
+
LettaAgentClient,
|
|
201
|
+
} from "@letta-ai/letta-agent-sdk";
|
|
202
|
+
|
|
203
|
+
const client = new LettaAgentClient({
|
|
204
|
+
backend: "cloud",
|
|
205
|
+
apiKey: process.env.LETTA_API_KEY,
|
|
206
|
+
});
|
|
207
|
+
const conversationId = "conv-123";
|
|
208
|
+
let session = client.resumeSession(conversationId);
|
|
209
|
+
|
|
210
|
+
async function sendWithSandboxRecovery(message: string): Promise<void> {
|
|
211
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
212
|
+
try {
|
|
213
|
+
await session.send(message);
|
|
214
|
+
for await (const event of session.stream()) {
|
|
215
|
+
if (event.type === "assistant") console.log(event.content);
|
|
216
|
+
}
|
|
217
|
+
return;
|
|
218
|
+
} catch (error) {
|
|
219
|
+
if (!(error instanceof CloudManagedSandboxExpiredError) || attempt > 0) {
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
session.close();
|
|
223
|
+
session = client.resumeSession(conversationId);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Only retry automatically for this pre-send expiration error. If a connection
|
|
230
|
+
fails after `send()` succeeds, inspect conversation history before retrying
|
|
231
|
+
because the original message may already have reached the runtime.
|
|
187
232
|
|
|
188
233
|
By default, websocket authentication uses `Authorization` headers. Set
|
|
189
234
|
`webSocketAuth: "query"` for browser-style websocket clients that cannot send
|
|
@@ -238,7 +283,7 @@ const session = client.resumeSession("agent-123", {
|
|
|
238
283
|
// For local sessions this may be a local path; for remote/Constellation
|
|
239
284
|
// sessions, use a path inside the selected runtime environment.
|
|
240
285
|
cwd: "/workspace/project",
|
|
241
|
-
permissionMode: "
|
|
286
|
+
permissionMode: "unrestricted",
|
|
242
287
|
dreaming: {
|
|
243
288
|
trigger: "step-count", // off | step-count | compaction-event
|
|
244
289
|
stepCount: 8,
|
|
@@ -275,6 +320,85 @@ const sync = await session.sendCommand(
|
|
|
275
320
|
);
|
|
276
321
|
```
|
|
277
322
|
|
|
323
|
+
## Dreaming
|
|
324
|
+
|
|
325
|
+
The dreaming API has three explicit components: collect normalized transcript
|
|
326
|
+
snapshots, initialize a guarded memory filesystem, then run a dream over the
|
|
327
|
+
exact transcript list. Reflection batches edit isolated clones and a final
|
|
328
|
+
aggregation pass synthesizes their diffs into the dream agent's MemFS.
|
|
329
|
+
|
|
330
|
+
```typescript
|
|
331
|
+
import {
|
|
332
|
+
LettaAgentClient,
|
|
333
|
+
collectTranscripts,
|
|
334
|
+
dream,
|
|
335
|
+
initDreamAgent,
|
|
336
|
+
} from "@letta-ai/letta-agent-sdk";
|
|
337
|
+
|
|
338
|
+
const client = new LettaAgentClient({
|
|
339
|
+
backend: "local",
|
|
340
|
+
appServer: { harnessBackend: "api" },
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
// 1. Collect immutable snapshots after an exclusive cutoff. Limits apply per
|
|
344
|
+
// source, so this selects the five newest eligible sessions from each store.
|
|
345
|
+
const transcripts = await collectTranscripts({
|
|
346
|
+
after: "2026-07-01T00:00:00Z",
|
|
347
|
+
sources: [
|
|
348
|
+
{ type: "claude", limit: 5 },
|
|
349
|
+
{ type: "codex", limit: 5 },
|
|
350
|
+
],
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
// 2. Initialize the complete starting MemFS. Seeded files may be modified but
|
|
354
|
+
// not deleted. New files and directories are allowed only below skills/.
|
|
355
|
+
const agent = await initDreamAgent(client, {
|
|
356
|
+
model: "anthropic/claude-opus-4-8",
|
|
357
|
+
memfs: {
|
|
358
|
+
directories: ["skills"],
|
|
359
|
+
files: {
|
|
360
|
+
"system/project/AGENTS.md":
|
|
361
|
+
"---\ndescription: Project guidance\n---\n\n# Project guidance\n",
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
guard: {
|
|
365
|
+
allowedNewFilePrefixes: ["skills"],
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
// 3. Run against the exact snapshots. The optional prompt is appended to each
|
|
370
|
+
// reflection batch, not to the aggregation pass.
|
|
371
|
+
const result = await dream({
|
|
372
|
+
client,
|
|
373
|
+
agentId: agent.agentId,
|
|
374
|
+
transcripts,
|
|
375
|
+
reflectionPrompt: "Only retain learnings relevant to this project.",
|
|
376
|
+
});
|
|
377
|
+
|
|
378
|
+
if (result.kind === "completed") {
|
|
379
|
+
console.log(result.success, result.runRoot, result.aggregation.report);
|
|
380
|
+
}
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Available transcript sources include `claude`, `codex`, `openhands`, `letta`,
|
|
384
|
+
and already-normalized `transcript` files. `after` compares against each
|
|
385
|
+
session's end time and is exclusive; `limit` keeps the latest eligible sessions
|
|
386
|
+
for that source spec. Use `planOnly: true` to inspect transcript selection and
|
|
387
|
+
batch packing without running agents.
|
|
388
|
+
|
|
389
|
+
The pre-commit guard is installed on the canonical MemFS and every reflection
|
|
390
|
+
clone. The SDK also validates every commit and the final working tree after
|
|
391
|
+
each run, so `--no-verify` cannot bypass the policy. For finer control, pass
|
|
392
|
+
`guard.allowedOperations` rules for exact or recursive paths. Every run records
|
|
393
|
+
batch inputs, output clones, diffs, normalized worker trajectories, reports,
|
|
394
|
+
and an immutable final aggregate snapshot under `runRoot`. See
|
|
395
|
+
[`examples/dream.ts`](./examples/dream.ts).
|
|
396
|
+
|
|
397
|
+
OpenHands conversations retain incremental cursors in the dream agent's SDK
|
|
398
|
+
state; later dreams skip records at or before the last successfully reflected
|
|
399
|
+
timestamp. Claude and Codex sessions are finite snapshots and remain
|
|
400
|
+
cursor-free.
|
|
401
|
+
|
|
278
402
|
## Links
|
|
279
403
|
|
|
280
404
|
- Docs: https://docs.letta.com/letta-agent-sdk
|
|
@@ -52,7 +52,8 @@ export declare function registerAppServerControlRequestHandler(config: {
|
|
|
52
52
|
export declare class AppServerRuntimeController implements RemoteClientRuntimeController {
|
|
53
53
|
private readonly client;
|
|
54
54
|
private readonly options;
|
|
55
|
-
|
|
55
|
+
private readonly clientToolAllowlist?;
|
|
56
|
+
constructor(client: AppServerClient, options: AppServerSessionOptions, clientToolAllowlist?: readonly string[] | undefined);
|
|
56
57
|
onMessage(handler: (message: ProtocolMessage, channel?: string) => void): () => void;
|
|
57
58
|
send(command: Record<string, unknown>): void;
|
|
58
59
|
sendTurnMessage(runtime: RuntimeScope, message: SendMessage, options: RuntimeSendTurnOptions): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-server-session.d.ts","sourceRoot":"","sources":["../src/app-server-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,gCAAgC,EAEtC,MAAM,wCAAwC,CAAC;AAMhD,OAAO,EACL,uBAAuB,
|
|
1
|
+
{"version":3,"file":"app-server-session.d.ts","sourceRoot":"","sources":["../src/app-server-session.ts"],"names":[],"mappings":"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"}
|
package/dist/cloud-session.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { RemoteClientSessionCore, type RuntimeSessionInit, type RuntimeSessionMode } from "./remote-client-session-core.js";
|
|
2
2
|
import type { CreateAgentOptions, LettaCodeClientSessionOptions, LettaCodeCloudClientOptions } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* The Cloud API reaped a conversation-scoped managed sandbox before the SDK
|
|
5
|
+
* could refresh it. The failed refresh happens before the next turn is sent,
|
|
6
|
+
* so callers can safely create a new SDK session for {@link conversationId}
|
|
7
|
+
* and retry that turn.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CloudManagedSandboxExpiredError extends Error {
|
|
10
|
+
readonly sandboxId: string;
|
|
11
|
+
readonly conversationId: string;
|
|
12
|
+
readonly code: "managed_sandbox_expired";
|
|
13
|
+
constructor(sandboxId: string, conversationId: string);
|
|
14
|
+
}
|
|
3
15
|
type CloudSessionMode = Extract<RuntimeSessionMode, {
|
|
4
16
|
kind: "session";
|
|
5
17
|
}>;
|
|
@@ -15,6 +27,7 @@ export declare class CloudEnvironmentSession extends RemoteClientSessionCore {
|
|
|
15
27
|
private managedSandbox;
|
|
16
28
|
private sandboxRefreshTimer;
|
|
17
29
|
private sandboxRefreshInFlight;
|
|
30
|
+
private sandboxLifecycleClosing;
|
|
18
31
|
private attachedRepositoryIds;
|
|
19
32
|
private readonly cloudMode;
|
|
20
33
|
constructor(cloudOptions: LettaCodeCloudClientOptions, mode: CloudSessionMode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-session.d.ts","sourceRoot":"","sources":["../src/cloud-session.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,uBAAuB,EAIvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAEV,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAM5B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-session.d.ts","sourceRoot":"","sources":["../src/cloud-session.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,uBAAuB,EAIvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAEV,kBAAkB,EAClB,6BAA6B,EAC7B,2BAA2B,EAM5B,MAAM,YAAY,CAAC;AAwFpB;;;;;GAKG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IAItD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAJjC,QAAQ,CAAC,IAAI,EAAG,yBAAyB,CAAU;gBAGxC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM;CAOlC;AAED,KAAK,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,EAAE;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAmJzE,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI,CAerF;AA8VD,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,2BAA2B,EAC1C,YAAY,EAAE,kBAAkB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,6BAA6B,GACrC,IAAI,CAuBN;AAED,qBAAa,uBAAwB,SAAQ,uBAAuB;IAahE,OAAO,CAAC,QAAQ,CAAC,YAAY;IAZ/B,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,yBAAyB,CAA6B;IAC9D,OAAO,CAAC,2BAA2B,CAA6B;IAChE,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,mBAAmB,CAA+C;IAC1E,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,qBAAqB,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;gBAG1B,YAAY,EAAE,2BAA2B,EAC1D,IAAI,EAAE,gBAAgB;cAWC,2BAA2B,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAgErE,iBAAiB;cA8BN,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;cAUxC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;cAMjC,WAAW,IAAI,IAAI;YASxB,cAAc;YAoCd,yBAAyB;YAsBzB,0BAA0B;IAYxC,OAAO,CAAC,mBAAmB;YAkBb,qBAAqB;YAoBrB,sBAAsB;YAYtB,mBAAmB;YAenB,qBAAqB;YAYrB,kBAAkB;YAkBlB,oBAAoB;YAepB,2BAA2B;YAc3B,yBAAyB;YAQzB,8BAA8B;YAiC9B,oBAAoB;YA2DpB,qBAAqB;YAcrB,yBAAyB;YAuDzB,uBAAuB;YAqCvB,+BAA+B;IA4B7C,OAAO,CAAC,0BAA0B;IAelC,OAAO,CAAC,yBAAyB;YAMnB,qBAAqB;IAuBnC,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;CAG/B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { LettaAgentClient } from "../client.js";
|
|
2
|
+
import { type MemfsGuardInstallation, type MemfsOperationRule, type MemfsStructure, type MemfsWritePolicy } from "./memfs.js";
|
|
3
|
+
export interface DreamAgentConfig {
|
|
4
|
+
schema_version: "v1";
|
|
5
|
+
name?: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
/** Model for the dream agent and its lazily-created reflection worker. */
|
|
8
|
+
model?: string;
|
|
9
|
+
reflectorAgentId?: string;
|
|
10
|
+
memfs: {
|
|
11
|
+
/** Empty directories that initialization must preserve across clones. */
|
|
12
|
+
directories: readonly string[];
|
|
13
|
+
/** Persistent write policy enforced for reflection and aggregation. */
|
|
14
|
+
policy: MemfsWritePolicy;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface DreamAgentGuardOptions {
|
|
18
|
+
/** Directory prefixes under which agents may create new files/folders. */
|
|
19
|
+
allowedNewFilePrefixes?: readonly string[];
|
|
20
|
+
/** Optional exact/recursive overrides for create, modify, and delete. */
|
|
21
|
+
allowedOperations?: readonly MemfsOperationRule[];
|
|
22
|
+
}
|
|
23
|
+
export interface InitDreamAgentOptions {
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Model for the dream agent and its reflection worker. */
|
|
26
|
+
model?: string;
|
|
27
|
+
/** Complete initial contents and declared empty directories for MemFS. */
|
|
28
|
+
memfs?: MemfsStructure;
|
|
29
|
+
/** Restrict what later reflection/aggregation sessions may write. */
|
|
30
|
+
guard?: DreamAgentGuardOptions;
|
|
31
|
+
/** Override the harness agents directory (primarily for tests). */
|
|
32
|
+
agentsDir?: string;
|
|
33
|
+
/** Reuse an existing memfs-enabled Letta agent instead of creating one. */
|
|
34
|
+
agentId?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface LoadedDreamAgent {
|
|
37
|
+
agentId: string;
|
|
38
|
+
memoryDir: string;
|
|
39
|
+
stateDir: string;
|
|
40
|
+
runsDir: string;
|
|
41
|
+
configPath: string;
|
|
42
|
+
config: DreamAgentConfig;
|
|
43
|
+
}
|
|
44
|
+
export declare function saveDreamAgentConfig(agent: LoadedDreamAgent): Promise<void>;
|
|
45
|
+
export declare function loadDreamAgent(agentId: string, options?: {
|
|
46
|
+
agentsDir?: string;
|
|
47
|
+
}): Promise<LoadedDreamAgent>;
|
|
48
|
+
/** Reinstall the guard and recreate declared empty directories before a run. */
|
|
49
|
+
export declare function prepareDreamAgentMemfs(agent: LoadedDreamAgent): Promise<MemfsGuardInstallation>;
|
|
50
|
+
/**
|
|
51
|
+
* Create or bind a memfs-enabled Letta agent, seed its initial MemFS, commit
|
|
52
|
+
* that seed, and install the requested write guard.
|
|
53
|
+
*/
|
|
54
|
+
export declare function initDreamAgent(client: LettaAgentClient, options?: InitDreamAgentOptions): Promise<LoadedDreamAgent>;
|
|
55
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/dream/agent.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAML,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE;QACL,yEAAyE;QACzE,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;QAC/B,uEAAuE;QACvE,MAAM,EAAE,gBAAgB,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,qEAAqE;IACrE,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAqBD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,OAAO,CAAC,gBAAgB,CAAC,CAwB3B;AAED,gFAAgF;AAChF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,sBAAsB,CAAC,CAOjC;AAkCD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,gBAAgB,CAAC,CAgE3B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { LettaAgentClient } from "../client.js";
|
|
2
|
+
import { type MemfsWritePolicy } from "./memfs.js";
|
|
3
|
+
import type { BatchReflectionResult } from "./reflect.js";
|
|
4
|
+
export interface DreamAggregationOutcome {
|
|
5
|
+
success: boolean;
|
|
6
|
+
/** The aggregator's final report (or the skip reason). */
|
|
7
|
+
report: string;
|
|
8
|
+
error?: string;
|
|
9
|
+
conversationId?: string;
|
|
10
|
+
/** Commits the aggregator landed on the target, relative to the base. */
|
|
11
|
+
commitCount: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function runDreamAggregation(params: {
|
|
14
|
+
client: LettaAgentClient;
|
|
15
|
+
aggregatorAgentId: string;
|
|
16
|
+
/** The target memory filesystem the synthesis lands on. */
|
|
17
|
+
memoryDir: string;
|
|
18
|
+
runRoot: string;
|
|
19
|
+
reflections: BatchReflectionResult[];
|
|
20
|
+
/** Write policy enforced on the canonical MemFS and checked afterward. */
|
|
21
|
+
memfsPolicy: MemfsWritePolicy;
|
|
22
|
+
/**
|
|
23
|
+
* Persona text prepended to the prompt when the aggregating agent doesn't
|
|
24
|
+
* carry a dedicated aggregator persona block (a dream agent synthesizing
|
|
25
|
+
* its own memory).
|
|
26
|
+
*/
|
|
27
|
+
personaPreamble?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Additional caller instruction. The aggregator is the only stage that
|
|
30
|
+
* edits the target memory, so instructions about maintaining specific
|
|
31
|
+
* files (e.g. a projected AGENTS.md) must reach it here.
|
|
32
|
+
*/
|
|
33
|
+
instruction?: string;
|
|
34
|
+
/** Abort: close the aggregator session and stop nudging. */
|
|
35
|
+
signal?: AbortSignal;
|
|
36
|
+
log?: (line: string) => void;
|
|
37
|
+
}): Promise<DreamAggregationOutcome>;
|
|
38
|
+
//# sourceMappingURL=aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../src/dream/aggregate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAI1D,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,MAAM,EAAE,gBAAgB,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,0EAA0E;IAC1E,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA+PnC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DiscoveredSession } from "./types.js";
|
|
2
|
+
export declare const DEFAULT_BATCH_TOKEN_BUDGET = 60000;
|
|
3
|
+
export declare const DEFAULT_MAX_SESSIONS_PER_BATCH = 10;
|
|
4
|
+
export interface DreamBatch {
|
|
5
|
+
index: number;
|
|
6
|
+
sessions: DiscoveredSession[];
|
|
7
|
+
estTokens: number;
|
|
8
|
+
startTime: string;
|
|
9
|
+
endTime: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function packDreamBatches(sessions: DiscoveredSession[], tokenBudget: number, maxSessions: number): DreamBatch[];
|
|
12
|
+
//# sourceMappingURL=batching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batching.d.ts","sourceRoot":"","sources":["../../src/dream/batching.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,8BAA8B,KAAK,CAAC;AAEjD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,UAAU,EAAE,CAmCd"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function gitOutput(cwd: string, args: string[]): Promise<string>;
|
|
2
|
+
/**
|
|
3
|
+
* Clone the memory filesystem into outputDir and return the base revision the
|
|
4
|
+
* clone starts from (the revision batch diffs are taken against).
|
|
5
|
+
*/
|
|
6
|
+
export declare function cloneMemoryTree(memoryDir: string, outputDir: string): Promise<string>;
|
|
7
|
+
/** Commits past the base revision, and whether the tree has uncommitted edits. */
|
|
8
|
+
export declare function inspectMemoryTree(memoryDir: string, baseRevision: string): Promise<{
|
|
9
|
+
commitCount: number;
|
|
10
|
+
dirty: boolean;
|
|
11
|
+
}>;
|
|
12
|
+
/** Record an immutable checkout of the final memory tree with a run. */
|
|
13
|
+
export declare function snapshotMemoryTree(memoryDir: string, outputDir: string): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=clone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../src/dream/clone.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAelD;AAED,wEAAwE;AACxE,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** sessionKey ("openhands:<conversation-id>") → last reflected timestamp. */
|
|
2
|
+
export type DreamCursors = Record<string, {
|
|
3
|
+
reflectedThrough: string;
|
|
4
|
+
}>;
|
|
5
|
+
export declare function loadDreamCursors(stateDir: string): Promise<DreamCursors>;
|
|
6
|
+
export declare function saveDreamCursors(stateDir: string, cursors: DreamCursors): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=cursors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursors.d.ts","sourceRoot":"","sources":["../../src/dream/cursors.ts"],"names":[],"mappings":"AAiBA,6EAA6E;AAC7E,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { LettaAgentClient } from "../client.js";
|
|
2
|
+
import { type DreamBatch } from "./batching.js";
|
|
3
|
+
import { type DreamAggregationOutcome } from "./aggregate.js";
|
|
4
|
+
import { type BatchReflectionResult } from "./reflect.js";
|
|
5
|
+
import type { DiscoveredSession, NormalizedSession } from "./types.js";
|
|
6
|
+
export type { DreamBatch } from "./batching.js";
|
|
7
|
+
export type { DreamAggregationOutcome } from "./aggregate.js";
|
|
8
|
+
export type { BatchReflectionResult } from "./reflect.js";
|
|
9
|
+
export { packDreamBatches } from "./batching.js";
|
|
10
|
+
export { AGGREGATOR_PERSONA, REFLECTION_SYSTEM_PROMPT, } from "./prompts.js";
|
|
11
|
+
export { getTrajectorySource, listTrajectorySourceTypes } from "./registry.js";
|
|
12
|
+
export { type DreamAgentConfig, type DreamAgentGuardOptions, type InitDreamAgentOptions, type LoadedDreamAgent, initDreamAgent, loadDreamAgent, } from "./agent.js";
|
|
13
|
+
export { createMemfsWritePolicy, installMemfsGuard, recreateMemfsDirectories, type MemfsGuardInstallation, type MemfsOperation, type MemfsOperationRule, type MemfsStructure, type MemfsWritePolicy, } from "./memfs.js";
|
|
14
|
+
export { collectTranscripts, type CollectTranscriptsOptions, type Transcript, type TranscriptSourceSpec, } from "./transcripts.js";
|
|
15
|
+
export type { DiscoveredSession, NormalizedRecord, NormalizedSession, TrajectorySource, } from "./types.js";
|
|
16
|
+
export interface DreamOptions {
|
|
17
|
+
client: LettaAgentClient;
|
|
18
|
+
/** Initialized dream-agent id returned by initDreamAgent(). */
|
|
19
|
+
agentId: string;
|
|
20
|
+
/** Immutable normalized transcript snapshots to reflect on. */
|
|
21
|
+
transcripts: readonly NormalizedSession[];
|
|
22
|
+
/**
|
|
23
|
+
* Additional caller instruction for the run, provided to every reflection
|
|
24
|
+
* batch AND to the aggregation pass. The aggregator is the stage that
|
|
25
|
+
* lands the final commit on the memory filesystem, so instructions about
|
|
26
|
+
* maintaining specific files (e.g. a projected AGENTS.md) reach it too —
|
|
27
|
+
* an instruction that steered only the batches would be unreliable.
|
|
28
|
+
*/
|
|
29
|
+
instruction?: string;
|
|
30
|
+
/** Override the harness agents directory (tests). */
|
|
31
|
+
agentsDir?: string;
|
|
32
|
+
/** Per-batch token budget (default 60k, measured on normalized content). */
|
|
33
|
+
batchTokenBudget?: number;
|
|
34
|
+
/** Maximum transcripts in one batch (default 10). */
|
|
35
|
+
maxTranscriptsPerBatch?: number;
|
|
36
|
+
/** Concurrent reflection sessions; default: every batch at once. */
|
|
37
|
+
concurrency?: number;
|
|
38
|
+
/** Preview cursor filtering and batch packing without running agents. */
|
|
39
|
+
planOnly?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Abort the run: in-flight reflector/aggregator sessions are closed, no
|
|
42
|
+
* new batches start, the run's artifacts (clones, runRoot) are removed,
|
|
43
|
+
* cursors are NOT advanced, and dream() rejects with the abort reason.
|
|
44
|
+
* Shutting down a spawned app-server remains the caller's job via
|
|
45
|
+
* client.close().
|
|
46
|
+
*/
|
|
47
|
+
signal?: AbortSignal;
|
|
48
|
+
log?: (line: string) => void;
|
|
49
|
+
}
|
|
50
|
+
export type DreamResult = {
|
|
51
|
+
kind: "nothing_to_dream";
|
|
52
|
+
} | {
|
|
53
|
+
kind: "plan";
|
|
54
|
+
transcripts: DiscoveredSession[];
|
|
55
|
+
batches: DreamBatch[];
|
|
56
|
+
} | {
|
|
57
|
+
kind: "completed";
|
|
58
|
+
runRoot: string;
|
|
59
|
+
success: boolean;
|
|
60
|
+
transcripts: DiscoveredSession[];
|
|
61
|
+
batches: BatchReflectionResult[];
|
|
62
|
+
aggregation: DreamAggregationOutcome;
|
|
63
|
+
reflectorAgentId: string;
|
|
64
|
+
aggregatorAgentId: string;
|
|
65
|
+
};
|
|
66
|
+
export declare function dream(options: DreamOptions): Promise<DreamResult>;
|
|
67
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dream/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,cAAc,CAAC;AAUtB,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAOpB,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,oBAAoB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,gBAAgB,CAAC;IACzB,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC1C;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9B;AAKD,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IACE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,WAAW,EAAE,uBAAuB,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAuCN,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAyKvE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export interface MemfsStructure {
|
|
2
|
+
/** UTF-8 file contents keyed by path relative to the MemFS root. */
|
|
3
|
+
files?: Readonly<Record<string, string>>;
|
|
4
|
+
/** Directories to materialize even when they contain no tracked files. */
|
|
5
|
+
directories?: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export interface ValidatedMemfsStructure {
|
|
8
|
+
files: readonly {
|
|
9
|
+
path: string;
|
|
10
|
+
content: string;
|
|
11
|
+
}[];
|
|
12
|
+
directories: readonly string[];
|
|
13
|
+
}
|
|
14
|
+
export type MemfsOperation = "create" | "modify" | "delete";
|
|
15
|
+
export interface MemfsOperationRule {
|
|
16
|
+
/** Exact relative path, or directory path when recursive is true. */
|
|
17
|
+
path: string;
|
|
18
|
+
recursive?: boolean;
|
|
19
|
+
operations: readonly MemfsOperation[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Default policy semantics:
|
|
23
|
+
* - paths in existingPaths may be modified (but not created or deleted);
|
|
24
|
+
* - paths below allowedNewFilePrefixes may be created, modified, or deleted;
|
|
25
|
+
* - everything else is denied.
|
|
26
|
+
*
|
|
27
|
+
* A matching allowedOperations rule overrides those defaults. This permits,
|
|
28
|
+
* for example, an existing AGENTS.md to be modifiable but not deletable.
|
|
29
|
+
*/
|
|
30
|
+
export interface MemfsWritePolicy {
|
|
31
|
+
existingPaths: readonly string[];
|
|
32
|
+
allowedNewFilePrefixes?: readonly string[];
|
|
33
|
+
allowedOperations?: readonly MemfsOperationRule[];
|
|
34
|
+
/** Empty directories that must be recreated after a Git clone. */
|
|
35
|
+
declaredDirectories?: readonly string[];
|
|
36
|
+
}
|
|
37
|
+
export interface MemfsGuardInstallation {
|
|
38
|
+
hooksDir: string;
|
|
39
|
+
preCommitPath: string;
|
|
40
|
+
postCommitPath: string;
|
|
41
|
+
/** Directories present when the guard was installed, excluding .git. */
|
|
42
|
+
baselineDirectories: readonly string[];
|
|
43
|
+
}
|
|
44
|
+
export interface MemfsPolicyViolation {
|
|
45
|
+
path: string;
|
|
46
|
+
operation?: MemfsOperation;
|
|
47
|
+
source: "commit" | "working-tree" | "untracked" | "directory";
|
|
48
|
+
commit?: string;
|
|
49
|
+
reason: string;
|
|
50
|
+
}
|
|
51
|
+
export interface MemfsValidationResult {
|
|
52
|
+
valid: boolean;
|
|
53
|
+
violations: readonly MemfsPolicyViolation[];
|
|
54
|
+
}
|
|
55
|
+
export declare function validateMemfsStructure(structure: MemfsStructure): ValidatedMemfsStructure;
|
|
56
|
+
export declare function createMemfsWritePolicy(structure: MemfsStructure | ValidatedMemfsStructure, options?: {
|
|
57
|
+
allowedNewFilePrefixes?: readonly string[];
|
|
58
|
+
allowedOperations?: readonly MemfsOperationRule[];
|
|
59
|
+
}): MemfsWritePolicy;
|
|
60
|
+
export declare function validateMemfsWritePolicy(policy: MemfsWritePolicy): MemfsWritePolicy;
|
|
61
|
+
export declare function recreateMemfsDirectories(memoryDir: string, directories: readonly string[]): Promise<readonly string[]>;
|
|
62
|
+
export declare function materializeMemfsStructure(memoryDir: string, structure: MemfsStructure): Promise<ValidatedMemfsStructure>;
|
|
63
|
+
export declare function installMemfsGuard(memoryDir: string, policy: MemfsWritePolicy): Promise<MemfsGuardInstallation>;
|
|
64
|
+
/** Configure a freshly cloned MemFS repo, whose hooks and local config Git did not copy. */
|
|
65
|
+
export declare function configureMemfsCloneGuard(sourceMemoryDir: string, cloneMemoryDir: string, policy: MemfsWritePolicy): Promise<MemfsGuardInstallation>;
|
|
66
|
+
/**
|
|
67
|
+
* Defense-in-depth validation after an agent run. Every commit is inspected,
|
|
68
|
+
* so an illegal add followed by a delete cannot disappear in an endpoint diff.
|
|
69
|
+
*/
|
|
70
|
+
export declare function validateMemfsChanges(memoryDir: string, baseRevision: string, policy: MemfsWritePolicy, options?: {
|
|
71
|
+
baselineDirectories?: readonly string[];
|
|
72
|
+
}): Promise<MemfsValidationResult>;
|
|
73
|
+
/** Read a materialized file in tests/callers without exposing path traversal. */
|
|
74
|
+
export declare function readMemfsFile(memoryDir: string, path: string): Promise<string>;
|
|
75
|
+
//# sourceMappingURL=memfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memfs.d.ts","sourceRoot":"","sources":["../../src/dream/memfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { NormalizedRecord } from "./types.js";
|
|
2
|
+
export declare const TOOL_INPUT_MAX_CHARS = 20000;
|
|
3
|
+
export declare const TOOL_RESULT_MAX_CHARS = 2500;
|
|
4
|
+
export declare const CODEX_INJECTED_PREFIXES: string[];
|
|
5
|
+
export declare function truncateText(text: string, limit: number): string;
|
|
6
|
+
/**
|
|
7
|
+
* Timestamp from the raw formats: ISO string or epoch millis. Suffix-less
|
|
8
|
+
* (naive) timestamps are treated as UTC so ordering is stable.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseTimestamp(value: unknown): Date | null;
|
|
11
|
+
/**
|
|
12
|
+
* ISO timestamps for n records: real where present, interpolated in gaps,
|
|
13
|
+
* synthesized monotonically when the source recorded none.
|
|
14
|
+
*/
|
|
15
|
+
export declare function fillTimestamps(n: number, anchors: Map<number, Date>, createdAt: Date | null, durationSeconds: number | null): string[];
|
|
16
|
+
/**
|
|
17
|
+
* Return the args string (and whether it was reshaped). Byte-verbatim when
|
|
18
|
+
* under the cap and already a JSON object; otherwise reshaped to a valid JSON
|
|
19
|
+
* object, trimming the longest string values until the serialization fits.
|
|
20
|
+
*/
|
|
21
|
+
export declare function shrinkArgs(rawInput: string): {
|
|
22
|
+
args: string;
|
|
23
|
+
shrunk: boolean;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Flatten a content field (string | block list) into text; image blocks
|
|
27
|
+
* render as a placeholder.
|
|
28
|
+
*/
|
|
29
|
+
export declare function blocksText(content: unknown): string;
|
|
30
|
+
/** One raw content block, as emitted by a per-harness parser. */
|
|
31
|
+
export interface PseudoRow {
|
|
32
|
+
role: "user" | "assistant" | "tool_use" | "tool_result";
|
|
33
|
+
turnType: "user_prompt" | "system_injected" | "assistant_thinking" | "assistant_response" | "tool_use" | "tool_result";
|
|
34
|
+
content?: string;
|
|
35
|
+
timestamp?: Date | null;
|
|
36
|
+
toolName?: string;
|
|
37
|
+
toolCallId?: string;
|
|
38
|
+
toolInputJson?: string;
|
|
39
|
+
model?: string;
|
|
40
|
+
}
|
|
41
|
+
/** Session-level context mined from the raw store during parsing. */
|
|
42
|
+
export interface SessionContext {
|
|
43
|
+
source: string;
|
|
44
|
+
cwd?: string;
|
|
45
|
+
gitBranch?: string;
|
|
46
|
+
model?: string;
|
|
47
|
+
createdAt?: Date | null;
|
|
48
|
+
durationSeconds?: number | null;
|
|
49
|
+
}
|
|
50
|
+
export type NormalizeRowsResult = {
|
|
51
|
+
status: "ok";
|
|
52
|
+
records: NormalizedRecord[];
|
|
53
|
+
} | {
|
|
54
|
+
status: string;
|
|
55
|
+
records?: undefined;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Normalize ordered pseudo-rows into v1 records. Returns `{status: "ok",
|
|
59
|
+
* records}` or a `skipped:…` / `invalid:…` status with no output records.
|
|
60
|
+
*/
|
|
61
|
+
export declare function normalizeSessionRows(rows: PseudoRow[], context: SessionContext): NormalizeRowsResult;
|
|
62
|
+
/**
|
|
63
|
+
* Minimal structural validation of the normalized-v1 contract. Returns an
|
|
64
|
+
* error string, or null when valid.
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateRecords(records: NormalizedRecord[]): string | null;
|
|
67
|
+
//# sourceMappingURL=normalize-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-core.d.ts","sourceRoot":"","sources":["../../src/dream/normalize-core.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,qBAAqB,OAAQ,CAAC;AAgB3C,eAAO,MAAM,uBAAuB,UAKnC,CAAC;AAYF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhE;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAW1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAC1B,SAAS,EAAE,IAAI,GAAG,IAAI,EACtB,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,EAAE,CAmCV;AAID;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAuDA;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAmBnD;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC;IACxD,QAAQ,EACJ,aAAa,GACb,iBAAiB,GACjB,oBAAoB,GACpB,oBAAoB,GACpB,UAAU,GACV,aAAa,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,EAAE,EACjB,OAAO,EAAE,cAAc,GACtB,mBAAmB,CA2GrB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,GAAG,IAAI,CAwD1E"}
|