asyar-sdk 2.5.0 → 2.7.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 (70) hide show
  1. package/dist/contracts/runs.d.ts +54 -0
  2. package/dist/contracts/runs.d.ts.map +1 -0
  3. package/dist/contracts/runs.js +2 -0
  4. package/dist/contracts/runs.js.map +1 -0
  5. package/dist/contracts/runs.test.d.ts +2 -0
  6. package/dist/contracts/runs.test.d.ts.map +1 -0
  7. package/dist/contracts/runs.test.js +42 -0
  8. package/dist/contracts/runs.test.js.map +1 -0
  9. package/dist/contracts/tools.d.ts +22 -0
  10. package/dist/contracts/tools.d.ts.map +1 -0
  11. package/dist/contracts/tools.js +2 -0
  12. package/dist/contracts/tools.js.map +1 -0
  13. package/dist/contracts/tools.test.d.ts +2 -0
  14. package/dist/contracts/tools.test.d.ts.map +1 -0
  15. package/dist/contracts/tools.test.js +96 -0
  16. package/dist/contracts/tools.test.js.map +1 -0
  17. package/dist/contracts.d.ts +3 -0
  18. package/dist/contracts.d.ts.map +1 -1
  19. package/dist/contracts.js +1 -0
  20. package/dist/contracts.js.map +1 -1
  21. package/dist/icons/IconRenderer.test.js +12 -0
  22. package/dist/icons/IconRenderer.test.js.map +1 -1
  23. package/dist/icons/iconData.d.ts.map +1 -1
  24. package/dist/icons/iconData.js +10 -0
  25. package/dist/icons/iconData.js.map +1 -1
  26. package/dist/ipc/namespaces.d.ts +1 -1
  27. package/dist/ipc/namespaces.d.ts.map +1 -1
  28. package/dist/ipc/namespaces.js +2 -0
  29. package/dist/ipc/namespaces.js.map +1 -1
  30. package/dist/ipc/namespaces.test.js +1 -1
  31. package/dist/ipc/namespaces.test.js.map +1 -1
  32. package/dist/ipc/namespaces.tools.test.d.ts +2 -0
  33. package/dist/ipc/namespaces.tools.test.d.ts.map +1 -0
  34. package/dist/ipc/namespaces.tools.test.js +8 -0
  35. package/dist/ipc/namespaces.tools.test.js.map +1 -0
  36. package/dist/services/BaseServiceProxy.d.ts.map +1 -1
  37. package/dist/services/BaseServiceProxy.js +8 -0
  38. package/dist/services/BaseServiceProxy.js.map +1 -1
  39. package/dist/services/RunServiceProxy.d.ts +9 -0
  40. package/dist/services/RunServiceProxy.d.ts.map +1 -0
  41. package/dist/services/RunServiceProxy.js +93 -0
  42. package/dist/services/RunServiceProxy.js.map +1 -0
  43. package/dist/services/RunServiceProxy.test.d.ts +2 -0
  44. package/dist/services/RunServiceProxy.test.d.ts.map +1 -0
  45. package/dist/services/RunServiceProxy.test.js +180 -0
  46. package/dist/services/RunServiceProxy.test.js.map +1 -0
  47. package/dist/services/ToolsServiceProxy.d.ts +11 -0
  48. package/dist/services/ToolsServiceProxy.d.ts.map +1 -0
  49. package/dist/services/ToolsServiceProxy.js +45 -0
  50. package/dist/services/ToolsServiceProxy.js.map +1 -0
  51. package/dist/services/ToolsServiceProxy.test.d.ts +2 -0
  52. package/dist/services/ToolsServiceProxy.test.d.ts.map +1 -0
  53. package/dist/services/ToolsServiceProxy.test.js +142 -0
  54. package/dist/services/ToolsServiceProxy.test.js.map +1 -0
  55. package/dist/types/ExtensionType.d.ts +3 -0
  56. package/dist/types/ExtensionType.d.ts.map +1 -1
  57. package/dist/types/ExtensionType.tools.test.d.ts +2 -0
  58. package/dist/types/ExtensionType.tools.test.d.ts.map +1 -0
  59. package/dist/types/ExtensionType.tools.test.js +57 -0
  60. package/dist/types/ExtensionType.tools.test.js.map +1 -0
  61. package/dist/worker.d.ts.map +1 -1
  62. package/dist/worker.js +62 -1
  63. package/dist/worker.js.map +1 -1
  64. package/dist/worker.test.js +2 -0
  65. package/dist/worker.test.js.map +1 -1
  66. package/dist/worker.tools.test.d.ts +2 -0
  67. package/dist/worker.tools.test.d.ts.map +1 -0
  68. package/dist/worker.tools.test.js +100 -0
  69. package/dist/worker.tools.test.js.map +1 -0
  70. package/package.json +1 -1
