@primo-ai/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/README.md +114 -0
  2. package/dist/agent.d.ts +66 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +260 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/checkpoint-store.d.ts +19 -0
  7. package/dist/checkpoint-store.d.ts.map +1 -0
  8. package/dist/checkpoint-store.js +79 -0
  9. package/dist/checkpoint-store.js.map +1 -0
  10. package/dist/concurrency-controller.d.ts +9 -0
  11. package/dist/concurrency-controller.d.ts.map +1 -0
  12. package/dist/concurrency-controller.js +71 -0
  13. package/dist/concurrency-controller.js.map +1 -0
  14. package/dist/config-merge.d.ts +12 -0
  15. package/dist/config-merge.d.ts.map +1 -0
  16. package/dist/config-merge.js +47 -0
  17. package/dist/config-merge.js.map +1 -0
  18. package/dist/config.d.ts +16 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +144 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/context-builder.d.ts +29 -0
  23. package/dist/context-builder.d.ts.map +1 -0
  24. package/dist/context-builder.js +178 -0
  25. package/dist/context-builder.js.map +1 -0
  26. package/dist/dynamic-resolver.d.ts +7 -0
  27. package/dist/dynamic-resolver.d.ts.map +1 -0
  28. package/dist/dynamic-resolver.js +11 -0
  29. package/dist/dynamic-resolver.js.map +1 -0
  30. package/dist/errors.d.ts +30 -0
  31. package/dist/errors.d.ts.map +1 -0
  32. package/dist/errors.js +40 -0
  33. package/dist/errors.js.map +1 -0
  34. package/dist/event-bus.d.ts +8 -0
  35. package/dist/event-bus.d.ts.map +1 -0
  36. package/dist/event-bus.js +36 -0
  37. package/dist/event-bus.js.map +1 -0
  38. package/dist/event-system.d.ts +19 -0
  39. package/dist/event-system.d.ts.map +1 -0
  40. package/dist/event-system.js +58 -0
  41. package/dist/event-system.js.map +1 -0
  42. package/dist/fallback-runner.d.ts +30 -0
  43. package/dist/fallback-runner.d.ts.map +1 -0
  44. package/dist/fallback-runner.js +40 -0
  45. package/dist/fallback-runner.js.map +1 -0
  46. package/dist/gateways/builtin-gateway.d.ts +17 -0
  47. package/dist/gateways/builtin-gateway.d.ts.map +1 -0
  48. package/dist/gateways/builtin-gateway.js +58 -0
  49. package/dist/gateways/builtin-gateway.js.map +1 -0
  50. package/dist/gateways/gateway-chain.d.ts +9 -0
  51. package/dist/gateways/gateway-chain.d.ts.map +1 -0
  52. package/dist/gateways/gateway-chain.js +18 -0
  53. package/dist/gateways/gateway-chain.js.map +1 -0
  54. package/dist/gateways/openai-compatible-gateway.d.ts +10 -0
  55. package/dist/gateways/openai-compatible-gateway.d.ts.map +1 -0
  56. package/dist/gateways/openai-compatible-gateway.js +26 -0
  57. package/dist/gateways/openai-compatible-gateway.js.map +1 -0
  58. package/dist/harness.d.ts +44 -0
  59. package/dist/harness.d.ts.map +1 -0
  60. package/dist/harness.js +70 -0
  61. package/dist/harness.js.map +1 -0
  62. package/dist/hook-manager.d.ts +22 -0
  63. package/dist/hook-manager.d.ts.map +1 -0
  64. package/dist/hook-manager.js +92 -0
  65. package/dist/hook-manager.js.map +1 -0
  66. package/dist/index.d.ts +34 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +34 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/llm-invoker.d.ts +34 -0
  71. package/dist/llm-invoker.d.ts.map +1 -0
  72. package/dist/llm-invoker.js +124 -0
  73. package/dist/llm-invoker.js.map +1 -0
  74. package/dist/loop-orchestrator.d.ts +48 -0
  75. package/dist/loop-orchestrator.d.ts.map +1 -0
  76. package/dist/loop-orchestrator.js +247 -0
  77. package/dist/loop-orchestrator.js.map +1 -0
  78. package/dist/model-factory.d.ts +13 -0
  79. package/dist/model-factory.d.ts.map +1 -0
  80. package/dist/model-factory.js +40 -0
  81. package/dist/model-factory.js.map +1 -0
  82. package/dist/model-profile.d.ts +17 -0
  83. package/dist/model-profile.d.ts.map +1 -0
  84. package/dist/model-profile.js +57 -0
  85. package/dist/model-profile.js.map +1 -0
  86. package/dist/model-resolver.d.ts +16 -0
  87. package/dist/model-resolver.d.ts.map +1 -0
  88. package/dist/model-resolver.js +28 -0
  89. package/dist/model-resolver.js.map +1 -0
  90. package/dist/parse-model.d.ts +6 -0
  91. package/dist/parse-model.d.ts.map +1 -0
  92. package/dist/parse-model.js +11 -0
  93. package/dist/parse-model.js.map +1 -0
  94. package/dist/pipeline.d.ts +28 -0
  95. package/dist/pipeline.d.ts.map +1 -0
  96. package/dist/pipeline.js +286 -0
  97. package/dist/pipeline.js.map +1 -0
  98. package/dist/plugin-manager.d.ts +42 -0
  99. package/dist/plugin-manager.d.ts.map +1 -0
  100. package/dist/plugin-manager.js +148 -0
  101. package/dist/plugin-manager.js.map +1 -0
  102. package/dist/processors/build-context.d.ts +3 -0
  103. package/dist/processors/build-context.d.ts.map +1 -0
  104. package/dist/processors/build-context.js +5 -0
  105. package/dist/processors/build-context.js.map +1 -0
  106. package/dist/processors/evaluate-iteration.d.ts +13 -0
  107. package/dist/processors/evaluate-iteration.d.ts.map +1 -0
  108. package/dist/processors/evaluate-iteration.js +196 -0
  109. package/dist/processors/evaluate-iteration.js.map +1 -0
  110. package/dist/processors/execute-tools.d.ts +4 -0
  111. package/dist/processors/execute-tools.d.ts.map +1 -0
  112. package/dist/processors/execute-tools.js +69 -0
  113. package/dist/processors/execute-tools.js.map +1 -0
  114. package/dist/processors/gate-tool.d.ts +3 -0
  115. package/dist/processors/gate-tool.d.ts.map +1 -0
  116. package/dist/processors/gate-tool.js +6 -0
  117. package/dist/processors/gate-tool.js.map +1 -0
  118. package/dist/processors/index.d.ts +10 -0
  119. package/dist/processors/index.d.ts.map +1 -0
  120. package/dist/processors/index.js +10 -0
  121. package/dist/processors/index.js.map +1 -0
  122. package/dist/processors/invoke-llm.d.ts +13 -0
  123. package/dist/processors/invoke-llm.d.ts.map +1 -0
  124. package/dist/processors/invoke-llm.js +138 -0
  125. package/dist/processors/invoke-llm.js.map +1 -0
  126. package/dist/processors/prepare-step.d.ts +3 -0
  127. package/dist/processors/prepare-step.d.ts.map +1 -0
  128. package/dist/processors/prepare-step.js +5 -0
  129. package/dist/processors/prepare-step.js.map +1 -0
  130. package/dist/processors/process-input.d.ts +3 -0
  131. package/dist/processors/process-input.d.ts.map +1 -0
  132. package/dist/processors/process-input.js +20 -0
  133. package/dist/processors/process-input.js.map +1 -0
  134. package/dist/processors/process-output.d.ts +3 -0
  135. package/dist/processors/process-output.d.ts.map +1 -0
  136. package/dist/processors/process-output.js +5 -0
  137. package/dist/processors/process-output.js.map +1 -0
  138. package/dist/processors/process-step-output.d.ts +3 -0
  139. package/dist/processors/process-step-output.d.ts.map +1 -0
  140. package/dist/processors/process-step-output.js +23 -0
  141. package/dist/processors/process-step-output.js.map +1 -0
  142. package/dist/processors/provider-history-compat.d.ts +7 -0
  143. package/dist/processors/provider-history-compat.d.ts.map +1 -0
  144. package/dist/processors/provider-history-compat.js +166 -0
  145. package/dist/processors/provider-history-compat.js.map +1 -0
  146. package/dist/provider-capabilities.d.ts +4 -0
  147. package/dist/provider-capabilities.d.ts.map +1 -0
  148. package/dist/provider-capabilities.js +47 -0
  149. package/dist/provider-capabilities.js.map +1 -0
  150. package/dist/retry.d.ts +6 -0
  151. package/dist/retry.d.ts.map +1 -0
  152. package/dist/retry.js +26 -0
  153. package/dist/retry.js.map +1 -0
  154. package/dist/serialize.d.ts +12 -0
  155. package/dist/serialize.d.ts.map +1 -0
  156. package/dist/serialize.js +22 -0
  157. package/dist/serialize.js.map +1 -0
  158. package/dist/session-manager.d.ts +17 -0
  159. package/dist/session-manager.d.ts.map +1 -0
  160. package/dist/session-manager.js +143 -0
  161. package/dist/session-manager.js.map +1 -0
  162. package/dist/session-persistence.d.ts +13 -0
  163. package/dist/session-persistence.d.ts.map +1 -0
  164. package/dist/session-persistence.js +63 -0
  165. package/dist/session-persistence.js.map +1 -0
  166. package/dist/session-storage.d.ts +19 -0
  167. package/dist/session-storage.d.ts.map +1 -0
  168. package/dist/session-storage.js +103 -0
  169. package/dist/session-storage.js.map +1 -0
  170. package/dist/state-machine.d.ts +13 -0
  171. package/dist/state-machine.d.ts.map +1 -0
  172. package/dist/state-machine.js +49 -0
  173. package/dist/state-machine.js.map +1 -0
  174. package/dist/storage-replay-backend.d.ts +7 -0
  175. package/dist/storage-replay-backend.d.ts.map +1 -0
  176. package/dist/storage-replay-backend.js +14 -0
  177. package/dist/storage-replay-backend.js.map +1 -0
  178. package/dist/sub-agent.d.ts +13 -0
  179. package/dist/sub-agent.d.ts.map +1 -0
  180. package/dist/sub-agent.js +87 -0
  181. package/dist/sub-agent.js.map +1 -0
  182. package/dist/task-manager.d.ts +22 -0
  183. package/dist/task-manager.d.ts.map +1 -0
  184. package/dist/task-manager.js +151 -0
  185. package/dist/task-manager.js.map +1 -0
  186. package/dist/token-counter.d.ts +9 -0
  187. package/dist/token-counter.d.ts.map +1 -0
  188. package/dist/token-counter.js +74 -0
  189. package/dist/token-counter.js.map +1 -0
  190. package/dist/tool-registry.d.ts +31 -0
  191. package/dist/tool-registry.d.ts.map +1 -0
  192. package/dist/tool-registry.js +147 -0
  193. package/dist/tool-registry.js.map +1 -0
  194. package/package.json +37 -0
