@centerseedwu/naru-agent 0.2.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.
Files changed (247) hide show
  1. package/README.md +392 -0
  2. package/dist/agent.d.ts +39 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +578 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/compression/base.d.ts +12 -0
  7. package/dist/compression/base.d.ts.map +1 -0
  8. package/dist/compression/base.js +2 -0
  9. package/dist/compression/base.js.map +1 -0
  10. package/dist/compression/compressor.d.ts +20 -0
  11. package/dist/compression/compressor.d.ts.map +1 -0
  12. package/dist/compression/compressor.js +52 -0
  13. package/dist/compression/compressor.js.map +1 -0
  14. package/dist/compression/in-memory-store.d.ts +8 -0
  15. package/dist/compression/in-memory-store.d.ts.map +1 -0
  16. package/dist/compression/in-memory-store.js +13 -0
  17. package/dist/compression/in-memory-store.js.map +1 -0
  18. package/dist/decision/index.d.ts +7 -0
  19. package/dist/decision/index.d.ts.map +1 -0
  20. package/dist/decision/index.js +4 -0
  21. package/dist/decision/index.js.map +1 -0
  22. package/dist/decision/llm-structured-classifier.d.ts +18 -0
  23. package/dist/decision/llm-structured-classifier.d.ts.map +1 -0
  24. package/dist/decision/llm-structured-classifier.js +44 -0
  25. package/dist/decision/llm-structured-classifier.js.map +1 -0
  26. package/dist/decision/tool-planner.d.ts +14 -0
  27. package/dist/decision/tool-planner.d.ts.map +1 -0
  28. package/dist/decision/tool-planner.js +35 -0
  29. package/dist/decision/tool-planner.js.map +1 -0
  30. package/dist/decision/types.d.ts +53 -0
  31. package/dist/decision/types.d.ts.map +1 -0
  32. package/dist/decision/types.js +12 -0
  33. package/dist/decision/types.js.map +1 -0
  34. package/dist/event-bus.d.ts +10 -0
  35. package/dist/event-bus.d.ts.map +1 -0
  36. package/dist/event-bus.js +34 -0
  37. package/dist/event-bus.js.map +1 -0
  38. package/dist/guardrails/base.d.ts +10 -0
  39. package/dist/guardrails/base.d.ts.map +1 -0
  40. package/dist/guardrails/base.js +2 -0
  41. package/dist/guardrails/base.js.map +1 -0
  42. package/dist/guardrails/keyword.d.ts +15 -0
  43. package/dist/guardrails/keyword.d.ts.map +1 -0
  44. package/dist/guardrails/keyword.js +37 -0
  45. package/dist/guardrails/keyword.js.map +1 -0
  46. package/dist/index.d.ts +51 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +39 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/intent/base.d.ts +19 -0
  51. package/dist/intent/base.d.ts.map +1 -0
  52. package/dist/intent/base.js +2 -0
  53. package/dist/intent/base.js.map +1 -0
  54. package/dist/intent/llm-classifier.d.ts +22 -0
  55. package/dist/intent/llm-classifier.d.ts.map +1 -0
  56. package/dist/intent/llm-classifier.js +49 -0
  57. package/dist/intent/llm-classifier.js.map +1 -0
  58. package/dist/intent/tool-calling-classifier.d.ts +16 -0
  59. package/dist/intent/tool-calling-classifier.d.ts.map +1 -0
  60. package/dist/intent/tool-calling-classifier.js +56 -0
  61. package/dist/intent/tool-calling-classifier.js.map +1 -0
  62. package/dist/knowledge/base.d.ts +14 -0
  63. package/dist/knowledge/base.d.ts.map +1 -0
  64. package/dist/knowledge/base.js +10 -0
  65. package/dist/knowledge/base.js.map +1 -0
  66. package/dist/knowledge/chroma-store.d.ts +25 -0
  67. package/dist/knowledge/chroma-store.d.ts.map +1 -0
  68. package/dist/knowledge/chroma-store.js +70 -0
  69. package/dist/knowledge/chroma-store.js.map +1 -0
  70. package/dist/knowledge/contextualizer.d.ts +17 -0
  71. package/dist/knowledge/contextualizer.d.ts.map +1 -0
  72. package/dist/knowledge/contextualizer.js +47 -0
  73. package/dist/knowledge/contextualizer.js.map +1 -0
  74. package/dist/knowledge/graph-store.d.ts +22 -0
  75. package/dist/knowledge/graph-store.d.ts.map +1 -0
  76. package/dist/knowledge/graph-store.js +116 -0
  77. package/dist/knowledge/graph-store.js.map +1 -0
  78. package/dist/knowledge/hybrid-store.d.ts +16 -0
  79. package/dist/knowledge/hybrid-store.d.ts.map +1 -0
  80. package/dist/knowledge/hybrid-store.js +39 -0
  81. package/dist/knowledge/hybrid-store.js.map +1 -0
  82. package/dist/knowledge/in-memory-store.d.ts +27 -0
  83. package/dist/knowledge/in-memory-store.d.ts.map +1 -0
  84. package/dist/knowledge/in-memory-store.js +54 -0
  85. package/dist/knowledge/in-memory-store.js.map +1 -0
  86. package/dist/knowledge/pgvector-store.d.ts +27 -0
  87. package/dist/knowledge/pgvector-store.d.ts.map +1 -0
  88. package/dist/knowledge/pgvector-store.js +68 -0
  89. package/dist/knowledge/pgvector-store.js.map +1 -0
  90. package/dist/memory/base.d.ts +21 -0
  91. package/dist/memory/base.d.ts.map +1 -0
  92. package/dist/memory/base.js +9 -0
  93. package/dist/memory/base.js.map +1 -0
  94. package/dist/memory/in-memory-store.d.ts +10 -0
  95. package/dist/memory/in-memory-store.d.ts.map +1 -0
  96. package/dist/memory/in-memory-store.js +35 -0
  97. package/dist/memory/in-memory-store.js.map +1 -0
  98. package/dist/memory/manager.d.ts +29 -0
  99. package/dist/memory/manager.d.ts.map +1 -0
  100. package/dist/memory/manager.js +121 -0
  101. package/dist/memory/manager.js.map +1 -0
  102. package/dist/memory/mem0-manager.d.ts +32 -0
  103. package/dist/memory/mem0-manager.d.ts.map +1 -0
  104. package/dist/memory/mem0-manager.js +77 -0
  105. package/dist/memory/mem0-manager.js.map +1 -0
  106. package/dist/memory/pgvector-store.d.ts +22 -0
  107. package/dist/memory/pgvector-store.d.ts.map +1 -0
  108. package/dist/memory/pgvector-store.js +89 -0
  109. package/dist/memory/pgvector-store.js.map +1 -0
  110. package/dist/orchestration/channel.d.ts +18 -0
  111. package/dist/orchestration/channel.d.ts.map +1 -0
  112. package/dist/orchestration/channel.js +2 -0
  113. package/dist/orchestration/channel.js.map +1 -0
  114. package/dist/orchestration/executor.d.ts +19 -0
  115. package/dist/orchestration/executor.d.ts.map +1 -0
  116. package/dist/orchestration/executor.js +2 -0
  117. package/dist/orchestration/executor.js.map +1 -0
  118. package/dist/orchestration/index.d.ts +13 -0
  119. package/dist/orchestration/index.d.ts.map +1 -0
  120. package/dist/orchestration/index.js +9 -0
  121. package/dist/orchestration/index.js.map +1 -0
  122. package/dist/orchestration/intent.d.ts +49 -0
  123. package/dist/orchestration/intent.d.ts.map +1 -0
  124. package/dist/orchestration/intent.js +57 -0
  125. package/dist/orchestration/intent.js.map +1 -0
  126. package/dist/orchestration/orchestrator.d.ts +59 -0
  127. package/dist/orchestration/orchestrator.d.ts.map +1 -0
  128. package/dist/orchestration/orchestrator.js +216 -0
  129. package/dist/orchestration/orchestrator.js.map +1 -0
  130. package/dist/orchestration/pending.d.ts +28 -0
  131. package/dist/orchestration/pending.d.ts.map +1 -0
  132. package/dist/orchestration/pending.js +32 -0
  133. package/dist/orchestration/pending.js.map +1 -0
  134. package/dist/orchestration/result.d.ts +24 -0
  135. package/dist/orchestration/result.d.ts.map +1 -0
  136. package/dist/orchestration/result.js +2 -0
  137. package/dist/orchestration/result.js.map +1 -0
  138. package/dist/orchestration/session-state.d.ts +24 -0
  139. package/dist/orchestration/session-state.d.ts.map +1 -0
  140. package/dist/orchestration/session-state.js +19 -0
  141. package/dist/orchestration/session-state.js.map +1 -0
  142. package/dist/orchestration/trace.d.ts +20 -0
  143. package/dist/orchestration/trace.d.ts.map +1 -0
  144. package/dist/orchestration/trace.js +2 -0
  145. package/dist/orchestration/trace.js.map +1 -0
  146. package/dist/session/base.d.ts +7 -0
  147. package/dist/session/base.d.ts.map +1 -0
  148. package/dist/session/base.js +2 -0
  149. package/dist/session/base.js.map +1 -0
  150. package/dist/session/in-memory-store.d.ts +9 -0
  151. package/dist/session/in-memory-store.d.ts.map +1 -0
  152. package/dist/session/in-memory-store.js +13 -0
  153. package/dist/session/in-memory-store.js.map +1 -0
  154. package/dist/session/redis-store.d.ts +16 -0
  155. package/dist/session/redis-store.d.ts.map +1 -0
  156. package/dist/session/redis-store.js +29 -0
  157. package/dist/session/redis-store.js.map +1 -0
  158. package/dist/skills/base.d.ts +38 -0
  159. package/dist/skills/base.d.ts.map +1 -0
  160. package/dist/skills/base.js +24 -0
  161. package/dist/skills/base.js.map +1 -0
  162. package/dist/skills/registry.d.ts +11 -0
  163. package/dist/skills/registry.d.ts.map +1 -0
  164. package/dist/skills/registry.js +37 -0
  165. package/dist/skills/registry.js.map +1 -0
  166. package/dist/skills/selectors.d.ts +23 -0
  167. package/dist/skills/selectors.d.ts.map +1 -0
  168. package/dist/skills/selectors.js +52 -0
  169. package/dist/skills/selectors.js.map +1 -0
  170. package/dist/tools/base.d.ts +34 -0
  171. package/dist/tools/base.d.ts.map +1 -0
  172. package/dist/tools/base.js +22 -0
  173. package/dist/tools/base.js.map +1 -0
  174. package/dist/tools/vercel-adapter.d.ts +17 -0
  175. package/dist/tools/vercel-adapter.d.ts.map +1 -0
  176. package/dist/tools/vercel-adapter.js +66 -0
  177. package/dist/tools/vercel-adapter.js.map +1 -0
  178. package/dist/tracing/collector.d.ts +16 -0
  179. package/dist/tracing/collector.d.ts.map +1 -0
  180. package/dist/tracing/collector.js +92 -0
  181. package/dist/tracing/collector.js.map +1 -0
  182. package/dist/tracing/exporters/jsonl.d.ts +13 -0
  183. package/dist/tracing/exporters/jsonl.d.ts.map +1 -0
  184. package/dist/tracing/exporters/jsonl.js +14 -0
  185. package/dist/tracing/exporters/jsonl.js.map +1 -0
  186. package/dist/tracing/trace.d.ts +34 -0
  187. package/dist/tracing/trace.d.ts.map +1 -0
  188. package/dist/tracing/trace.js +28 -0
  189. package/dist/tracing/trace.js.map +1 -0
  190. package/dist/types.d.ts +77 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +7 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/math.d.ts +3 -0
  195. package/dist/utils/math.d.ts.map +1 -0
  196. package/dist/utils/math.js +14 -0
  197. package/dist/utils/math.js.map +1 -0
  198. package/dist-cjs/agent.js +581 -0
  199. package/dist-cjs/compression/base.js +2 -0
  200. package/dist-cjs/compression/compressor.js +55 -0
  201. package/dist-cjs/compression/in-memory-store.js +16 -0
  202. package/dist-cjs/decision/index.js +9 -0
  203. package/dist-cjs/decision/llm-structured-classifier.js +47 -0
  204. package/dist-cjs/decision/tool-planner.js +38 -0
  205. package/dist-cjs/decision/types.js +15 -0
  206. package/dist-cjs/event-bus.js +37 -0
  207. package/dist-cjs/guardrails/base.js +2 -0
  208. package/dist-cjs/guardrails/keyword.js +40 -0
  209. package/dist-cjs/index.js +84 -0
  210. package/dist-cjs/intent/base.js +2 -0
  211. package/dist-cjs/intent/llm-classifier.js +52 -0
  212. package/dist-cjs/intent/tool-calling-classifier.js +59 -0
  213. package/dist-cjs/knowledge/base.js +12 -0
  214. package/dist-cjs/knowledge/chroma-store.js +106 -0
  215. package/dist-cjs/knowledge/contextualizer.js +50 -0
  216. package/dist-cjs/knowledge/graph-store.js +152 -0
  217. package/dist-cjs/knowledge/hybrid-store.js +42 -0
  218. package/dist-cjs/knowledge/in-memory-store.js +57 -0
  219. package/dist-cjs/knowledge/pgvector-store.js +71 -0
  220. package/dist-cjs/memory/base.js +11 -0
  221. package/dist-cjs/memory/in-memory-store.js +38 -0
  222. package/dist-cjs/memory/manager.js +124 -0
  223. package/dist-cjs/memory/mem0-manager.js +113 -0
  224. package/dist-cjs/memory/pgvector-store.js +92 -0
  225. package/dist-cjs/orchestration/channel.js +2 -0
  226. package/dist-cjs/orchestration/executor.js +2 -0
  227. package/dist-cjs/orchestration/index.js +17 -0
  228. package/dist-cjs/orchestration/intent.js +61 -0
  229. package/dist-cjs/orchestration/orchestrator.js +219 -0
  230. package/dist-cjs/orchestration/pending.js +36 -0
  231. package/dist-cjs/orchestration/result.js +2 -0
  232. package/dist-cjs/orchestration/session-state.js +22 -0
  233. package/dist-cjs/orchestration/trace.js +2 -0
  234. package/dist-cjs/session/base.js +2 -0
  235. package/dist-cjs/session/in-memory-store.js +16 -0
  236. package/dist-cjs/session/redis-store.js +32 -0
  237. package/dist-cjs/skills/base.js +27 -0
  238. package/dist-cjs/skills/registry.js +40 -0
  239. package/dist-cjs/skills/selectors.js +56 -0
  240. package/dist-cjs/tools/base.js +24 -0
  241. package/dist-cjs/tools/vercel-adapter.js +69 -0
  242. package/dist-cjs/tracing/collector.js +95 -0
  243. package/dist-cjs/tracing/exporters/jsonl.js +17 -0
  244. package/dist-cjs/tracing/trace.js +31 -0
  245. package/dist-cjs/types.js +9 -0
  246. package/dist-cjs/utils/math.js +17 -0
  247. package/package.json +70 -0
