@intentface/latch-core 0.9.1 → 0.11.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/dist/agent.d.ts +17 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js.map +1 -1
- package/dist/extensions/compose.d.ts +117 -0
- package/dist/extensions/compose.d.ts.map +1 -0
- package/dist/extensions/compose.js +249 -0
- package/dist/extensions/compose.js.map +1 -0
- package/dist/extensions/extension.d.ts +322 -0
- package/dist/extensions/extension.d.ts.map +1 -0
- package/dist/extensions/extension.js +171 -0
- package/dist/extensions/extension.js.map +1 -0
- package/dist/extensions/index.d.ts +11 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +11 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/tools.d.ts +60 -0
- package/dist/extensions/tools.d.ts.map +1 -0
- package/dist/extensions/tools.js +229 -0
- package/dist/extensions/tools.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +10 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +400 -44
- package/dist/runtime.js.map +1 -1
- package/dist/storage.d.ts +19 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/telemetry.d.ts +6 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/extensions.d.ts +0 -333
- package/dist/extensions.d.ts.map +0 -1
- package/dist/extensions.js +0 -569
- package/dist/extensions.js.map +0 -1
package/dist/extensions.d.ts
DELETED
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import type { AppMessage } from "./message.js";
|
|
2
|
-
/**
|
|
3
|
-
* Agent extensions — work that runs BEFORE the model on a turn.
|
|
4
|
-
*
|
|
5
|
-
* An extension is a script over the turn's opened tools plus a template. The
|
|
6
|
-
* script fetches what the agent already knows it needs (hours from Clockify,
|
|
7
|
-
* open PRs, the customer record) and the template renders it into the user
|
|
8
|
-
* turn or into the system prompt. Three triggers: `slash` (the user typed
|
|
9
|
-
* `/report week`), `chat-start` (once per conversation, refreshable), and
|
|
10
|
-
* `every-turn`.
|
|
11
|
-
*
|
|
12
|
-
* Core knows nothing about how scripts run or templates render — that is the
|
|
13
|
-
* `ScriptEngine` seam (`RuntimeConfig.scripts`, implemented by
|
|
14
|
-
* `@intentface/latch-script`). Core's job is the wiring and the invariant that
|
|
15
|
-
* makes it safe:
|
|
16
|
-
*
|
|
17
|
-
* The script's result is PERSISTED as a `data-extension` part on the
|
|
18
|
-
* triggering user message before the model runs. The model projection
|
|
19
|
-
* renders that part; the client projection redacts it. So what the model
|
|
20
|
-
* saw is always in the log, a crash-resume replays the identical prompt,
|
|
21
|
-
* and the user's own text is never rewritten.
|
|
22
|
-
*
|
|
23
|
-
* Scripts are read-only by default: a tool the turn's approval policy gates
|
|
24
|
-
* is refused at analysis time unless the extension sets `allowMutations`.
|
|
25
|
-
*/
|
|
26
|
-
export type ExtensionTrigger = "slash" | "chat-start" | "every-turn";
|
|
27
|
-
export interface AgentExtension {
|
|
28
|
-
/** Identifier: `[a-z0-9_]`, unique per agent. A slash extension is invoked as `/<name>`. */
|
|
29
|
-
name: string;
|
|
30
|
-
/** Shown in the slash menu and to the Agent Builder. */
|
|
31
|
-
description?: string;
|
|
32
|
-
on: ExtensionTrigger;
|
|
33
|
-
/**
|
|
34
|
-
* JSON Schema for `input`. Informational in core (the runtime does not
|
|
35
|
-
* validate against it); a text invocation yields `{ args, argv }`, a
|
|
36
|
-
* structured one (`metadata.extension.input`) is passed through verbatim.
|
|
37
|
-
*/
|
|
38
|
-
input?: Record<string, unknown>;
|
|
39
|
-
/** Callscript JS text or its JSON plan. Runs over the turn's opened tools. */
|
|
40
|
-
script?: string | object;
|
|
41
|
-
/**
|
|
42
|
-
* Liquid template over `{ input, output, steps, ...steps, error }`. Absent →
|
|
43
|
-
* the script output is rendered as a fenced JSON block.
|
|
44
|
-
*/
|
|
45
|
-
template?: string;
|
|
46
|
-
/** Where the rendered text lands. Default `message`. */
|
|
47
|
-
target?: "message" | "instructions";
|
|
48
|
-
/** Message target: the rendered block goes before or after the user's text. Default `after`. */
|
|
49
|
-
placement?: "before" | "after";
|
|
50
|
-
/** Instructions target: this turn only, or every later turn of the chat. Default `turn`. */
|
|
51
|
-
scope?: "turn" | "chat";
|
|
52
|
-
/** `chat-start` only: run again when the last result is older than this. */
|
|
53
|
-
refresh?: {
|
|
54
|
-
afterMs?: number;
|
|
55
|
-
};
|
|
56
|
-
/**
|
|
57
|
-
* What the client sees on the user message: only the typed text (`command`),
|
|
58
|
-
* the rendered prompt in its place (`prompt`), or both. Default `command`.
|
|
59
|
-
*/
|
|
60
|
-
reveal?: "command" | "prompt" | "both";
|
|
61
|
-
/** Let the script call approval-gated tools. Default false. */
|
|
62
|
-
allowMutations?: boolean;
|
|
63
|
-
/** A failed script: proceed with the failure visible to the model, or fail the turn. Default `proceed`. */
|
|
64
|
-
onError?: "proceed" | "fail";
|
|
65
|
-
limits?: {
|
|
66
|
-
/** Script wall clock, ms. Default 30 000. */
|
|
67
|
-
timeoutMs?: number;
|
|
68
|
-
/** Cap on the rendered text the model sees. Default 50 000 chars. */
|
|
69
|
-
maxRenderedChars?: number;
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
export declare const EXTENSION_PART_TYPE = "data-extension";
|
|
73
|
-
/** A file the script produced for the model — the AI SDK `FileUIPart` shape. */
|
|
74
|
-
export interface ExtensionFile {
|
|
75
|
-
type: "file";
|
|
76
|
-
mediaType: string;
|
|
77
|
-
url: string;
|
|
78
|
-
filename?: string;
|
|
79
|
-
}
|
|
80
|
-
export interface ExtensionPartData {
|
|
81
|
-
name: string;
|
|
82
|
-
on: ExtensionTrigger;
|
|
83
|
-
target: "message" | "instructions";
|
|
84
|
-
placement: "before" | "after";
|
|
85
|
-
scope: "turn" | "chat";
|
|
86
|
-
reveal: "command" | "prompt" | "both";
|
|
87
|
-
input?: unknown;
|
|
88
|
-
/** When the script ran (epoch ms). */
|
|
89
|
-
at: number;
|
|
90
|
-
durationMs?: number;
|
|
91
|
-
/** EXACTLY what the model sees — rendered, capped. Absent on failure. */
|
|
92
|
-
rendered?: string;
|
|
93
|
-
/** The script's return value, bounded (see `boundOutput`). */
|
|
94
|
-
output?: unknown;
|
|
95
|
-
outputTruncated?: boolean;
|
|
96
|
-
/** Media for the model, emitted as `file` parts by the model projection. */
|
|
97
|
-
files?: ExtensionFile[];
|
|
98
|
-
/** Tool calls the script made. */
|
|
99
|
-
calls: Array<{
|
|
100
|
-
tool: string;
|
|
101
|
-
stepId: string;
|
|
102
|
-
}>;
|
|
103
|
-
error?: {
|
|
104
|
-
message: string;
|
|
105
|
-
code?: string;
|
|
106
|
-
at?: string;
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
export interface ExtensionPart {
|
|
110
|
-
type: typeof EXTENSION_PART_TYPE;
|
|
111
|
-
id: string;
|
|
112
|
-
data: ExtensionPartData;
|
|
113
|
-
}
|
|
114
|
-
/** Structured invocation a client may stamp on the user message instead of typing `/name`. */
|
|
115
|
-
export interface ExtensionInvocation {
|
|
116
|
-
name: string;
|
|
117
|
-
input?: unknown;
|
|
118
|
-
}
|
|
119
|
-
/** One tool as the engine sees it: a name, a card, and a bound `execute`. */
|
|
120
|
-
export interface ScriptToolMount {
|
|
121
|
-
name: string;
|
|
122
|
-
description?: string;
|
|
123
|
-
/** JSON Schema of the arguments, for the engine's validation and cards. */
|
|
124
|
-
inputSchema?: Record<string, unknown>;
|
|
125
|
-
execute(args: unknown, ctx: {
|
|
126
|
-
stepId: string;
|
|
127
|
-
toolCallId: string;
|
|
128
|
-
}): Promise<unknown>;
|
|
129
|
-
}
|
|
130
|
-
export interface ScriptAnalysis {
|
|
131
|
-
/** Engine-opaque compiled plan; absent when `issues` is non-empty. */
|
|
132
|
-
plan?: unknown;
|
|
133
|
-
/** Distinct tool names the script may call (worst case, conditional included). */
|
|
134
|
-
calls: string[];
|
|
135
|
-
/** Human-readable validation problems. Non-empty → the script must not run. */
|
|
136
|
-
issues: string[];
|
|
137
|
-
}
|
|
138
|
-
export interface ScriptRunResult {
|
|
139
|
-
status: "ok" | "error" | "suspended";
|
|
140
|
-
output?: unknown;
|
|
141
|
-
/** Settled step outputs by id. */
|
|
142
|
-
steps: Record<string, unknown>;
|
|
143
|
-
calls: Array<{
|
|
144
|
-
tool: string;
|
|
145
|
-
stepId: string;
|
|
146
|
-
}>;
|
|
147
|
-
error?: {
|
|
148
|
-
message: string;
|
|
149
|
-
code?: string;
|
|
150
|
-
at?: string;
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* The script seam. Implemented by `@intentface/latch-script` over callscript
|
|
155
|
-
* and LiquidJS; core carries no dependency on either. Tool `execute`s are
|
|
156
|
-
* pre-bound by core with the Latch tool context, so the engine never needs to
|
|
157
|
-
* know what a Latch tool is.
|
|
158
|
-
*/
|
|
159
|
-
export interface ScriptEngine {
|
|
160
|
-
/** Parse + validate against the mounted names. Synchronous, never throws. */
|
|
161
|
-
analyze(script: string | object, opts: {
|
|
162
|
-
tools: string[];
|
|
163
|
-
}): ScriptAnalysis;
|
|
164
|
-
run(plan: unknown, opts: {
|
|
165
|
-
tools: ScriptToolMount[];
|
|
166
|
-
input?: unknown;
|
|
167
|
-
variables?: Record<string, unknown>;
|
|
168
|
-
/** Abort: the engine must settle promptly once it fires. */
|
|
169
|
-
signal?: AbortSignal;
|
|
170
|
-
}): Promise<ScriptRunResult>;
|
|
171
|
-
render(template: string, scope: Record<string, unknown>): Promise<string>;
|
|
172
|
-
}
|
|
173
|
-
/** Thrown when an extension with `onError: "fail"` fails; the turn errors. */
|
|
174
|
-
export declare class ExtensionFailedError extends Error {
|
|
175
|
-
readonly extension: string;
|
|
176
|
-
readonly detail: string;
|
|
177
|
-
readonly code = "extension_failed";
|
|
178
|
-
/** The user message with the failed part appended — persist it so the failure is in the log. */
|
|
179
|
-
partial?: ExecuteExtensionsResult;
|
|
180
|
-
constructor(extension: string, detail: string);
|
|
181
|
-
}
|
|
182
|
-
/** Names the chat channels claim for their own `/` commands — a slash extension may not use them. */
|
|
183
|
-
export declare const RESERVED_SLASH_NAMES: ReadonlySet<string>;
|
|
184
|
-
export declare const EXTENSION_DEFAULTS: {
|
|
185
|
-
readonly timeoutMs: 30000;
|
|
186
|
-
readonly maxRenderedChars: 50000;
|
|
187
|
-
readonly maxOutputBytes: number;
|
|
188
|
-
/** Same ceiling `web_fetch` applies — Anthropic caps images at 5 MB of source data. */
|
|
189
|
-
readonly maxMediaBytes: number;
|
|
190
|
-
};
|
|
191
|
-
/** Media types every provider's vision input accepts, plus PDF. */
|
|
192
|
-
export declare const EXTENSION_MEDIA_TYPES: ReadonlySet<string>;
|
|
193
|
-
type Resolved = Required<Pick<AgentExtension, "target" | "placement" | "scope" | "reveal" | "allowMutations" | "onError">> & {
|
|
194
|
-
timeoutMs: number;
|
|
195
|
-
maxRenderedChars: number;
|
|
196
|
-
};
|
|
197
|
-
export declare function resolveExtension(ext: AgentExtension): Resolved;
|
|
198
|
-
export interface SlashInvocation {
|
|
199
|
-
name: string;
|
|
200
|
-
/** Everything after the command word, trimmed. */
|
|
201
|
-
args: string;
|
|
202
|
-
argv: string[];
|
|
203
|
-
}
|
|
204
|
-
export declare function parseSlashInvocation(text: string, names: Iterable<string>): SlashInvocation | null;
|
|
205
|
-
/** The message's text parts joined — what a slash parser reads. */
|
|
206
|
-
export declare function messageText(message: AppMessage | undefined): string;
|
|
207
|
-
export declare function extensionPartsOf(message: AppMessage): ExtensionPart[];
|
|
208
|
-
export interface SelectedExtension {
|
|
209
|
-
ext: AgentExtension;
|
|
210
|
-
input?: unknown;
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Which extensions run on this turn. `window` is the live context window
|
|
214
|
-
* (post-compaction) INCLUDING the current user message as its last element.
|
|
215
|
-
*
|
|
216
|
-
* - `slash`: a structured `metadata.extension` wins; else the text parses
|
|
217
|
-
* against the slash names. At most one slash extension per turn.
|
|
218
|
-
* - `every-turn`: always.
|
|
219
|
-
* - `chat-start`: when no earlier message in the window carries a result for
|
|
220
|
-
* it, or the latest one is older than `refresh.afterMs`. Compaction starts a
|
|
221
|
-
* new window, so a chat-start extension re-runs after a compaction.
|
|
222
|
-
*/
|
|
223
|
-
export declare function selectExtensions(opts: {
|
|
224
|
-
extensions: readonly AgentExtension[];
|
|
225
|
-
message: AppMessage | undefined;
|
|
226
|
-
window: readonly AppMessage[];
|
|
227
|
-
now: number;
|
|
228
|
-
}): SelectedExtension[];
|
|
229
|
-
/**
|
|
230
|
-
* System-prompt blocks for this turn, read from the stored history: the latest
|
|
231
|
-
* successful `target: "instructions"` result per extension name. `scope:
|
|
232
|
-
* "chat"` results apply from anywhere in the window; `scope: "turn"` only when
|
|
233
|
-
* they sit on the window's last user message. Reading from history (not
|
|
234
|
-
* re-running) is what makes a resumed turn render identical instructions.
|
|
235
|
-
*/
|
|
236
|
-
export declare function extensionInstructionBlocks(window: readonly AppMessage[]): string[];
|
|
237
|
-
/**
|
|
238
|
-
* Model projection step: a `data-extension` part becomes what the model reads.
|
|
239
|
-
* Message target → a text part with `rendered` before/after the user's text,
|
|
240
|
-
* then any `files` as file parts. A failed extension → a short failure note so
|
|
241
|
-
* the model can proceed (and call the tools itself). The data part itself is
|
|
242
|
-
* always stripped — the SDK would drop it anyway; stripping keeps the rule
|
|
243
|
-
* explicit. Projection-only: stored history is untouched.
|
|
244
|
-
*/
|
|
245
|
-
export declare function applyExtensionParts(messages: AppMessage[]): AppMessage[];
|
|
246
|
-
/**
|
|
247
|
-
* Client projection step: with `reveal: "command"` the client learns that an
|
|
248
|
-
* extension ran (name, when, error) but not what it produced — the rendered
|
|
249
|
-
* prompt and the fetched data stay server-side. `prompt` / `both` pass the
|
|
250
|
-
* part through whole; the client decides how to show it. Self-describing:
|
|
251
|
-
* the stored part carries its own `reveal`, so editing the agent later does
|
|
252
|
-
* not rewrite what an older message shows.
|
|
253
|
-
*/
|
|
254
|
-
export declare function redactExtensionParts(messages: AppMessage[]): AppMessage[];
|
|
255
|
-
/** Keep a script output row-sized: over the cap, store a marked preview instead. */
|
|
256
|
-
export declare function boundOutput(output: unknown, maxBytes?: number): {
|
|
257
|
-
output: unknown;
|
|
258
|
-
truncated: boolean;
|
|
259
|
-
};
|
|
260
|
-
/**
|
|
261
|
-
* Media the script returned for the model: a `files` list on the output, each
|
|
262
|
-
* `{ mediaType, url | data (base64), filename? }` — `web_fetch`'s
|
|
263
|
-
* `{ kind: "media", mediaType, data }` result fits as-is. Unsupported types
|
|
264
|
-
* and anything past the byte cap are dropped, with a reason. Returns the
|
|
265
|
-
* output WITHOUT `files` so the bytes are not stored twice.
|
|
266
|
-
*/
|
|
267
|
-
export declare function collectFiles(output: unknown): {
|
|
268
|
-
output: unknown;
|
|
269
|
-
files: ExtensionFile[];
|
|
270
|
-
dropped: string[];
|
|
271
|
-
};
|
|
272
|
-
/**
|
|
273
|
-
* Give a script the VALUE a tool produced, not the wire envelope. MCP tools
|
|
274
|
-
* return `{ content: [{ type: "text", text }], structuredContent?, isError? }`
|
|
275
|
-
* — fine for the model, useless for `output.changes.files`. Mirrors what an
|
|
276
|
-
* MCP client adapter does: `structuredContent` wins; one text part that parses
|
|
277
|
-
* as JSON becomes that value; several text parts join; anything else (files,
|
|
278
|
-
* images, non-MCP shapes) passes through untouched. `isError` throws, so a
|
|
279
|
-
* script's `try/catch` and the step's error branch see it as a failure.
|
|
280
|
-
*/
|
|
281
|
-
export declare function unwrapToolResult(result: unknown): unknown;
|
|
282
|
-
/**
|
|
283
|
-
* The approval-gated tool names for a turn: harness gates + each source's
|
|
284
|
-
* defaults, with the agent's object-form policy winning per name. A function
|
|
285
|
-
* policy cannot be enumerated, so every tool counts as gated (the same
|
|
286
|
-
* conservative rule test runs use).
|
|
287
|
-
*/
|
|
288
|
-
export declare function gatedToolNames(opts: {
|
|
289
|
-
harnessApproval: Record<string, unknown>;
|
|
290
|
-
sourceApproval: Array<Record<string, unknown> | undefined>;
|
|
291
|
-
agentApproval: unknown;
|
|
292
|
-
allNames: Iterable<string>;
|
|
293
|
-
}): Set<string>;
|
|
294
|
-
export interface ExecuteExtensionsResult {
|
|
295
|
-
/** The user message with the new parts appended (same id). */
|
|
296
|
-
message: AppMessage;
|
|
297
|
-
parts: ExtensionPart[];
|
|
298
|
-
/**
|
|
299
|
-
* Per part, what is NOT persisted but an editor wants: the compiled plan and
|
|
300
|
-
* every settled step's value (each bounded). Aligned with `parts`.
|
|
301
|
-
*/
|
|
302
|
-
details: ExtensionRunDetails[];
|
|
303
|
-
}
|
|
304
|
-
export interface ExtensionRunDetails {
|
|
305
|
-
/** The engine's compiled plan (callscript's JSON steps), when the script validated. */
|
|
306
|
-
plan?: unknown;
|
|
307
|
-
/** Settled step outputs by id, each bounded like `output`. */
|
|
308
|
-
steps?: Record<string, unknown>;
|
|
309
|
-
}
|
|
310
|
-
/** What `previewExtension` returns: the part plus the editor-only details. */
|
|
311
|
-
export type ExtensionPreview = ExtensionPartData & ExtensionRunDetails;
|
|
312
|
-
/**
|
|
313
|
-
* Run the selected extensions and build their parts. Pure with respect to
|
|
314
|
-
* storage — the caller persists `message` and streams `parts`. Never throws
|
|
315
|
-
* for a `proceed` extension; throws `ExtensionFailedError` for a `fail` one.
|
|
316
|
-
*/
|
|
317
|
-
export declare function executeExtensions(opts: {
|
|
318
|
-
engine: ScriptEngine;
|
|
319
|
-
selected: readonly SelectedExtension[];
|
|
320
|
-
message: AppMessage;
|
|
321
|
-
/** Every executable tool of the turn (gated and inactive included) — the
|
|
322
|
-
* script is validated against ALL of them so a refusal names its reason. */
|
|
323
|
-
mounts: () => ScriptToolMount[];
|
|
324
|
-
gatedNames: ReadonlySet<string>;
|
|
325
|
-
/** Tools the agent's `enabledTools` hides from this turn (never run by a script). */
|
|
326
|
-
inactiveNames?: ReadonlySet<string>;
|
|
327
|
-
now?: () => number;
|
|
328
|
-
newId?: () => string;
|
|
329
|
-
/** Outer abort (e.g. the lease). */
|
|
330
|
-
signal?: AbortSignal;
|
|
331
|
-
}): Promise<ExecuteExtensionsResult>;
|
|
332
|
-
export {};
|
|
333
|
-
//# sourceMappingURL=extensions.d.ts.map
|
package/dist/extensions.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
|