@agents-ensemble/core 0.14.2 → 0.15.0

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 (76) hide show
  1. package/dist/acp/resolve-acp-spawn.d.ts +1 -1
  2. package/dist/acp/resolve-acp-spawn.d.ts.map +1 -1
  3. package/dist/acp/resolve-acp-spawn.js +2 -2
  4. package/dist/acp/resolve-acp-spawn.js.map +1 -1
  5. package/dist/conductor/conductor-session-driver.d.ts +5 -2
  6. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  7. package/dist/conductor/conductor-session-driver.js +6 -4
  8. package/dist/conductor/conductor-session-driver.js.map +1 -1
  9. package/dist/conductor/conductor-session.d.ts +2 -0
  10. package/dist/conductor/conductor-session.d.ts.map +1 -1
  11. package/dist/conductor/conductor-session.js +186 -67
  12. package/dist/conductor/conductor-session.js.map +1 -1
  13. package/dist/conductor/index.d.ts +2 -0
  14. package/dist/conductor/index.d.ts.map +1 -1
  15. package/dist/conductor/index.js +1 -0
  16. package/dist/conductor/index.js.map +1 -1
  17. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -1
  18. package/dist/conductor/pi-conductor-agent.js +18 -1
  19. package/dist/conductor/pi-conductor-agent.js.map +1 -1
  20. package/dist/conductor/session/dispatch-hold-reminder-monitor.d.ts +28 -0
  21. package/dist/conductor/session/dispatch-hold-reminder-monitor.d.ts.map +1 -0
  22. package/dist/conductor/session/dispatch-hold-reminder-monitor.js +88 -0
  23. package/dist/conductor/session/dispatch-hold-reminder-monitor.js.map +1 -0
  24. package/dist/conductor/session/dispatch-hold.d.ts +1 -1
  25. package/dist/conductor/session/dispatch-hold.d.ts.map +1 -1
  26. package/dist/config/defaults.d.ts.map +1 -1
  27. package/dist/config/defaults.js +3 -0
  28. package/dist/config/defaults.js.map +1 -1
  29. package/dist/config/index.d.ts +1 -1
  30. package/dist/config/index.d.ts.map +1 -1
  31. package/dist/config/load-ensemble-config.d.ts +2 -0
  32. package/dist/config/load-ensemble-config.d.ts.map +1 -1
  33. package/dist/config/load-ensemble-config.js +18 -5
  34. package/dist/config/load-ensemble-config.js.map +1 -1
  35. package/dist/config/parse-config.d.ts.map +1 -1
  36. package/dist/config/parse-config.js +12 -0
  37. package/dist/config/parse-config.js.map +1 -1
  38. package/dist/config/types.d.ts +5 -0
  39. package/dist/config/types.d.ts.map +1 -1
  40. package/dist/dispatch/worker-acp-session.d.ts +2 -2
  41. package/dist/dispatch/worker-acp-session.d.ts.map +1 -1
  42. package/dist/dispatch/worker-acp-session.js +1 -1
  43. package/dist/dispatch/worker-acp-session.js.map +1 -1
  44. package/dist/github/github-monitor-cursor.d.ts +10 -10
  45. package/dist/github/github-monitor-cursor.d.ts.map +1 -1
  46. package/dist/github/github-monitor-cursor.js +1 -1
  47. package/dist/github/github-monitor-cursor.js.map +1 -1
  48. package/dist/mcp/load-mcp-config.d.ts +1 -1
  49. package/dist/mcp/load-mcp-config.js +1 -1
  50. package/dist/operator-runtime.d.ts +8 -4
  51. package/dist/operator-runtime.d.ts.map +1 -1
  52. package/dist/operator-runtime.js +4 -2
  53. package/dist/operator-runtime.js.map +1 -1
  54. package/dist/prompt/modules/ensemble/worker-base-module.d.ts.map +1 -1
  55. package/dist/prompt/modules/ensemble/worker-base-module.js +1 -0
  56. package/dist/prompt/modules/ensemble/worker-base-module.js.map +1 -1
  57. package/dist/session/index.d.ts +8 -4
  58. package/dist/session/index.d.ts.map +1 -1
  59. package/dist/session/index.js +4 -2
  60. package/dist/session/index.js.map +1 -1
  61. package/dist/session/open-question-control.d.ts +26 -2
  62. package/dist/session/open-question-control.d.ts.map +1 -1
  63. package/dist/session/open-question-control.js +96 -10
  64. package/dist/session/open-question-control.js.map +1 -1
  65. package/dist/session/session-resume-store.d.ts +119 -0
  66. package/dist/session/session-resume-store.d.ts.map +1 -0
  67. package/dist/session/session-resume-store.js +354 -0
  68. package/dist/session/session-resume-store.js.map +1 -0
  69. package/dist/session/tool-call-snapshot-history.d.ts +1 -1
  70. package/dist/session/tool-call-snapshot-history.js +4 -4
  71. package/dist/session/tool-call-snapshot-history.js.map +1 -1
  72. package/package.json +1 -1
  73. package/dist/session/session-sidecar.d.ts +0 -76
  74. package/dist/session/session-sidecar.d.ts.map +0 -1
  75. package/dist/session/session-sidecar.js +0 -261
  76. package/dist/session/session-sidecar.js.map +0 -1
