@myagentroam/node 0.11.36 → 0.11.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/application/execution-lifecycle.js +54 -0
  2. package/dist/application/node-lifecycle.js +104 -0
  3. package/dist/application/node-operation-admission.js +51 -0
  4. package/dist/application/node-operation-contracts.js +1 -0
  5. package/dist/application/runner-composition.js +22 -0
  6. package/dist/application/session-projection-composition.js +26 -0
  7. package/dist/application/workspace-application.js +61 -0
  8. package/dist/application/workspace-composition.js +21 -0
  9. package/dist/capabilities.js +2 -3
  10. package/dist/codex-app-server.js +1 -471
  11. package/dist/connection/authorization.js +26 -0
  12. package/dist/{service → connection}/direct-transfer-service.js +1 -1
  13. package/dist/connection/endpoints.js +32 -0
  14. package/dist/connector.js +145 -253
  15. package/dist/control-outbound-scheduler.js +3 -0
  16. package/dist/database.js +34 -14
  17. package/dist/git-askpass.js +1 -1
  18. package/dist/git-execution-helper.js +1 -1
  19. package/dist/hosting/hosted-conversation-file-identity.js +27 -0
  20. package/dist/hosting/hosted-conversation-file-operations.js +44 -0
  21. package/dist/hosting/hosted-conversation-node-service.js +974 -0
  22. package/dist/hosting/hosted-conversation-runs.js +599 -0
  23. package/dist/hosting/hosted-conversation-templates.js +280 -0
  24. package/dist/hosting/hosted-conversation-uploads.js +344 -0
  25. package/dist/hosting/hosted-conversation-watch.js +194 -0
  26. package/dist/hosting/runtime-contracts.js +1 -0
  27. package/dist/runner/abstract-runner.js +4 -13
  28. package/dist/{claude-agent-sdk.js → runner/claude/claude-agent-sdk.js} +2 -2
  29. package/dist/runner/claude/conversation-parser.js +2 -1
  30. package/dist/runner/claude/managed-run-controller.js +6 -7
  31. package/dist/runner/claude/message-parsers.js +2 -1
  32. package/dist/runner/claude/native-transcript.js +2 -1
  33. package/dist/runner/claude/tool-normalizer.js +1 -1
  34. package/dist/runner/claude-code-runner.js +2 -2
  35. package/dist/runner/codex/codex-app-server.js +471 -0
  36. package/dist/runner/codex/conversation-parser.js +4 -2
  37. package/dist/runner/codex/managed-run-controller.js +7 -9
  38. package/dist/runner/codex/native-transcript.js +1 -1
  39. package/dist/runner/codex/tool-normalizer.js +1 -1
  40. package/dist/runner/codex-runner.js +9 -27
  41. package/dist/runner/contracts.js +1 -0
  42. package/dist/runner/mar-agent/conversation-normalizer.js +2 -2
  43. package/dist/runner/mar-agent/history-projection.js +1 -1
  44. package/dist/runner/mar-agent/hosted-conversation-runtime.js +6 -10
  45. package/dist/runner/mar-agent/managed-run-controller.js +85 -61
  46. package/dist/runner/mar-agent/runtime-model-factory.js +0 -3
  47. package/dist/runner/mar-agent-runner.js +1 -1
  48. package/dist/runner/normalization.js +42 -0
  49. package/dist/runner/opencode/conversation-parser.js +1 -1
  50. package/dist/runner/opencode/managed-run-controller.js +6 -7
  51. package/dist/{opencode-server.js → runner/opencode/opencode-server.js} +2 -2
  52. package/dist/runner/opencode/tool-normalizer.js +1 -1
  53. package/dist/runner/opencode-runner.js +4 -5
  54. package/dist/runner/runner-registry.js +4 -1
  55. package/dist/runtime-state.js +48 -372
  56. package/dist/service/computer-use-enablement-service.js +1 -1
  57. package/dist/service/continuous-run-coordinator.js +52 -7
  58. package/dist/service/conversation-history-service.js +4 -4
  59. package/dist/service/conversation-hosting-capability-service.js +1 -1
  60. package/dist/service/conversation-hosting-enablement-service.js +1 -1
  61. package/dist/service/conversation-hosting-lifecycle-service.js +3 -3
  62. package/dist/service/conversation-hosting-maintenance-service.js +1 -1
  63. package/dist/service/conversation-observation.js +1 -1
  64. package/dist/service/conversation-segment-service.js +1 -1
  65. package/dist/service/external-session-resume-service.js +47 -27
  66. package/dist/service/fake-managed-run-service.js +3 -7
  67. package/dist/service/git-operation-service.js +1 -1
  68. package/dist/service/goal-continuation-coordinator.js +14 -7
  69. package/dist/service/mar-agent-model-transport-test-service.js +1 -1
  70. package/dist/service/native-session-watch-service.js +1 -1
  71. package/dist/service/node-connection-lifecycle-service.js +6 -3
  72. package/dist/service/node-control-channel.js +48 -11
  73. package/dist/service/node-request-service.js +1 -1
  74. package/dist/service/node-terminal-channel.js +2 -1
  75. package/dist/service/node-workspace-coordinator.js +3 -2
  76. package/dist/service/notification-mcp-bridge.js +6 -2
  77. package/dist/service/recent-run-projection-service.js +1 -1
  78. package/dist/service/restart-session-restorer.js +1 -1
  79. package/dist/service/run-event-service.js +49 -42
  80. package/dist/service/run-workbench-service.js +3 -3
  81. package/dist/service/runner-interaction-service.js +6 -5
  82. package/dist/service/runner-service.js +1 -1
  83. package/dist/service/session-recent-activity.js +2 -1
  84. package/dist/service/skill-directory-service.js +1 -1
  85. package/dist/service/skill-install-service.js +2 -2
  86. package/dist/service/terminal-service.js +1 -1
  87. package/dist/service/workbench-event-projection.js +3 -2
  88. package/dist/service/workbench-event-service.js +1 -1
  89. package/dist/service/workspace-service.js +3 -2
  90. package/dist/session/attachments.js +110 -0
  91. package/dist/session/contracts.js +1 -0
  92. package/dist/{util → session}/conversation-identity.js +1 -1
  93. package/dist/session/input-validation.js +15 -0
  94. package/dist/{service → session}/native-session-projection-service.js +40 -11
  95. package/dist/session/pagination.js +77 -0
  96. package/dist/{util → session}/runner-native-session-parsers.js +2 -1
  97. package/dist/session/runtime/approvals.js +90 -0
  98. package/dist/session/runtime/conversation-projection.js +310 -0
  99. package/dist/session/runtime/type-guards.js +19 -0
  100. package/dist/{service → session}/session-catalog-service.js +5 -4
  101. package/dist/{service → session}/session-command-service.js +3 -3
  102. package/dist/{service → session}/session-identity-service.js +1 -1
  103. package/dist/{service → session}/session-lifecycle-service.js +18 -7
  104. package/dist/{service → session}/session-message-service.js +6 -5
  105. package/dist/{service → session}/session-presentation-service.js +1 -1
  106. package/dist/{service → session}/session-query-service.js +2 -2
  107. package/dist/{service → session}/session-schedule-service.js +2 -2
  108. package/dist/util/records.js +3 -0
  109. package/dist/workspace/contracts.js +1 -0
  110. package/dist/workspace/file-index.js +534 -0
  111. package/dist/workspace/files.js +466 -0
  112. package/dist/workspace/git.js +991 -0
  113. package/dist/workspace/path-access.js +184 -0
  114. package/dist/workspace/utf8.js +12 -0
  115. package/dist/{service → workspace}/workspace-change-service.js +45 -21
  116. package/dist/{service → workspace}/workspace-code-navigation-service.js +6 -6
  117. package/dist/{service → workspace}/workspace-file-manager-service.js +1 -1
  118. package/dist/{service → workspace}/workspace-file-service.js +16 -16
  119. package/dist/{service → workspace}/workspace-git-exclude-service.js +1 -1
  120. package/dist/{service → workspace}/workspace-queue-workbench-service.js +3 -2
  121. package/dist/{service → workspace}/workspace-session-service.js +45 -40
  122. package/dist/{service → workspace}/workspace-upload-service.js +28 -28
  123. package/dist/{service → workspace}/workspace-watch-service.js +29 -28
  124. package/dist/{service → workspace}/workspace-workbench-service.js +4 -3
  125. package/package.json +4 -4
  126. package/dist/service/hosted-conversation-node-service.js +0 -2252
  127. package/dist/service/run-domain-state.js +0 -4
  128. package/dist/service/session-domain-state.js +0 -9
  129. package/dist/service/workspace-domain-state.js +0 -41
  130. package/dist/util/node-operation-parsers.js +0 -320
  131. package/dist/workspace.js +0 -2168
  132. /package/dist/{connector → application}/node-connector-options.js +0 -0
  133. /package/dist/{util → connection}/node-operation-data.js +0 -0
  134. /package/dist/{connector → connection}/node-operation-router.js +0 -0
  135. /package/dist/{service → hosting}/hosted-conversation-sandbox-profile.js +0 -0
  136. /package/dist/{service → hosting}/hosted-conversation-store.js +0 -0
  137. /package/dist/{util → mcp}/secret-environment.js +0 -0
  138. /package/dist/{claude-channel.js → runner/claude/claude-channel.js} +0 -0
  139. /package/dist/{util → runner}/personal-instructions.js +0 -0
  140. /package/dist/{util → runner}/runner-error.js +0 -0
  141. /package/dist/{service/conversation-work-process.js → session/runtime/work-process.js} +0 -0
  142. /package/dist/{service → session}/session-context-service.js +0 -0
  143. /package/dist/{util → workspace}/git-credential-client.js +0 -0
  144. /package/dist/{service → workspace}/workspace-content-search-service.js +0 -0
  145. /package/dist/{service → workspace}/workspace-watch-snapshot-service.js +0 -0
