@fitlab-ai/agent-infra 0.12.0 → 0.12.2

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 (331) hide show
  1. package/README.md +0 -2
  2. package/README.zh-CN.md +0 -2
  3. package/dist/bin/internal-cli.js +2 -17
  4. package/dist/lib/agent-clients/adapter.js +0 -13
  5. package/dist/lib/agent-clients/adapters/antigravity-cli.js +0 -5
  6. package/dist/lib/agent-clients/adapters/claude-code-credentials.js +0 -17
  7. package/dist/lib/agent-clients/adapters/claude-code.js +0 -9
  8. package/dist/lib/agent-clients/adapters/codex.js +0 -52
  9. package/dist/lib/agent-clients/adapters/opencode.js +0 -5
  10. package/dist/lib/agent-clients/adapters/traecli.js +0 -5
  11. package/dist/lib/agent-clients/config.js +19 -54
  12. package/dist/lib/agent-clients/registry.js +1 -12
  13. package/dist/lib/agent-clients/schema.js +0 -18
  14. package/dist/lib/agent-clients/tokens.js +1 -2
  15. package/dist/lib/agent-clients/types.js +0 -1
  16. package/dist/lib/decide.js +2 -0
  17. package/dist/lib/git/worktree-identity.js +1 -9
  18. package/dist/lib/internal/agent-client.js +2 -62
  19. package/dist/lib/internal/cli-route-inventory.js +1 -5
  20. package/dist/lib/internal/manual-validation.js +29 -27
  21. package/dist/lib/internal/platform-comment.js +56 -7
  22. package/dist/lib/internal/task-create.js +1 -1
  23. package/dist/lib/internal/task-event.js +1 -8
  24. package/dist/lib/internal/task-finalization.js +0 -1
  25. package/dist/lib/internal/task-lifecycle.js +2 -2
  26. package/dist/lib/internal/task-operation-registry.js +4 -20
  27. package/dist/lib/internal/task-review.js +4 -4
  28. package/dist/lib/platform/comment-safety.js +1 -7
  29. package/dist/lib/platform/in-label-sync.js +1 -14
  30. package/dist/lib/platform/issue-comments.js +373 -282
  31. package/dist/lib/platform/issue-summary-content.js +112 -0
  32. package/dist/lib/platform/issues.js +1 -1
  33. package/dist/lib/platform/operation-coordinator.js +4 -2
  34. package/dist/lib/platform/pr-change-report.js +176 -30
  35. package/dist/lib/platform/pr-checks.js +2 -8
  36. package/dist/lib/platform/pr-summary-content.js +54 -0
  37. package/dist/lib/platform/pr-summary.js +318 -284
  38. package/dist/lib/platform/provider-validation.js +0 -20
  39. package/dist/lib/platform/pull-requests.js +73 -84
  40. package/dist/lib/platform/releases.js +1 -43
  41. package/dist/lib/platform/summary-content-pipeline.js +18 -0
  42. package/dist/lib/platform/verification-required.js +0 -2
  43. package/dist/lib/platform/verification-sync.js +1 -79
  44. package/dist/lib/process-data/normalize.js +1 -185
  45. package/dist/lib/process-data/privacy.js +1 -16
  46. package/dist/lib/process-data/sources.js +2 -279
  47. package/dist/lib/render.js +0 -12
  48. package/dist/lib/run/index.js +15 -10
  49. package/dist/lib/run/skills.js +0 -3
  50. package/dist/lib/sandbox/commands/create.js +40 -53
  51. package/dist/lib/sandbox/commands/list-running.js +0 -18
  52. package/dist/lib/sandbox/commands/start.js +7 -8
  53. package/dist/lib/sandbox/constants.js +0 -6
  54. package/dist/lib/sandbox/control/client.js +0 -1
  55. package/dist/lib/sandbox/control/container-identity.js +1 -16
  56. package/dist/lib/sandbox/control/executor.js +0 -4
  57. package/dist/lib/sandbox/control/identity-sentinel.js +0 -7
  58. package/dist/lib/sandbox/control/lifecycle.js +21 -37
  59. package/dist/lib/sandbox/control/native-file-lock.js +0 -3
  60. package/dist/lib/sandbox/control/server.js +18 -38
  61. package/dist/lib/sandbox/control/state.js +1 -9
  62. package/dist/lib/sandbox/dockerfile.js +0 -6
  63. package/dist/lib/sandbox/engine.js +0 -14
  64. package/dist/lib/sandbox/engines/docker-exact-discovery.js +1 -4
  65. package/dist/lib/sandbox/engines/wsl2-paths.js +0 -3
  66. package/dist/lib/sandbox/recovery.js +24 -26
  67. package/dist/lib/sandbox/removal.js +67 -518
  68. package/dist/lib/sandbox/task-resolver.js +0 -41
  69. package/dist/lib/sandbox/tools.js +1 -4
  70. package/dist/lib/sandbox/workspace-view.js +1 -2
  71. package/dist/lib/server/display.js +0 -6
  72. package/dist/lib/task/activity-intent.js +45 -40
  73. package/dist/lib/task/activity-log.js +9 -16
  74. package/dist/lib/task/artifact-command.js +1 -1
  75. package/dist/lib/task/artifact-lifecycle.js +61 -63
  76. package/dist/lib/task/artifact-name.js +0 -6
  77. package/dist/lib/task/artifact-operations.js +3 -3
  78. package/dist/lib/task/capabilities.js +4 -5
  79. package/dist/lib/task/commands/log.js +0 -6
  80. package/dist/lib/task/commands/status.js +17 -60
  81. package/dist/lib/task/commit-operation.js +28 -39
  82. package/dist/lib/task/completion-facts.js +56 -43
  83. package/dist/lib/task/control-authority.js +23 -256
  84. package/dist/lib/task/control-recovery.js +3 -5
  85. package/dist/lib/task/create.js +2 -4
  86. package/dist/lib/task/decision-intents.js +8 -9
  87. package/dist/lib/task/delivery-target.js +1 -40
  88. package/dist/lib/task/events.js +84 -107
  89. package/dist/lib/task/finalization.js +60 -15
  90. package/dist/lib/task/ledger-intents.js +1 -1
  91. package/dist/lib/task/lifecycle-execution.js +38 -33
  92. package/dist/lib/task/lifecycle.js +49 -41
  93. package/dist/lib/task/local-artifact-finalization.js +1 -4
  94. package/dist/lib/task/manual-validation-evidence.js +1 -37
  95. package/dist/lib/task/platform-operation-recovery.js +151 -108
  96. package/dist/lib/task/pr-delivery-fact.js +2 -5
  97. package/dist/lib/task/qualification-confirmation.js +5 -7
  98. package/dist/lib/task/resolve-ref.js +1 -25
  99. package/dist/lib/task/review-command.js +2 -2
  100. package/dist/lib/task/review-finalization.js +1 -21
  101. package/dist/lib/task/review-fingerprint.js +0 -4
  102. package/dist/lib/task/secure-fs.js +0 -56
  103. package/dist/lib/task/short-id.js +1 -39
  104. package/dist/lib/task/skill-scope.js +0 -1
  105. package/dist/lib/task/verification-engine.js +58 -282
  106. package/dist/lib/task/verification.js +6 -3
  107. package/dist/lib/task/write.js +11 -1
  108. package/lib/agent-clients/adapter.ts +0 -76
  109. package/lib/agent-clients/adapters/antigravity-cli.ts +0 -5
  110. package/lib/agent-clients/adapters/claude-code-credentials.ts +0 -19
  111. package/lib/agent-clients/adapters/claude-code.ts +0 -9
  112. package/lib/agent-clients/adapters/codex.ts +0 -56
  113. package/lib/agent-clients/adapters/opencode.ts +0 -5
  114. package/lib/agent-clients/adapters/traecli.ts +0 -5
  115. package/lib/agent-clients/config.ts +20 -61
  116. package/lib/agent-clients/registry.ts +1 -34
  117. package/lib/agent-clients/schema.ts +0 -18
  118. package/lib/agent-clients/tokens.ts +1 -2
  119. package/lib/agent-clients/types.ts +0 -15
  120. package/lib/decide.ts +1 -0
  121. package/lib/git/worktree-identity.ts +0 -10
  122. package/lib/internal/agent-client.ts +2 -70
  123. package/lib/internal/cli-route-inventory.ts +1 -4
  124. package/lib/internal/manual-validation.ts +28 -27
  125. package/lib/internal/platform-comment.ts +46 -4
  126. package/lib/internal/task-create.ts +0 -1
  127. package/lib/internal/task-event.ts +1 -5
  128. package/lib/internal/task-finalization.ts +0 -1
  129. package/lib/internal/task-lifecycle.ts +3 -5
  130. package/lib/internal/task-operation-registry.ts +3 -19
  131. package/lib/internal/task-review.ts +4 -4
  132. package/lib/platform/comment-safety.ts +0 -10
  133. package/lib/platform/github-provider.ts +0 -2
  134. package/lib/platform/in-label-sync.ts +0 -16
  135. package/lib/platform/issue-comments.ts +478 -301
  136. package/lib/platform/issue-summary-content.ts +132 -0
  137. package/lib/platform/issues.ts +0 -2
  138. package/lib/platform/operation-coordinator.ts +4 -2
  139. package/lib/platform/pr-change-report.ts +165 -25
  140. package/lib/platform/pr-checks.ts +1 -10
  141. package/lib/platform/pr-review.ts +1 -1
  142. package/lib/platform/pr-summary-content.ts +60 -0
  143. package/lib/platform/pr-summary.ts +364 -257
  144. package/lib/platform/provider-bridge.ts +0 -1
  145. package/lib/platform/provider-loader.ts +1 -5
  146. package/lib/platform/provider-validation.ts +1 -49
  147. package/lib/platform/pull-requests.ts +64 -99
  148. package/lib/platform/releases.ts +1 -40
  149. package/lib/platform/summary-content-pipeline.ts +23 -0
  150. package/lib/platform/verification-required.ts +0 -2
  151. package/lib/platform/verification-sync.ts +0 -94
  152. package/lib/process-data/normalize.ts +1 -186
  153. package/lib/process-data/privacy.ts +2 -19
  154. package/lib/process-data/sources.ts +3 -283
  155. package/lib/render.ts +0 -15
  156. package/lib/run/index.ts +13 -7
  157. package/lib/run/skills.ts +0 -4
  158. package/lib/sandbox/commands/create.ts +37 -74
  159. package/lib/sandbox/commands/list-running.ts +0 -19
  160. package/lib/sandbox/commands/start.ts +7 -10
  161. package/lib/sandbox/constants.ts +0 -8
  162. package/lib/sandbox/control/client.ts +0 -1
  163. package/lib/sandbox/control/container-identity.ts +1 -16
  164. package/lib/sandbox/control/executor.ts +1 -5
  165. package/lib/sandbox/control/identity-sentinel.ts +0 -8
  166. package/lib/sandbox/control/lifecycle.ts +18 -51
  167. package/lib/sandbox/control/native-file-lock.ts +0 -8
  168. package/lib/sandbox/control/protocol.ts +0 -2
  169. package/lib/sandbox/control/server.ts +13 -39
  170. package/lib/sandbox/control/state.ts +1 -10
  171. package/lib/sandbox/dockerfile.ts +0 -11
  172. package/lib/sandbox/engine.ts +0 -17
  173. package/lib/sandbox/engines/docker-exact-discovery.ts +1 -5
  174. package/lib/sandbox/engines/wsl2-paths.ts +0 -4
  175. package/lib/sandbox/recovery.ts +24 -26
  176. package/lib/sandbox/removal.ts +58 -687
  177. package/lib/sandbox/shell.ts +1 -1
  178. package/lib/sandbox/task-resolver.ts +0 -48
  179. package/lib/sandbox/tools.ts +1 -5
  180. package/lib/sandbox/workspace-view.ts +2 -4
  181. package/lib/server/display.ts +0 -14
  182. package/lib/server/process-control.ts +1 -1
  183. package/lib/task/activity-intent.ts +36 -44
  184. package/lib/task/activity-log.ts +9 -22
  185. package/lib/task/artifact-command.ts +1 -1
  186. package/lib/task/artifact-lifecycle.ts +58 -67
  187. package/lib/task/artifact-name.ts +0 -7
  188. package/lib/task/artifact-operations.ts +3 -3
  189. package/lib/task/capabilities.ts +5 -6
  190. package/lib/task/commands/log.ts +0 -7
  191. package/lib/task/commands/status.ts +14 -79
  192. package/lib/task/commit-operation.ts +29 -51
  193. package/lib/task/completion-facts.ts +45 -42
  194. package/lib/task/control-authority.ts +27 -317
  195. package/lib/task/control-recovery.ts +2 -5
  196. package/lib/task/create.ts +2 -5
  197. package/lib/task/decision-intents.ts +5 -5
  198. package/lib/task/delivery-target.ts +0 -40
  199. package/lib/task/events.ts +89 -123
  200. package/lib/task/finalization.ts +52 -15
  201. package/lib/task/ledger-intents.ts +1 -1
  202. package/lib/task/lifecycle-execution.ts +37 -89
  203. package/lib/task/lifecycle.ts +48 -44
  204. package/lib/task/local-artifact-finalization.ts +0 -7
  205. package/lib/task/manual-validation-evidence.ts +1 -47
  206. package/lib/task/platform-operation-recovery.ts +117 -104
  207. package/lib/task/pr-delivery-fact.ts +2 -11
  208. package/lib/task/qualification-confirmation.ts +6 -6
  209. package/lib/task/resolve-ref.ts +0 -23
  210. package/lib/task/review-command.ts +2 -2
  211. package/lib/task/review-finalization.ts +1 -27
  212. package/lib/task/review-fingerprint.ts +0 -8
  213. package/lib/task/secure-fs.ts +0 -42
  214. package/lib/task/short-id.ts +0 -43
  215. package/lib/task/skill-scope.ts +0 -1
  216. package/lib/task/verification-engine.ts +56 -287
  217. package/lib/task/verification.ts +5 -5
  218. package/lib/task/write.ts +12 -1
  219. package/package.json +2 -2
  220. package/templates/.agents/README.en.md +1 -3
  221. package/templates/.agents/README.zh-CN.md +0 -2
  222. package/templates/.agents/rules/README.en.md +0 -1
  223. package/templates/.agents/rules/README.zh-CN.md +0 -1
  224. package/templates/.agents/rules/commit-and-pr.en.md +1 -1
  225. package/templates/.agents/rules/commit-and-pr.zh-CN.md +1 -1
  226. package/templates/.agents/rules/no-mid-flow-questions.en.md +0 -10
  227. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +0 -10
  228. package/templates/.agents/rules/pr-sync.en.md +4 -2
  229. package/templates/.agents/rules/pr-sync.zh-CN.md +6 -9
  230. package/templates/.agents/rules/task-management.en.md +3 -3
  231. package/templates/.agents/rules/task-management.zh-CN.md +3 -3
  232. package/templates/.agents/skills/analyze-task/SKILL.en.md +3 -3
  233. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +3 -3
  234. package/templates/.agents/skills/cancel-task/SKILL.en.md +2 -2
  235. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +2 -2
  236. package/templates/.agents/skills/code-task/SKILL.en.md +2 -2
  237. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +4 -4
  238. package/templates/.agents/skills/commit/SKILL.en.md +2 -2
  239. package/templates/.agents/skills/commit/SKILL.zh-CN.md +2 -2
  240. package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +6 -6
  241. package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +6 -6
  242. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +1 -1
  243. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +1 -1
  244. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +2 -2
  245. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +2 -2
  246. package/templates/.agents/skills/complete-task/SKILL.en.md +10 -25
  247. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +11 -26
  248. package/templates/.agents/skills/create-pr/SKILL.en.md +1 -1
  249. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +1 -1
  250. package/templates/.agents/skills/create-pr/reference/change-report.en.md +9 -2
  251. package/templates/.agents/skills/create-pr/reference/change-report.zh-CN.md +9 -2
  252. package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +2 -2
  253. package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +2 -2
  254. package/templates/.agents/skills/create-task/SKILL.en.md +0 -18
  255. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +0 -18
  256. package/templates/.agents/skills/plan-task/SKILL.en.md +2 -2
  257. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +2 -2
  258. package/templates/.agents/skills/review-analysis/SKILL.en.md +3 -3
  259. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +3 -3
  260. package/templates/.agents/skills/review-code/SKILL.en.md +5 -5
  261. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -5
  262. package/templates/.agents/skills/review-plan/SKILL.en.md +3 -3
  263. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +3 -3
  264. package/templates/.agents/skills/review-pr/SKILL.en.md +4 -4
  265. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +4 -4
  266. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +1 -1
  267. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +1 -1
  268. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +3 -75
  269. package/templates/.agents/skills/watch-pr/SKILL.en.md +1 -1
  270. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +1 -1
  271. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +3 -3
  272. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +3 -3
  273. package/templates/.agents/templates/task.en.md +1 -0
  274. package/templates/.agents/templates/task.zh-CN.md +1 -0
  275. package/templates/.claude/settings.json +0 -24
  276. package/templates/.codex/hooks.json +0 -50
  277. package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +0 -582
  278. package/dist/lib/agent-clients/adapters/codex-lifecycle/binding.js +0 -114
  279. package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +0 -237
  280. package/dist/lib/agent-clients/adapters/codex-lifecycle/cli.js +0 -443
  281. package/dist/lib/agent-clients/adapters/codex-lifecycle/evidence.js +0 -236
  282. package/dist/lib/agent-clients/adapters/codex-lifecycle/recovery.js +0 -292
  283. package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +0 -267
  284. package/dist/lib/agent-clients/adapters/codex-orchestration.js +0 -466
  285. package/dist/lib/internal/task-orchestration.js +0 -71
  286. package/dist/lib/platform/verification.js +0 -6
  287. package/dist/lib/run/prompt.js +0 -2
  288. package/dist/lib/sandbox/engines/authority.js +0 -289
  289. package/dist/lib/task/delegation-receipts.js +0 -410
  290. package/dist/lib/task/orchestration.js +0 -1233
  291. package/dist/lib/task/verification-checks.js +0 -9
  292. package/dist/lib/task/workspace-snapshot.js +0 -121
  293. package/dist/lifecycle-build-manifest.json +0 -6
  294. package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +0 -688
  295. package/lib/agent-clients/adapters/codex-lifecycle/binding.ts +0 -147
  296. package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +0 -349
  297. package/lib/agent-clients/adapters/codex-lifecycle/cli.ts +0 -506
  298. package/lib/agent-clients/adapters/codex-lifecycle/evidence.ts +0 -385
  299. package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +0 -41
  300. package/lib/agent-clients/adapters/codex-lifecycle/recovery.ts +0 -418
  301. package/lib/agent-clients/adapters/codex-lifecycle/store.ts +0 -354
  302. package/lib/agent-clients/adapters/codex-orchestration.ts +0 -630
  303. package/lib/internal/task-orchestration.ts +0 -74
  304. package/lib/platform/verification.ts +0 -11
  305. package/lib/run/prompt.ts +0 -1
  306. package/lib/sandbox/engines/authority.ts +0 -365
  307. package/lib/task/delegation-receipts.ts +0 -547
  308. package/lib/task/orchestration.ts +0 -1651
  309. package/lib/task/verification-checks.ts +0 -10
  310. package/lib/task/workspace-snapshot.ts +0 -144
  311. package/templates/.agents/hooks/lifecycle-delegation.js +0 -140
  312. package/templates/.agents/rules/lifecycle-orchestration.en.md +0 -44
  313. package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +0 -44
  314. package/templates/.agents/skills/run-task/SKILL.en.md +0 -29
  315. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +0 -29
  316. package/templates/.agents/skills/run-task/config/verify.en.json +0 -10
  317. package/templates/.agents/skills/run-task/config/verify.zh-CN.json +0 -10
  318. package/templates/.agents/skills/run-task/reference/host-validation.en.md +0 -24
  319. package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +0 -24
  320. package/templates/.claude/agents/agent-infra-lifecycle-executor.en.md +0 -6
  321. package/templates/.claude/agents/agent-infra-lifecycle-executor.zh-CN.md +0 -6
  322. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.en.md +0 -6
  323. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.zh-CN.md +0 -6
  324. package/templates/.claude/commands/run-task.en.md +0 -8
  325. package/templates/.claude/commands/run-task.zh-CN.md +0 -8
  326. package/templates/.codex/agents/agent-infra-lifecycle-executor.en.toml +0 -3
  327. package/templates/.codex/agents/agent-infra-lifecycle-executor.zh-CN.toml +0 -3
  328. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.en.toml +0 -3
  329. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.zh-CN.toml +0 -3
  330. package/templates/.opencode/commands/run-task.en.md +0 -11
  331. package/templates/.opencode/commands/run-task.zh-CN.md +0 -11
