@minionry/sdk 0.4.23 → 0.5.2
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/cdn/v1.js +14 -14
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/provider.js +86 -2
- package/dist/transport.d.ts +1 -1
- package/dist/transports/mock.d.ts +7 -0
- package/dist/transports/mock.js +784 -86
- package/dist/types.d.ts +137 -4
- package/dist/types.js +5 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export * from './transport.js';
|
|
|
3
3
|
export * from './protocol.js';
|
|
4
4
|
export { createProvider } from './provider.js';
|
|
5
5
|
export { createMockTransport, mock } from './transports/mock.js';
|
|
6
|
-
export type { MockConfig, MockToolCallOptions, MockToolsController, MockToolSummary, } from './transports/mock.js';
|
|
6
|
+
export type { MockChainsController, MockConfig, MockToolCallOptions, MockToolsController, MockToolSummary, } from './transports/mock.js';
|
|
7
7
|
export { connectPostMessage, createPostMessageTransport } from './transports/post-message.js';
|
|
8
8
|
export type { PostMessageTransportOptions } from './transports/post-message.js';
|
|
9
9
|
export { installKeyboardForwarding } from './keyboard.js';
|
|
@@ -12,5 +12,5 @@ export { announceProvider, detect } from './detect.js';
|
|
|
12
12
|
export type { DetectOptions } from './detect.js';
|
|
13
13
|
export { createOfflineCache } from './cache.js';
|
|
14
14
|
export type { OfflineCache, OfflineCacheEntry, OfflineCacheOptions, SwrOptions } from './cache.js';
|
|
15
|
-
export declare const SDK_VERSION = "0.
|
|
15
|
+
export declare const SDK_VERSION = "0.5.2";
|
|
16
16
|
export declare const PROVIDER_API_VERSION = "1";
|
package/dist/index.js
CHANGED
|
@@ -7,5 +7,5 @@ export { connectPostMessage, createPostMessageTransport } from './transports/pos
|
|
|
7
7
|
export { installKeyboardForwarding } from './keyboard.js';
|
|
8
8
|
export { announceProvider, detect } from './detect.js';
|
|
9
9
|
export { createOfflineCache } from './cache.js';
|
|
10
|
-
export const SDK_VERSION = '0.
|
|
10
|
+
export const SDK_VERSION = '0.5.2';
|
|
11
11
|
export const PROVIDER_API_VERSION = '1';
|
package/dist/provider.js
CHANGED
|
@@ -52,6 +52,15 @@ const APP_ENDPOINTS_FEATURE = 'appEndpoints';
|
|
|
52
52
|
const AGENTS_APP_ENDPOINT_FEATURE = 'agentsAppEndpoint';
|
|
53
53
|
const AGENT_RUN_APP_ENDPOINT_FIELDS = ['model', 'systemPrompt', 'budget', 'sessionId'];
|
|
54
54
|
const AGENTS_MODEL_SELECTION_FEATURE = 'agentsModelSelection';
|
|
55
|
+
const AGENTS_ENGINE_SELECTION_FEATURE = 'agentsEngineSelection';
|
|
56
|
+
const FILES_CONDITIONAL_WRITE_FEATURE = 'filesConditionalWrite';
|
|
57
|
+
const INFERENCE_FAST_MODE_FEATURE = 'inferenceFastMode';
|
|
58
|
+
const PM_CHAINS_FEATURE = 'pmChains';
|
|
59
|
+
const AGENT_SCHEDULES_FEATURE = 'agentSchedules';
|
|
60
|
+
const SCHEDULE_WALL_CLOCK_FEATURE = 'scheduleWallClock';
|
|
61
|
+
const PM_SCHEDULE_ZIP_FEATURE = 'pmScheduleZip';
|
|
62
|
+
const PM_SCHEDULE_RUN_NOW_FEATURE = 'pmScheduleRunNow';
|
|
63
|
+
const WALL_CLOCK_TIMING_KINDS = new Set(['daily', 'monthly']);
|
|
55
64
|
function deliverStreamFrames(tracker, frames) {
|
|
56
65
|
for (const frame of [...frames].sort((a, b) => a.seq - b.seq)) {
|
|
57
66
|
if (frame.seq <= tracker.lastSeq)
|
|
@@ -107,6 +116,14 @@ export function createProvider(transport) {
|
|
|
107
116
|
throw new MinionryError('UNSUPPORTED', `${what} needs a host that advertises the '${flag}' feature — this host does not, so nothing was sent`);
|
|
108
117
|
}
|
|
109
118
|
};
|
|
119
|
+
const requireWallClockFeature = async (what, timing, maxLatenessMs) => {
|
|
120
|
+
if (maxLatenessMs !== undefined) {
|
|
121
|
+
await requireFeature(SCHEDULE_WALL_CLOCK_FEATURE, `${what} with maxLatenessMs`);
|
|
122
|
+
}
|
|
123
|
+
else if (timing !== undefined && WALL_CLOCK_TIMING_KINDS.has(timing.kind)) {
|
|
124
|
+
await requireFeature(SCHEDULE_WALL_CLOCK_FEATURE, `${what} with ${timing.kind} timing`);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
110
127
|
const supportsResume = () => hostFeatures().then((flags) => flags.includes(STREAM_RESUME_FEATURE), () => false);
|
|
111
128
|
const registerStream = (requestId, deliver, onGap) => {
|
|
112
129
|
streams.set(requestId, { lastSeq: 0, resuming: false, pending: [], deliver, onGap });
|
|
@@ -304,11 +321,16 @@ export function createProvider(transport) {
|
|
|
304
321
|
if (req.modelSelection !== undefined) {
|
|
305
322
|
await requireFeature(AGENTS_MODEL_SELECTION_FEATURE, 'agents.run with modelSelection');
|
|
306
323
|
}
|
|
324
|
+
if (req.engineSelection !== undefined) {
|
|
325
|
+
await requireFeature(AGENTS_ENGINE_SELECTION_FEATURE, 'agents.run with engineSelection');
|
|
326
|
+
}
|
|
307
327
|
const params = { prompt: req.prompt, title: req.title };
|
|
308
328
|
for (const field of endpointFields)
|
|
309
329
|
params[field] = req[field];
|
|
310
330
|
if (req.modelSelection !== undefined)
|
|
311
331
|
params.modelSelection = req.modelSelection;
|
|
332
|
+
if (req.engineSelection !== undefined)
|
|
333
|
+
params.engineSelection = req.engineSelection;
|
|
312
334
|
const requestId = mintRequestId();
|
|
313
335
|
const runEvents = new Emitter();
|
|
314
336
|
registerStream(requestId, (event, payload) => runEvents.emit(event, payload), (message) => runEvents.emit('gap', { message }));
|
|
@@ -378,6 +400,29 @@ export function createProvider(transport) {
|
|
|
378
400
|
await request('agents.sessions.stop', { sessionId });
|
|
379
401
|
},
|
|
380
402
|
},
|
|
403
|
+
schedules: {
|
|
404
|
+
async list() {
|
|
405
|
+
await requireFeature(AGENT_SCHEDULES_FEATURE, 'agents.schedules.list');
|
|
406
|
+
const result = (await request('agents.schedules.list', {}));
|
|
407
|
+
return Array.isArray(result) ? result : result.schedules;
|
|
408
|
+
},
|
|
409
|
+
async create(req) {
|
|
410
|
+
await requireFeature(AGENT_SCHEDULES_FEATURE, 'agents.schedules.create');
|
|
411
|
+
return (await request('agents.schedules.create', req));
|
|
412
|
+
},
|
|
413
|
+
async update(scheduleId, patch) {
|
|
414
|
+
await requireFeature(AGENT_SCHEDULES_FEATURE, 'agents.schedules.update');
|
|
415
|
+
return (await request('agents.schedules.update', { scheduleId, patch }));
|
|
416
|
+
},
|
|
417
|
+
async delete(scheduleId) {
|
|
418
|
+
await requireFeature(AGENT_SCHEDULES_FEATURE, 'agents.schedules.delete');
|
|
419
|
+
await request('agents.schedules.delete', { scheduleId });
|
|
420
|
+
},
|
|
421
|
+
async runNow(scheduleId) {
|
|
422
|
+
await requireFeature(AGENT_SCHEDULES_FEATURE, 'agents.schedules.runNow');
|
|
423
|
+
return (await request('agents.schedules.runNow', { scheduleId }));
|
|
424
|
+
},
|
|
425
|
+
},
|
|
381
426
|
},
|
|
382
427
|
apps: {
|
|
383
428
|
async open(req) {
|
|
@@ -474,14 +519,42 @@ export function createProvider(transport) {
|
|
|
474
519
|
return result.schedules;
|
|
475
520
|
},
|
|
476
521
|
async create(req) {
|
|
522
|
+
if (req.source?.kind === 'board-zip') {
|
|
523
|
+
await requireFeature(PM_SCHEDULE_ZIP_FEATURE, 'pm.schedules.create with a board-zip source');
|
|
524
|
+
}
|
|
525
|
+
await requireWallClockFeature('pm.schedules.create', req.timing, req.maxLatenessMs);
|
|
477
526
|
return (await request('pm.schedules.create', req));
|
|
478
527
|
},
|
|
479
528
|
async update(scheduleId, patch) {
|
|
529
|
+
await requireWallClockFeature('pm.schedules.update', patch.timing, patch.maxLatenessMs);
|
|
480
530
|
return (await request('pm.schedules.update', { scheduleId, patch }));
|
|
481
531
|
},
|
|
482
532
|
async delete(scheduleId) {
|
|
483
533
|
await request('pm.schedules.delete', { scheduleId });
|
|
484
534
|
},
|
|
535
|
+
async runNow(scheduleId) {
|
|
536
|
+
await requireFeature(PM_SCHEDULE_RUN_NOW_FEATURE, 'pm.schedules.runNow');
|
|
537
|
+
return (await request('pm.schedules.runNow', { scheduleId }));
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
chains: {
|
|
541
|
+
async list() {
|
|
542
|
+
await requireFeature(PM_CHAINS_FEATURE, 'pm.chains.list');
|
|
543
|
+
const result = (await request('pm.chains.list', {}));
|
|
544
|
+
return result.links;
|
|
545
|
+
},
|
|
546
|
+
async create(req) {
|
|
547
|
+
await requireFeature(PM_CHAINS_FEATURE, 'pm.chains.create');
|
|
548
|
+
return (await request('pm.chains.create', req));
|
|
549
|
+
},
|
|
550
|
+
async update(linkId, patch) {
|
|
551
|
+
await requireFeature(PM_CHAINS_FEATURE, 'pm.chains.update');
|
|
552
|
+
return (await request('pm.chains.update', { linkId, patch }));
|
|
553
|
+
},
|
|
554
|
+
async delete(linkId) {
|
|
555
|
+
await requireFeature(PM_CHAINS_FEATURE, 'pm.chains.delete');
|
|
556
|
+
await request('pm.chains.delete', { linkId });
|
|
557
|
+
},
|
|
485
558
|
},
|
|
486
559
|
},
|
|
487
560
|
files: {
|
|
@@ -491,8 +564,14 @@ export function createProvider(transport) {
|
|
|
491
564
|
async readEntry(path) {
|
|
492
565
|
return (await request('files.readEntry', { path }));
|
|
493
566
|
},
|
|
494
|
-
async write(path, content) {
|
|
495
|
-
|
|
567
|
+
async write(path, content, opts) {
|
|
568
|
+
const expectedModifiedAt = opts?.expectedModifiedAt;
|
|
569
|
+
if (expectedModifiedAt === undefined) {
|
|
570
|
+
await request('files.write', { path, content });
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
await requireFeature(FILES_CONDITIONAL_WRITE_FEATURE, 'files.write with expectedModifiedAt');
|
|
574
|
+
await request('files.write', { path, content, expectedModifiedAt });
|
|
496
575
|
},
|
|
497
576
|
async list(path) {
|
|
498
577
|
return (await request('files.list', { path }));
|
|
@@ -547,6 +626,8 @@ export function createProvider(transport) {
|
|
|
547
626
|
registerStream(requestId, (event, payload) => {
|
|
548
627
|
if (active && event === 'changed')
|
|
549
628
|
cb(payload);
|
|
629
|
+
if (active && event === 'gap')
|
|
630
|
+
providerEvents.emit('fileChangeGap', { path, ...payload });
|
|
550
631
|
}, (message) => {
|
|
551
632
|
if (active)
|
|
552
633
|
providerEvents.emit('fileChangeGap', { path, message });
|
|
@@ -1432,12 +1513,15 @@ export function createProvider(transport) {
|
|
|
1432
1513
|
registerStream(requestId, (event, payload) => runEvents.emit(event, payload), (message) => runEvents.emit('gap', { message }));
|
|
1433
1514
|
let runId;
|
|
1434
1515
|
try {
|
|
1516
|
+
const fastMode = req.fastMode === true &&
|
|
1517
|
+
(await hostFeatures().then((flags) => flags.includes(INFERENCE_FAST_MODE_FEATURE), () => false));
|
|
1435
1518
|
const params = {
|
|
1436
1519
|
messages: req.messages,
|
|
1437
1520
|
system: req.system,
|
|
1438
1521
|
engine: req.engine,
|
|
1439
1522
|
model: req.model,
|
|
1440
1523
|
effortLevel: req.effortLevel,
|
|
1524
|
+
...(fastMode ? { fastMode: true } : {}),
|
|
1441
1525
|
};
|
|
1442
1526
|
runId = (await request('inference.chat', params, requestId)).runId;
|
|
1443
1527
|
}
|
package/dist/transport.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type SdkMethodName = 'features' | 'connect' | 'disconnect' | 'auth.getToken' | 'agents.run' | 'agents.result' | 'agents.sessions.list' | 'agents.sessions.create' | 'agents.sessions.attach' | 'agents.sessions.close' | 'agents.sessions.rename' | 'agents.sessions.history' | 'agents.sessions.replay' | 'agents.sessions.approve' | 'agents.sessions.answerQuestion' | 'agents.sessions.prompt' | 'agents.sessions.stop' | 'apps.open' | 'cancel' | 'pm.createBoard' | 'pm.getBoard' | 'pm.listBoards' | 'pm.createIssue' | 'pm.updateIssue' | 'pm.deleteIssue' | 'pm.updateBoard' | 'pm.subscribeBoard' | 'pm.execute' | 'pm.pause' | 'pm.resume' | 'pm.stop' | 'pm.schedules.list' | 'pm.schedules.create' | 'pm.schedules.update' | 'pm.schedules.delete' | 'stream.resume' | 'files.read' | 'files.readEntry' | 'files.write' | 'files.list' | 'files.delete' | 'files.mkdir' | 'files.rename' | 'files.search' | 'files.definition' | 'files.subscribeChanges' | 'files.uploadStart' | 'files.uploadChunk' | 'files.uploadStatus' | 'files.uploadCancel' | 'files.downloadStart' | 'files.downloadChunk' | 'files.downloadCancel' | 'storage.get' | 'storage.set' | 'storage.delete' | 'storage.keys' | 'notifications.request' | 'notifications.status' | 'notifications.revoke' | 'theme.get' | 'locale.get' | 'browser.tabs.list' | 'browser.tabs.subscribe' | 'browser.navigate' | 'browser.open' | 'browser.close' | 'browser.select' | 'browser.snapshot' | 'browser.screenshot' | 'browser.evaluate' | 'browser.automate' | 'browser.automate.approve' | 'browser.back' | 'browser.forward' | 'browser.reload' | 'browser.stop' | 'browser.view.attach' | 'browser.view.answer' | 'browser.view.ice' | 'browser.view.state' | 'browser.view.input' | 'browser.view.bounds' | 'browser.preflight' | 'browser.resumeDriver' | 'browser.setDeviceProfile' | 'composer.autocomplete' | 'composer.skills' | 'composer.snippets' | 'composer.settings' | 'terminal.sessions.list' | 'terminal.sessions.subscribe' | 'terminal.open' | 'terminal.attach' | 'terminal.write' | 'terminal.resize' | 'terminal.close' | 'git.status' | 'git.log' | 'git.diff' | 'git.show' | 'git.commitDiff' | 'git.branches.list' | 'git.branches.create' | 'git.branches.delete' | 'git.tags.list' | 'git.tags.create' | 'git.tags.push' | 'git.remote.info' | 'git.repos.discover' | 'git.worktrees.list' | 'git.worktrees.create' | 'git.worktrees.remove' | 'git.worktrees.switchActive' | 'git.worktrees.subscribe' | 'git.merge.preview' | 'git.merge.run' | 'git.merge.abort' | 'git.merge.complete' | 'git.merge.stashPop' | 'git.merge.discardBlockers' | 'git.pr.generateDescription' | 'git.pr.create' | 'git.stage' | 'git.unstage' | 'git.commit' | 'git.generateCommitMessage' | 'git.checkout' | 'git.push' | 'git.pull' | 'git.subscribeBranchChanged' | 'git.subscribeCommitSuggestion' | 'tools.register' | 'tools.result' | 'quality.state' | 'quality.detectTools' | 'quality.result' | 'quality.settings' | 'quality.subscribeChanges' | 'quality.run' | 'quality.cancel' | 'quality.installTools' | 'quality.saveDirectories' | 'quality.setSettings' | 'inference.chat' | 'inference.result' | 'endpoints.register' | 'endpoints.unregister' | 'endpoints.list' | 'quality.setFindingState' | 'quality.schedules.list' | 'quality.schedules.create' | 'quality.schedules.update' | 'quality.schedules.delete';
|
|
1
|
+
export type SdkMethodName = 'features' | 'connect' | 'disconnect' | 'auth.getToken' | 'agents.run' | 'agents.result' | 'agents.sessions.list' | 'agents.sessions.create' | 'agents.sessions.attach' | 'agents.sessions.close' | 'agents.sessions.rename' | 'agents.sessions.history' | 'agents.sessions.replay' | 'agents.sessions.approve' | 'agents.sessions.answerQuestion' | 'agents.sessions.prompt' | 'agents.sessions.stop' | 'agents.schedules.list' | 'agents.schedules.create' | 'agents.schedules.update' | 'agents.schedules.delete' | 'agents.schedules.runNow' | 'apps.open' | 'cancel' | 'pm.createBoard' | 'pm.getBoard' | 'pm.listBoards' | 'pm.createIssue' | 'pm.updateIssue' | 'pm.deleteIssue' | 'pm.updateBoard' | 'pm.subscribeBoard' | 'pm.execute' | 'pm.pause' | 'pm.resume' | 'pm.stop' | 'pm.schedules.list' | 'pm.schedules.create' | 'pm.schedules.update' | 'pm.schedules.delete' | 'pm.schedules.runNow' | 'pm.chains.list' | 'pm.chains.create' | 'pm.chains.update' | 'pm.chains.delete' | 'stream.resume' | 'files.read' | 'files.readEntry' | 'files.write' | 'files.list' | 'files.delete' | 'files.mkdir' | 'files.rename' | 'files.search' | 'files.definition' | 'files.subscribeChanges' | 'files.uploadStart' | 'files.uploadChunk' | 'files.uploadStatus' | 'files.uploadCancel' | 'files.downloadStart' | 'files.downloadChunk' | 'files.downloadCancel' | 'storage.get' | 'storage.set' | 'storage.delete' | 'storage.keys' | 'notifications.request' | 'notifications.status' | 'notifications.revoke' | 'theme.get' | 'locale.get' | 'browser.tabs.list' | 'browser.tabs.subscribe' | 'browser.navigate' | 'browser.open' | 'browser.close' | 'browser.select' | 'browser.snapshot' | 'browser.screenshot' | 'browser.evaluate' | 'browser.automate' | 'browser.automate.approve' | 'browser.back' | 'browser.forward' | 'browser.reload' | 'browser.stop' | 'browser.view.attach' | 'browser.view.answer' | 'browser.view.ice' | 'browser.view.state' | 'browser.view.input' | 'browser.view.bounds' | 'browser.preflight' | 'browser.resumeDriver' | 'browser.setDeviceProfile' | 'composer.autocomplete' | 'composer.skills' | 'composer.snippets' | 'composer.settings' | 'terminal.sessions.list' | 'terminal.sessions.subscribe' | 'terminal.open' | 'terminal.attach' | 'terminal.write' | 'terminal.resize' | 'terminal.close' | 'git.status' | 'git.log' | 'git.diff' | 'git.show' | 'git.commitDiff' | 'git.branches.list' | 'git.branches.create' | 'git.branches.delete' | 'git.tags.list' | 'git.tags.create' | 'git.tags.push' | 'git.remote.info' | 'git.repos.discover' | 'git.worktrees.list' | 'git.worktrees.create' | 'git.worktrees.remove' | 'git.worktrees.switchActive' | 'git.worktrees.subscribe' | 'git.merge.preview' | 'git.merge.run' | 'git.merge.abort' | 'git.merge.complete' | 'git.merge.stashPop' | 'git.merge.discardBlockers' | 'git.pr.generateDescription' | 'git.pr.create' | 'git.stage' | 'git.unstage' | 'git.commit' | 'git.generateCommitMessage' | 'git.checkout' | 'git.push' | 'git.pull' | 'git.subscribeBranchChanged' | 'git.subscribeCommitSuggestion' | 'tools.register' | 'tools.result' | 'quality.state' | 'quality.detectTools' | 'quality.result' | 'quality.settings' | 'quality.subscribeChanges' | 'quality.run' | 'quality.cancel' | 'quality.installTools' | 'quality.saveDirectories' | 'quality.setSettings' | 'inference.chat' | 'inference.result' | 'endpoints.register' | 'endpoints.unregister' | 'endpoints.list' | 'quality.setFindingState' | 'quality.schedules.list' | 'quality.schedules.create' | 'quality.schedules.update' | 'quality.schedules.delete';
|
|
2
2
|
export interface SdkRequestFrame {
|
|
3
3
|
requestId: string;
|
|
4
4
|
method: SdkMethodName;
|
|
@@ -12,6 +12,9 @@ export interface MockToolsController {
|
|
|
12
12
|
call(tool: string, input?: unknown, opts?: MockToolCallOptions): Promise<unknown>;
|
|
13
13
|
cancel(callId: string): void;
|
|
14
14
|
}
|
|
15
|
+
export interface MockChainsController {
|
|
16
|
+
settleBoard(boardId: string, outcome: 'success' | 'failure'): void;
|
|
17
|
+
}
|
|
15
18
|
export interface MockConfig {
|
|
16
19
|
space?: Partial<SpaceInfo>;
|
|
17
20
|
user?: Partial<UserInfo> | null;
|
|
@@ -21,9 +24,13 @@ export interface MockConfig {
|
|
|
21
24
|
storage?: Record<string, unknown>;
|
|
22
25
|
theme?: Partial<ThemeSnapshot>;
|
|
23
26
|
locale?: Partial<LocaleSnapshot>;
|
|
27
|
+
agentRunEngines?: string[] | null;
|
|
24
28
|
tools?: {
|
|
25
29
|
onRegister?(controller: MockToolsController): void;
|
|
26
30
|
};
|
|
31
|
+
chains?: {
|
|
32
|
+
onReady?(controller: MockChainsController): void;
|
|
33
|
+
};
|
|
27
34
|
}
|
|
28
35
|
export declare function createMockTransport(config?: MockConfig): Transport;
|
|
29
36
|
export declare function mock(config?: MockConfig): MinionryProvider;
|