@looprun-ai/mastra 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AgentSpec, AgentWorld, FinalizedReply, ToolDef, TrunkTheme, TurnLedger } from '@looprun-ai/core';
2
+ import type { GuardHooks } from './hooks.js';
3
+ export interface CompiledSpec {
4
+ ledger: TurnLedger;
5
+ tools: Record<string, any>;
6
+ /** The byte-stable trunk + the current turn's terminal-protocol variant. */
7
+ instructions(): string;
8
+ hooks: GuardHooks;
9
+ inputProcessors?: any[];
10
+ /** The tools active THIS turn (respects the reply-only terminal policy). */
11
+ activeTools(): string[];
12
+ /** Advance the turn (world + ledger) and get the state/uploads tail for the user message. */
13
+ beginTurn(input?: {
14
+ attachments?: string[];
15
+ }): {
16
+ userMessageTail: string;
17
+ };
18
+ /** Mutators → onReply checks → bounded no-tools redrive → honest-abstain. */
19
+ finalizeReply(text: string, redrive: (message: string) => Promise<string>): Promise<FinalizedReply>;
20
+ }
21
+ export declare function compileSpec(spec: AgentSpec, opts: {
22
+ theme?: TrunkTheme;
23
+ world: AgentWorld;
24
+ toolDefs?: ToolDef[];
25
+ terminalProtocol?: boolean;
26
+ redrives?: number;
27
+ }): CompiledSpec;
28
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG/G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,UAAU,CAAC;IAEnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,4EAA4E;IAC5E,YAAY,IAAI,MAAM,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAElB,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;IACxB,4EAA4E;IAC5E,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,6FAA6F;IAC7F,SAAS,CAAC,KAAK,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,6EAA6E;IAC7E,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACrG;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACnH,YAAY,CAmDd"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @looprun-ai/mastra — compileSpec: the low-level kit for devs assembling their OWN `new Agent({...})`.
3
+ *
4
+ * Single-conversation by design (one world, one ledger). For multi-session hosts use LoopRunAgent.
5
+ *
6
+ * const g = compileSpec(bookkeepingSpec, { world, toolDefs })
7
+ * const agent = new Agent({ id: 'books', name: 'Books', model, instructions: g.instructions,
8
+ * tools: g.tools, hooks: g.hooks, inputProcessors: g.inputProcessors })
9
+ * // per turn: const { userMessageTail } = g.beginTurn(); …generate…; await g.finalizeReply(text, redrive)
10
+ */
11
+ import { beginTurn as ledgerBeginTurn, createLedger, finalizeReply as coreFinalizeReply, renderScopedSpecTrunk, terminalProtocol, } from '@looprun-ai/core';
12
+ import { buildWorldTools } from './tools.js';
13
+ import { makeGuardHooks, makeInputProcessors } from './hooks.js';
14
+ import { DEFAULT_REDRIVES } from './run-conversation.js';
15
+ export function compileSpec(spec, opts) {
16
+ const theme = opts.theme ?? spec.theme;
17
+ if (!theme && !spec.surface.systemPrompt) {
18
+ throw new Error(`compileSpec "${spec.id}": no theme — pass opts.theme or set spec.theme.`);
19
+ }
20
+ const world = opts.world;
21
+ const terminalOn = opts.terminalProtocol !== false;
22
+ const surface = new Set(spec.surface.tools);
23
+ const session = {
24
+ id: 'compiled',
25
+ world,
26
+ ledger: createLedger(),
27
+ turnIndex: 0,
28
+ messages: [],
29
+ chain: Promise.resolve(),
30
+ };
31
+ const getSession = () => session;
32
+ let started = false;
33
+ const renderPrompt = spec.surface.systemPrompt
34
+ ? (w, u) => spec.surface.systemPrompt(w, u)
35
+ : (w, u) => renderScopedSpecTrunk(w, spec, u, theme);
36
+ const replyOnly = () => (spec.controls.terminal ? spec.controls.terminal(world) === true : false);
37
+ return {
38
+ ledger: session.ledger,
39
+ tools: buildWorldTools(opts.toolDefs ?? [], surface, getSession),
40
+ instructions: () => renderPrompt(world, session.ledger.attachments) + (terminalOn ? terminalProtocol(replyOnly()) : ''),
41
+ hooks: makeGuardHooks(spec, getSession),
42
+ inputProcessors: makeInputProcessors(spec, getSession),
43
+ activeTools: () => (replyOnly() ? [...surface, 'replyToUser'] : [...surface, 'replyToUser', 'askUser']),
44
+ beginTurn(input) {
45
+ if (started) {
46
+ world.advanceTurn();
47
+ session.turnIndex += 1;
48
+ }
49
+ started = true;
50
+ ledgerBeginTurn(session.ledger, session.turnIndex);
51
+ const attLabels = (input?.attachments ?? []).map((u) => world.ingestAttachment(u));
52
+ session.ledger.attachments = attLabels;
53
+ const stateBlock = theme ? theme.stateBlock(world) : '';
54
+ const tailParts = [];
55
+ if (stateBlock && stateBlock.trim())
56
+ tailParts.push(`## Account state\n${stateBlock}`);
57
+ if (attLabels.length)
58
+ tailParts.push(`[Uploads this turn: ${attLabels.join(', ')}]`);
59
+ return { userMessageTail: tailParts.join('\n\n') };
60
+ },
61
+ finalizeReply(text, redrive) {
62
+ return coreFinalizeReply(spec, theme, world, session.ledger, text, redrive, spec.controls.redrives ?? opts.redrives ?? DEFAULT_REDRIVES);
63
+ },
64
+ };
65
+ }
66
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EACL,SAAS,IAAI,eAAe,EAC5B,YAAY,EACZ,aAAa,IAAI,iBAAiB,EAClC,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmBzD,MAAM,UAAU,WAAW,CACzB,IAAe,EACf,IAAoH;IAEpH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,EAAE,kDAAkD,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAmB;QAC9B,EAAE,EAAE,UAAU;QACd,KAAK;QACL,MAAM,EAAE,YAAY,EAAE;QACtB,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;KACzB,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY;QAC5C,CAAC,CAAC,CAAC,CAAa,EAAE,CAAW,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,YAAa,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC,CAAa,EAAE,CAAW,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAE7E,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAElG,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC;QAChE,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvH,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC;QACvC,eAAe,EAAE,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC;QACtD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;QACvG,SAAS,CAAC,KAAK;YACb,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,OAAO,GAAG,IAAI,CAAC;YACf,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;YACvC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE;gBAAE,SAAS,CAAC,IAAI,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;YACvF,IAAI,SAAS,CAAC,MAAM;gBAAE,SAAS,CAAC,IAAI,CAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrF,OAAO,EAAE,eAAe,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrD,CAAC;QACD,aAAa,CAAC,IAAI,EAAE,OAAO;YACzB,OAAO,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,CAAC;QAC3I,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AgentSpec } from '@looprun-ai/core';
2
+ import type { SessionAccessor } from './tools.js';
3
+ export interface GuardHooks {
4
+ beforeToolCall(ctx: {
5
+ toolName: string;
6
+ input: unknown;
7
+ }): Promise<void | {
8
+ proceed: false;
9
+ output: unknown;
10
+ }>;
11
+ afterToolCall(ctx: {
12
+ toolName: string;
13
+ input: unknown;
14
+ output?: unknown;
15
+ error?: unknown;
16
+ }): void;
17
+ }
18
+ export declare function makeGuardHooks(spec: AgentSpec, getSession: SessionAccessor): GuardHooks;
19
+ /** onInput guards as a Mastra input processor: abort ⇒ the turn is refused with no LLM call. */
20
+ export declare function makeInputProcessors(spec: AgentSpec, getSession: SessionAccessor): any[] | undefined;
21
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/G,aAAa,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACnG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,GAAG,UAAU,CAkBvF;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,eAAe,GAE1B,GAAG,EAAE,GAAG,SAAS,CAcnB"}
package/dist/hooks.js ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @looprun-ai/mastra — governance → Mastra primitives.
3
+ *
4
+ * preTool guards ride `hooks.beforeToolCall` ({ proceed:false, output } veto — the model sees the
5
+ * correction and retries within the SAME generation, no extra round-trip). The observed ledger is
6
+ * fed by `hooks.afterToolCall`. Mastra applies hooks to ALL tool sources (assigned, toolsets,
7
+ * client, MCP), so guards also govern native/MCP tools with zero extra wiring.
8
+ */
9
+ import { evaluatePreTool, evaluateOnInput, isTerminal, recordToolResult } from '@looprun-ai/core';
10
+ export function makeGuardHooks(spec, getSession) {
11
+ return {
12
+ async beforeToolCall({ toolName, input }) {
13
+ if (isTerminal(toolName))
14
+ return undefined;
15
+ const session = getSession();
16
+ const args = (input ?? {});
17
+ const verdict = await evaluatePreTool(spec, session.ledger, session.world, toolName, args);
18
+ if (verdict.verdict === 'deny') {
19
+ return { proceed: false, output: { success: false, error: verdict.reason } };
20
+ }
21
+ return undefined;
22
+ },
23
+ afterToolCall({ toolName, input, output }) {
24
+ if (isTerminal(toolName))
25
+ return;
26
+ const session = getSession();
27
+ recordToolResult(session.ledger, toolName, (input ?? {}), output);
28
+ },
29
+ };
30
+ }
31
+ /** onInput guards as a Mastra input processor: abort ⇒ the turn is refused with no LLM call. */
32
+ export function makeInputProcessors(spec, getSession) {
33
+ if (!spec.guards.onInput?.length)
34
+ return undefined;
35
+ return [
36
+ {
37
+ id: 'looprun-onInput',
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ async processInput(a) {
40
+ const session = getSession();
41
+ const reason = await evaluateOnInput(spec, session.ledger, session.world);
42
+ if (reason)
43
+ a.abort(reason);
44
+ return a.messages;
45
+ },
46
+ },
47
+ ];
48
+ }
49
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAUlG,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,UAA2B;IACzE,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;YACtC,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC3F,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBAC/B,OAAO,EAAE,OAAO,EAAE,KAAc,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;YACvC,IAAI,UAAU,CAAC,QAAQ,CAAC;gBAAE,OAAO;YACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,gBAAgB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,IAAI,EAAE,CAA4B,EAAE,MAAM,CAAC,CAAC;QAC/F,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,mBAAmB,CACjC,IAAe,EACf,UAA2B;IAG3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM;QAAE,OAAO,SAAS,CAAC;IACnD,OAAO;QACL;YACE,EAAE,EAAE,iBAAiB;YACrB,8DAA8D;YAC9D,KAAK,CAAC,YAAY,CAAC,CAAM;gBACvB,MAAM,OAAO,GAAmB,UAAU,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,MAAM;oBAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5B,OAAO,CAAC,CAAC,QAAQ,CAAC;YACpB,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @looprun-ai/mastra — public API.
3
+ *
4
+ * new LoopRunAgent({ spec, world, model }) → a genuine Mastra Agent, governed.
5
+ * runSpecConversation(spec, turns, deps) → scripted multi-turn runs (evals/batch).
6
+ * compileSpec(spec, opts) → DIY primitives for your own `new Agent({...})`.
7
+ */
8
+ export { LoopRunAgent, createLoopRunAgent } from './agent.js';
9
+ export type { LoopRunAgentConfig, LoopRunOptions, LoopRunResultMeta } from './agent.js';
10
+ export { runSpecConversation, DEFAULT_MAX_STEPS, DEFAULT_REDRIVES } from './run-conversation.js';
11
+ export type { RuntimeDeps } from './run-conversation.js';
12
+ export { compileSpec } from './compile.js';
13
+ export type { CompiledSpec } from './compile.js';
14
+ export { SessionStore } from './session.js';
15
+ export type { LoopRunSession, WorldFactory } from './session.js';
16
+ export { worldFromTools } from './world-adapters.js';
17
+ export type { StateView } from './world-adapters.js';
18
+ export { buildWorldTools, buildTerminalTools } from './tools.js';
19
+ export { makeGuardHooks, makeInputProcessors } from './hooks.js';
20
+ export type { GuardHooks } from './hooks.js';
21
+ export { jsonSchemaToZodObject, jsonTypeToZod } from './json-schema-zod.js';
22
+ export * from '@looprun-ai/core';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACjG,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG5E,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @looprun-ai/mastra — public API.
3
+ *
4
+ * new LoopRunAgent({ spec, world, model }) → a genuine Mastra Agent, governed.
5
+ * runSpecConversation(spec, turns, deps) → scripted multi-turn runs (evals/batch).
6
+ * compileSpec(spec, opts) → DIY primitives for your own `new Agent({...})`.
7
+ */
8
+ export { LoopRunAgent, createLoopRunAgent } from './agent.js';
9
+ export { runSpecConversation, DEFAULT_MAX_STEPS, DEFAULT_REDRIVES } from './run-conversation.js';
10
+ export { compileSpec } from './compile.js';
11
+ export { SessionStore } from './session.js';
12
+ export { worldFromTools } from './world-adapters.js';
13
+ export { buildWorldTools, buildTerminalTools } from './tools.js';
14
+ export { makeGuardHooks, makeInputProcessors } from './hooks.js';
15
+ export { jsonSchemaToZodObject, jsonTypeToZod } from './json-schema-zod.js';
16
+ // Re-exports so `import { AgentSpecBase, precondition, … } from '@looprun-ai/mastra'` works too.
17
+ export * from '@looprun-ai/core';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE5E,iGAAiG;AACjG,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @looprun-ai/mastra — JSON Schema → Zod (shallow; sufficient for Mastra createTool inputSchema).
3
+ */
4
+ import { z } from 'zod';
5
+ export declare function jsonTypeToZod(def: Record<string, unknown>): z.ZodTypeAny;
6
+ export declare function jsonSchemaToZodObject(schema: Record<string, unknown>): z.ZodTypeAny;
7
+ //# sourceMappingURL=json-schema-zod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-zod.d.ts","sourceRoot":"","sources":["../src/json-schema-zod.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAkBxE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAMnF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @looprun-ai/mastra — JSON Schema → Zod (shallow; sufficient for Mastra createTool inputSchema).
3
+ */
4
+ import { z } from 'zod';
5
+ export function jsonTypeToZod(def) {
6
+ const type = def.type;
7
+ if (def.enum)
8
+ return z.enum(def.enum);
9
+ if (type === 'string')
10
+ return z.string();
11
+ if (type === 'number' || type === 'integer')
12
+ return z.number();
13
+ if (type === 'boolean')
14
+ return z.boolean();
15
+ if (type === 'array') {
16
+ const items = def.items;
17
+ return z.array(items ? jsonTypeToZod(items) : z.unknown());
18
+ }
19
+ if (type === 'object') {
20
+ const props = (def.properties ?? {});
21
+ const required = (def.required ?? []);
22
+ const shape = {};
23
+ for (const [k, v] of Object.entries(props))
24
+ shape[k] = required.includes(k) ? jsonTypeToZod(v) : jsonTypeToZod(v).optional();
25
+ return z.object(shape).passthrough();
26
+ }
27
+ return z.unknown();
28
+ }
29
+ export function jsonSchemaToZodObject(schema) {
30
+ const props = (schema.properties ?? {});
31
+ const required = (schema.required ?? []);
32
+ const shape = {};
33
+ for (const [k, v] of Object.entries(props))
34
+ shape[k] = required.includes(k) ? jsonTypeToZod(v) : jsonTypeToZod(v).optional();
35
+ return z.object(shape).passthrough();
36
+ }
37
+ //# sourceMappingURL=json-schema-zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-schema-zod.js","sourceRoot":"","sources":["../src/json-schema-zod.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,UAAU,aAAa,CAAC,GAA4B;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,IAA0B,CAAC;IAC5C,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAA6B,CAAC,CAAC;IAC/D,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACzC,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/D,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAA4C,CAAC;QAC/D,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAA4C,CAAC;QAChF,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;QAClD,MAAM,KAAK,GAAiC,EAAE,CAAC;QAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7H,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAA+B;IACnE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAA4C,CAAC;IACnF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAa,CAAC;IACrD,MAAM,KAAK,GAAiC,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7H,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AgentSpec, AgentWorld, ToolDef, TrunkTheme, TurnInput, RunResult } from '@looprun-ai/core';
2
+ export declare const DEFAULT_MAX_STEPS = 16;
3
+ export declare const DEFAULT_REDRIVES = 1;
4
+ /** Everything the runner needs, injected by the host (an eval harness, a batch job, …). */
5
+ export interface RuntimeDeps {
6
+ /** An AI-SDK LanguageModel or a Mastra model router string. */
7
+ model: any;
8
+ /** Options spread into every generate() call (providerOptions / modelSettings / …). */
9
+ modelParams?: Record<string, unknown>;
10
+ /** The domain world seam (read + exec). */
11
+ world: AgentWorld;
12
+ /** Tool defs (name/description/JSON-schema) for the surface + terminal tools. */
13
+ toolDefs: ToolDef[];
14
+ /** The domain skin. Optional when the spec carries its own theme reference. */
15
+ theme?: TrunkTheme;
16
+ maxSteps?: number;
17
+ redrives?: number;
18
+ }
19
+ /** Run one case (all turns) for `spec` on Mastra, with the host-injected deps. */
20
+ export declare function runSpecConversation(spec: AgentSpec, turns: TurnInput[], deps: RuntimeDeps): Promise<RunResult>;
21
+ //# sourceMappingURL=run-conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-conversation.d.ts","sourceRoot":"","sources":["../src/run-conversation.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,OAAO,EAAE,UAAU,EAAE,SAAS,EAAc,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKjI,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAE/D,KAAK,EAAE,GAAG,CAAC;IACX,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,2CAA2C;IAC3C,KAAK,EAAE,UAAU,CAAC;IAClB,iFAAiF;IACjF,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,kFAAkF;AAClF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAqKpH"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * @looprun-ai/mastra — scripted multi-turn conversation runner (the eval/batch surface).
3
+ *
4
+ * Governance → idiomatic Mastra primitives:
5
+ * preTool guards → `hooks.beforeToolCall` → { proceed:false, output } veto
6
+ * observed ledger → `hooks.afterToolCall`
7
+ * onInput guards → an `inputProcessors` entry (processInput → abort ⇒ turn refused, no LLM call)
8
+ * surface scoping → `activeTools` = spec.surface.tools (+ terminal tools)
9
+ * force-terminal → replyToUser/askUser tools + `toolChoice:'required'` + `stopWhen(terminalCalled)`
10
+ * + a forced-terminal fallback (pushes a weak model past the action wall)
11
+ * onReply guards → runtime finalization: a bounded NO-TOOLS re-generate redrive (toolChoice:'none'),
12
+ * then mutators + honest-abstain. NOT a processor `abort({retry:true})`, which
13
+ * re-runs the whole generation + re-executes side-effecting tools (measured:
14
+ * ~100× slower).
15
+ *
16
+ * State-in-tail: the system prompt is the case-invariant scoped trunk (cacheable prefix); the
17
+ * volatile account/brand STATE (`theme.stateBlock`) rides the USER MESSAGE tail.
18
+ */
19
+ import { stepCountIs } from 'ai';
20
+ import { Agent } from '@mastra/core/agent';
21
+ import { beginTurn, createLedger, finalizeReply, forcedTerminalPrompt, isTerminal, renderScopedSpecTrunk, terminalProtocol, } from '@looprun-ai/core';
22
+ import { buildWorldTools } from './tools.js';
23
+ import { makeGuardHooks, makeInputProcessors } from './hooks.js';
24
+ export const DEFAULT_MAX_STEPS = 16;
25
+ export const DEFAULT_REDRIVES = 1;
26
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ function mapUsage(u) {
28
+ return {
29
+ input: u?.inputTokens ?? null, output: u?.outputTokens ?? null, reasoning: u?.reasoningTokens ?? null,
30
+ cacheRead: u?.cachedInputTokens ?? null, cacheWrite: null, total: u?.totalTokens ?? null,
31
+ };
32
+ }
33
+ /** Run one case (all turns) for `spec` on Mastra, with the host-injected deps. */
34
+ export async function runSpecConversation(spec, turns, deps) {
35
+ const { world, model } = deps;
36
+ const theme = deps.theme ?? spec.theme;
37
+ if (!theme && !spec.surface.systemPrompt) {
38
+ throw new Error(`runSpecConversation: spec "${spec.id}" has no theme — pass deps.theme or set spec.theme.`);
39
+ }
40
+ const genParams = deps.modelParams ?? {};
41
+ const maxSteps = spec.controls.maxSteps ?? deps.maxSteps ?? DEFAULT_MAX_STEPS;
42
+ const redrives = spec.controls.redrives ?? deps.redrives ?? DEFAULT_REDRIVES;
43
+ const surface = new Set(spec.surface.tools);
44
+ const session = {
45
+ id: 'run',
46
+ world,
47
+ ledger: createLedger(),
48
+ turnIndex: 0,
49
+ messages: [],
50
+ chain: Promise.resolve(),
51
+ };
52
+ const getSession = () => session;
53
+ const ledger = session.ledger;
54
+ const mastraTools = buildWorldTools(deps.toolDefs, surface, getSession);
55
+ const guardHooks = makeGuardHooks(spec, getSession);
56
+ const inputProcessors = makeInputProcessors(spec, getSession);
57
+ let currentSystemPrompt = '';
58
+ const agent = new Agent({
59
+ name: `looprun-${spec.id}`,
60
+ instructions: () => currentSystemPrompt,
61
+ model,
62
+ tools: mastraTools,
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ });
65
+ const renderPrompt = spec.surface.systemPrompt ?? ((w, u) => renderScopedSpecTrunk(w, spec, u, theme));
66
+ const turnRecords = [];
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ const messages = session.messages;
69
+ let errorMsg;
70
+ for (let i = 0; i < turns.length; i++) {
71
+ if (i > 0)
72
+ world.advanceTurn();
73
+ beginTurn(ledger, i);
74
+ const attUrls = (turns[i].attachments ?? []);
75
+ const attLabels = attUrls.map((u) => world.ingestAttachment(u));
76
+ ledger.attachments = attLabels;
77
+ const attDisplay = attLabels.map((l, k) => {
78
+ const base = attUrls[k]?.split('/').pop();
79
+ return base ? `${l} (${base})` : l;
80
+ });
81
+ const userText = turns[i].userText;
82
+ const replyOnly = spec.controls.terminal ? spec.controls.terminal(world) === true : false;
83
+ const protocol = terminalProtocol(replyOnly);
84
+ const activeTools = replyOnly ? [...surface, 'replyToUser'] : [...surface, 'replyToUser', 'askUser'];
85
+ // BYTE-STABLE system prompt (scoped trunk + protocol) — no volatile state (state-in-tail).
86
+ currentSystemPrompt = renderPrompt(world, attLabels) + protocol;
87
+ const before = world.toolCalls.length;
88
+ const sseBefore = world.sseActions.length;
89
+ // State-in-tail: the volatile account/brand STATE rides the user message (after the stable
90
+ // prefix), with uploads, then the user text. Refreshed each turn.
91
+ const stateBlock = theme ? theme.stateBlock(world) : '';
92
+ const tailParts = [];
93
+ if (stateBlock && stateBlock.trim())
94
+ tailParts.push(`## Account state\n${stateBlock}`);
95
+ if (attLabels.length)
96
+ tailParts.push(`[Uploads this turn: ${attDisplay.join(', ')}]`);
97
+ tailParts.push(userText);
98
+ const userContent = tailParts.join('\n\n');
99
+ messages.push({ role: 'user', content: userContent });
100
+ const t0 = Date.now();
101
+ try {
102
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
103
+ const terminalCalled = ({ steps }) => {
104
+ const last = steps?.[steps.length - 1];
105
+ for (const tc of (last?.toolCalls ?? []))
106
+ if (isTerminal(tc.toolName ?? tc.name ?? ''))
107
+ return true;
108
+ return false;
109
+ };
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ const full = await agent.generate(messages, {
112
+ activeTools,
113
+ toolChoice: 'required',
114
+ stopWhen: [stepCountIs(maxSteps), terminalCalled],
115
+ hooks: guardHooks,
116
+ ...(inputProcessors ? { inputProcessors } : {}),
117
+ ...genParams,
118
+ });
119
+ if (full.response?.messages)
120
+ messages.push(...full.response.messages);
121
+ const steps = (full.steps ?? []);
122
+ let extraCalls = 0;
123
+ // Forced-terminal fallback: if the model ended without a terminal call, force one (no domain tools).
124
+ if (!ledger.terminalReply.trim()) {
125
+ const fbTools = replyOnly ? ['replyToUser'] : ['replyToUser', 'askUser'];
126
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
+ const fb = await agent.generate([...messages, { role: 'user', content: forcedTerminalPrompt(replyOnly) }], {
128
+ activeTools: fbTools, toolChoice: 'required', stopWhen: [stepCountIs(2), terminalCalled],
129
+ hooks: guardHooks, ...genParams,
130
+ });
131
+ if (fb.response?.messages)
132
+ messages.push(...fb.response.messages);
133
+ extraCalls++;
134
+ ledger.turnCorrections.push('forced-terminal');
135
+ }
136
+ const initialText = full?.tripwire ? String(full.tripwireReason ?? full.reason ?? '') : (ledger.terminalReply || full.text || '');
137
+ // Mutators → onReply checks → bounded NO-TOOLS redrive → deterministic honest-abstain.
138
+ const finalized = await finalizeReply(spec, theme, world, ledger, initialText, async (message) => {
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ const re = await agent.generate([...messages, { role: 'user', content: message }], { toolChoice: 'none', activeTools: [], ...genParams });
141
+ // Candidates are NOT persisted — a rejected draft must never enter the history.
142
+ return re.text ?? '';
143
+ }, redrives);
144
+ const answerText = finalized.text;
145
+ // History reconciliation: persist the reply the user ACTUALLY received when the pipeline
146
+ // changed it (mutator / redrive / exhaustion).
147
+ if (answerText && answerText !== initialText)
148
+ messages.push({ role: 'assistant', content: answerText });
149
+ const durationMs = Date.now() - t0;
150
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
151
+ const newCalls = world.toolCalls.slice(before).map((tc) => ({
152
+ name: tc.name, args: tc.args, resultSummary: JSON.stringify(tc.result ?? null).slice(0, 800), tookEffect: tc.tookEffect, latencyMs: 0,
153
+ }));
154
+ const stepCount = (steps.length || 1) + extraCalls;
155
+ turnRecords.push({
156
+ userText, assistantFinalText: answerText, finalMode: spec.mode, assistantMsgCount: 1,
157
+ iters: stepCount, llmCalls: stepCount, toolCalls: newCalls, thoughts: full.reasoningText ?? null,
158
+ tokens: mapUsage(full.totalUsage), llmCallLatenciesMs: [durationMs], durationMs, maxIterHit: stepCount >= maxSteps,
159
+ recoveryEvents: ledger.turnCorrections.length ? ledger.turnCorrections.slice() : [],
160
+ sseActions: world.sseActions.slice(sseBefore), attachments: attLabels,
161
+ });
162
+ }
163
+ catch (e) {
164
+ const durationMs = Date.now() - t0;
165
+ errorMsg = String(e);
166
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
167
+ if (process.env.DEBUG_ERR)
168
+ console.error('\n[looprun ERR]', e?.message ?? String(e));
169
+ turnRecords.push({
170
+ userText, assistantFinalText: '', finalMode: spec.mode, assistantMsgCount: 0,
171
+ iters: 0, llmCalls: 1, toolCalls: [], thoughts: null,
172
+ tokens: { input: null, output: null, reasoning: null, cacheRead: null, cacheWrite: null, total: null },
173
+ llmCallLatenciesMs: [durationMs], durationMs, maxIterHit: false, recoveryEvents: ['error'],
174
+ });
175
+ break;
176
+ }
177
+ session.turnIndex = i + 1;
178
+ }
179
+ return { turnRecords, messages, errorMsg };
180
+ }
181
+ //# sourceMappingURL=run-conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-conversation.js","sourceRoot":"","sources":["../src/run-conversation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { AgentWorld, TurnLedger } from '@looprun-ai/core';
2
+ export type WorldFactory<W extends AgentWorld = AgentWorld> = (sessionId: string) => W;
3
+ export interface LoopRunSession<W extends AgentWorld = AgentWorld> {
4
+ id: string;
5
+ world: W;
6
+ ledger: TurnLedger;
7
+ turnIndex: number;
8
+ /** Local conversation history (used when no Mastra memory is configured). */
9
+ messages: any[];
10
+ /** Promise-chain mutex tail. */
11
+ chain: Promise<unknown>;
12
+ }
13
+ export declare class SessionStore<W extends AgentWorld = AgentWorld> {
14
+ private readonly sessions;
15
+ private readonly factory;
16
+ private readonly singleton;
17
+ constructor(world: W | WorldFactory<W>);
18
+ get(id: string): LoopRunSession<W>;
19
+ end(id: string): void;
20
+ /** Serialize `fn` on the session's mutex chain. */
21
+ run<T>(session: LoopRunSession<W>, fn: () => Promise<T>): Promise<T>;
22
+ }
23
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC;AAEvF,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IAC/D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAE7E,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CACzB;AAED,qBAAa,YAAY,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAEzB,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAUtC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;IAsBlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIrB,mDAAmD;IACnD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAKrE"}