@@ -0,0 +1,180 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
11
+ import { messageBroker } from '../ipc/MessageBroker';
12
+ import { RunServiceProxy } from './RunServiceProxy';
13
+ describe('RunServiceProxy', () => {
14
+ let invokeSpy;
15
+ let onSpy;
16
+ beforeEach(() => {
17
+ invokeSpy = vi.spyOn(messageBroker, 'invoke').mockResolvedValue(undefined);
18
+ onSpy = vi.spyOn(messageBroker, 'on').mockImplementation(() => { });
19
+ });
20
+ afterEach(() => {
21
+ invokeSpy.mockRestore();
22
+ onSpy.mockRestore();
23
+ });
24
+ it('start_dispatches_runs_start_with_input_envelope', () => __awaiter(void 0, void 0, void 0, function* () {
25
+ const proxy = new RunServiceProxy();
26
+ yield proxy.start({ label: 'My Script', kind: 'shell-script' }).catch(() => { });
27
+ expect(invokeSpy).toHaveBeenCalledWith('runs:start', expect.objectContaining({
28
+ id: expect.any(String),
29
+ kind: 'shell-script',
30
+ label: 'My Script',
31
+ cancellable: expect.any(Boolean),
32
+ }));
33
+ }));
34
+ it('start_returns_handle_with_id', () => __awaiter(void 0, void 0, void 0, function* () {
35
+ const proxy = new RunServiceProxy();
36
+ const handle = yield proxy.start({ label: 'Job', kind: 'agent' }).catch(() => null);
37
+ // With not-implemented throw, handle will be null — this test fails correctly
38
+ expect(handle).not.toBeNull();
39
+ expect(typeof handle.id).toBe('string');
40
+ expect(handle.id.length).toBeGreaterThan(0);
41
+ }));
42
+ it('start_returned_handle_id_matches_invoke_payload', () => __awaiter(void 0, void 0, void 0, function* () {
43
+ const proxy = new RunServiceProxy();
44
+ const handle = yield proxy.start({ label: 'Job', kind: 'agent' }).catch(() => null);
45
+ expect(handle).not.toBeNull();
46
+ const [, payload] = invokeSpy.mock.calls[0];
47
+ const sentId = payload.id;
48
+ expect(handle.id).toBe(sentId);
49
+ }));
50
+ it('start_default_cancellable_is_false', () => __awaiter(void 0, void 0, void 0, function* () {
51
+ const proxy = new RunServiceProxy();
52
+ yield proxy.start({ label: 'Job', kind: 'agent' }).catch(() => { });
53
+ expect(invokeSpy).toHaveBeenCalledWith('runs:start', expect.objectContaining({ cancellable: false }));
54
+ }));
55
+ it('start_explicit_cancellable_passed_through', () => __awaiter(void 0, void 0, void 0, function* () {
56
+ const proxy = new RunServiceProxy();
57
+ yield proxy.start({ label: 'Chat', kind: 'ai-chat', cancellable: true }).catch(() => { });
58
+ expect(invokeSpy).toHaveBeenCalledWith('runs:start', expect.objectContaining({ cancellable: true }));
59
+ }));
60
+ describe('handle methods', () => {
61
+ let proxy;
62
+ let capturedOnHandler;
63
+ beforeEach(() => {
64
+ proxy = new RunServiceProxy();
65
+ // Capture the handler registered via broker.on so tests can fire events
66
+ onSpy.mockImplementation((_event, handler) => {
67
+ capturedOnHandler = handler;
68
+ });
69
+ });
70
+ function getHandle() {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ return proxy.start({ label: 'X', kind: 'custom' });
73
+ });
74
+ }
75
+ it('handle_write_dispatches_runs_write', () => __awaiter(void 0, void 0, void 0, function* () {
76
+ const handle = yield getHandle().catch(() => null);
77
+ expect(handle).not.toBeNull();
78
+ yield handle.write('line one').catch(() => { });
79
+ expect(invokeSpy).toHaveBeenCalledWith('runs:write', expect.objectContaining({ id: handle.id, line: 'line one' }));
80
+ }));
81
+ it('handle_done_dispatches_runs_done', () => __awaiter(void 0, void 0, void 0, function* () {
82
+ const handle = yield getHandle().catch(() => null);
83
+ expect(handle).not.toBeNull();
84
+ yield handle.done().catch(() => { });
85
+ expect(invokeSpy).toHaveBeenCalledWith('runs:done', expect.objectContaining({ id: handle.id }));
86
+ }));
87
+ it('handle_fail_dispatches_runs_fail_with_error', () => __awaiter(void 0, void 0, void 0, function* () {
88
+ const handle = yield getHandle().catch(() => null);
89
+ expect(handle).not.toBeNull();
90
+ yield handle.fail('boom').catch(() => { });
91
+ expect(invokeSpy).toHaveBeenCalledWith('runs:fail', expect.objectContaining({ id: handle.id, error: 'boom' }));
92
+ }));
93
+ it('handle_cancel_dispatches_runs_cancel', () => __awaiter(void 0, void 0, void 0, function* () {
94
+ const handle = yield getHandle().catch(() => null);
95
+ expect(handle).not.toBeNull();
96
+ yield handle.cancel().catch(() => { });
97
+ expect(invokeSpy).toHaveBeenCalledWith('runs:cancel', expect.objectContaining({ id: handle.id }));
98
+ }));
99
+ it('handle_cancelled_starts_false', () => __awaiter(void 0, void 0, void 0, function* () {
100
+ const handle = yield getHandle().catch(() => null);
101
+ expect(handle).not.toBeNull();
102
+ expect(handle.cancelled).toBe(false);
103
+ }));
104
+ it('handle_cancelled_becomes_true_when_cancel_event_received', () => __awaiter(void 0, void 0, void 0, function* () {
105
+ const handle = yield getHandle().catch(() => null);
106
+ expect(handle).not.toBeNull();
107
+ expect(capturedOnHandler).toBeDefined();
108
+ capturedOnHandler({ id: handle.id });
109
+ expect(handle.cancelled).toBe(true);
110
+ }));
111
+ it('handle_onCancel_callback_fires_on_cancel_event', () => __awaiter(void 0, void 0, void 0, function* () {
112
+ const handle = yield getHandle().catch(() => null);
113
+ expect(handle).not.toBeNull();
114
+ const cb = vi.fn();
115
+ handle.onCancel(cb);
116
+ expect(capturedOnHandler).toBeDefined();
117
+ capturedOnHandler({ id: handle.id });
118
+ expect(cb).toHaveBeenCalledOnce();
119
+ }));
120
+ it('handle_onCancel_unsubscribe_stops_callback', () => __awaiter(void 0, void 0, void 0, function* () {
121
+ const handle = yield getHandle().catch(() => null);
122
+ expect(handle).not.toBeNull();
123
+ const cb = vi.fn();
124
+ const unsubscribe = handle.onCancel(cb);
125
+ unsubscribe();
126
+ expect(capturedOnHandler).toBeDefined();
127
+ capturedOnHandler({ id: handle.id });
128
+ expect(cb).not.toHaveBeenCalled();
129
+ }));
130
+ it('handle_cancel_event_for_different_id_does_not_fire_callback', () => __awaiter(void 0, void 0, void 0, function* () {
131
+ const handle = yield getHandle().catch(() => null);
132
+ expect(handle).not.toBeNull();
133
+ const cb = vi.fn();
134
+ handle.onCancel(cb);
135
+ expect(capturedOnHandler).toBeDefined();
136
+ capturedOnHandler({ id: 'some-other-run-id' });
137
+ expect(cb).not.toHaveBeenCalled();
138
+ }));
139
+ it('handle_cancel_unsubscribes_handler_even_when_broker_invoke_rejects', () => __awaiter(void 0, void 0, void 0, function* () {
140
+ // Doc contract: cancel() must release the cancel-event subscription —
141
+ // analogous to done() and fail() — even when the broker call fails
142
+ // (e.g. unknown run id). Without try/finally the handler leaks because
143
+ // the launcher never emits the event the handler was waiting for.
144
+ const handle = yield getHandle().catch(() => null);
145
+ expect(handle).not.toBeNull();
146
+ expect(capturedOnHandler).toBeDefined();
147
+ const offSpy = vi.spyOn(messageBroker, 'off').mockImplementation(() => { });
148
+ invokeSpy.mockImplementationOnce(() => __awaiter(void 0, void 0, void 0, function* () {
149
+ throw new Error('run not found');
150
+ }));
151
+ yield expect(handle.cancel()).rejects.toThrow('run not found');
152
+ expect(offSpy).toHaveBeenCalledWith('asyar:event:runs:cancel', capturedOnHandler);
153
+ offSpy.mockRestore();
154
+ }));
155
+ });
156
+ });
157
+ describe('RunServiceProxy with setExtensionId', () => {
158
+ it('handle methods use the per-instance broker (not global) after setExtensionId', () => __awaiter(void 0, void 0, void 0, function* () {
159
+ const globalInvokeSpy = vi.spyOn(messageBroker, 'invoke').mockResolvedValue(undefined);
160
+ vi.spyOn(messageBroker, 'on').mockImplementation(() => { });
161
+ const proxy = new RunServiceProxy();
162
+ proxy.setExtensionId('test.extension');
163
+ // After setExtensionId, this.broker is a clone — spy on the clone instead
164
+ const instanceBroker = proxy.broker;
165
+ const instanceInvokeSpy = vi.spyOn(instanceBroker, 'invoke').mockResolvedValue(undefined);
166
+ vi.spyOn(instanceBroker, 'on').mockImplementation(() => { });
167
+ vi.spyOn(instanceBroker, 'off').mockImplementation(() => { });
168
+ // Reset global spy AFTER start() (because start() may call invoke; we only care about handle methods)
169
+ globalInvokeSpy.mockClear();
170
+ const handle = yield proxy.start({ label: 'X', kind: 'shell-script' });
171
+ instanceInvokeSpy.mockClear();
172
+ globalInvokeSpy.mockClear();
173
+ yield handle.write('line');
174
+ expect(instanceInvokeSpy).toHaveBeenCalledWith('runs:write', expect.objectContaining({ id: handle.id, line: 'line' }));
175
+ expect(globalInvokeSpy).not.toHaveBeenCalled();
176
+ instanceInvokeSpy.mockRestore();
177
+ globalInvokeSpy.mockRestore();
178
+ }));
179
+ });
180
+ //# sourceMappingURL=RunServiceProxy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunServiceProxy.test.js","sourceRoot":"","sources":["../../src/services/RunServiceProxy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { BaseServiceProxy } from './BaseServiceProxy';
2
+ import type { IToolsService, ManifestTool, ToolDescriptor, ToolHandler } from '../contracts/tools';
3
+ /** SDK-side proxy for the Tools service. */
4
+ export declare class ToolsServiceProxy extends BaseServiceProxy implements IToolsService {
5
+ private handlers;
6
+ registerTool(tool: ManifestTool, handler: ToolHandler): Promise<void>;
7
+ unregisterTool(id: string): Promise<void>;
8
+ listTools(): Promise<ToolDescriptor[]>;
9
+ invokeHandler(id: string, args: unknown): Promise<unknown>;
10
+ }
11
+ //# sourceMappingURL=ToolsServiceProxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolsServiceProxy.d.ts","sourceRoot":"","sources":["../../src/services/ToolsServiceProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnG,4CAA4C;AAC5C,qBAAa,iBAAkB,SAAQ,gBAAiB,YAAW,aAAa;IAC9E,OAAO,CAAC,QAAQ,CAAkC;IAE5C,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrE,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzC,SAAS,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAItC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;CAOjE"}
@@ -0,0 +1,45 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { BaseServiceProxy } from './BaseServiceProxy';
11
+ /** SDK-side proxy for the Tools service. */
12
+ export class ToolsServiceProxy extends BaseServiceProxy {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.handlers = new Map();
16
+ }
17
+ registerTool(tool, handler) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ this.handlers.set(tool.id, handler);
20
+ return this.broker.invoke('tools:registerTool', { tool });
21
+ });
22
+ }
23
+ unregisterTool(id) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const result = yield this.broker.invoke('tools:unregisterTool', { id });
26
+ this.handlers.delete(id);
27
+ return result;
28
+ });
29
+ }
30
+ listTools() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ return this.broker.invoke('tools:listTools');
33
+ });
34
+ }
35
+ invokeHandler(id, args) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const handler = this.handlers.get(id);
38
+ if (!handler) {
39
+ throw new Error(`[asyar-sdk/tools] No handler registered for tool id: "${id}"`);
40
+ }
41
+ return handler(args);
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=ToolsServiceProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolsServiceProxy.js","sourceRoot":"","sources":["../../src/services/ToolsServiceProxy.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,4CAA4C;AAC5C,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IAAvD;;QACU,aAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAwBpD,CAAC;IAtBO,YAAY,CAAC,IAAkB,EAAE,OAAoB;;YACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC;KAAA;IAEK,cAAc,CAAC,EAAU;;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAO,sBAAsB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;IAEK,SAAS;;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAmB,iBAAiB,CAAC,CAAC;QACjE,CAAC;KAAA;IAEK,aAAa,CAAC,EAAU,EAAE,IAAa;;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,yDAAyD,EAAE,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;KAAA;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ToolsServiceProxy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolsServiceProxy.test.d.ts","sourceRoot":"","sources":["../../src/services/ToolsServiceProxy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,142 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
11
+ import { messageBroker } from '../ipc/MessageBroker';
12
+ vi.mock('../ipc/MessageBroker', () => ({
13
+ messageBroker: { invoke: vi.fn().mockResolvedValue(undefined), on: vi.fn(), off: vi.fn() },
14
+ }));
15
+ function makeInvoke() {
16
+ const mockInvoke = vi.fn().mockResolvedValue(undefined);
17
+ Object.assign(messageBroker, {
18
+ invoke: mockInvoke, on: vi.fn(), off: vi.fn(),
19
+ });
20
+ return mockInvoke;
21
+ }
22
+ const sampleTool = {
23
+ id: 't1',
24
+ name: 'Test Tool',
25
+ description: 'A test tool',
26
+ parameters: { type: 'object', properties: { x: { type: 'number' } } },
27
+ };
28
+ describe('ToolsServiceProxy — module exists in contracts surface', () => {
29
+ it('contracts.ts exports ToolsServiceProxy', () => __awaiter(void 0, void 0, void 0, function* () {
30
+ const mod = yield import('../contracts');
31
+ expect(typeof mod.ToolsServiceProxy).toBe('function');
32
+ }));
33
+ });
34
+ describe('ToolsServiceProxy.registerTool', () => {
35
+ beforeEach(() => vi.clearAllMocks());
36
+ it('forwards to tools:registerTool with the tool descriptor', () => __awaiter(void 0, void 0, void 0, function* () {
37
+ const mod = yield import('../contracts');
38
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
39
+ const mockInvoke = makeInvoke();
40
+ const proxy = new ToolsServiceProxy();
41
+ proxy.setExtensionId('com.example.ext');
42
+ const handler = vi.fn().mockResolvedValue({ ok: true });
43
+ yield proxy.registerTool(sampleTool, handler).catch(() => { });
44
+ const call = mockInvoke.mock.calls.find((c) => c[0] === 'tools:registerTool');
45
+ expect(call).toBeDefined();
46
+ expect(call === null || call === void 0 ? void 0 : call[1]).toMatchObject({
47
+ tool: expect.objectContaining({ id: 't1', name: 'Test Tool' }),
48
+ });
49
+ }));
50
+ it('stores handler locally so it can be invoked without a broker round-trip', () => __awaiter(void 0, void 0, void 0, function* () {
51
+ const mod = yield import('../contracts');
52
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
53
+ makeInvoke();
54
+ const proxy = new ToolsServiceProxy();
55
+ proxy.setExtensionId('com.example.ext');
56
+ const handler = vi.fn().mockResolvedValue({ result: 42 });
57
+ yield proxy.registerTool(sampleTool, handler).catch(() => { });
58
+ const result = yield proxy.invokeHandler('t1', { x: 7 });
59
+ expect(handler).toHaveBeenCalledWith({ x: 7 });
60
+ expect(result).toEqual({ result: 42 });
61
+ }));
62
+ it('resolves when broker resolves', () => __awaiter(void 0, void 0, void 0, function* () {
63
+ const mod = yield import('../contracts');
64
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
65
+ makeInvoke();
66
+ const proxy = new ToolsServiceProxy();
67
+ yield expect(proxy.registerTool(sampleTool, () => __awaiter(void 0, void 0, void 0, function* () { return null; }))).resolves.toBeUndefined();
68
+ }));
69
+ });
70
+ describe('ToolsServiceProxy.unregisterTool', () => {
71
+ beforeEach(() => vi.clearAllMocks());
72
+ it('forwards to tools:unregisterTool with the tool id', () => __awaiter(void 0, void 0, void 0, function* () {
73
+ const mod = yield import('../contracts');
74
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
75
+ const mockInvoke = makeInvoke();
76
+ const proxy = new ToolsServiceProxy();
77
+ proxy.setExtensionId('com.example.ext');
78
+ yield proxy.unregisterTool('t1').catch(() => { });
79
+ const call = mockInvoke.mock.calls.find((c) => c[0] === 'tools:unregisterTool');
80
+ expect(call).toBeDefined();
81
+ expect(call === null || call === void 0 ? void 0 : call[1]).toMatchObject({ id: 't1' });
82
+ }));
83
+ it('removes the local handler after unregistering', () => __awaiter(void 0, void 0, void 0, function* () {
84
+ const mod = yield import('../contracts');
85
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
86
+ makeInvoke();
87
+ const proxy = new ToolsServiceProxy();
88
+ proxy.setExtensionId('com.example.ext');
89
+ const handler = vi.fn().mockResolvedValue('value');
90
+ yield proxy.registerTool(sampleTool, handler).catch(() => { });
91
+ yield proxy.unregisterTool('t1').catch(() => { });
92
+ yield expect(proxy.invokeHandler('t1', {})).rejects.toThrow();
93
+ }));
94
+ });
95
+ describe('ToolsServiceProxy.listTools', () => {
96
+ beforeEach(() => vi.clearAllMocks());
97
+ it('forwards to tools:listTools and returns the result', () => __awaiter(void 0, void 0, void 0, function* () {
98
+ const mod = yield import('../contracts');
99
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
100
+ const mockInvoke = makeInvoke();
101
+ mockInvoke.mockResolvedValueOnce([
102
+ {
103
+ id: 'builtin-tool',
104
+ name: 'Builtin',
105
+ description: 'A built-in tool',
106
+ parameters: {},
107
+ source: 'builtin',
108
+ fullyQualifiedId: 'builtin:builtin-tool',
109
+ },
110
+ ]);
111
+ const proxy = new ToolsServiceProxy();
112
+ proxy.setExtensionId('com.example.ext');
113
+ const result = yield proxy.listTools();
114
+ const call = mockInvoke.mock.calls.find((c) => c[0] === 'tools:listTools');
115
+ expect(call).toBeDefined();
116
+ expect(result).toHaveLength(1);
117
+ expect(result[0].id).toBe('builtin-tool');
118
+ }));
119
+ });
120
+ describe('ToolsServiceProxy.invokeHandler dispatch', () => {
121
+ beforeEach(() => vi.clearAllMocks());
122
+ it('calls the registered handler with the given args', () => __awaiter(void 0, void 0, void 0, function* () {
123
+ const mod = yield import('../contracts');
124
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
125
+ makeInvoke();
126
+ const proxy = new ToolsServiceProxy();
127
+ proxy.setExtensionId('com.example.ext');
128
+ const handler = vi.fn().mockResolvedValue({ answer: 99 });
129
+ yield proxy.registerTool(sampleTool, handler).catch(() => { });
130
+ const result = yield proxy.invokeHandler('t1', { x: 2 });
131
+ expect(handler).toHaveBeenCalledWith({ x: 2 });
132
+ expect(result).toEqual({ answer: 99 });
133
+ }));
134
+ it('throws when invoked with an unregistered tool id', () => __awaiter(void 0, void 0, void 0, function* () {
135
+ const mod = yield import('../contracts');
136
+ const ToolsServiceProxy = mod.ToolsServiceProxy;
137
+ makeInvoke();
138
+ const proxy = new ToolsServiceProxy();
139
+ yield expect(proxy.invokeHandler('nonexistent', {})).rejects.toThrow();
140
+ }));
141
+ });
142
+ //# sourceMappingURL=ToolsServiceProxy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolsServiceProxy.test.js","sourceRoot":"","sources":["../../src/services/ToolsServiceProxy.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ExtensionContext } from "../ExtensionContext";
2
+ import type { ManifestTool } from '../contracts/tools';
2
3
  /**
3
4
  * The set of preference types an extension can declare in its manifest.
4
5
  * Values stored for each type:
@@ -98,6 +99,8 @@ export interface ExtensionManifest {
98
99
  preferences?: PreferenceDeclaration[];
99
100
  /** Extension-level actions (show when any command from this extension is selected). */