@@ -0,0 +1,89 @@
1
+ import { toVectorLiteral } from "../utils/math.js";
2
+ /**
3
+ * PostgreSQL + pgvector backed memory store. Requires `pg` as optional dependency.
4
+ */
5
+ export class PgVectorMemoryStore {
6
+ pool;
7
+ tableName;
8
+ dimensions;
9
+ initialized = false;
10
+ constructor(config) {
11
+ this.pool = config.pool;
12
+ this.tableName = config.tableName ?? "naru_memories";
13
+ this.dimensions = config.dimensions ?? 1536;
14
+ }
15
+ async ensureTable() {
16
+ if (this.initialized)
17
+ return;
18
+ await this.pool.query(`
19
+ CREATE TABLE IF NOT EXISTS ${this.tableName} (
20
+ id TEXT PRIMARY KEY,
21
+ user_id TEXT NOT NULL,
22
+ content TEXT NOT NULL,
23
+ metadata JSONB DEFAULT '{}',
24
+ embedding vector(${this.dimensions}),
25
+ created_at TIMESTAMPTZ DEFAULT NOW(),
26
+ updated_at TIMESTAMPTZ DEFAULT NOW()
27
+ )
28
+ `);
29
+ await this.pool.query(`
30
+ CREATE INDEX IF NOT EXISTS idx_${this.tableName}_user_id
31
+ ON ${this.tableName}(user_id)
32
+ `);
33
+ this.initialized = true;
34
+ }
35
+ async add(item, embedding) {
36
+ await this.ensureTable();
37
+ await this.pool.query(`INSERT INTO ${this.tableName} (id, user_id, content, metadata, embedding, created_at, updated_at)
38
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
39
+ ON CONFLICT (id) DO UPDATE SET content = $3, metadata = $4, embedding = $5, updated_at = $7`, [
40
+ item.id,
41
+ item.userId,
42
+ item.content,
43
+ JSON.stringify(item.metadata),
44
+ toVectorLiteral(embedding),
45
+ item.createdAt,
46
+ item.updatedAt,
47
+ ]);
48
+ }
49
+ async search(userId, embedding, topK = 5) {
50
+ await this.ensureTable();
51
+ const result = await this.pool.query(`SELECT id, user_id, content, metadata, created_at, updated_at,
52
+ 1 - (embedding <=> $1::vector) AS score
53
+ FROM ${this.tableName}
54
+ WHERE user_id = $2
55
+ ORDER BY embedding <=> $1::vector
56
+ LIMIT $3`, [toVectorLiteral(embedding), userId, topK]);
57
+ return result.rows.map((r) => ({
58
+ id: r.id,
59
+ userId: r.user_id,
60
+ content: r.content,
61
+ metadata: (r.metadata ?? {}),
62
+ score: r.score,
63
+ createdAt: new Date(r.created_at),
64
+ updatedAt: new Date(r.updated_at),
65
+ }));
66
+ }
67
+ async update(itemId, content, embedding) {
68
+ await this.ensureTable();
69
+ await this.pool.query(`UPDATE ${this.tableName} SET content = $1, embedding = $2, updated_at = NOW() WHERE id = $3`, [content, toVectorLiteral(embedding), itemId]);
70
+ }
71
+ async delete(itemId) {
72
+ await this.ensureTable();
73
+ await this.pool.query(`DELETE FROM ${this.tableName} WHERE id = $1`, [itemId]);
74
+ }
75
+ async getAll(userId) {
76
+ await this.ensureTable();
77
+ const result = await this.pool.query(`SELECT id, user_id, content, metadata, created_at, updated_at
78
+ FROM ${this.tableName} WHERE user_id = $1 ORDER BY created_at`, [userId]);
79
+ return result.rows.map((r) => ({
80
+ id: r.id,
81
+ userId: r.user_id,
82
+ content: r.content,
83
+ metadata: (r.metadata ?? {}),
84
+ createdAt: new Date(r.created_at),
85
+ updatedAt: new Date(r.updated_at),
86
+ }));
87
+ }
88
+ }
89
+ //# sourceMappingURL=pgvector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pgvector-store.js","sourceRoot":"","sources":["../../src/memory/pgvector-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ChatOptions } from "../types.js";
2
+ import type { OrchestrationResult } from "./result.js";
3
+ /**
4
+ * ChannelMessage — normalized input from any channel.
5
+ */
6
+ export interface ChannelMessage {
7
+ text: string;
8
+ options?: ChatOptions;
9
+ raw?: unknown;
10
+ }
11
+ /**
12
+ * ChannelAdapter<TIn, TOut> — abstracts channel-specific I/O transformation.
13
+ */
14
+ export interface ChannelAdapter<TIn = unknown, TOut = unknown> {
15
+ parseIncoming(input: TIn): ChannelMessage;
16
+ formatOutgoing(result: OrchestrationResult): TOut;
17
+ }
18
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/orchestration/channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO;IAC3D,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,cAAc,CAAC;IAC1C,cAAc,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACnD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/orchestration/channel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import type { OrchestratorIntent } from "./intent.js";
2
+ import type { OrchestrationResult } from "./result.js";
3
+ /**
4
+ * BaseDirectExecutor — handles intents without calling the delegate LLM agent.
5
+ * Return null to fallthrough to the next executor or delegate.
6
+ */
7
+ export interface BaseDirectExecutor<T extends string = string> {
8
+ /** Human-readable name for this executor (used in trace) */
9
+ readonly name: string;
10
+ /** Return true if this executor can handle the given intent */
11
+ canHandle(intent: OrchestratorIntent<T>): boolean;
12
+ /** Execute and return a result, or null to fallthrough */
13
+ execute(input: {
14
+ message: string;
15
+ intent: OrchestratorIntent<T>;
16
+ options?: Record<string, unknown>;
17
+ }): Promise<OrchestrationResult | null>;
18
+ }
19
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/orchestration/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAClD,0DAA0D;IAC1D,OAAO,CAAC,KAAK,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;CACzC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/orchestration/executor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export { AgentOrchestrator } from "./orchestrator.js";
2
+ export type { AgentChatDelegate, AgentOrchestratorConfig, LifecycleHooks } from "./orchestrator.js";
3
+ export { DeterministicIntentResolver, LLMFallbackIntentResolver, } from "./intent.js";
4
+ export type { GenericIntentObject, OrchestratorIntent, BaseIntentResolver, DeterministicPattern, IntentResolveInput, } from "./intent.js";
5
+ export type { BaseDirectExecutor } from "./executor.js";
6
+ export type { ChannelAdapter, ChannelMessage } from "./channel.js";
7
+ export { InMemoryPendingStateManager, classifyConfirmationDisposition, } from "./pending.js";
8
+ export type { PendingState, ConfirmationDisposition, BasePendingStateManager, } from "./pending.js";
9
+ export { InMemorySessionStateStore, } from "./session-state.js";
10
+ export type { AgentSessionState, BaseSessionStateStore, } from "./session-state.js";
11
+ export type { AgentDecisionTrace, OrchestrationPhase, OrchestrationTimings, } from "./trace.js";
12
+ export type { OrchestrationResult, PendingConfirmation } from "./result.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestration/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGpG,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnE,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Orchestrator
2
+ export { AgentOrchestrator } from "./orchestrator.js";
3
+ // Intent
4
+ export { DeterministicIntentResolver, LLMFallbackIntentResolver, } from "./intent.js";
5
+ // Pending state
6
+ export { InMemoryPendingStateManager, classifyConfirmationDisposition, } from "./pending.js";
7
+ // Session state
8
+ export { InMemorySessionStateStore, } from "./session-state.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestration/index.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,SAAS;AACT,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAerB,gBAAgB;AAChB,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAOtB,gBAAgB;AAChB,OAAO,EACL,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Generic intent types and resolvers for the orchestration layer.
3
+ */
4
+ export type GenericIntentObject = "greeting" | "query" | "action" | "confirmation" | "unknown";
5
+ export interface OrchestratorIntent<T extends string = GenericIntentObject> {
6
+ object: T;
7
+ confidence: number;
8
+ requiresConfirmation?: boolean;
9
+ }
10
+ export interface IntentResolveInput {
11
+ message: string;
12
+ history?: unknown[];
13
+ sessionState?: unknown;
14
+ }
15
+ export interface BaseIntentResolver<T extends string = GenericIntentObject> {
16
+ resolve(input: IntentResolveInput): Promise<OrchestratorIntent<T>>;
17
+ }
18
+ export interface DeterministicPattern<T extends string = GenericIntentObject> {
19
+ pattern: RegExp;
20
+ intent: OrchestratorIntent<T>;
21
+ }
22
+ /**
23
+ * DeterministicIntentResolver — fast pattern matching, no LLM calls.
24
+ * Returns first matching pattern or unknown with confidence 0.
25
+ */
26
+ export declare class DeterministicIntentResolver<T extends string = GenericIntentObject> implements BaseIntentResolver<T> {
27
+ private patterns;
28
+ constructor(patterns: DeterministicPattern<T>[]);
29
+ resolve(input: IntentResolveInput): Promise<OrchestratorIntent<T>>;
30
+ }
31
+ /**
32
+ * LLMFallbackIntentResolver — tries deterministic first, falls back to LLM classifier.
33
+ */
34
+ export declare class LLMFallbackIntentResolver<T extends string = GenericIntentObject> implements BaseIntentResolver<T> {
35
+ private primary;
36
+ private fallbackAgent;
37
+ private parseResponse?;
38
+ constructor(config: {
39
+ primary: BaseIntentResolver<T>;
40
+ fallbackAgent: {
41
+ chat(message: string): Promise<{
42
+ content: string;
43
+ }>;
44
+ };
45
+ parseResponse?: (content: string) => OrchestratorIntent<T>;
46
+ });
47
+ resolve(input: IntentResolveInput): Promise<OrchestratorIntent<T>>;
48
+ }
49
+ //# sourceMappingURL=intent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/orchestration/intent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,mBAAmB,GAC3B,UAAU,GACV,OAAO,GACP,QAAQ,GACR,cAAc,GACd,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,mBAAmB;IACxE,MAAM,EAAE,CAAC,CAAC;IACV,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,mBAAmB;IACxE,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,mBAAmB;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,mBAAmB,CAC7E,YAAW,kBAAkB,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,QAAQ,CAA4B;gBAEhC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE;IAIzC,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAQzE;AAED;;GAEG;AACH,qBAAa,yBAAyB,CAAC,CAAC,SAAS,MAAM,GAAG,mBAAmB,CAC3E,YAAW,kBAAkB,CAAC,CAAC,CAAC;IAChC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,aAAa,CAA0D;IAC/E,OAAO,CAAC,aAAa,CAAC,CAA6C;gBAEvD,MAAM,EAAE;QAClB,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAC/B,aAAa,EAAE;YAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;gBAAE,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QACvE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC;KAC5D;IAMK,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;CA2BzE"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Generic intent types and resolvers for the orchestration layer.
3
+ */
4
+ /**
5
+ * DeterministicIntentResolver — fast pattern matching, no LLM calls.
6
+ * Returns first matching pattern or unknown with confidence 0.
7
+ */
8
+ export class DeterministicIntentResolver {
9
+ patterns;
10
+ constructor(patterns) {
11
+ this.patterns = patterns;
12
+ }
13
+ async resolve(input) {
14
+ for (const entry of this.patterns) {
15
+ if (entry.pattern.test(input.message)) {
16
+ return entry.intent;
17
+ }
18
+ }
19
+ return { object: "unknown", confidence: 0 };
20
+ }
21
+ }
22
+ /**
23
+ * LLMFallbackIntentResolver — tries deterministic first, falls back to LLM classifier.
24
+ */
25
+ export class LLMFallbackIntentResolver {
26
+ primary;
27
+ fallbackAgent;
28
+ parseResponse;
29
+ constructor(config) {
30
+ this.primary = config.primary;
31
+ this.fallbackAgent = config.fallbackAgent;
32
+ this.parseResponse = config.parseResponse;
33
+ }
34
+ async resolve(input) {
35
+ const primaryResult = await this.primary.resolve(input);
36
+ if (primaryResult.object !== "unknown") {
37
+ return primaryResult;
38
+ }
39
+ // Fallback to LLM
40
+ const llmResponse = await this.fallbackAgent.chat(`Classify the intent of this message: "${input.message}". Return a JSON object with "object" (string) and "confidence" (number 0-1).`);
41
+ if (this.parseResponse) {
42
+ return this.parseResponse(llmResponse.content);
43
+ }
44
+ // Default parsing
45
+ try {
46
+ const parsed = JSON.parse(llmResponse.content);
47
+ return {
48
+ object: (parsed.object ?? "unknown"),
49
+ confidence: parsed.confidence ?? 0.5,
50
+ };
51
+ }
52
+ catch {
53
+ return { object: "unknown", confidence: 0 };
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=intent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/orchestration/intent.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8BH;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IAE9B,QAAQ,CAA4B;IAE5C,YAAY,QAAmC;QAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAyB;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAc,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IACnD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,yBAAyB;IAE5B,OAAO,CAAwB;IAC/B,aAAa,CAA0D;IACvE,aAAa,CAA8C;IAEnE,YAAY,MAIX;QACC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAyB;QACrC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAExD,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,kBAAkB;QAClB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAC/C,yCAAyC,KAAK,CAAC,OAAO,+EAA+E,CACtI,CAAC;QAEF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC/C,OAAO;gBACL,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,CAAM;gBACzC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG;aACrC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,SAAc,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,59 @@
1
+ import type { NaruResult, ChatOptions } from "../types.js";
2
+ import type { OrchestrationResult } from "./result.js";
3
+ import type { BaseIntentResolver } from "./intent.js";
4
+ import type { BaseDirectExecutor } from "./executor.js";
5
+ import type { BasePendingStateManager } from "./pending.js";
6
+ import type { BaseSessionStateStore } from "./session-state.js";
7
+ import type { ChannelAdapter } from "./channel.js";
8
+ /**
9
+ * AgentChatDelegate — any object with a chat() method.
10
+ * NaruAgent satisfies this structurally (duck typing).
11
+ */
12
+ export interface AgentChatDelegate {
13
+ chat(message: string, options?: ChatOptions): Promise<NaruResult>;
14
+ }
15
+ export interface LifecycleHooks {
16
+ beforeMessage?: (message: string, options?: ChatOptions) => Promise<void> | void;
17
+ afterMessage?: (result: OrchestrationResult) => Promise<void> | void;
18
+ onError?: (error: unknown) => Promise<void> | void;
19
+ }
20
+ export interface AgentOrchestratorConfig<T extends string = string> {
21
+ /** Default delegate (fallback) */
22
+ delegate: AgentChatDelegate;
23
+ /** Named delegates — keys are intent.object values */
24
+ delegates?: Map<T, AgentChatDelegate>;
25
+ /** Intent resolver (optional) */
26
+ intentResolver?: BaseIntentResolver<T>;
27
+ /** Direct executors (optional, tried in order) */
28
+ directExecutors?: BaseDirectExecutor<T>[];
29
+ /** Pending state manager for confirmation flows */
30
+ pendingStateManager?: BasePendingStateManager;
31
+ /** Session state store for entity tracking */
32
+ sessionStateStore?: BaseSessionStateStore;
33
+ /** Channel adapter for channel-specific I/O */
34
+ channelAdapter?: ChannelAdapter;
35
+ /** Lifecycle hooks */
36
+ lifecycleHooks?: LifecycleHooks;
37
+ /** Custom confirmation classifier */
38
+ confirmationClassifier?: (message: string) => "confirm" | "reject" | "override";
39
+ }
40
+ /**
41
+ * AgentOrchestrator — wraps one or more AgentChatDelegate instances with:
42
+ * Phase 0: Pending confirmation handling
43
+ * Phase 1: Intent resolution
44
+ * Phase 2: Direct execution (bypass LLM)
45
+ * Phase 3: Delegate routing
46
+ *
47
+ * AgentOrchestrator itself satisfies AgentChatDelegate, enabling nesting.
48
+ */
49
+ export declare class AgentOrchestrator<T extends string = string> implements AgentChatDelegate {
50
+ private config;
51
+ constructor(config: AgentOrchestratorConfig<T>);
52
+ private fireHook;
53
+ chat(message: string, options?: ChatOptions): Promise<OrchestrationResult>;
54
+ /**
55
+ * Process a channel-specific raw input through the channel adapter.
56
+ */
57
+ processChannel<TIn, TOut>(rawInput: TIn): Promise<TOut>;
58
+ }
59
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestration/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAsB,MAAM,aAAa,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,cAAc,CAAC;AAGnE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAChE,kCAAkC;IAClC,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,sDAAsD;IACtD,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtC,iCAAiC;IACjC,cAAc,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACvC,kDAAkD;IAClD,eAAe,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;IAC1C,+CAA+C;IAC/C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,sBAAsB;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qCAAqC;IACrC,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CACjF;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CACtD,YAAW,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAA6B;gBAE/B,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAIhC,QAAQ;IAUhB,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,mBAAmB,CAAC;IA4O/B;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAe9D"}
@@ -0,0 +1,216 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ import { classifyConfirmationDisposition } from "./pending.js";
3
+ /**
4
+ * AgentOrchestrator — wraps one or more AgentChatDelegate instances with:
5
+ * Phase 0: Pending confirmation handling
6
+ * Phase 1: Intent resolution
7
+ * Phase 2: Direct execution (bypass LLM)
8
+ * Phase 3: Delegate routing
9
+ *
10
+ * AgentOrchestrator itself satisfies AgentChatDelegate, enabling nesting.
11
+ */
12
+ export class AgentOrchestrator {
13
+ config;
14
+ constructor(config) {
15
+ this.config = config;
16
+ }
17
+ async fireHook(fn) {
18
+ if (fn) {
19
+ try {
20
+ await fn();
21
+ }
22
+ catch {
23
+ // hooks do not affect main flow
24
+ }
25
+ }
26
+ }
27
+ async chat(message, options) {
28
+ const startTime = Date.now();
29
+ const traceId = uuidv4();
30
+ const sessionId = options?.sessionId ?? null;
31
+ const timings = { total: 0 };
32
+ let phaseReached = "delegate";
33
+ let orchestrationIntent = null;
34
+ let directExecutorUsed = null;
35
+ let delegateUsed = null;
36
+ // Fire beforeMessage hook
37
+ await this.fireHook(this.config.lifecycleHooks?.beforeMessage
38
+ ? () => this.config.lifecycleHooks.beforeMessage(message, options)
39
+ : undefined);
40
+ const buildDecisionTrace = (overrides) => ({
41
+ traceId,
42
+ phaseReached: overrides.phaseReached,
43
+ intentResolved: overrides.orchestrationIntent,
44
+ timings: overrides.timings,
45
+ directExecutorUsed: overrides.directExecutorUsed,
46
+ delegateUsed: overrides.delegateUsed,
47
+ });
48
+ const buildFinalResult = (baseResult, overrides) => {
49
+ const decisionTrace = buildDecisionTrace(overrides);
50
+ return {
51
+ ...baseResult,
52
+ content: overrides.content ?? baseResult.content,
53
+ orchestrationIntent: overrides.orchestrationIntent,
54
+ decisionTrace,
55
+ pendingConfirmation: overrides.pendingConfirmation ?? null,
56
+ sessionId: overrides.sessionId !== undefined ? overrides.sessionId : (sessionId ?? baseResult.sessionId),
57
+ };
58
+ };
59
+ // Cache session state to avoid triple fetch within the same chat() call
60
+ let cachedSessionState;
61
+ try {
62
+ // === Phase 0: Pending Confirmation ===
63
+ if (this.config.pendingStateManager && sessionId) {
64
+ const pending = await this.config.pendingStateManager.getPending(sessionId);
65
+ if (pending) {
66
+ const classifier = this.config.confirmationClassifier ?? classifyConfirmationDisposition;
67
+ const disposition = classifier(message);
68
+ if (disposition === "confirm" || disposition === "reject") {
69
+ // Handle confirmation/rejection
70
+ await this.config.pendingStateManager.clearPending(sessionId);
71
+ phaseReached = "pending_confirmation";
72
+ timings.total = Date.now() - startTime;
73
+ const confirmContent = disposition === "confirm"
74
+ ? `Confirmed: ${pending.type}`
75
+ : `Rejected: ${pending.type}`;
76
+ const baseResult = {
77
+ content: confirmContent,
78
+ blocked: false,
79
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
80
+ intent: null,
81
+ toolCalls: [],
82
+ timings: { total: timings.total },
83
+ sessionId,
84
+ traceId,
85
+ trace: null,
86
+ };
87
+ const result = buildFinalResult(baseResult, {
88
+ phaseReached,
89
+ orchestrationIntent: null,
90
+ timings,
91
+ directExecutorUsed: null,
92
+ delegateUsed: null,
93
+ pendingConfirmation: null,
94
+ });
95
+ await this.fireHook(this.config.lifecycleHooks?.afterMessage
96
+ ? () => this.config.lifecycleHooks.afterMessage(result)
97
+ : undefined);
98
+ return result;
99
+ }
100
+ // override — clear pending, continue normal flow
101
+ await this.config.pendingStateManager.clearPending(sessionId);
102
+ }
103
+ }
104
+ // === Phase 1: Intent Resolution ===
105
+ if (this.config.intentResolver) {
106
+ const intentStart = Date.now();
107
+ if (this.config.sessionStateStore && sessionId && cachedSessionState === undefined) {
108
+ cachedSessionState = await this.config.sessionStateStore.get(sessionId);
109
+ }
110
+ orchestrationIntent = await this.config.intentResolver.resolve({
111
+ message,
112
+ sessionState: cachedSessionState ?? undefined,
113
+ });
114
+ timings.intentResolution = Date.now() - intentStart;
115
+ }
116
+ // === Phase 2: Direct Execution ===
117
+ if (this.config.directExecutors && orchestrationIntent) {
118
+ const execStart = Date.now();
119
+ for (const executor of this.config.directExecutors) {
120
+ if (executor.canHandle(orchestrationIntent)) {
121
+ const execResult = await executor.execute({
122
+ message,
123
+ intent: orchestrationIntent,
124
+ options: options,
125
+ });
126
+ if (execResult !== null) {
127
+ phaseReached = "direct_execution";
128
+ directExecutorUsed = executor.name;
129
+ timings.directExecution = Date.now() - execStart;
130
+ timings.total = Date.now() - startTime;
131
+ const result = buildFinalResult(execResult, {
132
+ phaseReached,
133
+ orchestrationIntent,
134
+ timings,
135
+ directExecutorUsed,
136
+ delegateUsed: null,
137
+ });
138
+ await this.fireHook(this.config.lifecycleHooks?.afterMessage
139
+ ? () => this.config.lifecycleHooks.afterMessage(result)
140
+ : undefined);
141
+ return result;
142
+ }
143
+ }
144
+ }
145
+ }
146
+ // === Phase 3: Delegate Routing ===
147
+ const delegateStart = Date.now();
148
+ let selectedDelegate = this.config.delegate;
149
+ let selectedDelegateName = "default";
150
+ if (orchestrationIntent && this.config.delegates) {
151
+ const mapped = this.config.delegates.get(orchestrationIntent.object);
152
+ if (mapped) {
153
+ selectedDelegate = mapped;
154
+ selectedDelegateName = orchestrationIntent.object;
155
+ }
156
+ }
157
+ // Enrich options with session state if available (use cached fetch)
158
+ let enrichedOptions = options;
159
+ if (this.config.sessionStateStore && sessionId) {
160
+ if (cachedSessionState === undefined) {
161
+ cachedSessionState = await this.config.sessionStateStore.get(sessionId);
162
+ }
163
+ if (cachedSessionState) {
164
+ enrichedOptions = { ...options, sessionState: cachedSessionState };
165
+ }
166
+ }
167
+ const delegateResult = await selectedDelegate.chat(message, enrichedOptions);
168
+ timings.delegate = Date.now() - delegateStart;
169
+ timings.total = Date.now() - startTime;
170
+ phaseReached = "delegate";
171
+ delegateUsed = selectedDelegateName;
172
+ // Update session state if applicable (reuse cached session state)
173
+ if (this.config.sessionStateStore && sessionId && delegateResult.sessionId) {
174
+ const newState = {
175
+ sessionId,
176
+ lastPresentedEntities: cachedSessionState?.lastPresentedEntities ?? [],
177
+ metadata: cachedSessionState?.metadata ?? {},
178
+ updatedAt: Date.now(),
179
+ };
180
+ await this.config.sessionStateStore.save(sessionId, newState);
181
+ }
182
+ const result = buildFinalResult(delegateResult, {
183
+ phaseReached,
184
+ orchestrationIntent,
185
+ timings,
186
+ directExecutorUsed,
187
+ delegateUsed,
188
+ sessionId: sessionId ?? delegateResult.sessionId,
189
+ });
190
+ await this.fireHook(this.config.lifecycleHooks?.afterMessage
191
+ ? () => this.config.lifecycleHooks.afterMessage(result)
192
+ : undefined);
193
+ return result;
194
+ }
195
+ catch (error) {
196
+ // Fire onError hook
197
+ await this.fireHook(this.config.lifecycleHooks?.onError
198
+ ? () => this.config.lifecycleHooks.onError(error)
199
+ : undefined);
200
+ // Re-throw after hook
201
+ throw error;
202
+ }
203
+ }
204
+ /**
205
+ * Process a channel-specific raw input through the channel adapter.
206
+ */
207
+ async processChannel(rawInput) {
208
+ if (!this.config.channelAdapter) {
209
+ throw new Error("No channelAdapter configured");
210
+ }
211
+ const channelMessage = this.config.channelAdapter.parseIncoming(rawInput);
212
+ const result = await this.chat(channelMessage.text, channelMessage.options);
213
+ return this.config.channelAdapter.formatOutgoing(result);
214
+ }
215
+ }
216
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestration/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pending state management — tracks confirmations awaiting user response.
3
+ */
4
+ export interface PendingState {
5
+ type: string;
6
+ payload: Record<string, unknown>;
7
+ createdAt: number;
8
+ }
9
+ export type ConfirmationDisposition = "confirm" | "reject" | "override";
10
+ export interface BasePendingStateManager {
11
+ getPending(sessionId: string): Promise<PendingState | null>;
12
+ setPending(sessionId: string, state: PendingState): Promise<void>;
13
+ clearPending(sessionId: string): Promise<void>;
14
+ }
15
+ /**
16
+ * InMemoryPendingStateManager — simple in-memory Map implementation.
17
+ */
18
+ export declare class InMemoryPendingStateManager implements BasePendingStateManager {
19
+ private store;
20
+ getPending(sessionId: string): Promise<PendingState | null>;
21
+ setPending(sessionId: string, state: PendingState): Promise<void>;
22
+ clearPending(sessionId: string): Promise<void>;
23
+ }
24
+ /**
25
+ * Default implementation to classify a user message's disposition toward a pending confirmation.
26
+ */
27
+ export declare function classifyConfirmationDisposition(message: string): ConfirmationDisposition;
28
+ //# sourceMappingURL=pending.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["../../src/orchestration/pending.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAC5D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,2BAA4B,YAAW,uBAAuB;IACzE,OAAO,CAAC,KAAK,CAAmC;IAE1C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAI3D,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrD;AAKD;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,GACd,uBAAuB,CAKzB"}