@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,114 +0,0 @@
1
- import { managedDelegationRole } from '../../../task/delegation-receipts.js';
2
- const MARKER_PREFIX = '__agent_infra_binding_';
3
- const BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
4
- const TASK_ID_PATTERN = /^TASK-[0-9]{8}-[0-9]{6}$/u;
5
- const SAFE_LABEL_PATTERN = /^[a-z0-9_]{1,80}$/u;
6
- const SAFE_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/u;
7
- function assertSafeTaskName(taskName) {
8
- if (Buffer.byteLength(taskName, 'utf8') > 255 || !/^[a-z0-9_]+$/u.test(taskName)) {
9
- throw new Error('Codex task_name must use lowercase letters, digits, and underscores within 255 bytes');
10
- }
11
- }
12
- function encodeTaskNamePayload(value) {
13
- let buffer = 0;
14
- let bits = 0;
15
- let encoded = '';
16
- for (const byte of Buffer.from(value, 'utf8')) {
17
- buffer = (buffer << 8) | byte;
18
- bits += 8;
19
- while (bits >= 5) {
20
- encoded += BASE32_ALPHABET[(buffer >>> (bits - 5)) & 31];
21
- bits -= 5;
22
- }
23
- }
24
- if (bits)
25
- encoded += BASE32_ALPHABET[(buffer << (5 - bits)) & 31];
26
- return encoded;
27
- }
28
- function decodeTaskNamePayload(encoded) {
29
- let buffer = 0;
30
- let bits = 0;
31
- const bytes = [];
32
- for (const character of encoded) {
33
- const value = BASE32_ALPHABET.indexOf(character);
34
- if (value < 0)
35
- return null;
36
- buffer = (buffer << 5) | value;
37
- bits += 5;
38
- if (bits >= 8) {
39
- bytes.push((buffer >>> (bits - 8)) & 255);
40
- bits -= 8;
41
- }
42
- }
43
- if (bits && (buffer & ((1 << bits) - 1)) !== 0)
44
- return null;
45
- const decoded = Buffer.from(bytes).toString('utf8');
46
- return encodeTaskNamePayload(decoded) === encoded ? decoded : null;
47
- }
48
- function encodeCodexLifecycleBinding(binding) {
49
- if (!TASK_ID_PATTERN.test(binding.taskId)
50
- || !SAFE_ID_PATTERN.test(binding.runId)
51
- || !SAFE_ID_PATTERN.test(binding.receiptId)) {
52
- throw new Error('Codex lifecycle task binding is invalid');
53
- }
54
- return `${MARKER_PREFIX}${encodeTaskNamePayload(JSON.stringify(binding))}`;
55
- }
56
- function appendCodexLifecycleBinding(label, binding) {
57
- if (!SAFE_LABEL_PATTERN.test(label))
58
- throw new Error('Codex task_name label is invalid');
59
- const taskName = `${label}${encodeCodexLifecycleBinding(binding)}`;
60
- assertSafeTaskName(taskName);
61
- return taskName;
62
- }
63
- function parseCodexLifecycleBinding(taskName) {
64
- assertSafeTaskName(taskName);
65
- const markerIndex = taskName.lastIndexOf(MARKER_PREFIX);
66
- if (markerIndex < 1)
67
- return null;
68
- const label = taskName.slice(0, markerIndex);
69
- const encoded = taskName.slice(markerIndex + MARKER_PREFIX.length);
70
- if (!SAFE_LABEL_PATTERN.test(label) || !/^[a-z2-7]+$/u.test(encoded))
71
- return null;
72
- try {
73
- const decoded = decodeTaskNamePayload(encoded);
74
- if (!decoded)
75
- return null;
76
- const value = JSON.parse(decoded);
77
- if (Object.keys(value).sort().join(',') !== 'receiptId,runId,taskId'
78
- || typeof value.taskId !== 'string' || !TASK_ID_PATTERN.test(value.taskId)
79
- || typeof value.runId !== 'string' || !SAFE_ID_PATTERN.test(value.runId)
80
- || typeof value.receiptId !== 'string' || !SAFE_ID_PATTERN.test(value.receiptId))
81
- return null;
82
- return Object.freeze({
83
- taskName,
84
- label,
85
- binding: Object.freeze({ taskId: value.taskId, runId: value.runId, receiptId: value.receiptId })
86
- });
87
- }
88
- catch {
89
- return null;
90
- }
91
- }
92
- function verifyCodexLifecycleTaskBinding(binding, run, nativeAgent, expected = {}) {
93
- if (!codexReceiptMatchesBinding(binding, run, nativeAgent, expected)) {
94
- throw new Error('Codex lifecycle task binding does not match the current pending receipt');
95
- }
96
- }
97
- function codexReceiptMatchesBinding(binding, run, nativeAgent, expected) {
98
- const receipt = run.pendingDelegation;
99
- return Boolean(receipt)
100
- && run.status === 'running'
101
- && run.runId === binding.runId
102
- && receipt.runId === binding.runId
103
- && receipt.id === binding.receiptId
104
- && receipt.client === 'codex'
105
- && receipt.status === 'prepared'
106
- && managedDelegationRole(nativeAgent) === receipt.role
107
- && requestedBindingMatches(receipt, expected);
108
- }
109
- function requestedBindingMatches(receipt, expected) {
110
- return (!expected.requestedModel || receipt.requestedModel === expected.requestedModel)
111
- && (!expected.requestedReasoningEffort || receipt.requestedReasoningEffort === expected.requestedReasoningEffort);
112
- }
113
- export { appendCodexLifecycleBinding, encodeCodexLifecycleBinding, parseCodexLifecycleBinding, verifyCodexLifecycleTaskBinding };
114
- //# sourceMappingURL=binding.js.map
@@ -1,237 +0,0 @@
1
- import crypto from 'node:crypto';
2
- import fs from 'node:fs';
3
- import path from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
- import semver from 'semver';
6
- const LIFECYCLE_PROTOCOL_VERSION = 3;
7
- function exactText(value) {
8
- return typeof value === 'string' && value.trim() === value && value.length > 0;
9
- }
10
- function isCanonicalLifecyclePackageVersion(value) {
11
- return typeof value === 'string' && semver.valid(value) === value;
12
- }
13
- function isLifecycleProtocolVersion(value) {
14
- return value === LIFECYCLE_PROTOCOL_VERSION;
15
- }
16
- function normalizeRelativePath(value) {
17
- return value.replaceAll('\\', '/');
18
- }
19
- function isSafeLifecyclePath(value) {
20
- return exactText(value)
21
- && value === normalizeRelativePath(value)
22
- && !path.isAbsolute(value)
23
- && !/^[A-Za-z]:[\\/]/u.test(value)
24
- && !value.split('/').includes('..');
25
- }
26
- function isLifecycleLauncherLine(value) {
27
- return typeof value === 'string'
28
- && value.length > 1
29
- && value.slice(0, -1).trim() === value.slice(0, -1)
30
- && value.startsWith('#!')
31
- && value.endsWith('\n')
32
- && value.indexOf('\n') === value.length - 1
33
- && !value.includes('\r');
34
- }
35
- function readLifecycleLauncherShebang(value, executableFiles) {
36
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
37
- throw new Error('Lifecycle manifest launcher shebang policy is invalid');
38
- }
39
- const policy = value;
40
- if (!isSafeLifecyclePath(policy.sourceFile)
41
- || !isSafeLifecyclePath(policy.compiledFile)
42
- || !isLifecycleLauncherLine(policy.canonicalLine)
43
- || !Array.isArray(policy.acceptedLines)
44
- || !policy.acceptedLines.every(isLifecycleLauncherLine)
45
- || new Set(policy.acceptedLines).size !== policy.acceptedLines.length
46
- || !policy.acceptedLines.includes(policy.canonicalLine)
47
- || !executableFiles.includes(policy.sourceFile)
48
- || policy.compiledFile !== normalizeRelativePath(path.join('dist', policy.sourceFile.endsWith('.ts')
49
- ? policy.sourceFile.replace(/\.ts$/u, '.js')
50
- : policy.sourceFile))) {
51
- throw new Error('Lifecycle manifest launcher shebang policy is invalid');
52
- }
53
- return Object.freeze({
54
- sourceFile: policy.sourceFile,
55
- compiledFile: policy.compiledFile,
56
- canonicalLine: policy.canonicalLine,
57
- acceptedLines: Object.freeze([...policy.acceptedLines])
58
- });
59
- }
60
- function readLifecycleManifestFiles(packageRoot) {
61
- const file = path.join(packageRoot, 'lib', 'agent-clients', 'adapters', 'codex-lifecycle', 'manifest-files.json');
62
- const value = JSON.parse(fs.readFileSync(file, 'utf8'));
63
- if (!Array.isArray(value.executableFiles)
64
- || !Array.isArray(value.contractFiles)
65
- || !value.executableFiles.every(isSafeLifecyclePath)
66
- || !value.contractFiles.every(isSafeLifecyclePath)
67
- || new Set(value.executableFiles).size !== value.executableFiles.length
68
- || new Set(value.contractFiles).size !== value.contractFiles.length) {
69
- throw new Error('Lifecycle manifest file list is invalid');
70
- }
71
- const executableFiles = Object.freeze([...value.executableFiles]);
72
- return Object.freeze({
73
- executableFiles,
74
- contractFiles: Object.freeze([...value.contractFiles]),
75
- launcherShebang: readLifecycleLauncherShebang(value.launcherShebang, executableFiles)
76
- });
77
- }
78
- function executablePackageRoot() {
79
- let current = path.dirname(fileURLToPath(import.meta.url));
80
- while (true) {
81
- const candidate = path.join(current, 'package.json');
82
- if (fs.existsSync(candidate)) {
83
- const value = JSON.parse(fs.readFileSync(candidate, 'utf8'));
84
- if (value.name === '@fitlab-ai/agent-infra')
85
- return current;
86
- }
87
- const parent = path.dirname(current);
88
- if (parent === current)
89
- throw new Error('Lifecycle executable package root is unavailable');
90
- current = parent;
91
- }
92
- }
93
- function normalizeLifecycleLauncherBytes(relative, content, policy) {
94
- const normalized = normalizeRelativePath(relative);
95
- if (normalized !== policy.sourceFile && normalized !== policy.compiledFile)
96
- return content;
97
- const lineEnd = content.indexOf(0x0a);
98
- if (lineEnd < 0)
99
- return content;
100
- const firstLine = content.subarray(0, lineEnd + 1);
101
- if (!policy.acceptedLines.some((line) => Buffer.from(line).equals(firstLine)))
102
- return content;
103
- return Buffer.concat([
104
- Buffer.from(policy.canonicalLine),
105
- content.subarray(lineEnd + 1)
106
- ]);
107
- }
108
- function hashFiles(root, files, launcherShebang) {
109
- const hash = crypto.createHash('sha256');
110
- for (const relative of [...new Set(files.map(normalizeRelativePath))].sort()) {
111
- if (path.isAbsolute(relative) || relative.split(/[\\/]/u).includes('..')) {
112
- throw new Error(`Lifecycle manifest path '${relative}' is unsafe`);
113
- }
114
- const file = path.join(root, relative);
115
- const stat = fs.lstatSync(file);
116
- if (!stat.isFile() || stat.isSymbolicLink()) {
117
- throw new Error(`Lifecycle manifest entry '${relative}' must be a regular file`);
118
- }
119
- hash.update(relative);
120
- hash.update('\0');
121
- const content = fs.readFileSync(file);
122
- hash.update(launcherShebang
123
- ? normalizeLifecycleLauncherBytes(relative, content, launcherShebang)
124
- : content);
125
- hash.update('\0');
126
- }
127
- return hash.digest('hex');
128
- }
129
- function resolveLifecycleExecutableFiles(root, entries) {
130
- const pending = [...entries];
131
- const resolved = new Set();
132
- while (pending.length > 0) {
133
- const relative = normalizeRelativePath(pending.pop());
134
- if (resolved.has(relative))
135
- continue;
136
- resolved.add(relative);
137
- if (!/\.[cm]?[jt]s$/u.test(relative))
138
- continue;
139
- const file = path.join(root, relative);
140
- const source = fs.readFileSync(file, 'utf8');
141
- const imports = source.matchAll(/(?:\bfrom\s*|\bimport\s*(?:\(\s*)?)["'](\.[^"']+)["']/gu);
142
- for (const match of imports) {
143
- const requested = match[1];
144
- const base = path.resolve(path.dirname(file), requested);
145
- const candidates = [
146
- base,
147
- `${base}.ts`, `${base}.js`,
148
- path.join(base, 'index.ts'), path.join(base, 'index.js')
149
- ];
150
- const dependency = candidates.find((candidate) => fs.existsSync(candidate) && fs.lstatSync(candidate).isFile());
151
- if (!dependency)
152
- throw new Error(`Lifecycle executable dependency '${requested}' from '${relative}' is unavailable`);
153
- const dependencyRelative = path.relative(root, dependency);
154
- if (dependencyRelative.startsWith('..') || path.isAbsolute(dependencyRelative)) {
155
- throw new Error(`Lifecycle executable dependency '${requested}' escapes the package root`);
156
- }
157
- pending.push(normalizeRelativePath(dependencyRelative));
158
- }
159
- }
160
- return [...resolved].sort();
161
- }
162
- function computeLifecycleBuildIdentity(repoRoot, options = {}) {
163
- const packageRoot = executablePackageRoot();
164
- const executableRoot = options.executableFiles ? repoRoot : packageRoot;
165
- const defaults = readLifecycleManifestFiles(packageRoot);
166
- const packageJson = JSON.parse(fs.readFileSync(path.join(executableRoot, 'package.json'), 'utf8'));
167
- if (!exactText(packageJson.version))
168
- throw new Error('Lifecycle package version is invalid');
169
- let internalExecutableBuildHash;
170
- if (options.executableFiles) {
171
- internalExecutableBuildHash = hashFiles(repoRoot, options.executableFiles, defaults.launcherShebang);
172
- }
173
- else {
174
- const manifestFile = path.join(executableRoot, 'dist', 'lifecycle-build-manifest.json');
175
- if (fs.existsSync(manifestFile)) {
176
- const manifest = JSON.parse(fs.readFileSync(manifestFile, 'utf8'));
177
- if (manifest.protocolVersion !== LIFECYCLE_PROTOCOL_VERSION
178
- || manifest.packageVersion !== packageJson.version
179
- || !exactText(manifest.sourceInputHash)
180
- || !exactText(manifest.internalExecutableBuildHash)) {
181
- throw new Error('Lifecycle executable build manifest is stale or invalid');
182
- }
183
- if (fileURLToPath(import.meta.url).split(path.sep).includes('dist')) {
184
- const compiledFiles = defaults.executableFiles.map((file) => file.endsWith('.ts') ? path.join('dist', file.replace(/\.ts$/u, '.js')) : file);
185
- if (hashFiles(executableRoot, resolveLifecycleExecutableFiles(executableRoot, compiledFiles), defaults.launcherShebang) !== manifest.internalExecutableBuildHash) {
186
- throw new Error('Lifecycle compiled executable build does not match its manifest');
187
- }
188
- }
189
- else if (hashFiles(executableRoot, resolveLifecycleExecutableFiles(executableRoot, defaults.executableFiles), defaults.launcherShebang) !== manifest.sourceInputHash) {
190
- throw new Error('Lifecycle executable build manifest is stale or invalid');
191
- }
192
- internalExecutableBuildHash = manifest.internalExecutableBuildHash;
193
- }
194
- else
195
- internalExecutableBuildHash = hashFiles(executableRoot, resolveLifecycleExecutableFiles(executableRoot, defaults.executableFiles), defaults.launcherShebang);
196
- }
197
- return Object.freeze({
198
- protocolVersion: LIFECYCLE_PROTOCOL_VERSION,
199
- packageVersion: packageJson.version,
200
- internalExecutableBuildHash,
201
- lifecycleContractHash: hashFiles(repoRoot, options.contractFiles ?? defaults.contractFiles)
202
- });
203
- }
204
- function verifyLifecycleBuildIdentity(expected, actual) {
205
- if (actual.protocolVersion !== expected.protocolVersion) {
206
- return {
207
- ok: false,
208
- code: 'CODEX_LIFECYCLE_PROTOCOL_MISMATCH',
209
- message: 'Codex lifecycle protocol version does not match',
210
- warnings: []
211
- };
212
- }
213
- const warnings = [];
214
- if (actual.packageVersion !== expected.packageVersion
215
- || actual.internalExecutableBuildHash !== expected.internalExecutableBuildHash) {
216
- warnings.push({
217
- code: 'CODEX_LIFECYCLE_BUILD_MISMATCH',
218
- message: 'Codex lifecycle executable build identity differs; rebuild the sandbox if the runtime is stale',
219
- action: 'rebuild-sandbox'
220
- });
221
- }
222
- if (actual.lifecycleContractHash !== expected.lifecycleContractHash) {
223
- warnings.push({
224
- code: 'CODEX_LIFECYCLE_CONTRACT_MISMATCH',
225
- message: 'Codex lifecycle contract identity differs; rebuild the sandbox if the runtime is stale',
226
- action: 'rebuild-sandbox'
227
- });
228
- }
229
- return {
230
- ok: true,
231
- code: null,
232
- message: null,
233
- warnings: Object.freeze(warnings)
234
- };
235
- }
236
- export { LIFECYCLE_PROTOCOL_VERSION, computeLifecycleBuildIdentity, isCanonicalLifecyclePackageVersion, isLifecycleProtocolVersion, readLifecycleManifestFiles, resolveLifecycleExecutableFiles, verifyLifecycleBuildIdentity };
237
- //# sourceMappingURL=build-identity.js.map