100
101
  actions?: ManifestAction[];
102
+ /** Tools that this extension exposes for invocation by the launcher or other extensions. */
103
+ tools?: ManifestTool[];
101
104
  }
102
105
  export interface ExtensionCommand {
103
106
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ExtensionType.d.ts","sourceRoot":"","sources":["../../src/types/ExtensionType.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ExtensionType.d.ts","sourceRoot":"","sources":["../../src/types/ExtensionType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExtensionType.tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionType.tools.test.d.ts","sourceRoot":"","sources":["../../src/types/ExtensionType.tools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { describe, it, expect } from 'vitest';
11
+ /**
12
+ * Tests asserting that ExtensionManifest accepts a tools field.
13
+ *
14
+ * The tests check runtime behavior. The static type check (ManifestTool import
15
+ * in ExtensionType.ts) is verified indirectly by checking that the contracts
16
+ * surface exports ToolsServiceProxy — which can only be present if tools.ts
17
+ * and the ManifestTool type were wired correctly.
18
+ */
19
+ describe('ExtensionManifest — tools field', () => {
20
+ it('contracts.ts exports ToolsServiceProxy (required for tools wiring)', () => __awaiter(void 0, void 0, void 0, function* () {
21
+ const mod = yield import('../contracts');
22
+ expect(typeof mod.ToolsServiceProxy).toBe('function');
23
+ }));
24
+ it('a manifest object with tools array has the expected shape', () => {
25
+ const manifest = {
26
+ name: 'Test Extension',
27
+ id: 'com.example.test',
28
+ version: '1.0.0',
29
+ description: 'A test extension',
30
+ commands: [],
31
+ tools: [
32
+ {
33
+ id: 'my-tool',
34
+ name: 'My Tool',
35
+ description: 'Does something useful',
36
+ parameters: { type: 'object', properties: {} },
37
+ },
38
+ ],
39
+ };
40
+ expect(manifest.tools).toHaveLength(1);
41
+ expect(manifest.tools[0].id).toBe('my-tool');
42
+ expect(manifest.tools[0].name).toBe('My Tool');
43
+ expect(manifest.tools[0].description).toBe('Does something useful');
44
+ expect(typeof manifest.tools[0].parameters).toBe('object');
45
+ });
46
+ it('a manifest object without tools is still valid', () => {
47
+ const manifest = {
48
+ name: 'Minimal Extension',
49
+ id: 'com.example.minimal',
50
+ version: '1.0.0',
51
+ description: 'No tools',
52
+ commands: [],
53
+ };
54
+ expect(manifest.tools).toBeUndefined();
55
+ });
56
+ });
57
+ //# sourceMappingURL=ExtensionType.tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExtensionType.tools.test.js","sourceRoot":"","sources":["../../src/types/ExtensionType.tools.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C;;;;;;;GAOG;AACH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,oEAAoE,EAAE,GAAS,EAAE;QAClF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,CAAC,OAAQ,GAAW,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,kBAAkB;YACtB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE;gBACL;oBACE,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,uBAAuB;oBACpC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;iBAC/C;aACF;SACF,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,mBAAmB;YACzB,EAAE,EAAE,qBAAqB;YACzB,OAAO,EAAE,OAAO;YAChB,WAAW,EAAE,UAAU;YACvB,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,MAAM,CAAE,QAAgB,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuCH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA8E9D,qBAAa,gBAAiB,SAAQ,oBAAoB;;cAKrC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQzD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7C,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GACpE,MAAM,IAAI;CAMd;AAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAyCH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AA8H9D,qBAAa,gBAAiB,SAAQ,oBAAoB;;cASrC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAQzD;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7C,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,GACpE,MAAM,IAAI;CAMd;AAED,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}