@yu_robotics/remote-cli 1.6.151 → 1.6.154
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/README.md +22 -5
- package/dist/client/MessageHandler.d.ts +14 -7
- package/dist/client/MessageHandler.d.ts.map +1 -1
- package/dist/client/MessageHandler.js +225 -96
- package/dist/client/MessageHandler.js.map +1 -1
- package/dist/client/WebSocketClient.d.ts.map +1 -1
- package/dist/client/WebSocketClient.js +1 -0
- package/dist/client/WebSocketClient.js.map +1 -1
- package/dist/delegation/BoundedFileChecks.d.ts +3 -0
- package/dist/delegation/BoundedFileChecks.d.ts.map +1 -0
- package/dist/delegation/BoundedFileChecks.js +13 -0
- package/dist/delegation/BoundedFileChecks.js.map +1 -0
- package/dist/delegation/DelegatedWorkspaceManager.d.ts.map +1 -1
- package/dist/delegation/DelegatedWorkspaceManager.js +14 -7
- package/dist/delegation/DelegatedWorkspaceManager.js.map +1 -1
- package/dist/delegation/GitCheckpoint.d.ts.map +1 -1
- package/dist/delegation/GitCheckpoint.js +49 -32
- package/dist/delegation/GitCheckpoint.js.map +1 -1
- package/dist/executor/AcpExecutor.d.ts +6 -1
- package/dist/executor/AcpExecutor.d.ts.map +1 -1
- package/dist/executor/AcpExecutor.js +96 -7
- package/dist/executor/AcpExecutor.js.map +1 -1
- package/dist/executor/AgyExecutor.d.ts +6 -1
- package/dist/executor/AgyExecutor.d.ts.map +1 -1
- package/dist/executor/AgyExecutor.js +43 -1
- package/dist/executor/AgyExecutor.js.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.d.ts +33 -6
- package/dist/executor/ClaudePersistentExecutor.d.ts.map +1 -1
- package/dist/executor/ClaudePersistentExecutor.js +308 -38
- package/dist/executor/ClaudePersistentExecutor.js.map +1 -1
- package/dist/executor/CodexAppServerExecutor.d.ts +3 -1
- package/dist/executor/CodexAppServerExecutor.d.ts.map +1 -1
- package/dist/executor/CodexAppServerExecutor.js +65 -11
- package/dist/executor/CodexAppServerExecutor.js.map +1 -1
- package/dist/executor/CodexCommandActions.d.ts +2 -2
- package/dist/executor/CodexCommandActions.d.ts.map +1 -1
- package/dist/executor/CodexCommandActions.js +26 -5
- package/dist/executor/CodexCommandActions.js.map +1 -1
- package/dist/executor/DshExecutor.js +2 -2
- package/dist/executor/DshExecutor.js.map +1 -1
- package/dist/executor/IExecutor.d.ts +20 -0
- package/dist/executor/IExecutor.d.ts.map +1 -1
- package/dist/executor/PiExecutor.d.ts +2 -1
- package/dist/executor/PiExecutor.d.ts.map +1 -1
- package/dist/executor/PiExecutor.js +70 -53
- package/dist/executor/PiExecutor.js.map +1 -1
- package/dist/executor/acp/AcpClient.d.ts.map +1 -1
- package/dist/executor/acp/AcpClient.js +23 -3
- package/dist/executor/acp/AcpClient.js.map +1 -1
- package/dist/executor/acp/AcpTypes.d.ts +8 -1
- package/dist/executor/acp/AcpTypes.d.ts.map +1 -1
- package/dist/executor/agy/AgyModels.d.ts +32 -0
- package/dist/executor/agy/AgyModels.d.ts.map +1 -0
- package/dist/executor/agy/AgyModels.js +112 -0
- package/dist/executor/agy/AgyModels.js.map +1 -0
- package/dist/executor/claude/ClaudeSettings.d.ts +28 -0
- package/dist/executor/claude/ClaudeSettings.d.ts.map +1 -0
- package/dist/executor/claude/ClaudeSettings.js +121 -0
- package/dist/executor/claude/ClaudeSettings.js.map +1 -0
- package/dist/executor/index.d.ts +1 -1
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +3 -3
- package/dist/executor/index.js.map +1 -1
- package/dist/maintenance/release-notes.json +1 -1
- package/dist/settings/SettingsAdmission.d.ts +12 -0
- package/dist/settings/SettingsAdmission.d.ts.map +1 -0
- package/dist/settings/SettingsAdmission.js +55 -0
- package/dist/settings/SettingsAdmission.js.map +1 -0
- package/dist/settings/SettingsCatalog.d.ts +23 -0
- package/dist/settings/SettingsCatalog.d.ts.map +1 -0
- package/dist/settings/SettingsCatalog.js +137 -0
- package/dist/settings/SettingsCatalog.js.map +1 -0
- package/dist/settings/SettingsService.d.ts +48 -0
- package/dist/settings/SettingsService.d.ts.map +1 -0
- package/dist/settings/SettingsService.js +218 -0
- package/dist/settings/SettingsService.js.map +1 -0
- package/dist/thread/ThreadExecutorPool.js +1 -1
- package/dist/thread/ThreadExecutorPool.js.map +1 -1
- package/dist/thread/types.d.ts +1 -1
- package/dist/thread/types.d.ts.map +1 -1
- package/dist/types/Settings.d.ts +64 -0
- package/dist/types/Settings.d.ts.map +1 -0
- package/dist/types/Settings.js +3 -0
- package/dist/types/Settings.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class SettingsBusyError extends Error {
|
|
2
|
+
}
|
|
3
|
+
/** Settings writes exclude admission, without serializing unrelated model turns. */
|
|
4
|
+
export declare class SettingsAdmission {
|
|
5
|
+
private readonly readers;
|
|
6
|
+
private readonly writers;
|
|
7
|
+
hasCommand(threadId: string, exceptRequest?: string): boolean;
|
|
8
|
+
isBlocked(threadId: string): boolean;
|
|
9
|
+
command<T>(threadId: string, requestId: string, body: () => Promise<T>): Promise<T>;
|
|
10
|
+
mutation<T>(target: string, body: () => Promise<T>): Promise<T>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=SettingsAdmission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsAdmission.d.ts","sourceRoot":"","sources":["../../src/settings/SettingsAdmission.ts"],"names":[],"mappings":"AAKA,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0C;IAClE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;IAI7D,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAenF,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAatE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SettingsAdmission = exports.SettingsBusyError = void 0;
|
|
4
|
+
class SettingsBusyError extends Error {
|
|
5
|
+
}
|
|
6
|
+
exports.SettingsBusyError = SettingsBusyError;
|
|
7
|
+
/** Settings writes exclude admission, without serializing unrelated model turns. */
|
|
8
|
+
class SettingsAdmission {
|
|
9
|
+
readers = new Map();
|
|
10
|
+
writers = new Map();
|
|
11
|
+
hasCommand(threadId, exceptRequest) {
|
|
12
|
+
return [...(this.readers.get(threadId)?.values() ?? [])].some(id => id !== exceptRequest);
|
|
13
|
+
}
|
|
14
|
+
isBlocked(threadId) {
|
|
15
|
+
return this.writers.has('*') || this.writers.has(threadId);
|
|
16
|
+
}
|
|
17
|
+
async command(threadId, requestId, body) {
|
|
18
|
+
while (this.isBlocked(threadId)) {
|
|
19
|
+
await (this.writers.get('*') ?? this.writers.get(threadId)).done;
|
|
20
|
+
}
|
|
21
|
+
const token = Symbol(requestId);
|
|
22
|
+
const readers = this.readers.get(threadId) ?? new Map();
|
|
23
|
+
readers.set(token, requestId);
|
|
24
|
+
this.readers.set(threadId, readers);
|
|
25
|
+
try {
|
|
26
|
+
return await body();
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
readers.delete(token);
|
|
30
|
+
if (!readers.size)
|
|
31
|
+
this.readers.delete(threadId);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async mutation(target, body) {
|
|
35
|
+
const readers = target === '*'
|
|
36
|
+
? [...this.readers.values()].some(entries => entries.size > 0)
|
|
37
|
+
: (this.readers.get(target)?.size ?? 0) > 0;
|
|
38
|
+
const writer = this.writers.has('*') || this.writers.has(target)
|
|
39
|
+
|| (target === '*' && this.writers.size > 0);
|
|
40
|
+
if (writer || readers)
|
|
41
|
+
throw new SettingsBusyError('The affected thread is busy with a command or another settings operation. Retry when it is idle.');
|
|
42
|
+
let release;
|
|
43
|
+
const done = new Promise(resolve => { release = resolve; });
|
|
44
|
+
this.writers.set(target, { done, release });
|
|
45
|
+
try {
|
|
46
|
+
return await body();
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
this.writers.delete(target);
|
|
50
|
+
release();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.SettingsAdmission = SettingsAdmission;
|
|
55
|
+
//# sourceMappingURL=SettingsAdmission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsAdmission.js","sourceRoot":"","sources":["../../src/settings/SettingsAdmission.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createExecutor } from '../executor';
|
|
2
|
+
import type { IExecutor } from '../executor/IExecutor';
|
|
3
|
+
import type { DirectoryGuard } from '../security/DirectoryGuard';
|
|
4
|
+
import type { Thread } from '../thread/types';
|
|
5
|
+
import type { ExecutorConfig } from '../types/config';
|
|
6
|
+
import type { SettingsBackend } from '../types/Settings';
|
|
7
|
+
import type { SettingsCatalog } from './SettingsService';
|
|
8
|
+
type Factory = typeof createExecutor;
|
|
9
|
+
/** Resolve policy under the real identity before using any synthetic preview ID. */
|
|
10
|
+
export declare function metadataConfiguration(config: ExecutorConfig, guard: DirectoryGuard, threadId: string, coordinator: SettingsBackend, target: SettingsBackend): ExecutorConfig;
|
|
11
|
+
export declare function configuredBackendModel(config: ExecutorConfig, backend: SettingsBackend): string | undefined;
|
|
12
|
+
/** Catalog previews never share direct/Worker pointers and never enter ThreadExecutorPool. */
|
|
13
|
+
export declare class SettingsCatalogReader {
|
|
14
|
+
private readonly guard;
|
|
15
|
+
private readonly factory;
|
|
16
|
+
private readonly timeoutMs;
|
|
17
|
+
private readonly cleanupTimeoutMs;
|
|
18
|
+
constructor(guard: DirectoryGuard, factory?: Factory, timeoutMs?: number, cleanupTimeoutMs?: number);
|
|
19
|
+
withExecutor<T>(config: ExecutorConfig, thread: Thread, coordinator: SettingsBackend, target: SettingsBackend, body: (executor: IExecutor) => Promise<T>, withoutModelOverride?: boolean): Promise<T>;
|
|
20
|
+
read(config: ExecutorConfig, thread: Thread, coordinator: SettingsBackend, target: SettingsBackend, kind: 'model' | 'effort'): Promise<SettingsCatalog>;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=SettingsCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsCatalog.d.ts","sourceRoot":"","sources":["../../src/settings/SettingsCatalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,KAAK,OAAO,GAAG,OAAO,cAAc,CAAC;AAErC,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EACnG,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAYvE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAE3G;AAED,8FAA8F;AAC9F,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAkB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAC1E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAAW,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAD3C,KAAK,EAAE,cAAc,EAAmB,OAAO,GAAE,OAAwB,EACnF,SAAS,SAAS,EAAmB,gBAAgB,SAAS;IAE3E,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EACxF,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,oBAAoB,UAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAoDzG,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAC7E,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;CA6B/E"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SettingsCatalogReader = void 0;
|
|
4
|
+
exports.metadataConfiguration = metadataConfiguration;
|
|
5
|
+
exports.configuredBackendModel = configuredBackendModel;
|
|
6
|
+
const crypto_1 = require("crypto");
|
|
7
|
+
const executor_1 = require("../executor");
|
|
8
|
+
const CodexSandbox_1 = require("../executor/CodexSandbox");
|
|
9
|
+
const ClaudeSandbox_1 = require("../executor/claude/ClaudeSandbox");
|
|
10
|
+
const ThreadExecutorPool_1 = require("../thread/ThreadExecutorPool");
|
|
11
|
+
/** Resolve policy under the real identity before using any synthetic preview ID. */
|
|
12
|
+
function metadataConfiguration(config, guard, threadId, coordinator, target) {
|
|
13
|
+
const read = (backend) => backend === 'codex'
|
|
14
|
+
? new CodexSandbox_1.CodexSandbox(guard, config.codex?.sandbox, threadId).getConfig()
|
|
15
|
+
: backend === 'claude' ? new ClaudeSandbox_1.ClaudeSandbox(guard, config.claude?.sandbox, threadId).getConfig() : undefined;
|
|
16
|
+
const parentPolicy = read(coordinator);
|
|
17
|
+
if ((parentPolicy?.mode === 'workspace-write' || parentPolicy?.mode === 'read-only') && coordinator !== target) {
|
|
18
|
+
throw new Error('Catalog queries for a different backend are unavailable while the coordinator sandbox is enabled.');
|
|
19
|
+
}
|
|
20
|
+
const result = { ...config, type: target === 'claude' ? 'claude-persistent' : target };
|
|
21
|
+
if (target === 'codex')
|
|
22
|
+
result.codex = { ...config.codex, sandbox: read(target) };
|
|
23
|
+
if (target === 'claude')
|
|
24
|
+
result.claude = { ...config.claude, sandbox: read(target) };
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
function configuredBackendModel(config, backend) {
|
|
28
|
+
return config[backend]?.model;
|
|
29
|
+
}
|
|
30
|
+
/** Catalog previews never share direct/Worker pointers and never enter ThreadExecutorPool. */
|
|
31
|
+
class SettingsCatalogReader {
|
|
32
|
+
guard;
|
|
33
|
+
factory;
|
|
34
|
+
timeoutMs;
|
|
35
|
+
cleanupTimeoutMs;
|
|
36
|
+
constructor(guard, factory = executor_1.createExecutor, timeoutMs = 10_000, cleanupTimeoutMs = 10_000) {
|
|
37
|
+
this.guard = guard;
|
|
38
|
+
this.factory = factory;
|
|
39
|
+
this.timeoutMs = timeoutMs;
|
|
40
|
+
this.cleanupTimeoutMs = cleanupTimeoutMs;
|
|
41
|
+
}
|
|
42
|
+
async withExecutor(config, thread, coordinator, target, body, withoutModelOverride = false) {
|
|
43
|
+
const resolved = metadataConfiguration(config, this.guard, thread.id, coordinator, target);
|
|
44
|
+
const id = `settings-meta-${(0, crypto_1.randomUUID)()}`;
|
|
45
|
+
const model = withoutModelOverride ? configuredBackendModel(resolved, target) : (0, ThreadExecutorPool_1.resolveThreadModel)(thread, resolved);
|
|
46
|
+
const executor = this.factory(this.guard, resolved, thread.workingDirectory, id, model, thread.efforts?.[target], { lifecycleHooks: false, delegationWorker: true });
|
|
47
|
+
let timer;
|
|
48
|
+
let settled = false;
|
|
49
|
+
const operation = Promise.resolve().then(() => body(executor));
|
|
50
|
+
void operation.then(() => { settled = true; }, () => { settled = true; });
|
|
51
|
+
const expired = new Promise((_, reject) => {
|
|
52
|
+
timer = setTimeout(() => reject(new Error('The backend settings query timed out.')), this.timeoutMs);
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
return await Promise.race([operation, expired]);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
if (timer)
|
|
59
|
+
clearTimeout(timer);
|
|
60
|
+
// Destroy first so pending RPCs cannot outlive pointer cleanup. An uncertain
|
|
61
|
+
// stop retains the preview's own data; it never authorizes parent cleanup.
|
|
62
|
+
let cleanupTimer;
|
|
63
|
+
let exited = false;
|
|
64
|
+
const cleanup = Promise.resolve().then(async () => {
|
|
65
|
+
// Delete only the preview's known native session, before its transport
|
|
66
|
+
// closes. Unsupported native deletion cannot prevent process shutdown.
|
|
67
|
+
if (settled) {
|
|
68
|
+
let releaseTimer;
|
|
69
|
+
try {
|
|
70
|
+
await Promise.race([Promise.resolve().then(() => executor.releaseMetadataSession?.()),
|
|
71
|
+
new Promise((_, reject) => { releaseTimer = setTimeout(() => reject(new Error('Temporary session deletion timed out.')), 2_000); })]);
|
|
72
|
+
}
|
|
73
|
+
catch { /* Native deletion is best effort. */ }
|
|
74
|
+
finally {
|
|
75
|
+
if (releaseTimer)
|
|
76
|
+
clearTimeout(releaseTimer);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
await executor.destroy();
|
|
80
|
+
await executor.waitForExit?.();
|
|
81
|
+
exited = true;
|
|
82
|
+
});
|
|
83
|
+
// Even after a deadline, delayed RPC settlement and confirmed exit may
|
|
84
|
+
// permit own-pointer cleanup. Never sweep unrelated/uncertain previews.
|
|
85
|
+
let removal;
|
|
86
|
+
const removeOwnData = async () => {
|
|
87
|
+
if (exited && settled)
|
|
88
|
+
await (removal ??= Promise.resolve().then(() => executor.deleteThreadData?.(id)));
|
|
89
|
+
};
|
|
90
|
+
void Promise.all([operation.catch(() => undefined), cleanup]).then(removeOwnData).catch(() => undefined);
|
|
91
|
+
try {
|
|
92
|
+
await Promise.race([
|
|
93
|
+
cleanup,
|
|
94
|
+
new Promise((_, reject) => { cleanupTimer = setTimeout(() => reject(new Error('Metadata process exit could not be confirmed. Preview data was retained.')), this.cleanupTimeoutMs); }),
|
|
95
|
+
]);
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
if (cleanupTimer)
|
|
99
|
+
clearTimeout(cleanupTimer);
|
|
100
|
+
}
|
|
101
|
+
await removeOwnData();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async read(config, thread, coordinator, target, kind) {
|
|
105
|
+
return this.withExecutor(config, thread, coordinator, target, async (executor) => {
|
|
106
|
+
if (kind === 'model') {
|
|
107
|
+
if (!executor.listModels)
|
|
108
|
+
throw new Error('This backend does not expose a structured model catalog.');
|
|
109
|
+
const models = await executor.listModels();
|
|
110
|
+
const current = models.find(model => model.isCurrent);
|
|
111
|
+
const reported = executor.getExecutionMetadata?.()?.modelSource === 'reported';
|
|
112
|
+
const configured = (0, ThreadExecutorPool_1.resolveThreadModel)(thread, { ...config, type: target === 'claude' ? 'claude-persistent' : target })
|
|
113
|
+
?? configuredBackendModel(config, target);
|
|
114
|
+
return {
|
|
115
|
+
choices: models.map(model => ({ value: model.id, label: model.displayName, description: model.description })),
|
|
116
|
+
effectiveValue: current?.id ?? configured,
|
|
117
|
+
effectiveSource: current ? (reported ? 'native' : 'configured') : configured ? 'configured' : 'unknown',
|
|
118
|
+
defaultValue: models.find(model => model.isDefault)?.id,
|
|
119
|
+
supportsReset: Boolean(executor.clearModel || (configuredBackendModel(config, target) && executor.setModel)),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (!executor.listEfforts)
|
|
123
|
+
throw new Error('This backend does not expose model-specific effort choices.');
|
|
124
|
+
const efforts = await executor.listEfforts();
|
|
125
|
+
const reported = executor.getExecutionMetadata?.()?.effortSource === 'reported';
|
|
126
|
+
return {
|
|
127
|
+
choices: efforts.choices.map(choice => ({ value: choice.value, label: choice.displayName, description: choice.description })),
|
|
128
|
+
effectiveValue: efforts.current, defaultValue: efforts.default,
|
|
129
|
+
effectiveSource: efforts.current ? (reported ? 'native' : 'configured') : 'unknown',
|
|
130
|
+
supportsReset: efforts.supportsReset && typeof executor.setEffort === 'function',
|
|
131
|
+
unavailableReason: efforts.unavailableReason,
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.SettingsCatalogReader = SettingsCatalogReader;
|
|
137
|
+
//# sourceMappingURL=SettingsCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsCatalog.js","sourceRoot":"","sources":["../../src/settings/SettingsCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ExecuteResult } from '../executor/IExecutor';
|
|
2
|
+
import type { SettingsActionMessage, SettingsBackend, SettingsBackendInfo, SettingsChoice, SettingsKind, SettingsMenu, SettingsResultMessage, SettingsScope } from '../types/Settings';
|
|
3
|
+
export interface SettingsState {
|
|
4
|
+
threadId: string;
|
|
5
|
+
threadName: string;
|
|
6
|
+
coordinatorBackend: SettingsBackend;
|
|
7
|
+
followsGlobal: boolean;
|
|
8
|
+
revision: string;
|
|
9
|
+
configuredModels: Partial<Record<SettingsBackend, string>>;
|
|
10
|
+
configuredEfforts: Partial<Record<SettingsBackend, string>>;
|
|
11
|
+
}
|
|
12
|
+
export interface SettingsCatalog {
|
|
13
|
+
choices: SettingsChoice[];
|
|
14
|
+
effectiveValue?: string;
|
|
15
|
+
defaultValue?: string;
|
|
16
|
+
effectiveSource: SettingsMenu['effectiveSource'];
|
|
17
|
+
supportsReset: boolean;
|
|
18
|
+
unavailableReason?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface SettingsDependencies {
|
|
21
|
+
state(threadId: string): SettingsState | undefined;
|
|
22
|
+
backends(): Promise<SettingsBackendInfo[]>;
|
|
23
|
+
catalog(threadId: string, backend: SettingsBackend, kind: 'model' | 'effort'): Promise<SettingsCatalog>;
|
|
24
|
+
busy(threadId: string, exceptRequest?: string, includeQueue?: boolean): boolean;
|
|
25
|
+
threads(): string[];
|
|
26
|
+
exclusive<T>(target: string, body: () => Promise<T>): Promise<T>;
|
|
27
|
+
backend(threadId: string, backend: SettingsBackend, scope: SettingsScope, followGlobal: boolean): Promise<ExecuteResult>;
|
|
28
|
+
preference(threadId: string, backend: SettingsBackend, kind: 'model' | 'effort', value: string | undefined): Promise<ExecuteResult>;
|
|
29
|
+
now?(): number;
|
|
30
|
+
}
|
|
31
|
+
/** Owns bounded, immutable choices and exactly identified settings actions. */
|
|
32
|
+
export declare class SettingsService {
|
|
33
|
+
private readonly dependencies;
|
|
34
|
+
private readonly snapshots;
|
|
35
|
+
private readonly receipts;
|
|
36
|
+
private openings;
|
|
37
|
+
private invalidationRevision;
|
|
38
|
+
private destroyed;
|
|
39
|
+
private readonly now;
|
|
40
|
+
constructor(dependencies: SettingsDependencies);
|
|
41
|
+
invalidate(threadId?: string): void;
|
|
42
|
+
destroy(): void;
|
|
43
|
+
open(kind: SettingsKind, threadId: string, owner: string, target?: SettingsBackend, requestId?: string): Promise<SettingsMenu>;
|
|
44
|
+
action(request: SettingsActionMessage): Promise<SettingsResultMessage>;
|
|
45
|
+
private validate;
|
|
46
|
+
private prune;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=SettingsService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsService.d.ts","sourceRoot":"","sources":["../../src/settings/SettingsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SettingsService = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const SettingsAdmission_1 = require("./SettingsAdmission");
|
|
6
|
+
const SNAPSHOT_TTL = 15 * 60_000;
|
|
7
|
+
const RECEIPT_TTL = 20 * 60_000;
|
|
8
|
+
const MAX_SNAPSHOTS = 200;
|
|
9
|
+
const MAX_RECEIPTS = 1_000;
|
|
10
|
+
const MAX_CHOICES = 512;
|
|
11
|
+
const BACKENDS = ['claude', 'codex', 'opencode', 'kimi', 'zcode', 'pi', 'agy', 'dsh'];
|
|
12
|
+
const validString = (value, max = 512) => typeof value === 'string'
|
|
13
|
+
&& value.length > 0 && value.length <= max && !/[\x00-\x1f\x7f]/.test(value);
|
|
14
|
+
const literal = (value, max = 240) => Array.from(value.replace(/[\x00-\x1f\x7f]/g, ' ')).slice(0, max).join('');
|
|
15
|
+
class SettingsValidationError extends Error {
|
|
16
|
+
}
|
|
17
|
+
/** Owns bounded, immutable choices and exactly identified settings actions. */
|
|
18
|
+
class SettingsService {
|
|
19
|
+
dependencies;
|
|
20
|
+
snapshots = new Map();
|
|
21
|
+
receipts = new Map();
|
|
22
|
+
openings = 0;
|
|
23
|
+
invalidationRevision = 0;
|
|
24
|
+
destroyed = false;
|
|
25
|
+
now;
|
|
26
|
+
constructor(dependencies) {
|
|
27
|
+
this.dependencies = dependencies;
|
|
28
|
+
this.now = dependencies.now ?? Date.now;
|
|
29
|
+
}
|
|
30
|
+
invalidate(threadId) {
|
|
31
|
+
this.invalidationRevision++;
|
|
32
|
+
for (const [id, record] of this.snapshots) {
|
|
33
|
+
if (!threadId || record.menu.threadId === threadId)
|
|
34
|
+
this.snapshots.delete(id);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
destroy() { this.destroyed = true; this.invalidate(); this.receipts.clear(); }
|
|
38
|
+
async open(kind, threadId, owner, target, requestId) {
|
|
39
|
+
this.prune();
|
|
40
|
+
const invalidationRevision = this.invalidationRevision;
|
|
41
|
+
if (this.destroyed)
|
|
42
|
+
throw new SettingsValidationError('Settings are no longer available.');
|
|
43
|
+
if (!validString(owner) || !validString(threadId, 100))
|
|
44
|
+
throw new SettingsValidationError('Invalid settings owner or thread.');
|
|
45
|
+
if (this.snapshots.size + this.openings >= MAX_SNAPSHOTS)
|
|
46
|
+
throw new SettingsValidationError('Too many settings cards are open. Please retry later.');
|
|
47
|
+
const initial = this.dependencies.state(threadId);
|
|
48
|
+
if (!initial)
|
|
49
|
+
throw new SettingsValidationError('This thread no longer exists. Open a new settings card.');
|
|
50
|
+
const initialRevision = initial.revision;
|
|
51
|
+
const backend = target ?? initial.coordinatorBackend;
|
|
52
|
+
if (!BACKENDS.includes(backend))
|
|
53
|
+
throw new SettingsValidationError('Invalid settings backend.');
|
|
54
|
+
this.openings++;
|
|
55
|
+
try {
|
|
56
|
+
const backends = await this.dependencies.backends();
|
|
57
|
+
const installed = backends.find(entry => entry.value === backend)?.installed === true;
|
|
58
|
+
const busy = this.dependencies.busy(threadId, requestId, kind !== 'backend');
|
|
59
|
+
let catalog = { choices: [], effectiveSource: 'unknown', supportsReset: false };
|
|
60
|
+
if (kind === 'backend') {
|
|
61
|
+
catalog = { choices: backends.map(entry => ({ value: entry.value, label: entry.label, disabled: !entry.installed, reason: entry.reason })),
|
|
62
|
+
effectiveValue: initial.coordinatorBackend, effectiveSource: 'configured', supportsReset: true };
|
|
63
|
+
}
|
|
64
|
+
else if (!installed)
|
|
65
|
+
catalog.unavailableReason = 'This backend is not installed or its executable check failed.';
|
|
66
|
+
else if (busy)
|
|
67
|
+
catalog.unavailableReason = 'This thread is busy. Refresh after its work finishes.';
|
|
68
|
+
else {
|
|
69
|
+
try {
|
|
70
|
+
catalog = await this.dependencies.catalog(threadId, backend, kind);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
catalog.unavailableReason = 'The backend did not provide a usable native catalog. Check backend capability/version, refresh or use a supported text command.';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const current = this.dependencies.state(threadId);
|
|
77
|
+
if (this.destroyed || this.invalidationRevision !== invalidationRevision || !current || current.revision !== initialRevision) {
|
|
78
|
+
throw new SettingsValidationError('Settings changed during the query. Open a new settings card.');
|
|
79
|
+
}
|
|
80
|
+
const seen = new Set();
|
|
81
|
+
const choices = catalog.choices.filter(choice => {
|
|
82
|
+
if (!validString(choice.value) || !validString(choice.label, 4_096) || seen.has(choice.value))
|
|
83
|
+
return false;
|
|
84
|
+
seen.add(choice.value);
|
|
85
|
+
return true;
|
|
86
|
+
});
|
|
87
|
+
const menu = {
|
|
88
|
+
snapshotId: (0, crypto_1.randomUUID)(), kind, threadId, threadName: literal(current.threadName, 80),
|
|
89
|
+
coordinatorBackend: current.coordinatorBackend, targetBackend: backend,
|
|
90
|
+
backends: backends.filter(entry => BACKENDS.includes(entry.value)).slice(0, 8)
|
|
91
|
+
.map(entry => ({ ...entry, label: literal(entry.label, 80), reason: entry.reason ? literal(entry.reason) : undefined })),
|
|
92
|
+
choices: choices.slice(0, MAX_CHOICES).map(choice => ({ ...choice, label: literal(choice.label, 120),
|
|
93
|
+
description: choice.description ? literal(choice.description) : undefined, reason: choice.reason ? literal(choice.reason) : undefined })),
|
|
94
|
+
configuredValue: kind === 'backend' ? current.coordinatorBackend
|
|
95
|
+
: kind === 'model' ? current.configuredModels[backend] : current.configuredEfforts[backend],
|
|
96
|
+
effectiveValue: catalog.effectiveValue, defaultValue: catalog.defaultValue,
|
|
97
|
+
effectiveSource: catalog.effectiveSource, supportsReset: catalog.supportsReset && installed && !busy,
|
|
98
|
+
followsGlobal: current.followsGlobal, busy, expiresAt: this.now() + SNAPSHOT_TTL,
|
|
99
|
+
unavailableReason: catalog.unavailableReason ? literal(catalog.unavailableReason) : undefined,
|
|
100
|
+
...(choices.length > MAX_CHOICES ? { omittedChoices: choices.length - MAX_CHOICES } : {}),
|
|
101
|
+
};
|
|
102
|
+
if (!menu.choices.length && !menu.unavailableReason)
|
|
103
|
+
menu.unavailableReason = 'No selectable options were returned by this backend.';
|
|
104
|
+
this.snapshots.set(menu.snapshotId, { menu: structuredClone(menu), owner, revision: current.revision });
|
|
105
|
+
return menu;
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
this.openings--;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async action(request) {
|
|
112
|
+
this.prune();
|
|
113
|
+
const failure = (error) => ({ type: 'settings_result', messageId: request.messageId,
|
|
114
|
+
openId: request.openId, threadId: request.threadId, snapshotId: request.snapshotId, success: false, error, timestamp: this.now() });
|
|
115
|
+
if (this.destroyed || !validString(request.messageId, 200) || !validString(request.openId) || !validString(request.threadId, 100)
|
|
116
|
+
|| !validString(request.snapshotId, 100) || !['view', 'apply', 'reset', 'follow_global'].includes(request.operation)) {
|
|
117
|
+
return failure('Invalid settings action.');
|
|
118
|
+
}
|
|
119
|
+
const digest = (0, crypto_1.createHash)('sha256').update(JSON.stringify([request.openId, request.threadId, request.snapshotId,
|
|
120
|
+
request.operation, request.targetBackend, request.value, request.scope])).digest('hex');
|
|
121
|
+
const existing = this.receipts.get(request.messageId);
|
|
122
|
+
if (existing)
|
|
123
|
+
return existing.digest === digest ? existing.result : failure('This request ID belongs to a different settings action.');
|
|
124
|
+
if (this.receipts.size >= MAX_RECEIPTS)
|
|
125
|
+
return failure('Settings acknowledgement storage is full. Please retry later.');
|
|
126
|
+
// Defer body by one microtask so every concurrent retry sees this reservation.
|
|
127
|
+
const receipt = { digest, expiresAt: this.now() + RECEIPT_TTL, pending: true, result: Promise.resolve(null) };
|
|
128
|
+
receipt.result = Promise.resolve().then(async () => {
|
|
129
|
+
try {
|
|
130
|
+
const record = this.validate(request);
|
|
131
|
+
const menu = record.menu;
|
|
132
|
+
if (request.operation === 'view') {
|
|
133
|
+
if (request.value !== undefined || request.scope !== undefined)
|
|
134
|
+
throw new SettingsValidationError('Invalid settings view action.');
|
|
135
|
+
const target = request.targetBackend ?? menu.targetBackend;
|
|
136
|
+
if (!menu.backends.some(entry => entry.value === target && entry.installed))
|
|
137
|
+
throw new SettingsValidationError('This backend is unavailable.');
|
|
138
|
+
const refreshed = await this.open(menu.kind, menu.threadId, request.openId, target);
|
|
139
|
+
this.snapshots.delete(menu.snapshotId);
|
|
140
|
+
return { ...failure(''), success: true, error: undefined, menu: refreshed };
|
|
141
|
+
}
|
|
142
|
+
if (request.targetBackend !== undefined)
|
|
143
|
+
throw new SettingsValidationError('Only a settings view can change its target backend.');
|
|
144
|
+
if (menu.busy)
|
|
145
|
+
throw new SettingsValidationError('This card was opened while the thread was busy. Refresh before applying settings.');
|
|
146
|
+
if (request.operation === 'follow_global' && (menu.kind !== 'backend' || request.scope === 'all' || request.value !== undefined))
|
|
147
|
+
throw new SettingsValidationError('Invalid follow-global action.');
|
|
148
|
+
if (request.operation === 'reset' && (!menu.supportsReset || menu.kind === 'backend' || request.value !== undefined || request.scope !== undefined))
|
|
149
|
+
throw new SettingsValidationError('Reset is not available for this setting.');
|
|
150
|
+
if (request.operation === 'apply' && !menu.choices.some(choice => choice.value === request.value && !choice.disabled))
|
|
151
|
+
throw new SettingsValidationError('This choice is not available on the original settings card.');
|
|
152
|
+
if (menu.kind !== 'backend' && request.scope !== undefined)
|
|
153
|
+
throw new SettingsValidationError('Model and effort settings only affect the original thread.');
|
|
154
|
+
if (request.scope !== undefined && request.scope !== 'thread' && request.scope !== 'all')
|
|
155
|
+
throw new SettingsValidationError('Invalid settings scope.');
|
|
156
|
+
const scope = menu.kind === 'backend' && request.scope === 'all' ? 'all' : 'thread';
|
|
157
|
+
const result = await this.dependencies.exclusive(scope === 'all' ? '*' : menu.threadId, async () => {
|
|
158
|
+
this.validate(request);
|
|
159
|
+
const affected = scope === 'all' ? this.dependencies.threads() : [menu.threadId];
|
|
160
|
+
if (affected.some(id => this.dependencies.busy(id, undefined, menu.kind !== 'backend')))
|
|
161
|
+
throw new SettingsValidationError('An affected thread is busy. Retry when its work is finished.');
|
|
162
|
+
const installed = await this.dependencies.backends();
|
|
163
|
+
this.validate(request);
|
|
164
|
+
if (affected.some(id => this.dependencies.busy(id, undefined, menu.kind !== 'backend')))
|
|
165
|
+
throw new SettingsValidationError('An affected thread became busy. No setting was applied.');
|
|
166
|
+
const backend = menu.kind === 'backend' && request.operation === 'apply' ? request.value : menu.targetBackend;
|
|
167
|
+
if (request.operation !== 'follow_global' && !installed.some(entry => entry.value === backend && entry.installed))
|
|
168
|
+
throw new SettingsValidationError('This backend is no longer available.');
|
|
169
|
+
try {
|
|
170
|
+
return menu.kind === 'backend'
|
|
171
|
+
? await this.dependencies.backend(menu.threadId, backend, scope, request.operation === 'follow_global')
|
|
172
|
+
: await this.dependencies.preference(menu.threadId, backend, menu.kind, request.operation === 'reset' ? undefined : request.value);
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
this.invalidate(scope === 'all' ? undefined : menu.threadId);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
if (!result.success)
|
|
179
|
+
return failure('The setting was not confirmed as applied. Check backend state and refresh before retrying.');
|
|
180
|
+
// Applied state is durable before this optional refresh; a catalog error cannot reverse it.
|
|
181
|
+
let fresh;
|
|
182
|
+
try {
|
|
183
|
+
fresh = await this.open(menu.kind, menu.threadId, request.openId, menu.kind === 'backend' ? undefined : menu.targetBackend);
|
|
184
|
+
}
|
|
185
|
+
catch { /* Preserve the positive acknowledgement. */ }
|
|
186
|
+
return { ...failure(''), success: true, error: undefined, notice: 'Setting applied. Future commands and worker launches will use the updated preference.', menu: fresh };
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
return failure(error instanceof SettingsValidationError || error instanceof SettingsAdmission_1.SettingsBusyError
|
|
190
|
+
? literal(error.message) : 'Settings could not be confirmed. Refresh and check backend state before retrying.');
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
receipt.pending = false;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
this.receipts.set(request.messageId, receipt);
|
|
197
|
+
return receipt.result;
|
|
198
|
+
}
|
|
199
|
+
validate(request) {
|
|
200
|
+
const record = this.snapshots.get(request.snapshotId);
|
|
201
|
+
const state = this.dependencies.state(request.threadId);
|
|
202
|
+
if (!record || record.menu.expiresAt <= this.now() || record.owner !== request.openId
|
|
203
|
+
|| record.menu.threadId !== request.threadId || !state || state.revision !== record.revision) {
|
|
204
|
+
throw new SettingsValidationError('This settings card is stale or belongs to another thread. Open a new settings card.');
|
|
205
|
+
}
|
|
206
|
+
return record;
|
|
207
|
+
}
|
|
208
|
+
prune() {
|
|
209
|
+
for (const [id, record] of this.snapshots)
|
|
210
|
+
if (record.menu.expiresAt <= this.now())
|
|
211
|
+
this.snapshots.delete(id);
|
|
212
|
+
for (const [id, record] of this.receipts)
|
|
213
|
+
if (!record.pending && record.expiresAt <= this.now())
|
|
214
|
+
this.receipts.delete(id);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.SettingsService = SettingsService;
|
|
218
|
+
//# sourceMappingURL=SettingsService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsService.js","sourceRoot":"","sources":["../../src/settings/SettingsService.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ function resolveThreadModel(thread, config) {
|
|
|
21
21
|
}
|
|
22
22
|
function resolveThreadEffort(thread, config) {
|
|
23
23
|
const key = (0, config_1.backendKeyOf)(config.type);
|
|
24
|
-
return
|
|
24
|
+
return thread.efforts?.[key];
|
|
25
25
|
}
|
|
26
26
|
function isClaudeType(type) {
|
|
27
27
|
return type === 'auto' || type === 'claude-persistent';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadExecutorPool.js","sourceRoot":"","sources":["../../src/thread/ThreadExecutorPool.ts"],"names":[],"mappings":";;;;;;AAiBA,gDAGC;AAjBD,gDAAwB;AACxB,2BAAoC;AAIpC,4CAA+C;AAC/C,0CAA6C;AAE7C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,MAAc,EAAE,MAAsB;IACvE,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,IAAc,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,MAAsB;IACjE,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,IAAc,CAAC,CAAC;IAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"ThreadExecutorPool.js","sourceRoot":"","sources":["../../src/thread/ThreadExecutorPool.ts"],"names":[],"mappings":"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"}
|
package/dist/thread/types.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export interface Thread {
|
|
|
36
36
|
* Takes precedence over the legacy `model` field.
|
|
37
37
|
*/
|
|
38
38
|
models?: Partial<Record<BackendKey, string>>;
|
|
39
|
-
/** Per-backend reasoning effort overrides
|
|
39
|
+
/** Per-backend reasoning effort overrides, applied only through native supported controls. */
|
|
40
40
|
efforts?: Partial<Record<BackendKey, string>>;
|
|
41
41
|
}
|
|
42
42
|
export interface ThreadStore {
|