@@ -1,289 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- import { runProbe } from '../shell.js';
3
- import { getAdapter } from './index.js';
4
- function digest(value) {
5
- return createHash('sha256').update(value).digest('hex');
6
- }
7
- function canonical(value) {
8
- if (Array.isArray(value))
9
- return `[${value.map(canonical).join(',')}]`;
10
- if (!value || typeof value !== 'object')
11
- return JSON.stringify(value) ?? 'null';
12
- return `{${Object.entries(value)
13
- .sort(([left], [right]) => left.localeCompare(right))
14
- .map(([key, entry]) => `${JSON.stringify(key)}:${canonical(entry)}`)
15
- .join(',')}}`;
16
- }
17
- function text(value) {
18
- return typeof value === 'string' ? value : value?.toString('utf8') ?? '';
19
- }
20
- function safeEndpoint(value) {
21
- if (!value)
22
- return 'docker-default';
23
- try {
24
- const parsed = new URL(value);
25
- const hasUnreplayableParts = Boolean(parsed.username || parsed.password || parsed.search || parsed.hash);
26
- parsed.username = '';
27
- parsed.password = '';
28
- parsed.search = '';
29
- parsed.hash = '';
30
- const normalized = parsed.toString().replace(/\/$/u, '');
31
- return hasUnreplayableParts
32
- ? `${normalized}#<redacted>`
33
- : normalized;
34
- }
35
- catch {
36
- const normalized = value
37
- .replace(/\/\/[^/@]+@/u, '//<redacted>@')
38
- .replace(/[?&](?:token|password|secret|key)=[^&]*/giu, '');
39
- return /[@?#]/u.test(value) ? `${normalized.replace(/[?#].*$/u, '')}#<redacted>` : normalized;
40
- }
41
- }
42
- function lockDomainFor(engine, endpoint) {
43
- return digest(`${process.platform}\0${process.arch}\0${engine}\0${endpoint}`);
44
- }
45
- function contextRoute(context) {
46
- return {
47
- kind: 'context',
48
- selector: { context },
49
- endpoint: `docker-context://${context}`,
50
- command: (args) => ({ cmd: 'docker', args: ['--context', context, ...args] })
51
- };
52
- }
53
- function endpointRoute(endpoint, rawEndpoint, unreplayable) {
54
- return {
55
- kind: 'endpoint',
56
- selector: {
57
- source: 'DOCKER_HOST',
58
- endpoint,
59
- ...(unreplayable ? { unreplayable } : {})
60
- },
61
- endpoint,
62
- command: (args) => ({ cmd: 'docker', args: ['--host', rawEndpoint, ...args] })
63
- };
64
- }
65
- function tlsEnvironmentReason(env) {
66
- return env.DOCKER_TLS_VERIFY || env.DOCKER_CERT_PATH || env.DOCKER_TLS
67
- ? 'tls-environment'
68
- : undefined;
69
- }
70
- function routeFor(engine, env) {
71
- const context = getAdapter(engine).dockerContext;
72
- if (context) {
73
- return contextRoute(context);
74
- }
75
- if (env.DOCKER_CONTEXT) {
76
- return contextRoute(env.DOCKER_CONTEXT);
77
- }
78
- if (env.DOCKER_HOST) {
79
- return endpointRoute(safeEndpoint(env.DOCKER_HOST), env.DOCKER_HOST, tlsEnvironmentReason(env));
80
- }
81
- return contextRoute('default');
82
- }
83
- function validRouteName(value) {
84
- return /^[A-Za-z0-9][A-Za-z0-9_.@/-]*$/u.test(value);
85
- }
86
- function resolveWslDistro(probe, timeoutMs, explicit) {
87
- if (explicit) {
88
- if (!validRouteName(explicit))
89
- throw new Error('SANDBOX_AUTHORITY_ROUTE_CAPTURE_FAILED');
90
- return explicit;
91
- }
92
- const result = probe('wsl.exe', ['--list', '--verbose'], timeoutMs === undefined ? {} : { timeout: timeoutMs });
93
- if (result.status !== 0)
94
- throw new Error('SANDBOX_AUTHORITY_ROUTE_CAPTURE_FAILED');
95
- const output = text(result.stdout).replace(/\0/gu, '').replace(/\r/gu, '');
96
- const defaultLine = output.split('\n').find((line) => /^\s*\*\s+/u.test(line));
97
- const distro = defaultLine?.replace(/^\s*\*\s+/u, '').replace(/\s+(?:Running|Stopped)\s+\d+\s*$/iu, '').trim();
98
- if (!distro || !validRouteName(distro))
99
- throw new Error('SANDBOX_AUTHORITY_ROUTE_CAPTURE_FAILED');
100
- return distro;
101
- }
102
- function wslRoute(distro, context, env) {
103
- const endpoint = env.DOCKER_HOST
104
- ? safeEndpoint(env.DOCKER_HOST)
105
- : `wsl://${distro}/${context ?? 'default'}`;
106
- const unreplayable = tlsEnvironmentReason(env)
107
- ?? (endpoint.includes('<redacted>') ? 'ambient-endpoint-secret' : undefined);
108
- return {
109
- kind: 'wsl2',
110
- selector: {
111
- distro,
112
- ...(context ? { context } : {}),
113
- ...(unreplayable ? { unreplayable } : {}),
114
- ...(env.DOCKER_HOST ? { endpoint } : {})
115
- },
116
- endpoint,
117
- command: (args) => ({
118
- cmd: 'wsl.exe',
119
- args: [
120
- '--distribution', distro,
121
- '--exec', 'docker',
122
- ...(context ? ['--context', context] : []),
123
- ...(env.DOCKER_HOST ? ['--host', env.DOCKER_HOST] : []),
124
- ...args
125
- ]
126
- })
127
- };
128
- }
129
- function currentWslRoute(env, probe, timeoutMs) {
130
- const distro = resolveWslDistro(probe, timeoutMs, env.WSL_DISTRO_NAME);
131
- let context = env.DOCKER_CONTEXT;
132
- if (!context && !env.DOCKER_HOST) {
133
- const result = probe('wsl.exe', ['--distribution', distro, '--exec', 'docker', 'context', 'show'], timeoutMs === undefined ? {} : { timeout: timeoutMs });
134
- context = text(result.stdout).trim();
135
- if (result.status !== 0 || !validRouteName(context)) {
136
- throw new Error('SANDBOX_AUTHORITY_ROUTE_CAPTURE_FAILED');
137
- }
138
- }
139
- return wslRoute(distro, context, env);
140
- }
141
- function routeFromEvidence(evidence) {
142
- return {
143
- kind: evidence.routeKind,
144
- selector: evidence.routeSelector,
145
- endpoint: evidence.normalizedEndpoint,
146
- command: (args) => commandForSandboxAuthority(evidence, 'docker', args)
147
- };
148
- }
149
- function currentContextRoute(engine, env, probe, timeoutMs) {
150
- const configured = routeFor(engine, env);
151
- if (configured.kind !== 'context' || configured.selector.context !== 'default')
152
- return configured;
153
- if (env.DOCKER_CONTEXT || env.DOCKER_HOST || getAdapter(engine).dockerContext)
154
- return configured;
155
- const result = probe('docker', ['context', 'show'], timeoutMs === undefined ? {} : { timeout: timeoutMs });
156
- const context = text(result.stdout).trim();
157
- if (result.status !== 0 || !/^[A-Za-z0-9][A-Za-z0-9_.@/-]*$/u.test(context)) {
158
- throw new Error('SANDBOX_AUTHORITY_ROUTE_CAPTURE_FAILED');
159
- }
160
- return contextRoute(context);
161
- }
162
- /** Build a command using only the route persisted with the sandbox authority. */
163
- export function commandForSandboxAuthority(evidence, cmd, args = []) {
164
- if (cmd !== 'docker') {
165
- throw new Error('SANDBOX_AUTHORITY_ROUTE_UNSUPPORTED');
166
- }
167
- if (evidence.routeKind === 'context') {
168
- const context = evidence.routeSelector.context;
169
- if (!context)
170
- throw new Error('SANDBOX_AUTHORITY_ROUTE_INVALID');
171
- return { cmd, args: ['--context', context, ...args] };
172
- }
173
- if (evidence.routeKind === 'endpoint') {
174
- const endpoint = evidence.routeSelector.endpoint;
175
- if (!endpoint || endpoint.includes('<redacted>') || evidence.routeSelector.unreplayable) {
176
- throw new Error('SANDBOX_AUTHORITY_ROUTE_UNREPLAYABLE');
177
- }
178
- return { cmd, args: ['--host', endpoint, ...args] };
179
- }
180
- if (evidence.routeKind === 'wsl2') {
181
- const distro = evidence.routeSelector.distro;
182
- const context = evidence.routeSelector.context;
183
- const endpoint = evidence.routeSelector.endpoint;
184
- if (!distro || evidence.routeSelector.unreplayable || endpoint?.includes('<redacted>')) {
185
- throw new Error('SANDBOX_AUTHORITY_ROUTE_UNREPLAYABLE');
186
- }
187
- return {
188
- cmd: 'wsl.exe',
189
- args: [
190
- '--distribution', distro,
191
- '--exec', cmd,
192
- ...(context ? ['--context', context] : []),
193
- ...(endpoint && !endpoint.startsWith('wsl://') ? ['--host', endpoint] : []),
194
- ...args
195
- ]
196
- };
197
- }
198
- return { cmd, args: ['--context', 'default', ...args] };
199
- }
200
- export function authorityVersionArgs() {
201
- return ['version', '--format', '{{json .Server}}'];
202
- }
203
- export function captureSandboxAuthority(engine, options = {}) {
204
- const env = options.env ?? process.env;
205
- const probe = options.probe ?? runProbe;
206
- const route = options.route
207
- ? routeFromEvidence(options.route)
208
- : engine === 'wsl2'
209
- ? currentWslRoute(env, probe, options.timeoutMs)
210
- : currentContextRoute(engine, env, probe, options.timeoutMs);
211
- function probeJson(args) {
212
- const command = options.route
213
- ? commandForSandboxAuthority(options.route, 'docker', args)
214
- : route.command(args);
215
- try {
216
- const response = probe(command.cmd, command.args, options.timeoutMs === undefined ? {} : { timeout: options.timeoutMs });
217
- if (response.status !== 0)
218
- throw new Error('SANDBOX_AUTHORITY_CAPTURE_FAILED');
219
- return JSON.parse(text(response.stdout).trim());
220
- }
221
- catch {
222
- throw new Error('SANDBOX_AUTHORITY_CAPTURE_FAILED');
223
- }
224
- }
225
- const server = probeJson(authorityVersionArgs());
226
- if (!server || typeof server !== 'object' || Array.isArray(server)) {
227
- throw new Error('SANDBOX_AUTHORITY_CAPTURE_FAILED');
228
- }
229
- const record = server;
230
- const api = typeof record.ApiVersion === 'string' ? /^(\d+)\.(\d+)$/u.exec(record.ApiVersion) : null;
231
- if (!api)
232
- throw new Error('SANDBOX_AUTHORITY_CAPTURE_FAILED');
233
- // Docker version exposes API metadata; the daemon ID belongs to Docker info.
234
- const serverId = probeJson(['info', '--format', '{{json .ID}}']);
235
- if (typeof serverId !== 'string' || !serverId.trim())
236
- throw new Error('SANDBOX_AUTHORITY_CAPTURE_FAILED');
237
- const normalizedEndpoint = route.endpoint;
238
- const evidenceWithoutFingerprint = {
239
- version: 1,
240
- provider: engine,
241
- lockDomain: options.lockDomain ?? options.route?.lockDomain ?? lockDomainFor(engine, normalizedEndpoint),
242
- routeKind: route.kind,
243
- routeSelector: route.selector,
244
- normalizedEndpoint,
245
- endpointFingerprint: digest(normalizedEndpoint),
246
- daemonIdentity: { kind: 'docker-server-id', fingerprint: digest(serverId) },
247
- apiVersion: { major: Number(api[1]), minor: Number(api[2]) }
248
- };
249
- return {
250
- ...evidenceWithoutFingerprint,
251
- authorityFingerprint: digest(canonical(evidenceWithoutFingerprint))
252
- };
253
- }
254
- export function verifySandboxAuthority(expected, actual) {
255
- if (!expected)
256
- return { state: 'unknown', reason: 'SANDBOX_AUTHORITY_EVIDENCE_MISSING' };
257
- if (!actual)
258
- return { state: 'unknown', reason: 'SANDBOX_AUTHORITY_UNAVAILABLE' };
259
- if (expected.authorityFingerprint !== actual.authorityFingerprint
260
- || expected.lockDomain !== actual.lockDomain
261
- || expected.routeKind !== actual.routeKind
262
- || expected.endpointFingerprint !== actual.endpointFingerprint
263
- || expected.daemonIdentity.fingerprint !== actual.daemonIdentity.fingerprint) {
264
- return { state: 'conflict', reason: 'SANDBOX_AUTHORITY_DRIFT' };
265
- }
266
- return { state: 'verified' };
267
- }
268
- export function isSandboxAuthorityEvidence(value) {
269
- if (!value || typeof value !== 'object' || Array.isArray(value))
270
- return false;
271
- const evidence = value;
272
- const selector = evidence.routeSelector;
273
- const daemon = evidence.daemonIdentity;
274
- const api = evidence.apiVersion;
275
- return evidence.version === 1
276
- && typeof evidence.provider === 'string'
277
- && /^[a-f0-9]{64}$/u.test(evidence.lockDomain)
278
- && ['default', 'context', 'endpoint', 'wsl2'].includes(evidence.routeKind)
279
- && !!selector && typeof selector === 'object' && !Array.isArray(selector)
280
- && Object.values(selector).every((entry) => typeof entry === 'string')
281
- && typeof evidence.normalizedEndpoint === 'string'
282
- && /^[a-f0-9]{64}$/u.test(evidence.endpointFingerprint)
283
- && !!daemon && daemon.kind === 'docker-server-id'
284
- && /^[a-f0-9]{64}$/u.test(daemon.fingerprint)
285
- && !!api && Number.isSafeInteger(api.major) && api.major >= 0
286
- && Number.isSafeInteger(api.minor) && api.minor >= 0
287
- && /^[a-f0-9]{64}$/u.test(evidence.authorityFingerprint);
288
- }
289
- //# sourceMappingURL=authority.js.map