Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@arc-dev/runtime

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@arc-dev/runtime - npm Package Compare versions

Comparing version
0.0.2-alpha.2
to
0.0.2-alpha.3
+8
dist/storage/in-memory.d.ts
import { Storage, StoredExecution } from "..";
export declare class InMemoryStorage implements Storage {
private executions;
store(sessionId: string, execution: StoredExecution): void;
get(sessionId: string): StoredExecution | null;
delete(sessionId: string): void;
}
//# sourceMappingURL=in-memory.d.ts.map
{"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../src/storage/in-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAE9C,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,UAAU,CAA2C;IAE7D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI;IAI1D,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI9C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGhC"}
+1
-1
import { Arc, ArcEvent, ArcState } from "@arc-dev/core";
import { Storage } from "./types";
export declare function executeArc<State extends Record<string, any>, Context extends Record<string, any>>(arc: Arc<State, Context>, arcState: ArcState<State, Context>, resumeResolvers: Map<string, (value: any) => void>, initialExecuted?: Set<string>, storage?: Storage, sessionId?: string): AsyncIterable<ArcEvent<State, Context>>;
export declare function executeArc<State extends Record<string, any>, Context extends Record<string, any>>(arc: Arc<State, Context>, arcState: ArcState<State, Context>, resumeResolvers: Map<string, (value: any) => void>, initialExecuted?: Set<string>, storage?: Storage, sessionId?: string, parentArc?: Arc<any, any>, parentLoopNodeId?: string, parentExecuted?: Set<string>): AsyncIterable<ArcEvent<State, Context>>;
//# sourceMappingURL=executor.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAIH,QAAQ,EACR,QAAQ,EACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA4DlC,wBAAuB,UAAU,CAC/B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EACxB,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,EAClD,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CA4QzC"}
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAIH,QAAQ,EACR,QAAQ,EACT,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AA4DlC,wBAAuB,UAAU,CAC/B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EACxB,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,EAClC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,EAClD,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EACzB,gBAAgB,CAAC,EAAE,MAAM,EACzB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC3B,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAoUzC"}

