mandala-computer-mcp 0.3.0 → 0.5.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 (130) hide show
  1. package/README.md +462 -37
  2. package/dist/api.d.ts +12 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +262 -42
  5. package/dist/api.js.map +1 -1
  6. package/dist/artifacts.d.ts +63 -0
  7. package/dist/artifacts.d.ts.map +1 -0
  8. package/dist/artifacts.js +81 -0
  9. package/dist/artifacts.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +35 -21
  13. package/dist/cli.js.map +1 -1
  14. package/dist/credentials.d.ts +33 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +395 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/errors.d.ts +53 -10
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +122 -35
  21. package/dist/errors.js.map +1 -1
  22. package/dist/events.d.ts +11 -2
  23. package/dist/events.d.ts.map +1 -1
  24. package/dist/events.js +213 -95
  25. package/dist/events.js.map +1 -1
  26. package/dist/executions.d.ts +43 -0
  27. package/dist/executions.d.ts.map +1 -0
  28. package/dist/executions.js +162 -0
  29. package/dist/executions.js.map +1 -0
  30. package/dist/format.d.ts +11 -11
  31. package/dist/format.d.ts.map +1 -1
  32. package/dist/format.js +159 -16
  33. package/dist/format.js.map +1 -1
  34. package/dist/http.d.ts.map +1 -1
  35. package/dist/http.js +4 -0
  36. package/dist/http.js.map +1 -1
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/limits.d.ts +17 -0
  42. package/dist/limits.d.ts.map +1 -0
  43. package/dist/limits.js +17 -0
  44. package/dist/limits.js.map +1 -0
  45. package/dist/paths.d.ts +42 -2
  46. package/dist/paths.d.ts.map +1 -1
  47. package/dist/paths.js +54 -3
  48. package/dist/paths.js.map +1 -1
  49. package/dist/poll.d.ts +5 -1
  50. package/dist/poll.d.ts.map +1 -1
  51. package/dist/poll.js +120 -16
  52. package/dist/poll.js.map +1 -1
  53. package/dist/results.d.ts +97 -0
  54. package/dist/results.d.ts.map +1 -0
  55. package/dist/results.js +263 -0
  56. package/dist/results.js.map +1 -0
  57. package/dist/server.d.ts +3 -2
  58. package/dist/server.d.ts.map +1 -1
  59. package/dist/server.js +61 -9
  60. package/dist/server.js.map +1 -1
  61. package/dist/stdio.d.ts +5 -1
  62. package/dist/stdio.d.ts.map +1 -1
  63. package/dist/stdio.js +10 -4
  64. package/dist/stdio.js.map +1 -1
  65. package/dist/tool-filters.d.ts +38 -0
  66. package/dist/tool-filters.d.ts.map +1 -0
  67. package/dist/tool-filters.js +129 -0
  68. package/dist/tool-filters.js.map +1 -0
  69. package/dist/tools/account.d.ts +3 -0
  70. package/dist/tools/account.d.ts.map +1 -0
  71. package/dist/tools/account.js +122 -0
  72. package/dist/tools/account.js.map +1 -0
  73. package/dist/tools/activities.d.ts +3 -0
  74. package/dist/tools/activities.d.ts.map +1 -0
  75. package/dist/tools/activities.js +140 -0
  76. package/dist/tools/activities.js.map +1 -0
  77. package/dist/tools/agent.d.ts.map +1 -1
  78. package/dist/tools/agent.js +72 -5
  79. package/dist/tools/agent.js.map +1 -1
  80. package/dist/tools/artifacts.d.ts +3 -0
  81. package/dist/tools/artifacts.d.ts.map +1 -0
  82. package/dist/tools/artifacts.js +97 -0
  83. package/dist/tools/artifacts.js.map +1 -0
  84. package/dist/tools/chat.d.ts +6 -0
  85. package/dist/tools/chat.d.ts.map +1 -0
  86. package/dist/tools/chat.js +192 -0
  87. package/dist/tools/chat.js.map +1 -0
  88. package/dist/tools/computers.d.ts.map +1 -1
  89. package/dist/tools/computers.js +300 -247
  90. package/dist/tools/computers.js.map +1 -1
  91. package/dist/tools/directory.d.ts +13 -0
  92. package/dist/tools/directory.d.ts.map +1 -0
  93. package/dist/tools/directory.js +88 -0
  94. package/dist/tools/directory.js.map +1 -0
  95. package/dist/tools/events.d.ts.map +1 -1
  96. package/dist/tools/events.js +66 -22
  97. package/dist/tools/events.js.map +1 -1
  98. package/dist/tools/executions.d.ts +3 -0
  99. package/dist/tools/executions.d.ts.map +1 -0
  100. package/dist/tools/executions.js +87 -0
  101. package/dist/tools/executions.js.map +1 -0
  102. package/dist/tools/guest.d.ts.map +1 -1
  103. package/dist/tools/guest.js +57 -17
  104. package/dist/tools/guest.js.map +1 -1
  105. package/dist/tools/input.d.ts.map +1 -1
  106. package/dist/tools/input.js +63 -5
  107. package/dist/tools/input.js.map +1 -1
  108. package/dist/tools/results.d.ts +30 -0
  109. package/dist/tools/results.d.ts.map +1 -0
  110. package/dist/tools/results.js +106 -0
  111. package/dist/tools/results.js.map +1 -0
  112. package/dist/tools/secrets.d.ts +58 -0
  113. package/dist/tools/secrets.d.ts.map +1 -0
  114. package/dist/tools/secrets.js +204 -0
  115. package/dist/tools/secrets.js.map +1 -0
  116. package/dist/tools/signals.d.ts +3 -0
  117. package/dist/tools/signals.d.ts.map +1 -0
  118. package/dist/tools/signals.js +116 -0
  119. package/dist/tools/signals.js.map +1 -0
  120. package/dist/tools/snapshots.d.ts.map +1 -1
  121. package/dist/tools/snapshots.js +213 -167
  122. package/dist/tools/snapshots.js.map +1 -1
  123. package/dist/tools/ssh.d.ts +3 -0
  124. package/dist/tools/ssh.d.ts.map +1 -0
  125. package/dist/tools/ssh.js +186 -0
  126. package/dist/tools/ssh.js.map +1 -0
  127. package/dist/tools/templates.d.ts.map +1 -1
  128. package/dist/tools/templates.js +9 -13
  129. package/dist/tools/templates.js.map +1 -1
  130. package/package.json +1 -1
