@myagentroam/node 0.1.4 → 0.1.6

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 (210) hide show
  1. package/README.md +9 -1
  2. package/dist/capabilities.d.ts +2 -0
  3. package/dist/capabilities.js +15 -4
  4. package/dist/claude-agent-sdk.d.ts +3 -1
  5. package/dist/claude-agent-sdk.js +9 -2
  6. package/dist/claude-channel.js +0 -1
  7. package/dist/codex-app-server.d.ts +1 -0
  8. package/dist/codex-app-server.js +8 -1
  9. package/dist/config.d.ts +3 -0
  10. package/dist/config.js +18 -2
  11. package/dist/connector/node-connector-options.d.ts +3 -0
  12. package/dist/connector/node-connector-options.js +0 -1
  13. package/dist/connector/node-operation-router.js +0 -1
  14. package/dist/connector.d.ts +3 -0
  15. package/dist/connector.js +109 -7
  16. package/dist/control-outbound-scheduler.js +0 -1
  17. package/dist/database.d.ts +4 -0
  18. package/dist/database.js +14 -9
  19. package/dist/event-buffer.js +0 -1
  20. package/dist/fake-runner.js +0 -1
  21. package/dist/health.js +0 -1
  22. package/dist/main.js +6 -1
  23. package/dist/migrations/v001.js +0 -1
  24. package/dist/migrations/v002.js +0 -1
  25. package/dist/migrations/v003.d.ts +4 -0
  26. package/dist/migrations/v003.js +44 -0
  27. package/dist/native-jsonl-reader.js +0 -1
  28. package/dist/native-session-history.d.ts +19 -1
  29. package/dist/native-session-history.js +65 -3
  30. package/dist/opencode-runtime.d.ts +33 -0
  31. package/dist/opencode-runtime.js +80 -0
  32. package/dist/opencode-server.d.ts +47 -0
  33. package/dist/opencode-server.js +250 -0
  34. package/dist/operational.js +10 -3
  35. package/dist/process-tree.js +0 -1
  36. package/dist/runner/abstract-runner.d.ts +7 -2
  37. package/dist/runner/abstract-runner.js +17 -2
  38. package/dist/runner/claude/managed-run-controller.js +20 -1
  39. package/dist/runner/claude-code-runner.d.ts +3 -1
  40. package/dist/runner/claude-code-runner.js +26 -8
  41. package/dist/runner/codex/conversation-parser.d.ts +1 -3
  42. package/dist/runner/codex/conversation-parser.js +174 -34
  43. package/dist/runner/codex/managed-run-controller.d.ts +2 -1
  44. package/dist/runner/codex/managed-run-controller.js +13 -4
  45. package/dist/runner/codex-runner.d.ts +4 -0
  46. package/dist/runner/codex-runner.js +27 -4
  47. package/dist/runner/fake-test-runner.js +0 -1
  48. package/dist/runner/opencode/conversation-parser.d.ts +27 -0
  49. package/dist/runner/opencode/conversation-parser.js +217 -0
  50. package/dist/runner/opencode/managed-run-controller.d.ts +76 -0
  51. package/dist/runner/opencode/managed-run-controller.js +451 -0
  52. package/dist/runner/opencode-runner.d.ts +60 -0
  53. package/dist/runner/opencode-runner.js +330 -0
  54. package/dist/runner/runner-registry.d.ts +3 -1
  55. package/dist/runner/runner-registry.js +12 -3
  56. package/dist/runner-command-engine.js +0 -1
  57. package/dist/runner-profiles.d.ts +4 -0
  58. package/dist/runner-profiles.js +76 -3
  59. package/dist/runner-usage.js +0 -1
  60. package/dist/runtime-state.js +20 -9
  61. package/dist/service/attachment-domain-state.js +0 -1
  62. package/dist/service/conversation-history-service.js +0 -1
  63. package/dist/service/external-session-resume-service.js +0 -1
  64. package/dist/service/fake-managed-run-service.js +0 -1
  65. package/dist/service/managed-runner-session-service.d.ts +3 -1
  66. package/dist/service/managed-runner-session-service.js +8 -4
  67. package/dist/service/native-session-projection-service.d.ts +2 -1
  68. package/dist/service/native-session-projection-service.js +8 -5
  69. package/dist/service/native-session-watch-service.js +0 -1
  70. package/dist/service/node-connection-lifecycle-service.js +3 -2
  71. package/dist/service/node-control-channel.d.ts +1 -1
  72. package/dist/service/node-control-channel.js +5 -4
  73. package/dist/service/node-control-message-service.js +0 -1
  74. package/dist/service/node-request-service.js +0 -1
  75. package/dist/service/node-run-event-bridge.d.ts +2 -0
  76. package/dist/service/node-run-event-bridge.js +4 -1
  77. package/dist/service/node-terminal-channel.js +16 -10
  78. package/dist/service/node-upgrade-coordinator.d.ts +29 -0
  79. package/dist/service/node-upgrade-coordinator.js +137 -0
  80. package/dist/service/node-workspace-coordinator.js +0 -1
  81. package/dist/service/run-attachment-service.js +0 -1
  82. package/dist/service/run-domain-state.js +0 -1
  83. package/dist/service/run-event-service.js +0 -1
  84. package/dist/service/run-workbench-service.js +0 -1
  85. package/dist/service/runner-channel-message-service.js +0 -1
  86. package/dist/service/runner-interaction-service.js +2 -1
  87. package/dist/service/runner-service.d.ts +5 -4
  88. package/dist/service/runner-service.js +19 -6
  89. package/dist/service/session-catalog-service.d.ts +16 -1
  90. package/dist/service/session-catalog-service.js +82 -3
  91. package/dist/service/session-command-service.js +0 -1
  92. package/dist/service/session-context-service.js +0 -1
  93. package/dist/service/session-domain-state.js +0 -1
  94. package/dist/service/session-identity-service.js +0 -1
  95. package/dist/service/session-lifecycle-service.js +13 -7
  96. package/dist/service/session-message-service.js +0 -1
  97. package/dist/service/session-presentation-service.js +0 -1
  98. package/dist/service/session-query-service.js +0 -1
  99. package/dist/service/terminal-relay-state.js +0 -1
  100. package/dist/service/terminal-service.js +0 -1
  101. package/dist/service/workbench-event-service.js +0 -1
  102. package/dist/service/workbench-manifest-service.d.ts +5 -4
  103. package/dist/service/workbench-manifest-service.js +3 -2
  104. package/dist/service/workspace-change-service.js +2 -2
  105. package/dist/service/workspace-content-search-service.d.ts +14 -0
  106. package/dist/service/workspace-content-search-service.js +477 -0
  107. package/dist/service/workspace-domain-state.js +0 -1
  108. package/dist/service/workspace-file-service.d.ts +3 -0
  109. package/dist/service/workspace-file-service.js +35 -3
  110. package/dist/service/workspace-queue-workbench-service.js +0 -1
  111. package/dist/service/workspace-service.js +23 -10
  112. package/dist/service/workspace-session-service.js +0 -1
  113. package/dist/service/workspace-upload-service.js +0 -1
  114. package/dist/service/workspace-watch-service.js +0 -1
  115. package/dist/service/workspace-workbench-service.d.ts +9 -0
  116. package/dist/service/workspace-workbench-service.js +69 -2
  117. package/dist/service.js +2 -3
  118. package/dist/storage.js +0 -1
  119. package/dist/supervisor.d.ts +1 -0
  120. package/dist/supervisor.js +154 -0
  121. package/dist/terminal.js +0 -1
  122. package/dist/util/node-operation-parsers.d.ts +1 -0
  123. package/dist/util/node-operation-parsers.js +3 -1
  124. package/dist/util/runner-native-session-parsers.js +117 -73
  125. package/dist/util/secret-environment.js +0 -1
  126. package/dist/workspace.d.ts +62 -2
  127. package/dist/workspace.js +539 -57
  128. package/package.json +3 -2
  129. package/dist/capabilities.js.map +0 -1
  130. package/dist/claude-agent-sdk.js.map +0 -1
  131. package/dist/claude-channel.js.map +0 -1
  132. package/dist/codex-app-server.js.map +0 -1
  133. package/dist/config.js.map +0 -1
  134. package/dist/connector/node-connector-options.js.map +0 -1
  135. package/dist/connector/node-operation-router.js.map +0 -1
  136. package/dist/connector.js.map +0 -1
  137. package/dist/control-outbound-scheduler.js.map +0 -1
  138. package/dist/database.js.map +0 -1
  139. package/dist/event-buffer.js.map +0 -1
  140. package/dist/fake-runner.js.map +0 -1
  141. package/dist/health.js.map +0 -1
  142. package/dist/main.js.map +0 -1
  143. package/dist/migrations/v001.js.map +0 -1
  144. package/dist/migrations/v002.js.map +0 -1
  145. package/dist/native-jsonl-reader.js.map +0 -1
  146. package/dist/native-session-history.js.map +0 -1
  147. package/dist/operational.js.map +0 -1
  148. package/dist/process-tree.js.map +0 -1
  149. package/dist/runner/abstract-runner.js.map +0 -1
  150. package/dist/runner/claude/managed-run-controller.js.map +0 -1
  151. package/dist/runner/claude-code-runner.js.map +0 -1
  152. package/dist/runner/codex/conversation-parser.js.map +0 -1
  153. package/dist/runner/codex/managed-run-controller.js.map +0 -1
  154. package/dist/runner/codex-runner.js.map +0 -1
  155. package/dist/runner/fake-test-runner.js.map +0 -1
  156. package/dist/runner/runner-registry.js.map +0 -1
  157. package/dist/runner-command-engine.js.map +0 -1
  158. package/dist/runner-profiles.js.map +0 -1
  159. package/dist/runner-usage.js.map +0 -1
  160. package/dist/runtime-state.js.map +0 -1
  161. package/dist/service/attachment-domain-state.js.map +0 -1
  162. package/dist/service/conversation-history-service.js.map +0 -1
  163. package/dist/service/external-session-resume-service.js.map +0 -1
  164. package/dist/service/fake-managed-run-service.js.map +0 -1
  165. package/dist/service/managed-runner-session-service.js.map +0 -1
  166. package/dist/service/native-session-projection-service.js.map +0 -1
  167. package/dist/service/native-session-watch-service.js.map +0 -1
  168. package/dist/service/node-connection-lifecycle-service.js.map +0 -1
  169. package/dist/service/node-control-channel.js.map +0 -1
  170. package/dist/service/node-control-message-service.js.map +0 -1
  171. package/dist/service/node-request-service.js.map +0 -1
  172. package/dist/service/node-run-event-bridge.js.map +0 -1
  173. package/dist/service/node-terminal-channel.js.map +0 -1
  174. package/dist/service/node-workspace-coordinator.js.map +0 -1
  175. package/dist/service/run-attachment-service.js.map +0 -1
  176. package/dist/service/run-domain-state.js.map +0 -1
  177. package/dist/service/run-event-service.js.map +0 -1
  178. package/dist/service/run-workbench-service.js.map +0 -1
  179. package/dist/service/runner-channel-message-service.js.map +0 -1
  180. package/dist/service/runner-interaction-service.js.map +0 -1
  181. package/dist/service/runner-service.js.map +0 -1
  182. package/dist/service/session-catalog-service.js.map +0 -1
  183. package/dist/service/session-command-service.js.map +0 -1
  184. package/dist/service/session-context-service.js.map +0 -1
  185. package/dist/service/session-domain-state.js.map +0 -1
  186. package/dist/service/session-identity-service.js.map +0 -1
  187. package/dist/service/session-lifecycle-service.js.map +0 -1
  188. package/dist/service/session-message-service.js.map +0 -1
  189. package/dist/service/session-presentation-service.js.map +0 -1
  190. package/dist/service/session-query-service.js.map +0 -1
  191. package/dist/service/terminal-relay-state.js.map +0 -1
  192. package/dist/service/terminal-service.js.map +0 -1
  193. package/dist/service/workbench-event-service.js.map +0 -1
  194. package/dist/service/workbench-manifest-service.js.map +0 -1
  195. package/dist/service/workspace-change-service.js.map +0 -1
  196. package/dist/service/workspace-domain-state.js.map +0 -1
  197. package/dist/service/workspace-file-service.js.map +0 -1
  198. package/dist/service/workspace-queue-workbench-service.js.map +0 -1
  199. package/dist/service/workspace-service.js.map +0 -1
  200. package/dist/service/workspace-session-service.js.map +0 -1
  201. package/dist/service/workspace-upload-service.js.map +0 -1
  202. package/dist/service/workspace-watch-service.js.map +0 -1
  203. package/dist/service/workspace-workbench-service.js.map +0 -1
  204. package/dist/service.js.map +0 -1
  205. package/dist/storage.js.map +0 -1
  206. package/dist/terminal.js.map +0 -1
  207. package/dist/util/node-operation-parsers.js.map +0 -1
  208. package/dist/util/runner-native-session-parsers.js.map +0 -1
  209. package/dist/util/secret-environment.js.map +0 -1
  210. package/dist/workspace.js.map +0 -1
