@agents-ensemble/core 0.21.0 → 0.22.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 (266) hide show
  1. package/assets/pi/pi-cli-env-wrapper.cmd +28 -0
  2. package/assets/pi/pi-cli-env-wrapper.sh +19 -0
  3. package/assets/pi/settings.json +4 -0
  4. package/dist/acp/acp-preset-bins.d.ts +3 -3
  5. package/dist/acp/acp-preset-bins.d.ts.map +1 -1
  6. package/dist/acp/acp-preset-bins.js +3 -3
  7. package/dist/acp/acp-preset-bins.js.map +1 -1
  8. package/dist/acp/index.d.ts +3 -1
  9. package/dist/acp/index.d.ts.map +1 -1
  10. package/dist/acp/index.js +2 -1
  11. package/dist/acp/index.js.map +1 -1
  12. package/dist/acp/pi-acp-wrapper.d.ts +3 -0
  13. package/dist/acp/pi-acp-wrapper.d.ts.map +1 -0
  14. package/dist/acp/pi-acp-wrapper.js +41 -0
  15. package/dist/acp/pi-acp-wrapper.js.map +1 -0
  16. package/dist/acp/pi-builtin-config.d.ts +10 -0
  17. package/dist/acp/pi-builtin-config.d.ts.map +1 -0
  18. package/dist/acp/pi-builtin-config.js +36 -0
  19. package/dist/acp/pi-builtin-config.js.map +1 -0
  20. package/dist/acp/pi-runtime.d.ts +23 -0
  21. package/dist/acp/pi-runtime.d.ts.map +1 -0
  22. package/dist/acp/pi-runtime.js +160 -0
  23. package/dist/acp/pi-runtime.js.map +1 -0
  24. package/dist/acp/pi-session-map.d.ts +36 -0
  25. package/dist/acp/pi-session-map.d.ts.map +1 -0
  26. package/dist/acp/pi-session-map.js +266 -0
  27. package/dist/acp/pi-session-map.js.map +1 -0
  28. package/dist/acp/resolve-acp-spawn.d.ts +9 -3
  29. package/dist/acp/resolve-acp-spawn.d.ts.map +1 -1
  30. package/dist/acp/resolve-acp-spawn.js +41 -9
  31. package/dist/acp/resolve-acp-spawn.js.map +1 -1
  32. package/dist/acp/resolve-bundled-acp-bin.d.ts +2 -2
  33. package/dist/acp/resolve-bundled-acp-bin.d.ts.map +1 -1
  34. package/dist/acp/resolve-bundled-acp-bin.js +4 -4
  35. package/dist/acp/resolve-bundled-acp-bin.js.map +1 -1
  36. package/dist/acp/validate-acp-preset-prerequisites.d.ts +1 -1
  37. package/dist/acp/validate-acp-preset-prerequisites.d.ts.map +1 -1
  38. package/dist/acp/validate-acp-preset-prerequisites.js +30 -10
  39. package/dist/acp/validate-acp-preset-prerequisites.js.map +1 -1
  40. package/dist/conductor/conductor-agent.d.ts +15 -3
  41. package/dist/conductor/conductor-agent.d.ts.map +1 -1
  42. package/dist/conductor/conductor-auth.d.ts +2 -3
  43. package/dist/conductor/conductor-auth.d.ts.map +1 -1
  44. package/dist/conductor/conductor-auth.js +5 -2
  45. package/dist/conductor/conductor-auth.js.map +1 -1
  46. package/dist/conductor/conductor-dispatch-lifecycle.d.ts +85 -0
  47. package/dist/conductor/conductor-dispatch-lifecycle.d.ts.map +1 -0
  48. package/dist/conductor/conductor-dispatch-lifecycle.js +190 -0
  49. package/dist/conductor/conductor-dispatch-lifecycle.js.map +1 -0
  50. package/dist/conductor/conductor-history.d.ts +6 -0
  51. package/dist/conductor/conductor-history.d.ts.map +1 -1
  52. package/dist/conductor/conductor-history.js +11 -6
  53. package/dist/conductor/conductor-history.js.map +1 -1
  54. package/dist/conductor/conductor-path-safety.d.ts +23 -0
  55. package/dist/conductor/conductor-path-safety.d.ts.map +1 -0
  56. package/dist/conductor/conductor-path-safety.js +319 -0
  57. package/dist/conductor/conductor-path-safety.js.map +1 -0
  58. package/dist/conductor/conductor-pi-auth.d.ts +57 -2
  59. package/dist/conductor/conductor-pi-auth.d.ts.map +1 -1
  60. package/dist/conductor/conductor-pi-auth.js +718 -40
  61. package/dist/conductor/conductor-pi-auth.js.map +1 -1
  62. package/dist/conductor/conductor-recovery-inbox.d.ts +73 -0
  63. package/dist/conductor/conductor-recovery-inbox.d.ts.map +1 -0
  64. package/dist/conductor/conductor-recovery-inbox.js +181 -0
  65. package/dist/conductor/conductor-recovery-inbox.js.map +1 -0
  66. package/dist/conductor/conductor-send-reconnect.d.ts +27 -5
  67. package/dist/conductor/conductor-send-reconnect.d.ts.map +1 -1
  68. package/dist/conductor/conductor-send-reconnect.js +88 -39
  69. package/dist/conductor/conductor-send-reconnect.js.map +1 -1
  70. package/dist/conductor/conductor-session-driver.d.ts +32 -7
  71. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  72. package/dist/conductor/conductor-session-driver.js +474 -233
  73. package/dist/conductor/conductor-session-driver.js.map +1 -1
  74. package/dist/conductor/conductor-session.d.ts +2 -0
  75. package/dist/conductor/conductor-session.d.ts.map +1 -1
  76. package/dist/conductor/conductor-session.js +404 -156
  77. package/dist/conductor/conductor-session.js.map +1 -1
  78. package/dist/conductor/conductor-setup.d.ts +30 -0
  79. package/dist/conductor/conductor-setup.d.ts.map +1 -0
  80. package/dist/conductor/conductor-setup.js +243 -0
  81. package/dist/conductor/conductor-setup.js.map +1 -0
  82. package/dist/conductor/cursor-bootstrap-state.d.ts +9 -0
  83. package/dist/conductor/cursor-bootstrap-state.d.ts.map +1 -0
  84. package/dist/conductor/cursor-bootstrap-state.js +11 -0
  85. package/dist/conductor/cursor-bootstrap-state.js.map +1 -0
  86. package/dist/conductor/cursor-run-snapshots.d.ts +30 -0
  87. package/dist/conductor/cursor-run-snapshots.d.ts.map +1 -0
  88. package/dist/conductor/cursor-run-snapshots.js +120 -0
  89. package/dist/conductor/cursor-run-snapshots.js.map +1 -0
  90. package/dist/conductor/index.d.ts +15 -6
  91. package/dist/conductor/index.d.ts.map +1 -1
  92. package/dist/conductor/index.js +8 -4
  93. package/dist/conductor/index.js.map +1 -1
  94. package/dist/conductor/operator-command.d.ts +1 -1
  95. package/dist/conductor/operator-command.js +1 -1
  96. package/dist/conductor/operator-command.js.map +1 -1
  97. package/dist/conductor/operator-input-binding.d.ts +12 -0
  98. package/dist/conductor/operator-input-binding.d.ts.map +1 -1
  99. package/dist/conductor/pi-auth-recovery-snapshot-store.d.ts +4 -1
  100. package/dist/conductor/pi-auth-recovery-snapshot-store.d.ts.map +1 -1
  101. package/dist/conductor/pi-auth-recovery-snapshot-store.js +4 -1
  102. package/dist/conductor/pi-auth-recovery-snapshot-store.js.map +1 -1
  103. package/dist/conductor/pi-conductor-agent.d.ts +6 -3
  104. package/dist/conductor/pi-conductor-agent.d.ts.map +1 -1
  105. package/dist/conductor/pi-conductor-agent.js +272 -53
  106. package/dist/conductor/pi-conductor-agent.js.map +1 -1
  107. package/dist/conductor/pi-conductor-session-file.d.ts +13 -0
  108. package/dist/conductor/pi-conductor-session-file.d.ts.map +1 -0
  109. package/dist/conductor/pi-conductor-session-file.js +21 -0
  110. package/dist/conductor/pi-conductor-session-file.js.map +1 -0
  111. package/dist/conductor/pi-resource-loader.d.ts +6 -0
  112. package/dist/conductor/pi-resource-loader.d.ts.map +1 -1
  113. package/dist/conductor/pi-resource-loader.js +26 -12
  114. package/dist/conductor/pi-resource-loader.js.map +1 -1
  115. package/dist/conductor/pi-user-root-lock.d.ts +8 -0
  116. package/dist/conductor/pi-user-root-lock.d.ts.map +1 -0
  117. package/dist/conductor/pi-user-root-lock.js +53 -0
  118. package/dist/conductor/pi-user-root-lock.js.map +1 -0
  119. package/dist/conductor/recovery-inbox-command.d.ts +29 -0
  120. package/dist/conductor/recovery-inbox-command.d.ts.map +1 -0
  121. package/dist/conductor/recovery-inbox-command.js +248 -0
  122. package/dist/conductor/recovery-inbox-command.js.map +1 -0
  123. package/dist/conductor/session/events/session-event.d.ts +15 -2
  124. package/dist/conductor/session/events/session-event.d.ts.map +1 -1
  125. package/dist/conductor/session/events/session-log-event-groups.d.ts +1 -1
  126. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  127. package/dist/conductor/session/events/session-log-event-groups.js +1 -0
  128. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  129. package/dist/conductor/session/events/session-log-event.d.ts +4 -0
  130. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  131. package/dist/conductor/session/format-session-event.js +25 -4
  132. package/dist/conductor/session/format-session-event.js.map +1 -1
  133. package/dist/conductor/session/select-dispatch-batch.d.ts +2 -0
  134. package/dist/conductor/session/select-dispatch-batch.d.ts.map +1 -1
  135. package/dist/conductor/session/select-dispatch-batch.js +31 -2
  136. package/dist/conductor/session/select-dispatch-batch.js.map +1 -1
  137. package/dist/conductor/session/session-event-queue.d.ts +5 -0
  138. package/dist/conductor/session/session-event-queue.d.ts.map +1 -1
  139. package/dist/conductor/session/session-event-queue.js +41 -4
  140. package/dist/conductor/session/session-event-queue.js.map +1 -1
  141. package/dist/conductor/session/session-event.d.ts +1 -1
  142. package/dist/conductor/session/session-event.d.ts.map +1 -1
  143. package/dist/conductor/session-policy.d.ts.map +1 -1
  144. package/dist/conductor/session-policy.js +4 -2
  145. package/dist/conductor/session-policy.js.map +1 -1
  146. package/dist/conductor/submit-operator-input.d.ts +3 -0
  147. package/dist/conductor/submit-operator-input.d.ts.map +1 -1
  148. package/dist/conductor/submit-operator-input.js +21 -0
  149. package/dist/conductor/submit-operator-input.js.map +1 -1
  150. package/dist/config/deep-merge.d.ts.map +1 -1
  151. package/dist/config/deep-merge.js +13 -3
  152. package/dist/config/deep-merge.js.map +1 -1
  153. package/dist/config/defaults.d.ts.map +1 -1
  154. package/dist/config/defaults.js +1 -1
  155. package/dist/config/defaults.js.map +1 -1
  156. package/dist/config/doctor-settings.d.ts +59 -0
  157. package/dist/config/doctor-settings.d.ts.map +1 -0
  158. package/dist/config/doctor-settings.js +343 -0
  159. package/dist/config/doctor-settings.js.map +1 -0
  160. package/dist/config/ensemble-config-digest.d.ts +2 -4
  161. package/dist/config/ensemble-config-digest.d.ts.map +1 -1
  162. package/dist/config/ensemble-config-digest.js +2 -4
  163. package/dist/config/ensemble-config-digest.js.map +1 -1
  164. package/dist/config/index.d.ts +3 -1
  165. package/dist/config/index.d.ts.map +1 -1
  166. package/dist/config/index.js +1 -0
  167. package/dist/config/index.js.map +1 -1
  168. package/dist/config/load-ensemble-config.d.ts.map +1 -1
  169. package/dist/config/load-ensemble-config.js +8 -1
  170. package/dist/config/load-ensemble-config.js.map +1 -1
  171. package/dist/config/parse-config.d.ts.map +1 -1
  172. package/dist/config/parse-config.js +34 -14
  173. package/dist/config/parse-config.js.map +1 -1
  174. package/dist/config/resolve-settings.d.ts +3 -1
  175. package/dist/config/resolve-settings.d.ts.map +1 -1
  176. package/dist/config/resolve-settings.js +7 -4
  177. package/dist/config/resolve-settings.js.map +1 -1
  178. package/dist/config/types.d.ts +14 -5
  179. package/dist/config/types.d.ts.map +1 -1
  180. package/dist/dispatch/attach-worker.js +1 -1
  181. package/dist/dispatch/attach-worker.js.map +1 -1
  182. package/dist/dispatch/worker-acp-session.d.ts +21 -3
  183. package/dist/dispatch/worker-acp-session.d.ts.map +1 -1
  184. package/dist/dispatch/worker-acp-session.js +50 -13
  185. package/dist/dispatch/worker-acp-session.js.map +1 -1
  186. package/dist/ensemble-paths.d.ts +19 -19
  187. package/dist/ensemble-paths.d.ts.map +1 -1
  188. package/dist/ensemble-paths.js +40 -22
  189. package/dist/ensemble-paths.js.map +1 -1
  190. package/dist/issue/resolve-issue-url.d.ts +4 -0
  191. package/dist/issue/resolve-issue-url.d.ts.map +1 -1
  192. package/dist/issue/resolve-issue-url.js +2 -2
  193. package/dist/issue/resolve-issue-url.js.map +1 -1
  194. package/dist/operator-runtime.d.ts +17 -4
  195. package/dist/operator-runtime.d.ts.map +1 -1
  196. package/dist/operator-runtime.js +12 -3
  197. package/dist/operator-runtime.js.map +1 -1
  198. package/dist/profile/types.d.ts +4 -0
  199. package/dist/profile/types.d.ts.map +1 -1
  200. package/dist/profile/types.js +29 -12
  201. package/dist/profile/types.js.map +1 -1
  202. package/dist/representation/escape-terminal-control-characters.d.ts +9 -0
  203. package/dist/representation/escape-terminal-control-characters.d.ts.map +1 -0
  204. package/dist/representation/escape-terminal-control-characters.js +34 -0
  205. package/dist/representation/escape-terminal-control-characters.js.map +1 -0
  206. package/dist/representation/index.d.ts +1 -0
  207. package/dist/representation/index.d.ts.map +1 -1
  208. package/dist/representation/index.js +1 -0
  209. package/dist/representation/index.js.map +1 -1
  210. package/dist/runtime/types.d.ts +9 -0
  211. package/dist/runtime/types.d.ts.map +1 -1
  212. package/dist/runtime/worker-runtime.d.ts +14 -1
  213. package/dist/runtime/worker-runtime.d.ts.map +1 -1
  214. package/dist/runtime/worker-runtime.js +197 -50
  215. package/dist/runtime/worker-runtime.js.map +1 -1
  216. package/dist/runtime/worker-session.d.ts +2 -1
  217. package/dist/runtime/worker-session.d.ts.map +1 -1
  218. package/dist/runtime/worker-session.js +1 -0
  219. package/dist/runtime/worker-session.js.map +1 -1
  220. package/dist/session/export-session-bundle.d.ts +77 -0
  221. package/dist/session/export-session-bundle.d.ts.map +1 -0
  222. package/dist/session/export-session-bundle.js +640 -0
  223. package/dist/session/export-session-bundle.js.map +1 -0
  224. package/dist/session/index.d.ts +4 -3
  225. package/dist/session/index.d.ts.map +1 -1
  226. package/dist/session/index.js +2 -1
  227. package/dist/session/index.js.map +1 -1
  228. package/dist/session/open-question-control.d.ts +9 -0
  229. package/dist/session/open-question-control.d.ts.map +1 -1
  230. package/dist/session/open-question-control.js +26 -1
  231. package/dist/session/open-question-control.js.map +1 -1
  232. package/dist/session/open-questions-store.d.ts +1 -1
  233. package/dist/session/open-questions-store.d.ts.map +1 -1
  234. package/dist/session/open-questions-store.js +3 -6
  235. package/dist/session/open-questions-store.js.map +1 -1
  236. package/dist/session/persisted-file.d.ts +5 -0
  237. package/dist/session/persisted-file.d.ts.map +1 -0
  238. package/dist/session/persisted-file.js +56 -0
  239. package/dist/session/persisted-file.js.map +1 -0
  240. package/dist/session/session-resume-store.d.ts +77 -10
  241. package/dist/session/session-resume-store.d.ts.map +1 -1
  242. package/dist/session/session-resume-store.js +346 -83
  243. package/dist/session/session-resume-store.js.map +1 -1
  244. package/dist/session/session-snapshot-paths.d.ts +7 -1
  245. package/dist/session/session-snapshot-paths.d.ts.map +1 -1
  246. package/dist/session/session-snapshot-paths.js +29 -26
  247. package/dist/session/session-snapshot-paths.js.map +1 -1
  248. package/dist/session/session-state-store.d.ts +2 -2
  249. package/dist/session/session-state-store.d.ts.map +1 -1
  250. package/dist/session/session-state-store.js +5 -16
  251. package/dist/session/session-state-store.js.map +1 -1
  252. package/dist/session/tool-call-snapshot-history.d.ts +12 -1
  253. package/dist/session/tool-call-snapshot-history.d.ts.map +1 -1
  254. package/dist/session/tool-call-snapshot-history.js +75 -70
  255. package/dist/session/tool-call-snapshot-history.js.map +1 -1
  256. package/dist/session/worker-session-history.d.ts +13 -1
  257. package/dist/session/worker-session-history.d.ts.map +1 -1
  258. package/dist/session/worker-session-history.js +171 -50
  259. package/dist/session/worker-session-history.js.map +1 -1
  260. package/dist/workspace/index.d.ts +1 -1
  261. package/dist/workspace/index.d.ts.map +1 -1
  262. package/dist/worktree/worktree.d.ts +6 -1
  263. package/dist/worktree/worktree.d.ts.map +1 -1
  264. package/dist/worktree/worktree.js +123 -2
  265. package/dist/worktree/worktree.js.map +1 -1
  266. package/package.json +9 -4