@@ -1,261 +0,0 @@
1
- import { chmod, mkdir, readdir, readFile, rename, writeFile } from 'node:fs/promises';
2
- import { dirname, join } from 'node:path';
3
- export const SESSION_SIDECAR_VERSION = 1;
4
- export class SessionSidecarNotFoundError extends Error {
5
- conductorAgentId;
6
- path;
7
- code = 'SESSION_SIDECAR_NOT_FOUND';
8
- constructor(conductorAgentId, path) {
9
- super(`Session sidecar not found for resume (agentId=${conductorAgentId}, path=${path})`);
10
- this.conductorAgentId = conductorAgentId;
11
- this.path = path;
12
- this.name = 'SessionSidecarNotFoundError';
13
- }
14
- }
15
- export function sessionSidecarDir(repoRoot) {
16
- return join(repoRoot, '.ensemble', 'sessions');
17
- }
18
- export function sessionSidecarPath(options) {
19
- return join(sessionSidecarDir(options.repoRoot), `${options.conductorAgentId}.json`);
20
- }
21
- export async function loadSessionSidecar(path) {
22
- try {
23
- const raw = await readFile(path, 'utf8');
24
- return parseSessionSidecar(JSON.parse(raw));
25
- }
26
- catch (error) {
27
- if (isEnoent(error))
28
- return undefined;
29
- throw error;
30
- }
31
- }
32
- /** `resumeAgentId` 指定時に sidecar が無い場合は起動失敗とする。 */
33
- export async function requireSessionSidecarForResume(input) {
34
- const path = sessionSidecarPath(input);
35
- const sidecar = await loadSessionSidecar(path);
36
- if (!sidecar) {
37
- throw new SessionSidecarNotFoundError(input.conductorAgentId, path);
38
- }
39
- return sidecar;
40
- }
41
- export async function saveSessionSidecar(path, sidecar) {
42
- const parsed = parseSessionSidecar({
43
- ...sidecar,
44
- updatedAt: Date.now(),
45
- });
46
- const directory = dirname(path);
47
- await mkdir(directory, { recursive: true, mode: 0o700 });
48
- await chmod(directory, 0o700);
49
- const tempPath = `${path}.tmp`;
50
- await writeFile(tempPath, `${JSON.stringify(parsed, null, 2)}\n`, { encoding: 'utf8', mode: 0o600 });
51
- await chmod(tempPath, 0o600);
52
- await rename(tempPath, path);
53
- }
54
- export async function listSessionSidecars(repoRoot) {
55
- const dir = sessionSidecarDir(repoRoot);
56
- let entries;
57
- try {
58
- entries = await readdir(dir);
59
- }
60
- catch (error) {
61
- if (isEnoent(error))
62
- return [];
63
- throw error;
64
- }
65
- const sidecars = [];
66
- for (const entry of entries) {
67
- if (!entry.endsWith('.json') || entry.endsWith('.tmp'))
68
- continue;
69
- const sidecar = await loadSessionSidecar(join(dir, entry));
70
- if (sidecar)
71
- sidecars.push(sidecar);
72
- }
73
- return sidecars;
74
- }
75
- /** 同一 Issue の sidecar のうち `updatedAt` が最新のものを返す。 */
76
- export async function findLatestSessionSidecarForIssue(input) {
77
- const matches = (await listSessionSidecars(input.repoRoot)).filter((sidecar) => sidecar.issueUrl === input.issueUrl &&
78
- sidecar.repoRoot === input.repoRoot);
79
- if (matches.length === 0)
80
- return undefined;
81
- return matches.reduce((latest, sidecar) => sidecar.updatedAt > latest.updatedAt ? sidecar : latest);
82
- }
83
- export function assertSessionSidecarMatches(sidecar, input) {
84
- if (sidecar.conductorAgentId !== input.conductorAgentId) {
85
- throw new Error(`Session sidecar conductorAgentId mismatch: ${sidecar.conductorAgentId} !== ${input.conductorAgentId}`);
86
- }
87
- if (sidecar.issueUrl !== input.issueUrl) {
88
- throw new Error(`Session sidecar issueUrl mismatch: ${sidecar.issueUrl} !== ${input.issueUrl}`);
89
- }
90
- if (sidecar.repoRoot !== input.repoRoot) {
91
- throw new Error(`Session sidecar repoRoot mismatch: ${sidecar.repoRoot} !== ${input.repoRoot}`);
92
- }
93
- if (input.conductorBackend !== undefined &&
94
- (sidecar.conductorBackend ?? 'cursor') !== input.conductorBackend) {
95
- throw new Error(`Session sidecar conductorBackend mismatch: ${sidecar.conductorBackend ?? 'cursor'} !== ${input.conductorBackend}`);
96
- }
97
- if (input.mcpConfigDigest !== undefined) {
98
- if (sidecar.mcpConfigDigest === undefined) {
99
- if (input.mcpConfigConfigured) {
100
- throw new Error('Session sidecar MCP config digest missing; cannot safely resume with MCP configuration.');
101
- }
102
- }
103
- else if (sidecar.mcpConfigDigest !== input.mcpConfigDigest) {
104
- throw new Error(`Session sidecar MCP config digest mismatch: ${sidecar.mcpConfigDigest} !== ${input.mcpConfigDigest}`);
105
- }
106
- }
107
- }
108
- function parseSessionSidecar(value) {
109
- if (!value || typeof value !== 'object') {
110
- throw new Error('Invalid session sidecar: not an object');
111
- }
112
- const record = value;
113
- if (record.version !== SESSION_SIDECAR_VERSION) {
114
- throw new Error(`Unsupported session sidecar version: ${record.version}`);
115
- }
116
- if (typeof record.conductorAgentId !== 'string') {
117
- throw new Error('Invalid session sidecar: conductorAgentId');
118
- }
119
- const conductorBackend = parseConductorBackend(record.conductorBackend);
120
- if (typeof record.issueUrl !== 'string') {
121
- throw new Error('Invalid session sidecar: issueUrl');
122
- }
123
- if (typeof record.repoRoot !== 'string') {
124
- throw new Error('Invalid session sidecar: repoRoot');
125
- }
126
- if (!record.profile || typeof record.profile !== 'object') {
127
- throw new Error('Invalid session sidecar: profile');
128
- }
129
- if (!Array.isArray(record.openQuestions)) {
130
- throw new Error('Invalid session sidecar: openQuestions');
131
- }
132
- if (typeof record.sequence !== 'number') {
133
- throw new Error('Invalid session sidecar: sequence');
134
- }
135
- if (!record.workers || typeof record.workers !== 'object') {
136
- throw new Error('Invalid session sidecar: workers');
137
- }
138
- if (record.mcpConfigDigest !== undefined &&
139
- typeof record.mcpConfigDigest !== 'string') {
140
- throw new Error('Invalid session sidecar: mcpConfigDigest');
141
- }
142
- if (record.lazyWorkers !== undefined &&
143
- typeof record.lazyWorkers !== 'boolean') {
144
- throw new Error('Invalid session sidecar: lazyWorkers');
145
- }
146
- if (record.harnessSocketPath !== undefined &&
147
- (typeof record.harnessSocketPath !== 'string' ||
148
- record.harnessSocketPath.length === 0)) {
149
- throw new Error('Invalid session sidecar: harnessSocketPath');
150
- }
151
- if (record.lifecycle !== undefined &&
152
- record.lifecycle !== 'closed' &&
153
- record.lifecycle !== 'exited' &&
154
- record.lifecycle !== 'interrupted' &&
155
- record.lifecycle !== 'unknown') {
156
- throw new Error('Invalid session sidecar: lifecycle');
157
- }
158
- const updatedAt = typeof record.updatedAt === 'number' ? record.updatedAt : 0;
159
- let githubMonitor;
160
- if (record.githubMonitor && typeof record.githubMonitor === 'object') {
161
- githubMonitor = record.githubMonitor;
162
- }
163
- const workers = {};
164
- for (const [name, entry] of Object.entries(record.workers)) {
165
- if (!entry || typeof entry !== 'object') {
166
- throw new Error(`Invalid session sidecar worker entry: ${name}`);
167
- }
168
- const worker = entry;
169
- if (typeof worker.acpSessionId !== 'string') {
170
- throw new Error(`Invalid session sidecar worker acpSessionId: ${name}`);
171
- }
172
- workers[name] = {
173
- acpSessionId: worker.acpSessionId,
174
- ...(typeof worker.acpCwd === 'string' ? { acpCwd: worker.acpCwd } : {}),
175
- ...(parseAcpSpawnFingerprint(worker.acpSpawn, name)
176
- ? { acpSpawn: parseAcpSpawnFingerprint(worker.acpSpawn, name) }
177
- : {}),
178
- };
179
- }
180
- return {
181
- version: SESSION_SIDECAR_VERSION,
182
- conductorAgentId: record.conductorAgentId,
183
- conductorBackend,
184
- ...(typeof record.lazyWorkers === 'boolean'
185
- ? { lazyWorkers: record.lazyWorkers }
186
- : {}),
187
- ...(typeof record.harnessSocketPath === 'string'
188
- ? { harnessSocketPath: record.harnessSocketPath }
189
- : {}),
190
- issueUrl: record.issueUrl,
191
- repoRoot: record.repoRoot,
192
- profile: record.profile,
193
- ...(typeof record.profilePath === 'string'
194
- ? { profilePath: record.profilePath }
195
- : {}),
196
- openQuestions: record.openQuestions,
197
- sequence: record.sequence,
198
- workers,
199
- ...(githubMonitor ? { githubMonitor } : {}),
200
- ...(typeof record.mcpConfigDigest === 'string'
201
- ? { mcpConfigDigest: record.mcpConfigDigest }
202
- : {}),
203
- ...(record.lifecycle !== undefined
204
- ? { lifecycle: record.lifecycle }
205
- : {}),
206
- updatedAt,
207
- };
208
- }
209
- function parseConductorBackend(value) {
210
- if (value === undefined) {
211
- // Sidecars written before backend selection used Cursor SDK unconditionally.
212
- return 'cursor';
213
- }
214
- if (value === 'cursor' || value === 'pi') {
215
- return value;
216
- }
217
- throw new Error('Invalid session sidecar: conductorBackend');
218
- }
219
- function isEnoent(error) {
220
- return (typeof error === 'object' &&
221
- error !== null &&
222
- 'code' in error &&
223
- error.code === 'ENOENT');
224
- }
225
- function parseAcpSpawnFingerprint(raw, workerName) {
226
- if (raw === undefined || raw === null)
227
- return undefined;
228
- if (!raw || typeof raw !== 'object') {
229
- throw new Error(`Invalid session sidecar worker acpSpawn: ${workerName}`);
230
- }
231
- const record = raw;
232
- if (typeof record.preset !== 'string' || typeof record.command !== 'string') {
233
- throw new Error(`Invalid session sidecar worker acpSpawn: ${workerName}`);
234
- }
235
- if (!Array.isArray(record.args) || record.args.some((arg) => typeof arg !== 'string')) {
236
- throw new Error(`Invalid session sidecar worker acpSpawn args: ${workerName}`);
237
- }
238
- let env;
239
- if (record.env !== undefined) {
240
- if (!record.env || typeof record.env !== 'object' || Array.isArray(record.env)) {
241
- throw new Error(`Invalid session sidecar worker acpSpawn env: ${workerName}`);
242
- }
243
- env = {};
244
- for (const [key, value] of Object.entries(record.env)) {
245
- if (typeof value !== 'string') {
246
- throw new Error(`Invalid session sidecar worker acpSpawn env.${key}: ${workerName}`);
247
- }
248
- env[key] = value;
249
- }
250
- if (Object.keys(env).length === 0) {
251
- env = undefined;
252
- }
253
- }
254
- return {
255
- preset: record.preset,
256
- command: record.command,
257
- args: record.args,
258
- ...(env ? { env } : {}),
259
- };
260
- }
261
- //# sourceMappingURL=session-sidecar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-sidecar.js","sourceRoot":"","sources":["../../src/session/session-sidecar.ts"],"names":[],"mappings":"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"}