@@ -2,6 +2,7 @@ import { removeNativeSession } from '../native-session-history.js';
2
2
  import { isTerminalRunStatus, sessionPage } from '../util/node-operation-parsers.js';
3
3
  export class SessionCatalogService {
4
4
  options;
5
+ rewindQueue = Promise.resolve();
5
6
  constructor(options) {
6
7
  this.options = options;
7
8
  }
@@ -9,7 +10,8 @@ export class SessionCatalogService {
9
10
  return {
10
11
  'session.list': (data) => this.list(record(data)),
11
12
  'session.resume': (data) => this.resume(record(data)),
12
- 'session.remove': (data) => this.remove(record(data))
13
+ 'session.remove': (data) => this.remove(record(data)),
14
+ 'session.rewind': (data) => this.enqueueRewind(record(data))
13
15
  };
14
16
  }
15
17
  async list(input) {
@@ -104,6 +106,65 @@ export class SessionCatalogService {
104
106
  : {})
105
107
  };
106
108
  }
109
+ enqueueRewind(input) {
110
+ const result = this.rewindQueue.then(() => this.rewind(input));
111
+ this.rewindQueue = result.then(() => undefined, () => undefined);
112
+ return result;
113
+ }
114
+ async rewind(input) {
115
+ if (!validRewindId(input.sessionId, 128) ||
116
+ !validRewindId(input.turnId, 128) ||
117
+ (input.position !== 'BEFORE' && input.position !== 'AFTER') ||
118
+ (input.boundary !== null && !validRewindId(input.boundary, 256)))
119
+ throw new Error('SESSION_REWIND_INVALID');
120
+ const source = this.options.runtime.getAgentSession(input.sessionId) ??
121
+ (await this.options.projection.resolve(input.sessionId));
122
+ if (source === undefined)
123
+ throw new Error('SESSION_NOT_FOUND');
124
+ if (source.externalSessionId === null)
125
+ throw new Error('SESSION_REWIND_UNAVAILABLE');
126
+ const presented = this.options.present(source);
127
+ if (!presented.runtime?.capabilities?.includes('session.rewind'))
128
+ throw new Error('SESSION_REWIND_UNAVAILABLE');
129
+ const turn = await this.findTurn(source, input.turnId);
130
+ const expected = input.position === 'BEFORE' ? turn?.rewind?.before : turn?.rewind?.after;
131
+ if (turn === undefined || expected !== input.boundary)
132
+ throw new Error('SESSION_REWIND_TARGET_INVALID');
133
+ const title = rewindTitle(source.customTitle ?? source.runnerTitle ?? '未命名会话', this.options.runtime
134
+ .listAgentSessions()
135
+ .flatMap((candidate) => [candidate.customTitle ?? candidate.runnerTitle].filter(isString)));
136
+ const runner = this.options.runners.require(source.runner);
137
+ const nativeId = await runner.forkNative(source, input.boundary, title);
138
+ const session = this.options.runtime.createAgentSession({
139
+ workspaceId: source.workspaceId,
140
+ runner: source.runner,
141
+ cwd: source.cwd,
142
+ nativeControl: 'MAR_MANAGED',
143
+ ...(nativeId === null ? {} : { externalSessionId: nativeId }),
144
+ ...(source.model === null ? {} : { model: source.model }),
145
+ ...(source.effort === null ? {} : { effort: source.effort }),
146
+ ...(source.access === null ? {} : { access: source.access }),
147
+ title
148
+ });
149
+ if (nativeId !== null)
150
+ runner.rememberManagedNative(session, nativeId);
151
+ this.options.emitSession(session);
152
+ return { session: this.options.present(session) };
153
+ }
154
+ async findTurn(session, turnId) {
155
+ let cursor;
156
+ for (let pageIndex = 0; pageIndex < 100; pageIndex += 1) {
157
+ const page = await this.options.history(session, {
158
+ ...(cursor === undefined ? {} : { cursor }),
159
+ limit: 100
160
+ });
161
+ const turn = page.turns.find((candidate) => candidate.id === turnId);
162
+ if (turn !== undefined || page.nextCursor === null)
163
+ return turn;
164
+ cursor = page.nextCursor;
165
+ }
166
+ throw new Error('SESSION_REWIND_TARGET_INVALID');
167
+ }
107
168
  async remove(input) {
108
169
  if (typeof input.sessionId !== 'string')
109
170
  throw new Error('SESSION_INVALID');
@@ -123,9 +184,11 @@ export class SessionCatalogService {
123
184
  throw new Error('SESSION_ACTIVE');
124
185
  }
125
186
  const nativeIds = this.options.nativeIds(session);
187
+ const runner = this.options.runners.require(session.runner);
126
188
  for (const externalSessionId of nativeIds) {
127
189
  try {
128
- await removeNativeSession(session.runner, session.cwd, externalSessionId);
190
+ if (!(await runner.removeNative(session, externalSessionId)))
191
+ await removeNativeSession(session.runner, session.cwd, externalSessionId);
129
192
  }
130
193
  catch (error) {
131
194
  if (!(error instanceof Error) || error.message !== 'NATIVE_TRANSCRIPT_UNAVAILABLE')
@@ -137,9 +200,25 @@ export class SessionCatalogService {
137
200
  return { deleted: true };
138
201
  }
139
202
  }
203
+ export function rewindTitle(sourceTitle, existingTitles = []) {
204
+ const base = sourceTitle.replace(/ \(Copy \d+\)$/u, '');
205
+ const existing = new Set(existingTitles);
206
+ for (let sequence = 1; sequence < Number.MAX_SAFE_INTEGER; sequence += 1) {
207
+ const suffix = ` (Copy ${sequence})`;
208
+ const candidate = `${base.slice(0, 160 - suffix.length)}${suffix}`;
209
+ if (!existing.has(candidate))
210
+ return candidate;
211
+ }
212
+ throw new Error('SESSION_REWIND_TITLE_UNAVAILABLE');
213
+ }
214
+ function validRewindId(value, maximum) {
215
+ return typeof value === 'string' && value.length > 0 && value.length <= maximum;
216
+ }
217
+ function isString(value) {
218
+ return value !== null;
219
+ }
140
220
  function record(value) {
141
221
  if (value === null || typeof value !== 'object' || Array.isArray(value))
142
222
  return {};
143
223
  return value;
144
224
  }
145
- //# sourceMappingURL=session-catalog-service.js.map
@@ -67,4 +67,3 @@ function record(value) {
67
67
  return {};
68
68
  return value;
69
69
  }
70
- //# sourceMappingURL=session-command-service.js.map
@@ -85,4 +85,3 @@ function sameUsage(left, right) {
85
85
  left.maxTokens === right.maxTokens &&
86
86
  left.percentage === right.percentage);
87
87
  }
88
- //# sourceMappingURL=session-context-service.js.map
@@ -6,4 +6,3 @@ export class SessionDomainState {
6
6
  messageResumeFailures = new Map();
7
7
  resumeFailureDetails = new Map();
8
8
  }
9
- //# sourceMappingURL=session-domain-state.js.map
@@ -84,4 +84,3 @@ export class SessionIdentityService {
84
84
  this.bootstrapIds.clear();
85
85
  }
86
86
  }
