@norskvideo/norsk-studio-alpha 1.27.0-2026-01-26-4bc5078b → 1.27.0-2026-01-31-e37a5429

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 (103) hide show
  1. package/client/info.js +1626 -1313
  2. package/client/style.css +6 -598
  3. package/lib/info.js +6 -4
  4. package/lib/info.js.map +1 -1
  5. package/lib/processor.objectDetect/_gen/schema.d.ts +12 -0
  6. package/lib/processor.objectDetect/_gen/schema.js +16 -0
  7. package/lib/processor.objectDetect/_gen/schema.js.map +1 -0
  8. package/lib/processor.objectDetect/_gen/types.d.ts +49 -0
  9. package/lib/processor.objectDetect/_gen/types.js.map +1 -0
  10. package/lib/processor.objectDetect/_gen/zod.js +60 -0
  11. package/lib/processor.objectDetect/_gen/zod.js.map +1 -0
  12. package/lib/processor.objectDetect/info.d.ts +27 -0
  13. package/lib/processor.objectDetect/info.js +63 -0
  14. package/lib/processor.objectDetect/info.js.map +1 -0
  15. package/lib/processor.objectDetect/inline-view.d.ts +6 -0
  16. package/lib/processor.objectDetect/inline-view.js +41 -0
  17. package/lib/processor.objectDetect/inline-view.js.map +1 -0
  18. package/lib/processor.objectDetect/runtime.d.ts +28 -0
  19. package/lib/processor.objectDetect/runtime.js +112 -0
  20. package/lib/processor.objectDetect/runtime.js.map +1 -0
  21. package/lib/processor.objectDetect/types.yaml +78 -0
  22. package/lib/test/output.tams.js.map +1 -1
  23. package/lib/util.claudeAgent/_gen/schema.d.ts +17 -0
  24. package/lib/util.claudeAgent/_gen/schema.js +21 -0
  25. package/lib/util.claudeAgent/_gen/schema.js.map +1 -0
  26. package/lib/util.claudeAgent/_gen/types.d.ts +370 -0
  27. package/lib/util.claudeAgent/_gen/types.js.map +1 -0
  28. package/lib/util.claudeAgent/_gen/zod.js +147 -0
  29. package/lib/util.claudeAgent/_gen/zod.js.map +1 -0
  30. package/lib/util.claudeAgent/info.d.ts +63 -0
  31. package/lib/util.claudeAgent/info.js +131 -0
  32. package/lib/util.claudeAgent/info.js.map +1 -0
  33. package/lib/util.claudeAgent/runtime.d.ts +105 -0
  34. package/lib/util.claudeAgent/runtime.js +567 -0
  35. package/lib/util.claudeAgent/runtime.js.map +1 -0
  36. package/lib/util.claudeAgent/types.yaml +393 -0
  37. package/lib/util.geminiAgent/_gen/schema.d.ts +17 -0
  38. package/lib/util.geminiAgent/_gen/schema.js +21 -0
  39. package/lib/util.geminiAgent/_gen/schema.js.map +1 -0
  40. package/lib/util.geminiAgent/_gen/types.d.ts +370 -0
  41. package/lib/util.geminiAgent/_gen/types.js.map +1 -0
  42. package/lib/util.geminiAgent/_gen/zod.d.ts +2 -0
  43. package/lib/util.geminiAgent/_gen/zod.js +147 -0
  44. package/lib/util.geminiAgent/_gen/zod.js.map +1 -0
  45. package/lib/util.geminiAgent/info.d.ts +63 -0
  46. package/lib/util.geminiAgent/info.js +131 -0
  47. package/lib/util.geminiAgent/info.js.map +1 -0
  48. package/lib/util.geminiAgent/runtime.d.ts +107 -0
  49. package/lib/util.geminiAgent/runtime.js +621 -0
  50. package/lib/util.geminiAgent/runtime.js.map +1 -0
  51. package/lib/util.geminiAgent/types.yaml +392 -0
  52. package/package.json +24 -5
  53. package/client/util.aiChat/styles.css +0 -371
  54. package/lib/util.agent/_gen/schema.d.ts +0 -13
  55. package/lib/util.agent/_gen/schema.js +0 -17
  56. package/lib/util.agent/_gen/schema.js.map +0 -1
  57. package/lib/util.agent/_gen/types.d.ts +0 -343
  58. package/lib/util.agent/_gen/types.js.map +0 -1
  59. package/lib/util.agent/_gen/zod.js +0 -206
  60. package/lib/util.agent/_gen/zod.js.map +0 -1
  61. package/lib/util.agent/fullscreen-view.d.ts +0 -4
  62. package/lib/util.agent/fullscreen-view.js +0 -142
  63. package/lib/util.agent/fullscreen-view.js.map +0 -1
  64. package/lib/util.agent/info.d.ts +0 -126
  65. package/lib/util.agent/info.js +0 -141
  66. package/lib/util.agent/info.js.map +0 -1
  67. package/lib/util.agent/inline-view.d.ts +0 -6
  68. package/lib/util.agent/inline-view.js +0 -43
  69. package/lib/util.agent/inline-view.js.map +0 -1
  70. package/lib/util.agent/runtime.d.ts +0 -180
  71. package/lib/util.agent/runtime.js +0 -1254
  72. package/lib/util.agent/runtime.js.map +0 -1
  73. package/lib/util.agent/summary-view.d.ts +0 -4
  74. package/lib/util.agent/summary-view.js +0 -68
  75. package/lib/util.agent/summary-view.js.map +0 -1
  76. package/lib/util.agent/types.d.ts +0 -285
  77. package/lib/util.agent/types.js.map +0 -1
  78. package/lib/util.agent/types.yaml +0 -440
  79. package/lib/util.aiChat/_gen/schema.d.ts +0 -12
  80. package/lib/util.aiChat/_gen/schema.js +0 -16
  81. package/lib/util.aiChat/_gen/schema.js.map +0 -1
  82. package/lib/util.aiChat/_gen/types.d.ts +0 -98
  83. package/lib/util.aiChat/_gen/types.js.map +0 -1
  84. package/lib/util.aiChat/_gen/zod.js +0 -132
  85. package/lib/util.aiChat/_gen/zod.js.map +0 -1
  86. package/lib/util.aiChat/info.d.ts +0 -70
  87. package/lib/util.aiChat/info.js +0 -92
  88. package/lib/util.aiChat/info.js.map +0 -1
  89. package/lib/util.aiChat/runtime.d.ts +0 -32
  90. package/lib/util.aiChat/runtime.js +0 -304
  91. package/lib/util.aiChat/runtime.js.map +0 -1
  92. package/lib/util.aiChat/summary-view.d.ts +0 -7
  93. package/lib/util.aiChat/summary-view.js +0 -48
  94. package/lib/util.aiChat/summary-view.js.map +0 -1
  95. package/lib/util.aiChat/types.d.ts +0 -62
  96. package/lib/util.aiChat/types.js +0 -3
  97. package/lib/util.aiChat/types.js.map +0 -1
  98. package/lib/util.aiChat/types.yaml +0 -148
  99. /package/lib/{util.agent → processor.objectDetect}/_gen/types.js +0 -0
  100. /package/lib/{util.agent → processor.objectDetect}/_gen/zod.d.ts +0 -0
  101. /package/lib/{util.agent → util.claudeAgent/_gen}/types.js +0 -0
  102. /package/lib/{util.aiChat → util.claudeAgent}/_gen/zod.d.ts +0 -0
  103. /package/lib/{util.aiChat → util.geminiAgent}/_gen/types.js +0 -0