@@ -0,0 +1,129 @@
1
+ /** Tags describe capabilities, not whether calling a tool is safe. */
2
+ export const TOOL_TAGS = {
3
+ account: ['get_account'],
4
+ agent: ['run_agent', 'run_agent_chat'],
5
+ activities: ['list_activities', 'get_activity', 'get_activity_results'],
6
+ signals: ['read_signals'],
7
+ artifacts: ['publish_artifact', 'get_artifact', 'read_artifact', 'delete_artifact'],
8
+ computers: [
9
+ 'list_computers',
10
+ 'get_computer',
11
+ 'use_computer',
12
+ 'wait_for_computer',
13
+ 'get_desktop_url',
14
+ 'list_sizes',
15
+ ],
16
+ events: ['wait_for_event', 'poll_events', 'wait_for_file_change'],
17
+ executions: ['get_execution', 'read_execution_output'],
18
+ files: ['list_directory', 'read_file', 'write_file', 'wait_for_file_change'],
19
+ guest: [
20
+ 'exec',
21
+ 'exec_poll',
22
+ 'exec_kill',
23
+ 'open_url',
24
+ 'list_windows',
25
+ 'window_action',
26
+ 'read_clipboard',
27
+ 'write_clipboard',
28
+ ],
29
+ input: [
30
+ 'screenshot',
31
+ 'click',
32
+ 'type_text',
33
+ 'press_key',
34
+ 'scroll',
35
+ 'drag',
36
+ 'move_mouse',
37
+ 'mouse_button',
38
+ 'cursor_position',
39
+ 'wait',
40
+ ],
41
+ lifecycle: [
42
+ 'create_computer',
43
+ 'start_computer',
44
+ 'stop_computer',
45
+ 'suspend_computer',
46
+ 'restart_computer',
47
+ 'update_computer',
48
+ 'clone_computer',
49
+ 'delete_computer',
50
+ 'move_computer',
51
+ 'list_moves',
52
+ ],
53
+ results: [
54
+ 'get_activity_results',
55
+ 'retain_execution_output',
56
+ 'get_result',
57
+ 'read_result_output',
58
+ 'delete_result',
59
+ ],
60
+ snapshots: [
61
+ 'list_snapshots',
62
+ 'snapshot_holdings',
63
+ 'create_snapshot',
64
+ 'restore_snapshot',
65
+ 'clone_snapshot',
66
+ 'snapshot_schedule',
67
+ 'get_retention',
68
+ 'delete_snapshot',
69
+ ],
70
+ templates: [
71
+ 'list_templates',
72
+ 'get_template_schema',
73
+ 'check_template',
74
+ 'publish_template',
75
+ 'get_template',
76
+ 'retire_template',
77
+ 'build_template',
78
+ 'list_builds',
79
+ 'get_build',
80
+ 'watch_build',
81
+ ],
82
+ secrets: ['get_computer_secrets', 'set_computer_secrets'],
83
+ ssh: ['list_ssh_keys', 'add_ssh_key', 'remove_ssh_key', 'get_computer_ssh', 'set_computer_ssh'],
84
+ usage: ['get_usage'],
85
+ webhooks: [
86
+ 'list_webhooks',
87
+ 'create_webhook',
88
+ 'get_webhook',
89
+ 'update_webhook',
90
+ 'rotate_webhook_secret',
91
+ 'test_webhook',
92
+ 'list_webhook_deliveries',
93
+ 'delete_webhook',
94
+ ],
95
+ };
96
+ export const VALID_TAGS = Object.keys(TOOL_TAGS).sort();
97
+ function validateTags(tags) {
98
+ const names = [...new Set(tags.map((tag) => tag.trim()).filter(Boolean))];
99
+ for (const name of names) {
100
+ if (!Object.hasOwn(TOOL_TAGS, name)) {
101
+ throw new Error(`Unknown MANDALA_TAGS tag "${name}". Valid tags (lowercase only): ${VALID_TAGS.join(', ')}`);
102
+ }
103
+ }
104
+ return names;
105
+ }
106
+ export function parseToolTags(raw) {
107
+ return validateTags(raw?.split(',') ?? []);
108
+ }
109
+ /** Validate before constructing the session; never infer read-only from a name or verb. */
110
+ export function toolFilter(cfg) {
111
+ if (cfg.readOnly !== undefined && typeof cfg.readOnly !== 'boolean') {
112
+ throw new Error('readOnly must be a boolean');
113
+ }
114
+ const tags = validateTags(cfg.tags ?? []);
115
+ const selected = new Set(tags.flatMap((tag) => [...TOOL_TAGS[tag]]));
116
+ const known = new Set(Object.values(TOOL_TAGS).flat());
117
+ const readOnly = cfg.readOnly === true;
118
+ return {
119
+ filtered: readOnly || tags.length > 0,
120
+ allows: (name, annotations) => {
121
+ // Even unfiltered startup must fail when a new tool lacks a tag, instead
122
+ // of silently hiding it only for clients who use filters.
123
+ if (!known.has(name))
124
+ throw new Error(`Tool "${name}" has no tag in TOOL_TAGS`);
125
+ return ((!tags.length || selected.has(name)) && (!readOnly || annotations?.readOnlyHint === true));
126
+ },
127
+ };
128
+ }
129
+ //# sourceMappingURL=tool-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-filters.js","sourceRoot":"","sources":["../src/tool-filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registrar } from './types.js';
2
+ export declare const registerAccount: Registrar;
3
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4E5C,eAAO,MAAM,eAAe,EAAE,SAoD7B,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { z } from 'zod';
2
+ import { APIError } from '../errors.js';
3
+ import { said } from '../format.js';
4
+ import * as P from '../paths.js';
5
+ import { count, label, metadata, metadataCall } from './directory.js';
6
+ import { readAnnotations } from './results.js';
7
+ // Every object projects only its public fields; a malformed report never becomes zero usage.
8
+ const report = z
9
+ .object({
10
+ scope: z.literal('account'),
11
+ advisory: z.literal(true),
12
+ observed_at: z.string().datetime(),
13
+ plan: z.object({ id: label, label }),
14
+ limits: z.object({
15
+ max_computers: count,
16
+ vcpu_pool: count,
17
+ ram_pool_mb: count,
18
+ disk_pool_gb: count,
19
+ snapshot_storage_bytes: count,
20
+ }),
21
+ per_computer: z.object({ max_vcpu: count, max_ram_mb: count, max_disk_gb: count }),
22
+ capabilities: z.object({ windows: z.boolean() }),
23
+ complete: z.object({ computers: z.boolean(), snapshots: z.boolean() }),
24
+ usage: z.object({
25
+ kept_computers: count.nullable(),
26
+ configured_vcpu: count.nullable(),
27
+ configured_disk_gb: count.nullable(),
28
+ running_or_reserved_computers: count.nullable(),
29
+ running_or_reserved_vcpu: count.nullable(),
30
+ running_or_reserved_ram_mb: count.nullable(),
31
+ snapshot_storage_bytes: count.nullable(),
32
+ }),
33
+ remaining: z.object({
34
+ kept_computers: count.nullable(),
35
+ configured_vcpu: count.nullable(),
36
+ configured_disk_gb: count.nullable(),
37
+ running_or_reserved_ram_mb: count.nullable(),
38
+ snapshot_storage_bytes: count.nullable(),
39
+ }),
40
+ })
41
+ .refine((data) => {
42
+ for (const group of [data.usage, data.remaining]) {
43
+ for (const [field, value] of Object.entries(group)) {
44
+ const complete = field === 'snapshot_storage_bytes' ? data.complete.snapshots : data.complete.computers;
45
+ if (complete !== (value !== null))
46
+ return false;
47
+ }
48
+ }
49
+ if (data.complete.computers) {
50
+ // Nullability was checked above. These are relationships within one observation,
51
+ // independent of plan ceilings: a consistent account can still be over quota.
52
+ const kept = data.usage.kept_computers;
53
+ const cpu = data.usage.configured_vcpu;
54
+ const disk = data.usage.configured_disk_gb;
55
+ const active = data.usage.running_or_reserved_computers;
56
+ const activeCPU = data.usage.running_or_reserved_vcpu;
57
+ const activeRAM = data.usage.running_or_reserved_ram_mb;
58
+ if (active > kept || activeCPU > cpu)
59
+ return false;
60
+ // Equal counts mean both CPU sums cover every kept computer.
61
+ if (active === kept && activeCPU !== cpu)
62
+ return false;
63
+ if (kept === 0 && (cpu !== 0 || disk !== 0))
64
+ return false;
65
+ if (active === 0 && (activeCPU !== 0 || activeRAM !== 0))
66
+ return false;
67
+ // Each active computer contributes positive integer MB, but its CPU may be zero.
68
+ if (activeRAM < active)
69
+ return false;
70
+ }
71
+ const ceilings = {
72
+ kept_computers: data.limits.max_computers,
73
+ configured_vcpu: data.limits.vcpu_pool,
74
+ configured_disk_gb: data.limits.disk_pool_gb,
75
+ running_or_reserved_ram_mb: data.limits.ram_pool_mb,
76
+ snapshot_storage_bytes: data.limits.snapshot_storage_bytes,
77
+ };
78
+ for (const field of Object.keys(ceilings)) {
79
+ const used = data.usage[field];
80
+ if (used !== null && data.remaining[field] !== Math.max(0, ceilings[field] - used))
81
+ return false;
82
+ }
83
+ return true;
84
+ });
85
+ export const registerAccount = (server, session) => {
86
+ server.registerTool('get_account', {
87
+ title: 'Read current account quota',
88
+ description: 'Read account-wide plan ceilings, per-computer maxima, current consumption and advisory remaining quota. Viewer or stronger; workspace-scoped keys receive aggregates without resource identities. No arguments, selected computer or model key. Incomplete computer/snapshot groups have null consumption and remaining values, meaning unknown. Snapshot headroom covers indexed stored bytes, excludes in-flight capture reservations and cannot promise that a capture will fit. This observation reserves nothing; later mutations still enforce quota.',
89
+ inputSchema: z.object({}).strict(),
90
+ annotations: readAnnotations,
91
+ }, (_args, extra) => metadataCall(async () => {
92
+ let raw;
93
+ try {
94
+ raw = await session.api.json('GET', P.ACCOUNT, { signal: extra.signal });
95
+ }
96
+ catch (error) {
97
+ if (error instanceof APIError) {
98
+ const refusal = z.object({ error: label.optional() }).safeParse(error.body);
99
+ throw new APIError(refusal.success && refusal.data.error
100
+ ? refusal.data.error
101
+ : 'Account quota request failed', error.status, error.body, error.retryAfterMs, error);
102
+ }
103
+ // JSON decoding failures can carry raw response text. Never print that text here.
104
+ throw new Error(extra.signal.aborted
105
+ ? 'Account quota read cancelled; no report was established.'
106
+ : 'Account quota could not be read; consumption and remaining quota are unknown.');
107
+ }
108
+ const data = metadata(report, raw);
109
+ const unknown = [
110
+ ...(!data.complete.computers ? ['computer'] : []),
111
+ ...(!data.complete.snapshots ? ['snapshot'] : []),
112
+ ];
113
+ return said((unknown.length
114
+ ? `UNKNOWN ${unknown.join(' and ')} consumption and remaining quota: null is not zero. `
115
+ : '') +
116
+ 'ADVISORY account observation; this reserves nothing and does not guarantee a later request will fit. ' +
117
+ 'Snapshot headroom is against indexed stored bytes only; in-flight capture reservations are not included. ' +
118
+ 'Configured CPU/disk cover kept computers; running or reserved RAM includes current reservations. ' +
119
+ 'Units are CPU, MB, GB and snapshot bytes as named. Use get_usage for historical metered consumption.', data);
120
+ }));
121
+ };
122
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registrar } from './types.js';
2
+ export declare const registerActivities: Registrar;
3
+ //# sourceMappingURL=activities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activities.d.ts","sourceRoot":"","sources":["../../src/tools/activities.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmG5C,eAAO,MAAM,kBAAkB,EAAE,SA+EhC,CAAC"}
@@ -0,0 +1,140 @@
1
+ import { z } from 'zod';
2
+ import { said } from '../format.js';
3
+ import * as P from '../paths.js';
4
+ import { count, executionId, exitCode, label, metadata, metadataCall } from './directory.js';
5
+ import { computerSchema, readAnnotations } from './results.js';
6
+ const activityId = z.string().regex(/^act_[a-f0-9]{32}$/);
7
+ const identity = { computer_id: computerSchema, activity_id: activityId };
8
+ const record = z.object({
9
+ activity_id: activityId,
10
+ account_id: label,
11
+ computer_id: label,
12
+ workspace_id: label.nullable(),
13
+ channel: label,
14
+ route: label,
15
+ action: label,
16
+ state: z.enum(['pending', 'acknowledged', 'exited', 'accepted', 'refused', 'unknown']),
17
+ received_at: label,
18
+ observed_at: label,
19
+ revision: count.min(1).optional(),
20
+ has_results: z.boolean().optional(),
21
+ dispatched_at: label.optional(),
22
+ elapsed_ms: count.optional(),
23
+ reason: label.optional(),
24
+ http_status: z.number().int().min(100).max(599).optional(),
25
+ exit_code: exitCode.optional(),
26
+ execution_id: executionId.optional(),
27
+ });
28
+ const health = z.object({
29
+ recording_started_at: label,
30
+ earliest_retained_at: label.nullable(),
31
+ count_truncated: z.boolean(),
32
+ age_truncated: z.boolean(),
33
+ capture: z.enum(['available', 'degraded']),
34
+ completeness: z.literal('best-effort'),
35
+ gap_at: label.nullable(),
36
+ recovered_at: label.nullable(),
37
+ });
38
+ const page = z.object({
39
+ items: z.array(record),
40
+ next_cursor: label.nullable(),
41
+ changes_cursor: label,
42
+ gap: z.boolean(),
43
+ health,
44
+ });
45
+ const observation = z.discriminatedUnion('status', [
46
+ z.object({ status: z.literal('running') }),
47
+ z.object({ status: z.literal('exited'), exit_code: exitCode }),
48
+ ]);
49
+ const stream = (sync) => z.object({
50
+ bytes: count.max(4 * 1024 * 1024),
51
+ retained_truncated: z.boolean(),
52
+ upstream_truncated: sync ? z.boolean() : z.null(),
53
+ });
54
+ const link = (kind, association, fields) => {
55
+ const base = {
56
+ id: z.string().regex(kind === 'artifact' ? /^art_[a-f0-9]{32}$/ : /^res_[a-f0-9]{32}$/),
57
+ kind: z.literal(kind),
58
+ association: z.literal(association),
59
+ };
60
+ return z.discriminatedUnion('availability', [
61
+ z.object({ ...base, availability: z.literal('unavailable') }),
62
+ z.object({
63
+ ...base,
64
+ availability: z.literal('available'),
65
+ captured_at: label,
66
+ expires_at: label,
67
+ ...fields,
68
+ }),
69
+ ]);
70
+ };
71
+ const resultLinks = z.object({
72
+ activity_id: activityId,
73
+ revision: count.min(1),
74
+ more: z.boolean(),
75
+ items: z
76
+ .array(z.union([
77
+ link('artifact', 'caller_selected_artifact', { bytes: count }),
78
+ link('background-output', 'background_execution_output', {
79
+ stdout: stream(false),
80
+ stderr: stream(false),
81
+ diagnostic: z.object({ bytes: count.max(65536), truncated: z.boolean() }),
82
+ observation,
83
+ }),
84
+ link('synchronous-output', 'synchronous_exec_response', {
85
+ stdout: stream(true),
86
+ stderr: stream(true),
87
+ diagnostic: z.null(),
88
+ observation: z.object({ status: z.literal('exited'), exit_code: exitCode }),
89
+ }),
90
+ ]))
91
+ .max(8),
92
+ });
93
+ const historyNote = 'Selected, retained, best-effort request history; not all guest work or an agent identity. Accepted background work is not completed execution; a dispatched error may have had effects. Activity IDs identify requests, never idempotency keys.';
94
+ export const registerActivities = (server, session) => {
95
+ server.registerTool('list_activities', {
96
+ title: 'Read one activity history page',
97
+ description: `${historyNote} History is newest first with a fixed watermark. Changes include late final updates to older rows. No automatic paging. A gap requires refreshing history.`,
98
+ inputSchema: {
99
+ computer_id: computerSchema,
100
+ cursor: z.string().min(1).max(2048).optional(),
101
+ changes: z.boolean().optional(),
102
+ },
103
+ annotations: readAnnotations,
104
+ }, ({ computer_id, cursor, changes }, extra) => metadataCall(async () => {
105
+ if (changes && !cursor)
106
+ throw new Error('changes=true requires a cursor.');
107
+ const id = session.resolve(computer_id);
108
+ const data = metadata(page, await session.api.json('GET', P.activities(id), {
109
+ query: { cursor, ...(changes ? { changes: 1 } : {}) },
110
+ signal: extra.signal,
111
+ }));
112
+ if (data.items.some((item) => item.computer_id !== id))
113
+ throw new Error('Activity history did not match the requested computer.');
114
+ return said(`${data.gap ? 'GAP: discard the change cursor and refresh history. ' : ''}${historyNote}`, data);
115
+ }));
116
+ server.registerTool('get_activity', {
117
+ title: 'Read one activity record',
118
+ description: historyNote,
119
+ inputSchema: identity,
120
+ annotations: readAnnotations,
121
+ }, ({ computer_id, activity_id }, extra) => metadataCall(async () => {
122
+ const id = session.resolve(computer_id);
123
+ const data = metadata(record, await session.api.json('GET', P.activity(id, activity_id), { signal: extra.signal }));
124
+ if (data.activity_id !== activity_id || data.computer_id !== id)
125
+ throw new Error('Activity response did not match the requested identity.');
126
+ return said(historyNote, data);
127
+ }));
128
+ server.registerTool('get_activity_results', {
129
+ title: 'Read passive result links for an activity',
130
+ description: 'Metadata only: at most eight newest links. more has no cursor and does not mean all versions were returned. No content reads, guest files, captures, execution polling or downloads. An unavailable link is not empty content. Caller-selected artifact association does not prove creation or command success.',
131
+ inputSchema: identity,
132
+ annotations: readAnnotations,
133
+ }, ({ computer_id, activity_id }, extra) => metadataCall(async () => {
134
+ const data = metadata(resultLinks, await session.api.json('GET', P.activityResults(session.resolve(computer_id), activity_id), { signal: extra.signal }));
135
+ if (data.activity_id !== activity_id)
136
+ throw new Error('Result links did not match the requested activity.');
137
+ return said(`${data.more ? 'More versions exist; this endpoint has no continuation cursor. ' : ''}Result links are metadata only. Availability and association do not establish command success.`, data);
138
+ }));
139
+ };
140
+ //# sourceMappingURL=activities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activities.js","sourceRoot":"","sources":["../../src/tools/activities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC1E,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACtF,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,KAAK,CAAC,QAAQ,EAAE;IAC/B,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE;IACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC1D,SAAS,EAAE,QAAQ,CAAC,QAAQ,EAAE;IAC9B,YAAY,EAAE,WAAW,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AACH,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,oBAAoB,EAAE,KAAK;IAC3B,oBAAoB,EAAE,KAAK,CAAC,QAAQ,EAAE;IACtC,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE;IAC5B,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;IAC1B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC1C,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE;IACxB,YAAY,EAAE,KAAK,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AACH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE;IAC7B,cAAc,EAAE,KAAK;IACrB,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAChB,MAAM;CACP,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACjD,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1C,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;CAC/D,CAAC,CAAC;AACH,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,EAAE,CAC/B,CAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE;IAC/B,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;CAClD,CAAC,CAAC;AACL,MAAM,IAAI,GAAG,CACX,IAA6D,EAC7D,WAAmB,EACnB,MAAqB,EACrB,EAAE;IACF,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACvF,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;KACpC,CAAC;IACF,OAAO,CAAC,CAAC,kBAAkB,CAAC,cAAc,EAAE;QAC1C,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7D,CAAC,CAAC,MAAM,CAAC;YACP,GAAG,IAAI;YACP,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;YACpC,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,KAAK;YACjB,GAAG,MAAM;SACV,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,WAAW,EAAE,UAAU;IACvB,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IACjB,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,KAAK,CAAC;QACN,IAAI,CAAC,UAAU,EAAE,0BAA0B,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9D,IAAI,CAAC,mBAAmB,EAAE,6BAA6B,EAAE;YACvD,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACrB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC;YACrB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACzE,WAAW;SACZ,CAAC;QACF,IAAI,CAAC,oBAAoB,EAAE,2BAA2B,EAAE;YACtD,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;YACpB,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE;YACpB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;SAC5E,CAAC;KACH,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;CACV,CAAC,CAAC;AACH,MAAM,WAAW,GACf,iPAAiP,CAAC;AAEpP,MAAM,CAAC,MAAM,kBAAkB,GAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;IAC/D,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EAAE,GAAG,WAAW,4JAA4J;QACvL,WAAW,EAAE;YACX,WAAW,EAAE,cAAc;YAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;YAC9C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SAChC;QACD,WAAW,EAAE,eAAe;KAC7B,EACD,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,CAC1C,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI,OAAO,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC3E,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CACnB,IAAI,EACJ,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE;YAC9C,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACrD,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CACH,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,OAAO,IAAI,CACT,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,sDAAsD,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,EACzF,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE,WAAW;QACxB,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,eAAe;KAC7B,EACD,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,CACtC,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CACnB,MAAM,EACN,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CACrF,CAAC;QACF,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,EAAE;YAC7D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CACL,CAAC;IACF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,2CAA2C;QAClD,WAAW,EACT,iTAAiT;QACnT,WAAW,EAAE,QAAQ;QACrB,WAAW,EAAE,eAAe;KAC7B,EACD,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,CACtC,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,IAAI,GAAG,QAAQ,CACnB,WAAW,EACX,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CACpB,KAAK,EACL,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EAC5D,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACzB,CACF,CAAC;QACF,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW;YAClC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,OAAO,IAAI,CACT,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iEAAiE,CAAC,CAAC,CAAC,EAAE,gGAAgG,EACrL,IAAI,CACL,CAAC;IACJ,CAAC,CAAC,CACL,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,EAAE,SAqJ3B,CAAC"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,EAAE,SAmL3B,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { z } from 'zod';
2
2
  import { MODEL_KEY_HEADER } from '../api.js';