87
- //# sourceMappingURL=session-identity-service.js.map
@@ -1,4 +1,4 @@
1
- import { validSessionOption, validSessionTitle } from '../util/node-operation-parsers.js';
1
+ import { validSessionEffort, validSessionOption, validSessionTitle } from '../util/node-operation-parsers.js';
2
2
  import { isPlainRecord } from '../util/node-operation-parsers.js';
3
3
  export class SessionLifecycleService {
4
4
  options;
@@ -68,21 +68,25 @@ export class SessionLifecycleService {
68
68
  (input.externalSessionId !== undefined && typeof input.externalSessionId !== 'string') ||
69
69
  !validSessionTitle(input.title) ||
70
70
  !validSessionOption(input.model) ||
71
- !validSessionOption(input.effort) ||
71
+ !validSessionEffort(input.effort) ||
72
72
  !validSessionOption(input.access))
73
73
  throw new Error('SESSION_INVALID');
74
74
  const database = this.options.database();
75
+ const workspace = database.getWorkspace(input.workspaceId);
76
+ if (workspace === undefined)
77
+ throw new Error('WORKSPACE_NOT_FOUND');
75
78
  const saved = database
76
79
  .getRunnerDefaults()
77
- .find((value) => value.runner === runner.name && this.options.runners.supportsConfiguration(value));
78
- const fallback = runner.defaultConfiguration();
80
+ .find((value) => value.runner === runner.name &&
81
+ this.options.runners.supportsConfiguration(value, workspace));
82
+ const fallback = runner.defaultConfiguration(workspace);
79
83
  const configuration = {
80
84
  runner: runner.name,
81
85
  model: typeof input.model === 'string' ? input.model : (saved?.model ?? fallback.model),
82
86
  effort: typeof input.effort === 'string' ? input.effort : (saved?.effort ?? fallback.effort),
83
87
  access: typeof input.access === 'string' ? input.access : (saved?.access ?? fallback.access)
84
88
  };
85
- if (!this.options.runners.supportsConfiguration(configuration))
89
+ if (!this.options.runners.supportsConfiguration(configuration, workspace))
86
90
  throw new Error('RUNNER_CONFIGURATION_UNSUPPORTED');
87
91
  const session = this.options.runtime.createAgentSession({
88
92
  workspaceId: input.workspaceId,
@@ -107,6 +111,7 @@ export class SessionLifecycleService {
107
111
  if (typeof input.sessionId !== 'string' ||
108
112
  typeof input.model !== 'string' ||
109
113
  typeof input.effort !== 'string' ||
114
+ !validSessionEffort(input.effort) ||
110
115
  typeof input.access !== 'string')
111
116
  throw new Error('SESSION_INVALID');
112
117
  const current = this.options.runtime.getAgentSession(input.sessionId) ??
@@ -119,7 +124,9 @@ export class SessionLifecycleService {
119
124
  effort: input.effort,
120
125
  access: input.access
121
126
  };
122
- if (!this.options.runners.supportsConfiguration(configuration))
127
+ const workspace = this.options.database().getWorkspace(current.workspaceId);
128
+ if (workspace === undefined ||
129
+ !this.options.runners.supportsConfiguration(configuration, workspace))
123
130
  throw new Error('RUNNER_CONFIGURATION_UNSUPPORTED');
124
131
  const session = this.options.runtime.updateAgentSessionConfiguration({
125
132
  sessionId: current.id,
@@ -233,4 +240,3 @@ export class SessionLifecycleService {
233
240
  function record(data) {
234
241
  return data !== null && typeof data === 'object' ? data : {};
235
242
  }
236
- //# sourceMappingURL=session-lifecycle-service.js.map
@@ -155,4 +155,3 @@ function record(value) {
155
155
  return {};
156
156
  return value;
157
157
  }
158
- //# sourceMappingURL=session-message-service.js.map
@@ -34,4 +34,3 @@ export class SessionPresentationService {
34
34
  });
35
35
  }
36
36
  }
37
- //# sourceMappingURL=session-presentation-service.js.map
@@ -75,4 +75,3 @@ function pageInput(input) {
75
75
  function record(value) {
76
76
  return isPlainRecord(value) ? value : {};
77
77
  }
78
- //# sourceMappingURL=session-query-service.js.map
@@ -1,4 +1,3 @@
1
1
  export class TerminalRelayState {
2
2
  attachments = new Map();
3
3
  }
4
- //# sourceMappingURL=terminal-relay-state.js.map
@@ -50,4 +50,3 @@ export class TerminalService {
50
50
  return { attachment, terminal: this.terminalManager.get(attachment.terminalId) };
51
51
  }
52
52
  }
53
- //# sourceMappingURL=terminal-service.js.map
@@ -51,4 +51,3 @@ export class WorkbenchEventService {
51
51
  return this.buffer.size;
52
52
  }
53
53
  }
54
- //# sourceMappingURL=workbench-event-service.js.map
@@ -27,7 +27,7 @@ export declare class WorkbenchManifestService {
27
27
  maxPageSize: number;
28
28
  };
29
29
  runners: readonly {
30
- runner: "codex" | "claude-code";
30
+ runner: "codex" | "claude-code" | "opencode";
31
31
  capabilities: string[];
32
32
  models: {
33
33
  id: string;
@@ -40,14 +40,14 @@ export declare class WorkbenchManifestService {
40
40
  description: string;
41
41
  }[];
42
42
  commands: {
43
+ id: string;
43
44
  available: boolean;
44
- runner: "codex" | "claude-code";
45
+ runner: "codex" | "claude-code" | "opencode";
45
46
  reasonCode: string | null;
46
- id: string;
47
47
  label: string;
48
48
  description: string;
49
49
  inputHint: string;
50
- source: "CODEX_APP_SERVER" | "CLAUDE_AGENT_SDK";
50
+ source: "CODEX_APP_SERVER" | "CLAUDE_AGENT_SDK" | "OPENCODE_SERVER";
51
51
  interaction: "RUNNER_TEXT" | "IMMEDIATE_ACTION" | "TOGGLE" | "VALUE";
52
52
  stateLabel?: string | undefined;
53
53
  }[];
@@ -67,6 +67,7 @@ export declare class WorkbenchManifestService {
67
67
  reasonCode: null;
68
68
  supportsCurrentChanges: boolean;
69
69
  supportsTurnChanges: boolean;
70
+ supportsHistory: boolean;
70
71
  maxDiffBytes: number;
71
72
  };
72
73
  terminal: {
@@ -3,7 +3,8 @@ function revisionFor(capabilities) {
3
3
  platform: capabilities.platform,
4
4
  architecture: capabilities.architecture,
5
5
  codex: capabilities.codex,
6
- claudeCode: capabilities.claudeCode
6
+ claudeCode: capabilities.claudeCode,
7
+ openCode: capabilities.openCode
7
8
  });
8
9
  let hash = 2_166_136_261;
9
10
  for (const character of source)
@@ -50,6 +51,7 @@ export class WorkbenchManifestService {
50
51
  reasonCode: null,
51
52
  supportsCurrentChanges: true,
52
53
  supportsTurnChanges: true,
54
+ supportsHistory: true,
53
55
  maxDiffBytes: 512 * 1024
54
56
  },
55
57
  terminal: {
@@ -66,4 +68,3 @@ export class WorkbenchManifestService {
66
68
  };
67
69
  }
68
70
  }
69
- //# sourceMappingURL=workbench-manifest-service.js.map
@@ -1,3 +1,4 @@
1
+ import { basename, posix } from 'node:path';
1
2
  import { isWorkspaceChangeVisible, listInitializedSubmodulePaths, readCurrentChangesSummary, resolveGitRepository } from '../workspace.js';
2
3
  const CACHE_TTL_MS = 5_000;
3
4
  export class WorkspaceChangeService {
@@ -40,7 +41,7 @@ export class WorkspaceChangeService {
40
41
  .map(({ change }) => change);
41
42
  return {
42
43
  repositoryPath,
43
- repositoryName: repositoryPath === '' ? '根仓库' : repositoryPath,
44
+ repositoryName: repositoryPath === '' ? basename(repository) : posix.basename(repositoryPath),
44
45
  branch: summary.branch,
45
46
  changes
46
47
  };
@@ -83,4 +84,3 @@ export class WorkspaceChangeService {
83
84
  }
84
85
  }
85
86
  }
86
- //# sourceMappingURL=workspace-change-service.js.map
@@ -0,0 +1,14 @@
1
+ import type { WorkspaceContentSearch } from '@myagentroam/protocol';
2
+ import type { NodeWorkspace } from '../database.js';
3
+ import type { WorkspaceFileService } from './workspace-file-service.js';
4
+ export declare class WorkspaceContentSearchService {
5
+ private readonly files;
6
+ private readonly platform;
7
+ private readonly pending;
8
+ constructor(files: WorkspaceFileService, platform?: NodeJS.Platform);
9
+ search(workspace: NodeWorkspace, input: Record<string, unknown>): Promise<WorkspaceContentSearch>;
10
+ private perform;
11
+ private engines;
12
+ private candidates;
13
+ private nativeSearch;
14
+ }