@@ -0,0 +1,567 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const runtime_types_1 = require("@norskvideo/norsk-studio/lib/extension/runtime-types");
7
+ const config_1 = __importDefault(require("@norskvideo/norsk-studio/lib/server/config"));
8
+ const api_1 = require("@norskvideo/norsk-studio/lib/server/api");
9
+ const logging_1 = require("@norskvideo/norsk-studio/lib/server/logging");
10
+ const api_validation_1 = require("@norskvideo/norsk-studio/lib/server/api-validation");
11
+ const agent_1 = require("@norskvideo/norsk-studio-built-ins/lib/shared/agent");
12
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
13
+ const schema_1 = require("./_gen/schema");
14
+ const path_1 = __importDefault(require("path"));
15
+ class ClaudeAgentDefinition {
16
+ async schemas() {
17
+ return (0, runtime_types_1.schemaFromTypes)(path_1.default.join(__dirname, 'types.yaml'), {
18
+ config: 'ClaudeAgentConfig',
19
+ state: 'State',
20
+ commands: 'Commands',
21
+ events: 'Events'
22
+ });
23
+ }
24
+ async create(norsk, cfg, cb, runtime) {
25
+ const node = await ClaudeAgentNode.create(norsk, cfg, runtime);
26
+ cb(node);
27
+ }
28
+ handleCommand(node, command) {
29
+ node.handleCommand(command);
30
+ }
31
+ async instanceRoutes() {
32
+ return (0, api_1.defineJsonApi)(path_1.default.join(__dirname, 'types.yaml'), {
33
+ '/invocations': {
34
+ get: ({ node }) => ({
35
+ swt: api_validation_1.NoBody,
36
+ handler: async () => {
37
+ const invocations = node.invocationTracker.getHistory();
38
+ return { statusCode: 200, body: invocations };
39
+ }
40
+ })
41
+ },
42
+ '/timers': {
43
+ get: ({ node }) => ({
44
+ swt: api_validation_1.NoBody,
45
+ handler: async () => {
46
+ const timers = node.timerManager.getActiveTimers();
47
+ return { statusCode: 200, body: timers };
48
+ }
49
+ })
50
+ },
51
+ '/subscriptions': {
52
+ get: ({ node }) => ({
53
+ swt: api_validation_1.NoBody,
54
+ handler: async () => {
55
+ const subscriptions = node.eventManager.getActiveSubscriptions();
56
+ return { statusCode: 200, body: subscriptions };
57
+ }
58
+ })
59
+ },
60
+ '/memory': {
61
+ get: ({ node }) => ({
62
+ swt: api_validation_1.NoBody,
63
+ handler: async () => {
64
+ const memory = node.memoryManager.getAll();
65
+ return { statusCode: 200, body: memory };
66
+ }
67
+ }),
68
+ delete: ({ node }) => ({
69
+ swt: api_validation_1.NoBody,
70
+ handler: async () => {
71
+ node.memoryManager.clear();
72
+ return { statusCode: 204 };
73
+ }
74
+ })
75
+ },
76
+ '/prompt': {
77
+ post: ({ node }) => ({
78
+ swt: schema_1.SendPromptBody,
79
+ handler: async (req) => {
80
+ const invocationId = await node.invokeAgent(req.body.prompt, {
81
+ type: 'user_command',
82
+ source: 'api'
83
+ });
84
+ return { statusCode: 200, body: { invocationId } };
85
+ }
86
+ })
87
+ }
88
+ });
89
+ }
90
+ }
91
+ exports.default = ClaudeAgentDefinition;
92
+ class ClaudeAgentNode {
93
+ id;
94
+ relatedMediaNodes = new runtime_types_1.RelatedMediaNodes();
95
+ norsk;
96
+ cfg;
97
+ runtime;
98
+ invocationTracker;
99
+ timerManager;
100
+ memoryManager;
101
+ eventManager;
102
+ client;
103
+ conversationHistory = [];
104
+ invocationLock = false;
105
+ currentTriggerType = 'user_command';
106
+ currentTriggerSource;
107
+ runtimeToolsAdded = false;
108
+ cachedTools = [];
109
+ constructor(norsk, cfg, runtime) {
110
+ this.id = cfg.id;
111
+ this.norsk = norsk;
112
+ this.cfg = cfg;
113
+ this.runtime = runtime;
114
+ this.invocationTracker = new agent_1.InvocationTracker({ maxHistory: 100 });
115
+ this.memoryManager = new agent_1.MemoryManager();
116
+ this.timerManager = new agent_1.TimerManager({
117
+ onTimerFired: async (timerId, reason) => {
118
+ this.runtime.updates.raiseEvent({
119
+ type: 'timer_fired',
120
+ timerId,
121
+ reason
122
+ });
123
+ await this.invokeAgent(`Timer fired. Reason: ${reason}`, {
124
+ type: 'timer',
125
+ source: timerId,
126
+ details: { reason }
127
+ });
128
+ }
129
+ });
130
+ this.eventManager = new agent_1.EventSubscriptionManager({
131
+ onEvent: async (componentId, event) => {
132
+ await this.invokeAgent(`Event from component '${componentId}': ${JSON.stringify(event)}`, {
133
+ type: 'component_event',
134
+ source: componentId,
135
+ details: { event }
136
+ });
137
+ },
138
+ subscribe: (componentId, handler) => {
139
+ runtime.shared.subscribeToComponentEvents(componentId, handler);
140
+ },
141
+ unsubscribe: (componentId, handler) => {
142
+ runtime.shared.unsubscribeToComponentEvents(componentId, handler);
143
+ }
144
+ });
145
+ }
146
+ static async create(norsk, cfg, runtime) {
147
+ const node = new ClaudeAgentNode(norsk, cfg, runtime);
148
+ await node.initialise();
149
+ return node;
150
+ }
151
+ async initialise() {
152
+ this.runtime.updates.update({
153
+ status: 'idle',
154
+ activeTimerCount: 0,
155
+ activeSubscriptionCount: 0,
156
+ invocationCount: 0,
157
+ });
158
+ this.initializeClient();
159
+ void this.waitForToolsAndStart();
160
+ }
161
+ async waitForToolsAndStart() {
162
+ (0, logging_1.debuglog)("Waiting for runtime tools to be available", { agentId: this.cfg.id });
163
+ await this.runtime.llm.waitForTools();
164
+ this.runtimeToolsAdded = true;
165
+ if (this.cfg.initialPrompt) {
166
+ (0, logging_1.debuglog)("Running initial prompt", { agentId: this.cfg.id });
167
+ await this.invokeAgent(this.cfg.initialPrompt, {
168
+ type: 'user_command',
169
+ source: 'initial'
170
+ });
171
+ }
172
+ }
173
+ initializeClient() {
174
+ const apiKey = config_1.default.llm.anthropic.apiKey();
175
+ if (!apiKey) {
176
+ (0, logging_1.errorlog)("No Anthropic API key configured", { agentId: this.cfg.id });
177
+ return;
178
+ }
179
+ this.client = new sdk_1.default({
180
+ apiKey
181
+ });
182
+ }
183
+ buildTools() {
184
+ const tools = [];
185
+ tools.push({
186
+ name: 'set_timer',
187
+ description: 'Schedule a future invocation. You will be notified when the timer fires. Use intervalMs to create a recurring timer that auto-reschedules.',
188
+ input_schema: {
189
+ type: 'object',
190
+ properties: {
191
+ delayMs: { type: 'number', description: 'Delay in milliseconds before first fire' },
192
+ reason: { type: 'string', description: 'Why this timer is being set - included when it fires' },
193
+ intervalMs: { type: 'number', description: 'If set, timer will automatically reschedule at this interval after each fire. Use this for recurring tasks like periodic monitoring.' }
194
+ },
195
+ required: ['delayMs', 'reason']
196
+ }
197
+ });
198
+ tools.push({
199
+ name: 'cancel_timer',
200
+ description: 'Cancel a previously set timer.',
201
+ input_schema: {
202
+ type: 'object',
203
+ properties: {
204
+ timerId: { type: 'string', description: 'ID of the timer to cancel' }
205
+ },
206
+ required: ['timerId']
207
+ }
208
+ });
209
+ tools.push({
210
+ name: 'subscribe_to_events',
211
+ description: "Subscribe to events from a component. You will be notified when events occur. IMPORTANT: (1) Use workflow_listComponents or list_components tool first to discover valid component IDs. (2) Use listComponentEvents to discover available event types, then specify eventTypes to filter - this is recommended as some events like metrics_updated fire frequently and can be noisy.",
212
+ input_schema: {
213
+ type: 'object',
214
+ properties: {
215
+ componentId: { type: 'string', description: 'ID of the component to subscribe to - must be an exact ID from the workflow' },
216
+ eventTypes: {
217
+ type: 'array',
218
+ items: { type: 'string' },
219
+ description: 'Whitelist of event types to receive (recommended). If omitted, ALL events are forwarded including high-frequency ones like metrics_updated. Use listComponentEvents tool to discover available event types.'
220
+ }
221
+ },
222
+ required: ['componentId']
223
+ }
224
+ });
225
+ tools.push({
226
+ name: 'unsubscribe',
227
+ description: "Unsubscribe from a component's events.",
228
+ input_schema: {
229
+ type: 'object',
230
+ properties: {
231
+ subscriptionId: { type: 'string', description: 'ID of the subscription to remove' }
232
+ },
233
+ required: ['subscriptionId']
234
+ }
235
+ });
236
+ tools.push({
237
+ name: 'store_memory',
238
+ description: 'Store information in working memory for future reference.',
239
+ input_schema: {
240
+ type: 'object',
241
+ properties: {
242
+ key: { type: 'string', description: 'Key to store the value under' },
243
+ value: { type: 'string', description: 'Value to store' }
244
+ },
245
+ required: ['key', 'value']
246
+ }
247
+ });
248
+ tools.push({
249
+ name: 'recall_memory',
250
+ description: 'Retrieve information from working memory.',
251
+ input_schema: {
252
+ type: 'object',
253
+ properties: {
254
+ key: { type: 'string', description: 'Key to retrieve' }
255
+ },
256
+ required: ['key']
257
+ }
258
+ });
259
+ if (this.runtimeToolsAdded) {
260
+ const llmService = this.runtime.llm;
261
+ const availableTools = llmService.getAvailableTools();
262
+ (0, logging_1.debuglog)("Adding runtime tools", {
263
+ agentId: this.cfg.id,
264
+ toolCount: availableTools.length,
265
+ toolNames: availableTools.map(t => t.name)
266
+ });
267
+ for (const tool of availableTools) {
268
+ tools.push({
269
+ name: tool.name,
270
+ description: tool.description,
271
+ input_schema: tool.inputSchema
272
+ });
273
+ }
274
+ }
275
+ this.cachedTools = tools;
276
+ return tools;
277
+ }
278
+ async executeAgentTool(toolName, args) {
279
+ (0, logging_1.debuglog)("Executing tool", { agentId: this.cfg.id, toolName, args });
280
+ switch (toolName) {
281
+ case 'set_timer': {
282
+ const { delayMs, reason, intervalMs } = args;
283
+ const timerId = this.timerManager.setTimer(delayMs, reason, intervalMs);
284
+ if (!timerId) {
285
+ return { status: 'error', error: 'Max timers reached' };
286
+ }
287
+ this.runtime.updates.raiseEvent({
288
+ type: 'timer_set',
289
+ timerId,
290
+ delayMs,
291
+ reason,
292
+ intervalMs
293
+ });
294
+ this.runtime.updates.update({
295
+ activeTimerCount: this.timerManager.getCount()
296
+ });
297
+ const response = { status: 'scheduled', timerId, firesIn: `${delayMs}ms` };
298
+ if (intervalMs) {
299
+ response.recurring = true;
300
+ response.interval = `${intervalMs}ms`;
301
+ }
302
+ return response;
303
+ }
304
+ case 'cancel_timer': {
305
+ const { timerId } = args;
306
+ const cancelled = this.timerManager.cancelTimer(timerId);
307
+ if (cancelled) {
308
+ this.runtime.updates.raiseEvent({
309
+ type: 'timer_cancelled',
310
+ timerId
311
+ });
312
+ this.runtime.updates.update({
313
+ activeTimerCount: this.timerManager.getCount()
314
+ });
315
+ }
316
+ return { status: cancelled ? 'cancelled' : 'not_found', timerId };
317
+ }
318
+ case 'subscribe_to_events': {
319
+ const { componentId, eventTypes } = args;
320
+ const component = this.runtime.shared.findComponent(componentId);
321
+ if (!component) {
322
+ return {
323
+ status: 'error',
324
+ error: `Component '${componentId}' not found in workflow. Use workflow_listComponents or list_components tool to discover valid component IDs.`
325
+ };
326
+ }
327
+ const subscriptionId = this.eventManager.addSubscription(componentId, eventTypes);
328
+ if (!subscriptionId) {
329
+ return { status: 'error', error: 'Max subscriptions reached or already subscribed' };
330
+ }
331
+ this.runtime.updates.raiseEvent({
332
+ type: 'subscription_added',
333
+ subscriptionId,
334
+ componentId
335
+ });
336
+ this.runtime.updates.update({
337
+ activeSubscriptionCount: this.eventManager.getCount()
338
+ });
339
+ return { status: 'subscribed', subscriptionId, componentId, eventTypes: eventTypes ?? 'all' };
340
+ }
341
+ case 'unsubscribe': {
342
+ const { subscriptionId } = args;
343
+ const removed = this.eventManager.removeSubscription(subscriptionId);
344
+ if (removed) {
345
+ this.runtime.updates.raiseEvent({
346
+ type: 'subscription_removed',
347
+ subscriptionId
348
+ });
349
+ this.runtime.updates.update({
350
+ activeSubscriptionCount: this.eventManager.getCount()
351
+ });
352
+ }
353
+ return { status: removed ? 'unsubscribed' : 'not_found', subscriptionId };
354
+ }
355
+ case 'store_memory': {
356
+ const { key, value } = args;
357
+ const stored = this.memoryManager.set(key, value);
358
+ return { status: stored ? 'stored' : 'failed', key };
359
+ }
360
+ case 'recall_memory': {
361
+ const { key } = args;
362
+ const value = this.memoryManager.get(key);
363
+ return { status: value !== undefined ? 'found' : 'not_found', key, value };
364
+ }
365
+ default: {
366
+ const llmService = this.runtime.llm;
367
+ const result = await llmService.executeTool(toolName, args);
368
+ const MAX_RESULT_LENGTH = 32000;
369
+ if (typeof result === 'string' && result.length > MAX_RESULT_LENGTH) {
370
+ return result.substring(0, MAX_RESULT_LENGTH) + '\n\n[TRUNCATED - result was ' + result.length + ' characters]';
371
+ }
372
+ return result;
373
+ }
374
+ }
375
+ }
376
+ async invokeAgent(message, trigger) {
377
+ if (!this.client) {
378
+ throw new Error('Anthropic client not initialized');
379
+ }
380
+ if (this.invocationLock) {
381
+ (0, logging_1.debuglog)("Skipping invocation - another invocation in progress", {
382
+ agentId: this.cfg.id,
383
+ triggerType: trigger.type
384
+ });
385
+ return 'skipped-concurrent';
386
+ }
387
+ this.invocationLock = true;
388
+ this.sanitizeConversationHistory();
389
+ (0, logging_1.debuglog)("invokeAgent starting", {
390
+ agentId: this.cfg.id,
391
+ triggerType: trigger.type,
392
+ triggerSource: trigger.source,
393
+ message: message.substring(0, 100)
394
+ });
395
+ const invocationId = this.invocationTracker.startInvocation(trigger, message);
396
+ this.currentTriggerType = trigger.type;
397
+ this.currentTriggerSource = trigger.source;
398
+ this.runtime.updates.raiseEvent({
399
+ type: 'agent_invoked',
400
+ trigger: trigger.type,
401
+ prompt: message
402
+ });
403
+ this.runtime.updates.update({
404
+ status: 'thinking',
405
+ currentTask: message
406
+ });
407
+ try {
408
+ const tools = this.buildTools();
409
+ const systemPrompt = `${this.cfg.systemPrompt}
410
+
411
+ Your mission: ${this.cfg.mission}
412
+
413
+ Current context:
414
+ - Working memory: ${JSON.stringify(this.memoryManager.getAll())}
415
+ - Active timers: ${JSON.stringify(this.getTimersForState())}
416
+ - Subscriptions: ${JSON.stringify(this.eventManager.getActiveSubscriptions())}
417
+
418
+ When you receive events or timer notifications, evaluate them against your mission
419
+ and take appropriate action. Use tools to interact with the workflow.`;
420
+ this.conversationHistory.push({
421
+ role: 'user',
422
+ content: message
423
+ });
424
+ let finalResult = '';
425
+ let stepCount = 0;
426
+ const maxSteps = this.cfg.maxStepsPerInvocation ?? 20;
427
+ while (stepCount < maxSteps) {
428
+ stepCount++;
429
+ const response = await this.client.messages.create({
430
+ model: this.cfg.model || 'claude-sonnet-4-20250514',
431
+ max_tokens: 4096,
432
+ system: systemPrompt,
433
+ tools,
434
+ messages: this.conversationHistory
435
+ });
436
+ const toolUseBlocks = response.content.filter((block) => block.type === 'tool_use');
437
+ const textBlocks = response.content.filter((block) => block.type === 'text');
438
+ if (textBlocks.length > 0) {
439
+ finalResult = textBlocks.map(b => b.text).join('\n');
440
+ }
441
+ if (toolUseBlocks.length === 0) {
442
+ this.conversationHistory.push({
443
+ role: 'assistant',
444
+ content: response.content
445
+ });
446
+ break;
447
+ }
448
+ this.conversationHistory.push({
449
+ role: 'assistant',
450
+ content: response.content
451
+ });
452
+ const toolResults = [];
453
+ for (const toolUse of toolUseBlocks) {
454
+ const args = toolUse.input;
455
+ try {
456
+ const result = await this.executeAgentTool(toolUse.name, args);
457
+ this.invocationTracker.recordToolCall(toolUse.name, args, typeof result === 'string' ? result : JSON.stringify(result), true);
458
+ toolResults.push({
459
+ type: 'tool_result',
460
+ tool_use_id: toolUse.id,
461
+ content: typeof result === 'string' ? result : JSON.stringify(result)
462
+ });
463
+ }
464
+ catch (error) {
465
+ const errorMessage = error instanceof Error ? error.message : String(error);
466
+ this.invocationTracker.recordToolCall(toolUse.name, args, `Error: ${errorMessage}`, false);
467
+ toolResults.push({
468
+ type: 'tool_result',
469
+ tool_use_id: toolUse.id,
470
+ content: `Error: ${errorMessage}`,
471
+ is_error: true
472
+ });
473
+ }
474
+ }
475
+ this.conversationHistory.push({
476
+ role: 'user',
477
+ content: toolResults
478
+ });
479
+ }
480
+ const MAX_HISTORY = 50;
481
+ if (this.conversationHistory.length > MAX_HISTORY) {
482
+ this.conversationHistory = this.conversationHistory.slice(-MAX_HISTORY);
483
+ }
484
+ this.invocationTracker.completeInvocation(finalResult);
485
+ this.runtime.updates.update({
486
+ status: 'idle',
487
+ currentTask: undefined,
488
+ invocationCount: (this.runtime.updates.latest().invocationCount ?? 0) + 1,
489
+ lastActivity: new Date().toISOString()
490
+ });
491
+ this.runtime.updates.raiseEvent({
492
+ type: 'agent_completed',
493
+ invocationId,
494
+ result: finalResult,
495
+ toolsUsed: this.invocationTracker.getInvocation(invocationId)?.toolCalls.map(t => t.toolName)
496
+ });
497
+ return invocationId;
498
+ }
499
+ catch (error) {
500
+ const errorMessage = error instanceof Error ? error.message : String(error);
501
+ (0, logging_1.errorlog)("Agent invocation failed", { agentId: this.cfg.id, error: errorMessage });
502
+ this.invocationTracker.completeInvocation(`Error: ${errorMessage}`);
503
+ this.runtime.updates.update({
504
+ status: 'error',
505
+ currentTask: undefined,
506
+ errorMessage
507
+ });
508
+ this.runtime.updates.raiseEvent({
509
+ type: 'error_occurred',
510
+ error: errorMessage
511
+ });
512
+ return invocationId;
513
+ }
514
+ finally {
515
+ this.invocationLock = false;
516
+ }
517
+ }
518
+ sanitizeConversationHistory() {
519
+ if (this.conversationHistory.length === 0)
520
+ return;
521
+ const lastMessage = this.conversationHistory[this.conversationHistory.length - 1];
522
+ if (lastMessage.role === 'assistant' && Array.isArray(lastMessage.content)) {
523
+ const hasToolUse = lastMessage.content.some((block) => 'type' in block && block.type === 'tool_use');
524
+ if (hasToolUse) {
525
+ (0, logging_1.debuglog)("Removing dangling assistant message with tool_use", { agentId: this.cfg.id });
526
+ this.conversationHistory.pop();
527
+ this.sanitizeConversationHistory();
528
+ }
529
+ }
530
+ }
531
+ getTimersForState() {
532
+ const timers = {};
533
+ for (const timer of this.timerManager.getActiveTimers()) {
534
+ timers[timer.id] = {
535
+ reason: timer.reason,
536
+ firesAt: timer.firesAt
537
+ };
538
+ }
539
+ return timers;
540
+ }
541
+ handleCommand(command) {
542
+ switch (command.type) {
543
+ case 'send_prompt':
544
+ void this.invokeAgent(command.prompt, { type: 'user_command', source: 'command' });
545
+ break;
546
+ case 'cancel_current':
547
+ this.invocationTracker.cancelInvocation();
548
+ break;
549
+ case 'clear_memory':
550
+ this.memoryManager.clear();
551
+ break;
552
+ case 'clear_timers':
553
+ this.timerManager.cancelAll();
554
+ this.runtime.updates.update({
555
+ activeTimerCount: 0
556
+ });
557
+ break;
558
+ case 'clear_subscriptions':
559
+ this.eventManager.removeAll();
560
+ this.runtime.updates.update({
561
+ activeSubscriptionCount: 0
562
+ });
563
+ break;
564
+ }
565
+ }
566
+ }
567
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/util.claudeAgent/runtime.ts"],"names":[],"mappings":"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"}