@@ -0,0 +1,640 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { constants } from 'node:fs';
3
+ import { chmod, lstat, mkdir, open, rm, unlink, } from 'node:fs/promises';
4
+ import { dirname, join, resolve, sep } from 'node:path';
5
+ import { Transform } from 'node:stream';
6
+ import { pipeline } from 'node:stream/promises';
7
+ import { findPiConductorSessionFile } from '../conductor/pi-conductor-session-file.js';
8
+ import { readCursorConductorRunSnapshots } from '../conductor/cursor-run-snapshots.js';
9
+ import { resolveEnsemblePaths, } from '../ensemble-paths.js';
10
+ import { findSessionResumeStoreBySelector, harnessPhaseFromLegacyLifecycle, } from './session-resume-store.js';
11
+ import { sessionSnapshotPaths } from './session-snapshot-paths.js';
12
+ import { getWorkerSessionHistoryReaderSupport, readWorkerSessionHistory, } from './worker-session-history.js';
13
+ import { toolCallSnapshotHistoryReadPaths } from './tool-call-snapshot-history.js';
14
+ class SessionBundleSourceError extends Error {
15
+ kind;
16
+ constructor(kind) {
17
+ super(`Session bundle source could not be copied (${kind}).`);
18
+ this.kind = kind;
19
+ this.name = 'SessionBundleSourceError';
20
+ }
21
+ }
22
+ /** Collect saved session data into a new bundle without modifying sources. */
23
+ export async function exportSessionBundle(input) {
24
+ const repoRoot = resolve(input.repoRoot);
25
+ const conductorAgentId = requireNonEmpty(input.conductorAgentId, 'conductorAgentId');
26
+ const outputDirectory = resolve(input.outputDirectory);
27
+ if (!input.ensembleVersion.trim() ||
28
+ !input.cliVersion.trim()) {
29
+ throw new Error('ensembleVersion and cliVersion must be non-empty.');
30
+ }
31
+ const located = await findSessionResumeStoreBySelector(repoRoot, {
32
+ githubRepo: input.githubRepo,
33
+ issueUrl: input.issueUrl,
34
+ conductorAgentId,
35
+ });
36
+ if (!located) {
37
+ throw new Error(`No saved session found for ${conductorAgentId}.`);
38
+ }
39
+ await createNewBundleDirectory(outputDirectory);
40
+ try {
41
+ return await writeSessionBundle({
42
+ input,
43
+ repoRoot,
44
+ conductorAgentId,
45
+ outputDirectory,
46
+ located,
47
+ });
48
+ }
49
+ catch (error) {
50
+ await rm(outputDirectory, { recursive: true, force: true }).catch(() => { });
51
+ throw error;
52
+ }
53
+ }
54
+ async function writeSessionBundle(input) {
55
+ const { input: options, repoRoot, conductorAgentId, outputDirectory, located } = input;
56
+ const resumeStore = located.resumeStore;
57
+ const paths = resolveEnsemblePaths({ repoRoot });
58
+ const files = [];
59
+ const sources = [];
60
+ const warnings = [];
61
+ const exportedAt = (options.now?.() ?? new Date()).toISOString();
62
+ const backend = resumeStore.conductorBackend ?? 'cursor';
63
+ const resumeCopy = await copyRawSource({
64
+ id: 'session.resumeStore',
65
+ sourcePath: located.path,
66
+ bundlePath: 'session/session-resume-store.json',
67
+ outputDirectory,
68
+ required: true,
69
+ files,
70
+ sources,
71
+ warnings,
72
+ });
73
+ if (!resumeCopy) {
74
+ throw new Error('The saved SessionResumeStore could not be copied.');
75
+ }
76
+ const harnessPhase = resumeStore.harnessPhase ??
77
+ harnessPhaseFromLegacyLifecycle(resumeStore.lifecycle);
78
+ if (harnessPhase === 'running' || harnessPhase === 'idle') {
79
+ warnings.push(`この session の harness は稼働中です(phase: ${harnessPhase})。export は読み取り専用の best-effort snapshot で、複数ファイルが同じ時点の内容であることは保証しません。`);
80
+ }
81
+ if (backend === 'pi') {
82
+ await exportPiConductorTranscript({
83
+ repoRoot,
84
+ resumeStore,
85
+ conductorAgentId,
86
+ outputDirectory,
87
+ files,
88
+ sources,
89
+ warnings,
90
+ });
91
+ }
92
+ else {
93
+ await exportCursorConductorRuns({
94
+ conductorAgentId,
95
+ cwd: resumeStore.conductorCwd ?? resumeStore.repoRoot,
96
+ outputDirectory,
97
+ files,
98
+ sources,
99
+ warnings,
100
+ });
101
+ }
102
+ const workerFiles = [];
103
+ const profileWorkers = new Map(resumeStore.profile.workers.map((worker) => [worker.name, worker.kind]));
104
+ const workers = Object.entries(resumeStore.workers).sort(([left], [right]) => left.localeCompare(right));
105
+ for (const [index, [name, worker]] of workers.entries()) {
106
+ const support = getWorkerSessionHistoryReaderSupport(worker.acpSpawn?.preset);
107
+ const workerPath = workerBundlePath(name, index);
108
+ let history;
109
+ try {
110
+ history = await readWorkerSessionHistory({
111
+ repoRoot,
112
+ conductorAgentId,
113
+ workerName: name,
114
+ githubRepo: options.githubRepo,
115
+ issueUrl: options.issueUrl,
116
+ includeSourceFiles: true,
117
+ });
118
+ }
119
+ catch {
120
+ history = {
121
+ conductorAgentId,
122
+ worker: name,
123
+ preset: worker.acpSpawn?.preset ?? null,
124
+ reader: support.reader,
125
+ status: 'unavailable',
126
+ reason: 'Worker transcript reader failed unexpectedly.',
127
+ messages: [],
128
+ sourceFiles: [],
129
+ };
130
+ warnings.push(`Worker「${name}」の transcript reader が予期せず失敗しました。結果 JSON に理由を記録しました。`);
131
+ }
132
+ const workerFile = await writeJsonPayload({
133
+ outputDirectory,
134
+ path: workerPath,
135
+ value: history,
136
+ sourcePaths: history.sourceFiles ?? [],
137
+ });
138
+ files.push(workerFile);
139
+ sources.push({
140
+ id: `worker.${name}`,
141
+ status: sourceStatusFromWorkerHistory(history),
142
+ sourcePaths: history.sourceFiles ?? [],
143
+ bundlePaths: [workerPath],
144
+ ...(history.reason ? { reason: history.reason } : {}),
145
+ });
146
+ if (history.status !== 'supported') {
147
+ warnings.push(`Worker「${name}」の履歴は ${history.status} です。詳細は ${workerPath} を確認してください。`);
148
+ }
149
+ workerFiles.push({
150
+ name,
151
+ kind: profileWorkers.get(name) ?? name,
152
+ preset: worker.acpSpawn?.preset ?? null,
153
+ reader: support.reader ?? null,
154
+ acpSessionId: worker.acpSessionId,
155
+ acpCwd: worker.acpCwd ?? null,
156
+ bundlePath: workerPath,
157
+ });
158
+ }
159
+ await exportSnapshotFile({
160
+ id: 'harness.sessionState',
161
+ candidates: sessionSnapshotPaths(repoRoot, located, 'session-state'),
162
+ outputDirectory,
163
+ bundlePath: 'harness/session-state.yaml',
164
+ files,
165
+ sources,
166
+ warnings,
167
+ });
168
+ await exportSnapshotFile({
169
+ id: 'harness.openQuestions',
170
+ candidates: sessionSnapshotPaths(repoRoot, located, 'open-questions'),
171
+ outputDirectory,
172
+ bundlePath: 'harness/open-questions.yaml',
173
+ files,
174
+ sources,
175
+ warnings,
176
+ });
177
+ await exportToolCallHistory({
178
+ repoRoot,
179
+ conductorAgentId,
180
+ issueUrl: resumeStore.issueUrl,
181
+ include: options.includeToolCalls ?? false,
182
+ outputDirectory,
183
+ files,
184
+ sources,
185
+ warnings,
186
+ });
187
+ await exportOptionalInput({
188
+ id: 'input.summary',
189
+ sourcePath: options.summaryPath,
190
+ bundlePath: 'inputs/session-summary.json',
191
+ outputDirectory,
192
+ files,
193
+ sources,
194
+ warnings,
195
+ });
196
+ await exportOptionalInput({
197
+ id: 'input.harnessLog',
198
+ sourcePath: options.harnessLogPath,
199
+ bundlePath: 'inputs/harness.log',
200
+ outputDirectory,
201
+ files,
202
+ sources,
203
+ warnings,
204
+ });
205
+ const manifest = {
206
+ schemaVersion: 1,
207
+ exportedAt,
208
+ versions: {
209
+ ensemble: options.ensembleVersion,
210
+ cli: options.cliVersion,
211
+ },
212
+ session: {
213
+ conductorAgentId: resumeStore.conductorAgentId,
214
+ issueUrl: resumeStore.issueUrl,
215
+ repoRoot: resumeStore.repoRoot,
216
+ conductorCwd: resumeStore.conductorCwd ?? resumeStore.repoRoot,
217
+ backend,
218
+ ...(resumeStore.createdHarnessCliVersion
219
+ ? { createdHarnessCliVersion: resumeStore.createdHarnessCliVersion }
220
+ : {}),
221
+ lifecycle: resumeStore.lifecycle ?? 'unknown',
222
+ harnessPhase,
223
+ updatedAt: resumeStore.updatedAt,
224
+ resumeStoreLocation: located.location,
225
+ workers: workerFiles,
226
+ },
227
+ files,
228
+ sources,
229
+ warnings,
230
+ };
231
+ const manifestPath = join(outputDirectory, 'manifest.json');
232
+ await writeBundleJsonFile(manifestPath, manifest);
233
+ return {
234
+ status: warnings.length === 0 ? 'complete' : 'partial',
235
+ outputDirectory,
236
+ manifestPath,
237
+ fileCount: files.length,
238
+ warnings,
239
+ manifest,
240
+ };
241
+ }
242
+ async function exportPiConductorTranscript(input) {
243
+ const cwd = input.resumeStore.conductorCwd ?? input.resumeStore.repoRoot;
244
+ let location;
245
+ try {
246
+ location = findPiConductorSessionFile({
247
+ conductorAgentId: input.conductorAgentId,
248
+ cwd,
249
+ repoRoot: input.repoRoot,
250
+ issueUrl: input.resumeStore.issueUrl,
251
+ resumeCwds: [
252
+ input.resumeStore.conductorCwd,
253
+ input.resumeStore.repoRoot,
254
+ ].filter((savedCwd) => Boolean(savedCwd)),
255
+ });
256
+ }
257
+ catch {
258
+ location = undefined;
259
+ }
260
+ if (!location) {
261
+ const reason = 'Pi transcript を保存先から解決できませんでした。';
262
+ input.sources.push({
263
+ id: 'conductor.piTranscript',
264
+ status: 'unavailable',
265
+ sourcePaths: [],
266
+ bundlePaths: [],
267
+ reason,
268
+ });
269
+ input.warnings.push(reason);
270
+ return;
271
+ }
272
+ await copyRawSource({
273
+ id: 'conductor.piTranscript',
274
+ sourcePath: location.sessionFile,
275
+ bundlePath: 'conductor/pi-transcript.jsonl',
276
+ outputDirectory: input.outputDirectory,
277
+ raceSensitive: true,
278
+ files: input.files,
279
+ sources: input.sources,
280
+ warnings: input.warnings,
281
+ });
282
+ }
283
+ async function exportCursorConductorRuns(input) {
284
+ let snapshot;
285
+ try {
286
+ snapshot = await readCursorConductorRunSnapshots({
287
+ conductorAgentId: input.conductorAgentId,
288
+ cwd: input.cwd,
289
+ });
290
+ }
291
+ catch {
292
+ snapshot = {
293
+ status: 'unavailable',
294
+ runs: [],
295
+ warnings: ['Cursor local run snapshot を取得できませんでした。'],
296
+ };
297
+ }
298
+ const path = 'conductor/cursor-runs.json';
299
+ const file = await writeJsonPayload({
300
+ outputDirectory: input.outputDirectory,
301
+ path,
302
+ value: snapshot,
303
+ });
304
+ input.files.push(file);
305
+ input.sources.push({
306
+ id: 'conductor.cursorRuns',
307
+ status: snapshot.status,
308
+ sourcePaths: [],
309
+ bundlePaths: [path],
310
+ ...(snapshot.status === 'unavailable'
311
+ ? { reason: 'Cursor SDK から保存 run を取得できませんでした。' }
312
+ : {}),
313
+ });
314
+ input.warnings.push(...snapshot.warnings);
315
+ }
316
+ async function exportSnapshotFile(input) {
317
+ const located = await locateFirstRegularFile(input.candidates);
318
+ input.warnings.push(...located.warnings);
319
+ if (!located.path) {
320
+ const reason = located.reason ?? '保存ファイルが見つかりません。';
321
+ input.sources.push({
322
+ id: input.id,
323
+ status: 'unavailable',
324
+ sourcePaths: input.candidates,
325
+ bundlePaths: [],
326
+ reason,
327
+ });
328
+ input.warnings.push(`${input.id}: ${reason}`);
329
+ return;
330
+ }
331
+ await copyRawSource({
332
+ id: input.id,
333
+ sourcePath: located.path,
334
+ bundlePath: input.bundlePath,
335
+ outputDirectory: input.outputDirectory,
336
+ files: input.files,
337
+ sources: input.sources,
338
+ warnings: input.warnings,
339
+ });
340
+ }
341
+ async function exportToolCallHistory(input) {
342
+ if (!input.include) {
343
+ input.sources.push({
344
+ id: 'harness.toolCallSnapshots',
345
+ status: 'not-requested',
346
+ sourcePaths: [],
347
+ bundlePaths: [],
348
+ });
349
+ return;
350
+ }
351
+ await exportSnapshotFile({
352
+ id: 'harness.toolCallSnapshots',
353
+ candidates: toolCallSnapshotHistoryReadPaths({
354
+ repoRoot: input.repoRoot,
355
+ conductorAgentId: input.conductorAgentId,
356
+ issueUrl: input.issueUrl,
357
+ }),
358
+ outputDirectory: input.outputDirectory,
359
+ bundlePath: 'harness/session.tool-calls',
360
+ files: input.files,
361
+ sources: input.sources,
362
+ warnings: input.warnings,
363
+ });
364
+ }
365
+ async function exportOptionalInput(input) {
366
+ if (input.sourcePath === undefined) {
367
+ input.sources.push({
368
+ id: input.id,
369
+ status: 'not-requested',
370
+ sourcePaths: [],
371
+ bundlePaths: [],
372
+ });
373
+ return;
374
+ }
375
+ const sourcePath = resolve(input.sourcePath);
376
+ await copyRawSource({
377
+ id: input.id,
378
+ sourcePath,
379
+ bundlePath: input.bundlePath,
380
+ outputDirectory: input.outputDirectory,
381
+ files: input.files,
382
+ sources: input.sources,
383
+ warnings: input.warnings,
384
+ });
385
+ }
386
+ async function copyRawSource(input) {
387
+ let copied;
388
+ try {
389
+ copied = await copyRegularFile(input.sourcePath, bundleFilePath(input.outputDirectory, input.bundlePath));
390
+ }
391
+ catch (error) {
392
+ const reason = sourceCopyFailureReason(error);
393
+ if (input.required) {
394
+ throw new Error(`Required SessionResumeStore copy failed: ${reason}`);
395
+ }
396
+ input.sources.push({
397
+ id: input.id,
398
+ status: 'unavailable',
399
+ sourcePaths: [input.sourcePath],
400
+ bundlePaths: [],
401
+ reason,
402
+ });
403
+ input.warnings.push(`${input.id}: ${reason}`);
404
+ return undefined;
405
+ }
406
+ input.files.push({
407
+ path: input.bundlePath,
408
+ kind: 'raw',
409
+ sizeBytes: copied.sizeBytes,
410
+ sha256: copied.sha256,
411
+ sourcePaths: [input.sourcePath],
412
+ });
413
+ input.sources.push({
414
+ id: input.id,
415
+ status: copied.sourceChangedDuringCopy ? 'partial' : 'copied',
416
+ sourcePaths: [input.sourcePath],
417
+ bundlePaths: [input.bundlePath],
418
+ ...(copied.sourceChangedDuringCopy
419
+ ? { reason: 'source changed while the copy was in progress' }
420
+ : {}),
421
+ });
422
+ if (copied.sourceChangedDuringCopy) {
423
+ input.warnings.push(`${input.id}: コピー中に source が更新されたため、内容は best-effort snapshot です。`);
424
+ }
425
+ else if (input.raceSensitive) {
426
+ // Running Pi sessions may append after this check; this marks the source as
427
+ // a live transcript even when no concurrent write was observed this time.
428
+ const sourceStatus = await lstat(input.sourcePath).catch(() => undefined);
429
+ if (sourceStatus && !sourceStatus.isFile()) {
430
+ input.warnings.push(`${input.id}: コピー後に source path が file ではなくなりました。`);
431
+ }
432
+ }
433
+ return copied;
434
+ }
435
+ async function locateFirstRegularFile(candidates) {
436
+ const warnings = [];
437
+ for (const candidate of candidates) {
438
+ let sourceInfo;
439
+ try {
440
+ sourceInfo = await lstat(candidate);
441
+ }
442
+ catch (error) {
443
+ if (isEnoent(error))
444
+ continue;
445
+ return {
446
+ warnings,
447
+ reason: '保存ファイルを確認できません。',
448
+ };
449
+ }
450
+ if (sourceInfo.isSymbolicLink() || !sourceInfo.isFile()) {
451
+ warnings.push(`安全のため file 以外の source を読み飛ばしました: ${candidate}`);
452
+ continue;
453
+ }
454
+ return { path: candidate, warnings };
455
+ }
456
+ return {
457
+ warnings,
458
+ reason: warnings.length > 0
459
+ ? '安全にコピーできる保存ファイルが見つかりません。'
460
+ : '保存ファイルが見つかりません。',
461
+ };
462
+ }
463
+ async function copyRegularFile(sourcePath, destinationPath) {
464
+ let before;
465
+ try {
466
+ before = await lstat(sourcePath);
467
+ }
468
+ catch (error) {
469
+ if (isEnoent(error))
470
+ throw new SessionBundleSourceError('missing');
471
+ throw new SessionBundleSourceError('unavailable');
472
+ }
473
+ if (before.isSymbolicLink() || !before.isFile()) {
474
+ throw new SessionBundleSourceError('unsafe');
475
+ }
476
+ let sourceHandle;
477
+ let destinationHandle;
478
+ let destinationCreated = false;
479
+ try {
480
+ const noFollow = process.platform === 'win32' ? 0 : constants.O_NOFOLLOW;
481
+ sourceHandle = await open(sourcePath, constants.O_RDONLY | noFollow);
482
+ const opened = await sourceHandle.stat();
483
+ if (!opened.isFile() || !sameFile(before, opened)) {
484
+ throw new SessionBundleSourceError('unsafe');
485
+ }
486
+ await mkdir(dirname(destinationPath), { recursive: true, mode: 0o700 });
487
+ await chmod(dirname(destinationPath), 0o700);
488
+ destinationHandle = await open(destinationPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
489
+ destinationCreated = true;
490
+ await destinationHandle.chmod(0o600);
491
+ const hash = createHash('sha256');
492
+ let sizeBytes = 0;
493
+ const digestTransform = new Transform({
494
+ transform(chunk, encoding, callback) {
495
+ const bytes = Buffer.isBuffer(chunk)
496
+ ? chunk
497
+ : Buffer.from(chunk, encoding);
498
+ hash.update(bytes);
499
+ sizeBytes += bytes.byteLength;
500
+ callback(null, bytes);
501
+ },
502
+ });
503
+ await pipeline(sourceHandle.createReadStream(), digestTransform, destinationHandle.createWriteStream());
504
+ const pathAfter = await lstat(sourcePath).catch(() => undefined);
505
+ const sourceChangedDuringCopy = pathAfter === undefined ||
506
+ pathAfter.isSymbolicLink() ||
507
+ !pathAfter.isFile() ||
508
+ !sameFile(opened, pathAfter) ||
509
+ statChanged(opened, pathAfter);
510
+ return {
511
+ sizeBytes,
512
+ sha256: hash.digest('hex'),
513
+ sourceChangedDuringCopy,
514
+ };
515
+ }
516
+ catch (error) {
517
+ if (destinationCreated) {
518
+ await unlink(destinationPath).catch(() => { });
519
+ }
520
+ if (error instanceof SessionBundleSourceError)
521
+ throw error;
522
+ if (isEnoent(error))
523
+ throw new SessionBundleSourceError('missing');
524
+ if (isUnsafeSourceError(error)) {
525
+ throw new SessionBundleSourceError('unsafe');
526
+ }
527
+ throw new SessionBundleSourceError('unavailable');
528
+ }
529
+ finally {
530
+ await destinationHandle?.close().catch(() => { });
531
+ await sourceHandle?.close().catch(() => { });
532
+ }
533
+ }
534
+ async function writeJsonPayload(input) {
535
+ const contents = Buffer.from(`${JSON.stringify(input.value, null, 2)}\n`);
536
+ const outputPath = bundleFilePath(input.outputDirectory, input.path);
537
+ await writeBundleJsonFile(outputPath, contents);
538
+ return {
539
+ path: input.path,
540
+ kind: 'json',
541
+ sizeBytes: contents.byteLength,
542
+ sha256: createHash('sha256').update(contents).digest('hex'),
543
+ sourcePaths: input.sourcePaths ?? [],
544
+ };
545
+ }
546
+ async function writeBundleJsonFile(path, value) {
547
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
548
+ await chmod(dirname(path), 0o700);
549
+ const handle = await open(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL, 0o600);
550
+ try {
551
+ await handle.chmod(0o600);
552
+ await handle.writeFile(Buffer.isBuffer(value) ? value : `${JSON.stringify(value, null, 2)}\n`);
553
+ await handle.sync();
554
+ }
555
+ finally {
556
+ await handle.close();
557
+ }
558
+ }
559
+ async function createNewBundleDirectory(path) {
560
+ await mkdir(dirname(path), { recursive: true });
561
+ try {
562
+ await mkdir(path, { mode: 0o700 });
563
+ }
564
+ catch (error) {
565
+ if (error.code === 'EEXIST') {
566
+ throw new Error(`Output directory already exists: ${path}`);
567
+ }
568
+ throw error;
569
+ }
570
+ try {
571
+ await chmod(path, 0o700);
572
+ }
573
+ catch (error) {
574
+ await rm(path, { recursive: true, force: true }).catch(() => { });
575
+ throw error;
576
+ }
577
+ }
578
+ function bundleFilePath(outputDirectory, relativePath) {
579
+ const root = resolve(outputDirectory);
580
+ const destination = resolve(root, ...relativePath.split('/'));
581
+ if (!destination.startsWith(`${root}${sep}`)) {
582
+ throw new Error('Bundle file path escapes the output directory.');
583
+ }
584
+ return destination;
585
+ }
586
+ function workerBundlePath(workerName, index) {
587
+ const prefix = workerName
588
+ .normalize('NFKC')
589
+ .replace(/[^A-Za-z0-9_-]+/gu, '-')
590
+ .replace(/^-+|-+$/gu, '')
591
+ .slice(0, 40) || 'worker';
592
+ const suffix = createHash('sha256').update(workerName).digest('hex').slice(0, 12);
593
+ return `workers/${String(index + 1).padStart(2, '0')}-${prefix}-${suffix}.json`;
594
+ }
595
+ function sourceStatusFromWorkerHistory(history) {
596
+ if (history.status === 'supported')
597
+ return 'available';
598
+ return history.status;
599
+ }
600
+ function sourceCopyFailureReason(error) {
601
+ if (error instanceof SessionBundleSourceError) {
602
+ switch (error.kind) {
603
+ case 'missing':
604
+ return 'source file が見つかりません。';
605
+ case 'unsafe':
606
+ return 'symlink または通常 file 以外の source はコピーしません。';
607
+ case 'unavailable':
608
+ return 'source file を安全に読み取れませんでした。';
609
+ }
610
+ }
611
+ return 'source file をコピーできませんでした。';
612
+ }
613
+ function sameFile(left, right) {
614
+ return left.dev === right.dev && left.ino === right.ino;
615
+ }
616
+ function statChanged(left, right) {
617
+ return (left.size !== right.size ||
618
+ left.mtimeMs !== right.mtimeMs ||
619
+ left.ctimeMs !== right.ctimeMs);
620
+ }
621
+ function isUnsafeSourceError(error) {
622
+ return (typeof error === 'object' &&
623
+ error !== null &&
624
+ 'code' in error &&
625
+ (error.code === 'ELOOP' ||
626
+ error.code === 'EISDIR'));
627
+ }
628
+ function isEnoent(error) {
629
+ return (typeof error === 'object' &&
630
+ error !== null &&
631
+ 'code' in error &&
632
+ error.code === 'ENOENT');
633
+ }
634
+ function requireNonEmpty(value, label) {
635
+ const normalized = value.trim();
636
+ if (!normalized)
637
+ throw new Error(`${label} must be non-empty.`);
638
+ return normalized;
639
+ }
640
+ //# sourceMappingURL=export-session-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-session-bundle.js","sourceRoot":"","sources":["../../src/session/export-session-bundle.ts"],"names":[],"mappings":"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"}