asyar-sdk 2.4.0 → 2.6.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.
- package/dist/contracts/runs.d.ts +48 -0
- package/dist/contracts/runs.d.ts.map +1 -0
- package/dist/contracts/runs.js +2 -0
- package/dist/contracts/runs.js.map +1 -0
- package/dist/contracts/runs.test.d.ts +2 -0
- package/dist/contracts/runs.test.d.ts.map +1 -0
- package/dist/contracts/runs.test.js +27 -0
- package/dist/contracts/runs.test.js.map +1 -0
- package/dist/contracts/tools.d.ts +22 -0
- package/dist/contracts/tools.d.ts.map +1 -0
- package/dist/contracts/tools.js +2 -0
- package/dist/contracts/tools.js.map +1 -0
- package/dist/contracts/tools.test.d.ts +2 -0
- package/dist/contracts/tools.test.d.ts.map +1 -0
- package/dist/contracts/tools.test.js +96 -0
- package/dist/contracts/tools.test.js.map +1 -0
- package/dist/contracts.d.ts +3 -0
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +1 -0
- package/dist/contracts.js.map +1 -1
- package/dist/icons/IconRenderer.test.js +12 -0
- package/dist/icons/IconRenderer.test.js.map +1 -1
- package/dist/icons/iconData.d.ts.map +1 -1
- package/dist/icons/iconData.js +43 -0
- package/dist/icons/iconData.js.map +1 -1
- package/dist/ipc/namespaces.d.ts +1 -1
- package/dist/ipc/namespaces.d.ts.map +1 -1
- package/dist/ipc/namespaces.js +2 -0
- package/dist/ipc/namespaces.js.map +1 -1
- package/dist/ipc/namespaces.test.js +1 -1
- package/dist/ipc/namespaces.test.js.map +1 -1
- package/dist/ipc/namespaces.tools.test.d.ts +2 -0
- package/dist/ipc/namespaces.tools.test.d.ts.map +1 -0
- package/dist/ipc/namespaces.tools.test.js +8 -0
- package/dist/ipc/namespaces.tools.test.js.map +1 -0
- package/dist/services/BaseServiceProxy.d.ts.map +1 -1
- package/dist/services/BaseServiceProxy.js +8 -0
- package/dist/services/BaseServiceProxy.js.map +1 -1
- package/dist/services/CommandServiceProxy.d.ts +13 -1
- package/dist/services/CommandServiceProxy.d.ts.map +1 -1
- package/dist/services/CommandServiceProxy.js +24 -0
- package/dist/services/CommandServiceProxy.js.map +1 -1
- package/dist/services/CommandServiceProxy.test.js +66 -1
- package/dist/services/CommandServiceProxy.test.js.map +1 -1
- package/dist/services/ICommandService.d.ts +15 -1
- package/dist/services/ICommandService.d.ts.map +1 -1
- package/dist/services/RunServiceProxy.d.ts +9 -0
- package/dist/services/RunServiceProxy.d.ts.map +1 -0
- package/dist/services/RunServiceProxy.js +93 -0
- package/dist/services/RunServiceProxy.js.map +1 -0
- package/dist/services/RunServiceProxy.test.d.ts +2 -0
- package/dist/services/RunServiceProxy.test.d.ts.map +1 -0
- package/dist/services/RunServiceProxy.test.js +180 -0
- package/dist/services/RunServiceProxy.test.js.map +1 -0
- package/dist/services/ToolsServiceProxy.d.ts +11 -0
- package/dist/services/ToolsServiceProxy.d.ts.map +1 -0
- package/dist/services/ToolsServiceProxy.js +45 -0
- package/dist/services/ToolsServiceProxy.js.map +1 -0
- package/dist/services/ToolsServiceProxy.test.d.ts +2 -0
- package/dist/services/ToolsServiceProxy.test.d.ts.map +1 -0
- package/dist/services/ToolsServiceProxy.test.js +142 -0
- package/dist/services/ToolsServiceProxy.test.js.map +1 -0
- package/dist/types/ActionType.d.ts +2 -0
- package/dist/types/ActionType.d.ts.map +1 -1
- package/dist/types/ActionType.js.map +1 -1
- package/dist/types/ClipboardType.d.ts +9 -0
- package/dist/types/ClipboardType.d.ts.map +1 -1
- package/dist/types/CommandType.d.ts +31 -0
- package/dist/types/CommandType.d.ts.map +1 -1
- package/dist/types/ExtensionType.d.ts +10 -0
- package/dist/types/ExtensionType.d.ts.map +1 -1
- package/dist/types/ExtensionType.tools.test.d.ts +2 -0
- package/dist/types/ExtensionType.tools.test.d.ts.map +1 -0
- package/dist/types/ExtensionType.tools.test.js +57 -0
- package/dist/types/ExtensionType.tools.test.js.map +1 -0
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +62 -1
- package/dist/worker.js.map +1 -1
- package/dist/worker.test.js +2 -0
- package/dist/worker.test.js.map +1 -1
- package/dist/worker.tools.test.d.ts +2 -0
- package/dist/worker.tools.test.d.ts.map +1 -0
- package/dist/worker.tools.test.js +100 -0
- package/dist/worker.tools.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
10
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
11
11
|
import { messageBroker } from '../ipc/MessageBroker';
|
|
12
12
|
vi.mock('../ipc/MessageBroker', () => ({
|
|
13
13
|
messageBroker: { invoke: vi.fn().mockResolvedValue(undefined), on: vi.fn(), off: vi.fn() },
|
|
@@ -99,4 +99,69 @@ describe('CommandServiceProxy canonical namespace', () => {
|
|
|
99
99
|
expect(call).toBeDefined();
|
|
100
100
|
}));
|
|
101
101
|
});
|
|
102
|
+
describe('CommandServiceProxy.replaceDynamicCommands', () => {
|
|
103
|
+
beforeEach(() => {
|
|
104
|
+
vi.clearAllMocks();
|
|
105
|
+
window.__ASYAR_ROLE__ = 'worker';
|
|
106
|
+
});
|
|
107
|
+
afterEach(() => {
|
|
108
|
+
delete window.__ASYAR_ROLE__;
|
|
109
|
+
});
|
|
110
|
+
it('invokes commands:replaceDynamicCommands with extensionId and regs payload', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
const { proxy, mockInvoke } = makeProxy();
|
|
112
|
+
mockInvoke.mockResolvedValueOnce(undefined);
|
|
113
|
+
const regs = [
|
|
114
|
+
{ id: 'sc-1', name: 'Run lights', arguments: [{ name: 'value', type: 'text' }] },
|
|
115
|
+
{ id: 'sc-2', name: 'Send report' },
|
|
116
|
+
];
|
|
117
|
+
yield proxy.replaceDynamicCommands(regs);
|
|
118
|
+
const [cmd, payload] = mockInvoke.mock.calls[0];
|
|
119
|
+
expect(cmd).toBe('commands:replaceDynamicCommands');
|
|
120
|
+
expect(payload).toEqual({ extensionId: 'com.example.ext', regs });
|
|
121
|
+
}));
|
|
122
|
+
it('resolves when broker resolves', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const { proxy, mockInvoke } = makeProxy();
|
|
124
|
+
mockInvoke.mockResolvedValueOnce(undefined);
|
|
125
|
+
yield expect(proxy.replaceDynamicCommands([])).resolves.toBeUndefined();
|
|
126
|
+
}));
|
|
127
|
+
it('rejects when broker rejects with the broker error', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
128
|
+
const { proxy, mockInvoke } = makeProxy();
|
|
129
|
+
mockInvoke.mockRejectedValueOnce(new Error('argument validation failed'));
|
|
130
|
+
yield expect(proxy.replaceDynamicCommands([{ id: 'x', name: 'X' }])).rejects.toThrow('argument validation failed');
|
|
131
|
+
}));
|
|
132
|
+
it('throws when called from view role', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
133
|
+
;
|
|
134
|
+
window.__ASYAR_ROLE__ = 'view';
|
|
135
|
+
const { proxy } = makeProxy();
|
|
136
|
+
yield expect(proxy.replaceDynamicCommands([])).rejects.toThrow(/worker-only/i);
|
|
137
|
+
}));
|
|
138
|
+
it('throws when called with no role set (untrusted context)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
139
|
+
delete window.__ASYAR_ROLE__;
|
|
140
|
+
const { proxy } = makeProxy();
|
|
141
|
+
yield expect(proxy.replaceDynamicCommands([])).rejects.toThrow(/worker-only/i);
|
|
142
|
+
}));
|
|
143
|
+
it('does not invoke broker when worker-only assertion fails', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
144
|
+
;
|
|
145
|
+
window.__ASYAR_ROLE__ = 'view';
|
|
146
|
+
const { proxy, mockInvoke } = makeProxy();
|
|
147
|
+
yield expect(proxy.replaceDynamicCommands([])).rejects.toThrow();
|
|
148
|
+
expect(mockInvoke).not.toHaveBeenCalled();
|
|
149
|
+
}));
|
|
150
|
+
});
|
|
151
|
+
describe('CommandServiceProxy canonical namespace — replaceDynamicCommands', () => {
|
|
152
|
+
beforeEach(() => {
|
|
153
|
+
vi.clearAllMocks();
|
|
154
|
+
window.__ASYAR_ROLE__ = 'worker';
|
|
155
|
+
});
|
|
156
|
+
afterEach(() => {
|
|
157
|
+
delete window.__ASYAR_ROLE__;
|
|
158
|
+
});
|
|
159
|
+
it('replaceDynamicCommands → "commands:replaceDynamicCommands"', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
|
+
const { proxy, mockInvoke } = makeProxy();
|
|
161
|
+
mockInvoke.mockResolvedValue(undefined);
|
|
162
|
+
yield proxy.replaceDynamicCommands([]);
|
|
163
|
+
const call = mockInvoke.mock.calls.find(c => c[0] === 'commands:replaceDynamicCommands');
|
|
164
|
+
expect(call).toBeDefined();
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
102
167
|
//# sourceMappingURL=CommandServiceProxy.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandServiceProxy.test.js","sourceRoot":"","sources":["../../src/services/CommandServiceProxy.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"CommandServiceProxy.test.js","sourceRoot":"","sources":["../../src/services/CommandServiceProxy.test.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;CAC3F,CAAC,CAAC,CAAA;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D,6EAA6E;AAC7E,kEAAkE;AAClE,kEAAkE;AAElE,SAAS,SAAS;IAChB,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;IACvD,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;QAC3B,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;KAC9C,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,IAAI,mBAAmB,EAAE,CAAA;IACvC,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;IACvC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;AAC9B,CAAC;AAED,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACzD,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yFAAyF,EAAE,GAAS,EAAE;QACvG,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAA;QAE3E,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAA;IAC9G,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAS,EAAE;QACvE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QAElD,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACrG,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,oEAAoE,EAAE,GAAS,EAAE;QAClF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QAEvE,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAClD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACrG,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAS,EAAE;QAC7C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;IAC9F,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAS,EAAE;QAC3C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QACxD,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClG,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAA;IAEpC,EAAE,CAAC,4CAA4C,EAAE,GAAS,EAAE;QAC1D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAA;QAChF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;QAClE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,0BAA0B,CAAC,CAAA;QACjF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,4BAA4B,CAAC,CAAA;QACnF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,KAAK,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,oCAAoC,CAAC,CAAA;QAC3F,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,GAAS,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,KAAK,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,gCAAgC,CAAC,CAAA;QACvF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CACjB;QAAC,MAAc,CAAC,cAAc,GAAG,QAAQ,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,OAAQ,MAAc,CAAC,cAAc,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2EAA2E,EAAE,GAAS,EAAE;QACzF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAE3C,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,EAAE;YACzF,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;SACpC,CAAA;QACD,MAAM,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAExC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,GAAS,EAAE;QAC7C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;IACzE,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAS,EAAE;QACjE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;QACzE,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAClF,4BAA4B,CAC7B,CAAA;IACH,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAS,EAAE;QACjD,CAAC;QAAC,MAAc,CAAC,cAAc,GAAG,MAAM,CAAA;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAA;QAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAChF,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAS,EAAE;QACvE,OAAQ,MAAc,CAAC,cAAc,CAAA;QACrC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAA;QAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAChF,CAAC,CAAA,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAS,EAAE;QACvE,CAAC;QAAC,MAAc,CAAC,cAAc,GAAG,MAAM,CAAA;QACxC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAChE,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IAC3C,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;IAChF,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CACjB;QAAC,MAAc,CAAC,cAAc,GAAG,QAAQ,CAAA;IAC5C,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,GAAG,EAAE;QACb,OAAQ,MAAc,CAAC,cAAc,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAS,EAAE;QAC1E,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAA;QACzC,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACvC,MAAM,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAA;QACtC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,iCAAiC,CAAC,CAAA;QACxF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC5B,CAAC,CAAA,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CommandHandler, ExtensionAction } from '../types';
|
|
1
|
+
import type { CommandHandler, DynamicCommandRegistration, ExtensionAction } from '../types';
|
|
2
2
|
export interface ICommandService {
|
|
3
3
|
registerCommand(commandId: string, handler: CommandHandler, extensionId: string, actions?: Omit<ExtensionAction, 'extensionId'>[]): void;
|
|
4
4
|
unregisterCommand(commandId: string): void;
|
|
@@ -9,5 +9,19 @@ export interface ICommandService {
|
|
|
9
9
|
updateCommandMetadata(commandId: string, metadata: {
|
|
10
10
|
subtitle?: string;
|
|
11
11
|
}): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Replace this extension's dynamic command list with the given set.
|
|
14
|
+
* Worker-only — the proxy method asserts `__ASYAR_ROLE__ === 'worker'`
|
|
15
|
+
* at call time. Calling from the view iframe rejects.
|
|
16
|
+
*
|
|
17
|
+
* The SDK proxy and the launcher's host-side `CommandService` have
|
|
18
|
+
* different argument shapes (the proxy injects extensionId from the
|
|
19
|
+
* wire envelope; the host receives it as a positional arg from the
|
|
20
|
+
* IPC router). The host class therefore deviates structurally from
|
|
21
|
+
* this signature in the same way `updateCommandMetadata` does — an
|
|
22
|
+
* accepted pattern in the launcher. Extension authors only see this
|
|
23
|
+
* proxy-side signature.
|
|
24
|
+
*/
|
|
25
|
+
replaceDynamicCommands(regs: DynamicCommandRegistration[]): Promise<void>;
|
|
12
26
|
}
|
|
13
27
|
//# sourceMappingURL=ICommandService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ICommandService.d.ts","sourceRoot":"","sources":["../../src/services/ICommandService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ICommandService.d.ts","sourceRoot":"","sources":["../../src/services/ICommandService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5F,MAAM,WAAW,eAAe;IAC9B,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpF,WAAW,IAAI,MAAM,EAAE,CAAC;IACxB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvD,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,qBAAqB,CACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,sBAAsB,CAAC,IAAI,EAAE,0BAA0B,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseServiceProxy } from './BaseServiceProxy';
|
|
2
|
+
import type { IRunService, RunStartInput, RunHandle } from '../contracts/runs';
|
|
3
|
+
/** SDK-side proxy for the Run Tracker service. */
|
|
4
|
+
export declare class RunServiceProxy extends BaseServiceProxy implements IRunService {
|
|
5
|
+
/** Start a new run and return a handle for writing output and signalling completion. */
|
|
6
|
+
start(input: RunStartInput): Promise<RunHandle>;
|
|
7
|
+
private buildHandle;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=RunServiceProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunServiceProxy.d.ts","sourceRoot":"","sources":["../../src/services/RunServiceProxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI/E,kDAAkD;AAClD,qBAAa,eAAgB,SAAQ,gBAAiB,YAAW,WAAW;IAC1E,wFAAwF;IAClF,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAWrD,OAAO,CAAC,WAAW;CAgEpB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
+
const CANCEL_EVENT = 'asyar:event:runs:cancel';
|
|
12
|
+
/** SDK-side proxy for the Run Tracker service. */
|
|
13
|
+
export class RunServiceProxy extends BaseServiceProxy {
|
|
14
|
+
/** Start a new run and return a handle for writing output and signalling completion. */
|
|
15
|
+
start(input) {
|
|
16
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
var _a;
|
|
18
|
+
const id = crypto.randomUUID();
|
|
19
|
+
const kind = input.kind;
|
|
20
|
+
const label = input.label;
|
|
21
|
+
const cancellable = (_a = input.cancellable) !== null && _a !== void 0 ? _a : false;
|
|
22
|
+
yield this.broker.invoke('runs:start', { id, kind, label, cancellable });
|
|
23
|
+
return this.buildHandle(id);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
buildHandle(id) {
|
|
27
|
+
const broker = this.broker;
|
|
28
|
+
let cancelled = false;
|
|
29
|
+
const callbacks = new Set();
|
|
30
|
+
const handler = (payload) => {
|
|
31
|
+
const p = payload;
|
|
32
|
+
if ((p === null || p === void 0 ? void 0 : p.id) !== id)
|
|
33
|
+
return;
|
|
34
|
+
cancelled = true;
|
|
35
|
+
for (const cb of callbacks)
|
|
36
|
+
cb();
|
|
37
|
+
broker.off(CANCEL_EVENT, handler);
|
|
38
|
+
};
|
|
39
|
+
broker.on(CANCEL_EVENT, handler);
|
|
40
|
+
const unsubscribeAll = () => {
|
|
41
|
+
broker.off(CANCEL_EVENT, handler);
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
get id() { return id; },
|
|
45
|
+
get cancelled() { return cancelled; },
|
|
46
|
+
/** Write a line of output to this run. */
|
|
47
|
+
write(line) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
yield broker.invoke('runs:write', { id, line });
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
/** Signal that the run completed successfully. */
|
|
53
|
+
done() {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
yield broker.invoke('runs:done', { id });
|
|
56
|
+
unsubscribeAll();
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
/** Signal that the run failed with the given error message. */
|
|
60
|
+
fail(error) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
yield broker.invoke('runs:fail', { id, error });
|
|
63
|
+
unsubscribeAll();
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
/** Request cancellation of this run. */
|
|
67
|
+
cancel() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
try {
|
|
70
|
+
yield broker.invoke('runs:cancel', { id });
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
// Release the cancel-event subscription regardless of whether the
|
|
74
|
+
// broker call resolved. On success the launcher emits
|
|
75
|
+
// `asyar:event:runs:cancel` and the handler self-unsubs anyway;
|
|
76
|
+
// on failure (unknown id, etc.) no event ever arrives — without
|
|
77
|
+
// this `finally` the subscription would leak for the lifetime of
|
|
78
|
+
// the worker iframe.
|
|
79
|
+
unsubscribeAll();
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
/** Register a callback that fires when this run is cancelled. Returns an unsubscribe function. */
|
|
84
|
+
onCancel(cb) {
|
|
85
|
+
callbacks.add(cb);
|
|
86
|
+
return () => {
|
|
87
|
+
callbacks.delete(cb);
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=RunServiceProxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunServiceProxy.js","sourceRoot":"","sources":["../../src/services/RunServiceProxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunServiceProxy.test.d.ts","sourceRoot":"","sources":["../../src/services/RunServiceProxy.test.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"ToolsServiceProxy.test.d.ts","sourceRoot":"","sources":["../../src/services/ToolsServiceProxy.test.ts"],"names":[],"mappings":""}
|