@myagentroam/node 0.1.2 → 0.1.4
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/claude-agent-sdk.d.ts +1 -15
- package/dist/claude-agent-sdk.js +9 -77
- package/dist/claude-agent-sdk.js.map +1 -1
- package/dist/codex-app-server.d.ts +4 -0
- package/dist/codex-app-server.js +18 -4
- package/dist/codex-app-server.js.map +1 -1
- package/dist/connector/node-connector-options.d.ts +23 -0
- package/dist/connector/node-connector-options.js +2 -0
- package/dist/connector/node-connector-options.js.map +1 -0
- package/dist/connector/node-operation-router.d.ts +9 -0
- package/dist/connector/node-operation-router.js +23 -0
- package/dist/connector/node-operation-router.js.map +1 -0
- package/dist/connector.d.ts +59 -353
- package/dist/connector.js +614 -5936
- package/dist/connector.js.map +1 -1
- package/dist/control-outbound-scheduler.d.ts +26 -0
- package/dist/control-outbound-scheduler.js +122 -0
- package/dist/control-outbound-scheduler.js.map +1 -0
- package/dist/database.js +1 -1
- package/dist/database.js.map +1 -1
- package/dist/native-jsonl-reader.d.ts +14 -0
- package/dist/native-jsonl-reader.js +98 -0
- package/dist/native-jsonl-reader.js.map +1 -0
- package/dist/native-session-history.d.ts +22 -3
- package/dist/native-session-history.js +281 -157
- package/dist/native-session-history.js.map +1 -1
- package/dist/runner/abstract-runner.d.ts +148 -0
- package/dist/runner/abstract-runner.js +139 -0
- package/dist/runner/abstract-runner.js.map +1 -0
- package/dist/runner/claude/managed-run-controller.d.ts +52 -0
- package/dist/runner/claude/managed-run-controller.js +307 -0
- package/dist/runner/claude/managed-run-controller.js.map +1 -0
- package/dist/runner/claude-code-runner.d.ts +68 -0
- package/dist/runner/claude-code-runner.js +268 -0
- package/dist/runner/claude-code-runner.js.map +1 -0
- package/dist/runner/codex/conversation-parser.d.ts +61 -0
- package/dist/runner/codex/conversation-parser.js +676 -0
- package/dist/runner/codex/conversation-parser.js.map +1 -0
- package/dist/runner/codex/managed-run-controller.d.ts +79 -0
- package/dist/runner/codex/managed-run-controller.js +379 -0
- package/dist/runner/codex/managed-run-controller.js.map +1 -0
- package/dist/runner/codex-runner.d.ts +81 -0
- package/dist/runner/codex-runner.js +342 -0
- package/dist/runner/codex-runner.js.map +1 -0
- package/dist/runner/fake-test-runner.d.ts +26 -0
- package/dist/runner/fake-test-runner.js +48 -0
- package/dist/runner/fake-test-runner.js.map +1 -0
- package/dist/runner/runner-registry.d.ts +17 -0
- package/dist/runner/runner-registry.js +66 -0
- package/dist/runner/runner-registry.js.map +1 -0
- package/dist/runner-command-engine.d.ts +9 -0
- package/dist/runner-command-engine.js +24 -0
- package/dist/runner-command-engine.js.map +1 -1
- package/dist/runner-profiles.js +12 -0
- package/dist/runner-profiles.js.map +1 -1
- package/dist/runner-usage.d.ts +2 -2
- package/dist/runner-usage.js +3 -5
- package/dist/runner-usage.js.map +1 -1
- package/dist/runtime-state.js +6 -5
- package/dist/runtime-state.js.map +1 -1
- package/dist/service/attachment-domain-state.d.ts +5 -0
- package/dist/service/attachment-domain-state.js +6 -0
- package/dist/service/attachment-domain-state.js.map +1 -0
- package/dist/service/conversation-history-service.d.ts +34 -0
- package/dist/service/conversation-history-service.js +159 -0
- package/dist/service/conversation-history-service.js.map +1 -0
- package/dist/service/external-session-resume-service.d.ts +32 -0
- package/dist/service/external-session-resume-service.js +99 -0
- package/dist/service/external-session-resume-service.js.map +1 -0
- package/dist/service/fake-managed-run-service.d.ts +29 -0
- package/dist/service/fake-managed-run-service.js +63 -0
- package/dist/service/fake-managed-run-service.js.map +1 -0
- package/dist/service/managed-runner-session-service.d.ts +10 -0
- package/dist/service/managed-runner-session-service.js +31 -0
- package/dist/service/managed-runner-session-service.js.map +1 -0
- package/dist/service/native-session-projection-service.d.ts +50 -0
- package/dist/service/native-session-projection-service.js +268 -0
- package/dist/service/native-session-projection-service.js.map +1 -0
- package/dist/service/native-session-watch-service.d.ts +37 -0
- package/dist/service/native-session-watch-service.js +151 -0
- package/dist/service/native-session-watch-service.js.map +1 -0
- package/dist/service/node-connection-lifecycle-service.d.ts +37 -0
- package/dist/service/node-connection-lifecycle-service.js +84 -0
- package/dist/service/node-connection-lifecycle-service.js.map +1 -0
- package/dist/service/node-control-channel.d.ts +32 -0
- package/dist/service/node-control-channel.js +84 -0
- package/dist/service/node-control-channel.js.map +1 -0
- package/dist/service/node-control-message-service.d.ts +28 -0
- package/dist/service/node-control-message-service.js +105 -0
- package/dist/service/node-control-message-service.js.map +1 -0
- package/dist/service/node-request-service.d.ts +14 -0
- package/dist/service/node-request-service.js +51 -0
- package/dist/service/node-request-service.js.map +1 -0
- package/dist/service/node-run-event-bridge.d.ts +38 -0
- package/dist/service/node-run-event-bridge.js +80 -0
- package/dist/service/node-run-event-bridge.js.map +1 -0
- package/dist/service/node-terminal-channel.d.ts +29 -0
- package/dist/service/node-terminal-channel.js +176 -0
- package/dist/service/node-terminal-channel.js.map +1 -0
- package/dist/service/node-workspace-coordinator.d.ts +32 -0
- package/dist/service/node-workspace-coordinator.js +81 -0
- package/dist/service/node-workspace-coordinator.js.map +1 -0
- package/dist/service/run-attachment-service.d.ts +37 -0
- package/dist/service/run-attachment-service.js +161 -0
- package/dist/service/run-attachment-service.js.map +1 -0
- package/dist/service/run-domain-state.d.ts +4 -0
- package/dist/service/run-domain-state.js +5 -0
- package/dist/service/run-domain-state.js.map +1 -0
- package/dist/service/run-event-service.d.ts +31 -0
- package/dist/service/run-event-service.js +103 -0
- package/dist/service/run-event-service.js.map +1 -0
- package/dist/service/run-workbench-service.d.ts +27 -0
- package/dist/service/run-workbench-service.js +114 -0
- package/dist/service/run-workbench-service.js.map +1 -0
- package/dist/service/runner-channel-message-service.d.ts +13 -0
- package/dist/service/runner-channel-message-service.js +21 -0
- package/dist/service/runner-channel-message-service.js.map +1 -0
- package/dist/service/runner-interaction-service.d.ts +40 -0
- package/dist/service/runner-interaction-service.js +245 -0
- package/dist/service/runner-interaction-service.js.map +1 -0
- package/dist/service/runner-service.d.ts +43 -0
- package/dist/service/runner-service.js +55 -0
- package/dist/service/runner-service.js.map +1 -0
- package/dist/service/session-catalog-service.d.ts +30 -0
- package/dist/service/session-catalog-service.js +145 -0
- package/dist/service/session-catalog-service.js.map +1 -0
- package/dist/service/session-command-service.d.ts +23 -0
- package/dist/service/session-command-service.js +70 -0
- package/dist/service/session-command-service.js.map +1 -0
- package/dist/service/session-context-service.d.ts +34 -0
- package/dist/service/session-context-service.js +88 -0
- package/dist/service/session-context-service.js.map +1 -0
- package/dist/service/session-domain-state.d.ts +8 -0
- package/dist/service/session-domain-state.js +9 -0
- package/dist/service/session-domain-state.js.map +1 -0
- package/dist/service/session-identity-service.d.ts +24 -0
- package/dist/service/session-identity-service.js +87 -0
- package/dist/service/session-identity-service.js.map +1 -0
- package/dist/service/session-lifecycle-service.d.ts +31 -0
- package/dist/service/session-lifecycle-service.js +236 -0
- package/dist/service/session-lifecycle-service.js.map +1 -0
- package/dist/service/session-message-service.d.ts +33 -0
- package/dist/service/session-message-service.js +158 -0
- package/dist/service/session-message-service.js.map +1 -0
- package/dist/service/session-presentation-service.d.ts +33 -0
- package/dist/service/session-presentation-service.js +37 -0
- package/dist/service/session-presentation-service.js.map +1 -0
- package/dist/service/session-query-service.d.ts +31 -0
- package/dist/service/session-query-service.js +78 -0
- package/dist/service/session-query-service.js.map +1 -0
- package/dist/service/terminal-relay-state.d.ts +6 -0
- package/dist/service/terminal-relay-state.js +4 -0
- package/dist/service/terminal-relay-state.js.map +1 -0
- package/dist/service/terminal-service.d.ts +12 -0
- package/dist/service/terminal-service.js +53 -0
- package/dist/service/terminal-service.js.map +1 -0
- package/dist/service/workbench-event-service.d.ts +21 -0
- package/dist/service/workbench-event-service.js +54 -0
- package/dist/service/workbench-event-service.js.map +1 -0
- package/dist/service/workbench-manifest-service.d.ts +88 -0
- package/dist/service/workbench-manifest-service.js +69 -0
- package/dist/service/workbench-manifest-service.js.map +1 -0
- package/dist/service/workspace-change-service.d.ts +9 -0
- package/dist/service/workspace-change-service.js +86 -0
- package/dist/service/workspace-change-service.js.map +1 -0
- package/dist/service/workspace-domain-state.d.ts +75 -0
- package/dist/service/workspace-domain-state.js +41 -0
- package/dist/service/workspace-domain-state.js.map +1 -0
- package/dist/service/workspace-file-service.d.ts +14 -0
- package/dist/service/workspace-file-service.js +77 -0
- package/dist/service/workspace-file-service.js.map +1 -0
- package/dist/service/workspace-queue-workbench-service.d.ts +55 -0
- package/dist/service/workspace-queue-workbench-service.js +227 -0
- package/dist/service/workspace-queue-workbench-service.js.map +1 -0
- package/dist/service/workspace-service.d.ts +15 -0
- package/dist/service/workspace-service.js +54 -0
- package/dist/service/workspace-service.js.map +1 -0
- package/dist/service/workspace-session-service.d.ts +23 -0
- package/dist/service/workspace-session-service.js +140 -0
- package/dist/service/workspace-session-service.js.map +1 -0
- package/dist/service/workspace-upload-service.d.ts +37 -0
- package/dist/service/workspace-upload-service.js +241 -0
- package/dist/service/workspace-upload-service.js.map +1 -0
- package/dist/service/workspace-watch-service.d.ts +18 -0
- package/dist/service/workspace-watch-service.js +121 -0
- package/dist/service/workspace-watch-service.js.map +1 -0
- package/dist/service/workspace-workbench-service.d.ts +38 -0
- package/dist/service/workspace-workbench-service.js +156 -0
- package/dist/service/workspace-workbench-service.js.map +1 -0
- package/dist/terminal.d.ts +1 -0
- package/dist/terminal.js +1 -1
- package/dist/terminal.js.map +1 -1
- package/dist/util/node-operation-parsers.d.ts +91 -0
- package/dist/util/node-operation-parsers.js +380 -0
- package/dist/util/node-operation-parsers.js.map +1 -0
- package/dist/util/runner-native-session-parsers.d.ts +72 -0
- package/dist/util/runner-native-session-parsers.js +337 -0
- package/dist/util/runner-native-session-parsers.js.map +1 -0
- package/dist/util/secret-environment.d.ts +1 -0
- package/dist/util/secret-environment.js +26 -0
- package/dist/util/secret-environment.js.map +1 -0
- package/dist/workspace.d.ts +9 -2
- package/dist/workspace.js +41 -0
- package/dist/workspace.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
function revisionFor(capabilities) {
|
|
2
|
+
const source = JSON.stringify({
|
|
3
|
+
platform: capabilities.platform,
|
|
4
|
+
architecture: capabilities.architecture,
|
|
5
|
+
codex: capabilities.codex,
|
|
6
|
+
claudeCode: capabilities.claudeCode
|
|
7
|
+
});
|
|
8
|
+
let hash = 2_166_136_261;
|
|
9
|
+
for (const character of source)
|
|
10
|
+
hash = Math.imul(hash ^ character.charCodeAt(0), 16_777_619);
|
|
11
|
+
return hash >>> 0;
|
|
12
|
+
}
|
|
13
|
+
/** Builds the capability-driven Workbench contract exposed by this Node. */
|
|
14
|
+
export class WorkbenchManifestService {
|
|
15
|
+
options;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
}
|
|
19
|
+
async read() {
|
|
20
|
+
const capabilities = this.options.capabilities();
|
|
21
|
+
return {
|
|
22
|
+
manifestVersion: 1,
|
|
23
|
+
revision: revisionFor(capabilities),
|
|
24
|
+
observedAt: Date.now(),
|
|
25
|
+
platform: capabilities.platform,
|
|
26
|
+
architecture: capabilities.architecture,
|
|
27
|
+
conversation: {
|
|
28
|
+
available: true,
|
|
29
|
+
reasonCode: null,
|
|
30
|
+
itemVersions: [1],
|
|
31
|
+
supportsSessionCursor: true,
|
|
32
|
+
supportsWorkspaceActivityCursor: true,
|
|
33
|
+
supportsHistoryPaging: true,
|
|
34
|
+
supportsItemFinalSnapshots: true,
|
|
35
|
+
maxPageSize: 500
|
|
36
|
+
},
|
|
37
|
+
runners: await this.options.runners.profiles(),
|
|
38
|
+
files: {
|
|
39
|
+
available: true,
|
|
40
|
+
reasonCode: null,
|
|
41
|
+
supportsList: true,
|
|
42
|
+
supportsReadRange: true,
|
|
43
|
+
supportsSearch: true,
|
|
44
|
+
maxDirectoryPageSize: 200,
|
|
45
|
+
maxReadBytes: 512 * 1024,
|
|
46
|
+
maxSearchResults: 200
|
|
47
|
+
},
|
|
48
|
+
git: {
|
|
49
|
+
available: true,
|
|
50
|
+
reasonCode: null,
|
|
51
|
+
supportsCurrentChanges: true,
|
|
52
|
+
supportsTurnChanges: true,
|
|
53
|
+
maxDiffBytes: 512 * 1024
|
|
54
|
+
},
|
|
55
|
+
terminal: {
|
|
56
|
+
available: true,
|
|
57
|
+
reasonCode: null,
|
|
58
|
+
supportsPty: capabilities.platform === 'linux',
|
|
59
|
+
supportsConPty: capabilities.platform === 'windows',
|
|
60
|
+
supportsReplay: true,
|
|
61
|
+
supportsReadonlyAttach: true,
|
|
62
|
+
supportsTakeover: true,
|
|
63
|
+
...this.options.terminals.limits(),
|
|
64
|
+
profiles: this.options.terminals.availableProfiles()
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=workbench-manifest-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbench-manifest-service.js","sourceRoot":"","sources":["../../src/service/workbench-manifest-service.ts"],"names":[],"mappings":"AAIA,SAAS,WAAW,CAAC,YAA8B;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,UAAU,EAAE,YAAY,CAAC,UAAU;KACpC,CAAC,CAAC;IACH,IAAI,IAAI,GAAG,aAAa,CAAC;IACzB,KAAK,MAAM,SAAS,IAAI,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7F,OAAO,IAAI,KAAK,CAAC,CAAC;AACpB,CAAC;AAQD,4EAA4E;AAC5E,MAAM,OAAO,wBAAwB;IACN;IAA7B,YAA6B,OAAwC;QAAxC,YAAO,GAAP,OAAO,CAAiC;IAAG,CAAC;IAEzE,KAAK,CAAC,IAAI;QACR,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACjD,OAAO;YACL,eAAe,EAAE,CAAU;YAC3B,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC;YACnC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,YAAY,EAAE,YAAY,CAAC,YAAY;YACvC,YAAY,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,qBAAqB,EAAE,IAAI;gBAC3B,+BAA+B,EAAE,IAAI;gBACrC,qBAAqB,EAAE,IAAI;gBAC3B,0BAA0B,EAAE,IAAI;gBAChC,WAAW,EAAE,GAAG;aACjB;YACD,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC9C,KAAK,EAAE;gBACL,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;gBAClB,iBAAiB,EAAE,IAAI;gBACvB,cAAc,EAAE,IAAI;gBACpB,oBAAoB,EAAE,GAAG;gBACzB,YAAY,EAAE,GAAG,GAAG,IAAI;gBACxB,gBAAgB,EAAE,GAAG;aACtB;YACD,GAAG,EAAE;gBACH,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,sBAAsB,EAAE,IAAI;gBAC5B,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,GAAG,GAAG,IAAI;aACzB;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,YAAY,CAAC,QAAQ,KAAK,OAAO;gBAC9C,cAAc,EAAE,YAAY,CAAC,QAAQ,KAAK,SAAS;gBACnD,cAAc,EAAE,IAAI;gBACpB,sBAAsB,EAAE,IAAI;gBAC5B,gBAAgB,EAAE,IAAI;gBACtB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE;gBAClC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE;aACrD;SACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { NodeWorkspace } from '../database.js';
|
|
2
|
+
import { WorkspaceDomainState } from './workspace-domain-state.js';
|
|
3
|
+
export declare class WorkspaceChangeService {
|
|
4
|
+
private readonly state;
|
|
5
|
+
constructor(state: WorkspaceDomainState);
|
|
6
|
+
invalidate(workspaceId: string): void;
|
|
7
|
+
clear(): void;
|
|
8
|
+
current(workspace: NodeWorkspace): Promise<unknown>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { isWorkspaceChangeVisible, listInitializedSubmodulePaths, readCurrentChangesSummary, resolveGitRepository } from '../workspace.js';
|
|
2
|
+
const CACHE_TTL_MS = 5_000;
|
|
3
|
+
export class WorkspaceChangeService {
|
|
4
|
+
state;
|
|
5
|
+
constructor(state) {
|
|
6
|
+
this.state = state;
|
|
7
|
+
}
|
|
8
|
+
invalidate(workspaceId) {
|
|
9
|
+
this.state.changesReads.delete(workspaceId);
|
|
10
|
+
this.state.changesCache.delete(workspaceId);
|
|
11
|
+
this.state.changesVersions.set(workspaceId, (this.state.changesVersions.get(workspaceId) ?? 0) + 1);
|
|
12
|
+
}
|
|
13
|
+
clear() {
|
|
14
|
+
this.state.changesReads.clear();
|
|
15
|
+
this.state.changesCache.clear();
|
|
16
|
+
this.state.changesVersions.clear();
|
|
17
|
+
}
|
|
18
|
+
async current(workspace) {
|
|
19
|
+
if (workspace.kind !== 'GIT_WORKSPACE')
|
|
20
|
+
throw new Error('WORKSPACE_NOT_GIT');
|
|
21
|
+
const cached = this.state.changesCache.get(workspace.id);
|
|
22
|
+
if (cached !== undefined && cached.expiresAt > Date.now())
|
|
23
|
+
return cached.value;
|
|
24
|
+
const existing = this.state.changesReads.get(workspace.id);
|
|
25
|
+
if (existing !== undefined)
|
|
26
|
+
return existing;
|
|
27
|
+
const version = this.state.changesVersions.get(workspace.id) ?? 0;
|
|
28
|
+
const request = this.state.changesLimiter.run(async () => {
|
|
29
|
+
const paths = ['', ...(await listInitializedSubmodulePaths(workspace.path))];
|
|
30
|
+
const readRepository = async (repositoryPath) => {
|
|
31
|
+
const repository = repositoryPath === ''
|
|
32
|
+
? workspace.path
|
|
33
|
+
: await resolveGitRepository(workspace.path, repositoryPath);
|
|
34
|
+
const summary = await readCurrentChangesSummary(repository);
|
|
35
|
+
const changes = (await Promise.all(summary.changes.map(async (change) => ({
|
|
36
|
+
change,
|
|
37
|
+
visible: await isWorkspaceChangeVisible(repository, change.path)
|
|
38
|
+
}))))
|
|
39
|
+
.filter(({ visible }) => visible)
|
|
40
|
+
.map(({ change }) => change);
|
|
41
|
+
return {
|
|
42
|
+
repositoryPath,
|
|
43
|
+
repositoryName: repositoryPath === '' ? '根仓库' : repositoryPath,
|
|
44
|
+
branch: summary.branch,
|
|
45
|
+
changes
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
const root = await readRepository('');
|
|
49
|
+
const children = (await Promise.all(paths.slice(1).map(async (path) => {
|
|
50
|
+
try {
|
|
51
|
+
return await readRepository(path);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
}))).filter((value) => value !== undefined);
|
|
57
|
+
const decorate = (change) => ({
|
|
58
|
+
...change,
|
|
59
|
+
additions: null,
|
|
60
|
+
deletions: null,
|
|
61
|
+
binary: false,
|
|
62
|
+
diffAvailable: change.state !== 'UNTRACKED'
|
|
63
|
+
});
|
|
64
|
+
const value = {
|
|
65
|
+
branch: root.branch,
|
|
66
|
+
changes: root.changes.map(decorate),
|
|
67
|
+
repositories: [root, ...children].map((repository) => ({
|
|
68
|
+
...repository,
|
|
69
|
+
changes: repository.changes.map(decorate)
|
|
70
|
+
}))
|
|
71
|
+
};
|
|
72
|
+
if ((this.state.changesVersions.get(workspace.id) ?? 0) === version)
|
|
73
|
+
this.state.changesCache.set(workspace.id, { value, expiresAt: Date.now() + CACHE_TTL_MS });
|
|
74
|
+
return value;
|
|
75
|
+
});
|
|
76
|
+
this.state.changesReads.set(workspace.id, request);
|
|
77
|
+
try {
|
|
78
|
+
return await request;
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
if (this.state.changesReads.get(workspace.id) === request)
|
|
82
|
+
this.state.changesReads.delete(workspace.id);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=workspace-change-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-change-service.js","sourceRoot":"","sources":["../../src/service/workspace-change-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { FileHandle } from 'node:fs/promises';
|
|
2
|
+
import type { NodeAgentSession } from '../database.js';
|
|
3
|
+
import type { WorkspaceFileIndex } from '../workspace.js';
|
|
4
|
+
export interface WorkspaceWatch {
|
|
5
|
+
readonly workspaceId: string;
|
|
6
|
+
readonly watchId: string;
|
|
7
|
+
readonly sessionHash: string;
|
|
8
|
+
expiresAt: number;
|
|
9
|
+
readonly topics: {
|
|
10
|
+
readonly sessions: boolean;
|
|
11
|
+
readonly changes: boolean;
|
|
12
|
+
readonly files: {
|
|
13
|
+
readonly path: string;
|
|
14
|
+
readonly cursor?: string;
|
|
15
|
+
readonly limit?: number;
|
|
16
|
+
} | undefined;
|
|
17
|
+
};
|
|
18
|
+
timer: NodeJS.Timeout;
|
|
19
|
+
}
|
|
20
|
+
export interface ActiveWorkspaceUpload {
|
|
21
|
+
readonly id: string;
|
|
22
|
+
readonly workspaceId: string;
|
|
23
|
+
readonly path: string;
|
|
24
|
+
readonly targetPath: string;
|
|
25
|
+
readonly temporaryPath: string;
|
|
26
|
+
readonly size: number;
|
|
27
|
+
readonly overwrite: boolean;
|
|
28
|
+
readonly composerAttachment?: {
|
|
29
|
+
readonly id: string;
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly mime: string;
|
|
32
|
+
};
|
|
33
|
+
readonly handle: FileHandle;
|
|
34
|
+
receivedBytes: number;
|
|
35
|
+
readonly timer: NodeJS.Timeout;
|
|
36
|
+
}
|
|
37
|
+
export interface CompletedComposerAttachment {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly workspaceId: string;
|
|
40
|
+
readonly path: string;
|
|
41
|
+
readonly targetPath: string;
|
|
42
|
+
readonly name: string;
|
|
43
|
+
readonly mime: string;
|
|
44
|
+
readonly size: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class WorkspaceDomainState {
|
|
47
|
+
readonly uploads: Map<string, ActiveWorkspaceUpload>;
|
|
48
|
+
readonly composerAttachments: Map<string, CompletedComposerAttachment>;
|
|
49
|
+
readonly changesReads: Map<string, Promise<unknown>>;
|
|
50
|
+
readonly changesCache: Map<string, {
|
|
51
|
+
readonly value: unknown;
|
|
52
|
+
readonly expiresAt: number;
|
|
53
|
+
}>;
|
|
54
|
+
readonly changesVersions: Map<string, number>;
|
|
55
|
+
readonly fileIndexes: Map<string, WorkspaceFileIndex>;
|
|
56
|
+
readonly watches: Map<string, Map<string, WorkspaceWatch>>;
|
|
57
|
+
readonly watchRevisions: Map<string, number>;
|
|
58
|
+
readonly sessionWatchTimers: Map<string, NodeJS.Timeout>;
|
|
59
|
+
readonly sessionWatchSignatures: Map<string, string>;
|
|
60
|
+
readonly sessionWatchReads: Map<string, Promise<void>>;
|
|
61
|
+
readonly sessionCache: Map<string, {
|
|
62
|
+
readonly sessions: readonly NodeAgentSession[];
|
|
63
|
+
readonly expiresAt: number;
|
|
64
|
+
}>;
|
|
65
|
+
readonly sessionCacheReads: Map<string, Promise<readonly NodeAgentSession[]>>;
|
|
66
|
+
readonly changesLimiter: AsyncLimiter;
|
|
67
|
+
}
|
|
68
|
+
declare class AsyncLimiter {
|
|
69
|
+
private readonly limit;
|
|
70
|
+
private active;
|
|
71
|
+
private readonly waiters;
|
|
72
|
+
constructor(limit: number);
|
|
73
|
+
run<T>(task: () => Promise<T>): Promise<T>;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class WorkspaceDomainState {
|
|
2
|
+
uploads = new Map();
|
|
3
|
+
composerAttachments = new Map();
|
|
4
|
+
changesReads = new Map();
|
|
5
|
+
changesCache = new Map();
|
|
6
|
+
changesVersions = new Map();
|
|
7
|
+
fileIndexes = new Map();
|
|
8
|
+
watches = new Map();
|
|
9
|
+
watchRevisions = new Map();
|
|
10
|
+
sessionWatchTimers = new Map();
|
|
11
|
+
sessionWatchSignatures = new Map();
|
|
12
|
+
sessionWatchReads = new Map();
|
|
13
|
+
sessionCache = new Map();
|
|
14
|
+
sessionCacheReads = new Map();
|
|
15
|
+
changesLimiter = new AsyncLimiter(3);
|
|
16
|
+
}
|
|
17
|
+
class AsyncLimiter {
|
|
18
|
+
limit;
|
|
19
|
+
active = 0;
|
|
20
|
+
waiters = [];
|
|
21
|
+
constructor(limit) {
|
|
22
|
+
this.limit = limit;
|
|
23
|
+
}
|
|
24
|
+
async run(task) {
|
|
25
|
+
if (this.active < this.limit)
|
|
26
|
+
this.active += 1;
|
|
27
|
+
else
|
|
28
|
+
await new Promise((resolve) => this.waiters.push(resolve));
|
|
29
|
+
try {
|
|
30
|
+
return await task();
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
const next = this.waiters.shift();
|
|
34
|
+
if (next === undefined)
|
|
35
|
+
this.active -= 1;
|
|
36
|
+
else
|
|
37
|
+
next();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=workspace-domain-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-domain-state.js","sourceRoot":"","sources":["../../src/service/workspace-domain-state.ts"],"names":[],"mappings":"AA8CA,MAAM,OAAO,oBAAoB;IACtB,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IACnD,mBAAmB,GAAG,IAAI,GAAG,EAAuC,CAAC;IACrE,YAAY,GAAG,IAAI,GAAG,EAA4B,CAAC;IACnD,YAAY,GAAG,IAAI,GAAG,EAG5B,CAAC;IACK,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IACpD,OAAO,GAAG,IAAI,GAAG,EAAuC,CAAC;IACzD,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,kBAAkB,GAAG,IAAI,GAAG,EAA0B,CAAC;IACvD,sBAAsB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,iBAAiB,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,YAAY,GAAG,IAAI,GAAG,EAG5B,CAAC;IACK,iBAAiB,GAAG,IAAI,GAAG,EAAgD,CAAC;IAC5E,cAAc,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,YAAY;IAIa;IAHrB,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAsB,EAAE,CAAC;IAEjD,YAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9C,KAAK,CAAC,GAAG,CAAI,IAAsB;QACjC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;;YAC1C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,EAAE,CAAC;QACtB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;;gBACpC,IAAI,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { NodeWorkspace } from '../database.js';
|
|
2
|
+
import { WorkspaceFileIndex } from '../workspace.js';
|
|
3
|
+
import { WorkspaceDomainState } from './workspace-domain-state.js';
|
|
4
|
+
export declare class WorkspaceFileService {
|
|
5
|
+
private readonly state;
|
|
6
|
+
private readonly allowedRoots;
|
|
7
|
+
private readonly onInvalidated;
|
|
8
|
+
constructor(state: WorkspaceDomainState, allowedRoots: () => readonly string[], onInvalidated: (workspaceId: string) => void);
|
|
9
|
+
list(workspace: NodeWorkspace, input: Record<string, unknown>): Promise<unknown>;
|
|
10
|
+
read(workspace: NodeWorkspace, input: Record<string, unknown>): Promise<unknown>;
|
|
11
|
+
search(workspace: NodeWorkspace, input: Record<string, unknown>): Promise<unknown>;
|
|
12
|
+
index(workspace: NodeWorkspace): WorkspaceFileIndex;
|
|
13
|
+
dispose(workspaceId?: string): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { isAbsolute } from 'node:path';
|
|
2
|
+
import { listWorkspaceFiles, readAllowedTextFile, readWorkspaceTextFile, WorkspaceFileIndex } from '../workspace.js';
|
|
3
|
+
const INDEX_CACHE_LIMIT = 8;
|
|
4
|
+
export class WorkspaceFileService {
|
|
5
|
+
state;
|
|
6
|
+
allowedRoots;
|
|
7
|
+
onInvalidated;
|
|
8
|
+
constructor(state, allowedRoots, onInvalidated) {
|
|
9
|
+
this.state = state;
|
|
10
|
+
this.allowedRoots = allowedRoots;
|
|
11
|
+
this.onInvalidated = onInvalidated;
|
|
12
|
+
}
|
|
13
|
+
async list(workspace, input) {
|
|
14
|
+
if ((input.path !== undefined && typeof input.path !== 'string') ||
|
|
15
|
+
(input.cursor !== undefined && typeof input.cursor !== 'string') ||
|
|
16
|
+
(input.limit !== undefined &&
|
|
17
|
+
(!Number.isInteger(input.limit) ||
|
|
18
|
+
input.limit < 1 ||
|
|
19
|
+
input.limit > 200)))
|
|
20
|
+
throw new Error('DIRECTORY_CURSOR_INVALID');
|
|
21
|
+
return listWorkspaceFiles(workspace.path, typeof input.path === 'string' ? input.path : '.', typeof input.cursor === 'string' ? input.cursor : undefined, typeof input.limit === 'number' ? input.limit : undefined);
|
|
22
|
+
}
|
|
23
|
+
async read(workspace, input) {
|
|
24
|
+
if (typeof input.path !== 'string' ||
|
|
25
|
+
(input.offset !== undefined &&
|
|
26
|
+
(!Number.isInteger(input.offset) || input.offset < 0)) ||
|
|
27
|
+
(input.limit !== undefined &&
|
|
28
|
+
(!Number.isInteger(input.limit) ||
|
|
29
|
+
input.limit < 1 ||
|
|
30
|
+
input.limit > 512 * 1024)))
|
|
31
|
+
throw new Error('FILE_RANGE_INVALID');
|
|
32
|
+
const offset = typeof input.offset === 'number' ? input.offset : 0;
|
|
33
|
+
const limit = typeof input.limit === 'number' ? input.limit : 512 * 1024;
|
|
34
|
+
return isAbsolute(input.path)
|
|
35
|
+
? readAllowedTextFile(input.path, this.allowedRoots(), offset, limit)
|
|
36
|
+
: readWorkspaceTextFile(workspace.path, input.path, offset, limit);
|
|
37
|
+
}
|
|
38
|
+
async search(workspace, input) {
|
|
39
|
+
if (typeof input.query !== 'string' ||
|
|
40
|
+
(input.cursor !== undefined && typeof input.cursor !== 'string') ||
|
|
41
|
+
(input.limit !== undefined &&
|
|
42
|
+
(!Number.isInteger(input.limit) ||
|
|
43
|
+
input.limit < 1 ||
|
|
44
|
+
input.limit > 200)))
|
|
45
|
+
throw new Error('FILE_SEARCH_LIMIT_EXCEEDED');
|
|
46
|
+
return this.index(workspace).search(input.query, typeof input.cursor === 'string' ? input.cursor : undefined, typeof input.limit === 'number' ? input.limit : undefined);
|
|
47
|
+
}
|
|
48
|
+
index(workspace) {
|
|
49
|
+
let index = this.state.fileIndexes.get(workspace.id);
|
|
50
|
+
if (index === undefined) {
|
|
51
|
+
if (this.state.fileIndexes.size >= INDEX_CACHE_LIMIT) {
|
|
52
|
+
const oldest = this.state.fileIndexes.entries().next().value;
|
|
53
|
+
if (oldest !== undefined) {
|
|
54
|
+
oldest[1].dispose();
|
|
55
|
+
this.state.fileIndexes.delete(oldest[0]);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
index = new WorkspaceFileIndex(workspace.path, {
|
|
59
|
+
onInvalidated: () => this.onInvalidated(workspace.id)
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
this.state.fileIndexes.delete(workspace.id);
|
|
63
|
+
this.state.fileIndexes.set(workspace.id, index);
|
|
64
|
+
return index;
|
|
65
|
+
}
|
|
66
|
+
dispose(workspaceId) {
|
|
67
|
+
if (workspaceId !== undefined) {
|
|
68
|
+
this.state.fileIndexes.get(workspaceId)?.dispose();
|
|
69
|
+
this.state.fileIndexes.delete(workspaceId);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const index of this.state.fileIndexes.values())
|
|
73
|
+
index.dispose();
|
|
74
|
+
this.state.fileIndexes.clear();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=workspace-file-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-file-service.js","sourceRoot":"","sources":["../../src/service/workspace-file-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { NodeOperationHandler } from '../connector/node-operation-router.js';
|
|
2
|
+
import type { NodeRuntimeState } from '../runtime-state.js';
|
|
3
|
+
import type { RunnerName } from '@myagentroam/protocol';
|
|
4
|
+
export interface QueuedRunStart<TAttachment = unknown> {
|
|
5
|
+
readonly runId: string;
|
|
6
|
+
readonly sessionId: string;
|
|
7
|
+
readonly workspaceId: string;
|
|
8
|
+
readonly runner: RunnerName;
|
|
9
|
+
readonly input: string;
|
|
10
|
+
readonly attachments: readonly TAttachment[];
|
|
11
|
+
readonly attachmentPaths: readonly string[];
|
|
12
|
+
readonly cwd: string;
|
|
13
|
+
readonly externalSessionId: string | null;
|
|
14
|
+
readonly model: string | null;
|
|
15
|
+
readonly effort: string | null;
|
|
16
|
+
readonly access: string | null;
|
|
17
|
+
readonly collaborationMode: 'default' | 'plan';
|
|
18
|
+
readonly serviceTier?: 'fast';
|
|
19
|
+
readonly secretEnvironment: Readonly<Record<string, string>>;
|
|
20
|
+
}
|
|
21
|
+
export interface WorkspaceQueueWorkbenchServiceOptions {
|
|
22
|
+
readonly runtime: NodeRuntimeState;
|
|
23
|
+
readonly emit: (workspaceId: string, sessionId: string) => void;
|
|
24
|
+
readonly clearImages: (runId: string) => void;
|
|
25
|
+
readonly emitRun: (runId: string, eventType: string, payload: unknown, status?: 'FAILED' | 'CANCELLED') => void;
|
|
26
|
+
readonly emitConversation: (turn: unknown) => void;
|
|
27
|
+
readonly control: (operation: string, payload: Record<string, unknown>) => void;
|
|
28
|
+
readonly stopped: () => boolean;
|
|
29
|
+
readonly markInterrupted: (runId: string) => void;
|
|
30
|
+
readonly prepareInput: (runner: RunnerName, input: string, collaborationMode: 'default' | 'plan') => string;
|
|
31
|
+
}
|
|
32
|
+
export declare class WorkspaceQueueWorkbenchService<TAttachment> {
|
|
33
|
+
private readonly options;
|
|
34
|
+
private readonly starts;
|
|
35
|
+
constructor(options: WorkspaceQueueWorkbenchServiceOptions);
|
|
36
|
+
remember(start: QueuedRunStart<TAttachment>): void;
|
|
37
|
+
pending(runId: string): QueuedRunStart<TAttachment> | undefined;
|
|
38
|
+
remove(runId: string): void;
|
|
39
|
+
clear(): void;
|
|
40
|
+
migrateSession(previousId: string, nextId: string): void;
|
|
41
|
+
operations(): Readonly<Record<string, NodeOperationHandler>>;
|
|
42
|
+
private get;
|
|
43
|
+
private pauseOrResume;
|
|
44
|
+
private reorder;
|
|
45
|
+
private update;
|
|
46
|
+
private delete;
|
|
47
|
+
private execute;
|
|
48
|
+
private requireSession;
|
|
49
|
+
private requireRun;
|
|
50
|
+
replace(queuedRunId: string, activeRunId: string, prioritize?: boolean): void;
|
|
51
|
+
schedule(sessionId: string): void;
|
|
52
|
+
dispatch(sessionId: string): Promise<void>;
|
|
53
|
+
present(workspaceId: string, sessionId: string): unknown;
|
|
54
|
+
private updatePending;
|
|
55
|
+
}
|