@@ -0,0 +1,151 @@
1
+ class InternalAsyncTaskHandle {
2
+ state;
3
+ constructor(state) {
4
+ this.state = state;
5
+ }
6
+ get taskId() {
7
+ return this.state.taskId;
8
+ }
9
+ get status() {
10
+ return this.state.status;
11
+ }
12
+ get result() {
13
+ return this.state.result;
14
+ }
15
+ get error() {
16
+ return this.state.error;
17
+ }
18
+ cancel() {
19
+ if (this.state.status === 'pending' ||
20
+ this.state.status === 'running') {
21
+ this.state.status = 'cancelled';
22
+ this.state.abortController.abort();
23
+ }
24
+ }
25
+ on_complete(handler) {
26
+ // If already completed, call immediately
27
+ if (this.state.status === 'completed' && this.state.result) {
28
+ handler(this.state.result);
29
+ return;
30
+ }
31
+ this.state.completionHandlers.push(handler);
32
+ }
33
+ /** Internal: parentSessionId for filtering */
34
+ get _parentSessionId() {
35
+ return this.state.parentSessionId;
36
+ }
37
+ }
38
+ const defaultRunAgent = async (config, input, signal) => {
39
+ const { Agent } = await import('./agent.js');
40
+ const agent = new Agent(config);
41
+ const result = await agent.run(input, signal);
42
+ return {
43
+ response: result.response,
44
+ tokenUsage: result.tokenUsage,
45
+ sessionId: result.sessionId,
46
+ };
47
+ };
48
+ export class TaskManagerImpl {
49
+ handles = new Map();
50
+ eventBus;
51
+ concurrencyController;
52
+ runAgentFn;
53
+ constructor(options) {
54
+ this.eventBus = options?.eventBus;
55
+ this.concurrencyController = options?.concurrencyController;
56
+ this.runAgentFn = options?.runAgentFn ?? defaultRunAgent;
57
+ }
58
+ async launch(config, prompt) {
59
+ const taskId = crypto.randomUUID();
60
+ const abortController = new AbortController();
61
+ const state = {
62
+ taskId,
63
+ status: 'pending',
64
+ config,
65
+ abortController,
66
+ completionHandlers: [],
67
+ parentSessionId: config.parentSessionId,
68
+ };
69
+ const handle = new InternalAsyncTaskHandle(state);
70
+ this.handles.set(taskId, handle);
71
+ // Fire-and-forget the async work
72
+ this.executeTask(state, config, prompt).catch(() => {
73
+ // Errors are handled inside executeTask
74
+ });
75
+ return handle;
76
+ }
77
+ get(taskId) {
78
+ return this.handles.get(taskId);
79
+ }
80
+ cancel(taskId) {
81
+ const handle = this.handles.get(taskId);
82
+ if (handle) {
83
+ handle.cancel();
84
+ }
85
+ }
86
+ list(filter) {
87
+ let handles = Array.from(this.handles.values());
88
+ if (filter?.parentSessionId) {
89
+ handles = handles.filter((h) => h._parentSessionId === filter.parentSessionId);
90
+ }
91
+ return handles;
92
+ }
93
+ async executeTask(state, config, prompt) {
94
+ const { signal } = state.abortController;
95
+ // Check for cancellation before starting
96
+ if (signal.aborted)
97
+ return;
98
+ // Acquire concurrency slot if configured
99
+ let releaseSlot;
100
+ if (config.concurrencySlot && this.concurrencyController) {
101
+ releaseSlot = await this.concurrencyController.acquire(config.concurrencySlot.key);
102
+ }
103
+ try {
104
+ // Update status to running
105
+ state.status = 'running';
106
+ this.eventBus?.emit('task:start', { taskId: state.taskId, config });
107
+ // Check cancellation again after acquiring slot
108
+ if (signal.aborted)
109
+ return;
110
+ const agentConfig = {
111
+ model: config.model ?? 'default',
112
+ systemPrompt: config.systemPrompt,
113
+ tools: config.tools,
114
+ maxIterations: config.maxIterations,
115
+ };
116
+ const result = await this.runAgentFn(agentConfig, prompt, signal);
117
+ // Check if cancelled while running
118
+ if (signal.aborted)
119
+ return;
120
+ state.status = 'completed';
121
+ state.result = result;
122
+ this.eventBus?.emit('task:end', {
123
+ taskId: state.taskId,
124
+ result,
125
+ });
126
+ // Fire completion handlers
127
+ for (const handler of state.completionHandlers) {
128
+ handler(result);
129
+ }
130
+ }
131
+ catch (err) {
132
+ if (signal.aborted)
133
+ return;
134
+ const error = err instanceof Error ? err : new Error(String(err));
135
+ state.status = 'failed';
136
+ state.error = error;
137
+ this.eventBus?.emit('task:error', {
138
+ taskId: state.taskId,
139
+ error,
140
+ });
141
+ this.eventBus?.emit('task:end', {
142
+ taskId: state.taskId,
143
+ error,
144
+ });
145
+ }
146
+ finally {
147
+ releaseSlot?.();
148
+ }
149
+ }
150
+ }
151
+ //# sourceMappingURL=task-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../src/task-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TokenCounter, Message } from '@primo-ai/sdk';
2
+ export declare class TiktokenCounter implements TokenCounter {
3
+ private cache;
4
+ private getEncoder;
5
+ count(text: string, model?: string): number;
6
+ countMessages(messages: Message[], model?: string): number;
7
+ dispose(): void;
8
+ }
9
+ //# sourceMappingURL=token-counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAwC3D,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CAAC,KAAK,CAA+B;IAE5C,OAAO,CAAC,UAAU;IASlB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAM3C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAyB1D,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,74 @@
1
+ import { getEncoding } from 'js-tiktoken';
2
+ const MODEL_ENCODING_MAP = {
3
+ 'gpt-4o': 'o200k_base',
4
+ 'gpt-4o-mini': 'o200k_base',
5
+ 'o1': 'o200k_base',
6
+ 'o1-mini': 'o200k_base',
7
+ 'o3': 'o200k_base',
8
+ 'o3-mini': 'o200k_base',
9
+ 'gpt-4-turbo': 'cl100k_base',
10
+ 'gpt-4': 'cl100k_base',
11
+ 'gpt-4-32k': 'cl100k_base',
12
+ 'gpt-3.5-turbo': 'cl100k_base',
13
+ 'text-embedding-ada-002': 'cl100k_base',
14
+ 'text-embedding-3-small': 'cl100k_base',
15
+ 'text-embedding-3-large': 'cl100k_base',
16
+ 'claude': 'cl100k_base',
17
+ 'deepseek': 'cl100k_base',
18
+ 'gemini': 'cl100k_base',
19
+ };
20
+ const PER_MSG_OVERHEAD = 4;
21
+ const NAME_OVERHEAD = 1;
22
+ function resolveEncodingName(model) {
23
+ if (!model)
24
+ return 'cl100k_base';
25
+ for (const [prefix, enc] of Object.entries(MODEL_ENCODING_MAP)) {
26
+ if (model.toLowerCase().startsWith(prefix))
27
+ return enc;
28
+ }
29
+ return 'cl100k_base';
30
+ }
31
+ export class TiktokenCounter {
32
+ cache = new Map();
33
+ getEncoder(encoding) {
34
+ let enc = this.cache.get(encoding);
35
+ if (!enc) {
36
+ enc = getEncoding(encoding);
37
+ this.cache.set(encoding, enc);
38
+ }
39
+ return enc;
40
+ }
41
+ count(text, model) {
42
+ const encoding = resolveEncodingName(model);
43
+ const enc = this.getEncoder(encoding);
44
+ return enc.encode(text).length;
45
+ }
46
+ countMessages(messages, model) {
47
+ const encoding = resolveEncodingName(model);
48
+ const enc = this.getEncoder(encoding);
49
+ let total = 0;
50
+ for (const msg of messages) {
51
+ total += PER_MSG_OVERHEAD;
52
+ total += msg.name ? NAME_OVERHEAD : 0;
53
+ total += enc.encode(msg.content).length;
54
+ if (msg.role === 'assistant' && 'toolCalls' in msg && msg.toolCalls) {
55
+ for (const tc of msg.toolCalls) {
56
+ total += enc.encode(tc.name).length;
57
+ total += enc.encode(JSON.stringify(tc.args)).length;
58
+ }
59
+ }
60
+ if (msg.role === 'assistant' && 'reasoningContent' in msg && msg.reasoningContent) {
61
+ total += enc.encode(msg.reasoningContent).length;
62
+ }
63
+ if (msg.role === 'tool' && 'result' in msg && msg.result !== undefined) {
64
+ total += enc.encode(JSON.stringify(msg.result)).length;
65
+ }
66
+ }
67
+ total += 2;
68
+ return total;
69
+ }
70
+ dispose() {
71
+ this.cache.clear();
72
+ }
73
+ }
74
+ //# sourceMappingURL=token-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Tool, ToolExecutionContext, ToolResult } from '@primo-ai/sdk';
2
+ import type { HookManager } from './hook-manager.js';
3
+ import type { EventBus } from './event-bus.js';
4
+ export interface AiSdkToolSchema {
5
+ description: string;
6
+ inputSchema: unknown;
7
+ }
8
+ export interface ToolRegistryOptions {
9
+ maxOutputLength?: number;
10
+ }
11
+ export declare class ToolRegistry {
12
+ private tools;
13
+ private maxOutputLength;
14
+ private executionContext;
15
+ private hookManager?;
16
+ private eventBus?;
17
+ constructor(options?: ToolRegistryOptions);
18
+ register(tool: Tool): void;
19
+ unregister(name: string): boolean;
20
+ get(name: string): Tool | undefined;
21
+ getAll(): Tool[];
22
+ setHookManager(hookManager: HookManager): void;
23
+ setEventBus(eventBus: EventBus): void;
24
+ setToolExecutionContext(context: ToolExecutionContext): void;
25
+ toAiSdkToolSchemas(): Record<string, AiSdkToolSchema>;
26
+ executeTool(name: string, args: Record<string, unknown>, context?: ToolExecutionContext & {
27
+ toolCallId?: string;
28
+ }): Promise<ToolResult>;
29
+ private truncateOutput;
30
+ }
31
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgBD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,OAAO,GAAE,mBAAwB;IAI7C,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAO1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC,MAAM,IAAI,IAAI,EAAE;IAIhB,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAIrC,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAI5D,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAc/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAqE7I,OAAO,CAAC,cAAc;CA4BvB"}
@@ -0,0 +1,147 @@
1
+ import { jsonSchema } from 'ai';
2
+ function isZodSchema(value) {
3
+ return (value !== null &&
4
+ typeof value === 'object' &&
5
+ 'safeParse' in value &&
6
+ typeof value.safeParse === 'function');
7
+ }
8
+ export class ToolRegistry {
9
+ tools = new Map();
10
+ maxOutputLength;
11
+ executionContext = {};
12
+ hookManager;
13
+ eventBus;
14
+ constructor(options = {}) {
15
+ this.maxOutputLength = options.maxOutputLength ?? Infinity;
16
+ }
17
+ register(tool) {
18
+ if (this.tools.has(tool.name)) {
19
+ throw new Error(`Tool "${tool.name}" is already registered`);
20
+ }
21
+ this.tools.set(tool.name, tool);
22
+ }
23
+ unregister(name) {
24
+ return this.tools.delete(name);
25
+ }
26
+ get(name) {
27
+ return this.tools.get(name);
28
+ }
29
+ getAll() {
30
+ return [...this.tools.values()];
31
+ }
32
+ setHookManager(hookManager) {
33
+ this.hookManager = hookManager;
34
+ }
35
+ setEventBus(eventBus) {
36
+ this.eventBus = eventBus;
37
+ }
38
+ setToolExecutionContext(context) {
39
+ this.executionContext = context;
40
+ }
41
+ toAiSdkToolSchemas() {
42
+ const result = {};
43
+ for (const tool of this.tools.values()) {
44
+ const schema = isZodSchema(tool.inputSchema)
45
+ ? tool.inputSchema
46
+ : jsonSchema(tool.inputSchema);
47
+ result[tool.name] = {
48
+ description: tool.description,
49
+ inputSchema: schema,
50
+ };
51
+ }
52
+ return result;
53
+ }
54
+ async executeTool(name, args, context) {
55
+ const tool = this.tools.get(name);
56
+ const toolCallId = context?.toolCallId ?? '';
57
+ if (!tool) {
58
+ return { toolCallId, name, output: undefined, error: `Tool "${name}" not found` };
59
+ }
60
+ const execCtx = context ?? this.executionContext;
61
+ if (isZodSchema(tool.inputSchema)) {
62
+ const parsed = tool.inputSchema.safeParse(args);
63
+ if (!parsed.success) {
64
+ const issues = parsed.error?.issues?.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ') ?? parsed.error?.message ?? 'Unknown validation error';
65
+ return { toolCallId, name: tool.name, output: undefined, error: `Input validation failed: ${issues}` };
66
+ }
67
+ }
68
+ const hookInput = { toolName: tool.name, args, sessionId: execCtx.sessionId ?? '' };
69
+ if (this.hookManager) {
70
+ await this.hookManager.invoke('tool.before', hookInput, {});
71
+ }
72
+ let toolOutput;
73
+ let toolError;
74
+ let validationError;
75
+ try {
76
+ toolOutput = await tool.execute(args, execCtx);
77
+ }
78
+ catch (err) {
79
+ toolError = err instanceof Error ? err.message : String(err);
80
+ if (this.hookManager) {
81
+ await this.hookManager.invoke('tool.after', hookInput, { error: toolError });
82
+ }
83
+ return { toolCallId, name: tool.name, output: undefined, error: toolError };
84
+ }
85
+ let mutated = false;
86
+ if (this.hookManager) {
87
+ const hookOutput = { result: toolOutput };
88
+ await this.hookManager.invoke('tool.after', hookInput, hookOutput);
89
+ if (hookOutput.result !== undefined && hookOutput.result !== toolOutput) {
90
+ if (tool.allowOutputMutation) {
91
+ this.eventBus?.emit('tool:output_mutated', { toolName: tool.name, original: toolOutput, mutated: hookOutput.result });
92
+ toolOutput = hookOutput.result;
93
+ mutated = true;
94
+ }
95
+ else {
96
+ this.eventBus?.emit('tool:output_blocked', { toolName: tool.name, original: toolOutput, attempted: hookOutput.result });
97
+ }
98
+ }
99
+ }
100
+ // Validate AFTER hook mutation so mutations are also checked
101
+ if (tool.outputSchema && isZodSchema(tool.outputSchema)) {
102
+ const parsed = tool.outputSchema.safeParse(toolOutput);
103
+ if (!parsed.success) {
104
+ const issues = parsed.error?.issues?.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ') ?? parsed.error?.message ?? 'Unknown validation error';
105
+ validationError = `Output validation failed: ${issues}`;
106
+ this.eventBus?.emit('tool:output_invalid', { toolName: tool.name, error: validationError });
107
+ }
108
+ }
109
+ const { value: output, truncated } = this.truncateOutput(toolOutput, tool.name);
110
+ const result = { toolCallId, name: tool.name, output };
111
+ if (mutated)
112
+ result.mutated = true;
113
+ if (truncated)
114
+ result.truncated = true;
115
+ if (validationError)
116
+ result.validationError = validationError;
117
+ return result;
118
+ }
119
+ truncateOutput(output, toolName) {
120
+ if (output && typeof output === 'object' && 'evicted' in output) {
121
+ return { value: output, truncated: false };
122
+ }
123
+ if (typeof output === 'string' && output.length > this.maxOutputLength) {
124
+ const originalSize = output.length;
125
+ const value = output.slice(0, this.maxOutputLength) + '... [truncated]';
126
+ this.eventBus?.emit('tool:output_truncated', { toolName, originalSize, truncatedSize: value.length });
127
+ return { value, truncated: true };
128
+ }
129
+ if (typeof output !== 'string' &&
130
+ output !== null &&
131
+ output !== undefined) {
132
+ try {
133
+ const serialized = JSON.stringify(output);
134
+ if (serialized.length > this.maxOutputLength) {
135
+ this.eventBus?.emit('tool:output_truncated', { toolName, originalSize: serialized.length, truncatedSize: this.maxOutputLength });
136
+ return { value: { truncated: true, preview: serialized.slice(0, this.maxOutputLength) }, truncated: true };
137
+ }
138
+ }
139
+ catch {
140
+ this.eventBus?.emit('tool:output_truncated', { toolName, originalSize: String(output).length, truncatedSize: this.maxOutputLength });
141
+ return { value: { truncated: true, preview: String(output).slice(0, this.maxOutputLength) }, truncated: true };
142
+ }
143
+ }
144
+ return { value: output, truncated: false };
145
+ }
146
+ }
147
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@primo-ai/core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "files": ["dist"],
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.build.json",
16
+ "test": "tsc --noEmit && vitest run",
17
+ "check-types": "tsc --noEmit",
18
+ "lint": "eslint src __tests__"
19
+ },
20
+ "dependencies": {
21
+ "@primo-ai/observability": "workspace:*",
22
+ "@primo-ai/tools": "workspace:*",
23
+ "@ai-sdk/anthropic": "^3.0.76",
24
+ "@ai-sdk/deepseek": "2.0.34",
25
+ "@ai-sdk/google": "^3.0.71",
26
+ "@ai-sdk/openai": "^3.0.63",
27
+ "ai": "^6.0.177",
28
+ "js-tiktoken": "^1.0.21",
29
+ "zod": "^4.4.3"
30
+ },
31
+ "devDependencies": {
32
+ "@primo-ai/sdk": "workspace:*",
33
+ "@types/node": "^22.15.0",
34
+ "typescript": "^5.7.3",
35
+ "vitest": "^3.0.5"
36
+ }
37
+ }