@@ -76,3 +76,3 @@ 'use strict';

};
async function* executeArc(arc, arcState, resumeResolvers, initialExecuted, storage, sessionId) {
async function* executeArc(arc, arcState, resumeResolvers, initialExecuted, storage, sessionId, parentArc, parentLoopNodeId, parentExecuted) {
const executed = initialExecuted

@@ -83,8 +83,2 @@ ? new Set(initialExecuted)

const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);
yield {
type: "log",
level: "debug",
message: `Executing arc "${arc.id}" with ${arc.nodes.length} nodes`,
timestamp: Date.now(),
};
while (changed) {

@@ -131,68 +125,90 @@ changed = false;

if (waitingEdges.length > 0) {
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has ${waitingEdges.length} waiting edge(s)`,
timestamp: Date.now(),
};
for (const edge of waitingEdges) {
if (edge.wait) {
const { message, validator } = edge.wait;
yield {
type: "log",
level: "info",
message: `Pausing execution at node "${node.id}" waiting for input on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
// Use sessionId if available, otherwise fall back to nodeId for same-instance resume
const resolverKey = sessionId || node.id;
const resumePromise = new Promise((resolve) => {
resumeResolvers.set(resolverKey, resolve);
});
// If storage is provided, store execution state
if (storage && sessionId) {
await storage.store(sessionId, {
arc,
snapshot: {
executed: Array.from(executed),
...arcState.serialize(),
},
const edgeContext = arcState.getEdgeContext();
const hasInput = edgeContext.has(node.id);
if (hasInput) {
const inputValue = edgeContext.get(node.id);
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has waiting edge(s) but input already provided (${inputValue}), continuing execution`,
timestamp: Date.now(),
};
// Don't clear the edge input yet - let the node read it first
// It will be cleared after node execution below
}
else {
// No input yet, need to wait for it
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has ${waitingEdges.length} waiting edge(s)`,
timestamp: Date.now(),
};
for (const edge of waitingEdges) {
if (edge.wait) {
const { message, validator } = edge.wait;
yield {
type: "log",
level: "info",
message: `Pausing execution at node "${node.id}" waiting for input on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
// Use sessionId if available, otherwise fall back to nodeId for same-instance resume
const resolverKey = sessionId || node.id;
const resumePromise = new Promise((resolve) => {
resumeResolvers.set(resolverKey, resolve);
});
// If storage is provided, store execution state
// If this is a sub-arc, store both the sub-arc and parent arc so we can continue the loop
if (storage && sessionId) {
await storage.store(sessionId, {
arc, // Store the current arc (sub-arc if in a loop)
snapshot: {
executed: Array.from(executed),
...arcState.serialize(),
},
nodeId: node.id,
parentArc: parentArc || undefined, // Store parent arc if this is a sub-arc
parentLoopNodeId: parentLoopNodeId || undefined, // Store loop node ID
parentExecuted: parentExecuted
? Array.from(parentExecuted)
: undefined, // Store parent's executed set if this is a sub-arc
});
}
const wrappedValidator = validator
? (input, sc) => {
return validator(input, stateContext);
}
: undefined;
yield {
type: "paused",
nodeId: node.id,
});
prompt: message,
validator: wrappedValidator,
timestamp: Date.now(),
sessionId: sessionId,
snapshot: storage
? undefined // Don't include in event if using storage
: {
executed: Array.from(executed),
...arcState.serialize(),
},
};
const result = await resumePromise;
yield {
type: "log",
level: "debug",
message: `Resumed with input for node ${node.id}`,
timestamp: Date.now(),
};
// Convert result to string for edge input (maintaining compatibility)
const inputValue = typeof result === "string" ? result : JSON.stringify(result);
arcState.setEdgeContext(node.id, inputValue);
yield {
type: "log",
level: "debug",
message: `Input received on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
}
const wrappedValidator = validator
? (input, sc) => {
return validator(input, stateContext);
}
: undefined;
yield {
type: "paused",
nodeId: node.id,
prompt: message,
validator: wrappedValidator,
timestamp: Date.now(),
sessionId: sessionId,
snapshot: storage
? undefined // Don't include in event if using storage
: {
executed: Array.from(executed),
...arcState.serialize(),
},
};
const result = await resumePromise;
yield {
type: "log",
level: "debug",
message: `Resumed with input for node ${node.id}`,
timestamp: Date.now(),
};
// Convert result to string for edge input (maintaining compatibility)
const inputValue = typeof result === "string" ? result : JSON.stringify(result);
arcState.setEdgeIn(node.id, inputValue);
yield {
type: "log",
level: "debug",
message: `Input received on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
}

@@ -252,2 +268,7 @@ }

};
// Clear storage entry if loop completed naturally (not paused)
// This ensures that when the executor finishes, the runtime knows the arc is done
if (storage && sessionId) {
await storage.delete(sessionId);
}
break;

@@ -261,3 +282,6 @@ }

};
yield* executeArc(subArc, arcState, resumeResolvers, undefined, storage, sessionId);
// Store parent's executed set (without the loop node, so it can run again when resuming)
// The loop node needs to run again to check the condition and continue the loop
const parentExecutedSet = new Set(executed);
yield* executeArc(subArc, arcState, resumeResolvers, undefined, storage, sessionId, arc, node.id, parentExecutedSet);
iteration++;

@@ -272,2 +296,6 @@ }

};
// Clear storage entry if loop completed due to max iterations (not paused)
if (storage && sessionId) {
await storage.delete(sessionId);
}
}

@@ -297,2 +325,24 @@ executed.add(node.id);

};
const stateContext = arcState.getStateContext();
yield {
type: "state",
nodeId: node.id,
state: stateContext.state.toJS(),
context: stateContext.context.toJS(),
timestamp: Date.now(),
};
// Clear edge input after node execution if it was set (for waiting edges)
const waitingEdgesForNode = getWaitingEdges(node.id, arc.edges);
if (waitingEdgesForNode.length > 0) {
const edgeContext = arcState.getEdgeContext();
if (edgeContext.has(node.id)) {
arcState.clearEdgeContext(node.id);
yield {
type: "log",
level: "debug",
message: `Cleared edge input for node "${node.id}" after execution`,
timestamp: Date.now(),
};
}
}
executed.add(node.id);

@@ -346,2 +396,13 @@ changed = true;

async *resumeFromSession(sessionId, input) {
// Clear any existing resolver since we're starting a new execution
// In serverless environments, we can't rely on the original execution still running
if (this.resumeResolvers.has(sessionId)) {
this.resumeResolvers.delete(sessionId);
yield {
type: "log",
level: "info",
message: `[Runtime] Cleared existing resolver for session ${sessionId} before resuming`,
timestamp: Date.now(),
};
}
const stored = await this.storage.get(sessionId);

@@ -355,7 +416,9 @@ if (!stored) {

}
const arcState = core.ArcState.fromSerialized({
state: stored.snapshot.state,
context: stored.snapshot.context,
edgeIn: stored.snapshot.edgeIn,
});
yield {
type: "log",
level: "info",
message: `[Runtime] Resuming session ${sessionId}, paused at node "${stored.nodeId}", arc: "${stored.arc.id}", has parent: ${!!stored.parentArc}`,
timestamp: Date.now(),
};
const arcState = core.ArcState.fromSerialized(stored.snapshot);
const resumeInput = input !== undefined ? input : stored.pendingInput;

@@ -373,25 +436,54 @@ if (resumeInput === undefined) {

: JSON.stringify(resumeInput);
arcState.setEdgeIn(stored.nodeId, inputValue);
yield {
type: "log",
level: "info",
message: `[Runtime] Setting edge input for node "${stored.nodeId}" with value: ${inputValue}`,
timestamp: Date.now(),
};
arcState.setEdgeContext(stored.nodeId, inputValue);
try {
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" resuming from node "${stored.nodeId}"`,
timestamp: Date.now(),
};
// First, execute the sub-arc with the input to complete it
yield* executeArc(stored.arc, arcState, this.resumeResolvers, new Set(stored.snapshot.executed), this.storage, sessionId);
const finalContext = arcState.getContext().toJS();
const finalState = arcState.getState().toJS();
yield {
type: "done",
finalState,
finalContext,
};
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" completed`,
timestamp: Date.now(),
};
await this.storage.delete(sessionId);
// If this was a sub-arc with a parent, continue the parent loop
if (stored.parentArc && stored.parentLoopNodeId) {
yield {
type: "log",
level: "info",
message: `Sub-arc completed, continuing parent arc "${stored.parentArc.id}" loop "${stored.parentLoopNodeId}"`,
timestamp: Date.now(),
};
// Use the stored parent executed set to continue from where we left off
// This ensures we don't restart the parent arc from the beginning
const parentExecuted = stored.parentExecuted
? new Set(stored.parentExecuted)
: new Set();
yield {
type: "log",
level: "info",
message: `Continuing parent arc with executed nodes: [${Array.from(parentExecuted).join(", ")}]`,
timestamp: Date.now(),
};
yield* executeArc(stored.parentArc, arcState, this.resumeResolvers, parentExecuted, // Use stored parent executed set to continue from where we left off
this.storage, sessionId);
}
// Check if executor is still paused (waiting for input)
// If not paused, the arc completed successfully
const stillPaused = await this.storage.get(sessionId);
if (!stillPaused) {
// Clear any remaining storage entry to be safe
await this.storage.delete(sessionId);
const finalContext = arcState.getContext().toJS();
const finalState = arcState.getState().toJS();
yield {
type: "done",
finalState,
finalContext,
};
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" completed`,
timestamp: Date.now(),
};
}
}

@@ -398,0 +490,0 @@ catch (error) {

@@ -1,1 +0,1 @@

{"version":3,"file":"index.cjs","sources":["../src/nodes.ts","../src/executor.ts","../src/storage/memory.ts","../src/runtime.ts"],"sourcesContent":["import {\n ArcNode,\n ArcState,\n ArcNodeKind,\n ImmutableMap,\n ArcEvent,\n} from \"@arc-dev/core\";\n\nexport async function* execute<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n node: ArcNode<State, Context>,\n arcState: ArcState<State, Context>\n): AsyncIterable<ArcEvent<State, Context>> {\n const stateContext = arcState.getStateContext();\n\n switch (node.kind) {\n case ArcNodeKind.Agent: {\n const agent = node.handler;\n yield* agent.run(stateContext, node.id);\n\n const pendingContext = (stateContext as any).__pendingContext;\n if (pendingContext) {\n arcState.setContext(pendingContext.nodeId, pendingContext.result);\n delete (stateContext as any).__pendingContext;\n }\n\n break;\n }\n case ArcNodeKind.Action: {\n const action = node.handler;\n yield* action.run(stateContext, node.id);\n\n const pendingState = (stateContext as any).__pendingState;\n\n if (pendingState) {\n arcState.setState(pendingState);\n delete (stateContext as any).__pendingState;\n }\n\n break;\n }\n case ArcNodeKind.Arc: {\n arcState.setContext(node.id, ImmutableMap({ executed: true }));\n break;\n }\n }\n}\n","import {\n Arc,\n ArcStateContext,\n ArcEdge,\n ArcNodeKind,\n ArcEvent,\n ArcState,\n} from \"@arc-dev/core\";\nimport { execute } from \"./nodes\";\nimport { Storage } from \"./types\";\n\nconst buildDependencyMap = (\n nodes: Array<{ id: string }>,\n edges: ArcEdge[]\n): Map<string, string[]> => {\n const deps = new Map<string, string[]>();\n\n for (const node of nodes) {\n deps.set(node.id, []);\n }\n\n for (const edge of edges) {\n if (edge.from === edge.to) {\n continue;\n }\n const currentDeps = deps.get(edge.to) || [];\n currentDeps.push(edge.from);\n deps.set(edge.to, currentDeps);\n }\n\n return deps;\n};\n\nconst getEdgeConditions = (\n nodeId: string,\n edges: ArcEdge[],\n conditions: Map<string, (sc: ArcStateContext<any, any>) => boolean>\n): Array<(sc: ArcStateContext<any, any>) => boolean> => {\n const edgeConditions: Array<(sc: ArcStateContext<any, any>) => boolean> = [];\n\n for (const edge of edges) {\n if (edge.to === nodeId && edge.from !== edge.to) {\n if (edge.when) {\n edgeConditions.push(edge.when);\n } else if (edge.condition && conditions.has(edge.condition)) {\n const conditionFn = conditions.get(edge.condition)!;\n edgeConditions.push(conditionFn);\n }\n }\n }\n\n return edgeConditions;\n};\n\nconst getWaitingEdges = (nodeId: string, edges: ArcEdge[]): ArcEdge[] => {\n return edges.filter(\n (edge) => edge.to === nodeId && edge.from !== edge.to && edge.wait\n );\n};\n\nconst getLoopEdge = (nodeId: string, edges: ArcEdge[]): ArcEdge | null => {\n for (const edge of edges) {\n if (edge.from === nodeId && edge.to === nodeId) {\n return edge;\n }\n }\n return null;\n};\n\nexport async function* executeArc<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n arc: Arc<State, Context>,\n arcState: ArcState<State, Context>,\n resumeResolvers: Map<string, (value: any) => void>,\n initialExecuted?: Set<string>,\n storage?: Storage,\n sessionId?: string\n): AsyncIterable<ArcEvent<State, Context>> {\n const executed = initialExecuted\n ? new Set(initialExecuted)\n : new Set<string>();\n let changed = true;\n\n const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Executing arc \"${arc.id}\" with ${arc.nodes.length} nodes`,\n timestamp: Date.now(),\n };\n\n while (changed) {\n changed = false;\n\n for (const node of arc.nodes) {\n if (executed.has(node.id)) continue;\n\n const deps = dependencyMap.get(node.id) || [];\n const depsDone = deps.every((d: string) => executed.has(d));\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\": deps=${JSON.stringify(deps)}, depsDone=${depsDone}`,\n timestamp: Date.now(),\n };\n\n if (!depsDone) {\n continue;\n }\n\n const stateContext = arcState.getStateContext();\n\n const edgeConditions = getEdgeConditions(\n node.id,\n arc.edges,\n arc.conditions\n );\n\n if (edgeConditions.length > 0) {\n const allConditionsMet = edgeConditions.every((condFn) => {\n try {\n return condFn(stateContext);\n } catch (e) {\n return false;\n }\n });\n\n if (!allConditionsMet) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Skipping node \"${node.id}\" due to edge condition(s)`,\n timestamp: Date.now(),\n };\n executed.add(node.id);\n changed = true;\n continue;\n }\n }\n\n const waitingEdges = getWaitingEdges(node.id, arc.edges);\n\n if (waitingEdges.length > 0) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has ${waitingEdges.length} waiting edge(s)`,\n timestamp: Date.now(),\n };\n\n for (const edge of waitingEdges) {\n if (edge.wait) {\n const { message, validator } = edge.wait;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Pausing execution at node \"${node.id}\" waiting for input on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n\n // Use sessionId if available, otherwise fall back to nodeId for same-instance resume\n const resolverKey = sessionId || node.id;\n const resumePromise = new Promise<any>((resolve) => {\n resumeResolvers.set(resolverKey, resolve);\n });\n\n // If storage is provided, store execution state\n if (storage && sessionId) {\n await storage.store(sessionId, {\n arc,\n snapshot: {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n nodeId: node.id,\n });\n }\n\n const wrappedValidator = validator\n ? (input: any, sc: any) => {\n return validator(input, stateContext);\n }\n : undefined;\n\n yield {\n type: \"paused\" as const,\n nodeId: node.id,\n prompt: message,\n validator: wrappedValidator,\n timestamp: Date.now(),\n sessionId: sessionId,\n snapshot: storage\n ? undefined // Don't include in event if using storage\n : {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n };\n\n const result = await resumePromise;\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Resumed with input for node ${node.id}`,\n timestamp: Date.now(),\n };\n\n // Convert result to string for edge input (maintaining compatibility)\n const inputValue =\n typeof result === \"string\" ? result : JSON.stringify(result);\n arcState.setEdgeIn(node.id, inputValue);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Input received on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n }\n }\n }\n\n const loopEdge = getLoopEdge(node.id, arc.edges);\n\n if (loopEdge && node.kind === ArcNodeKind.Arc && node.handler.arc) {\n const subArc = node.handler.arc;\n const maxIterations = loopEdge.maxIterations || 100;\n let iteration = 0;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Starting loop \"${node.id}\" (max ${maxIterations} iterations)`,\n timestamp: Date.now(),\n };\n\n while (iteration < maxIterations) {\n const stateContext = arcState.getStateContext();\n\n let shouldContinue = true;\n\n if (loopEdge.when) {\n try {\n shouldContinue = loopEdge.when(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n } else if (\n loopEdge.condition &&\n arc.conditions.has(loopEdge.condition)\n ) {\n const conditionFn = arc.conditions.get(loopEdge.condition)!;\n try {\n shouldContinue = conditionFn(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n }\n\n if (!shouldContinue) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Loop \"${node.id}\" condition failed after ${iteration} iterations`,\n timestamp: Date.now(),\n };\n break;\n }\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Loop \"${node.id}\" iteration ${iteration + 1}`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n subArc,\n arcState,\n resumeResolvers,\n undefined,\n storage,\n sessionId\n );\n\n iteration++;\n }\n\n if (iteration >= maxIterations) {\n yield {\n type: \"log\" as const,\n level: \"warn\" as const,\n message: `Loop \"${node.id}\" reached max iterations (${maxIterations})`,\n timestamp: Date.now(),\n };\n }\n\n executed.add(node.id);\n changed = true;\n } else {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Running node \"${node.id}\" (${node.kind})`,\n timestamp: Date.now(),\n };\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `About to execute node ${node.id}`,\n timestamp: Date.now(),\n };\n\n yield* execute(node, arcState);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Finished executing node ${node.id}`,\n timestamp: Date.now(),\n };\n\n executed.add(node.id);\n\n changed = true;\n }\n }\n }\n}\n","import { Storage, StoredExecution } from \"..\";\n\nexport class InMemoryStorage implements Storage {\n private executions: Map<string, StoredExecution> = new Map();\n\n store(sessionId: string, execution: StoredExecution): void {\n this.executions.set(sessionId, execution);\n }\n\n get(sessionId: string): StoredExecution | null {\n return this.executions.get(sessionId) || null;\n }\n\n delete(sessionId: string): void {\n this.executions.delete(sessionId);\n }\n}\n","import {\n ArcRuntime as ArcRuntimeType,\n Arc,\n ArcState,\n ArcEvent,\n} from \"@arc-dev/core\";\nimport { executeArc } from \"./executor\";\nimport { InMemoryStorage } from \"./storage\";\nimport { Storage } from \"./types/storage\";\n\nexport interface ArcRuntimeOptions {\n storage?: Storage;\n}\n\nexport class ArcRuntime implements ArcRuntimeType {\n private resumeResolvers: Map<string, (value: any) => void> = new Map();\n private storage: Storage;\n private sessionIdGenerator: () => string;\n\n constructor(options?: ArcRuntimeOptions) {\n this.storage = options?.storage || new InMemoryStorage();\n this.sessionIdGenerator = () =>\n `session_${Date.now()}_${Math.random().toString(36).substring(7)}`;\n }\n\n async resume<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input: any): Promise<string | void> {\n const resolver = this.resumeResolvers.get(sessionId);\n\n if (resolver) {\n resolver(input);\n this.resumeResolvers.delete(sessionId);\n return;\n }\n\n const stored = this.storage.get(sessionId);\n const storedExecution = stored instanceof Promise ? await stored : stored;\n\n if (storedExecution) {\n storedExecution.pendingInput = input;\n\n const storeResult = this.storage.store(sessionId, storedExecution);\n if (storeResult instanceof Promise) {\n await storeResult;\n }\n\n return sessionId;\n }\n\n return sessionId;\n }\n\n async *resumeFromSession<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input?: any): AsyncIterable<ArcEvent<State, Context>> {\n const stored = await this.storage.get(sessionId);\n if (!stored) {\n yield {\n type: \"error\" as const,\n error: new Error(`Session ${sessionId} not found or expired`),\n };\n return;\n }\n\n const arcState = ArcState.fromSerialized<State, Context>({\n state: stored.snapshot.state,\n context: stored.snapshot.context,\n edgeIn: stored.snapshot.edgeIn,\n });\n\n const resumeInput = input !== undefined ? input : stored.pendingInput;\n\n if (resumeInput === undefined) {\n yield {\n type: \"error\" as const,\n error: new Error(`No input provided for session ${sessionId}`),\n };\n return;\n }\n\n // Set the input for the paused node\n const inputValue =\n typeof resumeInput === \"string\"\n ? resumeInput\n : JSON.stringify(resumeInput);\n\n arcState.setEdgeIn(stored.nodeId, inputValue);\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" resuming from node \"${stored.nodeId}\"`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n stored.arc,\n arcState,\n this.resumeResolvers,\n new Set(stored.snapshot.executed),\n this.storage,\n sessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n await this.storage.delete(sessionId);\n } catch (error) {\n await this.storage.delete(sessionId);\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n\n async *run<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(\n arc: Arc<State, Context>,\n state: State,\n sessionId?: string\n ): AsyncIterable<ArcEvent<State, Context>> {\n const arcState = new ArcState<State, Context>(state);\n const execSessionId = sessionId || this.sessionIdGenerator();\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" started`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n arc,\n arcState,\n this.resumeResolvers,\n undefined,\n this.storage,\n execSessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n } catch (error) {\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n}\n"],"names":["ArcNodeKind","ImmutableMap","ArcState"],"mappings":";;;;AAQO,gBAAgB,OAAO,CAI5B,IAA6B,EAC7B,QAAkC,EAAA;AAElC,IAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE;AAE/C,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAKA,gBAAW,CAAC,KAAK,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;AAEvC,YAAA,MAAM,cAAc,GAAI,YAAoB,CAAC,gBAAgB;YAC7D,IAAI,cAAc,EAAE;gBAClB,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;gBACjE,OAAQ,YAAoB,CAAC,gBAAgB;YAC/C;YAEA;QACF;AACA,QAAA,KAAKA,gBAAW,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAC3B,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC;AAExC,YAAA,MAAM,YAAY,GAAI,YAAoB,CAAC,cAAc;YAEzD,IAAI,YAAY,EAAE;AAChB,gBAAA,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC/B,OAAQ,YAAoB,CAAC,cAAc;YAC7C;YAEA;QACF;AACA,QAAA,KAAKA,gBAAW,CAAC,GAAG,EAAE;AACpB,YAAA,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAEC,iBAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D;QACF;;AAEJ;;ACrCA,MAAM,kBAAkB,GAAG,CACzB,KAA4B,EAC5B,KAAgB,KACS;AACzB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB;AAExC,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IACvB;AAEA,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE;YACzB;QACF;AACA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAC3C,QAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC;IAChC;AAEA,IAAA,OAAO,IAAI;AACb,CAAC;AAED,MAAM,iBAAiB,GAAG,CACxB,MAAc,EACd,KAAgB,EAChB,UAAmE,KACd;IACrD,MAAM,cAAc,GAAsD,EAAE;AAE5E,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;AAAO,iBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC3D,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAE;AACnD,gBAAA,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;YAClC;QACF;IACF;AAEA,IAAA,OAAO,cAAc;AACvB,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,KAAgB,KAAe;IACtE,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CACnE;AACH,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,KAAgB,KAAoB;AACvE,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE;AAC9C,YAAA,OAAO,IAAI;QACb;IACF;AACA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,gBAAgB,UAAU,CAI/B,GAAwB,EACxB,QAAkC,EAClC,eAAkD,EAClD,eAA6B,EAC7B,OAAiB,EACjB,SAAkB,EAAA;IAElB,MAAM,QAAQ,GAAG;AACf,UAAE,IAAI,GAAG,CAAC,eAAe;AACzB,UAAE,IAAI,GAAG,EAAU;IACrB,IAAI,OAAO,GAAG,IAAI;AAElB,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;IAE9D,MAAM;AACJ,QAAA,IAAI,EAAE,KAAc;AACpB,QAAA,KAAK,EAAE,OAAgB;QACvB,OAAO,EAAE,CAAA,eAAA,EAAkB,GAAG,CAAC,EAAE,CAAA,OAAA,EAAU,GAAG,CAAC,KAAK,CAAC,MAAM,CAAA,MAAA,CAAQ;AACnE,QAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB;IAED,OAAO,OAAO,EAAE;QACd,OAAO,GAAG,KAAK;AAEf,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE;AAE3B,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAS,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE3D,MAAM;AACJ,gBAAA,IAAI,EAAE,KAAc;AACpB,gBAAA,KAAK,EAAE,OAAgB;AACvB,gBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,EAAE,CAAA,QAAA,EAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE;AAChF,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;YAED,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AAEA,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE;AAE/C,YAAA,MAAM,cAAc,GAAG,iBAAiB,CACtC,IAAI,CAAC,EAAE,EACP,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,UAAU,CACf;AAED,YAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM,KAAI;AACvD,oBAAA,IAAI;AACF,wBAAA,OAAO,MAAM,CAAC,YAAY,CAAC;oBAC7B;oBAAE,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,KAAK;oBACd;AACF,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,gBAAgB,EAAE;oBACrB,MAAM;AACJ,wBAAA,IAAI,EAAE,KAAc;AACpB,wBAAA,KAAK,EAAE,OAAgB;AACvB,wBAAA,OAAO,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,EAAE,CAAA,0BAAA,CAA4B;AAC9D,wBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;AACD,oBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,OAAO,GAAG,IAAI;oBACd;gBACF;YACF;AAEA,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC;AAExD,YAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,MAAM;AACJ,oBAAA,IAAI,EAAE,KAAc;AACpB,oBAAA,KAAK,EAAE,OAAgB;oBACvB,OAAO,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA,MAAA,EAAS,YAAY,CAAC,MAAM,CAAA,gBAAA,CAAkB;AACvE,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;AAED,gBAAA,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;AAC/B,oBAAA,IAAI,IAAI,CAAC,IAAI,EAAE;wBACb,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI;wBAExC,MAAM;AACJ,4BAAA,IAAI,EAAE,KAAc;AACpB,4BAAA,KAAK,EAAE,MAAe;AACtB,4BAAA,OAAO,EAAE,CAAA,2BAAA,EAA8B,IAAI,CAAC,EAAE,CAAA,4BAAA,EAA+B,IAAI,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,EAAE,CAAA,CAAE;AACtG,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB;;AAGD,wBAAA,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,CAAC,EAAE;wBACxC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAM,CAAC,OAAO,KAAI;AACjD,4BAAA,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;AAC3C,wBAAA,CAAC,CAAC;;AAGF,wBAAA,IAAI,OAAO,IAAI,SAAS,EAAE;AACxB,4BAAA,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE;gCAC7B,GAAG;AACH,gCAAA,QAAQ,EAAE;AACR,oCAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oCAC9B,GAAG,QAAQ,CAAC,SAAS,EAAE;AACxB,iCAAA;gCACD,MAAM,EAAE,IAAI,CAAC,EAAE;AAChB,6BAAA,CAAC;wBACJ;wBAEA,MAAM,gBAAgB,GAAG;AACvB,8BAAE,CAAC,KAAU,EAAE,EAAO,KAAI;AACtB,gCAAA,OAAO,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC;4BACvC;8BACA,SAAS;wBAEb,MAAM;AACJ,4BAAA,IAAI,EAAE,QAAiB;4BACvB,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,4BAAA,MAAM,EAAE,OAAO;AACf,4BAAA,SAAS,EAAE,gBAAgB;AAC3B,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,4BAAA,SAAS,EAAE,SAAS;AACpB,4BAAA,QAAQ,EAAE;kCACN,SAAS;AACX,kCAAE;AACE,oCAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;oCAC9B,GAAG,QAAQ,CAAC,SAAS,EAAE;AACxB,iCAAA;yBACN;AAED,wBAAA,MAAM,MAAM,GAAG,MAAM,aAAa;wBAElC,MAAM;AACJ,4BAAA,IAAI,EAAE,KAAc;AACpB,4BAAA,KAAK,EAAE,OAAgB;AACvB,4BAAA,OAAO,EAAE,CAAA,4BAAA,EAA+B,IAAI,CAAC,EAAE,CAAA,CAAE;AACjD,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB;;AAGD,wBAAA,MAAM,UAAU,GACd,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;wBAC9D,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC;wBAEvC,MAAM;AACJ,4BAAA,IAAI,EAAE,KAAc;AACpB,4BAAA,KAAK,EAAE,OAAgB;4BACvB,OAAO,EAAE,0BAA0B,IAAI,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,EAAE,CAAA,CAAE;AAC5D,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB;oBACH;gBACF;YACF;AAEA,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC;AAEhD,YAAA,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAKD,gBAAW,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;AAC/B,gBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,IAAI,GAAG;gBACnD,IAAI,SAAS,GAAG,CAAC;gBAEjB,MAAM;AACJ,oBAAA,IAAI,EAAE,KAAc;AACpB,oBAAA,KAAK,EAAE,MAAe;AACtB,oBAAA,OAAO,EAAE,CAAA,eAAA,EAAkB,IAAI,CAAC,EAAE,CAAA,OAAA,EAAU,aAAa,CAAA,YAAA,CAAc;AACvE,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;AAED,gBAAA,OAAO,SAAS,GAAG,aAAa,EAAE;AAChC,oBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,EAAE;oBAE/C,IAAI,cAAc,GAAG,IAAI;AAEzB,oBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,wBAAA,IAAI;AACF,4BAAA,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;wBAC9C;wBAAE,OAAO,CAAC,EAAE;4BACV,MAAM;AACJ,gCAAA,IAAI,EAAE,KAAc;AACpB,gCAAA,KAAK,EAAE,OAAgB;gCACvB,OAAO,EAAE,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAE;AACrC,gCAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;6BACtB;4BACD;wBACF;oBACF;yBAAO,IACL,QAAQ,CAAC,SAAS;wBAClB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EACtC;AACA,wBAAA,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAE;AAC3D,wBAAA,IAAI;AACF,4BAAA,cAAc,GAAG,WAAW,CAAC,YAAY,CAAC;wBAC5C;wBAAE,OAAO,CAAC,EAAE;4BACV,MAAM;AACJ,gCAAA,IAAI,EAAE,KAAc;AACpB,gCAAA,KAAK,EAAE,OAAgB;gCACvB,OAAO,EAAE,CAAA,sBAAA,EAAyB,CAAC,CAAA,CAAE;AACrC,gCAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;6BACtB;4BACD;wBACF;oBACF;oBAEA,IAAI,CAAC,cAAc,EAAE;wBACnB,MAAM;AACJ,4BAAA,IAAI,EAAE,KAAc;AACpB,4BAAA,KAAK,EAAE,MAAe;AACtB,4BAAA,OAAO,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,EAAE,CAAA,yBAAA,EAA4B,SAAS,CAAA,WAAA,CAAa;AAC3E,4BAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;yBACtB;wBACD;oBACF;oBAEA,MAAM;AACJ,wBAAA,IAAI,EAAE,KAAc;AACpB,wBAAA,KAAK,EAAE,OAAgB;wBACvB,OAAO,EAAE,SAAS,IAAI,CAAC,EAAE,CAAA,YAAA,EAAe,SAAS,GAAG,CAAC,CAAA,CAAE;AACvD,wBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;AAED,oBAAA,OAAO,UAAU,CACf,MAAM,EACN,QAAQ,EACR,eAAe,EACf,SAAS,EACT,OAAO,EACP,SAAS,CACV;AAED,oBAAA,SAAS,EAAE;gBACb;AAEA,gBAAA,IAAI,SAAS,IAAI,aAAa,EAAE;oBAC9B,MAAM;AACJ,wBAAA,IAAI,EAAE,KAAc;AACpB,wBAAA,KAAK,EAAE,MAAe;AACtB,wBAAA,OAAO,EAAE,CAAA,MAAA,EAAS,IAAI,CAAC,EAAE,CAAA,0BAAA,EAA6B,aAAa,CAAA,CAAA,CAAG;AACtE,wBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;gBACH;AAEA,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,GAAG,IAAI;YAChB;iBAAO;gBACL,MAAM;AACJ,oBAAA,IAAI,EAAE,KAAc;AACpB,oBAAA,KAAK,EAAE,MAAe;oBACtB,OAAO,EAAE,iBAAiB,IAAI,CAAC,EAAE,CAAA,GAAA,EAAM,IAAI,CAAC,IAAI,CAAA,CAAA,CAAG;AACnD,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;gBAED,MAAM;AACJ,oBAAA,IAAI,EAAE,KAAc;AACpB,oBAAA,KAAK,EAAE,OAAgB;AACvB,oBAAA,OAAO,EAAE,CAAA,sBAAA,EAAyB,IAAI,CAAC,EAAE,CAAA,CAAE;AAC3C,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;gBAED,OAAO,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAE9B,MAAM;AACJ,oBAAA,IAAI,EAAE,KAAc;AACpB,oBAAA,KAAK,EAAE,OAAgB;AACvB,oBAAA,OAAO,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAAC,EAAE,CAAA,CAAE;AAC7C,oBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACtB;AAED,gBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAErB,OAAO,GAAG,IAAI;YAChB;QACF;IACF;AACF;;MCzVa,eAAe,CAAA;AAClB,IAAA,UAAU,GAAiC,IAAI,GAAG,EAAE;IAE5D,KAAK,CAAC,SAAiB,EAAE,SAA0B,EAAA;QACjD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC;IAC3C;AAEA,IAAA,GAAG,CAAC,SAAiB,EAAA;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI;IAC/C;AAEA,IAAA,MAAM,CAAC,SAAiB,EAAA;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;IACnC;AACD;;MCFY,UAAU,CAAA;AACb,IAAA,eAAe,GAAsC,IAAI,GAAG,EAAE;AAC9D,IAAA,OAAO;AACP,IAAA,kBAAkB;AAE1B,IAAA,WAAA,CAAY,OAA2B,EAAA;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,eAAe,EAAE;QACxD,IAAI,CAAC,kBAAkB,GAAG,MACxB,CAAA,QAAA,EAAW,IAAI,CAAC,GAAG,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,CAAE;IACtE;AAEA,IAAA,MAAM,MAAM,CAGV,SAAiB,EAAE,KAAU,EAAA;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;QAEpD,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,KAAK,CAAC;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;YACtC;QACF;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1C,QAAA,MAAM,eAAe,GAAG,MAAM,YAAY,OAAO,GAAG,MAAM,MAAM,GAAG,MAAM;QAEzE,IAAI,eAAe,EAAE;AACnB,YAAA,eAAe,CAAC,YAAY,GAAG,KAAK;AAEpC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC;AAClE,YAAA,IAAI,WAAW,YAAY,OAAO,EAAE;AAClC,gBAAA,MAAM,WAAW;YACnB;AAEA,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,iBAAiB,CAGtB,SAAiB,EAAE,KAAW,EAAA;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM;AACJ,gBAAA,IAAI,EAAE,OAAgB;AACtB,gBAAA,KAAK,EAAE,IAAI,KAAK,CAAC,CAAA,QAAA,EAAW,SAAS,uBAAuB,CAAC;aAC9D;YACD;QACF;AAEA,QAAA,MAAM,QAAQ,GAAGE,aAAQ,CAAC,cAAc,CAAiB;AACvD,YAAA,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;AAC5B,YAAA,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;AAChC,YAAA,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;AAC/B,SAAA,CAAC;AAEF,QAAA,MAAM,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,YAAY;AAErE,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,MAAM;AACJ,gBAAA,IAAI,EAAE,OAAgB;AACtB,gBAAA,KAAK,EAAE,IAAI,KAAK,CAAC,CAAA,8BAAA,EAAiC,SAAS,EAAE,CAAC;aAC/D;YACD;QACF;;AAGA,QAAA,MAAM,UAAU,GACd,OAAO,WAAW,KAAK;AACrB,cAAE;AACF,cAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QAEjC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;AAE7C,QAAA,IAAI;YACF,MAAM;AACJ,gBAAA,IAAI,EAAE,KAAc;AACpB,gBAAA,KAAK,EAAE,MAAe;gBACtB,OAAO,EAAE,CAAA,KAAA,EAAQ,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA,sBAAA,EAAyB,MAAM,CAAC,MAAM,CAAA,CAAA,CAAG;AACvE,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;AAED,YAAA,OAAO,UAAU,CACf,MAAM,CAAC,GAAG,EACV,QAAQ,EACR,IAAI,CAAC,eAAe,EACpB,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACjC,IAAI,CAAC,OAAO,EACZ,SAAS,CACV;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAa;YAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAW;YAEtD,MAAM;AACJ,gBAAA,IAAI,EAAE,MAAe;gBACrB,UAAU;gBACV,YAAY;aACb;YAED,MAAM;AACJ,gBAAA,IAAI,EAAE,KAAc;AACpB,gBAAA,KAAK,EAAE,MAAe;AACtB,gBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA,WAAA,CAAa;AAC3C,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QACtC;QAAE,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACpC,MAAM;AACJ,gBAAA,IAAI,EAAE,OAAgB;AACtB,gBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE;QACH;IACF;IAEA,OAAO,GAAG,CAIR,GAAwB,EACxB,KAAY,EACZ,SAAkB,EAAA;AAElB,QAAA,MAAM,QAAQ,GAAG,IAAIA,aAAQ,CAAiB,KAAK,CAAC;QACpD,MAAM,aAAa,GAAG,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAE5D,QAAA,IAAI;YACF,MAAM;AACJ,gBAAA,IAAI,EAAE,KAAc;AACpB,gBAAA,KAAK,EAAE,MAAe;AACtB,gBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAC,EAAE,CAAA,SAAA,CAAW;AAClC,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;YAED,OAAO,UAAU,CACf,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,eAAe,EACpB,SAAS,EACT,IAAI,CAAC,OAAO,EACZ,aAAa,CACd;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAa;YAC5D,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAW;YAEtD,MAAM;AACJ,gBAAA,IAAI,EAAE,MAAe;gBACrB,UAAU;gBACV,YAAY;aACb;YAED,MAAM;AACJ,gBAAA,IAAI,EAAE,KAAc;AACpB,gBAAA,KAAK,EAAE,MAAe;AACtB,gBAAA,OAAO,EAAE,CAAA,KAAA,EAAQ,GAAG,CAAC,EAAE,CAAA,WAAA,CAAa;AACpC,gBAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB;YAED,IAAI,aAAa,EAAE;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC1C;QACF;QAAE,OAAO,KAAK,EAAE;YACd,IAAI,aAAa,EAAE;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC1C;YACA,MAAM;AACJ,gBAAA,IAAI,EAAE,OAAgB;AACtB,gBAAA,KAAK,EAAE,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE;QACH;IACF;AACD;;;;;"}
{"version":3,"file":"index.cjs","sources":["../src/nodes.ts","../src/executor.ts","../src/storage/in-memory.ts","../src/runtime.ts"],"sourcesContent":["import {\n ArcNode,\n ArcState,\n ArcNodeKind,\n ImmutableMap,\n ArcEvent,\n} from \"@arc-dev/core\";\n\nexport async function* execute<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n node: ArcNode<State, Context>,\n arcState: ArcState<State, Context>\n): AsyncIterable<ArcEvent<State, Context>> {\n const stateContext = arcState.getStateContext();\n\n switch (node.kind) {\n case ArcNodeKind.Agent: {\n const agent = node.handler;\n yield* agent.run(stateContext, node.id);\n\n const pendingContext = (stateContext as any).__pendingContext;\n if (pendingContext) {\n arcState.setContext(pendingContext.nodeId, pendingContext.result);\n delete (stateContext as any).__pendingContext;\n }\n\n break;\n }\n case ArcNodeKind.Action: {\n const action = node.handler;\n yield* action.run(stateContext, node.id);\n\n const pendingState = (stateContext as any).__pendingState;\n\n if (pendingState) {\n arcState.setState(pendingState);\n delete (stateContext as any).__pendingState;\n }\n\n break;\n }\n case ArcNodeKind.Arc: {\n arcState.setContext(node.id, ImmutableMap({ executed: true }));\n break;\n }\n }\n}\n","import {\n Arc,\n ArcStateContext,\n ArcEdge,\n ArcNodeKind,\n ArcEvent,\n ArcState,\n} from \"@arc-dev/core\";\nimport { execute } from \"./nodes\";\nimport { Storage } from \"./types\";\n\nconst buildDependencyMap = (\n nodes: Array<{ id: string }>,\n edges: ArcEdge[]\n): Map<string, string[]> => {\n const deps = new Map<string, string[]>();\n\n for (const node of nodes) {\n deps.set(node.id, []);\n }\n\n for (const edge of edges) {\n if (edge.from === edge.to) {\n continue;\n }\n const currentDeps = deps.get(edge.to) || [];\n currentDeps.push(edge.from);\n deps.set(edge.to, currentDeps);\n }\n\n return deps;\n};\n\nconst getEdgeConditions = (\n nodeId: string,\n edges: ArcEdge[],\n conditions: Map<string, (sc: ArcStateContext<any, any>) => boolean>\n): Array<(sc: ArcStateContext<any, any>) => boolean> => {\n const edgeConditions: Array<(sc: ArcStateContext<any, any>) => boolean> = [];\n\n for (const edge of edges) {\n if (edge.to === nodeId && edge.from !== edge.to) {\n if (edge.when) {\n edgeConditions.push(edge.when);\n } else if (edge.condition && conditions.has(edge.condition)) {\n const conditionFn = conditions.get(edge.condition)!;\n edgeConditions.push(conditionFn);\n }\n }\n }\n\n return edgeConditions;\n};\n\nconst getWaitingEdges = (nodeId: string, edges: ArcEdge[]): ArcEdge[] => {\n return edges.filter(\n (edge) => edge.to === nodeId && edge.from !== edge.to && edge.wait\n );\n};\n\nconst getLoopEdge = (nodeId: string, edges: ArcEdge[]): ArcEdge | null => {\n for (const edge of edges) {\n if (edge.from === nodeId && edge.to === nodeId) {\n return edge;\n }\n }\n return null;\n};\n\nexport async function* executeArc<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n arc: Arc<State, Context>,\n arcState: ArcState<State, Context>,\n resumeResolvers: Map<string, (value: any) => void>,\n initialExecuted?: Set<string>,\n storage?: Storage,\n sessionId?: string,\n parentArc?: Arc<any, any>,\n parentLoopNodeId?: string,\n parentExecuted?: Set<string>\n): AsyncIterable<ArcEvent<State, Context>> {\n const executed = initialExecuted\n ? new Set(initialExecuted)\n : new Set<string>();\n let changed = true;\n\n const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);\n\n while (changed) {\n changed = false;\n\n for (const node of arc.nodes) {\n if (executed.has(node.id)) continue;\n\n const deps = dependencyMap.get(node.id) || [];\n const depsDone = deps.every((d: string) => executed.has(d));\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\": deps=${JSON.stringify(deps)}, depsDone=${depsDone}`,\n timestamp: Date.now(),\n };\n\n if (!depsDone) {\n continue;\n }\n\n const stateContext = arcState.getStateContext();\n\n const edgeConditions = getEdgeConditions(\n node.id,\n arc.edges,\n arc.conditions\n );\n\n if (edgeConditions.length > 0) {\n const allConditionsMet = edgeConditions.every((condFn) => {\n try {\n return condFn(stateContext);\n } catch (e) {\n return false;\n }\n });\n\n if (!allConditionsMet) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Skipping node \"${node.id}\" due to edge condition(s)`,\n timestamp: Date.now(),\n };\n executed.add(node.id);\n changed = true;\n continue;\n }\n }\n\n const waitingEdges = getWaitingEdges(node.id, arc.edges);\n\n if (waitingEdges.length > 0) {\n const edgeContext = arcState.getEdgeContext();\n const hasInput = edgeContext.has(node.id);\n\n if (hasInput) {\n const inputValue = edgeContext.get(node.id);\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has waiting edge(s) but input already provided (${inputValue}), continuing execution`,\n timestamp: Date.now(),\n };\n // Don't clear the edge input yet - let the node read it first\n // It will be cleared after node execution below\n } else {\n // No input yet, need to wait for it\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has ${waitingEdges.length} waiting edge(s)`,\n timestamp: Date.now(),\n };\n\n for (const edge of waitingEdges) {\n if (edge.wait) {\n const { message, validator } = edge.wait;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Pausing execution at node \"${node.id}\" waiting for input on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n\n // Use sessionId if available, otherwise fall back to nodeId for same-instance resume\n const resolverKey = sessionId || node.id;\n const resumePromise = new Promise<any>((resolve) => {\n resumeResolvers.set(resolverKey, resolve);\n });\n\n // If storage is provided, store execution state\n // If this is a sub-arc, store both the sub-arc and parent arc so we can continue the loop\n if (storage && sessionId) {\n await storage.store(sessionId, {\n arc, // Store the current arc (sub-arc if in a loop)\n snapshot: {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n nodeId: node.id,\n parentArc: parentArc || undefined, // Store parent arc if this is a sub-arc\n parentLoopNodeId: parentLoopNodeId || undefined, // Store loop node ID\n parentExecuted: parentExecuted\n ? Array.from(parentExecuted)\n : undefined, // Store parent's executed set if this is a sub-arc\n });\n }\n\n const wrappedValidator = validator\n ? (input: any, sc: any) => {\n return validator(input, stateContext);\n }\n : undefined;\n\n yield {\n type: \"paused\" as const,\n nodeId: node.id,\n prompt: message,\n validator: wrappedValidator,\n timestamp: Date.now(),\n sessionId: sessionId,\n snapshot: storage\n ? undefined // Don't include in event if using storage\n : {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n };\n\n const result = await resumePromise;\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Resumed with input for node ${node.id}`,\n timestamp: Date.now(),\n };\n\n // Convert result to string for edge input (maintaining compatibility)\n const inputValue =\n typeof result === \"string\" ? result : JSON.stringify(result);\n arcState.setEdgeContext(node.id, inputValue);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Input received on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n }\n }\n }\n }\n\n const loopEdge = getLoopEdge(node.id, arc.edges);\n\n if (loopEdge && node.kind === ArcNodeKind.Arc && node.handler.arc) {\n const subArc = node.handler.arc;\n const maxIterations = loopEdge.maxIterations || 100;\n let iteration = 0;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Starting loop \"${node.id}\" (max ${maxIterations} iterations)`,\n timestamp: Date.now(),\n };\n\n while (iteration < maxIterations) {\n const stateContext = arcState.getStateContext();\n\n let shouldContinue = true;\n\n if (loopEdge.when) {\n try {\n shouldContinue = loopEdge.when(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n } else if (\n loopEdge.condition &&\n arc.conditions.has(loopEdge.condition)\n ) {\n const conditionFn = arc.conditions.get(loopEdge.condition)!;\n try {\n shouldContinue = conditionFn(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n }\n\n if (!shouldContinue) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Loop \"${node.id}\" condition failed after ${iteration} iterations`,\n timestamp: Date.now(),\n };\n // Clear storage entry if loop completed naturally (not paused)\n // This ensures that when the executor finishes, the runtime knows the arc is done\n if (storage && sessionId) {\n await storage.delete(sessionId);\n }\n break;\n }\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Loop \"${node.id}\" iteration ${iteration + 1}`,\n timestamp: Date.now(),\n };\n\n // Store parent's executed set (without the loop node, so it can run again when resuming)\n // The loop node needs to run again to check the condition and continue the loop\n const parentExecutedSet = new Set(executed);\n\n yield* executeArc(\n subArc,\n arcState,\n resumeResolvers,\n undefined,\n storage,\n sessionId,\n arc,\n node.id,\n parentExecutedSet\n );\n\n iteration++;\n }\n\n if (iteration >= maxIterations) {\n yield {\n type: \"log\" as const,\n level: \"warn\" as const,\n message: `Loop \"${node.id}\" reached max iterations (${maxIterations})`,\n timestamp: Date.now(),\n };\n // Clear storage entry if loop completed due to max iterations (not paused)\n if (storage && sessionId) {\n await storage.delete(sessionId);\n }\n }\n\n executed.add(node.id);\n changed = true;\n } else {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Running node \"${node.id}\" (${node.kind})`,\n timestamp: Date.now(),\n };\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `About to execute node ${node.id}`,\n timestamp: Date.now(),\n };\n\n yield* execute(node, arcState);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Finished executing node ${node.id}`,\n timestamp: Date.now(),\n };\n\n const stateContext = arcState.getStateContext();\n\n yield {\n type: \"state\" as const,\n nodeId: node.id,\n state: stateContext.state.toJS() as State,\n context: stateContext.context.toJS() as Context,\n timestamp: Date.now(),\n };\n\n // Clear edge input after node execution if it was set (for waiting edges)\n const waitingEdgesForNode = getWaitingEdges(node.id, arc.edges);\n if (waitingEdgesForNode.length > 0) {\n const edgeContext = arcState.getEdgeContext();\n if (edgeContext.has(node.id)) {\n arcState.clearEdgeContext(node.id);\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Cleared edge input for node \"${node.id}\" after execution`,\n timestamp: Date.now(),\n };\n }\n }\n\n executed.add(node.id);\n\n changed = true;\n }\n }\n }\n}\n","import { Storage, StoredExecution } from \"..\";\n\nexport class InMemoryStorage implements Storage {\n private executions: Map<string, StoredExecution> = new Map();\n\n store(sessionId: string, execution: StoredExecution): void {\n this.executions.set(sessionId, execution);\n }\n\n get(sessionId: string): StoredExecution | null {\n return this.executions.get(sessionId) || null;\n }\n\n delete(sessionId: string): void {\n this.executions.delete(sessionId);\n }\n}\n","import {\n ArcRuntime as ArcRuntimeType,\n Arc,\n ArcState,\n ArcEvent,\n} from \"@arc-dev/core\";\nimport { executeArc } from \"./executor\";\nimport { InMemoryStorage } from \"./storage\";\nimport { Storage } from \"./types/storage\";\n\nexport interface ArcRuntimeOptions {\n storage?: Storage;\n}\n\nexport class ArcRuntime implements ArcRuntimeType {\n private resumeResolvers: Map<string, (value: any) => void> = new Map();\n private storage: Storage;\n private sessionIdGenerator: () => string;\n\n constructor(options?: ArcRuntimeOptions) {\n this.storage = options?.storage || new InMemoryStorage();\n this.sessionIdGenerator = () =>\n `session_${Date.now()}_${Math.random().toString(36).substring(7)}`;\n }\n\n async resume<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input: any): Promise<string | void> {\n const resolver = this.resumeResolvers.get(sessionId);\n\n if (resolver) {\n resolver(input);\n this.resumeResolvers.delete(sessionId);\n return;\n }\n\n const stored = this.storage.get(sessionId);\n const storedExecution = stored instanceof Promise ? await stored : stored;\n\n if (storedExecution) {\n storedExecution.pendingInput = input;\n\n const storeResult = this.storage.store(sessionId, storedExecution);\n if (storeResult instanceof Promise) {\n await storeResult;\n }\n\n return sessionId;\n }\n\n return sessionId;\n }\n\n async *resumeFromSession<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input?: any): AsyncIterable<ArcEvent<State, Context>> {\n // Clear any existing resolver since we're starting a new execution\n // In serverless environments, we can't rely on the original execution still running\n if (this.resumeResolvers.has(sessionId)) {\n this.resumeResolvers.delete(sessionId);\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Cleared existing resolver for session ${sessionId} before resuming`,\n timestamp: Date.now(),\n };\n }\n\n const stored = await this.storage.get(sessionId);\n\n if (!stored) {\n yield {\n type: \"error\" as const,\n error: new Error(`Session ${sessionId} not found or expired`),\n };\n return;\n }\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Resuming session ${sessionId}, paused at node \"${stored.nodeId}\", arc: \"${stored.arc.id}\", has parent: ${!!stored.parentArc}`,\n timestamp: Date.now(),\n };\n\n const arcState = ArcState.fromSerialized<State, Context>(stored.snapshot);\n\n const resumeInput = input !== undefined ? input : stored.pendingInput;\n\n if (resumeInput === undefined) {\n yield {\n type: \"error\" as const,\n error: new Error(`No input provided for session ${sessionId}`),\n };\n return;\n }\n\n // Set the input for the paused node\n const inputValue =\n typeof resumeInput === \"string\"\n ? resumeInput\n : JSON.stringify(resumeInput);\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Setting edge input for node \"${stored.nodeId}\" with value: ${inputValue}`,\n timestamp: Date.now(),\n };\n\n arcState.setEdgeContext(stored.nodeId, inputValue);\n\n try {\n // First, execute the sub-arc with the input to complete it\n yield* executeArc(\n stored.arc,\n arcState,\n this.resumeResolvers,\n new Set(stored.snapshot.executed),\n this.storage,\n sessionId\n );\n\n // If this was a sub-arc with a parent, continue the parent loop\n if (stored.parentArc && stored.parentLoopNodeId) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Sub-arc completed, continuing parent arc \"${stored.parentArc.id}\" loop \"${stored.parentLoopNodeId}\"`,\n timestamp: Date.now(),\n };\n\n // Use the stored parent executed set to continue from where we left off\n // This ensures we don't restart the parent arc from the beginning\n const parentExecuted = stored.parentExecuted\n ? new Set(stored.parentExecuted)\n : new Set<string>();\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Continuing parent arc with executed nodes: [${Array.from(parentExecuted).join(\", \")}]`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n stored.parentArc,\n arcState,\n this.resumeResolvers,\n parentExecuted, // Use stored parent executed set to continue from where we left off\n this.storage,\n sessionId\n );\n }\n\n // Check if executor is still paused (waiting for input)\n // If not paused, the arc completed successfully\n const stillPaused = await this.storage.get(sessionId);\n if (!stillPaused) {\n // Clear any remaining storage entry to be safe\n await this.storage.delete(sessionId);\n \n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" completed`,\n timestamp: Date.now(),\n };\n }\n } catch (error) {\n await this.storage.delete(sessionId);\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n\n async *run<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(\n arc: Arc<State, Context>,\n state: State,\n sessionId?: string\n ): AsyncIterable<ArcEvent<State, Context>> {\n const arcState = new ArcState<State, Context>(state);\n const execSessionId = sessionId || this.sessionIdGenerator();\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" started`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n arc,\n arcState,\n this.resumeResolvers,\n undefined,\n this.storage,\n execSessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n } catch (error) {\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n}\n"],"names":["ArcNodeKind","ImmutableMap","ArcState"],"mappings":"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"}

@@ -6,4 +6,4 @@ import { Arc, ArcRuntime as ArcRuntime$1, ArcEvent } from '@arc-dev/core';

state: any;
context?: any;
edgeIn?: Record<string, any>;
nodeContext?: any;
edgeContext?: Record<string, any>;
}

@@ -15,2 +15,5 @@ interface StoredExecution {

pendingInput?: any;
parentArc?: Arc<any, any>;
parentLoopNodeId?: string;
parentExecuted?: string[];
}

@@ -17,0 +20,0 @@ interface Storage {

@@ -74,3 +74,3 @@ import { ArcNodeKind, ImmutableMap, ArcState } from '@arc-dev/core';

};
async function* executeArc(arc, arcState, resumeResolvers, initialExecuted, storage, sessionId) {
async function* executeArc(arc, arcState, resumeResolvers, initialExecuted, storage, sessionId, parentArc, parentLoopNodeId, parentExecuted) {
const executed = initialExecuted

@@ -81,8 +81,2 @@ ? new Set(initialExecuted)

const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);
yield {
type: "log",
level: "debug",
message: `Executing arc "${arc.id}" with ${arc.nodes.length} nodes`,
timestamp: Date.now(),
};
while (changed) {

@@ -129,68 +123,90 @@ changed = false;

if (waitingEdges.length > 0) {
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has ${waitingEdges.length} waiting edge(s)`,
timestamp: Date.now(),
};
for (const edge of waitingEdges) {
if (edge.wait) {
const { message, validator } = edge.wait;
yield {
type: "log",
level: "info",
message: `Pausing execution at node "${node.id}" waiting for input on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
// Use sessionId if available, otherwise fall back to nodeId for same-instance resume
const resolverKey = sessionId || node.id;
const resumePromise = new Promise((resolve) => {
resumeResolvers.set(resolverKey, resolve);
});
// If storage is provided, store execution state
if (storage && sessionId) {
await storage.store(sessionId, {
arc,
snapshot: {
executed: Array.from(executed),
...arcState.serialize(),
},
const edgeContext = arcState.getEdgeContext();
const hasInput = edgeContext.has(node.id);
if (hasInput) {
const inputValue = edgeContext.get(node.id);
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has waiting edge(s) but input already provided (${inputValue}), continuing execution`,
timestamp: Date.now(),
};
// Don't clear the edge input yet - let the node read it first
// It will be cleared after node execution below
}
else {
// No input yet, need to wait for it
yield {
type: "log",
level: "debug",
message: `Node "${node.id}" has ${waitingEdges.length} waiting edge(s)`,
timestamp: Date.now(),
};
for (const edge of waitingEdges) {
if (edge.wait) {
const { message, validator } = edge.wait;
yield {
type: "log",
level: "info",
message: `Pausing execution at node "${node.id}" waiting for input on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
// Use sessionId if available, otherwise fall back to nodeId for same-instance resume
const resolverKey = sessionId || node.id;
const resumePromise = new Promise((resolve) => {
resumeResolvers.set(resolverKey, resolve);
});
// If storage is provided, store execution state
// If this is a sub-arc, store both the sub-arc and parent arc so we can continue the loop
if (storage && sessionId) {
await storage.store(sessionId, {
arc, // Store the current arc (sub-arc if in a loop)
snapshot: {
executed: Array.from(executed),
...arcState.serialize(),
},
nodeId: node.id,
parentArc: parentArc || undefined, // Store parent arc if this is a sub-arc
parentLoopNodeId: parentLoopNodeId || undefined, // Store loop node ID
parentExecuted: parentExecuted
? Array.from(parentExecuted)
: undefined, // Store parent's executed set if this is a sub-arc
});
}
const wrappedValidator = validator
? (input, sc) => {
return validator(input, stateContext);
}
: undefined;
yield {
type: "paused",
nodeId: node.id,
});
prompt: message,
validator: wrappedValidator,
timestamp: Date.now(),
sessionId: sessionId,
snapshot: storage
? undefined // Don't include in event if using storage
: {
executed: Array.from(executed),
...arcState.serialize(),
},
};
const result = await resumePromise;
yield {
type: "log",
level: "debug",
message: `Resumed with input for node ${node.id}`,
timestamp: Date.now(),
};
// Convert result to string for edge input (maintaining compatibility)
const inputValue = typeof result === "string" ? result : JSON.stringify(result);
arcState.setEdgeContext(node.id, inputValue);
yield {
type: "log",
level: "debug",
message: `Input received on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
}
const wrappedValidator = validator
? (input, sc) => {
return validator(input, stateContext);
}
: undefined;
yield {
type: "paused",
nodeId: node.id,
prompt: message,
validator: wrappedValidator,
timestamp: Date.now(),
sessionId: sessionId,
snapshot: storage
? undefined // Don't include in event if using storage
: {
executed: Array.from(executed),
...arcState.serialize(),
},
};
const result = await resumePromise;
yield {
type: "log",
level: "debug",
message: `Resumed with input for node ${node.id}`,
timestamp: Date.now(),
};
// Convert result to string for edge input (maintaining compatibility)
const inputValue = typeof result === "string" ? result : JSON.stringify(result);
arcState.setEdgeIn(node.id, inputValue);
yield {
type: "log",
level: "debug",
message: `Input received on edge ${edge.from} -> ${edge.to}`,
timestamp: Date.now(),
};
}

@@ -250,2 +266,7 @@ }

};
// Clear storage entry if loop completed naturally (not paused)
// This ensures that when the executor finishes, the runtime knows the arc is done
if (storage && sessionId) {
await storage.delete(sessionId);
}
break;

@@ -259,3 +280,6 @@ }

};
yield* executeArc(subArc, arcState, resumeResolvers, undefined, storage, sessionId);
// Store parent's executed set (without the loop node, so it can run again when resuming)
// The loop node needs to run again to check the condition and continue the loop
const parentExecutedSet = new Set(executed);
yield* executeArc(subArc, arcState, resumeResolvers, undefined, storage, sessionId, arc, node.id, parentExecutedSet);
iteration++;

@@ -270,2 +294,6 @@ }

};
// Clear storage entry if loop completed due to max iterations (not paused)
if (storage && sessionId) {
await storage.delete(sessionId);
}
}

@@ -295,2 +323,24 @@ executed.add(node.id);

};
const stateContext = arcState.getStateContext();
yield {
type: "state",
nodeId: node.id,
state: stateContext.state.toJS(),
context: stateContext.context.toJS(),
timestamp: Date.now(),
};
// Clear edge input after node execution if it was set (for waiting edges)
const waitingEdgesForNode = getWaitingEdges(node.id, arc.edges);
if (waitingEdgesForNode.length > 0) {
const edgeContext = arcState.getEdgeContext();
if (edgeContext.has(node.id)) {
arcState.clearEdgeContext(node.id);
yield {
type: "log",
level: "debug",
message: `Cleared edge input for node "${node.id}" after execution`,
timestamp: Date.now(),
};
}
}
executed.add(node.id);

@@ -344,2 +394,13 @@ changed = true;

async *resumeFromSession(sessionId, input) {
// Clear any existing resolver since we're starting a new execution
// In serverless environments, we can't rely on the original execution still running
if (this.resumeResolvers.has(sessionId)) {
this.resumeResolvers.delete(sessionId);
yield {
type: "log",
level: "info",
message: `[Runtime] Cleared existing resolver for session ${sessionId} before resuming`,
timestamp: Date.now(),
};
}
const stored = await this.storage.get(sessionId);

@@ -353,7 +414,9 @@ if (!stored) {

}
const arcState = ArcState.fromSerialized({
state: stored.snapshot.state,
context: stored.snapshot.context,
edgeIn: stored.snapshot.edgeIn,
});
yield {
type: "log",
level: "info",
message: `[Runtime] Resuming session ${sessionId}, paused at node "${stored.nodeId}", arc: "${stored.arc.id}", has parent: ${!!stored.parentArc}`,
timestamp: Date.now(),
};
const arcState = ArcState.fromSerialized(stored.snapshot);
const resumeInput = input !== undefined ? input : stored.pendingInput;

@@ -371,25 +434,54 @@ if (resumeInput === undefined) {

: JSON.stringify(resumeInput);
arcState.setEdgeIn(stored.nodeId, inputValue);
yield {
type: "log",
level: "info",
message: `[Runtime] Setting edge input for node "${stored.nodeId}" with value: ${inputValue}`,
timestamp: Date.now(),
};
arcState.setEdgeContext(stored.nodeId, inputValue);
try {
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" resuming from node "${stored.nodeId}"`,
timestamp: Date.now(),
};
// First, execute the sub-arc with the input to complete it
yield* executeArc(stored.arc, arcState, this.resumeResolvers, new Set(stored.snapshot.executed), this.storage, sessionId);
const finalContext = arcState.getContext().toJS();
const finalState = arcState.getState().toJS();
yield {
type: "done",
finalState,
finalContext,
};
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" completed`,
timestamp: Date.now(),
};
await this.storage.delete(sessionId);
// If this was a sub-arc with a parent, continue the parent loop
if (stored.parentArc && stored.parentLoopNodeId) {
yield {
type: "log",
level: "info",
message: `Sub-arc completed, continuing parent arc "${stored.parentArc.id}" loop "${stored.parentLoopNodeId}"`,
timestamp: Date.now(),
};
// Use the stored parent executed set to continue from where we left off
// This ensures we don't restart the parent arc from the beginning
const parentExecuted = stored.parentExecuted
? new Set(stored.parentExecuted)
: new Set();
yield {
type: "log",
level: "info",
message: `Continuing parent arc with executed nodes: [${Array.from(parentExecuted).join(", ")}]`,
timestamp: Date.now(),
};
yield* executeArc(stored.parentArc, arcState, this.resumeResolvers, parentExecuted, // Use stored parent executed set to continue from where we left off
this.storage, sessionId);
}
// Check if executor is still paused (waiting for input)
// If not paused, the arc completed successfully
const stillPaused = await this.storage.get(sessionId);
if (!stillPaused) {
// Clear any remaining storage entry to be safe
await this.storage.delete(sessionId);
const finalContext = arcState.getContext().toJS();
const finalState = arcState.getState().toJS();
yield {
type: "done",
finalState,
finalContext,
};
yield {
type: "log",
level: "info",
message: `Arc "${stored.arc.id}" completed`,
timestamp: Date.now(),
};
}
}

@@ -396,0 +488,0 @@ catch (error) {

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sources":["../src/nodes.ts","../src/executor.ts","../src/storage/memory.ts","../src/runtime.ts"],"sourcesContent":["import {\n ArcNode,\n ArcState,\n ArcNodeKind,\n ImmutableMap,\n ArcEvent,\n} from \"@arc-dev/core\";\n\nexport async function* execute<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n node: ArcNode<State, Context>,\n arcState: ArcState<State, Context>\n): AsyncIterable<ArcEvent<State, Context>> {\n const stateContext = arcState.getStateContext();\n\n switch (node.kind) {\n case ArcNodeKind.Agent: {\n const agent = node.handler;\n yield* agent.run(stateContext, node.id);\n\n const pendingContext = (stateContext as any).__pendingContext;\n if (pendingContext) {\n arcState.setContext(pendingContext.nodeId, pendingContext.result);\n delete (stateContext as any).__pendingContext;\n }\n\n break;\n }\n case ArcNodeKind.Action: {\n const action = node.handler;\n yield* action.run(stateContext, node.id);\n\n const pendingState = (stateContext as any).__pendingState;\n\n if (pendingState) {\n arcState.setState(pendingState);\n delete (stateContext as any).__pendingState;\n }\n\n break;\n }\n case ArcNodeKind.Arc: {\n arcState.setContext(node.id, ImmutableMap({ executed: true }));\n break;\n }\n }\n}\n","import {\n Arc,\n ArcStateContext,\n ArcEdge,\n ArcNodeKind,\n ArcEvent,\n ArcState,\n} from \"@arc-dev/core\";\nimport { execute } from \"./nodes\";\nimport { Storage } from \"./types\";\n\nconst buildDependencyMap = (\n nodes: Array<{ id: string }>,\n edges: ArcEdge[]\n): Map<string, string[]> => {\n const deps = new Map<string, string[]>();\n\n for (const node of nodes) {\n deps.set(node.id, []);\n }\n\n for (const edge of edges) {\n if (edge.from === edge.to) {\n continue;\n }\n const currentDeps = deps.get(edge.to) || [];\n currentDeps.push(edge.from);\n deps.set(edge.to, currentDeps);\n }\n\n return deps;\n};\n\nconst getEdgeConditions = (\n nodeId: string,\n edges: ArcEdge[],\n conditions: Map<string, (sc: ArcStateContext<any, any>) => boolean>\n): Array<(sc: ArcStateContext<any, any>) => boolean> => {\n const edgeConditions: Array<(sc: ArcStateContext<any, any>) => boolean> = [];\n\n for (const edge of edges) {\n if (edge.to === nodeId && edge.from !== edge.to) {\n if (edge.when) {\n edgeConditions.push(edge.when);\n } else if (edge.condition && conditions.has(edge.condition)) {\n const conditionFn = conditions.get(edge.condition)!;\n edgeConditions.push(conditionFn);\n }\n }\n }\n\n return edgeConditions;\n};\n\nconst getWaitingEdges = (nodeId: string, edges: ArcEdge[]): ArcEdge[] => {\n return edges.filter(\n (edge) => edge.to === nodeId && edge.from !== edge.to && edge.wait\n );\n};\n\nconst getLoopEdge = (nodeId: string, edges: ArcEdge[]): ArcEdge | null => {\n for (const edge of edges) {\n if (edge.from === nodeId && edge.to === nodeId) {\n return edge;\n }\n }\n return null;\n};\n\nexport async function* executeArc<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n arc: Arc<State, Context>,\n arcState: ArcState<State, Context>,\n resumeResolvers: Map<string, (value: any) => void>,\n initialExecuted?: Set<string>,\n storage?: Storage,\n sessionId?: string\n): AsyncIterable<ArcEvent<State, Context>> {\n const executed = initialExecuted\n ? new Set(initialExecuted)\n : new Set<string>();\n let changed = true;\n\n const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Executing arc \"${arc.id}\" with ${arc.nodes.length} nodes`,\n timestamp: Date.now(),\n };\n\n while (changed) {\n changed = false;\n\n for (const node of arc.nodes) {\n if (executed.has(node.id)) continue;\n\n const deps = dependencyMap.get(node.id) || [];\n const depsDone = deps.every((d: string) => executed.has(d));\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\": deps=${JSON.stringify(deps)}, depsDone=${depsDone}`,\n timestamp: Date.now(),\n };\n\n if (!depsDone) {\n continue;\n }\n\n const stateContext = arcState.getStateContext();\n\n const edgeConditions = getEdgeConditions(\n node.id,\n arc.edges,\n arc.conditions\n );\n\n if (edgeConditions.length > 0) {\n const allConditionsMet = edgeConditions.every((condFn) => {\n try {\n return condFn(stateContext);\n } catch (e) {\n return false;\n }\n });\n\n if (!allConditionsMet) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Skipping node \"${node.id}\" due to edge condition(s)`,\n timestamp: Date.now(),\n };\n executed.add(node.id);\n changed = true;\n continue;\n }\n }\n\n const waitingEdges = getWaitingEdges(node.id, arc.edges);\n\n if (waitingEdges.length > 0) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has ${waitingEdges.length} waiting edge(s)`,\n timestamp: Date.now(),\n };\n\n for (const edge of waitingEdges) {\n if (edge.wait) {\n const { message, validator } = edge.wait;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Pausing execution at node \"${node.id}\" waiting for input on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n\n // Use sessionId if available, otherwise fall back to nodeId for same-instance resume\n const resolverKey = sessionId || node.id;\n const resumePromise = new Promise<any>((resolve) => {\n resumeResolvers.set(resolverKey, resolve);\n });\n\n // If storage is provided, store execution state\n if (storage && sessionId) {\n await storage.store(sessionId, {\n arc,\n snapshot: {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n nodeId: node.id,\n });\n }\n\n const wrappedValidator = validator\n ? (input: any, sc: any) => {\n return validator(input, stateContext);\n }\n : undefined;\n\n yield {\n type: \"paused\" as const,\n nodeId: node.id,\n prompt: message,\n validator: wrappedValidator,\n timestamp: Date.now(),\n sessionId: sessionId,\n snapshot: storage\n ? undefined // Don't include in event if using storage\n : {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n };\n\n const result = await resumePromise;\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Resumed with input for node ${node.id}`,\n timestamp: Date.now(),\n };\n\n // Convert result to string for edge input (maintaining compatibility)\n const inputValue =\n typeof result === \"string\" ? result : JSON.stringify(result);\n arcState.setEdgeIn(node.id, inputValue);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Input received on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n }\n }\n }\n\n const loopEdge = getLoopEdge(node.id, arc.edges);\n\n if (loopEdge && node.kind === ArcNodeKind.Arc && node.handler.arc) {\n const subArc = node.handler.arc;\n const maxIterations = loopEdge.maxIterations || 100;\n let iteration = 0;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Starting loop \"${node.id}\" (max ${maxIterations} iterations)`,\n timestamp: Date.now(),\n };\n\n while (iteration < maxIterations) {\n const stateContext = arcState.getStateContext();\n\n let shouldContinue = true;\n\n if (loopEdge.when) {\n try {\n shouldContinue = loopEdge.when(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n } else if (\n loopEdge.condition &&\n arc.conditions.has(loopEdge.condition)\n ) {\n const conditionFn = arc.conditions.get(loopEdge.condition)!;\n try {\n shouldContinue = conditionFn(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n }\n\n if (!shouldContinue) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Loop \"${node.id}\" condition failed after ${iteration} iterations`,\n timestamp: Date.now(),\n };\n break;\n }\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Loop \"${node.id}\" iteration ${iteration + 1}`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n subArc,\n arcState,\n resumeResolvers,\n undefined,\n storage,\n sessionId\n );\n\n iteration++;\n }\n\n if (iteration >= maxIterations) {\n yield {\n type: \"log\" as const,\n level: \"warn\" as const,\n message: `Loop \"${node.id}\" reached max iterations (${maxIterations})`,\n timestamp: Date.now(),\n };\n }\n\n executed.add(node.id);\n changed = true;\n } else {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Running node \"${node.id}\" (${node.kind})`,\n timestamp: Date.now(),\n };\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `About to execute node ${node.id}`,\n timestamp: Date.now(),\n };\n\n yield* execute(node, arcState);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Finished executing node ${node.id}`,\n timestamp: Date.now(),\n };\n\n executed.add(node.id);\n\n changed = true;\n }\n }\n }\n}\n","import { Storage, StoredExecution } from \"..\";\n\nexport class InMemoryStorage implements Storage {\n private executions: Map<string, StoredExecution> = new Map();\n\n store(sessionId: string, execution: StoredExecution): void {\n this.executions.set(sessionId, execution);\n }\n\n get(sessionId: string): StoredExecution | null {\n return this.executions.get(sessionId) || null;\n }\n\n delete(sessionId: string): void {\n this.executions.delete(sessionId);\n }\n}\n","import {\n ArcRuntime as ArcRuntimeType,\n Arc,\n ArcState,\n ArcEvent,\n} from \"@arc-dev/core\";\nimport { executeArc } from \"./executor\";\nimport { InMemoryStorage } from \"./storage\";\nimport { Storage } from \"./types/storage\";\n\nexport interface ArcRuntimeOptions {\n storage?: Storage;\n}\n\nexport class ArcRuntime implements ArcRuntimeType {\n private resumeResolvers: Map<string, (value: any) => void> = new Map();\n private storage: Storage;\n private sessionIdGenerator: () => string;\n\n constructor(options?: ArcRuntimeOptions) {\n this.storage = options?.storage || new InMemoryStorage();\n this.sessionIdGenerator = () =>\n `session_${Date.now()}_${Math.random().toString(36).substring(7)}`;\n }\n\n async resume<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input: any): Promise<string | void> {\n const resolver = this.resumeResolvers.get(sessionId);\n\n if (resolver) {\n resolver(input);\n this.resumeResolvers.delete(sessionId);\n return;\n }\n\n const stored = this.storage.get(sessionId);\n const storedExecution = stored instanceof Promise ? await stored : stored;\n\n if (storedExecution) {\n storedExecution.pendingInput = input;\n\n const storeResult = this.storage.store(sessionId, storedExecution);\n if (storeResult instanceof Promise) {\n await storeResult;\n }\n\n return sessionId;\n }\n\n return sessionId;\n }\n\n async *resumeFromSession<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input?: any): AsyncIterable<ArcEvent<State, Context>> {\n const stored = await this.storage.get(sessionId);\n if (!stored) {\n yield {\n type: \"error\" as const,\n error: new Error(`Session ${sessionId} not found or expired`),\n };\n return;\n }\n\n const arcState = ArcState.fromSerialized<State, Context>({\n state: stored.snapshot.state,\n context: stored.snapshot.context,\n edgeIn: stored.snapshot.edgeIn,\n });\n\n const resumeInput = input !== undefined ? input : stored.pendingInput;\n\n if (resumeInput === undefined) {\n yield {\n type: \"error\" as const,\n error: new Error(`No input provided for session ${sessionId}`),\n };\n return;\n }\n\n // Set the input for the paused node\n const inputValue =\n typeof resumeInput === \"string\"\n ? resumeInput\n : JSON.stringify(resumeInput);\n\n arcState.setEdgeIn(stored.nodeId, inputValue);\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" resuming from node \"${stored.nodeId}\"`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n stored.arc,\n arcState,\n this.resumeResolvers,\n new Set(stored.snapshot.executed),\n this.storage,\n sessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n await this.storage.delete(sessionId);\n } catch (error) {\n await this.storage.delete(sessionId);\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n\n async *run<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(\n arc: Arc<State, Context>,\n state: State,\n sessionId?: string\n ): AsyncIterable<ArcEvent<State, Context>> {\n const arcState = new ArcState<State, Context>(state);\n const execSessionId = sessionId || this.sessionIdGenerator();\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" started`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n arc,\n arcState,\n this.resumeResolvers,\n undefined,\n this.storage,\n execSessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n } catch (error) {\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n}\n"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sources":["../src/nodes.ts","../src/executor.ts","../src/storage/in-memory.ts","../src/runtime.ts"],"sourcesContent":["import {\n ArcNode,\n ArcState,\n ArcNodeKind,\n ImmutableMap,\n ArcEvent,\n} from \"@arc-dev/core\";\n\nexport async function* execute<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n node: ArcNode<State, Context>,\n arcState: ArcState<State, Context>\n): AsyncIterable<ArcEvent<State, Context>> {\n const stateContext = arcState.getStateContext();\n\n switch (node.kind) {\n case ArcNodeKind.Agent: {\n const agent = node.handler;\n yield* agent.run(stateContext, node.id);\n\n const pendingContext = (stateContext as any).__pendingContext;\n if (pendingContext) {\n arcState.setContext(pendingContext.nodeId, pendingContext.result);\n delete (stateContext as any).__pendingContext;\n }\n\n break;\n }\n case ArcNodeKind.Action: {\n const action = node.handler;\n yield* action.run(stateContext, node.id);\n\n const pendingState = (stateContext as any).__pendingState;\n\n if (pendingState) {\n arcState.setState(pendingState);\n delete (stateContext as any).__pendingState;\n }\n\n break;\n }\n case ArcNodeKind.Arc: {\n arcState.setContext(node.id, ImmutableMap({ executed: true }));\n break;\n }\n }\n}\n","import {\n Arc,\n ArcStateContext,\n ArcEdge,\n ArcNodeKind,\n ArcEvent,\n ArcState,\n} from \"@arc-dev/core\";\nimport { execute } from \"./nodes\";\nimport { Storage } from \"./types\";\n\nconst buildDependencyMap = (\n nodes: Array<{ id: string }>,\n edges: ArcEdge[]\n): Map<string, string[]> => {\n const deps = new Map<string, string[]>();\n\n for (const node of nodes) {\n deps.set(node.id, []);\n }\n\n for (const edge of edges) {\n if (edge.from === edge.to) {\n continue;\n }\n const currentDeps = deps.get(edge.to) || [];\n currentDeps.push(edge.from);\n deps.set(edge.to, currentDeps);\n }\n\n return deps;\n};\n\nconst getEdgeConditions = (\n nodeId: string,\n edges: ArcEdge[],\n conditions: Map<string, (sc: ArcStateContext<any, any>) => boolean>\n): Array<(sc: ArcStateContext<any, any>) => boolean> => {\n const edgeConditions: Array<(sc: ArcStateContext<any, any>) => boolean> = [];\n\n for (const edge of edges) {\n if (edge.to === nodeId && edge.from !== edge.to) {\n if (edge.when) {\n edgeConditions.push(edge.when);\n } else if (edge.condition && conditions.has(edge.condition)) {\n const conditionFn = conditions.get(edge.condition)!;\n edgeConditions.push(conditionFn);\n }\n }\n }\n\n return edgeConditions;\n};\n\nconst getWaitingEdges = (nodeId: string, edges: ArcEdge[]): ArcEdge[] => {\n return edges.filter(\n (edge) => edge.to === nodeId && edge.from !== edge.to && edge.wait\n );\n};\n\nconst getLoopEdge = (nodeId: string, edges: ArcEdge[]): ArcEdge | null => {\n for (const edge of edges) {\n if (edge.from === nodeId && edge.to === nodeId) {\n return edge;\n }\n }\n return null;\n};\n\nexport async function* executeArc<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n>(\n arc: Arc<State, Context>,\n arcState: ArcState<State, Context>,\n resumeResolvers: Map<string, (value: any) => void>,\n initialExecuted?: Set<string>,\n storage?: Storage,\n sessionId?: string,\n parentArc?: Arc<any, any>,\n parentLoopNodeId?: string,\n parentExecuted?: Set<string>\n): AsyncIterable<ArcEvent<State, Context>> {\n const executed = initialExecuted\n ? new Set(initialExecuted)\n : new Set<string>();\n let changed = true;\n\n const dependencyMap = buildDependencyMap(arc.nodes, arc.edges);\n\n while (changed) {\n changed = false;\n\n for (const node of arc.nodes) {\n if (executed.has(node.id)) continue;\n\n const deps = dependencyMap.get(node.id) || [];\n const depsDone = deps.every((d: string) => executed.has(d));\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\": deps=${JSON.stringify(deps)}, depsDone=${depsDone}`,\n timestamp: Date.now(),\n };\n\n if (!depsDone) {\n continue;\n }\n\n const stateContext = arcState.getStateContext();\n\n const edgeConditions = getEdgeConditions(\n node.id,\n arc.edges,\n arc.conditions\n );\n\n if (edgeConditions.length > 0) {\n const allConditionsMet = edgeConditions.every((condFn) => {\n try {\n return condFn(stateContext);\n } catch (e) {\n return false;\n }\n });\n\n if (!allConditionsMet) {\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Skipping node \"${node.id}\" due to edge condition(s)`,\n timestamp: Date.now(),\n };\n executed.add(node.id);\n changed = true;\n continue;\n }\n }\n\n const waitingEdges = getWaitingEdges(node.id, arc.edges);\n\n if (waitingEdges.length > 0) {\n const edgeContext = arcState.getEdgeContext();\n const hasInput = edgeContext.has(node.id);\n\n if (hasInput) {\n const inputValue = edgeContext.get(node.id);\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has waiting edge(s) but input already provided (${inputValue}), continuing execution`,\n timestamp: Date.now(),\n };\n // Don't clear the edge input yet - let the node read it first\n // It will be cleared after node execution below\n } else {\n // No input yet, need to wait for it\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Node \"${node.id}\" has ${waitingEdges.length} waiting edge(s)`,\n timestamp: Date.now(),\n };\n\n for (const edge of waitingEdges) {\n if (edge.wait) {\n const { message, validator } = edge.wait;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Pausing execution at node \"${node.id}\" waiting for input on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n\n // Use sessionId if available, otherwise fall back to nodeId for same-instance resume\n const resolverKey = sessionId || node.id;\n const resumePromise = new Promise<any>((resolve) => {\n resumeResolvers.set(resolverKey, resolve);\n });\n\n // If storage is provided, store execution state\n // If this is a sub-arc, store both the sub-arc and parent arc so we can continue the loop\n if (storage && sessionId) {\n await storage.store(sessionId, {\n arc, // Store the current arc (sub-arc if in a loop)\n snapshot: {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n nodeId: node.id,\n parentArc: parentArc || undefined, // Store parent arc if this is a sub-arc\n parentLoopNodeId: parentLoopNodeId || undefined, // Store loop node ID\n parentExecuted: parentExecuted\n ? Array.from(parentExecuted)\n : undefined, // Store parent's executed set if this is a sub-arc\n });\n }\n\n const wrappedValidator = validator\n ? (input: any, sc: any) => {\n return validator(input, stateContext);\n }\n : undefined;\n\n yield {\n type: \"paused\" as const,\n nodeId: node.id,\n prompt: message,\n validator: wrappedValidator,\n timestamp: Date.now(),\n sessionId: sessionId,\n snapshot: storage\n ? undefined // Don't include in event if using storage\n : {\n executed: Array.from(executed),\n ...arcState.serialize(),\n },\n };\n\n const result = await resumePromise;\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Resumed with input for node ${node.id}`,\n timestamp: Date.now(),\n };\n\n // Convert result to string for edge input (maintaining compatibility)\n const inputValue =\n typeof result === \"string\" ? result : JSON.stringify(result);\n arcState.setEdgeContext(node.id, inputValue);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Input received on edge ${edge.from} -> ${edge.to}`,\n timestamp: Date.now(),\n };\n }\n }\n }\n }\n\n const loopEdge = getLoopEdge(node.id, arc.edges);\n\n if (loopEdge && node.kind === ArcNodeKind.Arc && node.handler.arc) {\n const subArc = node.handler.arc;\n const maxIterations = loopEdge.maxIterations || 100;\n let iteration = 0;\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Starting loop \"${node.id}\" (max ${maxIterations} iterations)`,\n timestamp: Date.now(),\n };\n\n while (iteration < maxIterations) {\n const stateContext = arcState.getStateContext();\n\n let shouldContinue = true;\n\n if (loopEdge.when) {\n try {\n shouldContinue = loopEdge.when(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n } else if (\n loopEdge.condition &&\n arc.conditions.has(loopEdge.condition)\n ) {\n const conditionFn = arc.conditions.get(loopEdge.condition)!;\n try {\n shouldContinue = conditionFn(stateContext);\n } catch (e) {\n yield {\n type: \"log\" as const,\n level: \"error\" as const,\n message: `Loop condition error: ${e}`,\n timestamp: Date.now(),\n };\n break;\n }\n }\n\n if (!shouldContinue) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Loop \"${node.id}\" condition failed after ${iteration} iterations`,\n timestamp: Date.now(),\n };\n // Clear storage entry if loop completed naturally (not paused)\n // This ensures that when the executor finishes, the runtime knows the arc is done\n if (storage && sessionId) {\n await storage.delete(sessionId);\n }\n break;\n }\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Loop \"${node.id}\" iteration ${iteration + 1}`,\n timestamp: Date.now(),\n };\n\n // Store parent's executed set (without the loop node, so it can run again when resuming)\n // The loop node needs to run again to check the condition and continue the loop\n const parentExecutedSet = new Set(executed);\n\n yield* executeArc(\n subArc,\n arcState,\n resumeResolvers,\n undefined,\n storage,\n sessionId,\n arc,\n node.id,\n parentExecutedSet\n );\n\n iteration++;\n }\n\n if (iteration >= maxIterations) {\n yield {\n type: \"log\" as const,\n level: \"warn\" as const,\n message: `Loop \"${node.id}\" reached max iterations (${maxIterations})`,\n timestamp: Date.now(),\n };\n // Clear storage entry if loop completed due to max iterations (not paused)\n if (storage && sessionId) {\n await storage.delete(sessionId);\n }\n }\n\n executed.add(node.id);\n changed = true;\n } else {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Running node \"${node.id}\" (${node.kind})`,\n timestamp: Date.now(),\n };\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `About to execute node ${node.id}`,\n timestamp: Date.now(),\n };\n\n yield* execute(node, arcState);\n\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Finished executing node ${node.id}`,\n timestamp: Date.now(),\n };\n\n const stateContext = arcState.getStateContext();\n\n yield {\n type: \"state\" as const,\n nodeId: node.id,\n state: stateContext.state.toJS() as State,\n context: stateContext.context.toJS() as Context,\n timestamp: Date.now(),\n };\n\n // Clear edge input after node execution if it was set (for waiting edges)\n const waitingEdgesForNode = getWaitingEdges(node.id, arc.edges);\n if (waitingEdgesForNode.length > 0) {\n const edgeContext = arcState.getEdgeContext();\n if (edgeContext.has(node.id)) {\n arcState.clearEdgeContext(node.id);\n yield {\n type: \"log\" as const,\n level: \"debug\" as const,\n message: `Cleared edge input for node \"${node.id}\" after execution`,\n timestamp: Date.now(),\n };\n }\n }\n\n executed.add(node.id);\n\n changed = true;\n }\n }\n }\n}\n","import { Storage, StoredExecution } from \"..\";\n\nexport class InMemoryStorage implements Storage {\n private executions: Map<string, StoredExecution> = new Map();\n\n store(sessionId: string, execution: StoredExecution): void {\n this.executions.set(sessionId, execution);\n }\n\n get(sessionId: string): StoredExecution | null {\n return this.executions.get(sessionId) || null;\n }\n\n delete(sessionId: string): void {\n this.executions.delete(sessionId);\n }\n}\n","import {\n ArcRuntime as ArcRuntimeType,\n Arc,\n ArcState,\n ArcEvent,\n} from \"@arc-dev/core\";\nimport { executeArc } from \"./executor\";\nimport { InMemoryStorage } from \"./storage\";\nimport { Storage } from \"./types/storage\";\n\nexport interface ArcRuntimeOptions {\n storage?: Storage;\n}\n\nexport class ArcRuntime implements ArcRuntimeType {\n private resumeResolvers: Map<string, (value: any) => void> = new Map();\n private storage: Storage;\n private sessionIdGenerator: () => string;\n\n constructor(options?: ArcRuntimeOptions) {\n this.storage = options?.storage || new InMemoryStorage();\n this.sessionIdGenerator = () =>\n `session_${Date.now()}_${Math.random().toString(36).substring(7)}`;\n }\n\n async resume<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input: any): Promise<string | void> {\n const resolver = this.resumeResolvers.get(sessionId);\n\n if (resolver) {\n resolver(input);\n this.resumeResolvers.delete(sessionId);\n return;\n }\n\n const stored = this.storage.get(sessionId);\n const storedExecution = stored instanceof Promise ? await stored : stored;\n\n if (storedExecution) {\n storedExecution.pendingInput = input;\n\n const storeResult = this.storage.store(sessionId, storedExecution);\n if (storeResult instanceof Promise) {\n await storeResult;\n }\n\n return sessionId;\n }\n\n return sessionId;\n }\n\n async *resumeFromSession<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(sessionId: string, input?: any): AsyncIterable<ArcEvent<State, Context>> {\n // Clear any existing resolver since we're starting a new execution\n // In serverless environments, we can't rely on the original execution still running\n if (this.resumeResolvers.has(sessionId)) {\n this.resumeResolvers.delete(sessionId);\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Cleared existing resolver for session ${sessionId} before resuming`,\n timestamp: Date.now(),\n };\n }\n\n const stored = await this.storage.get(sessionId);\n\n if (!stored) {\n yield {\n type: \"error\" as const,\n error: new Error(`Session ${sessionId} not found or expired`),\n };\n return;\n }\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Resuming session ${sessionId}, paused at node \"${stored.nodeId}\", arc: \"${stored.arc.id}\", has parent: ${!!stored.parentArc}`,\n timestamp: Date.now(),\n };\n\n const arcState = ArcState.fromSerialized<State, Context>(stored.snapshot);\n\n const resumeInput = input !== undefined ? input : stored.pendingInput;\n\n if (resumeInput === undefined) {\n yield {\n type: \"error\" as const,\n error: new Error(`No input provided for session ${sessionId}`),\n };\n return;\n }\n\n // Set the input for the paused node\n const inputValue =\n typeof resumeInput === \"string\"\n ? resumeInput\n : JSON.stringify(resumeInput);\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `[Runtime] Setting edge input for node \"${stored.nodeId}\" with value: ${inputValue}`,\n timestamp: Date.now(),\n };\n\n arcState.setEdgeContext(stored.nodeId, inputValue);\n\n try {\n // First, execute the sub-arc with the input to complete it\n yield* executeArc(\n stored.arc,\n arcState,\n this.resumeResolvers,\n new Set(stored.snapshot.executed),\n this.storage,\n sessionId\n );\n\n // If this was a sub-arc with a parent, continue the parent loop\n if (stored.parentArc && stored.parentLoopNodeId) {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Sub-arc completed, continuing parent arc \"${stored.parentArc.id}\" loop \"${stored.parentLoopNodeId}\"`,\n timestamp: Date.now(),\n };\n\n // Use the stored parent executed set to continue from where we left off\n // This ensures we don't restart the parent arc from the beginning\n const parentExecuted = stored.parentExecuted\n ? new Set(stored.parentExecuted)\n : new Set<string>();\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Continuing parent arc with executed nodes: [${Array.from(parentExecuted).join(\", \")}]`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n stored.parentArc,\n arcState,\n this.resumeResolvers,\n parentExecuted, // Use stored parent executed set to continue from where we left off\n this.storage,\n sessionId\n );\n }\n\n // Check if executor is still paused (waiting for input)\n // If not paused, the arc completed successfully\n const stillPaused = await this.storage.get(sessionId);\n if (!stillPaused) {\n // Clear any remaining storage entry to be safe\n await this.storage.delete(sessionId);\n \n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${stored.arc.id}\" completed`,\n timestamp: Date.now(),\n };\n }\n } catch (error) {\n await this.storage.delete(sessionId);\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n\n async *run<\n State extends Record<string, any>,\n Context extends Record<string, any>,\n >(\n arc: Arc<State, Context>,\n state: State,\n sessionId?: string\n ): AsyncIterable<ArcEvent<State, Context>> {\n const arcState = new ArcState<State, Context>(state);\n const execSessionId = sessionId || this.sessionIdGenerator();\n\n try {\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" started`,\n timestamp: Date.now(),\n };\n\n yield* executeArc(\n arc,\n arcState,\n this.resumeResolvers,\n undefined,\n this.storage,\n execSessionId\n );\n\n const finalContext = arcState.getContext().toJS() as Context;\n const finalState = arcState.getState().toJS() as State;\n\n yield {\n type: \"done\" as const,\n finalState,\n finalContext,\n };\n\n yield {\n type: \"log\" as const,\n level: \"info\" as const,\n message: `Arc \"${arc.id}\" completed`,\n timestamp: Date.now(),\n };\n\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n } catch (error) {\n if (execSessionId) {\n await this.storage.delete(execSessionId);\n }\n yield {\n type: \"error\" as const,\n error: error instanceof Error ? error : new Error(String(error)),\n };\n }\n }\n}\n"],"names":[],"mappings":"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"}

@@ -1,1 +0,1 @@

{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,cAAc,EAC5B,GAAG,EAEH,QAAQ,EACT,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,kBAAkB,CAAe;gBAE7B,OAAO,CAAC,EAAE,iBAAiB;IAMjC,MAAM,CACV,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0BjD,iBAAiB,CACtB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IA6EnE,GAAG,CACR,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CAkD3C"}
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,cAAc,EAC5B,GAAG,EAEH,QAAQ,EACT,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,UAAW,YAAW,cAAc;IAC/C,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,kBAAkB,CAAe;gBAE7B,OAAO,CAAC,EAAE,iBAAiB;IAMjC,MAAM,CACV,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA0BjD,iBAAiB,CACtB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAoInE,GAAG,CACR,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEnC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,EACxB,KAAK,EAAE,KAAK,EACZ,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;CAkD3C"}

@@ -1,2 +0,2 @@

export * from "./memory";
export * from "./in-memory";
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}

@@ -5,4 +5,4 @@ import { Arc } from "@arc-dev/core";

state: any;
context?: any;
edgeIn?: Record<string, any>;
nodeContext?: any;
edgeContext?: Record<string, any>;
}

@@ -14,2 +14,5 @@ export interface StoredExecution {

pendingInput?: any;
parentArc?: Arc<any, any>;
parentLoopNodeId?: string;
parentExecuted?: string[];
}

@@ -16,0 +19,0 @@ export interface Storage {

@@ -1,1 +0,1 @@

{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE3E,GAAG,CACD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;IAE5D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjD"}
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAE3E,GAAG,CACD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC;IAE5D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACjD"}
{
"name": "@arc-dev/runtime",
"version": "0.0.2-alpha.2",
"version": "0.0.2-alpha.3",
"description": "Single process runtime implementation for ARC",

@@ -28,3 +28,3 @@ "license": "Apache-2.0",

"pino-pretty": "^13.1.2",
"@arc-dev/core": "0.0.2-alpha.2",
"@arc-dev/core": "0.0.2-alpha.3",
"@arc-dev/models": "0.0.2-alpha.2"

@@ -38,5 +38,5 @@ },

"typescript": "^5.6.3",
"@config/eslint": "0.0.1",
"@config/rollup": "0.0.1",
"@config/typescript": "0.0.1"
"@config/typescript": "0.0.1",
"@config/eslint": "0.0.1"
},

@@ -43,0 +43,0 @@ "scripts": {

import { Storage, StoredExecution } from "..";
export declare class InMemoryStorage implements Storage {
private executions;
store(sessionId: string, execution: StoredExecution): void;
get(sessionId: string): StoredExecution | null;
delete(sessionId: string): void;
}
//# sourceMappingURL=memory.d.ts.map
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAE9C,qBAAa,eAAgB,YAAW,OAAO;IAC7C,OAAO,CAAC,UAAU,CAA2C;IAE7D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI;IAI1D,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAI9C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGhC"}