@@ -0,0 +1,54 @@
1
+ /** Coordinates the execution-specific cross-domain terminal and release sequence. */
2
+ export class ExecutionLifecycle {
3
+ databaseAvailable;
4
+ scheduled;
5
+ continuous;
6
+ goal;
7
+ usage;
8
+ goalMcp;
9
+ scheduleMcp;
10
+ notificationMcp;
11
+ events;
12
+ upgrade;
13
+ constructor(databaseAvailable, scheduled, continuous, goal, usage, goalMcp, scheduleMcp, notificationMcp, events, upgrade) {
14
+ this.databaseAvailable = databaseAvailable;
15
+ this.scheduled = scheduled;
16
+ this.continuous = continuous;
17
+ this.goal = goal;
18
+ this.usage = usage;
19
+ this.goalMcp = goalMcp;
20
+ this.scheduleMcp = scheduleMcp;
21
+ this.notificationMcp = notificationMcp;
22
+ this.events = events;
23
+ this.upgrade = upgrade;
24
+ }
25
+ terminal(run, status) {
26
+ if (this.databaseAvailable())
27
+ this.scheduled.executionTerminated(run, status);
28
+ this.continuous.runTerminated(run.sessionId);
29
+ }
30
+ revokeMcps(executionId) {
31
+ this.goalMcp.revoke(executionId);
32
+ this.scheduleMcp.revoke(executionId);
33
+ this.notificationMcp.revoke(executionId);
34
+ }
35
+ release(executionId) {
36
+ this.usage.release(executionId);
37
+ this.goal.releaseExecution(executionId);
38
+ this.revokeMcps(executionId);
39
+ this.continuous.remove(executionId);
40
+ }
41
+ emitItem(runId, item) {
42
+ this.goal.executionProgress(runId, item);
43
+ this.events.emitConversationItem(runId, item);
44
+ }
45
+ async dispatchQueue(sessionId, delayMs = 0) {
46
+ if (this.upgrade.pending())
47
+ return;
48
+ if (delayMs > 0) {
49
+ this.continuous.schedule(sessionId, delayMs);
50
+ return;
51
+ }
52
+ await this.continuous.dispatch(sessionId);
53
+ }
54
+ }
@@ -0,0 +1,104 @@
1
+ /** Owns application start/stop serialization; domain resources remain owned by their services. */
2
+ export class NodeLifecycle {
3
+ startResources;
4
+ freeze;
5
+ shutdown;
6
+ starting;
7
+ stopping;
8
+ stoppedValue = false;
9
+ stopVersion = 0;
10
+ constructor(startResources, freeze, shutdown) {
11
+ this.startResources = startResources;
12
+ this.freeze = freeze;
13
+ this.shutdown = shutdown;
14
+ }
15
+ get stopped() {
16
+ return this.stoppedValue;
17
+ }
18
+ start() {
19
+ if (this.starting !== undefined)
20
+ return this.starting;
21
+ const version = this.stopVersion;
22
+ const operation = (async () => {
23
+ if (this.stopping !== undefined)
24
+ await this.stopping;
25
+ if (version !== this.stopVersion)
26
+ throw new Error('NODE_STOPPED');
27
+ this.stopping = undefined;
28
+ this.stoppedValue = false;
29
+ try {
30
+ await this.startResources();
31
+ }
32
+ catch (error) {
33
+ this.freeze();
34
+ this.stoppedValue = true;
35
+ try {
36
+ await this.stopResources(false);
37
+ }
38
+ catch {
39
+ // Preserve the startup failure after attempting cleanup.
40
+ }
41
+ throw error;
42
+ }
43
+ })();
44
+ this.starting = operation;
45
+ void operation
46
+ .finally(() => {
47
+ if (this.starting === operation)
48
+ this.starting = undefined;
49
+ })
50
+ .catch(() => { });
51
+ return operation;
52
+ }
53
+ stop(handoff = false) {
54
+ this.stopVersion += 1;
55
+ if (this.stopping !== undefined)
56
+ return this.stopping;
57
+ this.stoppedValue = true;
58
+ this.freeze();
59
+ const starting = this.starting;
60
+ const operation = (async () => {
61
+ if (starting !== undefined) {
62
+ try {
63
+ await starting;
64
+ }
65
+ catch {
66
+ // Failed startup already performed its own cleanup.
67
+ return;
68
+ }
69
+ }
70
+ await this.stopResources(handoff);
71
+ })();
72
+ this.stopping = operation;
73
+ return operation;
74
+ }
75
+ async stopResources(handoff) {
76
+ let snapshot;
77
+ let failure;
78
+ try {
79
+ await this.shutdown.waitForRecovery();
80
+ await this.shutdown.drainInput();
81
+ }
82
+ catch (error) {
83
+ failure = error;
84
+ }
85
+ try {
86
+ await this.shutdown.closeResume();
87
+ if (failure === undefined && handoff)
88
+ snapshot = this.shutdown.capture();
89
+ }
90
+ catch (error) {
91
+ failure ??= error;
92
+ }
93
+ try {
94
+ await this.shutdown.dispose();
95
+ }
96
+ catch (error) {
97
+ failure ??= error;
98
+ }
99
+ if (failure !== undefined)
100
+ throw failure;
101
+ if (snapshot !== undefined)
102
+ await this.shutdown.publish(snapshot);
103
+ }
104
+ }
@@ -0,0 +1,51 @@
1
+ import { nodeLog } from '../operational.js';
2
+ import { isPlainRecord } from '../util/records.js';
3
+ /** Owns operation admission and the in-flight work joined during shutdown. */
4
+ export class NodeOperationAdmission {
5
+ stopped;
6
+ databaseAvailable;
7
+ nodeId;
8
+ restart;
9
+ upgrade;
10
+ git;
11
+ router;
12
+ inFlight = new Set();
13
+ constructor(stopped, databaseAvailable, nodeId, restart, upgrade, git, router) {
14
+ this.stopped = stopped;
15
+ this.databaseAvailable = databaseAvailable;
16
+ this.nodeId = nodeId;
17
+ this.restart = restart;
18
+ this.upgrade = upgrade;
19
+ this.git = git;
20
+ this.router = router;
21
+ }
22
+ async execute(operation, data) {
23
+ if (this.stopped())
24
+ throw new Error('NODE_STOPPED');
25
+ const input = isPlainRecord(data) ? data : {};
26
+ const sessionId = typeof input.sessionId === 'string' ? input.sessionId : undefined;
27
+ if (this.restart.blocksOperation(operation, input))
28
+ throw new Error('SESSION_RESTART_PENDING');
29
+ if (!this.databaseAvailable())
30
+ throw new Error('NODE_DATABASE_UNAVAILABLE');
31
+ if (this.upgrade.blocks(operation))
32
+ throw new Error('NODE_UPGRADE_PENDING');
33
+ nodeLog('node.operation', { nodeId: this.nodeId(), operation });
34
+ const task = this.git.execute(operation, data, (value) => this.router.execute(operation, value));
35
+ this.inFlight.add(task);
36
+ try {
37
+ const result = await task;
38
+ if ((operation === 'session.command.execute' || operation === 'session.message') &&
39
+ sessionId !== undefined &&
40
+ Number.isSafeInteger(input.__requestUserId))
41
+ this.restart.rememberUser(sessionId, input.__requestUserId);
42
+ return result;
43
+ }
44
+ finally {
45
+ this.inFlight.delete(task);
46
+ }
47
+ }
48
+ async drain() {
49
+ await Promise.allSettled([...this.inFlight]);
50
+ }
51
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { CodexRunner } from '../runner/codex-runner.js';
2
+ import { ClaudeCodeRunner } from '../runner/claude-code-runner.js';
3
+ import { OpenCodeRunner } from '../runner/opencode-runner.js';
4
+ import { MarAgentRunner } from '../runner/mar-agent-runner.js';
5
+ import { FakeTestRunner } from '../runner/fake-test-runner.js';
6
+ import { RunnerRegistry } from '../runner/runner-registry.js';
7
+ /** Builds the runner registry from the same concrete instances used by controllers. */
8
+ export function composeRunners(options) {
9
+ const fake = options.fakeRunner === undefined ? undefined : new FakeTestRunner(options.fakeRunner);
10
+ const codex = new CodexRunner(options.codexClient, options.codexProfileClientFactory, options.codexRunClientFactory);
11
+ const claude = new ClaudeCodeRunner(options.claudeClient);
12
+ const openCode = new OpenCodeRunner(options.openCodeClient);
13
+ const marAgent = new MarAgentRunner();
14
+ const registry = new RunnerRegistry([
15
+ openCode,
16
+ marAgent,
17
+ codex,
18
+ claude,
19
+ ...(fake === undefined ? [] : [fake])
20
+ ]);
21
+ return { codex, claude, openCode, marAgent, fake, registry };
22
+ }
@@ -0,0 +1,26 @@
1
+ import { hasManagedActiveRun } from '../service/conversation-history-service.js';
2
+ import { SessionPresentationService } from '../session/session-presentation-service.js';
3
+ import { NativeSessionProjectionService } from '../session/native-session-projection-service.js';
4
+ /** Joins native projection and presentation around their shared Session identity. */
5
+ export function composeSessionProjection(input) {
6
+ const presentation = new SessionPresentationService({
7
+ database: input.database,
8
+ runtime: input.runtime,
9
+ commands: input.commands,
10
+ runners: input.runners,
11
+ capabilities: input.capabilities,
12
+ hasManagedActiveRun: (session) => hasManagedActiveRun(input.runtime, session),
13
+ projectionForNative: (session) => native.projectionForNative(session)
14
+ });
15
+ const native = new NativeSessionProjectionService({
16
+ database: input.database,
17
+ nodeId: input.nodeId,
18
+ runtime: input.runtime,
19
+ runners: input.runners,
20
+ capabilities: input.capabilities,
21
+ commands: input.commands,
22
+ releaseResumeState: input.releaseResumeState,
23
+ present: (session) => presentation.present(session)
24
+ });
25
+ return { presentation, native };
26
+ }
@@ -0,0 +1,61 @@
1
+ import { NodeWorkspaceCoordinator } from '../service/node-workspace-coordinator.js';
2
+ import { WorkspaceService } from '../service/workspace-service.js';
3
+ import { WorkspaceWorkbenchService } from '../workspace/workspace-workbench-service.js';
4
+ import { isPlainRecord } from '../util/records.js';
5
+ /** Owns the cross-service workspace removal and observation wiring. */
6
+ export function composeWorkspaceApplication(input) {
7
+ const resources = input.resources;
8
+ const coordinator = new NodeWorkspaceCoordinator({
9
+ config: input.config,
10
+ database: input.database,
11
+ watches: resources.watch,
12
+ sessions: resources.sessions,
13
+ changes: input.changes,
14
+ emit: (workspaceId, topic) => void workbench?.invalidateTopic(workspaceId, topic),
15
+ send: input.send
16
+ });
17
+ const workbench = new WorkspaceWorkbenchService({
18
+ requireWorkspace: (id) => coordinator.require(id),
19
+ inspectWorkspace: (workspace) => coordinator.inspectMetadata(workspace),
20
+ commitWorkspace: (workspace, inspection) => coordinator.commitMetadata(workspace, inspection),
21
+ watch: resources.watch,
22
+ files: resources.files,
23
+ uploads: resources.uploads,
24
+ changes: input.changes,
25
+ listSessions: input.listSessions,
26
+ invalidate: resources.invalidateFiles,
27
+ nodeId: input.nodeId,
28
+ nodeGeneration: input.nodeGeneration,
29
+ emitWatchEvent: input.emitWatchEvent
30
+ });
31
+ const workspace = new WorkspaceService(() => {
32
+ const database = input.database();
33
+ if (database === undefined)
34
+ throw new Error('NODE_DATABASE_UNAVAILABLE');
35
+ return database;
36
+ }, () => {
37
+ const config = input.config();
38
+ if (config === undefined)
39
+ throw new Error('NODE_CONFIG_UNAVAILABLE');
40
+ return config;
41
+ }, input.runtime, (id) => {
42
+ input.terminals.removeWorkspaceAssociation(id);
43
+ resources.files.dispose(id);
44
+ coordinator.invalidateChanges(id);
45
+ resources.sessions.invalidate(id);
46
+ coordinator.clearWatches(id);
47
+ workbench.clearWorkspace(id);
48
+ input.invalidatePrompt(id);
49
+ }, (id) => coordinator.gitPolicyChanged(id));
50
+ const publishSession = (payload) => {
51
+ if (isPlainRecord(payload) && isPlainRecord(payload.session)) {
52
+ const workspaceId = payload.session.workspaceId;
53
+ if (typeof workspaceId === 'string') {
54
+ resources.sessions.markCacheStale(workspaceId);
55
+ void workbench.invalidateTopic(workspaceId, 'sessions');
56
+ }
57
+ }
58
+ input.publishSession(payload);
59
+ };
60
+ return { coordinator, workbench, workspace, publishSession };
61
+ }
@@ -0,0 +1,21 @@
1
+ import { WorkspaceSessionService } from '../workspace/workspace-session-service.js';
2
+ import { WorkspaceWatchService } from '../workspace/workspace-watch-service.js';
3
+ import { WorkspaceFileService } from '../workspace/workspace-file-service.js';
4
+ import { WorkspaceUploadService } from '../workspace/workspace-upload-service.js';
5
+ /** Composes the mutually dependent workspace resource and observation owners. */
6
+ export function composeWorkspaceResources(input) {
7
+ const watch = new WorkspaceWatchService((id) => sessions.ensureWatch(id), (id) => sessions.stopWatch(id), input.releaseWatch, input.removeWatch);
8
+ const sessions = new WorkspaceSessionService({
9
+ discover: input.discover,
10
+ listPage: input.listPage,
11
+ active: (id) => watch.topicActive(id, 'sessions'),
12
+ invalidate: input.invalidateSessions
13
+ });
14
+ const invalidateFiles = (id) => {
15
+ files.dispose(id);
16
+ input.invalidateFiles(id);
17
+ };
18
+ const uploads = new WorkspaceUploadService(invalidateFiles, input.temporaryRoot);
19
+ const files = new WorkspaceFileService(invalidateFiles, {}, (id, path) => uploads.fileResource(id, path) ?? input.attachmentResource(id, path));
20
+ return { watch, sessions, files, uploads, invalidateFiles };
21
+ }
@@ -1,14 +1,13 @@
1
1
  import { release, version } from 'node:os';
2
2
  import nodePackage from '../package.json' with { type: 'json' };
3
- import { probeClaudeCode, probeClaudeCodeAsync } from './claude-agent-sdk.js';
4
- import { probeCodex, probeCodexAsync } from './codex-app-server.js';
3
+ import { probeClaudeCode, probeClaudeCodeAsync } from './runner/claude/claude-agent-sdk.js';
4
+ import { probeCodex, probeCodexAsync } from './runner/codex/codex-app-server.js';
5
5
  import { probeOpenCode, probeOpenCodeAsync } from './opencode-runtime.js';
6
6
  import { detectRuntimeCommands } from './runtime-command-detector.js';
7
7
  const nodeAppVersion = typeof nodePackage.version === 'string' ? nodePackage.version : 'unknown';
8
8
  const runtimeCredentialCapability = () => ({
9
9
  apiVersion: 1,
10
10
  websocket: true,
11
- fastMode: true,
12
11
  serviceTiers: ['auto', 'default', 'flex', 'priority', 'fast', 'ultrafast'],
13
12
  namespacedTools: true,
14
13
  responsesOptionalParameters: true,