@sprinterai/runtime 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,10 @@ export interface ExecuteAgentConfig {
21
21
  temperature?: number;
22
22
  /** Abort signal. */
23
23
  abortSignal?: AbortSignal;
24
+ /** Callback invoked when streaming finishes. */
25
+ onFinish?: (result: {
26
+ text: string;
27
+ }) => Promise<void> | void;
24
28
  }
25
29
  /** Result from a non-streaming agent execution. */
26
30
  export interface ExecuteAgentResult {
@@ -1 +1 @@
1
- {"version":3,"file":"execute-agent.d.ts","sourceRoot":"","sources":["../../src/agent/execute-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAA6B,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,IAAI,CAAC;AAKjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,sEAAsE;IACtE,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,oCAAoC;IACpC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,6BAA6B;IAC7B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAahF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAqB7B"}
1
+ {"version":3,"file":"execute-agent.d.ts","sourceRoot":"","sources":["../../src/agent/execute-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAA6B,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,IAAI,CAAC;AAKjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,sEAAsE;IACtE,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,oCAAoC;IACpC,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,6BAA6B;IAC7B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/D;AAED,mDAAmD;AACnD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,iBAAiB,CAkBhF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAqB7B"}
@@ -15,6 +15,11 @@ export function executeAgentStream(config) {
15
15
  stopWhen: stepCountIs(config.maxSteps ?? 5),
16
16
  temperature: config.temperature,
17
17
  abortSignal: config.abortSignal,
18
+ onFinish: config.onFinish
19
+ ? async (event) => {
20
+ await config.onFinish({ text: event.text });
21
+ }
22
+ : undefined,
18
23
  });
19
24
  }
20
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"execute-agent.js","sourceRoot":"","sources":["../../src/agent/execute-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAoCpD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,OAAO,UAAU,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA0B;IAE1B,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;YAC3C,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"execute-agent.js","sourceRoot":"","sources":["../../src/agent/execute-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAsCpD;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,OAAO,UAAU,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACvB,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,MAAM,MAAM,CAAC,QAAS,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/C,CAAC;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA0B;IAE1B,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAwB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE1F,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC;YAC3C,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC"}
@@ -23,10 +23,17 @@ export interface ChatHandlerConfig {
23
23
  defaultAgentSlug: string;
24
24
  resolveModel: (modelId: string) => LanguageModel;
25
25
  agentRegistry?: AgentRegistry;
26
+ /** All available tools (from module loader / platform runtime). */
27
+ allTools?: ToolDefinition[];
28
+ /** Tool group to slug mapping. */
29
+ toolGroupMap?: Record<string, string[]>;
30
+ /** Permissions for tool filtering. */
31
+ permissions?: string[];
26
32
  hooks?: {
27
33
  buildExtraSections?: (ctx: ChatContext) => Promise<PromptSection[]>;
28
34
  buildExtraTools?: (ctx: ChatContext) => Promise<ToolDefinition[]>;
29
35
  onToolResult?: (name: string, result: unknown, ctx: ChatContext) => Promise<void>;
36
+ onStreamFinish?: (text: string, ctx: ChatContext) => Promise<void>;
30
37
  };
31
38
  }
32
39
  /** Request shape for the chat handler. */
@@ -41,6 +48,7 @@ export interface ChatRequest {
41
48
  chatId?: string;
42
49
  userId?: string;
43
50
  tenantId?: string;
51
+ permissions?: string[];
44
52
  }
45
53
  /** Chat handler returned by the factory. */
46
54
  export interface ChatHandler {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/chat/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAI7D,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,KAAK,EAAE,UAAU,CAAC;QAClB,MAAM,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,WAAW,CAAC;KACrB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC;IACjD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACpE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAClE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACnF,CAAC;CACH;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;KACnB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;QACpC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAC9C,KAAK,EAAE,aAAa,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAqE7E"}
1
+ {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../src/chat/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAM7D,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uDAAuD;AACvD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,KAAK,EAAE,UAAU,CAAC;QAClB,MAAM,EAAE,WAAW,CAAC;QACpB,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,WAAW,CAAC;QACpB,MAAM,EAAE,WAAW,CAAC;KACrB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC;IACjD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACpE,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAClE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAClF,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACpE,CAAC;CACH;AAED,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;KACnB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;QACpC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;QAC9C,KAAK,EAAE,aAAa,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAkM7E"}
@@ -1,5 +1,7 @@
1
1
  import { resolveAgent } from '../agent/agent-resolver';
2
2
  import { executeAgentStream } from '../agent/execute-agent';
3
+ import { loadMemories } from '../memory/memory-manager';
4
+ import { buildMemoryPrompt } from '../memory/memory-prompt';
3
5
  import { toAIMessages, validateMessage } from './message-utils';
4
6
  /**
5
7
  * Factory: create a chat route handler with all dependencies injected.
@@ -36,6 +38,38 @@ export function createChatRouteHandler(config) {
36
38
  userId: request.userId,
37
39
  tenantId: request.tenantId,
38
40
  };
41
+ // Load chat history if chatId provided
42
+ let historicalMessages = [];
43
+ if (request.chatId) {
44
+ try {
45
+ const history = await config.stores.chat.getMessages(request.chatId);
46
+ if (history && history.length > 0) {
47
+ historicalMessages = history.map((m) => ({
48
+ role: m.sender_type === 'agent' ? 'assistant' : m.sender_type,
49
+ content: m.content,
50
+ sender_type: m.sender_type,
51
+ parts: m.parts ?? undefined,
52
+ }));
53
+ }
54
+ }
55
+ catch {
56
+ // Chat history not available — proceed without it
57
+ }
58
+ }
59
+ // Save incoming user message
60
+ if (request.chatId && request.userId) {
61
+ try {
62
+ await config.stores.chat.saveMessage(request.chatId, {
63
+ content: lastMsg.content ?? '',
64
+ parts: lastMsg.parts,
65
+ senderType: 'user',
66
+ senderId: request.userId,
67
+ });
68
+ }
69
+ catch {
70
+ // Non-critical — continue even if save fails
71
+ }
72
+ }
39
73
  // Build system prompt sections
40
74
  const systemSections = [
41
75
  {
@@ -44,13 +78,71 @@ export function createChatRouteHandler(config) {
44
78
  priority: 100,
45
79
  },
46
80
  ];
81
+ // Load memory context
82
+ if (request.userId) {
83
+ try {
84
+ const currentQuery = lastMsg.content ?? '';
85
+ const memories = await loadMemories(config.stores.memory, {
86
+ userId: request.userId,
87
+ chatId: request.chatId,
88
+ currentQuery,
89
+ });
90
+ const memorySection = buildMemoryPrompt(memories.userMemories, memories.semanticMemories);
91
+ if (memorySection) {
92
+ systemSections.push(memorySection);
93
+ }
94
+ }
95
+ catch {
96
+ // Memory not available — proceed without it
97
+ }
98
+ }
47
99
  // Add extra sections from hook
48
100
  if (config.hooks?.buildExtraSections) {
49
101
  const extra = await config.hooks.buildExtraSections(ctx);
50
102
  systemSections.push(...extra);
51
103
  }
52
- // Collect tools
104
+ // Resolve tools for the agent
53
105
  const tools = [];
106
+ // Add all available tools filtered by agent config
107
+ if (config.allTools && config.allTools.length > 0) {
108
+ const agentConfig = agent.config;
109
+ if (agentConfig?.toolGroups && config.toolGroupMap) {
110
+ const allowedSlugs = new Set();
111
+ for (const group of agentConfig.toolGroups) {
112
+ const slugs = config.toolGroupMap[group] ?? [];
113
+ slugs.forEach((s) => allowedSlugs.add(s));
114
+ }
115
+ // Also include customTools
116
+ if (agentConfig.customTools) {
117
+ agentConfig.customTools.forEach((s) => allowedSlugs.add(s));
118
+ }
119
+ const effectivePermissions = request.permissions ?? config.permissions;
120
+ tools.push(...config.allTools.filter((t) => {
121
+ if (!allowedSlugs.has(t.slug))
122
+ return false;
123
+ // Filter by permissions if provided
124
+ if (effectivePermissions &&
125
+ t.requiredPermission &&
126
+ !effectivePermissions.includes(t.requiredPermission)) {
127
+ return false;
128
+ }
129
+ return true;
130
+ }));
131
+ }
132
+ else {
133
+ // No tool group filtering — give agent all tools (still filter by permissions)
134
+ const effectivePermissions = request.permissions ?? config.permissions;
135
+ tools.push(...config.allTools.filter((t) => {
136
+ if (effectivePermissions &&
137
+ t.requiredPermission &&
138
+ !effectivePermissions.includes(t.requiredPermission)) {
139
+ return false;
140
+ }
141
+ return true;
142
+ }));
143
+ }
144
+ }
145
+ // Add hook-provided extra tools
54
146
  if (config.hooks?.buildExtraTools) {
55
147
  const extraTools = await config.hooks.buildExtraTools(ctx);
56
148
  tools.push(...extraTools);
@@ -58,14 +150,35 @@ export function createChatRouteHandler(config) {
58
150
  // Resolve model
59
151
  const modelId = agent.model ?? 'default';
60
152
  const model = config.resolveModel(modelId);
61
- // Convert messages
62
- const aiMessages = toAIMessages(request.messages);
153
+ // Combine historical messages with current request
154
+ const allMessages = historicalMessages.length > 0
155
+ ? [...historicalMessages, ...request.messages]
156
+ : request.messages;
157
+ const aiMessages = toAIMessages(allMessages);
63
158
  // Execute
64
159
  const stream = executeAgentStream({
65
160
  model,
66
161
  systemSections,
67
162
  tools: tools.length > 0 ? tools : undefined,
68
163
  messages: aiMessages,
164
+ onFinish: async (result) => {
165
+ // Save assistant message
166
+ if (request.chatId) {
167
+ try {
168
+ await config.stores.chat.saveMessage(request.chatId, {
169
+ content: result.text ?? '',
170
+ senderType: 'agent',
171
+ senderId: agentSlug,
172
+ });
173
+ }
174
+ catch {
175
+ // Non-critical
176
+ }
177
+ }
178
+ if (config.hooks?.onStreamFinish) {
179
+ await config.hooks.onStreamFinish(result.text ?? '', ctx);
180
+ }
181
+ },
69
182
  });
70
183
  return { stream, agent };
71
184
  },
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../src/chat/chat-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../src/chat/chat-handler.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { z } from 'zod';
2
3
  import { AgentRegistry } from '../agent/agent-registry';
3
4
  import { InMemoryAgentStore } from '../testing/in-memory-agent-store';
4
5
  import { InMemoryChatStore } from '../testing/in-memory-chat-store';
@@ -8,12 +9,20 @@ import { InMemoryTenantStore } from '../testing/in-memory-tenant-store';
8
9
  import { createChatRouteHandler } from './chat-handler';
9
10
  // Mock AI SDK to avoid actual model calls
10
11
  vi.mock('ai', () => ({
11
- streamText: vi.fn(() => ({
12
- textStream: (async function* () {
13
- yield 'Hello';
14
- })(),
15
- toDataStreamResponse: () => new Response('mocked'),
16
- })),
12
+ streamText: vi.fn((opts) => {
13
+ // Call onFinish if provided (simulates stream completion)
14
+ if (typeof opts.onFinish === 'function') {
15
+ setTimeout(() => {
16
+ opts.onFinish({ text: 'Hello' });
17
+ }, 0);
18
+ }
19
+ return {
20
+ textStream: (async function* () {
21
+ yield 'Hello';
22
+ })(),
23
+ toDataStreamResponse: () => new Response('mocked'),
24
+ };
25
+ }),
17
26
  generateText: vi.fn(),
18
27
  stepCountIs: vi.fn((n) => ({ type: 'step-count', count: n })),
19
28
  tool: vi.fn((config) => ({
@@ -23,6 +32,8 @@ vi.mock('ai', () => ({
23
32
  }));
24
33
  describe('createChatRouteHandler', () => {
25
34
  let agentRegistry;
35
+ let chatStore;
36
+ let memoryStore;
26
37
  const mockModel = { modelId: 'test-model' };
27
38
  beforeEach(() => {
28
39
  agentRegistry = new AgentRegistry();
@@ -35,19 +46,22 @@ describe('createChatRouteHandler', () => {
35
46
  toolGroups: [],
36
47
  customTools: [],
37
48
  });
49
+ chatStore = new InMemoryChatStore();
50
+ memoryStore = new InMemoryMemoryStore();
38
51
  });
39
- function makeHandler() {
52
+ function makeHandler(overrides) {
40
53
  return createChatRouteHandler({
41
54
  stores: {
42
55
  agent: new InMemoryAgentStore(),
43
56
  entity: new InMemoryEntityStore(),
44
- chat: new InMemoryChatStore(),
57
+ chat: chatStore,
45
58
  tenant: new InMemoryTenantStore(),
46
- memory: new InMemoryMemoryStore(),
59
+ memory: memoryStore,
47
60
  },
48
61
  defaultAgentSlug: 'analyst',
49
62
  resolveModel: () => mockModel,
50
63
  agentRegistry,
64
+ ...overrides,
51
65
  });
52
66
  }
53
67
  it('resolves agent and returns stream', async () => {
@@ -87,26 +101,256 @@ describe('createChatRouteHandler', () => {
87
101
  const buildExtraSections = vi
88
102
  .fn()
89
103
  .mockResolvedValue([{ label: 'Memory', content: 'user likes tables', priority: 5 }]);
104
+ const handler = makeHandler({
105
+ hooks: { buildExtraSections },
106
+ });
107
+ await handler.handle({
108
+ messages: [{ role: 'user', content: 'hello' }],
109
+ });
110
+ expect(buildExtraSections).toHaveBeenCalledTimes(1);
111
+ expect(buildExtraSections).toHaveBeenCalledWith(expect.objectContaining({
112
+ agent: expect.objectContaining({ id: 'analyst' }),
113
+ }));
114
+ });
115
+ it('loads chat history when chatId provided', async () => {
116
+ // Pre-seed a chat with messages
117
+ const chat = await chatStore.createChat({ chatType: 'ai', agentSlug: 'analyst' });
118
+ await chatStore.saveMessage(chat.id, {
119
+ content: 'previous message',
120
+ senderType: 'user',
121
+ senderId: 'user-1',
122
+ });
123
+ await chatStore.saveMessage(chat.id, {
124
+ content: 'previous response',
125
+ senderType: 'agent',
126
+ senderId: 'analyst',
127
+ });
128
+ const handler = makeHandler();
129
+ const { agent } = await handler.handle({
130
+ messages: [{ role: 'user', content: 'follow up' }],
131
+ chatId: chat.id,
132
+ userId: 'user-1',
133
+ });
134
+ expect(agent.id).toBe('analyst');
135
+ // The handler should have loaded history — verify by checking saved messages grew
136
+ const msgs = await chatStore.getMessages(chat.id);
137
+ // 2 seeded + 1 new user message saved by handler = 3
138
+ expect(msgs.length).toBe(3);
139
+ expect(msgs[2].content).toBe('follow up');
140
+ expect(msgs[2].sender_type).toBe('user');
141
+ });
142
+ it('saves user message when chatId and userId provided', async () => {
143
+ const chat = await chatStore.createChat({ chatType: 'ai' });
144
+ const handler = makeHandler();
145
+ await handler.handle({
146
+ messages: [{ role: 'user', content: 'test message' }],
147
+ chatId: chat.id,
148
+ userId: 'user-42',
149
+ });
150
+ const msgs = await chatStore.getMessages(chat.id);
151
+ expect(msgs.length).toBe(1);
152
+ expect(msgs[0].content).toBe('test message');
153
+ expect(msgs[0].sender_type).toBe('user');
154
+ expect(msgs[0].sender_id).toBe('user-42');
155
+ });
156
+ it('does not save message when chatId missing', async () => {
157
+ const handler = makeHandler();
158
+ await handler.handle({
159
+ messages: [{ role: 'user', content: 'no chat id' }],
160
+ userId: 'user-1',
161
+ });
162
+ // No chat was created, no messages saved
163
+ const allChats = await chatStore.getChatsByUser('user-1');
164
+ expect(allChats.length).toBe(0);
165
+ });
166
+ it('loads memories when userId provided', async () => {
167
+ memoryStore.seedMemory({
168
+ id: 'mem-1',
169
+ user_id: 'user-1',
170
+ content: 'Prefers concise answers',
171
+ source: 'user',
172
+ created_at: new Date().toISOString(),
173
+ updated_at: new Date().toISOString(),
174
+ });
175
+ const handler = makeHandler();
176
+ // This should not throw — memories are loaded and injected into prompt
177
+ const { agent } = await handler.handle({
178
+ messages: [{ role: 'user', content: 'hello' }],
179
+ userId: 'user-1',
180
+ });
181
+ expect(agent.id).toBe('analyst');
182
+ });
183
+ it('resolves tools from allTools when agent has toolGroups', async () => {
184
+ agentRegistry.register({
185
+ id: 'tooled-agent',
186
+ name: 'Tooled Agent',
187
+ description: 'Agent with tool groups',
188
+ icon: 'wrench',
189
+ systemPrompt: 'You have tools',
190
+ toolGroups: ['entity'],
191
+ customTools: ['custom-search'],
192
+ });
193
+ const allTools = [
194
+ {
195
+ slug: 'searchEntities',
196
+ name: 'Search',
197
+ description: 'Search entities',
198
+ category: 'entity',
199
+ icon: 'search',
200
+ inputSchema: z.object({}),
201
+ execute: async () => ({}),
202
+ },
203
+ {
204
+ slug: 'getEntity',
205
+ name: 'Get',
206
+ description: 'Get entity',
207
+ category: 'entity',
208
+ icon: 'eye',
209
+ inputSchema: z.object({}),
210
+ execute: async () => ({}),
211
+ },
212
+ {
213
+ slug: 'custom-search',
214
+ name: 'Custom Search',
215
+ description: 'Custom search',
216
+ category: 'custom',
217
+ icon: 'search',
218
+ inputSchema: z.object({}),
219
+ execute: async () => ({}),
220
+ },
221
+ {
222
+ slug: 'admin-tool',
223
+ name: 'Admin',
224
+ description: 'Admin only',
225
+ category: 'admin',
226
+ icon: 'shield',
227
+ inputSchema: z.object({}),
228
+ execute: async () => ({}),
229
+ },
230
+ ];
231
+ const toolGroupMap = {
232
+ entity: ['searchEntities', 'getEntity'],
233
+ admin: ['admin-tool'],
234
+ };
235
+ const handler = makeHandler({
236
+ allTools,
237
+ toolGroupMap,
238
+ });
239
+ // The handler runs without error — tools are resolved from groups + customTools
240
+ const { agent } = await handler.handle({
241
+ messages: [{ role: 'user', content: 'search' }],
242
+ agentSlug: 'tooled-agent',
243
+ });
244
+ expect(agent.id).toBe('tooled-agent');
245
+ });
246
+ it('filters tools by permissions', async () => {
247
+ agentRegistry.register({
248
+ id: 'restricted-agent',
249
+ name: 'Restricted',
250
+ description: 'Agent with limited permissions',
251
+ icon: 'lock',
252
+ systemPrompt: 'You have limited tools',
253
+ toolGroups: ['entity', 'admin'],
254
+ });
255
+ const allTools = [
256
+ {
257
+ slug: 'searchEntities',
258
+ name: 'Search',
259
+ description: 'Search entities',
260
+ category: 'entity',
261
+ icon: 'search',
262
+ inputSchema: z.object({}),
263
+ execute: async () => ({}),
264
+ },
265
+ {
266
+ slug: 'admin-tool',
267
+ name: 'Admin',
268
+ description: 'Admin only',
269
+ category: 'admin',
270
+ icon: 'shield',
271
+ inputSchema: z.object({}),
272
+ execute: async () => ({}),
273
+ requiredPermission: 'entities.team.delete',
274
+ },
275
+ ];
276
+ const toolGroupMap = {
277
+ entity: ['searchEntities'],
278
+ admin: ['admin-tool'],
279
+ };
280
+ // Without the required permission, admin-tool should be filtered out
281
+ const handler = makeHandler({
282
+ allTools,
283
+ toolGroupMap,
284
+ permissions: ['entities.team.read'],
285
+ });
286
+ // Should not throw
287
+ const { agent } = await handler.handle({
288
+ messages: [{ role: 'user', content: 'do admin stuff' }],
289
+ agentSlug: 'restricted-agent',
290
+ });
291
+ expect(agent.id).toBe('restricted-agent');
292
+ });
293
+ it('calls onStreamFinish hook', async () => {
294
+ const onStreamFinish = vi.fn();
295
+ const chat = await chatStore.createChat({ chatType: 'ai' });
296
+ const handler = makeHandler({
297
+ hooks: { onStreamFinish },
298
+ });
299
+ await handler.handle({
300
+ messages: [{ role: 'user', content: 'hello' }],
301
+ chatId: chat.id,
302
+ userId: 'user-1',
303
+ });
304
+ // onFinish is called asynchronously by the mock — wait for it
305
+ await new Promise((r) => setTimeout(r, 50));
306
+ expect(onStreamFinish).toHaveBeenCalledWith('Hello', expect.objectContaining({
307
+ agent: expect.objectContaining({ id: 'analyst' }),
308
+ }));
309
+ });
310
+ it('proceeds without error when chat history fails', async () => {
311
+ // Use a chat store that throws on getMessages
312
+ const failingChatStore = new InMemoryChatStore();
313
+ vi.spyOn(failingChatStore, 'getMessages').mockRejectedValue(new Error('DB error'));
90
314
  const handler = createChatRouteHandler({
91
315
  stores: {
92
316
  agent: new InMemoryAgentStore(),
93
317
  entity: new InMemoryEntityStore(),
94
- chat: new InMemoryChatStore(),
318
+ chat: failingChatStore,
95
319
  tenant: new InMemoryTenantStore(),
96
320
  memory: new InMemoryMemoryStore(),
97
321
  },
98
322
  defaultAgentSlug: 'analyst',
99
323
  resolveModel: () => mockModel,
100
324
  agentRegistry,
101
- hooks: { buildExtraSections },
102
325
  });
103
- await handler.handle({
326
+ // Should not throw despite getMessages failure
327
+ const { agent } = await handler.handle({
104
328
  messages: [{ role: 'user', content: 'hello' }],
329
+ chatId: 'nonexistent-chat',
105
330
  });
106
- expect(buildExtraSections).toHaveBeenCalledTimes(1);
107
- expect(buildExtraSections).toHaveBeenCalledWith(expect.objectContaining({
108
- agent: expect.objectContaining({ id: 'analyst' }),
109
- }));
331
+ expect(agent.id).toBe('analyst');
332
+ });
333
+ it('proceeds without error when memory loading fails', async () => {
334
+ const failingMemoryStore = new InMemoryMemoryStore();
335
+ vi.spyOn(failingMemoryStore, 'getUserMemories').mockRejectedValue(new Error('DB error'));
336
+ const handler = createChatRouteHandler({
337
+ stores: {
338
+ agent: new InMemoryAgentStore(),
339
+ entity: new InMemoryEntityStore(),
340
+ chat: new InMemoryChatStore(),
341
+ tenant: new InMemoryTenantStore(),
342
+ memory: failingMemoryStore,
343
+ },
344
+ defaultAgentSlug: 'analyst',
345
+ resolveModel: () => mockModel,
346
+ agentRegistry,
347
+ });
348
+ // Should not throw despite memory loading failure
349
+ const { agent } = await handler.handle({
350
+ messages: [{ role: 'user', content: 'hello' }],
351
+ userId: 'user-1',
352
+ });
353
+ expect(agent.id).toBe('analyst');
110
354
  });
111
355
  });
112
356
  //# sourceMappingURL=chat-handler.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.test.js","sourceRoot":"","sources":["../../src/chat/chat-handler.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-handler.test.js","sourceRoot":"","sources":["../../src/chat/chat-handler.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-runtime.d.ts","sourceRoot":"","sources":["../../src/module/create-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC;IACjD,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,yCAAyC;IACzC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,+CAA+C;IAC/C,YAAY,EAAE,YAAY,CAAC;IAC3B,iDAAiD;IACjD,aAAa,EAAE,aAAa,CAAC;IAC7B,0BAA0B;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,gCAAgC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,kCAAkC;IAClC,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,aAAa,EAAE,KAC1B,OAAO,CAAC;QAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC5E,6BAA6B;IAC7B,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,WAAW,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAoEpF"}
1
+ {"version":3,"file":"create-runtime.d.ts","sourceRoot":"","sources":["../../src/module/create-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,6BAA6B;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,aAAa,CAAC;IACjD,mCAAmC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,yCAAyC;IACzC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,+CAA+C;IAC/C,YAAY,EAAE,YAAY,CAAC;IAC3B,iDAAiD;IACjD,aAAa,EAAE,aAAa,CAAC;IAC7B,0BAA0B;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,gCAAgC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,kCAAkC;IAClC,YAAY,EAAE,CACZ,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,aAAa,EAAE,KAC1B,OAAO,CAAC;QAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC5E,6BAA6B;IAC7B,iBAAiB,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,WAAW,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAsEpF"}
@@ -67,6 +67,8 @@ export function createPlatformRuntime(config) {
67
67
  defaultAgentSlug: config.defaultAgentSlug ?? 'assistant',
68
68
  resolveModel: config.resolveModel,
69
69
  agentRegistry,
70
+ allTools: toolRegistry.getAll(),
71
+ toolGroupMap: config.toolGroupMap,
70
72
  ...overrides,
71
73
  });
72
74
  },
@@ -1 +1 @@
1
- {"version":3,"file":"create-runtime.js","sourceRoot":"","sources":["../../src/module/create-runtime.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAuD9C;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA6B;IACjE,yBAAyB;IACzB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3C,sBAAsB;IACtB,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IAExC,wBAAwB;IACxB,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7E,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAEtC,wBAAwB;IACxB,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvC,uBAAuB;IACvB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY;QACZ,aAAa;QACb,OAAO,EAAE,MAAM;QAEf,KAAK,CAAC,YAAY,CAAC,IAAY;YAC7B,OAAO,YAAY,CAAC,IAAI,EAAE;gBACxB,aAAa;gBACb,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;aAChC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,WAA6B;YAC5D,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;gBACrC,aAAa;gBACb,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;aAChC,CAAC,CAAC;YACH,OAAO,iBAAiB,CAAC;gBACvB,QAAQ,EAAE,YAAY,CAAC,MAAM,EAAE;gBAC/B,WAAW,EAAE,KAAK,CAAC,MAAM;gBACzB,WAAW;gBACX,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC,CAAC;QACL,CAAC;QAED,iBAAiB,CAAC,SAAsC;YACtD,OAAO,sBAAsB,CAAC;gBAC5B,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;oBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;oBAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;oBACxB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;oBAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;iBAC7B;gBACD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,WAAW;gBACxD,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,aAAa;gBACb,GAAG,SAAS;aACb,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"create-runtime.js","sourceRoot":"","sources":["../../src/module/create-runtime.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,33 @@
1
- import type { SprinterModule, AgentDefinition, ToolDefinition } from "@sprinterai/core";
1
+ import type { SprinterModule, AgentDefinition, ToolDefinition, ViewDefinition, WidgetDefinition, NavItemDefinition, JobDefinition, RouteDefinition, AdminSectionDefinition, ApiNamespaceDefinition, CapabilityDefinition } from '@sprinterai/core';
2
+ type ModuleEntityType = NonNullable<SprinterModule['entityTypes']>[number];
2
3
  /** The merged result of loading multiple modules. */
3
4
  export interface LoadedModules {
4
5
  /** All entity type definitions from all modules. */
5
- entityTypes: Array<{
6
- slug: string;
7
- name: string;
8
- description?: string;
9
- icon?: string;
10
- color?: string;
11
- schema: Record<string, unknown>;
12
- config?: Record<string, unknown>;
13
- /** Which module provided this entity type. */
6
+ entityTypes: Array<ModuleEntityType & {
14
7
  sourceModule: string;
15
8
  }>;
16
9
  /** All agent definitions from all modules. */
17
10
  agents: AgentDefinition[];
18
11
  /** All tool definitions from all modules. */
19
12
  tools: ToolDefinition[];
13
+ /** All view definitions from all modules. */
14
+ views: ViewDefinition[];
15
+ /** All widget definitions from all modules. */
16
+ widgets: WidgetDefinition[];
17
+ /** All navigation item definitions from all modules. */
18
+ navItems: NavItemDefinition[];
19
+ /** All job definitions from all modules. */
20
+ jobs: JobDefinition[];
21
+ /** All route definitions from all modules. */
22
+ routes: RouteDefinition[];
23
+ /** All admin section definitions from all modules. */
24
+ adminSections: AdminSectionDefinition[];
25
+ /** All API namespace definitions from all modules. */
26
+ apiNamespaces: ApiNamespaceDefinition[];
27
+ /** All capability descriptors from all modules. */
28
+ capabilities: CapabilityDefinition[];
29
+ /** All permission strings from all modules. */
30
+ permissions: string[];
20
31
  /** Module names in load order. */
21
32
  moduleOrder: string[];
22
33
  }
@@ -29,4 +40,5 @@ export interface LoadedModules {
29
40
  * - Returns the merged result
30
41
  */
31
42
  export declare function loadModules(modules: SprinterModule[]): LoadedModules;
43
+ export {};
32
44
  //# sourceMappingURL=module-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/module/module-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,WAAW,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,8CAA8C;QAC9C,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,8CAA8C;IAC9C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,kCAAkC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAmFpE"}
1
+ {"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/module/module-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,KAAK,gBAAgB,GAAG,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3E,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,WAAW,EAAE,KAAK,CAAC,gBAAgB,GAAG;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,8CAA8C;IAC9C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,6CAA6C;IAC7C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,6CAA6C;IAC7C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,+CAA+C;IAC/C,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,wDAAwD;IACxD,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,4CAA4C;IAC5C,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,8CAA8C;IAC9C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,sDAAsD;IACtD,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,sDAAsD;IACtD,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,mDAAmD;IACnD,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,+CAA+C;IAC/C,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kCAAkC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,aAAa,CAmMpE"}
@@ -10,14 +10,14 @@ export function loadModules(modules) {
10
10
  // Validate modules
11
11
  for (const mod of modules) {
12
12
  if (!mod.name) {
13
- throw new Error("Module must have a name");
13
+ throw new Error('Module must have a name');
14
14
  }
15
15
  }
16
16
  // Check for duplicate names
17
17
  const names = modules.map((m) => m.name);
18
18
  const dupes = names.filter((n, i) => names.indexOf(n) !== i);
19
19
  if (dupes.length > 0) {
20
- throw new Error(`Duplicate module names: ${[...new Set(dupes)].join(", ")}`);
20
+ throw new Error(`Duplicate module names: ${[...new Set(dupes)].join(', ')}`);
21
21
  }
22
22
  // Check dependencies
23
23
  const available = new Set(names);
@@ -34,9 +34,26 @@ export function loadModules(modules) {
34
34
  const entityTypes = [];
35
35
  const agents = [];
36
36
  const tools = [];
37
+ const views = [];
38
+ const widgets = [];
39
+ const navItems = [];
40
+ const jobs = [];
41
+ const routes = [];
42
+ const adminSections = [];
43
+ const apiNamespaces = [];
44
+ const capabilities = [];
45
+ const permissions = [];
37
46
  const seenEntitySlugs = new Map();
38
47
  const seenAgentIds = new Map();
39
48
  const seenToolSlugs = new Map();
49
+ const seenViewSlugs = new Map();
50
+ const seenWidgetSlugs = new Map();
51
+ const seenJobSlugs = new Map();
52
+ const seenRouteSlugs = new Map();
53
+ const seenAdminSectionSlugs = new Map();
54
+ const seenApiNamespaceSlugs = new Map();
55
+ const seenCapabilitySlugs = new Map();
56
+ const seenPermissions = new Set();
40
57
  for (const mod of sorted) {
41
58
  // Entity types
42
59
  for (const et of mod.entityTypes ?? []) {
@@ -72,11 +89,108 @@ export function loadModules(modules) {
72
89
  tools.push(tool);
73
90
  }
74
91
  }
92
+ // Views
93
+ for (const view of mod.views ?? []) {
94
+ const existing = seenViewSlugs.get(view.slug);
95
+ if (existing !== undefined) {
96
+ views[existing] = view;
97
+ }
98
+ else {
99
+ seenViewSlugs.set(view.slug, views.length);
100
+ views.push(view);
101
+ }
102
+ }
103
+ // Widgets
104
+ for (const widget of mod.widgets ?? []) {
105
+ const existing = seenWidgetSlugs.get(widget.slug);
106
+ if (existing !== undefined) {
107
+ widgets[existing] = widget;
108
+ }
109
+ else {
110
+ seenWidgetSlugs.set(widget.slug, widgets.length);
111
+ widgets.push(widget);
112
+ }
113
+ }
114
+ // Nav items (append, no dedup — order matters)
115
+ for (const item of mod.navItems ?? []) {
116
+ navItems.push(item);
117
+ }
118
+ // Jobs
119
+ for (const job of mod.jobs ?? []) {
120
+ const existing = seenJobSlugs.get(job.slug);
121
+ if (existing !== undefined) {
122
+ jobs[existing] = job;
123
+ }
124
+ else {
125
+ seenJobSlugs.set(job.slug, jobs.length);
126
+ jobs.push(job);
127
+ }
128
+ }
129
+ // Routes
130
+ for (const route of mod.routes ?? []) {
131
+ const existing = seenRouteSlugs.get(route.slug);
132
+ if (existing !== undefined) {
133
+ routes[existing] = route;
134
+ }
135
+ else {
136
+ seenRouteSlugs.set(route.slug, routes.length);
137
+ routes.push(route);
138
+ }
139
+ }
140
+ // Admin sections
141
+ for (const section of mod.adminSections ?? []) {
142
+ const existing = seenAdminSectionSlugs.get(section.slug);
143
+ if (existing !== undefined) {
144
+ adminSections[existing] = section;
145
+ }
146
+ else {
147
+ seenAdminSectionSlugs.set(section.slug, adminSections.length);
148
+ adminSections.push(section);
149
+ }
150
+ }
151
+ // API namespaces
152
+ for (const namespace of mod.apiNamespaces ?? []) {
153
+ const existing = seenApiNamespaceSlugs.get(namespace.slug);
154
+ if (existing !== undefined) {
155
+ apiNamespaces[existing] = namespace;
156
+ }
157
+ else {
158
+ seenApiNamespaceSlugs.set(namespace.slug, apiNamespaces.length);
159
+ apiNamespaces.push(namespace);
160
+ }
161
+ }
162
+ // Capabilities
163
+ for (const capability of mod.capabilities ?? []) {
164
+ const existing = seenCapabilitySlugs.get(capability.slug);
165
+ if (existing !== undefined) {
166
+ capabilities[existing] = capability;
167
+ }
168
+ else {
169
+ seenCapabilitySlugs.set(capability.slug, capabilities.length);
170
+ capabilities.push(capability);
171
+ }
172
+ }
173
+ // Permissions (deduplicated)
174
+ for (const perm of mod.permissions ?? []) {
175
+ if (!seenPermissions.has(perm)) {
176
+ seenPermissions.add(perm);
177
+ permissions.push(perm);
178
+ }
179
+ }
75
180
  }
76
181
  return {
77
182
  entityTypes,
78
183
  agents,
79
184
  tools,
185
+ views,
186
+ widgets,
187
+ navItems,
188
+ jobs,
189
+ routes,
190
+ adminSections,
191
+ apiNamespaces,
192
+ capabilities,
193
+ permissions,
80
194
  moduleOrder: sorted.map((m) => m.name),
81
195
  };
82
196
  }
@@ -116,7 +230,7 @@ function topologicalSort(modules) {
116
230
  }
117
231
  }
118
232
  if (result.length !== modules.length) {
119
- throw new Error("Circular dependency detected among modules");
233
+ throw new Error('Circular dependency detected among modules');
120
234
  }
121
235
  return result;
122
236
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.js","sourceRoot":"","sources":["../../src/module/module-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-loader.js","sourceRoot":"","sources":["../../src/module/module-loader.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,10 @@ describe('loadModules', () => {
30
30
  },
31
31
  ],
32
32
  tools: [makeTool('search')],
33
+ routes: [{ slug: 'dashboard', path: '/', title: 'Dashboard', kind: 'app' }],
34
+ adminSections: [{ slug: 'agents', title: 'Agents', href: '/admin/agents' }],
35
+ apiNamespaces: [{ slug: 'chat', basePath: '/api/chat' }],
36
+ capabilities: [{ slug: 'chat', name: 'Chat' }],
33
37
  }),
34
38
  ]);
35
39
  expect(result.moduleOrder).toEqual(['core']);
@@ -37,6 +41,10 @@ describe('loadModules', () => {
37
41
  expect(result.entityTypes[0].sourceModule).toBe('core');
38
42
  expect(result.agents).toHaveLength(1);
39
43
  expect(result.tools).toHaveLength(1);
44
+ expect(result.routes).toHaveLength(1);
45
+ expect(result.adminSections).toHaveLength(1);
46
+ expect(result.apiNamespaces).toHaveLength(1);
47
+ expect(result.capabilities).toHaveLength(1);
40
48
  });
41
49
  it('merges multiple modules', () => {
42
50
  const result = loadModules([
@@ -91,6 +99,34 @@ describe('loadModules', () => {
91
99
  expect(result.entityTypes).toHaveLength(0);
92
100
  expect(result.agents).toHaveLength(0);
93
101
  expect(result.tools).toHaveLength(0);
102
+ expect(result.routes).toHaveLength(0);
103
+ expect(result.adminSections).toHaveLength(0);
104
+ expect(result.apiNamespaces).toHaveLength(0);
105
+ expect(result.capabilities).toHaveLength(0);
106
+ });
107
+ it('later module overrides routes, admin sections, and namespaces by slug', () => {
108
+ const result = loadModules([
109
+ makeModule('base', {
110
+ routes: [{ slug: 'dashboard', path: '/', title: 'Old Dashboard', kind: 'app' }],
111
+ adminSections: [{ slug: 'agents', title: 'Old Agents', href: '/admin/agents' }],
112
+ apiNamespaces: [{ slug: 'chat', basePath: '/api/chat-v1' }],
113
+ capabilities: [{ slug: 'chat', name: 'Old Chat' }],
114
+ }),
115
+ makeModule('override', {
116
+ routes: [{ slug: 'dashboard', path: '/', title: 'Dashboard', kind: 'app' }],
117
+ adminSections: [{ slug: 'agents', title: 'Agents', href: '/admin/agents' }],
118
+ apiNamespaces: [{ slug: 'chat', basePath: '/api/chat' }],
119
+ capabilities: [{ slug: 'chat', name: 'Chat' }],
120
+ }),
121
+ ]);
122
+ expect(result.routes).toHaveLength(1);
123
+ expect(result.routes[0]?.title).toBe('Dashboard');
124
+ expect(result.adminSections).toHaveLength(1);
125
+ expect(result.adminSections[0]?.title).toBe('Agents');
126
+ expect(result.apiNamespaces).toHaveLength(1);
127
+ expect(result.apiNamespaces[0]?.basePath).toBe('/api/chat');
128
+ expect(result.capabilities).toHaveLength(1);
129
+ expect(result.capabilities[0]?.name).toBe('Chat');
94
130
  });
95
131
  });
96
132
  //# sourceMappingURL=module-loader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-loader.test.js","sourceRoot":"","sources":["../../src/module/module-loader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-loader.test.js","sourceRoot":"","sources":["../../src/module/module-loader.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { TaskStore, TaskRecord, TaskStatus } from "@sprinterai/core";
1
+ import type { TaskStore, TaskRecord, TaskStatus } from '@sprinterai/core';
2
2
  /** In-memory TaskStore for testing. */
3
3
  export declare class InMemoryTaskStore implements TaskStore {
4
4
  private tasks;
@@ -10,8 +10,8 @@ export declare class InMemoryTaskStore implements TaskStore {
10
10
  entityId?: string;
11
11
  limit?: number;
12
12
  }): Promise<TaskRecord[]>;
13
- createTask(input: Omit<TaskRecord, "id" | "created_at" | "updated_at">): Promise<TaskRecord>;
14
- updateTask(id: string, input: Partial<Pick<TaskRecord, "title" | "description" | "status" | "assignee_type" | "assignee_id" | "metadata" | "due_at" | "completed_at">>): Promise<TaskRecord>;
13
+ createTask(input: Omit<TaskRecord, 'id' | 'created_at' | 'updated_at'>): Promise<TaskRecord>;
14
+ updateTask(id: string, input: Partial<Pick<TaskRecord, 'title' | 'description' | 'status' | 'assignee_type' | 'assignee_id' | 'metadata' | 'due_at' | 'completed_at' | 'output' | 'priority' | 'tags' | 'ui_intent'>>): Promise<TaskRecord>;
15
15
  /** Test helper: seed a task. */
16
16
  seedTask(task: TaskRecord): void;
17
17
  /** Test helper: clear all data. */
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-task-store.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-task-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,uCAAuC;AACvC,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAK;IAEb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI/C,SAAS,CAAC,OAAO,CAAC,EAAE;QACxB,MAAM,CAAC,EAAE,UAAU,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBnB,UAAU,CACd,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,GAC1D,OAAO,CAAC,UAAU,CAAC;IAahB,UAAU,CACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CACZ,IAAI,CACF,UAAU,EACR,OAAO,GACP,aAAa,GACb,QAAQ,GACR,eAAe,GACf,aAAa,GACb,UAAU,GACV,QAAQ,GACR,cAAc,CACjB,CACF,GACA,OAAO,CAAC,UAAU,CAAC;IAetB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIhC,mCAAmC;IACnC,KAAK,IAAI,IAAI;CAId"}
1
+ {"version":3,"file":"in-memory-task-store.d.ts","sourceRoot":"","sources":["../../src/testing/in-memory-task-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,uCAAuC;AACvC,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAK;IAEb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI/C,SAAS,CAAC,OAAO,CAAC,EAAE;QACxB,MAAM,CAAC,EAAE,UAAU,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBnB,UAAU,CACd,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,GAC1D,OAAO,CAAC,UAAU,CAAC;IAahB,UAAU,CACd,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CACZ,IAAI,CACF,UAAU,EACR,OAAO,GACP,aAAa,GACb,QAAQ,GACR,eAAe,GACf,aAAa,GACb,UAAU,GACV,QAAQ,GACR,cAAc,GACd,QAAQ,GACR,UAAU,GACV,MAAM,GACN,WAAW,CACd,CACF,GACA,OAAO,CAAC,UAAU,CAAC;IAetB,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAIhC,mCAAmC;IACnC,KAAK,IAAI,IAAI;CAId"}
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory-task-store.js","sourceRoot":"","sources":["../../src/testing/in-memory-task-store.ts"],"names":[],"mappings":"AAEA,uCAAuC;AACvC,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,MAAM,GAAG,CAAC,CAAC;IAEnB,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAKf;QACC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAA2D;QAE3D,MAAM,EAAE,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE;YACF,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CACd,EAAU,EACV,KAYC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,OAAO,GAAe;YAC1B,GAAG,QAAQ;YACX,GAAG,KAAK;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gCAAgC;IAChC,QAAQ,CAAC,IAAgB;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,mCAAmC;IACnC,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"in-memory-task-store.js","sourceRoot":"","sources":["../../src/testing/in-memory-task-store.ts"],"names":[],"mappings":"AAEA,uCAAuC;AACvC,MAAM,OAAO,iBAAiB;IACpB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IACtC,MAAM,GAAG,CAAC,CAAC;IAEnB,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAKf;QACC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAE9C,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAA2D;QAE3D,MAAM,EAAE,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAe;YACvB,GAAG,KAAK;YACR,EAAE;YACF,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;SAChB,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CACd,EAAU,EACV,KAgBC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,OAAO,GAAe;YAC1B,GAAG,QAAQ;YACX,GAAG,KAAK;YACR,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gCAAgC;IAChC,QAAQ,CAAC,IAAgB;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,mCAAmC;IACnC,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF"}
@@ -6,7 +6,7 @@ import type { EntityTypeRecord, WorkflowDefinition } from '@sprinterai/core';
6
6
  * Human-input fields become `wait_human` nodes.
7
7
  * Dependencies are derived from field extraction.dependsOn.
8
8
  *
9
- * Uses dep-sort from @sprinter/extraction to determine layer ordering.
9
+ * Uses dep-sort from @sprinterai/core/extraction to determine layer ordering.
10
10
  */
11
11
  export declare function compileEntityWorkflowDefinition(entityType: EntityTypeRecord): WorkflowDefinition;
12
12
  /**
@@ -12,7 +12,7 @@ function getFieldsConfig(entityType) {
12
12
  * Human-input fields become `wait_human` nodes.
13
13
  * Dependencies are derived from field extraction.dependsOn.
14
14
  *
15
- * Uses dep-sort from @sprinter/extraction to determine layer ordering.
15
+ * Uses dep-sort from @sprinterai/core/extraction to determine layer ordering.
16
16
  */
17
17
  export function compileEntityWorkflowDefinition(entityType) {
18
18
  const fields = getFieldsConfig(entityType);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sprinterai/runtime",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Agent, tool, workflow, and chat runtime engine for the Sprinter AI platform",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -59,17 +59,25 @@
59
59
  "files": [
60
60
  "dist"
61
61
  ],
62
+ "scripts": {
63
+ "build": "tsc",
64
+ "lint": "eslint src/",
65
+ "test": "vitest run",
66
+ "test:coverage": "vitest run --coverage",
67
+ "typecheck": "tsc --noEmit",
68
+ "clean": "rm -rf dist"
69
+ },
62
70
  "dependencies": {
71
+ "@sprinterai/core": "workspace:*",
63
72
  "ai": "^6.0.0",
64
- "zod": "^3.24.0",
65
- "@sprinterai/core": "0.2.0"
73
+ "zod": "^3.24.0"
66
74
  },
67
75
  "devDependencies": {
76
+ "@sprinterai/eslint-config": "workspace:*",
68
77
  "@vitest/coverage-v8": "^3.0.0",
69
78
  "eslint": "^9.0.0",
70
79
  "typescript": "^5.7.0",
71
- "vitest": "^3.0.0",
72
- "@sprinterai/eslint-config": "0.1.0"
80
+ "vitest": "^3.0.0"
73
81
  },
74
82
  "publishConfig": {
75
83
  "access": "restricted"
@@ -87,13 +95,5 @@
87
95
  ],
88
96
  "engines": {
89
97
  "node": ">=20"
90
- },
91
- "scripts": {
92
- "build": "tsc",
93
- "lint": "eslint src/",
94
- "test": "vitest run",
95
- "test:coverage": "vitest run --coverage",
96
- "typecheck": "tsc --noEmit",
97
- "clean": "rm -rf dist"
98
98
  }
99
- }
99
+ }
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Sprinter AI
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.