@fitlab-ai/agent-infra 0.12.1 → 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 (303) 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 +18 -10
  21. package/dist/lib/internal/task-create.js +1 -1
  22. package/dist/lib/internal/task-event.js +1 -8
  23. package/dist/lib/internal/task-finalization.js +0 -1
  24. package/dist/lib/internal/task-lifecycle.js +2 -2
  25. package/dist/lib/internal/task-operation-registry.js +4 -20
  26. package/dist/lib/internal/task-review.js +4 -4
  27. package/dist/lib/platform/comment-safety.js +1 -7
  28. package/dist/lib/platform/in-label-sync.js +1 -14
  29. package/dist/lib/platform/issue-comments.js +1 -16
  30. package/dist/lib/platform/issues.js +1 -1
  31. package/dist/lib/platform/operation-coordinator.js +4 -2
  32. package/dist/lib/platform/pr-change-report.js +1 -4
  33. package/dist/lib/platform/pr-checks.js +2 -8
  34. package/dist/lib/platform/provider-validation.js +0 -20
  35. package/dist/lib/platform/pull-requests.js +73 -84
  36. package/dist/lib/platform/releases.js +1 -43
  37. package/dist/lib/platform/verification-required.js +0 -2
  38. package/dist/lib/platform/verification-sync.js +1 -79
  39. package/dist/lib/process-data/normalize.js +1 -185
  40. package/dist/lib/process-data/privacy.js +1 -16
  41. package/dist/lib/process-data/sources.js +2 -279
  42. package/dist/lib/render.js +0 -12
  43. package/dist/lib/run/index.js +15 -10
  44. package/dist/lib/run/skills.js +0 -3
  45. package/dist/lib/sandbox/commands/create.js +40 -53
  46. package/dist/lib/sandbox/commands/list-running.js +0 -18
  47. package/dist/lib/sandbox/commands/start.js +7 -8
  48. package/dist/lib/sandbox/constants.js +0 -6
  49. package/dist/lib/sandbox/control/client.js +0 -1
  50. package/dist/lib/sandbox/control/container-identity.js +1 -16
  51. package/dist/lib/sandbox/control/executor.js +0 -4
  52. package/dist/lib/sandbox/control/identity-sentinel.js +0 -7
  53. package/dist/lib/sandbox/control/lifecycle.js +21 -37
  54. package/dist/lib/sandbox/control/native-file-lock.js +0 -3
  55. package/dist/lib/sandbox/control/server.js +18 -38
  56. package/dist/lib/sandbox/control/state.js +1 -9
  57. package/dist/lib/sandbox/dockerfile.js +0 -6
  58. package/dist/lib/sandbox/engine.js +0 -14
  59. package/dist/lib/sandbox/engines/docker-exact-discovery.js +1 -4
  60. package/dist/lib/sandbox/engines/wsl2-paths.js +0 -3
  61. package/dist/lib/sandbox/recovery.js +24 -26
  62. package/dist/lib/sandbox/removal.js +11 -519
  63. package/dist/lib/sandbox/task-resolver.js +0 -41
  64. package/dist/lib/sandbox/tools.js +1 -4
  65. package/dist/lib/sandbox/workspace-view.js +1 -2
  66. package/dist/lib/server/display.js +0 -6
  67. package/dist/lib/task/activity-intent.js +45 -40
  68. package/dist/lib/task/activity-log.js +9 -16
  69. package/dist/lib/task/artifact-command.js +1 -1
  70. package/dist/lib/task/artifact-lifecycle.js +61 -63
  71. package/dist/lib/task/artifact-name.js +0 -6
  72. package/dist/lib/task/artifact-operations.js +3 -3
  73. package/dist/lib/task/capabilities.js +4 -5
  74. package/dist/lib/task/commands/log.js +0 -6
  75. package/dist/lib/task/commands/status.js +17 -60
  76. package/dist/lib/task/commit-operation.js +28 -39
  77. package/dist/lib/task/completion-facts.js +56 -43
  78. package/dist/lib/task/control-authority.js +23 -256
  79. package/dist/lib/task/control-recovery.js +3 -5
  80. package/dist/lib/task/create.js +2 -4
  81. package/dist/lib/task/decision-intents.js +8 -9
  82. package/dist/lib/task/delivery-target.js +1 -40
  83. package/dist/lib/task/events.js +84 -107
  84. package/dist/lib/task/finalization.js +44 -8
  85. package/dist/lib/task/ledger-intents.js +1 -1
  86. package/dist/lib/task/lifecycle-execution.js +38 -33
  87. package/dist/lib/task/lifecycle.js +49 -41
  88. package/dist/lib/task/local-artifact-finalization.js +1 -4
  89. package/dist/lib/task/manual-validation-evidence.js +1 -37
  90. package/dist/lib/task/platform-operation-recovery.js +67 -24
  91. package/dist/lib/task/pr-delivery-fact.js +2 -5
  92. package/dist/lib/task/qualification-confirmation.js +5 -7
  93. package/dist/lib/task/resolve-ref.js +1 -25
  94. package/dist/lib/task/review-command.js +2 -2
  95. package/dist/lib/task/review-finalization.js +1 -21
  96. package/dist/lib/task/review-fingerprint.js +0 -4
  97. package/dist/lib/task/secure-fs.js +0 -56
  98. package/dist/lib/task/short-id.js +1 -39
  99. package/dist/lib/task/skill-scope.js +0 -1
  100. package/dist/lib/task/verification-engine.js +58 -282
  101. package/dist/lib/task/verification.js +6 -3
  102. package/dist/lib/task/write.js +11 -1
  103. package/lib/agent-clients/adapter.ts +0 -76
  104. package/lib/agent-clients/adapters/antigravity-cli.ts +0 -5
  105. package/lib/agent-clients/adapters/claude-code-credentials.ts +0 -19
  106. package/lib/agent-clients/adapters/claude-code.ts +0 -9
  107. package/lib/agent-clients/adapters/codex.ts +0 -56
  108. package/lib/agent-clients/adapters/opencode.ts +0 -5
  109. package/lib/agent-clients/adapters/traecli.ts +0 -5
  110. package/lib/agent-clients/config.ts +20 -61
  111. package/lib/agent-clients/registry.ts +1 -34
  112. package/lib/agent-clients/schema.ts +0 -18
  113. package/lib/agent-clients/tokens.ts +1 -2
  114. package/lib/agent-clients/types.ts +0 -15
  115. package/lib/decide.ts +1 -0
  116. package/lib/git/worktree-identity.ts +0 -10
  117. package/lib/internal/agent-client.ts +2 -70
  118. package/lib/internal/cli-route-inventory.ts +1 -4
  119. package/lib/internal/manual-validation.ts +16 -9
  120. package/lib/internal/task-create.ts +0 -1
  121. package/lib/internal/task-event.ts +1 -5
  122. package/lib/internal/task-finalization.ts +0 -1
  123. package/lib/internal/task-lifecycle.ts +3 -5
  124. package/lib/internal/task-operation-registry.ts +3 -19
  125. package/lib/internal/task-review.ts +4 -4
  126. package/lib/platform/comment-safety.ts +0 -10
  127. package/lib/platform/github-provider.ts +0 -2
  128. package/lib/platform/in-label-sync.ts +0 -16
  129. package/lib/platform/issue-comments.ts +0 -21
  130. package/lib/platform/issues.ts +0 -2
  131. package/lib/platform/operation-coordinator.ts +4 -2
  132. package/lib/platform/pr-change-report.ts +0 -5
  133. package/lib/platform/pr-checks.ts +1 -10
  134. package/lib/platform/pr-review.ts +1 -1
  135. package/lib/platform/provider-bridge.ts +0 -1
  136. package/lib/platform/provider-loader.ts +1 -5
  137. package/lib/platform/provider-validation.ts +1 -49
  138. package/lib/platform/pull-requests.ts +64 -99
  139. package/lib/platform/releases.ts +1 -40
  140. package/lib/platform/verification-required.ts +0 -2
  141. package/lib/platform/verification-sync.ts +0 -94
  142. package/lib/process-data/normalize.ts +1 -186
  143. package/lib/process-data/privacy.ts +2 -19
  144. package/lib/process-data/sources.ts +3 -283
  145. package/lib/render.ts +0 -15
  146. package/lib/run/index.ts +13 -7
  147. package/lib/run/skills.ts +0 -4
  148. package/lib/sandbox/commands/create.ts +37 -74
  149. package/lib/sandbox/commands/list-running.ts +0 -19
  150. package/lib/sandbox/commands/start.ts +7 -10
  151. package/lib/sandbox/constants.ts +0 -8
  152. package/lib/sandbox/control/client.ts +0 -1
  153. package/lib/sandbox/control/container-identity.ts +1 -16
  154. package/lib/sandbox/control/executor.ts +1 -5
  155. package/lib/sandbox/control/identity-sentinel.ts +0 -8
  156. package/lib/sandbox/control/lifecycle.ts +18 -51
  157. package/lib/sandbox/control/native-file-lock.ts +0 -8
  158. package/lib/sandbox/control/protocol.ts +0 -2
  159. package/lib/sandbox/control/server.ts +13 -39
  160. package/lib/sandbox/control/state.ts +1 -10
  161. package/lib/sandbox/dockerfile.ts +0 -11
  162. package/lib/sandbox/engine.ts +0 -17
  163. package/lib/sandbox/engines/docker-exact-discovery.ts +1 -5
  164. package/lib/sandbox/engines/wsl2-paths.ts +0 -4
  165. package/lib/sandbox/recovery.ts +24 -26
  166. package/lib/sandbox/removal.ts +11 -696
  167. package/lib/sandbox/shell.ts +1 -1
  168. package/lib/sandbox/task-resolver.ts +0 -48
  169. package/lib/sandbox/tools.ts +1 -5
  170. package/lib/sandbox/workspace-view.ts +2 -4
  171. package/lib/server/display.ts +0 -14
  172. package/lib/server/process-control.ts +1 -1
  173. package/lib/task/activity-intent.ts +36 -44
  174. package/lib/task/activity-log.ts +9 -22
  175. package/lib/task/artifact-command.ts +1 -1
  176. package/lib/task/artifact-lifecycle.ts +58 -67
  177. package/lib/task/artifact-name.ts +0 -7
  178. package/lib/task/artifact-operations.ts +3 -3
  179. package/lib/task/capabilities.ts +5 -6
  180. package/lib/task/commands/log.ts +0 -7
  181. package/lib/task/commands/status.ts +14 -79
  182. package/lib/task/commit-operation.ts +29 -51
  183. package/lib/task/completion-facts.ts +45 -42
  184. package/lib/task/control-authority.ts +27 -317
  185. package/lib/task/control-recovery.ts +2 -5
  186. package/lib/task/create.ts +2 -5
  187. package/lib/task/decision-intents.ts +5 -5
  188. package/lib/task/delivery-target.ts +0 -40
  189. package/lib/task/events.ts +89 -123
  190. package/lib/task/finalization.ts +41 -9
  191. package/lib/task/ledger-intents.ts +1 -1
  192. package/lib/task/lifecycle-execution.ts +37 -89
  193. package/lib/task/lifecycle.ts +48 -44
  194. package/lib/task/local-artifact-finalization.ts +0 -7
  195. package/lib/task/manual-validation-evidence.ts +1 -47
  196. package/lib/task/platform-operation-recovery.ts +50 -26
  197. package/lib/task/pr-delivery-fact.ts +2 -11
  198. package/lib/task/qualification-confirmation.ts +6 -6
  199. package/lib/task/resolve-ref.ts +0 -23
  200. package/lib/task/review-command.ts +2 -2
  201. package/lib/task/review-finalization.ts +1 -27
  202. package/lib/task/review-fingerprint.ts +0 -8
  203. package/lib/task/secure-fs.ts +0 -42
  204. package/lib/task/short-id.ts +0 -43
  205. package/lib/task/skill-scope.ts +0 -1
  206. package/lib/task/verification-engine.ts +56 -287
  207. package/lib/task/verification.ts +5 -5
  208. package/lib/task/write.ts +12 -1
  209. package/package.json +2 -2
  210. package/templates/.agents/README.en.md +1 -3
  211. package/templates/.agents/README.zh-CN.md +0 -2
  212. package/templates/.agents/rules/README.en.md +0 -1
  213. package/templates/.agents/rules/README.zh-CN.md +0 -1
  214. package/templates/.agents/rules/commit-and-pr.en.md +1 -1
  215. package/templates/.agents/rules/commit-and-pr.zh-CN.md +1 -1
  216. package/templates/.agents/rules/no-mid-flow-questions.en.md +0 -10
  217. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +0 -10
  218. package/templates/.agents/rules/pr-sync.en.md +1 -1
  219. package/templates/.agents/rules/pr-sync.zh-CN.md +1 -1
  220. package/templates/.agents/rules/task-management.en.md +3 -3
  221. package/templates/.agents/rules/task-management.zh-CN.md +3 -3
  222. package/templates/.agents/skills/analyze-task/SKILL.en.md +3 -3
  223. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +3 -3
  224. package/templates/.agents/skills/cancel-task/SKILL.en.md +2 -2
  225. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +2 -2
  226. package/templates/.agents/skills/code-task/SKILL.en.md +2 -2
  227. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +4 -4
  228. package/templates/.agents/skills/commit/SKILL.en.md +2 -2
  229. package/templates/.agents/skills/commit/SKILL.zh-CN.md +2 -2
  230. package/templates/.agents/skills/commit/reference/commit-orchestration.en.md +6 -6
  231. package/templates/.agents/skills/commit/reference/commit-orchestration.zh-CN.md +6 -6
  232. package/templates/.agents/skills/plan-task/SKILL.en.md +2 -2
  233. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +2 -2
  234. package/templates/.agents/skills/review-analysis/SKILL.en.md +3 -3
  235. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +3 -3
  236. package/templates/.agents/skills/review-code/SKILL.en.md +5 -5
  237. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +5 -5
  238. package/templates/.agents/skills/review-plan/SKILL.en.md +3 -3
  239. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +3 -3
  240. package/templates/.agents/skills/review-pr/SKILL.en.md +4 -4
  241. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +4 -4
  242. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +1 -1
  243. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +1 -1
  244. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +3 -75
  245. package/templates/.agents/templates/task.en.md +1 -0
  246. package/templates/.agents/templates/task.zh-CN.md +1 -0
  247. package/templates/.claude/settings.json +0 -24
  248. package/templates/.codex/hooks.json +0 -50
  249. package/dist/lib/agent-clients/adapters/codex-lifecycle/app-server.js +0 -582
  250. package/dist/lib/agent-clients/adapters/codex-lifecycle/binding.js +0 -114
  251. package/dist/lib/agent-clients/adapters/codex-lifecycle/build-identity.js +0 -237
  252. package/dist/lib/agent-clients/adapters/codex-lifecycle/cli.js +0 -443
  253. package/dist/lib/agent-clients/adapters/codex-lifecycle/evidence.js +0 -236
  254. package/dist/lib/agent-clients/adapters/codex-lifecycle/recovery.js +0 -292
  255. package/dist/lib/agent-clients/adapters/codex-lifecycle/store.js +0 -267
  256. package/dist/lib/agent-clients/adapters/codex-orchestration.js +0 -466
  257. package/dist/lib/internal/task-orchestration.js +0 -71
  258. package/dist/lib/platform/verification.js +0 -6
  259. package/dist/lib/run/prompt.js +0 -2
  260. package/dist/lib/sandbox/engines/authority.js +0 -289
  261. package/dist/lib/task/delegation-receipts.js +0 -410
  262. package/dist/lib/task/orchestration.js +0 -1233
  263. package/dist/lib/task/verification-checks.js +0 -9
  264. package/dist/lib/task/workspace-snapshot.js +0 -121
  265. package/dist/lifecycle-build-manifest.json +0 -6
  266. package/lib/agent-clients/adapters/codex-lifecycle/app-server.ts +0 -688
  267. package/lib/agent-clients/adapters/codex-lifecycle/binding.ts +0 -147
  268. package/lib/agent-clients/adapters/codex-lifecycle/build-identity.ts +0 -349
  269. package/lib/agent-clients/adapters/codex-lifecycle/cli.ts +0 -506
  270. package/lib/agent-clients/adapters/codex-lifecycle/evidence.ts +0 -385
  271. package/lib/agent-clients/adapters/codex-lifecycle/manifest-files.json +0 -41
  272. package/lib/agent-clients/adapters/codex-lifecycle/recovery.ts +0 -418
  273. package/lib/agent-clients/adapters/codex-lifecycle/store.ts +0 -354
  274. package/lib/agent-clients/adapters/codex-orchestration.ts +0 -630
  275. package/lib/internal/task-orchestration.ts +0 -74
  276. package/lib/platform/verification.ts +0 -11
  277. package/lib/run/prompt.ts +0 -1
  278. package/lib/sandbox/engines/authority.ts +0 -365
  279. package/lib/task/delegation-receipts.ts +0 -547
  280. package/lib/task/orchestration.ts +0 -1651
  281. package/lib/task/verification-checks.ts +0 -10
  282. package/lib/task/workspace-snapshot.ts +0 -144
  283. package/templates/.agents/hooks/lifecycle-delegation.js +0 -140
  284. package/templates/.agents/rules/lifecycle-orchestration.en.md +0 -44
  285. package/templates/.agents/rules/lifecycle-orchestration.zh-CN.md +0 -44
  286. package/templates/.agents/skills/run-task/SKILL.en.md +0 -29
  287. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +0 -29
  288. package/templates/.agents/skills/run-task/config/verify.en.json +0 -10
  289. package/templates/.agents/skills/run-task/config/verify.zh-CN.json +0 -10
  290. package/templates/.agents/skills/run-task/reference/host-validation.en.md +0 -24
  291. package/templates/.agents/skills/run-task/reference/host-validation.zh-CN.md +0 -24
  292. package/templates/.claude/agents/agent-infra-lifecycle-executor.en.md +0 -6
  293. package/templates/.claude/agents/agent-infra-lifecycle-executor.zh-CN.md +0 -6
  294. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.en.md +0 -6
  295. package/templates/.claude/agents/agent-infra-lifecycle-reviewer.zh-CN.md +0 -6
  296. package/templates/.claude/commands/run-task.en.md +0 -8
  297. package/templates/.claude/commands/run-task.zh-CN.md +0 -8
  298. package/templates/.codex/agents/agent-infra-lifecycle-executor.en.toml +0 -3
  299. package/templates/.codex/agents/agent-infra-lifecycle-executor.zh-CN.toml +0 -3
  300. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.en.toml +0 -3
  301. package/templates/.codex/agents/agent-infra-lifecycle-reviewer.zh-CN.toml +0 -3
  302. package/templates/.opencode/commands/run-task.en.md +0 -11
  303. 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