3
- import { guarded, refused, said } from '../format.js';
3
+ import { APIError, authenticationAdvice, platformSaid } from '../errors.js';
4
+ import { errorMetadata, guarded, refused, said, withErrorMetadata } from '../format.js';
4
5
  import * as P from '../paths.js';
6
+ import { safeResult } from './chat.js';
5
7
  /**
6
8
  * The platform's own agent loop, as one tool.
7
9
  *
@@ -34,7 +36,7 @@ export const registerAgent = (server, session) => {
34
36
  .min(1)
35
37
  .max(100)
36
38
  .default(20)
37
- .describe('Each step is a model call plus a screenshot on your key, so this is a spending cap as much as a loop bound.'),
39
+ .describe('How many ACTIONS the loop may take on the desktop. Not a count of model calls and not a proxy for what your key is billed: one model reply can ask for several actions and spends a step on each, a paused turn is resubmitted for tokens and no step, and a bash call or a cursor read takes no screenshot. So a run can make more model calls than steps AND more steps than screenshots — bound the work with this, and budget the bill on the key itself. Defaults to 20 and is capped at 100 here, so a larger value is refused before the call rather than after it.'),
38
40
  },
39
41
  annotations: { openWorldHint: true },
40
42
  }, ({ computer_id, prompt, system, max_steps }, extra) => guarded(async () => {
@@ -60,7 +62,7 @@ export const registerAgent = (server, session) => {
60
62
  // shared/protocol.js resets a pending request's timer, and
61
63
  // `notifications/message` — what sendLoggingMessage emits — never
62
64
  // touches it. This tool had only the logging half, so a run of the
63
- // default 20 steps, each a model call plus a screenshot, sailed past
65
+ // default 20 steps, most of them a model call and a screenshot, sailed past
64
66
  // the client's 60s default and was cancelled while the platform went
65
67
  // on driving the desktop on the caller's own Anthropic key.
66
68
  //
@@ -122,7 +124,27 @@ export const registerAgent = (server, session) => {
122
124
  // level from a run that worked — a caller checking whether the step
123
125
  // succeeded would read this one as a success that happened to have
124
126
  // a discouraging sentence in it.
125
- return refused(`The run failed after ${steps.length} step(s).`, ev.data);
127
+ //
128
+ // And it has to say WHY in words, because this is the one place a
129
+ // status cannot be read off the response: the platform answered 200
130
+ // before the first step, so a run stopped by the credential, the role
131
+ // or the plan arrives as a frame in a successful stream. A model
132
+ // handed "the run failed" and a JSON blob does the natural thing,
133
+ // which is to call this tool again with the same prompt — paying for
134
+ // every completed step a second time to be refused the same way.
135
+ const frame = isRecord(ev.data) ? ev.data : {};
136
+ const diagnostic = new APIError('', typeof frame.status === 'number' ? frame.status : 0, frame);
137
+ return withErrorMetadata(refused(`The run failed after ${steps.length} step(s).${stopReason(ev.data)}` +
138
+ (steps.length ? `\n\nWhat it did, and is billed for:\n${steps.join('\n')}` : ''), {
139
+ error: platformSaid(frame),
140
+ status: errorMetadata({ status: frame.status }).fields.status,
141
+ steps: frame.steps,
142
+ usage: frame.usage,
143
+ }), {
144
+ status: frame.status,
145
+ reason: diagnostic.reason,
146
+ request_id: diagnostic.requestId,
147
+ });
126
148
  }
127
149
  }
128
150
  if (!done) {
@@ -153,7 +175,52 @@ export const registerAgent = (server, session) => {
153
175
  : JSON.stringify(done.text);
154
176
  const result = `${verdict}\n\n${text}\n\nWhat it did:\n${steps.join('\n')}`;
155
177
  return stop === 'end_turn' ? said(result, done) : refused(result, done);
156
- }));
178
+ }).then((result) => safeResult(result, session.modelKey)));
157
179
  };
180
+ /**
181
+ * What an `error` frame says about whether calling this tool again can work.
182
+ *
183
+ * Three of the statuses a run can stop on are about the CALLER rather than the
184
+ * computer — the credential stopped being accepted, the role or the account
185
+ * changed, the plan does not cover the work — and every one of them answers a
186
+ * second run the same way. They are also the three that can arrive with steps
187
+ * already completed and billed, which is what makes a retry expensive as well as
188
+ * useless. Each gets its own clause rather than one shared "auth" sentence: only
189
+ * the first is fixed by authenticating again, and telling the other two to try
190
+ * that is telling them to spend another run finding out it did not help.
191
+ *
192
+ * Anything else is left as the platform's own sentence. A run can fail for
193
+ * reasons that are worth another attempt, and inventing a verdict for a status
194
+ * this version has not been told about would be the same mistake in the other
195
+ * direction: the leading space is part of the returned clause so that an
196
+ * unclassified stop reads as one sentence rather than as a missing one.
197
+ */
198
+ function stopReason(data) {
199
+ const frame = isRecord(data) ? data : undefined;
200
+ const status = typeof frame?.status === 'number' ? frame.status : undefined;
201
+ const said = platformSaid(frame);
202
+ const why = said ? ` ${said}` : '';
203
+ // 401 and 403 are split, because the recovery is not the same one. A shared
204
+ // clause told a caller whose ROLE had been taken away to re-authenticate,
205
+ // which restores nothing and sends it round the same refusal with another
206
+ // prompt's worth of billed steps behind it (Codex review).
207
+ if (status === 401) {
208
+ const reason = new APIError('', status, frame).reason;
209
+ return (` HTTP ${status}: ${authenticationAdvice(reason)}.${why} Do NOT call run_agent again with the same` +
210
+ ` prompt. Read what the steps below already did before deciding what is left to do.`);
211
+ }
212
+ if (status === 403) {
213
+ return (` It was stopped because this account does not permit the run (HTTP ${status}) — a role that` +
214
+ ` changed or an account suspended, not anything wrong with the computer.${why} Nothing you` +
215
+ ` can send changes that, and a new credential does not either: say what was refused and` +
216
+ ` stop, rather than calling run_agent again.`);
217
+ }
218
+ if (status === 402) {
219
+ return (` It was stopped by the plan on this account as it stands now (HTTP ${status}), not by` +
220
+ ` anything wrong with the computer.${why} Calling run_agent again does not change that;` +
221
+ ` say what was refused, and note that the steps below were still billed.`);
222
+ }
223
+ return why;
224
+ }
158
225
  const isRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
159
226
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/tools/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registrar } from './types.js';
2
+ export declare const registerArtifacts: Registrar;
3
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/tools/artifacts.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C,eAAO,MAAM,iBAAiB,EAAE,SAoI/B,CAAC"}