p-dev-harness 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2294) hide show
  1. package/README.md +24 -5
  2. package/dist/agents/cursor-provider.d.ts.map +1 -1
  3. package/dist/agents/cursor-provider.js +9 -8
  4. package/dist/agents/cursor-provider.js.map +1 -1
  5. package/dist/agents/index.d.ts +3 -4
  6. package/dist/agents/index.d.ts.map +1 -1
  7. package/dist/agents/index.js +2 -5
  8. package/dist/agents/index.js.map +1 -1
  9. package/dist/agents/types.d.ts +36 -2
  10. package/dist/agents/types.d.ts.map +1 -1
  11. package/dist/artifacts/redact.d.ts +2 -0
  12. package/dist/artifacts/redact.d.ts.map +1 -1
  13. package/dist/artifacts/redact.js +15 -1
  14. package/dist/artifacts/redact.js.map +1 -1
  15. package/dist/artifacts/write-json-out-manifest.d.ts +17 -0
  16. package/dist/artifacts/write-json-out-manifest.d.ts.map +1 -0
  17. package/dist/artifacts/write-json-out-manifest.js +68 -0
  18. package/dist/artifacts/write-json-out-manifest.js.map +1 -0
  19. package/dist/cli/commands/canary-runner-config.d.ts +2 -0
  20. package/dist/cli/commands/canary-runner-config.d.ts.map +1 -0
  21. package/dist/cli/commands/canary-runner-config.js +6 -0
  22. package/dist/cli/commands/canary-runner-config.js.map +1 -0
  23. package/dist/cli/commands/doctor.d.ts.map +1 -1
  24. package/dist/cli/commands/doctor.js +129 -0
  25. package/dist/cli/commands/doctor.js.map +1 -1
  26. package/dist/cli/commands/resolve-route.d.ts.map +1 -1
  27. package/dist/cli/commands/resolve-route.js +5 -0
  28. package/dist/cli/commands/resolve-route.js.map +1 -1
  29. package/dist/cli/commands/run.d.ts +1 -0
  30. package/dist/cli/commands/run.d.ts.map +1 -1
  31. package/dist/cli/commands/run.js +54 -12
  32. package/dist/cli/commands/run.js.map +1 -1
  33. package/dist/cli/commands/sync-managed-runner.d.ts +7 -0
  34. package/dist/cli/commands/sync-managed-runner.d.ts.map +1 -0
  35. package/dist/cli/commands/sync-managed-runner.js +89 -0
  36. package/dist/cli/commands/sync-managed-runner.js.map +1 -0
  37. package/dist/cli/program.d.ts.map +1 -1
  38. package/dist/cli/program.js +27 -0
  39. package/dist/cli/program.js.map +1 -1
  40. package/dist/config/assert-cloud-config-fingerprint.d.ts +10 -0
  41. package/dist/config/assert-cloud-config-fingerprint.d.ts.map +1 -0
  42. package/dist/config/assert-cloud-config-fingerprint.js +26 -0
  43. package/dist/config/assert-cloud-config-fingerprint.js.map +1 -0
  44. package/dist/config/cloud-config-fingerprint.d.ts +26 -0
  45. package/dist/config/cloud-config-fingerprint.d.ts.map +1 -0
  46. package/dist/config/cloud-config-fingerprint.js +64 -0
  47. package/dist/config/cloud-config-fingerprint.js.map +1 -0
  48. package/dist/config/legacy-linear-top-level.d.ts +16 -0
  49. package/dist/config/legacy-linear-top-level.d.ts.map +1 -0
  50. package/dist/config/legacy-linear-top-level.js +42 -0
  51. package/dist/config/legacy-linear-top-level.js.map +1 -0
  52. package/dist/config/linear-association-gate.d.ts +26 -0
  53. package/dist/config/linear-association-gate.d.ts.map +1 -0
  54. package/dist/config/linear-association-gate.js +46 -0
  55. package/dist/config/linear-association-gate.js.map +1 -0
  56. package/dist/config/resolve-linear-team.d.ts +10 -0
  57. package/dist/config/resolve-linear-team.d.ts.map +1 -0
  58. package/dist/config/resolve-linear-team.js +24 -0
  59. package/dist/config/resolve-linear-team.js.map +1 -0
  60. package/dist/config/resolve-linear-workspace.d.ts +83 -0
  61. package/dist/config/resolve-linear-workspace.d.ts.map +1 -0
  62. package/dist/config/resolve-linear-workspace.js +244 -0
  63. package/dist/config/resolve-linear-workspace.js.map +1 -0
  64. package/dist/config/role-models.d.ts +160 -0
  65. package/dist/config/role-models.d.ts.map +1 -0
  66. package/dist/config/role-models.js +31 -0
  67. package/dist/config/role-models.js.map +1 -0
  68. package/dist/config/runner-upgrade-sync-gate.d.ts +10 -0
  69. package/dist/config/runner-upgrade-sync-gate.d.ts.map +1 -0
  70. package/dist/config/runner-upgrade-sync-gate.js +24 -0
  71. package/dist/config/runner-upgrade-sync-gate.js.map +1 -0
  72. package/dist/config/schema.d.ts +266 -0
  73. package/dist/config/schema.d.ts.map +1 -1
  74. package/dist/config/schema.js +14 -0
  75. package/dist/config/schema.js.map +1 -1
  76. package/dist/config/types.d.ts +1 -1
  77. package/dist/config/types.d.ts.map +1 -1
  78. package/dist/config/workspace-root.d.ts +7 -0
  79. package/dist/config/workspace-root.d.ts.map +1 -0
  80. package/dist/config/workspace-root.js +21 -0
  81. package/dist/config/workspace-root.js.map +1 -0
  82. package/dist/cursor/agent-factory.d.ts +8 -0
  83. package/dist/cursor/agent-factory.d.ts.map +1 -1
  84. package/dist/cursor/agent-factory.js +34 -5
  85. package/dist/cursor/agent-factory.js.map +1 -1
  86. package/dist/cursor/builder-resume-errors.d.ts +3 -0
  87. package/dist/cursor/builder-resume-errors.d.ts.map +1 -0
  88. package/dist/cursor/builder-resume-errors.js +32 -0
  89. package/dist/cursor/builder-resume-errors.js.map +1 -0
  90. package/dist/cursor/model.d.ts +18 -22
  91. package/dist/cursor/model.d.ts.map +1 -1
  92. package/dist/cursor/model.js +73 -25
  93. package/dist/cursor/model.js.map +1 -1
  94. package/dist/cursor/run-observer.d.ts +8 -1
  95. package/dist/cursor/run-observer.d.ts.map +1 -1
  96. package/dist/cursor/run-observer.js +9 -1
  97. package/dist/cursor/run-observer.js.map +1 -1
  98. package/dist/github/auth-verification-retry.d.ts +12 -0
  99. package/dist/github/auth-verification-retry.d.ts.map +1 -0
  100. package/dist/github/auth-verification-retry.js +47 -0
  101. package/dist/github/auth-verification-retry.js.map +1 -0
  102. package/dist/github/client.d.ts +140 -4
  103. package/dist/github/client.d.ts.map +1 -1
  104. package/dist/github/client.js +205 -13
  105. package/dist/github/client.js.map +1 -1
  106. package/dist/github/rate-limit-metadata.d.ts +16 -0
  107. package/dist/github/rate-limit-metadata.d.ts.map +1 -0
  108. package/dist/github/rate-limit-metadata.js +73 -0
  109. package/dist/github/rate-limit-metadata.js.map +1 -0
  110. package/dist/gui/configure-health.js +2 -2
  111. package/dist/gui/configure-health.js.map +1 -1
  112. package/dist/gui/repo-root.d.ts +3 -0
  113. package/dist/gui/repo-root.d.ts.map +1 -1
  114. package/dist/gui/repo-root.js +16 -1
  115. package/dist/gui/repo-root.js.map +1 -1
  116. package/dist/gui/start-configure-stable.js +6 -2
  117. package/dist/gui/start-configure-stable.js.map +1 -1
  118. package/dist/gui/start-gui.js +7 -3
  119. package/dist/gui/start-gui.js.map +1 -1
  120. package/dist/linear/client.d.ts +4 -0
  121. package/dist/linear/client.d.ts.map +1 -1
  122. package/dist/linear/client.js +7 -0
  123. package/dist/linear/client.js.map +1 -1
  124. package/dist/linear/comments.d.ts +9 -0
  125. package/dist/linear/comments.d.ts.map +1 -1
  126. package/dist/linear/comments.js +34 -0
  127. package/dist/linear/comments.js.map +1 -1
  128. package/dist/linear/issue-query.d.ts +1 -0
  129. package/dist/linear/issue-query.d.ts.map +1 -1
  130. package/dist/linear/issue-query.js +3 -0
  131. package/dist/linear/issue-query.js.map +1 -1
  132. package/dist/linear/markers.d.ts +7 -0
  133. package/dist/linear/markers.d.ts.map +1 -1
  134. package/dist/linear/markers.js +21 -0
  135. package/dist/linear/markers.js.map +1 -1
  136. package/dist/linear/parser.d.ts +2 -1
  137. package/dist/linear/parser.d.ts.map +1 -1
  138. package/dist/linear/parser.js +46 -0
  139. package/dist/linear/parser.js.map +1 -1
  140. package/dist/linear/project-harness-metadata.d.ts +10 -0
  141. package/dist/linear/project-harness-metadata.d.ts.map +1 -0
  142. package/dist/linear/project-harness-metadata.js +109 -0
  143. package/dist/linear/project-harness-metadata.js.map +1 -0
  144. package/dist/linear/project-metadata-sync.d.ts +29 -0
  145. package/dist/linear/project-metadata-sync.d.ts.map +1 -0
  146. package/dist/linear/project-metadata-sync.js +64 -0
  147. package/dist/linear/project-metadata-sync.js.map +1 -0
  148. package/dist/linear/run-status-comment.d.ts +49 -0
  149. package/dist/linear/run-status-comment.d.ts.map +1 -0
  150. package/dist/linear/run-status-comment.js +118 -0
  151. package/dist/linear/run-status-comment.js.map +1 -0
  152. package/dist/linear/writer.d.ts +8 -0
  153. package/dist/linear/writer.d.ts.map +1 -1
  154. package/dist/linear/writer.js +13 -0
  155. package/dist/linear/writer.js.map +1 -1
  156. package/dist/observability/adapters/fake.d.ts +17 -0
  157. package/dist/observability/adapters/fake.d.ts.map +1 -0
  158. package/dist/observability/adapters/fake.js +205 -0
  159. package/dist/observability/adapters/fake.js.map +1 -0
  160. package/dist/observability/adapters/noop.d.ts +5 -0
  161. package/dist/observability/adapters/noop.d.ts.map +1 -0
  162. package/dist/observability/adapters/noop.js +51 -0
  163. package/dist/observability/adapters/noop.js.map +1 -0
  164. package/dist/observability/adapters/posthog.d.ts +12 -0
  165. package/dist/observability/adapters/posthog.d.ts.map +1 -0
  166. package/dist/observability/adapters/posthog.js +142 -0
  167. package/dist/observability/adapters/posthog.js.map +1 -0
  168. package/dist/observability/adapters/sentry.d.ts +12 -0
  169. package/dist/observability/adapters/sentry.d.ts.map +1 -0
  170. package/dist/observability/adapters/sentry.js +217 -0
  171. package/dist/observability/adapters/sentry.js.map +1 -0
  172. package/dist/observability/analytics-schemas.d.ts +59 -0
  173. package/dist/observability/analytics-schemas.d.ts.map +1 -0
  174. package/dist/observability/analytics-schemas.js +119 -0
  175. package/dist/observability/analytics-schemas.js.map +1 -0
  176. package/dist/observability/consent.d.ts +14 -0
  177. package/dist/observability/consent.d.ts.map +1 -0
  178. package/dist/observability/consent.js +35 -0
  179. package/dist/observability/consent.js.map +1 -0
  180. package/dist/observability/constants.d.ts +18 -0
  181. package/dist/observability/constants.d.ts.map +1 -0
  182. package/dist/observability/constants.js +18 -0
  183. package/dist/observability/constants.js.map +1 -0
  184. package/dist/observability/context.d.ts +21 -0
  185. package/dist/observability/context.d.ts.map +1 -0
  186. package/dist/observability/context.js +105 -0
  187. package/dist/observability/context.js.map +1 -0
  188. package/dist/observability/facade-runtime-state.d.ts +17 -0
  189. package/dist/observability/facade-runtime-state.d.ts.map +1 -0
  190. package/dist/observability/facade-runtime-state.js +23 -0
  191. package/dist/observability/facade-runtime-state.js.map +1 -0
  192. package/dist/observability/facade.d.ts +44 -0
  193. package/dist/observability/facade.d.ts.map +1 -0
  194. package/dist/observability/facade.js +432 -0
  195. package/dist/observability/facade.js.map +1 -0
  196. package/dist/observability/fatal-handlers.d.ts +4 -0
  197. package/dist/observability/fatal-handlers.d.ts.map +1 -0
  198. package/dist/observability/fatal-handlers.js +54 -0
  199. package/dist/observability/fatal-handlers.js.map +1 -0
  200. package/dist/observability/identity.d.ts +4 -0
  201. package/dist/observability/identity.d.ts.map +1 -0
  202. package/dist/observability/identity.js +11 -0
  203. package/dist/observability/identity.js.map +1 -0
  204. package/dist/observability/index.d.ts +9 -0
  205. package/dist/observability/index.d.ts.map +1 -0
  206. package/dist/observability/index.js +6 -0
  207. package/dist/observability/index.js.map +1 -0
  208. package/dist/observability/local-state.d.ts +14 -0
  209. package/dist/observability/local-state.d.ts.map +1 -0
  210. package/dist/observability/local-state.js +107 -0
  211. package/dist/observability/local-state.js.map +1 -0
  212. package/dist/observability/package-config.d.ts +11 -0
  213. package/dist/observability/package-config.d.ts.map +1 -0
  214. package/dist/observability/package-config.js +117 -0
  215. package/dist/observability/package-config.js.map +1 -0
  216. package/dist/observability/posthog-dashboard-contract.d.ts +46 -0
  217. package/dist/observability/posthog-dashboard-contract.d.ts.map +1 -0
  218. package/dist/observability/posthog-dashboard-contract.js +200 -0
  219. package/dist/observability/posthog-dashboard-contract.js.map +1 -0
  220. package/dist/observability/privacy-schema.d.ts +13 -0
  221. package/dist/observability/privacy-schema.d.ts.map +1 -0
  222. package/dist/observability/privacy-schema.js +204 -0
  223. package/dist/observability/privacy-schema.js.map +1 -0
  224. package/dist/observability/product-error-messages.d.ts +2 -0
  225. package/dist/observability/product-error-messages.d.ts.map +1 -0
  226. package/dist/observability/product-error-messages.js +15 -0
  227. package/dist/observability/product-error-messages.js.map +1 -0
  228. package/dist/observability/product-errors.d.ts +12 -0
  229. package/dist/observability/product-errors.d.ts.map +1 -0
  230. package/dist/observability/product-errors.js +109 -0
  231. package/dist/observability/product-errors.js.map +1 -0
  232. package/dist/observability/provisioning-analytics.d.ts +12 -0
  233. package/dist/observability/provisioning-analytics.d.ts.map +1 -0
  234. package/dist/observability/provisioning-analytics.js +11 -0
  235. package/dist/observability/provisioning-analytics.js.map +1 -0
  236. package/dist/observability/redaction.d.ts +10 -0
  237. package/dist/observability/redaction.d.ts.map +1 -0
  238. package/dist/observability/redaction.js +72 -0
  239. package/dist/observability/redaction.js.map +1 -0
  240. package/dist/observability/runtime-eligibility.d.ts +6 -0
  241. package/dist/observability/runtime-eligibility.d.ts.map +1 -0
  242. package/dist/observability/runtime-eligibility.js +33 -0
  243. package/dist/observability/runtime-eligibility.js.map +1 -0
  244. package/dist/observability/sentry-outbound-privacy.d.ts +12 -0
  245. package/dist/observability/sentry-outbound-privacy.d.ts.map +1 -0
  246. package/dist/observability/sentry-outbound-privacy.js +168 -0
  247. package/dist/observability/sentry-outbound-privacy.js.map +1 -0
  248. package/dist/observability/session-dedupe.d.ts +8 -0
  249. package/dist/observability/session-dedupe.d.ts.map +1 -0
  250. package/dist/observability/session-dedupe.js +42 -0
  251. package/dist/observability/session-dedupe.js.map +1 -0
  252. package/dist/observability/session-handoff.d.ts +10 -0
  253. package/dist/observability/session-handoff.d.ts.map +1 -0
  254. package/dist/observability/session-handoff.js +25 -0
  255. package/dist/observability/session-handoff.js.map +1 -0
  256. package/dist/observability/transport-lifecycle.d.ts +20 -0
  257. package/dist/observability/transport-lifecycle.d.ts.map +1 -0
  258. package/dist/observability/transport-lifecycle.js +69 -0
  259. package/dist/observability/transport-lifecycle.js.map +1 -0
  260. package/dist/observability/types.d.ts +189 -0
  261. package/dist/observability/types.d.ts.map +1 -0
  262. package/dist/observability/types.js +2 -0
  263. package/dist/observability/types.js.map +1 -0
  264. package/dist/p-dev/cli.d.ts +1 -1
  265. package/dist/p-dev/cli.d.ts.map +1 -1
  266. package/dist/p-dev/cli.js +1 -1
  267. package/dist/p-dev/cli.js.map +1 -1
  268. package/dist/p-dev/git-object-plumbing.d.ts +39 -0
  269. package/dist/p-dev/git-object-plumbing.d.ts.map +1 -0
  270. package/dist/p-dev/git-object-plumbing.js +289 -0
  271. package/dist/p-dev/git-object-plumbing.js.map +1 -0
  272. package/dist/p-dev/launch.d.ts.map +1 -1
  273. package/dist/p-dev/launch.js +77 -15
  274. package/dist/p-dev/launch.js.map +1 -1
  275. package/dist/p-dev/main.js +9 -1
  276. package/dist/p-dev/main.js.map +1 -1
  277. package/dist/p-dev/package-paths.d.ts +13 -0
  278. package/dist/p-dev/package-paths.d.ts.map +1 -1
  279. package/dist/p-dev/package-paths.js +51 -2
  280. package/dist/p-dev/package-paths.js.map +1 -1
  281. package/dist/p-dev/workspace-snapshot-digest.d.ts +12 -0
  282. package/dist/p-dev/workspace-snapshot-digest.d.ts.map +1 -0
  283. package/dist/p-dev/workspace-snapshot-digest.js +34 -0
  284. package/dist/p-dev/workspace-snapshot-digest.js.map +1 -0
  285. package/dist/p-dev/workspace-snapshot-generator.d.ts +15 -0
  286. package/dist/p-dev/workspace-snapshot-generator.d.ts.map +1 -0
  287. package/dist/p-dev/workspace-snapshot-generator.js +87 -0
  288. package/dist/p-dev/workspace-snapshot-generator.js.map +1 -0
  289. package/dist/p-dev/workspace-snapshot-git.d.ts +26 -0
  290. package/dist/p-dev/workspace-snapshot-git.d.ts.map +1 -0
  291. package/dist/p-dev/workspace-snapshot-git.js +151 -0
  292. package/dist/p-dev/workspace-snapshot-git.js.map +1 -0
  293. package/dist/p-dev/workspace-snapshot-manifest.d.ts +18 -0
  294. package/dist/p-dev/workspace-snapshot-manifest.d.ts.map +1 -0
  295. package/dist/p-dev/workspace-snapshot-manifest.js +340 -0
  296. package/dist/p-dev/workspace-snapshot-manifest.js.map +1 -0
  297. package/dist/p-dev/workspace-snapshot-policy.d.ts +16 -0
  298. package/dist/p-dev/workspace-snapshot-policy.d.ts.map +1 -0
  299. package/dist/p-dev/workspace-snapshot-policy.js +168 -0
  300. package/dist/p-dev/workspace-snapshot-policy.js.map +1 -0
  301. package/dist/p-dev/workspace-snapshot-types.d.ts +62 -0
  302. package/dist/p-dev/workspace-snapshot-types.d.ts.map +1 -0
  303. package/dist/p-dev/workspace-snapshot-types.js +7 -0
  304. package/dist/p-dev/workspace-snapshot-types.js.map +1 -0
  305. package/dist/p-dev/workspace-snapshot-validation.d.ts +17 -0
  306. package/dist/p-dev/workspace-snapshot-validation.d.ts.map +1 -0
  307. package/dist/p-dev/workspace-snapshot-validation.js +115 -0
  308. package/dist/p-dev/workspace-snapshot-validation.js.map +1 -0
  309. package/dist/preview/preview-capability.d.ts +9 -0
  310. package/dist/preview/preview-capability.d.ts.map +1 -0
  311. package/dist/preview/preview-capability.js +15 -0
  312. package/dist/preview/preview-capability.js.map +1 -0
  313. package/dist/product/initialization-state.d.ts +15 -0
  314. package/dist/product/initialization-state.d.ts.map +1 -0
  315. package/dist/product/initialization-state.js +37 -0
  316. package/dist/product/initialization-state.js.map +1 -0
  317. package/dist/product/product-marker.d.ts +77 -0
  318. package/dist/product/product-marker.d.ts.map +1 -0
  319. package/dist/product/product-marker.js +62 -0
  320. package/dist/product/product-marker.js.map +1 -0
  321. package/dist/product/read-product-marker.d.ts +15 -0
  322. package/dist/product/read-product-marker.d.ts.map +1 -0
  323. package/dist/product/read-product-marker.js +28 -0
  324. package/dist/product/read-product-marker.js.map +1 -0
  325. package/dist/prompts/builder.d.ts +10 -1
  326. package/dist/prompts/builder.d.ts.map +1 -1
  327. package/dist/prompts/builder.js +16 -2
  328. package/dist/prompts/builder.js.map +1 -1
  329. package/dist/resolver/errors.d.ts +1 -1
  330. package/dist/resolver/errors.d.ts.map +1 -1
  331. package/dist/resolver/errors.js.map +1 -1
  332. package/dist/resolver/target-repo.d.ts +4 -1
  333. package/dist/resolver/target-repo.d.ts.map +1 -1
  334. package/dist/resolver/target-repo.js +40 -0
  335. package/dist/resolver/target-repo.js.map +1 -1
  336. package/dist/runner/builder-thread-acquire.d.ts +41 -0
  337. package/dist/runner/builder-thread-acquire.d.ts.map +1 -0
  338. package/dist/runner/builder-thread-acquire.js +224 -0
  339. package/dist/runner/builder-thread-acquire.js.map +1 -0
  340. package/dist/runner/builder-thread-evidence.d.ts +13 -0
  341. package/dist/runner/builder-thread-evidence.d.ts.map +1 -0
  342. package/dist/runner/builder-thread-evidence.js +23 -0
  343. package/dist/runner/builder-thread-evidence.js.map +1 -0
  344. package/dist/runner/builder-thread-idempotency.d.ts +17 -0
  345. package/dist/runner/builder-thread-idempotency.d.ts.map +1 -0
  346. package/dist/runner/builder-thread-idempotency.js +12 -0
  347. package/dist/runner/builder-thread-idempotency.js.map +1 -0
  348. package/dist/runner/builder-thread-lineage-errors.d.ts +7 -0
  349. package/dist/runner/builder-thread-lineage-errors.d.ts.map +1 -0
  350. package/dist/runner/builder-thread-lineage-errors.js +11 -0
  351. package/dist/runner/builder-thread-lineage-errors.js.map +1 -0
  352. package/dist/runner/builder-thread-lineage.d.ts +18 -0
  353. package/dist/runner/builder-thread-lineage.d.ts.map +1 -0
  354. package/dist/runner/builder-thread-lineage.js +342 -0
  355. package/dist/runner/builder-thread-lineage.js.map +1 -0
  356. package/dist/runner/builder-thread-types.d.ts +30 -0
  357. package/dist/runner/builder-thread-types.d.ts.map +1 -0
  358. package/dist/runner/builder-thread-types.js +2 -0
  359. package/dist/runner/builder-thread-types.js.map +1 -0
  360. package/dist/runner/delivery-dedup.d.ts +26 -0
  361. package/dist/runner/delivery-dedup.d.ts.map +1 -0
  362. package/dist/runner/delivery-dedup.js +44 -0
  363. package/dist/runner/delivery-dedup.js.map +1 -0
  364. package/dist/runner/failure-finalization.d.ts +34 -0
  365. package/dist/runner/failure-finalization.d.ts.map +1 -0
  366. package/dist/runner/failure-finalization.js +154 -0
  367. package/dist/runner/failure-finalization.js.map +1 -0
  368. package/dist/runner/fixture.d.ts +1 -1
  369. package/dist/runner/fixture.d.ts.map +1 -1
  370. package/dist/runner/fixture.js +3 -0
  371. package/dist/runner/fixture.js.map +1 -1
  372. package/dist/runner/phases/handoff.d.ts.map +1 -1
  373. package/dist/runner/phases/handoff.js +59 -32
  374. package/dist/runner/phases/handoff.js.map +1 -1
  375. package/dist/runner/phases/implementation.d.ts.map +1 -1
  376. package/dist/runner/phases/implementation.js +147 -24
  377. package/dist/runner/phases/implementation.js.map +1 -1
  378. package/dist/runner/phases/integration-repair.d.ts +18 -0
  379. package/dist/runner/phases/integration-repair.d.ts.map +1 -1
  380. package/dist/runner/phases/integration-repair.js +93 -7
  381. package/dist/runner/phases/integration-repair.js.map +1 -1
  382. package/dist/runner/phases/merge.d.ts.map +1 -1
  383. package/dist/runner/phases/merge.js +129 -51
  384. package/dist/runner/phases/merge.js.map +1 -1
  385. package/dist/runner/phases/planning.d.ts.map +1 -1
  386. package/dist/runner/phases/planning.js +46 -8
  387. package/dist/runner/phases/planning.js.map +1 -1
  388. package/dist/runner/phases/production-sync.d.ts.map +1 -1
  389. package/dist/runner/phases/production-sync.js +28 -4
  390. package/dist/runner/phases/production-sync.js.map +1 -1
  391. package/dist/runner/phases/revision.d.ts.map +1 -1
  392. package/dist/runner/phases/revision.js +112 -32
  393. package/dist/runner/phases/revision.js.map +1 -1
  394. package/dist/runner/preflight.d.ts +2 -0
  395. package/dist/runner/preflight.d.ts.map +1 -1
  396. package/dist/runner/preflight.js +112 -3
  397. package/dist/runner/preflight.js.map +1 -1
  398. package/dist/runner/resolve-route.d.ts +1 -0
  399. package/dist/runner/resolve-route.d.ts.map +1 -1
  400. package/dist/runner/resolve-route.js +26 -0
  401. package/dist/runner/resolve-route.js.map +1 -1
  402. package/dist/runner/run-generation.d.ts +2 -0
  403. package/dist/runner/run-generation.d.ts.map +1 -0
  404. package/dist/runner/run-generation.js +19 -0
  405. package/dist/runner/run-generation.js.map +1 -0
  406. package/dist/runner/uninitialized-product-routing.d.ts +24 -0
  407. package/dist/runner/uninitialized-product-routing.d.ts.map +1 -0
  408. package/dist/runner/uninitialized-product-routing.js +70 -0
  409. package/dist/runner/uninitialized-product-routing.js.map +1 -0
  410. package/dist/setup/config-builder.d.ts.map +1 -1
  411. package/dist/setup/config-builder.js +12 -0
  412. package/dist/setup/config-builder.js.map +1 -1
  413. package/dist/setup/control-plane-readiness.d.ts +8 -1
  414. package/dist/setup/control-plane-readiness.d.ts.map +1 -1
  415. package/dist/setup/control-plane-readiness.js +63 -19
  416. package/dist/setup/control-plane-readiness.js.map +1 -1
  417. package/dist/setup/control-plane-setup-state.d.ts +13 -3
  418. package/dist/setup/control-plane-setup-state.d.ts.map +1 -1
  419. package/dist/setup/control-plane-setup-state.js +30 -3
  420. package/dist/setup/control-plane-setup-state.js.map +1 -1
  421. package/dist/setup/control-plane-state-lock.d.ts +12 -0
  422. package/dist/setup/control-plane-state-lock.d.ts.map +1 -0
  423. package/dist/setup/control-plane-state-lock.js +79 -0
  424. package/dist/setup/control-plane-state-lock.js.map +1 -0
  425. package/dist/setup/control-plane-types.d.ts +72 -1
  426. package/dist/setup/control-plane-types.d.ts.map +1 -1
  427. package/dist/setup/first-run-readiness.d.ts +4 -0
  428. package/dist/setup/first-run-readiness.d.ts.map +1 -1
  429. package/dist/setup/first-run-readiness.js +2 -2
  430. package/dist/setup/first-run-readiness.js.map +1 -1
  431. package/dist/setup/git-askpass-credentials.d.ts +19 -0
  432. package/dist/setup/git-askpass-credentials.d.ts.map +1 -0
  433. package/dist/setup/git-askpass-credentials.js +60 -0
  434. package/dist/setup/git-askpass-credentials.js.map +1 -0
  435. package/dist/setup/github-dispatch-token.d.ts +4 -0
  436. package/dist/setup/github-dispatch-token.d.ts.map +1 -1
  437. package/dist/setup/github-dispatch-token.js +23 -3
  438. package/dist/setup/github-dispatch-token.js.map +1 -1
  439. package/dist/setup/github-remote-provider.d.ts +173 -0
  440. package/dist/setup/github-remote-provider.d.ts.map +1 -1
  441. package/dist/setup/github-remote-provider.js +234 -3
  442. package/dist/setup/github-remote-provider.js.map +1 -1
  443. package/dist/setup/github-remote-setup-live.d.ts +75 -1
  444. package/dist/setup/github-remote-setup-live.d.ts.map +1 -1
  445. package/dist/setup/github-remote-setup-live.js +189 -15
  446. package/dist/setup/github-remote-setup-live.js.map +1 -1
  447. package/dist/setup/github-repository-name.d.ts +15 -0
  448. package/dist/setup/github-repository-name.d.ts.map +1 -0
  449. package/dist/setup/github-repository-name.js +54 -0
  450. package/dist/setup/github-repository-name.js.map +1 -0
  451. package/dist/setup/github-secret-encryption.d.ts.map +1 -1
  452. package/dist/setup/github-secret-encryption.js +3 -1
  453. package/dist/setup/github-secret-encryption.js.map +1 -1
  454. package/dist/setup/github-target-repository-provider-live.d.ts +35 -0
  455. package/dist/setup/github-target-repository-provider-live.d.ts.map +1 -0
  456. package/dist/setup/github-target-repository-provider-live.js +236 -0
  457. package/dist/setup/github-target-repository-provider-live.js.map +1 -0
  458. package/dist/setup/github-target-repository-provider-mock.d.ts +47 -0
  459. package/dist/setup/github-target-repository-provider-mock.d.ts.map +1 -0
  460. package/dist/setup/github-target-repository-provider-mock.js +189 -0
  461. package/dist/setup/github-target-repository-provider-mock.js.map +1 -0
  462. package/dist/setup/github-target-repository-provider.d.ts +44 -0
  463. package/dist/setup/github-target-repository-provider.d.ts.map +1 -0
  464. package/dist/setup/github-target-repository-provider.js +7 -0
  465. package/dist/setup/github-target-repository-provider.js.map +1 -0
  466. package/dist/setup/github-upload-rate-limit-gate.d.ts +17 -0
  467. package/dist/setup/github-upload-rate-limit-gate.d.ts.map +1 -0
  468. package/dist/setup/github-upload-rate-limit-gate.js +42 -0
  469. package/dist/setup/github-upload-rate-limit-gate.js.map +1 -0
  470. package/dist/setup/github-workflow-permissions.d.ts +1 -1
  471. package/dist/setup/github-workflow-permissions.d.ts.map +1 -1
  472. package/dist/setup/github-workflow-permissions.js +1 -1
  473. package/dist/setup/github-workflow-permissions.js.map +1 -1
  474. package/dist/setup/gui-view-model.d.ts +5 -0
  475. package/dist/setup/gui-view-model.d.ts.map +1 -1
  476. package/dist/setup/gui-view-model.js +5 -0
  477. package/dist/setup/gui-view-model.js.map +1 -1
  478. package/dist/setup/harness-dispatch-repo.d.ts +16 -2
  479. package/dist/setup/harness-dispatch-repo.d.ts.map +1 -1
  480. package/dist/setup/harness-dispatch-repo.js +113 -22
  481. package/dist/setup/harness-dispatch-repo.js.map +1 -1
  482. package/dist/setup/harness-managed-repo-marker.d.ts +29 -1
  483. package/dist/setup/harness-managed-repo-marker.d.ts.map +1 -1
  484. package/dist/setup/harness-managed-repo-marker.js +183 -2
  485. package/dist/setup/harness-managed-repo-marker.js.map +1 -1
  486. package/dist/setup/harness-provisioning-context.d.ts +14 -12
  487. package/dist/setup/harness-provisioning-context.d.ts.map +1 -1
  488. package/dist/setup/harness-provisioning-context.js +54 -42
  489. package/dist/setup/harness-provisioning-context.js.map +1 -1
  490. package/dist/setup/harness-provisioning-last-run.d.ts +27 -0
  491. package/dist/setup/harness-provisioning-last-run.d.ts.map +1 -0
  492. package/dist/setup/harness-provisioning-last-run.js +94 -0
  493. package/dist/setup/harness-provisioning-last-run.js.map +1 -0
  494. package/dist/setup/harness-provisioning-pending-state.d.ts +33 -22
  495. package/dist/setup/harness-provisioning-pending-state.d.ts.map +1 -1
  496. package/dist/setup/harness-provisioning-pending-state.js +49 -30
  497. package/dist/setup/harness-provisioning-pending-state.js.map +1 -1
  498. package/dist/setup/harness-provisioning-progress.d.ts +58 -0
  499. package/dist/setup/harness-provisioning-progress.d.ts.map +1 -0
  500. package/dist/setup/harness-provisioning-progress.js +134 -0
  501. package/dist/setup/harness-provisioning-progress.js.map +1 -0
  502. package/dist/setup/harness-repo-provisioning.d.ts +21 -5
  503. package/dist/setup/harness-repo-provisioning.d.ts.map +1 -1
  504. package/dist/setup/harness-repo-provisioning.js +494 -334
  505. package/dist/setup/harness-repo-provisioning.js.map +1 -1
  506. package/dist/setup/harness-snapshot-git-transport.d.ts +92 -0
  507. package/dist/setup/harness-snapshot-git-transport.d.ts.map +1 -0
  508. package/dist/setup/harness-snapshot-git-transport.js +544 -0
  509. package/dist/setup/harness-snapshot-git-transport.js.map +1 -0
  510. package/dist/setup/harness-snapshot-provisioning-helpers.d.ts +21 -0
  511. package/dist/setup/harness-snapshot-provisioning-helpers.d.ts.map +1 -0
  512. package/dist/setup/harness-snapshot-provisioning-helpers.js +55 -0
  513. package/dist/setup/harness-snapshot-provisioning-helpers.js.map +1 -0
  514. package/dist/setup/harness-snapshot-provisioning.d.ts +122 -0
  515. package/dist/setup/harness-snapshot-provisioning.d.ts.map +1 -0
  516. package/dist/setup/harness-snapshot-provisioning.js +909 -0
  517. package/dist/setup/harness-snapshot-provisioning.js.map +1 -0
  518. package/dist/setup/harness-step-readiness-server.d.ts +11 -0
  519. package/dist/setup/harness-step-readiness-server.d.ts.map +1 -0
  520. package/dist/setup/harness-step-readiness-server.js +24 -0
  521. package/dist/setup/harness-step-readiness-server.js.map +1 -0
  522. package/dist/setup/harness-step-readiness.d.ts +21 -0
  523. package/dist/setup/harness-step-readiness.d.ts.map +1 -0
  524. package/dist/setup/harness-step-readiness.js +40 -0
  525. package/dist/setup/harness-step-readiness.js.map +1 -0
  526. package/dist/setup/harness-workspace-snapshot-loader.d.ts +20 -0
  527. package/dist/setup/harness-workspace-snapshot-loader.d.ts.map +1 -0
  528. package/dist/setup/harness-workspace-snapshot-loader.js +113 -0
  529. package/dist/setup/harness-workspace-snapshot-loader.js.map +1 -0
  530. package/dist/setup/initial-setup-lifecycle.d.ts +51 -0
  531. package/dist/setup/initial-setup-lifecycle.d.ts.map +1 -0
  532. package/dist/setup/initial-setup-lifecycle.js +93 -0
  533. package/dist/setup/initial-setup-lifecycle.js.map +1 -0
  534. package/dist/setup/linear-category-labels.d.ts +2 -0
  535. package/dist/setup/linear-category-labels.d.ts.map +1 -0
  536. package/dist/setup/linear-category-labels.js +19 -0
  537. package/dist/setup/linear-category-labels.js.map +1 -0
  538. package/dist/setup/linear-setup-apply.d.ts +1 -0
  539. package/dist/setup/linear-setup-apply.d.ts.map +1 -1
  540. package/dist/setup/linear-setup-apply.js +67 -16
  541. package/dist/setup/linear-setup-apply.js.map +1 -1
  542. package/dist/setup/linear-setup-client.d.ts +24 -0
  543. package/dist/setup/linear-setup-client.d.ts.map +1 -1
  544. package/dist/setup/linear-setup-client.js +61 -0
  545. package/dist/setup/linear-setup-client.js.map +1 -1
  546. package/dist/setup/linear-setup-plan.d.ts +22 -1
  547. package/dist/setup/linear-setup-plan.d.ts.map +1 -1
  548. package/dist/setup/linear-setup-plan.js +69 -6
  549. package/dist/setup/linear-setup-plan.js.map +1 -1
  550. package/dist/setup/linear-setup-progress.d.ts +30 -0
  551. package/dist/setup/linear-setup-progress.d.ts.map +1 -0
  552. package/dist/setup/linear-setup-progress.js +71 -0
  553. package/dist/setup/linear-setup-progress.js.map +1 -0
  554. package/dist/setup/linear-status-contract.d.ts +2 -1
  555. package/dist/setup/linear-status-contract.d.ts.map +1 -1
  556. package/dist/setup/linear-status-contract.js +26 -67
  557. package/dist/setup/linear-status-contract.js.map +1 -1
  558. package/dist/setup/linear-workflow-status-repair.d.ts +36 -0
  559. package/dist/setup/linear-workflow-status-repair.d.ts.map +1 -0
  560. package/dist/setup/linear-workflow-status-repair.js +187 -0
  561. package/dist/setup/linear-workflow-status-repair.js.map +1 -0
  562. package/dist/setup/linear-workspace-apply.d.ts +25 -0
  563. package/dist/setup/linear-workspace-apply.d.ts.map +1 -0
  564. package/dist/setup/linear-workspace-apply.js +212 -0
  565. package/dist/setup/linear-workspace-apply.js.map +1 -0
  566. package/dist/setup/linear-workspace-drift.d.ts +2 -0
  567. package/dist/setup/linear-workspace-drift.d.ts.map +1 -0
  568. package/dist/setup/linear-workspace-drift.js +2 -0
  569. package/dist/setup/linear-workspace-drift.js.map +1 -0
  570. package/dist/setup/linear-workspace-migration.d.ts +43 -0
  571. package/dist/setup/linear-workspace-migration.d.ts.map +1 -0
  572. package/dist/setup/linear-workspace-migration.js +212 -0
  573. package/dist/setup/linear-workspace-migration.js.map +1 -0
  574. package/dist/setup/linear-workspace-plan.d.ts +92 -0
  575. package/dist/setup/linear-workspace-plan.d.ts.map +1 -0
  576. package/dist/setup/linear-workspace-plan.js +283 -0
  577. package/dist/setup/linear-workspace-plan.js.map +1 -0
  578. package/dist/setup/local-readiness-checks.d.ts +17 -0
  579. package/dist/setup/local-readiness-checks.d.ts.map +1 -1
  580. package/dist/setup/local-readiness-checks.js +86 -23
  581. package/dist/setup/local-readiness-checks.js.map +1 -1
  582. package/dist/setup/mock-git-repository-store.d.ts +43 -0
  583. package/dist/setup/mock-git-repository-store.d.ts.map +1 -0
  584. package/dist/setup/mock-git-repository-store.js +232 -0
  585. package/dist/setup/mock-git-repository-store.js.map +1 -0
  586. package/dist/setup/mock-target-workflow-finalization.d.ts.map +1 -1
  587. package/dist/setup/mock-target-workflow-finalization.js +27 -4
  588. package/dist/setup/mock-target-workflow-finalization.js.map +1 -1
  589. package/dist/setup/packaged-default-route.d.ts +15 -0
  590. package/dist/setup/packaged-default-route.d.ts.map +1 -0
  591. package/dist/setup/packaged-default-route.js +17 -0
  592. package/dist/setup/packaged-default-route.js.map +1 -0
  593. package/dist/setup/release-sync-managed-runner.d.ts +61 -0
  594. package/dist/setup/release-sync-managed-runner.d.ts.map +1 -0
  595. package/dist/setup/release-sync-managed-runner.js +364 -0
  596. package/dist/setup/release-sync-managed-runner.js.map +1 -0
  597. package/dist/setup/remote-apply-actions.d.ts.map +1 -1
  598. package/dist/setup/remote-apply-actions.js +23 -0
  599. package/dist/setup/remote-apply-actions.js.map +1 -1
  600. package/dist/setup/runner-upgrade-canary-dispatch.d.ts +19 -0
  601. package/dist/setup/runner-upgrade-canary-dispatch.d.ts.map +1 -0
  602. package/dist/setup/runner-upgrade-canary-dispatch.js +38 -0
  603. package/dist/setup/runner-upgrade-canary-dispatch.js.map +1 -0
  604. package/dist/setup/runner-upgrade-canary.d.ts +23 -0
  605. package/dist/setup/runner-upgrade-canary.d.ts.map +1 -0
  606. package/dist/setup/runner-upgrade-canary.js +146 -0
  607. package/dist/setup/runner-upgrade-canary.js.map +1 -0
  608. package/dist/setup/runner-upgrade-evidence.d.ts +14 -0
  609. package/dist/setup/runner-upgrade-evidence.d.ts.map +1 -0
  610. package/dist/setup/runner-upgrade-evidence.js +9 -0
  611. package/dist/setup/runner-upgrade-evidence.js.map +1 -0
  612. package/dist/setup/runner-upgrade-pending-state.d.ts +30 -0
  613. package/dist/setup/runner-upgrade-pending-state.d.ts.map +1 -0
  614. package/dist/setup/runner-upgrade-pending-state.js +75 -0
  615. package/dist/setup/runner-upgrade-pending-state.js.map +1 -0
  616. package/dist/setup/runner-upgrade-progress.d.ts +38 -0
  617. package/dist/setup/runner-upgrade-progress.d.ts.map +1 -0
  618. package/dist/setup/runner-upgrade-progress.js +95 -0
  619. package/dist/setup/runner-upgrade-progress.js.map +1 -0
  620. package/dist/setup/runner-upgrade-provider-live.d.ts +5 -0
  621. package/dist/setup/runner-upgrade-provider-live.d.ts.map +1 -0
  622. package/dist/setup/runner-upgrade-provider-live.js +338 -0
  623. package/dist/setup/runner-upgrade-provider-live.js.map +1 -0
  624. package/dist/setup/runner-upgrade-provider.d.ts +231 -0
  625. package/dist/setup/runner-upgrade-provider.d.ts.map +1 -0
  626. package/dist/setup/runner-upgrade-provider.js +466 -0
  627. package/dist/setup/runner-upgrade-provider.js.map +1 -0
  628. package/dist/setup/runner-upgrade-status-cache.d.ts +13 -0
  629. package/dist/setup/runner-upgrade-status-cache.d.ts.map +1 -0
  630. package/dist/setup/runner-upgrade-status-cache.js +39 -0
  631. package/dist/setup/runner-upgrade-status-cache.js.map +1 -0
  632. package/dist/setup/runner-upgrade-three-way.d.ts +28 -0
  633. package/dist/setup/runner-upgrade-three-way.d.ts.map +1 -0
  634. package/dist/setup/runner-upgrade-three-way.js +102 -0
  635. package/dist/setup/runner-upgrade-three-way.js.map +1 -0
  636. package/dist/setup/runner-upgrade-timeouts.d.ts +72 -0
  637. package/dist/setup/runner-upgrade-timeouts.d.ts.map +1 -0
  638. package/dist/setup/runner-upgrade-timeouts.js +261 -0
  639. package/dist/setup/runner-upgrade-timeouts.js.map +1 -0
  640. package/dist/setup/runner-upgrade-types.d.ts +84 -0
  641. package/dist/setup/runner-upgrade-types.d.ts.map +1 -0
  642. package/dist/setup/runner-upgrade-types.js +64 -0
  643. package/dist/setup/runner-upgrade-types.js.map +1 -0
  644. package/dist/setup/runner-upgrade-worker.d.ts +17 -0
  645. package/dist/setup/runner-upgrade-worker.d.ts.map +1 -0
  646. package/dist/setup/runner-upgrade-worker.js +115 -0
  647. package/dist/setup/runner-upgrade-worker.js.map +1 -0
  648. package/dist/setup/runner-upgrade.d.ts +57 -0
  649. package/dist/setup/runner-upgrade.d.ts.map +1 -0
  650. package/dist/setup/runner-upgrade.js +1311 -0
  651. package/dist/setup/runner-upgrade.js.map +1 -0
  652. package/dist/setup/service-verification.d.ts +18 -1
  653. package/dist/setup/service-verification.d.ts.map +1 -1
  654. package/dist/setup/service-verification.js +110 -19
  655. package/dist/setup/service-verification.js.map +1 -1
  656. package/dist/setup/settings-config-patch.d.ts +69 -0
  657. package/dist/setup/settings-config-patch.d.ts.map +1 -0
  658. package/dist/setup/settings-config-patch.js +312 -0
  659. package/dist/setup/settings-config-patch.js.map +1 -0
  660. package/dist/setup/setup-state.d.ts +1 -0
  661. package/dist/setup/setup-state.d.ts.map +1 -1
  662. package/dist/setup/setup-state.js +11 -1
  663. package/dist/setup/setup-state.js.map +1 -1
  664. package/dist/setup/step6-automatic-control-state.d.ts +21 -0
  665. package/dist/setup/step6-automatic-control-state.d.ts.map +1 -0
  666. package/dist/setup/step6-automatic-control-state.js +28 -0
  667. package/dist/setup/step6-automatic-control-state.js.map +1 -0
  668. package/dist/setup/sync-harness-config-cloud.d.ts +23 -0
  669. package/dist/setup/sync-harness-config-cloud.d.ts.map +1 -0
  670. package/dist/setup/sync-harness-config-cloud.js +91 -0
  671. package/dist/setup/sync-harness-config-cloud.js.map +1 -0
  672. package/dist/setup/target-repo-provisioning-pending-state.d.ts +42 -0
  673. package/dist/setup/target-repo-provisioning-pending-state.d.ts.map +1 -0
  674. package/dist/setup/target-repo-provisioning-pending-state.js +95 -0
  675. package/dist/setup/target-repo-provisioning-pending-state.js.map +1 -0
  676. package/dist/setup/target-repo-provisioning.d.ts +67 -0
  677. package/dist/setup/target-repo-provisioning.d.ts.map +1 -0
  678. package/dist/setup/target-repo-provisioning.js +473 -0
  679. package/dist/setup/target-repo-provisioning.js.map +1 -0
  680. package/dist/setup/target-workflow-finalization-progress.d.ts +43 -0
  681. package/dist/setup/target-workflow-finalization-progress.d.ts.map +1 -0
  682. package/dist/setup/target-workflow-finalization-progress.js +83 -0
  683. package/dist/setup/target-workflow-finalization-progress.js.map +1 -0
  684. package/dist/setup/target-workflow-finalization-types.d.ts +21 -1
  685. package/dist/setup/target-workflow-finalization-types.d.ts.map +1 -1
  686. package/dist/setup/target-workflow-finalization-types.js +75 -0
  687. package/dist/setup/target-workflow-finalization-types.js.map +1 -1
  688. package/dist/setup/target-workflow-finalization.d.ts.map +1 -1
  689. package/dist/setup/target-workflow-finalization.js +618 -15
  690. package/dist/setup/target-workflow-finalization.js.map +1 -1
  691. package/dist/setup/target-workflow-setup.d.ts.map +1 -1
  692. package/dist/setup/target-workflow-setup.js +2 -0
  693. package/dist/setup/target-workflow-setup.js.map +1 -1
  694. package/dist/setup/test-only-runner-upgrade-provider.d.ts +11 -0
  695. package/dist/setup/test-only-runner-upgrade-provider.d.ts.map +1 -0
  696. package/dist/setup/test-only-runner-upgrade-provider.js +37 -0
  697. package/dist/setup/test-only-runner-upgrade-provider.js.map +1 -0
  698. package/dist/setup/test-only-target-repo-provisioning-provider.d.ts +7 -0
  699. package/dist/setup/test-only-target-repo-provisioning-provider.d.ts.map +1 -0
  700. package/dist/setup/test-only-target-repo-provisioning-provider.js +33 -0
  701. package/dist/setup/test-only-target-repo-provisioning-provider.js.map +1 -0
  702. package/dist/setup/vercel-bridge-artifact.d.ts +7 -0
  703. package/dist/setup/vercel-bridge-artifact.d.ts.map +1 -0
  704. package/dist/setup/vercel-bridge-artifact.js +164 -0
  705. package/dist/setup/vercel-bridge-artifact.js.map +1 -0
  706. package/dist/setup/vercel-bridge-deploy.d.ts +42 -0
  707. package/dist/setup/vercel-bridge-deploy.d.ts.map +1 -0
  708. package/dist/setup/vercel-bridge-deploy.js +138 -0
  709. package/dist/setup/vercel-bridge-deploy.js.map +1 -0
  710. package/dist/setup/vercel-bridge-diagnostics.js +1 -1
  711. package/dist/setup/vercel-bridge-diagnostics.js.map +1 -1
  712. package/dist/setup/vercel-bridge-options.d.ts +2 -0
  713. package/dist/setup/vercel-bridge-options.d.ts.map +1 -1
  714. package/dist/setup/vercel-bridge-options.js +2 -0
  715. package/dist/setup/vercel-bridge-options.js.map +1 -1
  716. package/dist/setup/vercel-bridge-orchestration-summary.d.ts +13 -0
  717. package/dist/setup/vercel-bridge-orchestration-summary.d.ts.map +1 -0
  718. package/dist/setup/vercel-bridge-orchestration-summary.js +22 -0
  719. package/dist/setup/vercel-bridge-orchestration-summary.js.map +1 -0
  720. package/dist/setup/vercel-bridge-project-marker.d.ts +5 -0
  721. package/dist/setup/vercel-bridge-project-marker.d.ts.map +1 -0
  722. package/dist/setup/vercel-bridge-project-marker.js +6 -0
  723. package/dist/setup/vercel-bridge-project-marker.js.map +1 -0
  724. package/dist/setup/vercel-bridge-readiness.d.ts +1 -0
  725. package/dist/setup/vercel-bridge-readiness.d.ts.map +1 -1
  726. package/dist/setup/vercel-bridge-readiness.js +1 -1
  727. package/dist/setup/vercel-bridge-readiness.js.map +1 -1
  728. package/dist/setup/vercel-bridge-redeploy-normalize.d.ts +18 -0
  729. package/dist/setup/vercel-bridge-redeploy-normalize.d.ts.map +1 -0
  730. package/dist/setup/vercel-bridge-redeploy-normalize.js +175 -0
  731. package/dist/setup/vercel-bridge-redeploy-normalize.js.map +1 -0
  732. package/dist/setup/vercel-bridge-redeploy-poll.d.ts +7 -1
  733. package/dist/setup/vercel-bridge-redeploy-poll.d.ts.map +1 -1
  734. package/dist/setup/vercel-bridge-redeploy-poll.js +329 -166
  735. package/dist/setup/vercel-bridge-redeploy-poll.js.map +1 -1
  736. package/dist/setup/vercel-bridge-redeploy-state.d.ts.map +1 -1
  737. package/dist/setup/vercel-bridge-redeploy-state.js +3 -0
  738. package/dist/setup/vercel-bridge-redeploy-state.js.map +1 -1
  739. package/dist/setup/vercel-bridge-structured-log.d.ts +5 -0
  740. package/dist/setup/vercel-bridge-structured-log.d.ts.map +1 -1
  741. package/dist/setup/vercel-bridge-structured-log.js.map +1 -1
  742. package/dist/setup/vercel-project-name.d.ts +7 -0
  743. package/dist/setup/vercel-project-name.d.ts.map +1 -0
  744. package/dist/setup/vercel-project-name.js +26 -0
  745. package/dist/setup/vercel-project-name.js.map +1 -0
  746. package/dist/setup/vercel-setup-apply.d.ts +7 -2
  747. package/dist/setup/vercel-setup-apply.d.ts.map +1 -1
  748. package/dist/setup/vercel-setup-apply.js +315 -38
  749. package/dist/setup/vercel-setup-apply.js.map +1 -1
  750. package/dist/setup/vercel-setup-client.d.ts +26 -1
  751. package/dist/setup/vercel-setup-client.d.ts.map +1 -1
  752. package/dist/setup/vercel-setup-client.js +50 -1
  753. package/dist/setup/vercel-setup-client.js.map +1 -1
  754. package/dist/setup/vercel-setup-plan.d.ts +5 -0
  755. package/dist/setup/vercel-setup-plan.d.ts.map +1 -1
  756. package/dist/setup/vercel-setup-plan.js +65 -13
  757. package/dist/setup/vercel-setup-plan.js.map +1 -1
  758. package/dist/setup/vercel-setup-summary.d.ts +3 -0
  759. package/dist/setup/vercel-setup-summary.d.ts.map +1 -1
  760. package/dist/setup/vercel-setup-summary.js +4 -0
  761. package/dist/setup/vercel-setup-summary.js.map +1 -1
  762. package/dist/setup/workflow-config-snapshot.d.ts +8 -0
  763. package/dist/setup/workflow-config-snapshot.d.ts.map +1 -0
  764. package/dist/setup/workflow-config-snapshot.js +13 -0
  765. package/dist/setup/workflow-config-snapshot.js.map +1 -0
  766. package/dist/setup/workflow-install-branch-recovery.d.ts +116 -0
  767. package/dist/setup/workflow-install-branch-recovery.d.ts.map +1 -0
  768. package/dist/setup/workflow-install-branch-recovery.js +385 -0
  769. package/dist/setup/workflow-install-branch-recovery.js.map +1 -0
  770. package/dist/setup/workflow-install-merge-errors.d.ts +5 -2
  771. package/dist/setup/workflow-install-merge-errors.d.ts.map +1 -1
  772. package/dist/setup/workflow-install-merge-errors.js +51 -17
  773. package/dist/setup/workflow-install-merge-errors.js.map +1 -1
  774. package/dist/setup/workflow-install-merge-gate.d.ts +10 -0
  775. package/dist/setup/workflow-install-merge-gate.d.ts.map +1 -0
  776. package/dist/setup/workflow-install-merge-gate.js +21 -0
  777. package/dist/setup/workflow-install-merge-gate.js.map +1 -0
  778. package/dist/setup/workflow-model-save-queue.d.ts +16 -0
  779. package/dist/setup/workflow-model-save-queue.d.ts.map +1 -0
  780. package/dist/setup/workflow-model-save-queue.js +174 -0
  781. package/dist/setup/workflow-model-save-queue.js.map +1 -0
  782. package/dist/setup/workflow-model-sync-lock.d.ts +12 -0
  783. package/dist/setup/workflow-model-sync-lock.d.ts.map +1 -0
  784. package/dist/setup/workflow-model-sync-lock.js +79 -0
  785. package/dist/setup/workflow-model-sync-lock.js.map +1 -0
  786. package/dist/setup/workflow-model-sync.d.ts +34 -0
  787. package/dist/setup/workflow-model-sync.d.ts.map +1 -0
  788. package/dist/setup/workflow-model-sync.js +163 -0
  789. package/dist/setup/workflow-model-sync.js.map +1 -0
  790. package/dist/setup/workflow-models-sync-evidence.d.ts +12 -0
  791. package/dist/setup/workflow-models-sync-evidence.d.ts.map +1 -0
  792. package/dist/setup/workflow-models-sync-evidence.js +15 -0
  793. package/dist/setup/workflow-models-sync-evidence.js.map +1 -0
  794. package/dist/types/parsed-issue.d.ts +8 -0
  795. package/dist/types/parsed-issue.d.ts.map +1 -1
  796. package/dist/types/run.d.ts +18 -3
  797. package/dist/types/run.d.ts.map +1 -1
  798. package/dist/validate/issue.d.ts +5 -0
  799. package/dist/validate/issue.d.ts.map +1 -1
  800. package/dist/validate/issue.js +23 -3
  801. package/dist/validate/issue.js.map +1 -1
  802. package/dist/validate/types.d.ts +3 -0
  803. package/dist/validate/types.d.ts.map +1 -1
  804. package/dist/webhook/dispatch-statuses.d.ts +1 -1
  805. package/dist/webhook/dispatch-statuses.d.ts.map +1 -1
  806. package/dist/webhook/dispatch-statuses.js +4 -13
  807. package/dist/webhook/dispatch-statuses.js.map +1 -1
  808. package/dist/webhook/filter.d.ts +5 -2
  809. package/dist/webhook/filter.d.ts.map +1 -1
  810. package/dist/webhook/filter.js +15 -1
  811. package/dist/webhook/filter.js.map +1 -1
  812. package/dist/webhook/handle-linear-webhook.d.ts.map +1 -1
  813. package/dist/webhook/handle-linear-webhook.js +15 -1
  814. package/dist/webhook/handle-linear-webhook.js.map +1 -1
  815. package/dist/webhook/parse-linear-issue-event.d.ts +6 -0
  816. package/dist/webhook/parse-linear-issue-event.d.ts.map +1 -1
  817. package/dist/webhook/parse-linear-issue-event.js +2 -0
  818. package/dist/webhook/parse-linear-issue-event.js.map +1 -1
  819. package/dist/webhook/types.d.ts +3 -1
  820. package/dist/webhook/types.d.ts.map +1 -1
  821. package/dist/workflow/canonical-product-development-workflow.d.ts +106 -0
  822. package/dist/workflow/canonical-product-development-workflow.d.ts.map +1 -0
  823. package/dist/workflow/canonical-product-development-workflow.js +425 -0
  824. package/dist/workflow/canonical-product-development-workflow.js.map +1 -0
  825. package/dist/workflow/canonical-workflow-gate.d.ts +33 -0
  826. package/dist/workflow/canonical-workflow-gate.d.ts.map +1 -0
  827. package/dist/workflow/canonical-workflow-gate.js +164 -0
  828. package/dist/workflow/canonical-workflow-gate.js.map +1 -0
  829. package/dist/workflow/canonical-workflow-validation.d.ts +44 -0
  830. package/dist/workflow/canonical-workflow-validation.d.ts.map +1 -0
  831. package/dist/workflow/canonical-workflow-validation.js +193 -0
  832. package/dist/workflow/canonical-workflow-validation.js.map +1 -0
  833. package/dist/workflow/finalize-harness-run.d.ts +2 -0
  834. package/dist/workflow/finalize-harness-run.d.ts.map +1 -0
  835. package/dist/workflow/finalize-harness-run.js +62 -0
  836. package/dist/workflow/finalize-harness-run.js.map +1 -0
  837. package/dist/workflow/preflight-canonical.d.ts +11 -0
  838. package/dist/workflow/preflight-canonical.d.ts.map +1 -0
  839. package/dist/workflow/preflight-canonical.js +20 -0
  840. package/dist/workflow/preflight-canonical.js.map +1 -0
  841. package/dist/workflow/write-fallback-manifest.d.ts +2 -0
  842. package/dist/workflow/write-fallback-manifest.d.ts.map +1 -0
  843. package/dist/workflow/write-fallback-manifest.js +30 -0
  844. package/dist/workflow/write-fallback-manifest.js.map +1 -0
  845. package/dist/workflow-page/bootstrap.d.ts +21 -0
  846. package/dist/workflow-page/bootstrap.d.ts.map +1 -0
  847. package/dist/workflow-page/bootstrap.js +185 -0
  848. package/dist/workflow-page/bootstrap.js.map +1 -0
  849. package/dist/workflow-page/catalog-validation.d.ts +33 -0
  850. package/dist/workflow-page/catalog-validation.d.ts.map +1 -0
  851. package/dist/workflow-page/catalog-validation.js +105 -0
  852. package/dist/workflow-page/catalog-validation.js.map +1 -0
  853. package/dist/workflow-page/constants.d.ts +7 -0
  854. package/dist/workflow-page/constants.d.ts.map +1 -0
  855. package/dist/workflow-page/constants.js +18 -0
  856. package/dist/workflow-page/constants.js.map +1 -0
  857. package/dist/workflow-page/current-workflow.d.ts +18 -0
  858. package/dist/workflow-page/current-workflow.d.ts.map +1 -0
  859. package/dist/workflow-page/current-workflow.js +142 -0
  860. package/dist/workflow-page/current-workflow.js.map +1 -0
  861. package/dist/workflow-page/fingerprint.d.ts +3 -0
  862. package/dist/workflow-page/fingerprint.d.ts.map +1 -0
  863. package/dist/workflow-page/fingerprint.js +8 -0
  864. package/dist/workflow-page/fingerprint.js.map +1 -0
  865. package/dist/workflow-page/fixture-definition.d.ts +13 -0
  866. package/dist/workflow-page/fixture-definition.d.ts.map +1 -0
  867. package/dist/workflow-page/fixture-definition.js +2 -0
  868. package/dist/workflow-page/fixture-definition.js.map +1 -0
  869. package/dist/workflow-page/fixture-role-models.d.ts +19 -0
  870. package/dist/workflow-page/fixture-role-models.d.ts.map +1 -0
  871. package/dist/workflow-page/fixture-role-models.js +32 -0
  872. package/dist/workflow-page/fixture-role-models.js.map +1 -0
  873. package/dist/workflow-page/fixtures/basic-current-workflow.d.ts +5 -0
  874. package/dist/workflow-page/fixtures/basic-current-workflow.d.ts.map +1 -0
  875. package/dist/workflow-page/fixtures/basic-current-workflow.js +36 -0
  876. package/dist/workflow-page/fixtures/basic-current-workflow.js.map +1 -0
  877. package/dist/workflow-page/fixtures/branching-pr-review.d.ts +3 -0
  878. package/dist/workflow-page/fixtures/branching-pr-review.d.ts.map +1 -0
  879. package/dist/workflow-page/fixtures/branching-pr-review.js +10 -0
  880. package/dist/workflow-page/fixtures/branching-pr-review.js.map +1 -0
  881. package/dist/workflow-page/fixtures/canonical-violations.d.ts +6 -0
  882. package/dist/workflow-page/fixtures/canonical-violations.d.ts.map +1 -0
  883. package/dist/workflow-page/fixtures/canonical-violations.js +19 -0
  884. package/dist/workflow-page/fixtures/canonical-violations.js.map +1 -0
  885. package/dist/workflow-page/fixtures/credential-errors.d.ts +3 -0
  886. package/dist/workflow-page/fixtures/credential-errors.d.ts.map +1 -0
  887. package/dist/workflow-page/fixtures/credential-errors.js +12 -0
  888. package/dist/workflow-page/fixtures/credential-errors.js.map +1 -0
  889. package/dist/workflow-page/fixtures/empty-linear-statuses.d.ts +3 -0
  890. package/dist/workflow-page/fixtures/empty-linear-statuses.d.ts.map +1 -0
  891. package/dist/workflow-page/fixtures/empty-linear-statuses.js +9 -0
  892. package/dist/workflow-page/fixtures/empty-linear-statuses.js.map +1 -0
  893. package/dist/workflow-page/fixtures/hundred-node-performance.d.ts +3 -0
  894. package/dist/workflow-page/fixtures/hundred-node-performance.d.ts.map +1 -0
  895. package/dist/workflow-page/fixtures/hundred-node-performance.js +21 -0
  896. package/dist/workflow-page/fixtures/hundred-node-performance.js.map +1 -0
  897. package/dist/workflow-page/fixtures/index.d.ts +6 -0
  898. package/dist/workflow-page/fixtures/index.d.ts.map +1 -0
  899. package/dist/workflow-page/fixtures/index.js +24 -0
  900. package/dist/workflow-page/fixtures/index.js.map +1 -0
  901. package/dist/workflow-page/fixtures/model-catalog-snapshot.d.ts +10 -0
  902. package/dist/workflow-page/fixtures/model-catalog-snapshot.d.ts.map +1 -0
  903. package/dist/workflow-page/fixtures/model-catalog-snapshot.js +29 -0
  904. package/dist/workflow-page/fixtures/model-catalog-snapshot.js.map +1 -0
  905. package/dist/workflow-page/fixtures/workflow-scopes.d.ts +4 -0
  906. package/dist/workflow-page/fixtures/workflow-scopes.d.ts.map +1 -0
  907. package/dist/workflow-page/fixtures/workflow-scopes.js +16 -0
  908. package/dist/workflow-page/fixtures/workflow-scopes.js.map +1 -0
  909. package/dist/workflow-page/linear-status-source.d.ts +15 -0
  910. package/dist/workflow-page/linear-status-source.d.ts.map +1 -0
  911. package/dist/workflow-page/linear-status-source.js +44 -0
  912. package/dist/workflow-page/linear-status-source.js.map +1 -0
  913. package/dist/workflow-page/model-catalog-lookup.d.ts +3 -0
  914. package/dist/workflow-page/model-catalog-lookup.d.ts.map +1 -0
  915. package/dist/workflow-page/model-catalog-lookup.js +4 -0
  916. package/dist/workflow-page/model-catalog-lookup.js.map +1 -0
  917. package/dist/workflow-page/model-catalog-utils.d.ts +19 -0
  918. package/dist/workflow-page/model-catalog-utils.d.ts.map +1 -0
  919. package/dist/workflow-page/model-catalog-utils.js +46 -0
  920. package/dist/workflow-page/model-catalog-utils.js.map +1 -0
  921. package/dist/workflow-page/model-catalog.d.ts +12 -0
  922. package/dist/workflow-page/model-catalog.d.ts.map +1 -0
  923. package/dist/workflow-page/model-catalog.js +40 -0
  924. package/dist/workflow-page/model-catalog.js.map +1 -0
  925. package/dist/workflow-page/scope-branches.d.ts +11 -0
  926. package/dist/workflow-page/scope-branches.d.ts.map +1 -0
  927. package/dist/workflow-page/scope-branches.js +18 -0
  928. package/dist/workflow-page/scope-branches.js.map +1 -0
  929. package/dist/workflow-page/source-context.d.ts +13 -0
  930. package/dist/workflow-page/source-context.d.ts.map +1 -0
  931. package/dist/workflow-page/source-context.js +61 -0
  932. package/dist/workflow-page/source-context.js.map +1 -0
  933. package/dist/workflow-page/types.d.ts +108 -0
  934. package/dist/workflow-page/types.d.ts.map +1 -0
  935. package/dist/workflow-page/types.js +2 -0
  936. package/dist/workflow-page/types.js.map +1 -0
  937. package/dist/workflow-page/workflow-scopes.d.ts +16 -0
  938. package/dist/workflow-page/workflow-scopes.d.ts.map +1 -0
  939. package/dist/workflow-page/workflow-scopes.js +55 -0
  940. package/dist/workflow-page/workflow-scopes.js.map +1 -0
  941. package/gui/.next/BUILD_ID +1 -1
  942. package/gui/.next/app-build-manifest.json +378 -117
  943. package/gui/.next/app-path-routes-manifest.json +45 -16
  944. package/gui/.next/build-manifest.json +12 -12
  945. package/gui/.next/next-minimal-server.js.nft.json +1 -1
  946. package/gui/.next/next-server.js.nft.json +1 -1
  947. package/gui/.next/prerender-manifest.json +0 -24
  948. package/gui/.next/required-server-files.json +4 -3
  949. package/gui/.next/routes-manifest.json +54 -0
  950. package/gui/.next/server/app/_not-found/page.js +2 -2
  951. package/gui/.next/server/app/_not-found/page.js.nft.json +1 -1
  952. package/gui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  953. package/gui/.next/server/app/_not-found.html +1 -1
  954. package/gui/.next/server/app/_not-found.rsc +3 -3
  955. package/gui/.next/server/app/api/observability/event/route.js +1 -0
  956. package/gui/.next/server/app/api/observability/event/route.js.nft.json +1 -0
  957. package/gui/.next/server/app/api/observability/event/route_client-reference-manifest.js +1 -0
  958. package/gui/.next/server/app/api/observability/preferences/route.js +1 -0
  959. package/gui/.next/server/app/api/observability/preferences/route.js.nft.json +1 -0
  960. package/gui/.next/server/app/api/observability/preferences/route_client-reference-manifest.js +1 -0
  961. package/gui/.next/server/app/api/operations/bootstrap/route.js +1 -0
  962. package/gui/.next/server/app/api/operations/bootstrap/route.js.nft.json +1 -0
  963. package/gui/.next/server/app/api/operations/bootstrap/route_client-reference-manifest.js +1 -0
  964. package/gui/.next/server/app/api/operations/draft/route.js +1 -0
  965. package/gui/.next/server/app/api/operations/draft/route.js.nft.json +1 -0
  966. package/gui/.next/server/app/api/operations/draft/route_client-reference-manifest.js +1 -0
  967. package/gui/.next/server/app/api/settings/apply-config-patch/route.js +8 -0
  968. package/gui/.next/server/app/api/settings/apply-config-patch/route.js.nft.json +1 -0
  969. package/gui/.next/server/app/api/settings/apply-config-patch/route_client-reference-manifest.js +1 -0
  970. package/gui/.next/server/app/api/settings/preview-config-patch/route.js +8 -0
  971. package/gui/.next/server/app/api/settings/preview-config-patch/route.js.nft.json +1 -0
  972. package/gui/.next/server/app/api/settings/preview-config-patch/route_client-reference-manifest.js +1 -0
  973. package/gui/.next/server/app/api/setup/apply-connect-services/route.js +1 -1
  974. package/gui/.next/server/app/api/setup/apply-connect-services/route.js.nft.json +1 -1
  975. package/gui/.next/server/app/api/setup/apply-connect-services/route_client-reference-manifest.js +1 -1
  976. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js +1 -1
  977. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js.nft.json +1 -1
  978. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
  979. package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js +1 -1
  980. package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js.nft.json +1 -1
  981. package/gui/.next/server/app/api/setup/apply-harness-secrets/route_client-reference-manifest.js +1 -1
  982. package/gui/.next/server/app/api/setup/apply-linear-setup/route.js +1 -1
  983. package/gui/.next/server/app/api/setup/apply-linear-setup/route.js.nft.json +1 -1
  984. package/gui/.next/server/app/api/setup/apply-linear-setup/route_client-reference-manifest.js +1 -1
  985. package/gui/.next/server/app/api/setup/apply-linear-workspace/route.js +1 -0
  986. package/gui/.next/server/app/api/setup/apply-linear-workspace/route.js.nft.json +1 -0
  987. package/gui/.next/server/app/api/setup/apply-linear-workspace/route_client-reference-manifest.js +1 -0
  988. package/gui/.next/server/app/api/setup/apply-local-files/route.js +1 -1
  989. package/gui/.next/server/app/api/setup/apply-local-files/route.js.nft.json +1 -1
  990. package/gui/.next/server/app/api/setup/apply-local-files/route_client-reference-manifest.js +1 -1
  991. package/gui/.next/server/app/api/setup/apply-runner-upgrade/route.js +1 -0
  992. package/gui/.next/server/app/api/setup/apply-runner-upgrade/route.js.nft.json +1 -0
  993. package/gui/.next/server/app/api/setup/apply-runner-upgrade/route_client-reference-manifest.js +1 -0
  994. package/gui/.next/server/app/api/setup/apply-target-repo-provisioning/route.js +1 -0
  995. package/gui/.next/server/app/api/setup/apply-target-repo-provisioning/route.js.nft.json +1 -0
  996. package/gui/.next/server/app/api/setup/apply-target-repo-provisioning/route_client-reference-manifest.js +1 -0
  997. package/gui/.next/server/app/api/setup/apply-target-workflow/route.js +1 -1
  998. package/gui/.next/server/app/api/setup/apply-target-workflow/route.js.nft.json +1 -1
  999. package/gui/.next/server/app/api/setup/apply-target-workflow/route_client-reference-manifest.js +1 -1
  1000. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js +1 -1
  1001. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js.nft.json +1 -1
  1002. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route_client-reference-manifest.js +1 -1
  1003. package/gui/.next/server/app/api/setup/complete-initial-setup/route.js +1 -0
  1004. package/gui/.next/server/app/api/setup/complete-initial-setup/route.js.nft.json +1 -0
  1005. package/gui/.next/server/app/api/setup/complete-initial-setup/route_client-reference-manifest.js +1 -0
  1006. package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js +1 -1
  1007. package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js.nft.json +1 -1
  1008. package/gui/.next/server/app/api/setup/finalize-target-workflow/route_client-reference-manifest.js +1 -1
  1009. package/gui/.next/server/app/api/setup/harness-provisioning-progress/route.js +1 -0
  1010. package/gui/.next/server/app/api/setup/harness-provisioning-progress/route.js.nft.json +1 -0
  1011. package/gui/.next/server/app/api/setup/harness-provisioning-progress/route_client-reference-manifest.js +1 -0
  1012. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js +1 -1
  1013. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js.nft.json +1 -1
  1014. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route_client-reference-manifest.js +1 -1
  1015. package/gui/.next/server/app/api/setup/linear-options/route.js +1 -1
  1016. package/gui/.next/server/app/api/setup/linear-options/route.js.nft.json +1 -1
  1017. package/gui/.next/server/app/api/setup/linear-options/route_client-reference-manifest.js +1 -1
  1018. package/gui/.next/server/app/api/setup/linear-setup-progress/route.js +1 -0
  1019. package/gui/.next/server/app/api/setup/linear-setup-progress/route.js.nft.json +1 -0
  1020. package/gui/.next/server/app/api/setup/linear-setup-progress/route_client-reference-manifest.js +1 -0
  1021. package/gui/.next/server/app/api/setup/linear-summary/route.js +1 -1
  1022. package/gui/.next/server/app/api/setup/linear-summary/route.js.nft.json +1 -1
  1023. package/gui/.next/server/app/api/setup/linear-summary/route_client-reference-manifest.js +1 -1
  1024. package/gui/.next/server/app/api/setup/linear-workspace-editor-state/route.js +1 -0
  1025. package/gui/.next/server/app/api/setup/linear-workspace-editor-state/route.js.nft.json +1 -0
  1026. package/gui/.next/server/app/api/setup/linear-workspace-editor-state/route_client-reference-manifest.js +1 -0
  1027. package/gui/.next/server/app/api/setup/local-readiness/route.js +3 -1
  1028. package/gui/.next/server/app/api/setup/local-readiness/route.js.nft.json +1 -1
  1029. package/gui/.next/server/app/api/setup/local-readiness/route_client-reference-manifest.js +1 -1
  1030. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js +1 -1
  1031. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js.nft.json +1 -1
  1032. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route_client-reference-manifest.js +1 -1
  1033. package/gui/.next/server/app/api/setup/preview-connect-services/route.js +1 -1
  1034. package/gui/.next/server/app/api/setup/preview-connect-services/route.js.nft.json +1 -1
  1035. package/gui/.next/server/app/api/setup/preview-connect-services/route_client-reference-manifest.js +1 -1
  1036. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js +1 -1
  1037. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js.nft.json +1 -1
  1038. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
  1039. package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js +1 -1
  1040. package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js.nft.json +1 -1
  1041. package/gui/.next/server/app/api/setup/preview-harness-secrets/route_client-reference-manifest.js +1 -1
  1042. package/gui/.next/server/app/api/setup/preview-linear-setup/route.js +1 -1
  1043. package/gui/.next/server/app/api/setup/preview-linear-setup/route.js.nft.json +1 -1
  1044. package/gui/.next/server/app/api/setup/preview-linear-setup/route_client-reference-manifest.js +1 -1
  1045. package/gui/.next/server/app/api/setup/preview-linear-workspace/route.js +1 -0
  1046. package/gui/.next/server/app/api/setup/preview-linear-workspace/route.js.nft.json +1 -0
  1047. package/gui/.next/server/app/api/setup/preview-linear-workspace/route_client-reference-manifest.js +1 -0
  1048. package/gui/.next/server/app/api/setup/preview-local-files/route.js +1 -1
  1049. package/gui/.next/server/app/api/setup/preview-local-files/route.js.nft.json +1 -1
  1050. package/gui/.next/server/app/api/setup/preview-local-files/route_client-reference-manifest.js +1 -1
  1051. package/gui/.next/server/app/api/setup/preview-runner-upgrade/route.js +1 -0
  1052. package/gui/.next/server/app/api/setup/preview-runner-upgrade/route.js.nft.json +1 -0
  1053. package/gui/.next/server/app/api/setup/preview-runner-upgrade/route_client-reference-manifest.js +1 -0
  1054. package/gui/.next/server/app/api/setup/preview-target-repo-provisioning/route.js +1 -0
  1055. package/gui/.next/server/app/api/setup/preview-target-repo-provisioning/route.js.nft.json +1 -0
  1056. package/gui/.next/server/app/api/setup/preview-target-repo-provisioning/route_client-reference-manifest.js +1 -0
  1057. package/gui/.next/server/app/api/setup/preview-target-workflow/route.js +1 -1
  1058. package/gui/.next/server/app/api/setup/preview-target-workflow/route.js.nft.json +1 -1
  1059. package/gui/.next/server/app/api/setup/preview-target-workflow/route_client-reference-manifest.js +1 -1
  1060. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js +1 -1
  1061. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js.nft.json +1 -1
  1062. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route_client-reference-manifest.js +1 -1
  1063. package/gui/.next/server/app/api/setup/remote-summary/route.js +1 -1
  1064. package/gui/.next/server/app/api/setup/remote-summary/route.js.nft.json +1 -1
  1065. package/gui/.next/server/app/api/setup/remote-summary/route_client-reference-manifest.js +1 -1
  1066. package/gui/.next/server/app/api/setup/runner-upgrade-progress/route.js +1 -0
  1067. package/gui/.next/server/app/api/setup/runner-upgrade-progress/route.js.nft.json +1 -0
  1068. package/gui/.next/server/app/api/setup/runner-upgrade-progress/route_client-reference-manifest.js +1 -0
  1069. package/gui/.next/server/app/api/setup/runner-upgrade-status/route.js +1 -0
  1070. package/gui/.next/server/app/api/setup/runner-upgrade-status/route.js.nft.json +1 -0
  1071. package/gui/.next/server/app/api/setup/runner-upgrade-status/route_client-reference-manifest.js +1 -0
  1072. package/gui/.next/server/app/api/setup/summary/route.js +1 -1
  1073. package/gui/.next/server/app/api/setup/summary/route.js.nft.json +1 -1
  1074. package/gui/.next/server/app/api/setup/summary/route_client-reference-manifest.js +1 -1
  1075. package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js +1 -1
  1076. package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js.nft.json +1 -1
  1077. package/gui/.next/server/app/api/setup/vercel-bridge-options/route_client-reference-manifest.js +1 -1
  1078. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js +1 -1
  1079. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js.nft.json +1 -1
  1080. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route_client-reference-manifest.js +1 -1
  1081. package/gui/.next/server/app/api/setup/vercel-summary/route.js +1 -1
  1082. package/gui/.next/server/app/api/setup/vercel-summary/route.js.nft.json +1 -1
  1083. package/gui/.next/server/app/api/setup/vercel-summary/route_client-reference-manifest.js +1 -1
  1084. package/gui/.next/server/app/api/setup/verify-harness-repo/route.js +1 -1
  1085. package/gui/.next/server/app/api/setup/verify-harness-repo/route.js.nft.json +1 -1
  1086. package/gui/.next/server/app/api/setup/verify-harness-repo/route_client-reference-manifest.js +1 -1
  1087. package/gui/.next/server/app/api/setup/verify-service/route.js +1 -1
  1088. package/gui/.next/server/app/api/setup/verify-service/route.js.nft.json +1 -1
  1089. package/gui/.next/server/app/api/setup/verify-service/route_client-reference-manifest.js +1 -1
  1090. package/gui/.next/server/app/api/setup/verify-target-repo/route.js +1 -1
  1091. package/gui/.next/server/app/api/setup/verify-target-repo/route.js.nft.json +1 -1
  1092. package/gui/.next/server/app/api/setup/verify-target-repo/route_client-reference-manifest.js +1 -1
  1093. package/gui/.next/server/app/api/workflow/bootstrap/route.js +1 -0
  1094. package/gui/.next/server/app/api/workflow/bootstrap/route.js.nft.json +1 -0
  1095. package/gui/.next/server/app/api/workflow/bootstrap/route_client-reference-manifest.js +1 -0
  1096. package/gui/.next/server/app/api/workflow/models/route.js +1 -0
  1097. package/gui/.next/server/app/api/workflow/models/route.js.nft.json +1 -0
  1098. package/gui/.next/server/app/api/workflow/models/route_client-reference-manifest.js +1 -0
  1099. package/gui/.next/server/app/operations/page.js +2 -0
  1100. package/gui/.next/server/app/operations/page.js.nft.json +1 -0
  1101. package/gui/.next/server/app/operations/page_client-reference-manifest.js +1 -0
  1102. package/gui/.next/server/app/page.js +3 -2
  1103. package/gui/.next/server/app/page.js.nft.json +1 -1
  1104. package/gui/.next/server/app/page_client-reference-manifest.js +1 -1
  1105. package/gui/.next/server/app/settings/(console)/connections/page.js +2 -0
  1106. package/gui/.next/server/app/settings/(console)/connections/page.js.nft.json +1 -0
  1107. package/gui/.next/server/app/settings/(console)/connections/page_client-reference-manifest.js +1 -0
  1108. package/gui/.next/server/app/settings/(console)/data-sharing/page.js +2 -0
  1109. package/gui/.next/server/app/settings/(console)/data-sharing/page.js.nft.json +1 -0
  1110. package/gui/.next/server/app/settings/(console)/data-sharing/page_client-reference-manifest.js +1 -0
  1111. package/gui/.next/server/app/settings/(console)/deployments/page.js +2 -0
  1112. package/gui/.next/server/app/settings/(console)/deployments/page.js.nft.json +1 -0
  1113. package/gui/.next/server/app/settings/(console)/deployments/page_client-reference-manifest.js +1 -0
  1114. package/gui/.next/server/app/settings/(console)/linear/page.js +10 -0
  1115. package/gui/.next/server/app/settings/(console)/linear/page.js.nft.json +1 -0
  1116. package/gui/.next/server/app/settings/(console)/linear/page_client-reference-manifest.js +1 -0
  1117. package/gui/.next/server/app/settings/(console)/models/page.js +2 -0
  1118. package/gui/.next/server/app/settings/(console)/models/page.js.nft.json +1 -0
  1119. package/gui/.next/server/app/settings/(console)/models/page_client-reference-manifest.js +1 -0
  1120. package/gui/.next/server/app/settings/(console)/page.js +2 -0
  1121. package/gui/.next/server/app/settings/(console)/page.js.nft.json +1 -0
  1122. package/gui/.next/server/app/settings/(console)/page_client-reference-manifest.js +1 -0
  1123. package/gui/.next/server/app/settings/(console)/repositories/page.js +6 -0
  1124. package/gui/.next/server/app/settings/(console)/repositories/page.js.nft.json +1 -0
  1125. package/gui/.next/server/app/settings/(console)/repositories/page_client-reference-manifest.js +1 -0
  1126. package/gui/.next/server/app/settings/configure/page.js +4 -4
  1127. package/gui/.next/server/app/settings/configure/page.js.nft.json +1 -1
  1128. package/gui/.next/server/app/settings/configure/page_client-reference-manifest.js +1 -1
  1129. package/gui/.next/server/app/workflow/page.js +2 -0
  1130. package/gui/.next/server/app/workflow/page.js.nft.json +1 -0
  1131. package/gui/.next/server/app/workflow/page_client-reference-manifest.js +1 -0
  1132. package/gui/.next/server/app-paths-manifest.json +45 -16
  1133. package/gui/.next/server/chunks/105.js +2 -0
  1134. package/gui/.next/server/chunks/1304.js +200 -0
  1135. package/gui/.next/server/chunks/1536.js +1 -0
  1136. package/gui/.next/server/chunks/1948.js +59 -0
  1137. package/gui/.next/server/chunks/2470.js +3 -0
  1138. package/gui/.next/server/chunks/2581.js +2 -0
  1139. package/gui/.next/server/chunks/383.js +1 -1
  1140. package/gui/.next/server/chunks/521.js +1 -0
  1141. package/gui/.next/server/chunks/553.js +1 -0
  1142. package/gui/.next/server/chunks/5827.js +1 -0
  1143. package/gui/.next/server/chunks/6408.js +1 -0
  1144. package/gui/.next/server/chunks/641.js +1 -0
  1145. package/gui/.next/server/chunks/6482.js +1 -0
  1146. package/gui/.next/server/chunks/6801.js +1 -0
  1147. package/gui/.next/server/chunks/6890.js +1 -0
  1148. package/gui/.next/server/chunks/7201.js +1 -0
  1149. package/gui/.next/server/chunks/7221.js +1 -0
  1150. package/gui/.next/server/chunks/{332.js → 7332.js} +1 -1
  1151. package/gui/.next/server/chunks/7527.js +1 -0
  1152. package/gui/.next/server/chunks/8312.js +1 -0
  1153. package/gui/.next/server/chunks/8476.js +8 -0
  1154. package/gui/.next/server/chunks/8764.js +16 -0
  1155. package/gui/.next/server/chunks/8819.js +22 -0
  1156. package/gui/.next/server/chunks/8825.js +1 -0
  1157. package/gui/.next/server/chunks/9148.js +1 -0
  1158. package/gui/.next/server/chunks/9454.js +1 -0
  1159. package/gui/.next/server/instrumentation.js +1 -0
  1160. package/gui/.next/server/instrumentation.js.nft.json +1 -0
  1161. package/gui/.next/server/middleware-build-manifest.js +1 -1
  1162. package/gui/.next/server/pages/404.html +1 -1
  1163. package/gui/.next/server/pages/500.html +1 -1
  1164. package/gui/.next/server/pages/_document.js +1 -1
  1165. package/gui/.next/server/pages/_document.js.nft.json +1 -1
  1166. package/gui/.next/server/pages/_error.js +2 -2
  1167. package/gui/.next/server/pages/_error.js.nft.json +1 -1
  1168. package/gui/.next/server/pages-manifest.json +1 -1
  1169. package/gui/.next/server/webpack-runtime.js +1 -1
  1170. package/gui/.next/static/chunks/3800-379a4b854a7eb1dc.js +1 -0
  1171. package/gui/.next/static/chunks/464-7503c96bb839c213.js +1 -0
  1172. package/gui/.next/static/chunks/5567-672d065d2668f1ea.js +1 -0
  1173. package/gui/.next/static/chunks/6240-d3f8028539091853.js +1 -0
  1174. package/gui/.next/static/chunks/7420-cb03f2f94db611c4.js +1 -0
  1175. package/gui/.next/static/chunks/8002-528c2e589bc54111.js +1 -0
  1176. package/gui/.next/static/chunks/9188-540635591aa2baf5.js +1 -0
  1177. package/gui/.next/static/chunks/9289-00509b3e0c520cce.js +1 -0
  1178. package/gui/.next/static/chunks/9576-6d94e3d152f876e7.js +1 -0
  1179. package/gui/.next/static/chunks/app/_not-found/page-89865576110e31f0.js +1 -0
  1180. package/gui/.next/static/chunks/app/api/observability/event/route-08ffe80f6f4603f6.js +1 -0
  1181. package/gui/.next/static/chunks/app/api/observability/preferences/route-08ffe80f6f4603f6.js +1 -0
  1182. package/gui/.next/static/chunks/app/api/operations/bootstrap/route-08ffe80f6f4603f6.js +1 -0
  1183. package/gui/.next/static/chunks/app/api/operations/draft/route-08ffe80f6f4603f6.js +1 -0
  1184. package/gui/.next/static/chunks/app/api/settings/apply-config-patch/route-08ffe80f6f4603f6.js +1 -0
  1185. package/gui/.next/static/chunks/app/api/settings/preview-config-patch/route-08ffe80f6f4603f6.js +1 -0
  1186. package/gui/.next/static/chunks/app/api/setup/apply-connect-services/route-08ffe80f6f4603f6.js +1 -0
  1187. package/gui/.next/static/chunks/app/api/setup/apply-harness-repo-provisioning/route-08ffe80f6f4603f6.js +1 -0
  1188. package/gui/.next/static/chunks/app/api/setup/apply-harness-secrets/route-08ffe80f6f4603f6.js +1 -0
  1189. package/gui/.next/static/chunks/app/api/setup/apply-linear-setup/route-08ffe80f6f4603f6.js +1 -0
  1190. package/gui/.next/static/chunks/app/api/setup/apply-linear-workspace/route-08ffe80f6f4603f6.js +1 -0
  1191. package/gui/.next/static/chunks/app/api/setup/apply-local-files/route-08ffe80f6f4603f6.js +1 -0
  1192. package/gui/.next/static/chunks/app/api/setup/apply-runner-upgrade/route-08ffe80f6f4603f6.js +1 -0
  1193. package/gui/.next/static/chunks/app/api/setup/apply-target-repo-provisioning/route-08ffe80f6f4603f6.js +1 -0
  1194. package/gui/.next/static/chunks/app/api/setup/apply-target-workflow/route-08ffe80f6f4603f6.js +1 -0
  1195. package/gui/.next/static/chunks/app/api/setup/apply-vercel-bridge/route-08ffe80f6f4603f6.js +1 -0
  1196. package/gui/.next/static/chunks/app/api/setup/complete-initial-setup/route-08ffe80f6f4603f6.js +1 -0
  1197. package/gui/.next/static/chunks/app/api/setup/finalize-target-workflow/route-08ffe80f6f4603f6.js +1 -0
  1198. package/gui/.next/static/chunks/app/api/setup/harness-provisioning-progress/route-08ffe80f6f4603f6.js +1 -0
  1199. package/gui/.next/static/chunks/app/api/setup/harness-provisioning-summary/route-08ffe80f6f4603f6.js +1 -0
  1200. package/gui/.next/static/chunks/app/api/setup/linear-options/route-08ffe80f6f4603f6.js +1 -0
  1201. package/gui/.next/static/chunks/app/api/setup/linear-setup-progress/route-08ffe80f6f4603f6.js +1 -0
  1202. package/gui/.next/static/chunks/app/api/setup/linear-summary/route-08ffe80f6f4603f6.js +1 -0
  1203. package/gui/.next/static/chunks/app/api/setup/linear-workspace-editor-state/route-08ffe80f6f4603f6.js +1 -0
  1204. package/gui/.next/static/chunks/app/api/setup/local-readiness/route-08ffe80f6f4603f6.js +1 -0
  1205. package/gui/.next/static/chunks/app/api/setup/manual-harness-secret-values/route-08ffe80f6f4603f6.js +1 -0
  1206. package/gui/.next/static/chunks/app/api/setup/preview-connect-services/route-08ffe80f6f4603f6.js +1 -0
  1207. package/gui/.next/static/chunks/app/api/setup/preview-harness-repo-provisioning/route-08ffe80f6f4603f6.js +1 -0
  1208. package/gui/.next/static/chunks/app/api/setup/preview-harness-secrets/route-08ffe80f6f4603f6.js +1 -0
  1209. package/gui/.next/static/chunks/app/api/setup/preview-linear-setup/route-08ffe80f6f4603f6.js +1 -0
  1210. package/gui/.next/static/chunks/app/api/setup/preview-linear-workspace/route-08ffe80f6f4603f6.js +1 -0
  1211. package/gui/.next/static/chunks/app/api/setup/preview-local-files/route-08ffe80f6f4603f6.js +1 -0
  1212. package/gui/.next/static/chunks/app/api/setup/preview-runner-upgrade/route-08ffe80f6f4603f6.js +1 -0
  1213. package/gui/.next/static/chunks/app/api/setup/preview-target-repo-provisioning/route-08ffe80f6f4603f6.js +1 -0
  1214. package/gui/.next/static/chunks/app/api/setup/preview-target-workflow/route-08ffe80f6f4603f6.js +1 -0
  1215. package/gui/.next/static/chunks/app/api/setup/preview-vercel-bridge/route-08ffe80f6f4603f6.js +1 -0
  1216. package/gui/.next/static/chunks/app/api/setup/remote-summary/route-08ffe80f6f4603f6.js +1 -0
  1217. package/gui/.next/static/chunks/app/api/setup/runner-upgrade-progress/route-08ffe80f6f4603f6.js +1 -0
  1218. package/gui/.next/static/chunks/app/api/setup/runner-upgrade-status/route-08ffe80f6f4603f6.js +1 -0
  1219. package/gui/.next/static/chunks/app/api/setup/summary/route-08ffe80f6f4603f6.js +1 -0
  1220. package/gui/.next/static/chunks/app/api/setup/vercel-bridge-options/route-08ffe80f6f4603f6.js +1 -0
  1221. package/gui/.next/static/chunks/app/api/setup/vercel-bridge-redeploy-status/route-08ffe80f6f4603f6.js +1 -0
  1222. package/gui/.next/static/chunks/app/api/setup/vercel-summary/route-08ffe80f6f4603f6.js +1 -0
  1223. package/gui/.next/static/chunks/app/api/setup/verify-harness-repo/route-08ffe80f6f4603f6.js +1 -0
  1224. package/gui/.next/static/chunks/app/api/setup/verify-service/route-08ffe80f6f4603f6.js +1 -0
  1225. package/gui/.next/static/chunks/app/api/setup/verify-target-repo/route-08ffe80f6f4603f6.js +1 -0
  1226. package/gui/.next/static/chunks/app/api/workflow/bootstrap/route-08ffe80f6f4603f6.js +1 -0
  1227. package/gui/.next/static/chunks/app/api/workflow/models/route-08ffe80f6f4603f6.js +1 -0
  1228. package/gui/.next/static/chunks/app/layout-ec756afb9686f579.js +1 -0
  1229. package/gui/.next/static/chunks/app/operations/page-08ffe80f6f4603f6.js +1 -0
  1230. package/gui/.next/static/chunks/app/page-08ffe80f6f4603f6.js +1 -0
  1231. package/gui/.next/static/chunks/app/settings/(console)/connections/page-95847d89fc70089a.js +1 -0
  1232. package/gui/.next/static/chunks/app/settings/(console)/data-sharing/page-3e0d8fe941c7334e.js +1 -0
  1233. package/gui/.next/static/chunks/app/settings/(console)/deployments/page-e3aaff205f09b567.js +1 -0
  1234. package/gui/.next/static/chunks/app/settings/(console)/layout-74ce539ae02dc765.js +1 -0
  1235. package/gui/.next/static/chunks/app/settings/(console)/linear/page-0a1e73b5ec66af90.js +1 -0
  1236. package/gui/.next/static/chunks/app/settings/(console)/models/page-336406c2905983c9.js +1 -0
  1237. package/gui/.next/static/chunks/app/settings/(console)/page-08ffe80f6f4603f6.js +1 -0
  1238. package/gui/.next/static/chunks/app/settings/(console)/repositories/page-b1f7159c7771b16a.js +1 -0
  1239. package/gui/.next/static/chunks/app/settings/configure/loading-5f1e73b910fbd9da.js +1 -0
  1240. package/gui/.next/static/chunks/app/settings/configure/page-54b7572655b9f60f.js +1 -0
  1241. package/gui/.next/static/chunks/app/workflow/page-8087b342a6ece93c.js +1 -0
  1242. package/gui/.next/static/chunks/framework-dc88dc15d5e043e1.js +1 -0
  1243. package/gui/.next/static/chunks/main-5b390d9aaa7199a5.js +1 -0
  1244. package/gui/.next/static/chunks/main-app-7fbf1b54aaed0242.js +1 -0
  1245. package/gui/.next/static/chunks/pages/{_app-2e239ff05bfdf6d6.js → _app-50fa07b56b2d29ac.js} +1 -1
  1246. package/gui/.next/static/chunks/pages/_error-fed8688bdd23f211.js +1 -0
  1247. package/gui/.next/static/chunks/{webpack-1e50074b7e886e1b.js → webpack-b27d2f88ec3d35a4.js} +1 -1
  1248. package/gui/.next/static/css/b7b323a34ac09e0b.css +3 -0
  1249. package/gui/.next/static/wM7YWpWgyTcGc7H5h1u7U/_buildManifest.js +1 -0
  1250. package/gui/.next/trace +6 -4
  1251. package/gui/.next/types/app/api/observability/event/route.ts +347 -0
  1252. package/gui/.next/types/app/api/observability/preferences/route.ts +347 -0
  1253. package/gui/.next/types/app/api/operations/bootstrap/route.ts +347 -0
  1254. package/gui/.next/types/app/api/operations/draft/route.ts +347 -0
  1255. package/gui/.next/types/app/api/settings/apply-config-patch/route.ts +347 -0
  1256. package/gui/.next/types/app/api/settings/preview-config-patch/route.ts +347 -0
  1257. package/gui/.next/types/app/api/setup/apply-linear-workspace/route.ts +347 -0
  1258. package/gui/.next/types/app/api/setup/apply-runner-upgrade/route.ts +347 -0
  1259. package/gui/.next/types/app/api/setup/apply-target-repo-provisioning/route.ts +347 -0
  1260. package/gui/.next/types/app/api/setup/complete-initial-setup/route.ts +347 -0
  1261. package/gui/.next/types/app/api/setup/harness-provisioning-progress/route.ts +347 -0
  1262. package/gui/.next/types/app/api/setup/linear-setup-progress/route.ts +347 -0
  1263. package/gui/.next/types/app/api/setup/linear-workspace-editor-state/route.ts +347 -0
  1264. package/gui/.next/types/app/api/setup/preview-linear-workspace/route.ts +347 -0
  1265. package/gui/.next/types/app/api/setup/preview-runner-upgrade/route.ts +347 -0
  1266. package/gui/.next/types/app/api/setup/preview-target-repo-provisioning/route.ts +347 -0
  1267. package/gui/.next/types/app/api/setup/runner-upgrade-progress/route.ts +347 -0
  1268. package/gui/.next/types/app/api/setup/runner-upgrade-status/route.ts +347 -0
  1269. package/gui/.next/types/app/api/workflow/bootstrap/route.ts +347 -0
  1270. package/gui/.next/types/app/api/workflow/models/route.ts +347 -0
  1271. package/gui/.next/types/app/operations/page.ts +84 -0
  1272. package/gui/.next/types/app/settings/(console)/connections/page.ts +84 -0
  1273. package/gui/.next/types/app/settings/(console)/data-sharing/page.ts +84 -0
  1274. package/gui/.next/types/app/settings/(console)/deployments/page.ts +84 -0
  1275. package/gui/.next/types/app/settings/(console)/layout.ts +84 -0
  1276. package/gui/.next/types/app/settings/(console)/linear/page.ts +84 -0
  1277. package/gui/.next/types/app/settings/(console)/models/page.ts +84 -0
  1278. package/gui/.next/types/app/settings/(console)/page.ts +84 -0
  1279. package/gui/.next/types/app/settings/(console)/repositories/page.ts +84 -0
  1280. package/gui/.next/types/app/workflow/page.ts +84 -0
  1281. package/gui/.next/types/routes.d.ts +33 -3
  1282. package/gui/.next/types/validator.ts +270 -0
  1283. package/observability.public.json +6 -0
  1284. package/package.json +6 -1
  1285. package/templates/.harness/config.example.json +1 -0
  1286. package/workspace-snapshot/files/.agents/skills/architecture-evolution-audit/SKILL.md +282 -0
  1287. package/workspace-snapshot/files/.agents/skills/code-health-audit/SKILL.md +188 -0
  1288. package/workspace-snapshot/files/.agents/skills/implementation/SKILL.md +283 -0
  1289. package/workspace-snapshot/files/.agents/skills/issue-intake/SKILL.md +175 -0
  1290. package/workspace-snapshot/files/.agents/skills/issue-intake/examples.md +112 -0
  1291. package/workspace-snapshot/files/.agents/skills/planner/SKILL.md +263 -0
  1292. package/workspace-snapshot/files/.agents/skills/security-audit/SKILL.md +270 -0
  1293. package/workspace-snapshot/files/.env.example +37 -0
  1294. package/workspace-snapshot/files/.github/CODEOWNERS +4 -0
  1295. package/workspace-snapshot/files/.github/dependabot.yml +12 -0
  1296. package/workspace-snapshot/files/.github/workflows/ci.yml +32 -0
  1297. package/workspace-snapshot/files/.github/workflows/codeql.yml +35 -0
  1298. package/workspace-snapshot/files/.github/workflows/harness-auto-runner.yml +588 -0
  1299. package/workspace-snapshot/files/.github/workflows/p-dev-runner-config-canary.yml +24 -0
  1300. package/workspace-snapshot/files/.harness/config.example.json +84 -0
  1301. package/workspace-snapshot/files/AGENTS.md +141 -0
  1302. package/workspace-snapshot/files/ARCHITECTURE.md +402 -0
  1303. package/workspace-snapshot/files/CHANGELOG.md +211 -0
  1304. package/workspace-snapshot/files/LICENSE +21 -0
  1305. package/workspace-snapshot/files/README.md +116 -0
  1306. package/workspace-snapshot/files/ROADMAP.md +59 -0
  1307. package/workspace-snapshot/files/api/linear-webhook.ts +41 -0
  1308. package/workspace-snapshot/files/apps/gui/app/api/observability/event/route.ts +36 -0
  1309. package/workspace-snapshot/files/apps/gui/app/api/observability/preferences/route.ts +88 -0
  1310. package/workspace-snapshot/files/apps/gui/app/api/operations/bootstrap/route.ts +8 -0
  1311. package/workspace-snapshot/files/apps/gui/app/api/operations/draft/route.ts +15 -0
  1312. package/workspace-snapshot/files/apps/gui/app/api/settings/apply-config-patch/route.ts +52 -0
  1313. package/workspace-snapshot/files/apps/gui/app/api/settings/preview-config-patch/route.ts +40 -0
  1314. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-connect-services/route.ts +21 -0
  1315. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-repo-provisioning/route.ts +36 -0
  1316. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-secrets/route.ts +42 -0
  1317. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-linear-setup/route.ts +23 -0
  1318. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-linear-workspace/route.ts +23 -0
  1319. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-local-files/route.ts +42 -0
  1320. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-runner-upgrade/route.ts +33 -0
  1321. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-target-repo-provisioning/route.ts +38 -0
  1322. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-target-workflow/route.ts +49 -0
  1323. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-vercel-bridge/route.ts +32 -0
  1324. package/workspace-snapshot/files/apps/gui/app/api/setup/complete-initial-setup/route.ts +49 -0
  1325. package/workspace-snapshot/files/apps/gui/app/api/setup/finalize-target-workflow/route.ts +32 -0
  1326. package/workspace-snapshot/files/apps/gui/app/api/setup/harness-provisioning-progress/route.ts +21 -0
  1327. package/workspace-snapshot/files/apps/gui/app/api/setup/harness-provisioning-summary/route.ts +17 -0
  1328. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-options/route.ts +17 -0
  1329. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-setup-progress/route.ts +17 -0
  1330. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-summary/route.ts +15 -0
  1331. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-workspace-editor-state/route.ts +17 -0
  1332. package/workspace-snapshot/files/apps/gui/app/api/setup/local-readiness/route.ts +57 -0
  1333. package/workspace-snapshot/files/apps/gui/app/api/setup/manual-harness-secret-values/route.ts +33 -0
  1334. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-connect-services/route.ts +17 -0
  1335. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-repo-provisioning/route.ts +22 -0
  1336. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-secrets/route.ts +19 -0
  1337. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-linear-setup/route.ts +20 -0
  1338. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-linear-workspace/route.ts +22 -0
  1339. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-local-files/route.ts +17 -0
  1340. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-runner-upgrade/route.ts +17 -0
  1341. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-target-repo-provisioning/route.ts +34 -0
  1342. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-target-workflow/route.ts +25 -0
  1343. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-vercel-bridge/route.ts +23 -0
  1344. package/workspace-snapshot/files/apps/gui/app/api/setup/remote-summary/route.ts +15 -0
  1345. package/workspace-snapshot/files/apps/gui/app/api/setup/runner-upgrade-progress/route.ts +17 -0
  1346. package/workspace-snapshot/files/apps/gui/app/api/setup/runner-upgrade-status/route.ts +72 -0
  1347. package/workspace-snapshot/files/apps/gui/app/api/setup/summary/route.ts +10 -0
  1348. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-options/route.ts +29 -0
  1349. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-redeploy-status/route.ts +22 -0
  1350. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-summary/route.ts +15 -0
  1351. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-harness-repo/route.ts +31 -0
  1352. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-service/route.ts +41 -0
  1353. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-target-repo/route.ts +40 -0
  1354. package/workspace-snapshot/files/apps/gui/app/api/workflow/bootstrap/route.ts +24 -0
  1355. package/workspace-snapshot/files/apps/gui/app/api/workflow/models/route.ts +86 -0
  1356. package/workspace-snapshot/files/apps/gui/app/layout.tsx +28 -0
  1357. package/workspace-snapshot/files/apps/gui/app/operations/page.tsx +23 -0
  1358. package/workspace-snapshot/files/apps/gui/app/page.tsx +11 -0
  1359. package/workspace-snapshot/files/apps/gui/app/settings/(console)/connections/page.tsx +27 -0
  1360. package/workspace-snapshot/files/apps/gui/app/settings/(console)/data-sharing/page.tsx +25 -0
  1361. package/workspace-snapshot/files/apps/gui/app/settings/(console)/deployments/page.tsx +28 -0
  1362. package/workspace-snapshot/files/apps/gui/app/settings/(console)/layout.tsx +45 -0
  1363. package/workspace-snapshot/files/apps/gui/app/settings/(console)/linear/page.tsx +20 -0
  1364. package/workspace-snapshot/files/apps/gui/app/settings/(console)/models/page.tsx +14 -0
  1365. package/workspace-snapshot/files/apps/gui/app/settings/(console)/page.tsx +7 -0
  1366. package/workspace-snapshot/files/apps/gui/app/settings/(console)/repositories/page.tsx +29 -0
  1367. package/workspace-snapshot/files/apps/gui/app/settings/configure/loading.tsx +25 -0
  1368. package/workspace-snapshot/files/apps/gui/app/settings/configure/page.tsx +103 -0
  1369. package/workspace-snapshot/files/apps/gui/app/workflow/page.tsx +24 -0
  1370. package/workspace-snapshot/files/apps/gui/components/custom/app-shell.tsx +33 -0
  1371. package/workspace-snapshot/files/apps/gui/components/custom/application-header.tsx +64 -0
  1372. package/workspace-snapshot/files/apps/gui/components/custom/configure-experience.tsx +933 -0
  1373. package/workspace-snapshot/files/apps/gui/components/custom/configure-page-content.tsx +60 -0
  1374. package/workspace-snapshot/files/apps/gui/components/custom/configure-workflow.tsx +1847 -0
  1375. package/workspace-snapshot/files/apps/gui/components/custom/connected-status.tsx +30 -0
  1376. package/workspace-snapshot/files/apps/gui/components/custom/data-sharing-preferences.tsx +159 -0
  1377. package/workspace-snapshot/files/apps/gui/components/custom/environment-config-form.tsx +418 -0
  1378. package/workspace-snapshot/files/apps/gui/components/custom/first-run-stepper.tsx +199 -0
  1379. package/workspace-snapshot/files/apps/gui/components/custom/github-token-help-disclosure.tsx +142 -0
  1380. package/workspace-snapshot/files/apps/gui/components/custom/guided-cloud-secrets-card.tsx +1046 -0
  1381. package/workspace-snapshot/files/apps/gui/components/custom/guided-linear-workspace-card.tsx +1352 -0
  1382. package/workspace-snapshot/files/apps/gui/components/custom/guided-local-readiness-card.tsx +250 -0
  1383. package/workspace-snapshot/files/apps/gui/components/custom/guided-operation-panel.tsx +102 -0
  1384. package/workspace-snapshot/files/apps/gui/components/custom/guided-progress-check.tsx +37 -0
  1385. package/workspace-snapshot/files/apps/gui/components/custom/guided-setup-progress.tsx +114 -0
  1386. package/workspace-snapshot/files/apps/gui/components/custom/guided-step-success-panel.tsx +50 -0
  1387. package/workspace-snapshot/files/apps/gui/components/custom/guided-step-transition.tsx +114 -0
  1388. package/workspace-snapshot/files/apps/gui/components/custom/guided-target-workflow-card.tsx +603 -0
  1389. package/workspace-snapshot/files/apps/gui/components/custom/guided-vercel-bridge-card.tsx +1023 -0
  1390. package/workspace-snapshot/files/apps/gui/components/custom/local-write-confirmation.tsx +91 -0
  1391. package/workspace-snapshot/files/apps/gui/components/custom/local-write-preview.tsx +52 -0
  1392. package/workspace-snapshot/files/apps/gui/components/custom/observability-settings-card.tsx +23 -0
  1393. package/workspace-snapshot/files/apps/gui/components/custom/preview-panel.tsx +19 -0
  1394. package/workspace-snapshot/files/apps/gui/components/custom/primary-setup-task-card.tsx +65 -0
  1395. package/workspace-snapshot/files/apps/gui/components/custom/readiness-banner.tsx +91 -0
  1396. package/workspace-snapshot/files/apps/gui/components/custom/remote-action-confirmation.tsx +157 -0
  1397. package/workspace-snapshot/files/apps/gui/components/custom/remote-action-preview.tsx +84 -0
  1398. package/workspace-snapshot/files/apps/gui/components/custom/remote-secret-form.tsx +123 -0
  1399. package/workspace-snapshot/files/apps/gui/components/custom/remote-setup-section.tsx +354 -0
  1400. package/workspace-snapshot/files/apps/gui/components/custom/review-cloud-secrets-disclosure.tsx +59 -0
  1401. package/workspace-snapshot/files/apps/gui/components/custom/review-generated-files-disclosure.tsx +67 -0
  1402. package/workspace-snapshot/files/apps/gui/components/custom/review-workflow-changes-disclosure.tsx +59 -0
  1403. package/workspace-snapshot/files/apps/gui/components/custom/section-card.tsx +33 -0
  1404. package/workspace-snapshot/files/apps/gui/components/custom/service-icons.tsx +30 -0
  1405. package/workspace-snapshot/files/apps/gui/components/custom/settings-menu.tsx +109 -0
  1406. package/workspace-snapshot/files/apps/gui/components/custom/setup-apply-result.tsx +52 -0
  1407. package/workspace-snapshot/files/apps/gui/components/custom/setup-checklist.tsx +224 -0
  1408. package/workspace-snapshot/files/apps/gui/components/custom/status-badge.tsx +22 -0
  1409. package/workspace-snapshot/files/apps/gui/components/custom/target-repo-config-form.tsx +667 -0
  1410. package/workspace-snapshot/files/apps/gui/components/custom/target-repo-create-connect.tsx +419 -0
  1411. package/workspace-snapshot/files/apps/gui/components/custom/target-workflow-pr-card.tsx +345 -0
  1412. package/workspace-snapshot/files/apps/gui/components/custom/theme-provider.tsx +11 -0
  1413. package/workspace-snapshot/files/apps/gui/components/custom/theme-toggle.tsx +36 -0
  1414. package/workspace-snapshot/files/apps/gui/components/custom/vercel-bridge-orchestration-status.tsx +65 -0
  1415. package/workspace-snapshot/files/apps/gui/components/custom/workflow-install-pending-panel.tsx +188 -0
  1416. package/workspace-snapshot/files/apps/gui/components/settings/editors/connections-settings-editor.tsx +261 -0
  1417. package/workspace-snapshot/files/apps/gui/components/settings/editors/deployments-settings-editor.tsx +397 -0
  1418. package/workspace-snapshot/files/apps/gui/components/settings/editors/linear-settings-editor.tsx +512 -0
  1419. package/workspace-snapshot/files/apps/gui/components/settings/editors/repositories-settings-editor.tsx +749 -0
  1420. package/workspace-snapshot/files/apps/gui/components/settings/editors/runner-upgrade-settings-card.tsx +533 -0
  1421. package/workspace-snapshot/files/apps/gui/components/settings/settings-models-client.tsx +102 -0
  1422. package/workspace-snapshot/files/apps/gui/components/settings/settings-mutation-panel.tsx +125 -0
  1423. package/workspace-snapshot/files/apps/gui/components/settings/settings-shell.tsx +46 -0
  1424. package/workspace-snapshot/files/apps/gui/components/ui/badge.tsx +40 -0
  1425. package/workspace-snapshot/files/apps/gui/components/ui/button.tsx +52 -0
  1426. package/workspace-snapshot/files/apps/gui/components/ui/card.tsx +64 -0
  1427. package/workspace-snapshot/files/apps/gui/components/ui/checkbox.tsx +21 -0
  1428. package/workspace-snapshot/files/apps/gui/components/ui/dropdown-menu.tsx +257 -0
  1429. package/workspace-snapshot/files/apps/gui/components/ui/guided-select.tsx +22 -0
  1430. package/workspace-snapshot/files/apps/gui/components/ui/input.tsx +22 -0
  1431. package/workspace-snapshot/files/apps/gui/components/ui/label.tsx +20 -0
  1432. package/workspace-snapshot/files/apps/gui/components/ui/separator.tsx +23 -0
  1433. package/workspace-snapshot/files/apps/gui/components/ui/skeleton.tsx +13 -0
  1434. package/workspace-snapshot/files/apps/gui/components/ui/textarea.tsx +22 -0
  1435. package/workspace-snapshot/files/apps/gui/components/workflow/workflow-cards-section.tsx +206 -0
  1436. package/workspace-snapshot/files/apps/gui/components/workflow/workflow-health-panel.tsx +43 -0
  1437. package/workspace-snapshot/files/apps/gui/components/workflow/workflow-model-control.tsx +111 -0
  1438. package/workspace-snapshot/files/apps/gui/components/workflow/workflow-page-client.tsx +161 -0
  1439. package/workspace-snapshot/files/apps/gui/components/workflow/workflow-scope-selector.tsx +41 -0
  1440. package/workspace-snapshot/files/apps/gui/components.json +21 -0
  1441. package/workspace-snapshot/files/apps/gui/instrumentation.ts +136 -0
  1442. package/workspace-snapshot/files/apps/gui/lib/configure-navigation-timing.ts +53 -0
  1443. package/workspace-snapshot/files/apps/gui/lib/constants/breakpoints.ts +13 -0
  1444. package/workspace-snapshot/files/apps/gui/lib/constants/form.ts +13 -0
  1445. package/workspace-snapshot/files/apps/gui/lib/constants/index.ts +4 -0
  1446. package/workspace-snapshot/files/apps/gui/lib/constants/layout.ts +16 -0
  1447. package/workspace-snapshot/files/apps/gui/lib/constants/spacing.ts +8 -0
  1448. package/workspace-snapshot/files/apps/gui/lib/guided-setup.ts +438 -0
  1449. package/workspace-snapshot/files/apps/gui/lib/linear-association-draft.ts +93 -0
  1450. package/workspace-snapshot/files/apps/gui/lib/local-readiness-visual-queue.ts +61 -0
  1451. package/workspace-snapshot/files/apps/gui/lib/observability-client.ts +21 -0
  1452. package/workspace-snapshot/files/apps/gui/lib/observability-preferences.ts +19 -0
  1453. package/workspace-snapshot/files/apps/gui/lib/observability-request-guard.ts +136 -0
  1454. package/workspace-snapshot/files/apps/gui/lib/observability-route.ts +75 -0
  1455. package/workspace-snapshot/files/apps/gui/lib/settings/load-harness-config-summary.ts +20 -0
  1456. package/workspace-snapshot/files/apps/gui/lib/settings/load-repositories-overview.ts +37 -0
  1457. package/workspace-snapshot/files/apps/gui/lib/settings/load-settings-editor-data.ts +51 -0
  1458. package/workspace-snapshot/files/apps/gui/lib/settings/load-target-repo-overview-fields.ts +124 -0
  1459. package/workspace-snapshot/files/apps/gui/lib/settings/runner-upgrade-feature-flag.ts +9 -0
  1460. package/workspace-snapshot/files/apps/gui/lib/settings/runner-upgrade-ssr.ts +13 -0
  1461. package/workspace-snapshot/files/apps/gui/lib/settings/runner-upgrade-ui-gates.ts +87 -0
  1462. package/workspace-snapshot/files/apps/gui/lib/settings/settings-mutation.ts +49 -0
  1463. package/workspace-snapshot/files/apps/gui/lib/settings/settings-navigation.ts +10 -0
  1464. package/workspace-snapshot/files/apps/gui/lib/settings/settings-setup-client.ts +312 -0
  1465. package/workspace-snapshot/files/apps/gui/lib/setup-json-response.ts +19 -0
  1466. package/workspace-snapshot/files/apps/gui/lib/setup-server.ts +1427 -0
  1467. package/workspace-snapshot/files/apps/gui/lib/step6-remote-state.ts +43 -0
  1468. package/workspace-snapshot/files/apps/gui/lib/use-theme-toggle.ts +26 -0
  1469. package/workspace-snapshot/files/apps/gui/lib/utils.ts +6 -0
  1470. package/workspace-snapshot/files/apps/gui/lib/vercel-bridge-polling-ui.ts +103 -0
  1471. package/workspace-snapshot/files/apps/gui/lib/verification-state.ts +266 -0
  1472. package/workspace-snapshot/files/apps/gui/lib/workflow/api-client.ts +84 -0
  1473. package/workspace-snapshot/files/apps/gui/lib/workflow/use-model-autosave.ts +90 -0
  1474. package/workspace-snapshot/files/apps/gui/lib/workflow/use-workflow-model-save.ts +265 -0
  1475. package/workspace-snapshot/files/apps/gui/lib/workflow/workflow-health.ts +53 -0
  1476. package/workspace-snapshot/files/apps/gui/lib/workflow/workflow-ownership.ts +47 -0
  1477. package/workspace-snapshot/files/apps/gui/lib/workflow/workflow-status-content.ts +149 -0
  1478. package/workspace-snapshot/files/apps/gui/lib/workflow/workflow-violation-messages.ts +49 -0
  1479. package/workspace-snapshot/files/apps/gui/lib/workflow-server.ts +307 -0
  1480. package/workspace-snapshot/files/apps/gui/next-env.d.ts +6 -0
  1481. package/workspace-snapshot/files/apps/gui/next.config.ts +39 -0
  1482. package/workspace-snapshot/files/apps/gui/postcss.config.mjs +8 -0
  1483. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-classic.png +0 -0
  1484. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-new-token.png +0 -0
  1485. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-verify-email.png +0 -0
  1486. package/workspace-snapshot/files/apps/gui/styles/globals.css +86 -0
  1487. package/workspace-snapshot/files/apps/gui/tsconfig.json +24 -0
  1488. package/workspace-snapshot/files/apps/gui/tweetsodium.d.ts +14 -0
  1489. package/workspace-snapshot/files/docs/architecture/canonical-product-development-workflow.md +70 -0
  1490. package/workspace-snapshot/files/docs/architecture/linear-automation-state-machine.md +283 -0
  1491. package/workspace-snapshot/files/docs/decisions/0001-cursor-first-v0.1.md +59 -0
  1492. package/workspace-snapshot/files/docs/decisions/0003-automation-state-machine-and-auto-model-policy.md +65 -0
  1493. package/workspace-snapshot/files/docs/decisions/0004-agent-provider-boundary.md +109 -0
  1494. package/workspace-snapshot/files/docs/design/product-development-harness-gui.md +1023 -0
  1495. package/workspace-snapshot/files/docs/getting-started.md +123 -0
  1496. package/workspace-snapshot/files/docs/gui-local.md +151 -0
  1497. package/workspace-snapshot/files/docs/gui-remote-setup.md +106 -0
  1498. package/workspace-snapshot/files/docs/integration-repair.md +82 -0
  1499. package/workspace-snapshot/files/docs/issue-intake.md +136 -0
  1500. package/workspace-snapshot/files/docs/linear-watcher-setup.md +184 -0
  1501. package/workspace-snapshot/files/docs/milestones/m1-runner-foundation.md +51 -0
  1502. package/workspace-snapshot/files/docs/milestones/m2-planning-phase.md +129 -0
  1503. package/workspace-snapshot/files/docs/milestones/m3-implementation-phase.md +158 -0
  1504. package/workspace-snapshot/files/docs/milestones/m4-handoff-phase.md +122 -0
  1505. package/workspace-snapshot/files/docs/milestones/m5-revision-phase.md +101 -0
  1506. package/workspace-snapshot/files/docs/milestones/m6-merge-phase.md +143 -0
  1507. package/workspace-snapshot/files/docs/milestones/m7-issue-intake.md +72 -0
  1508. package/workspace-snapshot/files/docs/milestones/m8-linear-watcher.md +80 -0
  1509. package/workspace-snapshot/files/docs/npm-packaging-spike.md +52 -0
  1510. package/workspace-snapshot/files/docs/observability-and-privacy.md +247 -0
  1511. package/workspace-snapshot/files/docs/operator-config.md +202 -0
  1512. package/workspace-snapshot/files/docs/p-dev.md +247 -0
  1513. package/workspace-snapshot/files/docs/production-sync-automation.md +176 -0
  1514. package/workspace-snapshot/files/docs/provider-portability.md +131 -0
  1515. package/workspace-snapshot/files/docs/releases/release-process.md +400 -0
  1516. package/workspace-snapshot/files/docs/releases/v0.2.0.md +193 -0
  1517. package/workspace-snapshot/files/docs/releases/v0.3.0.md +188 -0
  1518. package/workspace-snapshot/files/docs/releases/v0.3.1.md +138 -0
  1519. package/workspace-snapshot/files/docs/releases/v0.4.0.md +93 -0
  1520. package/workspace-snapshot/files/docs/research/001-manual-run-retrospective.md +64 -0
  1521. package/workspace-snapshot/files/docs/research/002-linear-cursor-integration-smoke-test.md +64 -0
  1522. package/workspace-snapshot/files/docs/research/003-cursor-automation-planning-router-spike.md +104 -0
  1523. package/workspace-snapshot/files/docs/research/README.md +26 -0
  1524. package/workspace-snapshot/files/docs/security.md +198 -0
  1525. package/workspace-snapshot/files/docs/settings-console.md +44 -0
  1526. package/workspace-snapshot/files/docs/skills/README.md +7 -0
  1527. package/workspace-snapshot/files/docs/skills/skill-architecture.md +197 -0
  1528. package/workspace-snapshot/files/docs/target-repo-branch-setup.md +80 -0
  1529. package/workspace-snapshot/files/evals/README.md +31 -0
  1530. package/workspace-snapshot/files/examples/README.md +32 -0
  1531. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/README.md +49 -0
  1532. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/eval-scorecard.md +63 -0
  1533. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/implementation-plan.md +79 -0
  1534. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/linear-issue.md +74 -0
  1535. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/pr-readiness-report.md +92 -0
  1536. package/workspace-snapshot/files/examples/runs/m5.5-live-sandbox-smoke/README.md +73 -0
  1537. package/workspace-snapshot/files/gpt/issue-intake/custom-gpt-instructions.md +112 -0
  1538. package/workspace-snapshot/files/gpt/issue-intake/knowledge.md +278 -0
  1539. package/workspace-snapshot/files/gpt/issue-intake/setup-guide.md +115 -0
  1540. package/workspace-snapshot/files/gpt/issue-intake/smoke-test.md +119 -0
  1541. package/workspace-snapshot/files/harness.config.json +92 -0
  1542. package/workspace-snapshot/files/harness.config.schema.json +466 -0
  1543. package/workspace-snapshot/files/package-lock.json +5502 -0
  1544. package/workspace-snapshot/files/package.json +68 -0
  1545. package/workspace-snapshot/files/packages/p-dev/LICENSE +21 -0
  1546. package/workspace-snapshot/files/packages/p-dev/README.md +72 -0
  1547. package/workspace-snapshot/files/packages/p-dev/gui.next.config.mjs +13 -0
  1548. package/workspace-snapshot/files/packages/p-dev/observability.public.json +6 -0
  1549. package/workspace-snapshot/files/packages/p-dev/package.json +67 -0
  1550. package/workspace-snapshot/files/prompts/issue-intake-chatgpt.md +268 -0
  1551. package/workspace-snapshot/files/scripts/configure-browser-matrix.config.ts +40 -0
  1552. package/workspace-snapshot/files/scripts/configure-browser-matrix.spec.ts +294 -0
  1553. package/workspace-snapshot/files/scripts/configure-step4-harness-readiness.config.ts +118 -0
  1554. package/workspace-snapshot/files/scripts/configure-step4-harness-readiness.spec.ts +80 -0
  1555. package/workspace-snapshot/files/scripts/generate-config-schema.ts +16 -0
  1556. package/workspace-snapshot/files/scripts/prepare-configure-browser-workspace.ts +138 -0
  1557. package/workspace-snapshot/files/scripts/prepare-p-dev-package.ts +164 -0
  1558. package/workspace-snapshot/files/scripts/workflow-browser-matrix.config.ts +27 -0
  1559. package/workspace-snapshot/files/scripts/workflow-browser-matrix.spec.ts +151 -0
  1560. package/workspace-snapshot/files/skills/README.md +7 -0
  1561. package/workspace-snapshot/files/skills/issue-intake/README.md +5 -0
  1562. package/workspace-snapshot/files/src/agents/cursor-provider.ts +107 -0
  1563. package/workspace-snapshot/files/src/agents/index.ts +64 -0
  1564. package/workspace-snapshot/files/src/agents/provider.ts +7 -0
  1565. package/workspace-snapshot/files/src/agents/types.ts +121 -0
  1566. package/workspace-snapshot/files/src/artifacts/events.ts +31 -0
  1567. package/workspace-snapshot/files/src/artifacts/manifest-fields.ts +9 -0
  1568. package/workspace-snapshot/files/src/artifacts/manifest.ts +20 -0
  1569. package/workspace-snapshot/files/src/artifacts/paths.ts +145 -0
  1570. package/workspace-snapshot/files/src/artifacts/redact.ts +66 -0
  1571. package/workspace-snapshot/files/src/artifacts/run-id.ts +4 -0
  1572. package/workspace-snapshot/files/src/artifacts/snapshot.ts +13 -0
  1573. package/workspace-snapshot/files/src/artifacts/summary.ts +116 -0
  1574. package/workspace-snapshot/files/src/artifacts/write-json-out-manifest.ts +90 -0
  1575. package/workspace-snapshot/files/src/cli/commands/canary-runner-config.ts +6 -0
  1576. package/workspace-snapshot/files/src/cli/commands/diagnose-vercel-bridge.ts +25 -0
  1577. package/workspace-snapshot/files/src/cli/commands/doctor.ts +353 -0
  1578. package/workspace-snapshot/files/src/cli/commands/inspect.ts +46 -0
  1579. package/workspace-snapshot/files/src/cli/commands/operator-init.ts +39 -0
  1580. package/workspace-snapshot/files/src/cli/commands/redact-output.ts +19 -0
  1581. package/workspace-snapshot/files/src/cli/commands/resolve-route.ts +86 -0
  1582. package/workspace-snapshot/files/src/cli/commands/run.ts +101 -0
  1583. package/workspace-snapshot/files/src/cli/commands/sync-managed-runner.ts +126 -0
  1584. package/workspace-snapshot/files/src/cli/commands/sync-production.ts +207 -0
  1585. package/workspace-snapshot/files/src/cli/commands/validate-issue.ts +72 -0
  1586. package/workspace-snapshot/files/src/cli/exit-codes.ts +4 -0
  1587. package/workspace-snapshot/files/src/cli/finalize-exit.ts +9 -0
  1588. package/workspace-snapshot/files/src/cli/program.ts +247 -0
  1589. package/workspace-snapshot/files/src/config/assert-cloud-config-fingerprint.ts +36 -0
  1590. package/workspace-snapshot/files/src/config/cloud-config-fingerprint.ts +90 -0
  1591. package/workspace-snapshot/files/src/config/defaults.ts +33 -0
  1592. package/workspace-snapshot/files/src/config/legacy-linear-top-level.ts +69 -0
  1593. package/workspace-snapshot/files/src/config/linear-association-gate.ts +80 -0
  1594. package/workspace-snapshot/files/src/config/load-config.ts +80 -0
  1595. package/workspace-snapshot/files/src/config/load-dotenv.ts +11 -0
  1596. package/workspace-snapshot/files/src/config/resolve-config.ts +127 -0
  1597. package/workspace-snapshot/files/src/config/resolve-linear-team.ts +41 -0
  1598. package/workspace-snapshot/files/src/config/resolve-linear-workspace.ts +391 -0
  1599. package/workspace-snapshot/files/src/config/role-models.ts +39 -0
  1600. package/workspace-snapshot/files/src/config/runner-upgrade-sync-gate.ts +26 -0
  1601. package/workspace-snapshot/files/src/config/schema.ts +146 -0
  1602. package/workspace-snapshot/files/src/config/status-names.ts +63 -0
  1603. package/workspace-snapshot/files/src/config/types.ts +5 -0
  1604. package/workspace-snapshot/files/src/config/workspace-root.ts +28 -0
  1605. package/workspace-snapshot/files/src/cursor/agent-factory.ts +172 -0
  1606. package/workspace-snapshot/files/src/cursor/builder-resume-errors.ts +41 -0
  1607. package/workspace-snapshot/files/src/cursor/errors.ts +18 -0
  1608. package/workspace-snapshot/files/src/cursor/git-result.ts +87 -0
  1609. package/workspace-snapshot/files/src/cursor/model.ts +128 -0
  1610. package/workspace-snapshot/files/src/cursor/revision-git-result.ts +80 -0
  1611. package/workspace-snapshot/files/src/cursor/run-cleanup.ts +30 -0
  1612. package/workspace-snapshot/files/src/cursor/run-observer.ts +380 -0
  1613. package/workspace-snapshot/files/src/cursor/urls.ts +19 -0
  1614. package/workspace-snapshot/files/src/fixture/frontmatter.ts +56 -0
  1615. package/workspace-snapshot/files/src/github/actions-url.ts +13 -0
  1616. package/workspace-snapshot/files/src/github/auth-verification-retry.ts +63 -0
  1617. package/workspace-snapshot/files/src/github/base-branch.ts +120 -0
  1618. package/workspace-snapshot/files/src/github/check-policy.ts +108 -0
  1619. package/workspace-snapshot/files/src/github/client.ts +995 -0
  1620. package/workspace-snapshot/files/src/github/commit-reachability.ts +184 -0
  1621. package/workspace-snapshot/files/src/github/links.ts +23 -0
  1622. package/workspace-snapshot/files/src/github/merge-result.ts +31 -0
  1623. package/workspace-snapshot/files/src/github/pr-discovery.ts +55 -0
  1624. package/workspace-snapshot/files/src/github/pr-inspector.ts +297 -0
  1625. package/workspace-snapshot/files/src/github/pr-url.ts +23 -0
  1626. package/workspace-snapshot/files/src/github/rate-limit-metadata.ts +105 -0
  1627. package/workspace-snapshot/files/src/gui/configure-health.ts +160 -0
  1628. package/workspace-snapshot/files/src/gui/dev-server-process.ts +213 -0
  1629. package/workspace-snapshot/files/src/gui/port.ts +78 -0
  1630. package/workspace-snapshot/files/src/gui/repo-root.ts +80 -0
  1631. package/workspace-snapshot/files/src/gui/start-configure-stable.ts +143 -0
  1632. package/workspace-snapshot/files/src/gui/start-gui.ts +131 -0
  1633. package/workspace-snapshot/files/src/index.ts +10 -0
  1634. package/workspace-snapshot/files/src/linear/client.ts +59 -0
  1635. package/workspace-snapshot/files/src/linear/comment-card.ts +74 -0
  1636. package/workspace-snapshot/files/src/linear/comments.ts +943 -0
  1637. package/workspace-snapshot/files/src/linear/handoff-comment.ts +19 -0
  1638. package/workspace-snapshot/files/src/linear/issue-query.ts +74 -0
  1639. package/workspace-snapshot/files/src/linear/markers.ts +266 -0
  1640. package/workspace-snapshot/files/src/linear/merge-source-comment.ts +46 -0
  1641. package/workspace-snapshot/files/src/linear/parser.ts +161 -0
  1642. package/workspace-snapshot/files/src/linear/phase-labels.ts +58 -0
  1643. package/workspace-snapshot/files/src/linear/planning-comment.ts +19 -0
  1644. package/workspace-snapshot/files/src/linear/pm-feedback-comment.ts +41 -0
  1645. package/workspace-snapshot/files/src/linear/project-harness-metadata.ts +147 -0
  1646. package/workspace-snapshot/files/src/linear/project-metadata-sync.ts +115 -0
  1647. package/workspace-snapshot/files/src/linear/revision-comment.ts +19 -0
  1648. package/workspace-snapshot/files/src/linear/run-status-comment.ts +197 -0
  1649. package/workspace-snapshot/files/src/linear/states.ts +20 -0
  1650. package/workspace-snapshot/files/src/linear/writer.ts +241 -0
  1651. package/workspace-snapshot/files/src/observability/adapters/fake.ts +267 -0
  1652. package/workspace-snapshot/files/src/observability/adapters/noop.ts +62 -0
  1653. package/workspace-snapshot/files/src/observability/adapters/posthog.ts +165 -0
  1654. package/workspace-snapshot/files/src/observability/adapters/sentry.ts +276 -0
  1655. package/workspace-snapshot/files/src/observability/analytics-schemas.ts +150 -0
  1656. package/workspace-snapshot/files/src/observability/consent.ts +70 -0
  1657. package/workspace-snapshot/files/src/observability/constants.ts +25 -0
  1658. package/workspace-snapshot/files/src/observability/context.ts +152 -0
  1659. package/workspace-snapshot/files/src/observability/facade-runtime-state.ts +47 -0
  1660. package/workspace-snapshot/files/src/observability/facade.ts +628 -0
  1661. package/workspace-snapshot/files/src/observability/fatal-handlers.ts +60 -0
  1662. package/workspace-snapshot/files/src/observability/identity.ts +13 -0
  1663. package/workspace-snapshot/files/src/observability/index.ts +47 -0
  1664. package/workspace-snapshot/files/src/observability/local-state.ts +142 -0
  1665. package/workspace-snapshot/files/src/observability/package-config.ts +180 -0
  1666. package/workspace-snapshot/files/src/observability/posthog-dashboard-contract.ts +277 -0
  1667. package/workspace-snapshot/files/src/observability/privacy-schema.ts +229 -0
  1668. package/workspace-snapshot/files/src/observability/product-error-messages.ts +19 -0
  1669. package/workspace-snapshot/files/src/observability/product-errors.ts +139 -0
  1670. package/workspace-snapshot/files/src/observability/provisioning-analytics.ts +28 -0
  1671. package/workspace-snapshot/files/src/observability/redaction.ts +85 -0
  1672. package/workspace-snapshot/files/src/observability/runtime-eligibility.ts +50 -0
  1673. package/workspace-snapshot/files/src/observability/sentry-outbound-privacy.ts +216 -0
  1674. package/workspace-snapshot/files/src/observability/session-dedupe.ts +73 -0
  1675. package/workspace-snapshot/files/src/observability/session-handoff.ts +47 -0
  1676. package/workspace-snapshot/files/src/observability/transport-lifecycle.ts +93 -0
  1677. package/workspace-snapshot/files/src/observability/types.ts +265 -0
  1678. package/workspace-snapshot/files/src/p-dev/browser.ts +26 -0
  1679. package/workspace-snapshot/files/src/p-dev/cli.ts +93 -0
  1680. package/workspace-snapshot/files/src/p-dev/git-object-plumbing.ts +396 -0
  1681. package/workspace-snapshot/files/src/p-dev/launch.ts +252 -0
  1682. package/workspace-snapshot/files/src/p-dev/main.ts +21 -0
  1683. package/workspace-snapshot/files/src/p-dev/next-bin.ts +8 -0
  1684. package/workspace-snapshot/files/src/p-dev/node-version.ts +46 -0
  1685. package/workspace-snapshot/files/src/p-dev/package-paths.ts +117 -0
  1686. package/workspace-snapshot/files/src/p-dev/package-version.ts +63 -0
  1687. package/workspace-snapshot/files/src/p-dev/runtime-mode.ts +28 -0
  1688. package/workspace-snapshot/files/src/p-dev/shutdown.ts +66 -0
  1689. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-digest.ts +50 -0
  1690. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-generator.ts +133 -0
  1691. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-git.ts +221 -0
  1692. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-manifest.ts +389 -0
  1693. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-policy.ts +198 -0
  1694. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-types.ts +67 -0
  1695. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-validation.ts +137 -0
  1696. package/workspace-snapshot/files/src/p-dev/workspace.ts +114 -0
  1697. package/workspace-snapshot/files/src/preview/preview-capability.ts +21 -0
  1698. package/workspace-snapshot/files/src/preview/production-from-merge.ts +143 -0
  1699. package/workspace-snapshot/files/src/preview/urls.ts +28 -0
  1700. package/workspace-snapshot/files/src/preview/vercel-from-pr.ts +123 -0
  1701. package/workspace-snapshot/files/src/product/initialization-state.ts +65 -0
  1702. package/workspace-snapshot/files/src/product/product-marker.ts +76 -0
  1703. package/workspace-snapshot/files/src/product/read-product-marker.ts +63 -0
  1704. package/workspace-snapshot/files/src/prompts/branch-name.ts +22 -0
  1705. package/workspace-snapshot/files/src/prompts/builder.ts +118 -0
  1706. package/workspace-snapshot/files/src/prompts/implementation.md +83 -0
  1707. package/workspace-snapshot/files/src/prompts/integration-repair-builder.ts +65 -0
  1708. package/workspace-snapshot/files/src/prompts/integration-repair.md +117 -0
  1709. package/workspace-snapshot/files/src/prompts/planning.md +72 -0
  1710. package/workspace-snapshot/files/src/prompts/revision-builder.ts +61 -0
  1711. package/workspace-snapshot/files/src/prompts/revision.md +78 -0
  1712. package/workspace-snapshot/files/src/resolver/allowed-repos.ts +18 -0
  1713. package/workspace-snapshot/files/src/resolver/errors.ts +16 -0
  1714. package/workspace-snapshot/files/src/resolver/normalize-repo.ts +32 -0
  1715. package/workspace-snapshot/files/src/resolver/target-repo.ts +177 -0
  1716. package/workspace-snapshot/files/src/runner/builder-thread-acquire.ts +321 -0
  1717. package/workspace-snapshot/files/src/runner/builder-thread-evidence.ts +40 -0
  1718. package/workspace-snapshot/files/src/runner/builder-thread-idempotency.ts +27 -0
  1719. package/workspace-snapshot/files/src/runner/builder-thread-lineage-errors.ts +23 -0
  1720. package/workspace-snapshot/files/src/runner/builder-thread-lineage.ts +555 -0
  1721. package/workspace-snapshot/files/src/runner/builder-thread-types.ts +41 -0
  1722. package/workspace-snapshot/files/src/runner/building-recovery.ts +26 -0
  1723. package/workspace-snapshot/files/src/runner/delivery-dedup.ts +78 -0
  1724. package/workspace-snapshot/files/src/runner/dry-run.ts +137 -0
  1725. package/workspace-snapshot/files/src/runner/errors.ts +70 -0
  1726. package/workspace-snapshot/files/src/runner/execution-environment.ts +179 -0
  1727. package/workspace-snapshot/files/src/runner/failure-finalization.ts +234 -0
  1728. package/workspace-snapshot/files/src/runner/fixture.ts +30 -0
  1729. package/workspace-snapshot/files/src/runner/idempotency.ts +507 -0
  1730. package/workspace-snapshot/files/src/runner/orchestrator.ts +182 -0
  1731. package/workspace-snapshot/files/src/runner/phase-args.ts +49 -0
  1732. package/workspace-snapshot/files/src/runner/phase-infer.ts +67 -0
  1733. package/workspace-snapshot/files/src/runner/phases/handoff.ts +643 -0
  1734. package/workspace-snapshot/files/src/runner/phases/implementation.ts +763 -0
  1735. package/workspace-snapshot/files/src/runner/phases/integration-repair.ts +729 -0
  1736. package/workspace-snapshot/files/src/runner/phases/merge.ts +1280 -0
  1737. package/workspace-snapshot/files/src/runner/phases/planning.ts +499 -0
  1738. package/workspace-snapshot/files/src/runner/phases/production-sync.ts +341 -0
  1739. package/workspace-snapshot/files/src/runner/phases/revision.ts +881 -0
  1740. package/workspace-snapshot/files/src/runner/preflight.ts +345 -0
  1741. package/workspace-snapshot/files/src/runner/resolve-route.ts +183 -0
  1742. package/workspace-snapshot/files/src/runner/run-generation.ts +21 -0
  1743. package/workspace-snapshot/files/src/runner/uninitialized-product-routing.ts +121 -0
  1744. package/workspace-snapshot/files/src/setup/config-builder.ts +131 -0
  1745. package/workspace-snapshot/files/src/setup/config-local-editor.ts +260 -0
  1746. package/workspace-snapshot/files/src/setup/config-writer.ts +173 -0
  1747. package/workspace-snapshot/files/src/setup/control-plane-readiness-server.ts +16 -0
  1748. package/workspace-snapshot/files/src/setup/control-plane-readiness.ts +365 -0
  1749. package/workspace-snapshot/files/src/setup/control-plane-setup-state.ts +116 -0
  1750. package/workspace-snapshot/files/src/setup/control-plane-state-lock.ts +103 -0
  1751. package/workspace-snapshot/files/src/setup/control-plane-types.ts +220 -0
  1752. package/workspace-snapshot/files/src/setup/doctor-summary.ts +96 -0
  1753. package/workspace-snapshot/files/src/setup/env-merge.ts +266 -0
  1754. package/workspace-snapshot/files/src/setup/env-writer.ts +179 -0
  1755. package/workspace-snapshot/files/src/setup/first-run-readiness.ts +1438 -0
  1756. package/workspace-snapshot/files/src/setup/generated-instructions.ts +96 -0
  1757. package/workspace-snapshot/files/src/setup/git-askpass-credentials.ts +80 -0
  1758. package/workspace-snapshot/files/src/setup/github-dispatch-token.ts +119 -0
  1759. package/workspace-snapshot/files/src/setup/github-remote-provider.ts +1059 -0
  1760. package/workspace-snapshot/files/src/setup/github-remote-setup-live.ts +877 -0
  1761. package/workspace-snapshot/files/src/setup/github-repo-slug.ts +31 -0
  1762. package/workspace-snapshot/files/src/setup/github-repository-name.ts +63 -0
  1763. package/workspace-snapshot/files/src/setup/github-secret-encryption.ts +16 -0
  1764. package/workspace-snapshot/files/src/setup/github-target-repository-provider-live.ts +323 -0
  1765. package/workspace-snapshot/files/src/setup/github-target-repository-provider-mock.ts +284 -0
  1766. package/workspace-snapshot/files/src/setup/github-target-repository-provider.ts +86 -0
  1767. package/workspace-snapshot/files/src/setup/github-upload-rate-limit-gate.ts +58 -0
  1768. package/workspace-snapshot/files/src/setup/github-workflow-permissions.ts +175 -0
  1769. package/workspace-snapshot/files/src/setup/gui-view-model.ts +576 -0
  1770. package/workspace-snapshot/files/src/setup/guided-config-form.ts +52 -0
  1771. package/workspace-snapshot/files/src/setup/harness-dispatch-repo.ts +290 -0
  1772. package/workspace-snapshot/files/src/setup/harness-managed-repo-marker.ts +677 -0
  1773. package/workspace-snapshot/files/src/setup/harness-provisioning-context.ts +331 -0
  1774. package/workspace-snapshot/files/src/setup/harness-provisioning-last-run.ts +152 -0
  1775. package/workspace-snapshot/files/src/setup/harness-provisioning-pending-state.ts +285 -0
  1776. package/workspace-snapshot/files/src/setup/harness-provisioning-progress.ts +213 -0
  1777. package/workspace-snapshot/files/src/setup/harness-repo-provisioning.ts +1785 -0
  1778. package/workspace-snapshot/files/src/setup/harness-secret-fingerprint.ts +51 -0
  1779. package/workspace-snapshot/files/src/setup/harness-secret-setup.ts +439 -0
  1780. package/workspace-snapshot/files/src/setup/harness-snapshot-git-transport.ts +846 -0
  1781. package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning-helpers.ts +95 -0
  1782. package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning.ts +1278 -0
  1783. package/workspace-snapshot/files/src/setup/harness-step-readiness-server.ts +39 -0
  1784. package/workspace-snapshot/files/src/setup/harness-step-readiness.ts +72 -0
  1785. package/workspace-snapshot/files/src/setup/harness-template-identity.ts +151 -0
  1786. package/workspace-snapshot/files/src/setup/harness-workspace-snapshot-loader.ts +152 -0
  1787. package/workspace-snapshot/files/src/setup/initial-setup-lifecycle.ts +181 -0
  1788. package/workspace-snapshot/files/src/setup/linear-category-labels.ts +18 -0
  1789. package/workspace-snapshot/files/src/setup/linear-setup-apply.ts +350 -0
  1790. package/workspace-snapshot/files/src/setup/linear-setup-client.ts +372 -0
  1791. package/workspace-snapshot/files/src/setup/linear-setup-plan.ts +447 -0
  1792. package/workspace-snapshot/files/src/setup/linear-setup-progress.ts +113 -0
  1793. package/workspace-snapshot/files/src/setup/linear-setup-summary.ts +33 -0
  1794. package/workspace-snapshot/files/src/setup/linear-status-contract.ts +69 -0
  1795. package/workspace-snapshot/files/src/setup/linear-webhook-env-local.ts +104 -0
  1796. package/workspace-snapshot/files/src/setup/linear-webhook-secret.ts +441 -0
  1797. package/workspace-snapshot/files/src/setup/linear-workflow-status-repair.ts +278 -0
  1798. package/workspace-snapshot/files/src/setup/linear-workspace-apply.ts +309 -0
  1799. package/workspace-snapshot/files/src/setup/linear-workspace-drift.ts +4 -0
  1800. package/workspace-snapshot/files/src/setup/linear-workspace-migration.ts +314 -0
  1801. package/workspace-snapshot/files/src/setup/linear-workspace-plan.ts +407 -0
  1802. package/workspace-snapshot/files/src/setup/local-apply-actions.ts +524 -0
  1803. package/workspace-snapshot/files/src/setup/local-readiness-checks.ts +466 -0
  1804. package/workspace-snapshot/files/src/setup/mock-git-repository-store.ts +291 -0
  1805. package/workspace-snapshot/files/src/setup/mock-target-workflow-finalization.ts +471 -0
  1806. package/workspace-snapshot/files/src/setup/model-settings.ts +73 -0
  1807. package/workspace-snapshot/files/src/setup/packaged-default-route.ts +29 -0
  1808. package/workspace-snapshot/files/src/setup/permission-model.ts +79 -0
  1809. package/workspace-snapshot/files/src/setup/redact-secrets.ts +85 -0
  1810. package/workspace-snapshot/files/src/setup/release-sync-managed-runner.ts +604 -0
  1811. package/workspace-snapshot/files/src/setup/remote-actions.ts +214 -0
  1812. package/workspace-snapshot/files/src/setup/remote-apply-actions.ts +423 -0
  1813. package/workspace-snapshot/files/src/setup/remote-preview-fingerprint.ts +37 -0
  1814. package/workspace-snapshot/files/src/setup/remote-setup-summary.ts +143 -0
  1815. package/workspace-snapshot/files/src/setup/runner-upgrade-canary-dispatch.ts +69 -0
  1816. package/workspace-snapshot/files/src/setup/runner-upgrade-canary.ts +213 -0
  1817. package/workspace-snapshot/files/src/setup/runner-upgrade-evidence.ts +30 -0
  1818. package/workspace-snapshot/files/src/setup/runner-upgrade-pending-state.ts +116 -0
  1819. package/workspace-snapshot/files/src/setup/runner-upgrade-progress.ts +150 -0
  1820. package/workspace-snapshot/files/src/setup/runner-upgrade-provider-live.ts +520 -0
  1821. package/workspace-snapshot/files/src/setup/runner-upgrade-provider.ts +852 -0
  1822. package/workspace-snapshot/files/src/setup/runner-upgrade-status-cache.ts +61 -0
  1823. package/workspace-snapshot/files/src/setup/runner-upgrade-three-way.ts +162 -0
  1824. package/workspace-snapshot/files/src/setup/runner-upgrade-timeouts.ts +386 -0
  1825. package/workspace-snapshot/files/src/setup/runner-upgrade-types.ts +176 -0
  1826. package/workspace-snapshot/files/src/setup/runner-upgrade-worker.ts +149 -0
  1827. package/workspace-snapshot/files/src/setup/runner-upgrade.ts +1926 -0
  1828. package/workspace-snapshot/files/src/setup/secret-change-token.ts +14 -0
  1829. package/workspace-snapshot/files/src/setup/service-verification.ts +689 -0
  1830. package/workspace-snapshot/files/src/setup/settings-config-patch.ts +461 -0
  1831. package/workspace-snapshot/files/src/setup/setup-actions.ts +183 -0
  1832. package/workspace-snapshot/files/src/setup/setup-github-auth.ts +15 -0
  1833. package/workspace-snapshot/files/src/setup/setup-state.ts +85 -0
  1834. package/workspace-snapshot/files/src/setup/stale-smoke-repo.ts +141 -0
  1835. package/workspace-snapshot/files/src/setup/step6-automatic-control-state.ts +59 -0
  1836. package/workspace-snapshot/files/src/setup/sync-downstream-summaries.ts +105 -0
  1837. package/workspace-snapshot/files/src/setup/sync-harness-config-cloud.ts +128 -0
  1838. package/workspace-snapshot/files/src/setup/target-repo-provisioning-pending-state.ts +160 -0
  1839. package/workspace-snapshot/files/src/setup/target-repo-provisioning.ts +704 -0
  1840. package/workspace-snapshot/files/src/setup/target-workflow-finalization-lock.ts +95 -0
  1841. package/workspace-snapshot/files/src/setup/target-workflow-finalization-progress.ts +166 -0
  1842. package/workspace-snapshot/files/src/setup/target-workflow-finalization-types.ts +182 -0
  1843. package/workspace-snapshot/files/src/setup/target-workflow-finalization.ts +1688 -0
  1844. package/workspace-snapshot/files/src/setup/target-workflow-setup.ts +249 -0
  1845. package/workspace-snapshot/files/src/setup/test-only-provisioning-provider.ts +51 -0
  1846. package/workspace-snapshot/files/src/setup/test-only-remote-setup-provider.ts +51 -0
  1847. package/workspace-snapshot/files/src/setup/test-only-runner-upgrade-provider.ts +51 -0
  1848. package/workspace-snapshot/files/src/setup/test-only-target-repo-provisioning-provider.ts +47 -0
  1849. package/workspace-snapshot/files/src/setup/tweetsodium.d.ts +14 -0
  1850. package/workspace-snapshot/files/src/setup/vercel-bridge-artifact.ts +174 -0
  1851. package/workspace-snapshot/files/src/setup/vercel-bridge-deploy.ts +217 -0
  1852. package/workspace-snapshot/files/src/setup/vercel-bridge-diagnostics.ts +510 -0
  1853. package/workspace-snapshot/files/src/setup/vercel-bridge-options.ts +164 -0
  1854. package/workspace-snapshot/files/src/setup/vercel-bridge-orchestration-summary.ts +46 -0
  1855. package/workspace-snapshot/files/src/setup/vercel-bridge-project-marker.ts +8 -0
  1856. package/workspace-snapshot/files/src/setup/vercel-bridge-readiness.ts +151 -0
  1857. package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-normalize.ts +244 -0
  1858. package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-poll.ts +960 -0
  1859. package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-state.ts +49 -0
  1860. package/workspace-snapshot/files/src/setup/vercel-bridge-structured-log.ts +91 -0
  1861. package/workspace-snapshot/files/src/setup/vercel-bridge-verification.ts +63 -0
  1862. package/workspace-snapshot/files/src/setup/vercel-production-redeploy.ts +298 -0
  1863. package/workspace-snapshot/files/src/setup/vercel-project-name.ts +38 -0
  1864. package/workspace-snapshot/files/src/setup/vercel-setup-apply.ts +1404 -0
  1865. package/workspace-snapshot/files/src/setup/vercel-setup-client.ts +789 -0
  1866. package/workspace-snapshot/files/src/setup/vercel-setup-plan.ts +742 -0
  1867. package/workspace-snapshot/files/src/setup/vercel-setup-summary.ts +52 -0
  1868. package/workspace-snapshot/files/src/setup/vercel-webhook-probe.ts +161 -0
  1869. package/workspace-snapshot/files/src/setup/workflow-config-snapshot.ts +22 -0
  1870. package/workspace-snapshot/files/src/setup/workflow-install-branch-recovery.ts +660 -0
  1871. package/workspace-snapshot/files/src/setup/workflow-install-merge-errors.ts +216 -0
  1872. package/workspace-snapshot/files/src/setup/workflow-install-merge-gate.ts +25 -0
  1873. package/workspace-snapshot/files/src/setup/workflow-model-save-queue.ts +251 -0
  1874. package/workspace-snapshot/files/src/setup/workflow-model-sync-lock.ts +103 -0
  1875. package/workspace-snapshot/files/src/setup/workflow-model-sync.ts +259 -0
  1876. package/workspace-snapshot/files/src/setup/workflow-models-sync-evidence.ts +34 -0
  1877. package/workspace-snapshot/files/src/types/parsed-issue.ts +17 -0
  1878. package/workspace-snapshot/files/src/types/run.ts +200 -0
  1879. package/workspace-snapshot/files/src/validate/constants.ts +2 -0
  1880. package/workspace-snapshot/files/src/validate/issue.ts +332 -0
  1881. package/workspace-snapshot/files/src/validate/report.ts +68 -0
  1882. package/workspace-snapshot/files/src/validate/types.ts +32 -0
  1883. package/workspace-snapshot/files/src/webhook/dispatch-github.ts +44 -0
  1884. package/workspace-snapshot/files/src/webhook/dispatch-statuses.ts +18 -0
  1885. package/workspace-snapshot/files/src/webhook/extract-issue-key.ts +49 -0
  1886. package/workspace-snapshot/files/src/webhook/filter.ts +64 -0
  1887. package/workspace-snapshot/files/src/webhook/handle-linear-webhook.ts +215 -0
  1888. package/workspace-snapshot/files/src/webhook/parse-linear-issue-event.ts +109 -0
  1889. package/workspace-snapshot/files/src/webhook/redact-log.ts +26 -0
  1890. package/workspace-snapshot/files/src/webhook/types.ts +78 -0
  1891. package/workspace-snapshot/files/src/webhook/verify.ts +68 -0
  1892. package/workspace-snapshot/files/src/webhook/workflow-command.ts +10 -0
  1893. package/workspace-snapshot/files/src/workflow/canonical-product-development-workflow.ts +584 -0
  1894. package/workspace-snapshot/files/src/workflow/canonical-workflow-gate.ts +255 -0
  1895. package/workspace-snapshot/files/src/workflow/canonical-workflow-validation.ts +297 -0
  1896. package/workspace-snapshot/files/src/workflow/dispatch-metadata.ts +59 -0
  1897. package/workspace-snapshot/files/src/workflow/finalize-harness-run.ts +83 -0
  1898. package/workspace-snapshot/files/src/workflow/manifest-summary.ts +57 -0
  1899. package/workspace-snapshot/files/src/workflow/preflight-canonical.ts +40 -0
  1900. package/workspace-snapshot/files/src/workflow/production-sync-dispatch.ts +65 -0
  1901. package/workspace-snapshot/files/src/workflow/summarize-manifest.ts +20 -0
  1902. package/workspace-snapshot/files/src/workflow/validate.ts +43 -0
  1903. package/workspace-snapshot/files/src/workflow/write-dispatch-metadata.ts +8 -0
  1904. package/workspace-snapshot/files/src/workflow/write-fallback-manifest.ts +39 -0
  1905. package/workspace-snapshot/files/src/workflow-page/bootstrap.ts +277 -0
  1906. package/workspace-snapshot/files/src/workflow-page/catalog-validation.ts +158 -0
  1907. package/workspace-snapshot/files/src/workflow-page/constants.ts +22 -0
  1908. package/workspace-snapshot/files/src/workflow-page/current-workflow.ts +225 -0
  1909. package/workspace-snapshot/files/src/workflow-page/fingerprint.ts +9 -0
  1910. package/workspace-snapshot/files/src/workflow-page/fixture-definition.ts +16 -0
  1911. package/workspace-snapshot/files/src/workflow-page/fixture-role-models.ts +50 -0
  1912. package/workspace-snapshot/files/src/workflow-page/fixtures/basic-current-workflow.ts +39 -0
  1913. package/workspace-snapshot/files/src/workflow-page/fixtures/branching-pr-review.ts +11 -0
  1914. package/workspace-snapshot/files/src/workflow-page/fixtures/canonical-violations.ts +50 -0
  1915. package/workspace-snapshot/files/src/workflow-page/fixtures/credential-errors.ts +13 -0
  1916. package/workspace-snapshot/files/src/workflow-page/fixtures/empty-linear-statuses.ts +10 -0
  1917. package/workspace-snapshot/files/src/workflow-page/fixtures/hundred-node-performance.ts +23 -0
  1918. package/workspace-snapshot/files/src/workflow-page/fixtures/index.ts +37 -0
  1919. package/workspace-snapshot/files/src/workflow-page/fixtures/model-catalog-snapshot.ts +34 -0
  1920. package/workspace-snapshot/files/src/workflow-page/fixtures/workflow-scopes.ts +18 -0
  1921. package/workspace-snapshot/files/src/workflow-page/linear-status-source.ts +65 -0
  1922. package/workspace-snapshot/files/src/workflow-page/model-catalog-lookup.ts +8 -0
  1923. package/workspace-snapshot/files/src/workflow-page/model-catalog-utils.ts +83 -0
  1924. package/workspace-snapshot/files/src/workflow-page/model-catalog.ts +60 -0
  1925. package/workspace-snapshot/files/src/workflow-page/scope-branches.ts +27 -0
  1926. package/workspace-snapshot/files/src/workflow-page/source-context.ts +91 -0
  1927. package/workspace-snapshot/files/src/workflow-page/types.ts +134 -0
  1928. package/workspace-snapshot/files/src/workflow-page/workflow-scopes.ts +73 -0
  1929. package/workspace-snapshot/files/templates/eval-scorecard.md +54 -0
  1930. package/workspace-snapshot/files/templates/implementation-plan.md +59 -0
  1931. package/workspace-snapshot/files/templates/linear-issue.md +53 -0
  1932. package/workspace-snapshot/files/templates/pr-readiness-report.md +57 -0
  1933. package/workspace-snapshot/files/tests/agents/cursor-provider.test.ts +250 -0
  1934. package/workspace-snapshot/files/tests/artifacts/manifest.test.ts +54 -0
  1935. package/workspace-snapshot/files/tests/artifacts/redact.test.ts +58 -0
  1936. package/workspace-snapshot/files/tests/cli/doctor.test.ts +120 -0
  1937. package/workspace-snapshot/files/tests/cli/finalize-exit.test.ts +28 -0
  1938. package/workspace-snapshot/files/tests/cli/json-out-manifest.test.ts +96 -0
  1939. package/workspace-snapshot/files/tests/cli/operator-init.test.ts +146 -0
  1940. package/workspace-snapshot/files/tests/cli/sync-production-dispatch.test.ts +103 -0
  1941. package/workspace-snapshot/files/tests/cli/validate-issue.test.ts +99 -0
  1942. package/workspace-snapshot/files/tests/config/cloud-config-fingerprint.test.ts +62 -0
  1943. package/workspace-snapshot/files/tests/config/legacy-linear-top-level.test.ts +86 -0
  1944. package/workspace-snapshot/files/tests/config/load-dotenv.test.ts +64 -0
  1945. package/workspace-snapshot/files/tests/config/onboarding-cloud-runner-contract.test.ts +139 -0
  1946. package/workspace-snapshot/files/tests/config/resolve-config.test.ts +273 -0
  1947. package/workspace-snapshot/files/tests/config/resolve-linear-workspace.test.ts +314 -0
  1948. package/workspace-snapshot/files/tests/config/role-models.test.ts +35 -0
  1949. package/workspace-snapshot/files/tests/config/schema.test.ts +107 -0
  1950. package/workspace-snapshot/files/tests/cursor/agent-factory.test.ts +341 -0
  1951. package/workspace-snapshot/files/tests/cursor/git-result.test.ts +77 -0
  1952. package/workspace-snapshot/files/tests/cursor/model.test.ts +108 -0
  1953. package/workspace-snapshot/files/tests/cursor/revision-git-result.test.ts +68 -0
  1954. package/workspace-snapshot/files/tests/cursor/role-models.test.ts +52 -0
  1955. package/workspace-snapshot/files/tests/cursor/run-cleanup.test.ts +52 -0
  1956. package/workspace-snapshot/files/tests/cursor/run-observer.test.ts +316 -0
  1957. package/workspace-snapshot/files/tests/cursor/urls.test.ts +27 -0
  1958. package/workspace-snapshot/files/tests/fixtures/config/minimal.json +16 -0
  1959. package/workspace-snapshot/files/tests/fixtures/github/pr-4-vercel-comment.json +10 -0
  1960. package/workspace-snapshot/files/tests/fixtures/issues/broad-for-direct-impl.md +28 -0
  1961. package/workspace-snapshot/files/tests/fixtures/issues/context-target-repo.md +21 -0
  1962. package/workspace-snapshot/files/tests/fixtures/issues/explicit-target-repo.md +21 -0
  1963. package/workspace-snapshot/files/tests/fixtures/issues/gpt-broad-example.md +35 -0
  1964. package/workspace-snapshot/files/tests/fixtures/issues/gpt-narrow-example.md +30 -0
  1965. package/workspace-snapshot/files/tests/fixtures/issues/invalid-missing-task.md +16 -0
  1966. package/workspace-snapshot/files/tests/fixtures/issues/invalid-no-ac-bullets.md +20 -0
  1967. package/workspace-snapshot/files/tests/fixtures/issues/missing-acceptance-criteria.md +17 -0
  1968. package/workspace-snapshot/files/tests/fixtures/issues/unknown-repo.md +20 -0
  1969. package/workspace-snapshot/files/tests/fixtures/issues/valid-minimal.md +20 -0
  1970. package/workspace-snapshot/files/tests/fixtures/issues/valid-project-only.md +17 -0
  1971. package/workspace-snapshot/files/tests/fixtures/issues/valid-target-app.md +31 -0
  1972. package/workspace-snapshot/files/tests/fixtures/linear/implementation-comment-wes-13.md +16 -0
  1973. package/workspace-snapshot/files/tests/fixtures/linear/pm-feedback-wes-13.md +3 -0
  1974. package/workspace-snapshot/files/tests/fixtures/webhook/issue-building-to-pr-open.json +27 -0
  1975. package/workspace-snapshot/files/tests/fixtures/webhook/issue-pm-review.json +27 -0
  1976. package/workspace-snapshot/files/tests/fixtures/webhook/issue-ready-for-planning.json +27 -0
  1977. package/workspace-snapshot/files/tests/fixtures/webhook/issue-title-only-update.json +25 -0
  1978. package/workspace-snapshot/files/tests/fixtures/workflows/harness-auto-runner-with-production-sync.yml +586 -0
  1979. package/workspace-snapshot/files/tests/fixtures/workflows/trigger-harness-production-sync.yml +31 -0
  1980. package/workspace-snapshot/files/tests/github/actions-url.test.ts +45 -0
  1981. package/workspace-snapshot/files/tests/github/auth-verification-retry.test.ts +141 -0
  1982. package/workspace-snapshot/files/tests/github/base-branch.test.ts +156 -0
  1983. package/workspace-snapshot/files/tests/github/check-policy.test.ts +59 -0
  1984. package/workspace-snapshot/files/tests/github/client.test.ts +226 -0
  1985. package/workspace-snapshot/files/tests/github/commit-reachability.test.ts +148 -0
  1986. package/workspace-snapshot/files/tests/github/merge-result.test.ts +26 -0
  1987. package/workspace-snapshot/files/tests/github/pr-discovery.test.ts +55 -0
  1988. package/workspace-snapshot/files/tests/github/pr-inspector.test.ts +393 -0
  1989. package/workspace-snapshot/files/tests/github/pr-url.test.ts +30 -0
  1990. package/workspace-snapshot/files/tests/github/rate-limit-metadata.test.ts +92 -0
  1991. package/workspace-snapshot/files/tests/gui/app-shell-settings-menu.test.ts +115 -0
  1992. package/workspace-snapshot/files/tests/gui/configure-fix-loop.test.ts +473 -0
  1993. package/workspace-snapshot/files/tests/gui/configure-health.test.ts +67 -0
  1994. package/workspace-snapshot/files/tests/gui/configure-navigation-contract.test.ts +107 -0
  1995. package/workspace-snapshot/files/tests/gui/configure-target-repo-create.test.ts +103 -0
  1996. package/workspace-snapshot/files/tests/gui/configure-workflow-readiness.test.ts +117 -0
  1997. package/workspace-snapshot/files/tests/gui/data-sharing-preferences.test.ts +43 -0
  1998. package/workspace-snapshot/files/tests/gui/design-system.test.ts +146 -0
  1999. package/workspace-snapshot/files/tests/gui/dev-server-process.test.ts +22 -0
  2000. package/workspace-snapshot/files/tests/gui/guided-linear-workspace-card.test.ts +168 -0
  2001. package/workspace-snapshot/files/tests/gui/guided-operation-ux.test.ts +100 -0
  2002. package/workspace-snapshot/files/tests/gui/guided-setup-progress.test.ts +267 -0
  2003. package/workspace-snapshot/files/tests/gui/guided-setup.test.ts +246 -0
  2004. package/workspace-snapshot/files/tests/gui/guided-target-workflow-polling.test.ts +38 -0
  2005. package/workspace-snapshot/files/tests/gui/linear-association-draft.test.ts +93 -0
  2006. package/workspace-snapshot/files/tests/gui/local-readiness-stream.test.ts +154 -0
  2007. package/workspace-snapshot/files/tests/gui/local-readiness-visual-queue.test.ts +69 -0
  2008. package/workspace-snapshot/files/tests/gui/local-readiness-workspace.test.ts +299 -0
  2009. package/workspace-snapshot/files/tests/gui/m6-configure-boundaries.test.ts +1026 -0
  2010. package/workspace-snapshot/files/tests/gui/observability-preferences-route.test.ts +343 -0
  2011. package/workspace-snapshot/files/tests/gui/observability-request-guard.test.ts +177 -0
  2012. package/workspace-snapshot/files/tests/gui/packaged-harness-cloud-secrets-routes.test.ts +303 -0
  2013. package/workspace-snapshot/files/tests/gui/packaged-harness-provisioning-routes.test.ts +212 -0
  2014. package/workspace-snapshot/files/tests/gui/packaged-harness-target-workflow-routes.test.ts +227 -0
  2015. package/workspace-snapshot/files/tests/gui/packaged-runner-upgrade-routes.test.ts +532 -0
  2016. package/workspace-snapshot/files/tests/gui/packaged-target-repo-provisioning-routes.test.ts +108 -0
  2017. package/workspace-snapshot/files/tests/gui/port.test.ts +74 -0
  2018. package/workspace-snapshot/files/tests/gui/repo-root.test.ts +115 -0
  2019. package/workspace-snapshot/files/tests/gui/runner-upgrade-settings-card.test.ts +97 -0
  2020. package/workspace-snapshot/files/tests/gui/settings-cursor.test.ts +39 -0
  2021. package/workspace-snapshot/files/tests/gui/settings-deployments-autoload.test.ts +57 -0
  2022. package/workspace-snapshot/files/tests/gui/settings-mutation-editors.test.ts +154 -0
  2023. package/workspace-snapshot/files/tests/gui/settings-navigation.test.ts +95 -0
  2024. package/workspace-snapshot/files/tests/gui/settings-repositories-page.test.ts +54 -0
  2025. package/workspace-snapshot/files/tests/gui/setup-api.test.ts +181 -0
  2026. package/workspace-snapshot/files/tests/gui/setup-json-response.test.ts +34 -0
  2027. package/workspace-snapshot/files/tests/gui/step6-remote-state.test.ts +75 -0
  2028. package/workspace-snapshot/files/tests/gui/step7-settings-polish.test.ts +180 -0
  2029. package/workspace-snapshot/files/tests/gui/sync-downstream-summaries.test.ts +198 -0
  2030. package/workspace-snapshot/files/tests/gui/target-workflow-pr-card.test.ts +68 -0
  2031. package/workspace-snapshot/files/tests/gui/vercel-bridge-polling-ui.test.ts +74 -0
  2032. package/workspace-snapshot/files/tests/gui/verification-state.test.ts +217 -0
  2033. package/workspace-snapshot/files/tests/gui/workflow-bootstrap-route.test.ts +78 -0
  2034. package/workspace-snapshot/files/tests/gui/workflow-model-autosave.test.ts +36 -0
  2035. package/workspace-snapshot/files/tests/gui/workflow-source-ui.test.ts +22 -0
  2036. package/workspace-snapshot/files/tests/gui/workflow-violation-messages.test.ts +39 -0
  2037. package/workspace-snapshot/files/tests/gui/workflow-workspace.test.ts +188 -0
  2038. package/workspace-snapshot/files/tests/linear/comment-assertions.ts +24 -0
  2039. package/workspace-snapshot/files/tests/linear/comment-card.test.ts +73 -0
  2040. package/workspace-snapshot/files/tests/linear/comments.test.ts +185 -0
  2041. package/workspace-snapshot/files/tests/linear/handoff-comment.test.ts +34 -0
  2042. package/workspace-snapshot/files/tests/linear/markers.test.ts +126 -0
  2043. package/workspace-snapshot/files/tests/linear/merge-comment.test.ts +61 -0
  2044. package/workspace-snapshot/files/tests/linear/merge-source-comment.test.ts +49 -0
  2045. package/workspace-snapshot/files/tests/linear/parser.test.ts +83 -0
  2046. package/workspace-snapshot/files/tests/linear/planning-comment.test.ts +29 -0
  2047. package/workspace-snapshot/files/tests/linear/pm-feedback-comment.test.ts +63 -0
  2048. package/workspace-snapshot/files/tests/linear/run-status-comment.test.ts +143 -0
  2049. package/workspace-snapshot/files/tests/observability/analytics-schemas.test.ts +74 -0
  2050. package/workspace-snapshot/files/tests/observability/context.test.ts +132 -0
  2051. package/workspace-snapshot/files/tests/observability/fatal-process.test.ts +106 -0
  2052. package/workspace-snapshot/files/tests/observability/foundation.test.ts +229 -0
  2053. package/workspace-snapshot/files/tests/observability/instrumentation-dev-startup.test.ts +79 -0
  2054. package/workspace-snapshot/files/tests/observability/lifecycle.test.ts +348 -0
  2055. package/workspace-snapshot/files/tests/observability/package-config.test.ts +66 -0
  2056. package/workspace-snapshot/files/tests/observability/packaged-config.test.ts +47 -0
  2057. package/workspace-snapshot/files/tests/observability/posthog-dashboard-contract.test.ts +133 -0
  2058. package/workspace-snapshot/files/tests/observability/posthog-envelope.test.ts +167 -0
  2059. package/workspace-snapshot/files/tests/observability/posthog-shutdown.test.ts +68 -0
  2060. package/workspace-snapshot/files/tests/observability/privacy-schema.test.ts +83 -0
  2061. package/workspace-snapshot/files/tests/observability/provisioning-analytics.test.ts +54 -0
  2062. package/workspace-snapshot/files/tests/observability/public-config-enablement.test.ts +48 -0
  2063. package/workspace-snapshot/files/tests/observability/sentry-envelope.test.ts +289 -0
  2064. package/workspace-snapshot/files/tests/observability/sentry-outbound-privacy.test.ts +141 -0
  2065. package/workspace-snapshot/files/tests/observability/sentry-privacy-assertions.ts +52 -0
  2066. package/workspace-snapshot/files/tests/observability/sentry-server-only.test.ts +68 -0
  2067. package/workspace-snapshot/files/tests/observability/sentry-transport.test.ts +88 -0
  2068. package/workspace-snapshot/files/tests/observability/session-dedupe.test.ts +117 -0
  2069. package/workspace-snapshot/files/tests/observability/snapshot-exclusion.test.ts +9 -0
  2070. package/workspace-snapshot/files/tests/p-dev/browser.test.ts +38 -0
  2071. package/workspace-snapshot/files/tests/p-dev/cli.test.ts +39 -0
  2072. package/workspace-snapshot/files/tests/p-dev/git-object-plumbing.test.ts +188 -0
  2073. package/workspace-snapshot/files/tests/p-dev/installed-tarball-gui.test.ts +475 -0
  2074. package/workspace-snapshot/files/tests/p-dev/installed-tarball-loopback.test.ts +986 -0
  2075. package/workspace-snapshot/files/tests/p-dev/installed-tarball-snapshot-provisioning.test.ts +361 -0
  2076. package/workspace-snapshot/files/tests/p-dev/launch.test.ts +162 -0
  2077. package/workspace-snapshot/files/tests/p-dev/next-bin.test.ts +16 -0
  2078. package/workspace-snapshot/files/tests/p-dev/node-version.test.ts +20 -0
  2079. package/workspace-snapshot/files/tests/p-dev/package-manifest.test.ts +49 -0
  2080. package/workspace-snapshot/files/tests/p-dev/package-packed-artifact.test.ts +235 -0
  2081. package/workspace-snapshot/files/tests/p-dev/package-paths.test.ts +94 -0
  2082. package/workspace-snapshot/files/tests/p-dev/package-version.test.ts +55 -0
  2083. package/workspace-snapshot/files/tests/p-dev/packaged-workspace-setup.test.ts +87 -0
  2084. package/workspace-snapshot/files/tests/p-dev/runtime-mode.test.ts +18 -0
  2085. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-digest.test.ts +61 -0
  2086. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-generator.test.ts +76 -0
  2087. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-policy.test.ts +41 -0
  2088. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-validation.test.ts +158 -0
  2089. package/workspace-snapshot/files/tests/p-dev/workspace.test.ts +80 -0
  2090. package/workspace-snapshot/files/tests/preview/production-from-merge.test.ts +39 -0
  2091. package/workspace-snapshot/files/tests/preview/vercel-from-pr.test.ts +120 -0
  2092. package/workspace-snapshot/files/tests/product/initialization-state.test.ts +78 -0
  2093. package/workspace-snapshot/files/tests/product/read-product-marker.test.ts +46 -0
  2094. package/workspace-snapshot/files/tests/prompts/builder.test.ts +59 -0
  2095. package/workspace-snapshot/files/tests/prompts/implementation-builder.test.ts +77 -0
  2096. package/workspace-snapshot/files/tests/prompts/issue-intake-chatgpt.test.ts +106 -0
  2097. package/workspace-snapshot/files/tests/resolver/allowed-repos.test.ts +44 -0
  2098. package/workspace-snapshot/files/tests/resolver/normalize-repo.test.ts +44 -0
  2099. package/workspace-snapshot/files/tests/resolver/target-repo.test.ts +157 -0
  2100. package/workspace-snapshot/files/tests/runner/builder-thread-acquire.test.ts +288 -0
  2101. package/workspace-snapshot/files/tests/runner/builder-thread-idempotency.test.ts +42 -0
  2102. package/workspace-snapshot/files/tests/runner/builder-thread-lineage.test.ts +206 -0
  2103. package/workspace-snapshot/files/tests/runner/building-recovery.test.ts +30 -0
  2104. package/workspace-snapshot/files/tests/runner/delivery-dedup.test.ts +53 -0
  2105. package/workspace-snapshot/files/tests/runner/dry-run.test.ts +128 -0
  2106. package/workspace-snapshot/files/tests/runner/execution-environment.test.ts +114 -0
  2107. package/workspace-snapshot/files/tests/runner/failure-finalization-runner-upgrade.test.ts +112 -0
  2108. package/workspace-snapshot/files/tests/runner/failure-finalization.test.ts +203 -0
  2109. package/workspace-snapshot/files/tests/runner/handoff.test.ts +378 -0
  2110. package/workspace-snapshot/files/tests/runner/idempotency-handoff.test.ts +171 -0
  2111. package/workspace-snapshot/files/tests/runner/idempotency-implementation.test.ts +144 -0
  2112. package/workspace-snapshot/files/tests/runner/idempotency-merge.test.ts +118 -0
  2113. package/workspace-snapshot/files/tests/runner/idempotency-revision.test.ts +112 -0
  2114. package/workspace-snapshot/files/tests/runner/idempotency.test.ts +84 -0
  2115. package/workspace-snapshot/files/tests/runner/implementation.test.ts +215 -0
  2116. package/workspace-snapshot/files/tests/runner/integration-repair.test.ts +278 -0
  2117. package/workspace-snapshot/files/tests/runner/merge-linear-metadata.test.ts +90 -0
  2118. package/workspace-snapshot/files/tests/runner/merge.test.ts +839 -0
  2119. package/workspace-snapshot/files/tests/runner/orchestrator.test.ts +301 -0
  2120. package/workspace-snapshot/files/tests/runner/phase-args.test.ts +38 -0
  2121. package/workspace-snapshot/files/tests/runner/planning.test.ts +169 -0
  2122. package/workspace-snapshot/files/tests/runner/preflight-canonical.test.ts +73 -0
  2123. package/workspace-snapshot/files/tests/runner/preflight-fail-closed.integration.test.ts +418 -0
  2124. package/workspace-snapshot/files/tests/runner/preview-capability.test.ts +46 -0
  2125. package/workspace-snapshot/files/tests/runner/resolve-route.test.ts +255 -0
  2126. package/workspace-snapshot/files/tests/runner/revision.test.ts +434 -0
  2127. package/workspace-snapshot/files/tests/runner/uninitialized-product-routing.test.ts +120 -0
  2128. package/workspace-snapshot/files/tests/setup/config-builder.test.ts +136 -0
  2129. package/workspace-snapshot/files/tests/setup/config-local-editor.test.ts +164 -0
  2130. package/workspace-snapshot/files/tests/setup/connect-services-credential-availability.test.ts +151 -0
  2131. package/workspace-snapshot/files/tests/setup/connect-services-env.test.ts +84 -0
  2132. package/workspace-snapshot/files/tests/setup/control-plane-readiness.test.ts +145 -0
  2133. package/workspace-snapshot/files/tests/setup/control-plane-state-lock.test.ts +67 -0
  2134. package/workspace-snapshot/files/tests/setup/doctor-summary.test.ts +48 -0
  2135. package/workspace-snapshot/files/tests/setup/env-merge.test.ts +177 -0
  2136. package/workspace-snapshot/files/tests/setup/env-writer.test.ts +97 -0
  2137. package/workspace-snapshot/files/tests/setup/first-run-readiness.test.ts +1231 -0
  2138. package/workspace-snapshot/files/tests/setup/generated-instructions.test.ts +48 -0
  2139. package/workspace-snapshot/files/tests/setup/github-dispatch-token.test.ts +159 -0
  2140. package/workspace-snapshot/files/tests/setup/github-remote-provider.test.ts +66 -0
  2141. package/workspace-snapshot/files/tests/setup/github-remote-setup-live.test.ts +59 -0
  2142. package/workspace-snapshot/files/tests/setup/github-repository-name.test.ts +28 -0
  2143. package/workspace-snapshot/files/tests/setup/github-workflow-permissions.test.ts +71 -0
  2144. package/workspace-snapshot/files/tests/setup/gui-remote-storage.test.ts +41 -0
  2145. package/workspace-snapshot/files/tests/setup/gui-view-model.test.ts +251 -0
  2146. package/workspace-snapshot/files/tests/setup/guided-config-form.test.ts +54 -0
  2147. package/workspace-snapshot/files/tests/setup/harness-dispatch-repo.test.ts +394 -0
  2148. package/workspace-snapshot/files/tests/setup/harness-managed-repo-marker.test.ts +141 -0
  2149. package/workspace-snapshot/files/tests/setup/harness-provisioning-context.test.ts +89 -0
  2150. package/workspace-snapshot/files/tests/setup/harness-provisioning-pending-state.test.ts +88 -0
  2151. package/workspace-snapshot/files/tests/setup/harness-repo-provisioning.test.ts +897 -0
  2152. package/workspace-snapshot/files/tests/setup/harness-secret-setup.test.ts +255 -0
  2153. package/workspace-snapshot/files/tests/setup/harness-snapshot-bulk-fixture.ts +72 -0
  2154. package/workspace-snapshot/files/tests/setup/harness-snapshot-bulk-installed.test.ts +93 -0
  2155. package/workspace-snapshot/files/tests/setup/harness-snapshot-default-branch.test.ts +73 -0
  2156. package/workspace-snapshot/files/tests/setup/harness-snapshot-description-finalization.test.ts +136 -0
  2157. package/workspace-snapshot/files/tests/setup/harness-snapshot-git-transport.test.ts +518 -0
  2158. package/workspace-snapshot/files/tests/setup/harness-snapshot-marker-tree.test.ts +61 -0
  2159. package/workspace-snapshot/files/tests/setup/harness-snapshot-reconciliation.test.ts +132 -0
  2160. package/workspace-snapshot/files/tests/setup/harness-snapshot-structured-errors.test.ts +137 -0
  2161. package/workspace-snapshot/files/tests/setup/harness-snapshot-upload-rate-limit.test.ts +105 -0
  2162. package/workspace-snapshot/files/tests/setup/harness-step-readiness.test.ts +145 -0
  2163. package/workspace-snapshot/files/tests/setup/harness-workspace-snapshot-loader.test.ts +142 -0
  2164. package/workspace-snapshot/files/tests/setup/initial-setup-lifecycle.test.ts +220 -0
  2165. package/workspace-snapshot/files/tests/setup/linear-setup-apply.test.ts +134 -0
  2166. package/workspace-snapshot/files/tests/setup/linear-setup-plan.test.ts +149 -0
  2167. package/workspace-snapshot/files/tests/setup/linear-webhook-env-local.test.ts +95 -0
  2168. package/workspace-snapshot/files/tests/setup/linear-webhook-secret.test.ts +256 -0
  2169. package/workspace-snapshot/files/tests/setup/linear-workflow-status-repair.test.ts +314 -0
  2170. package/workspace-snapshot/files/tests/setup/linear-workspace-migration.test.ts +173 -0
  2171. package/workspace-snapshot/files/tests/setup/linear-workspace-plan.test.ts +247 -0
  2172. package/workspace-snapshot/files/tests/setup/live-provisioning-error-preservation.test.ts +98 -0
  2173. package/workspace-snapshot/files/tests/setup/local-apply-actions.test.ts +365 -0
  2174. package/workspace-snapshot/files/tests/setup/local-readiness-checks.test.ts +199 -0
  2175. package/workspace-snapshot/files/tests/setup/mock-canonical-preflight.ts +14 -0
  2176. package/workspace-snapshot/files/tests/setup/model-settings.test.ts +52 -0
  2177. package/workspace-snapshot/files/tests/setup/packaged-default-route.test.ts +85 -0
  2178. package/workspace-snapshot/files/tests/setup/packaged-provisioning-permissions.test.ts +41 -0
  2179. package/workspace-snapshot/files/tests/setup/permission-model.test.ts +38 -0
  2180. package/workspace-snapshot/files/tests/setup/redact-secrets.test.ts +78 -0
  2181. package/workspace-snapshot/files/tests/setup/release-sync-managed-runner.test.ts +385 -0
  2182. package/workspace-snapshot/files/tests/setup/remote-actions.test.ts +45 -0
  2183. package/workspace-snapshot/files/tests/setup/remote-apply-actions.test.ts +302 -0
  2184. package/workspace-snapshot/files/tests/setup/remote-preview-fingerprint.test.ts +121 -0
  2185. package/workspace-snapshot/files/tests/setup/runner-upgrade-canary.test.ts +201 -0
  2186. package/workspace-snapshot/files/tests/setup/runner-upgrade-three-way.test.ts +226 -0
  2187. package/workspace-snapshot/files/tests/setup/runner-upgrade.test.ts +702 -0
  2188. package/workspace-snapshot/files/tests/setup/service-verification.test.ts +491 -0
  2189. package/workspace-snapshot/files/tests/setup/settings-config-patch.test.ts +280 -0
  2190. package/workspace-snapshot/files/tests/setup/setup-actions.test.ts +96 -0
  2191. package/workspace-snapshot/files/tests/setup/setup-form-defaults.test.ts +35 -0
  2192. package/workspace-snapshot/files/tests/setup/setup-server-remote.test.ts +90 -0
  2193. package/workspace-snapshot/files/tests/setup/setup-state.test.ts +47 -0
  2194. package/workspace-snapshot/files/tests/setup/stale-smoke-repo.test.ts +84 -0
  2195. package/workspace-snapshot/files/tests/setup/step6-automatic-apply-outcome.test.ts +304 -0
  2196. package/workspace-snapshot/files/tests/setup/step6-automatic-control-state.test.ts +73 -0
  2197. package/workspace-snapshot/files/tests/setup/target-repo-provisioning.test.ts +307 -0
  2198. package/workspace-snapshot/files/tests/setup/target-workflow-finalization-lock.test.ts +51 -0
  2199. package/workspace-snapshot/files/tests/setup/target-workflow-finalization-progress.test.ts +71 -0
  2200. package/workspace-snapshot/files/tests/setup/target-workflow-finalization-step-github.test.ts +675 -0
  2201. package/workspace-snapshot/files/tests/setup/target-workflow-finalization.test.ts +222 -0
  2202. package/workspace-snapshot/files/tests/setup/target-workflow-setup.test.ts +62 -0
  2203. package/workspace-snapshot/files/tests/setup/test-workspace-snapshot-fixture.ts +100 -0
  2204. package/workspace-snapshot/files/tests/setup/vercel-bridge-diagnostics.test.ts +429 -0
  2205. package/workspace-snapshot/files/tests/setup/vercel-bridge-options.test.ts +135 -0
  2206. package/workspace-snapshot/files/tests/setup/vercel-bridge-preview-fingerprint.test.ts +52 -0
  2207. package/workspace-snapshot/files/tests/setup/vercel-bridge-redeploy-normalize.test.ts +106 -0
  2208. package/workspace-snapshot/files/tests/setup/vercel-bridge-redeploy-poll.test.ts +656 -0
  2209. package/workspace-snapshot/files/tests/setup/vercel-bridge-structured-log.test.ts +45 -0
  2210. package/workspace-snapshot/files/tests/setup/vercel-bridge-verification.test.ts +39 -0
  2211. package/workspace-snapshot/files/tests/setup/vercel-endpoint-reachability.test.ts +60 -0
  2212. package/workspace-snapshot/files/tests/setup/vercel-production-redeploy.test.ts +184 -0
  2213. package/workspace-snapshot/files/tests/setup/vercel-setup-apply.test.ts +1557 -0
  2214. package/workspace-snapshot/files/tests/setup/vercel-setup-client.test.ts +471 -0
  2215. package/workspace-snapshot/files/tests/setup/vercel-setup-plan.test.ts +319 -0
  2216. package/workspace-snapshot/files/tests/setup/vercel-webhook-probe.test.ts +78 -0
  2217. package/workspace-snapshot/files/tests/setup/workflow-install-branch-recovery-commit.test.ts +144 -0
  2218. package/workspace-snapshot/files/tests/setup/workflow-install-branch-recovery.test.ts +133 -0
  2219. package/workspace-snapshot/files/tests/setup/workflow-install-merge-errors.test.ts +103 -0
  2220. package/workspace-snapshot/files/tests/setup/workflow-install-merge-gate.test.ts +58 -0
  2221. package/workspace-snapshot/files/tests/setup/workflow-model-save-queue.test.ts +139 -0
  2222. package/workspace-snapshot/files/tests/setup/workflow-model-sync.test.ts +141 -0
  2223. package/workspace-snapshot/files/tests/validate-issue/report.test.ts +56 -0
  2224. package/workspace-snapshot/files/tests/validate-issue/uninitialized-product.test.ts +108 -0
  2225. package/workspace-snapshot/files/tests/validate-issue/validate-issue.test.ts +202 -0
  2226. package/workspace-snapshot/files/tests/webhook/dispatch-github.test.ts +193 -0
  2227. package/workspace-snapshot/files/tests/webhook/extract-issue-key.test.ts +65 -0
  2228. package/workspace-snapshot/files/tests/webhook/filter.test.ts +187 -0
  2229. package/workspace-snapshot/files/tests/webhook/harness-auto-runner-workflow.test.ts +176 -0
  2230. package/workspace-snapshot/files/tests/webhook/parse-linear-issue-event.test.ts +89 -0
  2231. package/workspace-snapshot/files/tests/webhook/verify.test.ts +125 -0
  2232. package/workspace-snapshot/files/tests/workflow/canonical-product-development-workflow.test.ts +193 -0
  2233. package/workspace-snapshot/files/tests/workflow/canonical-workflow-validation.test.ts +202 -0
  2234. package/workspace-snapshot/files/tests/workflow/dispatch-metadata.test.ts +38 -0
  2235. package/workspace-snapshot/files/tests/workflow/manifest-summary.test.ts +58 -0
  2236. package/workspace-snapshot/files/tests/workflow/production-sync-dispatch.test.ts +101 -0
  2237. package/workspace-snapshot/files/tests/workflow/validate.test.ts +70 -0
  2238. package/workspace-snapshot/files/tests/workflow/workflow-shell-safety.test.ts +95 -0
  2239. package/workspace-snapshot/files/tsconfig.json +22 -0
  2240. package/workspace-snapshot/files/vercel.json +10 -0
  2241. package/workspace-snapshot/files/vitest.config.ts +20 -0
  2242. package/workspace-snapshot/manifest.json +7679 -0
  2243. package/workspace-snapshot/object-pack/snapshot-2735d42c938e514f27a9b2aaf5fa2fcc68019075.idx +0 -0
  2244. package/workspace-snapshot/object-pack/snapshot-2735d42c938e514f27a9b2aaf5fa2fcc68019075.pack +0 -0
  2245. package/gui/.next/server/app/index.html +0 -1
  2246. package/gui/.next/server/app/index.meta +0 -9
  2247. package/gui/.next/server/app/index.rsc +0 -18
  2248. package/gui/.next/server/chunks/120.js +0 -81
  2249. package/gui/.next/server/chunks/200.js +0 -1
  2250. package/gui/.next/server/chunks/477.js +0 -16
  2251. package/gui/.next/server/chunks/585.js +0 -1
  2252. package/gui/.next/server/chunks/711.js +0 -1
  2253. package/gui/.next/server/chunks/900.js +0 -1
  2254. package/gui/.next/server/chunks/901.js +0 -22
  2255. package/gui/.next/static/7x8X_k4tESvkyqRnNCC9E/_buildManifest.js +0 -1
  2256. package/gui/.next/static/chunks/661-5fc9351358e2f084.js +0 -1
  2257. package/gui/.next/static/chunks/app/_not-found/page-f15332c94524c284.js +0 -1
  2258. package/gui/.next/static/chunks/app/api/setup/apply-connect-services/route-979ec1702bd9938a.js +0 -1
  2259. package/gui/.next/static/chunks/app/api/setup/apply-harness-repo-provisioning/route-979ec1702bd9938a.js +0 -1
  2260. package/gui/.next/static/chunks/app/api/setup/apply-harness-secrets/route-979ec1702bd9938a.js +0 -1
  2261. package/gui/.next/static/chunks/app/api/setup/apply-linear-setup/route-979ec1702bd9938a.js +0 -1
  2262. package/gui/.next/static/chunks/app/api/setup/apply-local-files/route-979ec1702bd9938a.js +0 -1
  2263. package/gui/.next/static/chunks/app/api/setup/apply-target-workflow/route-979ec1702bd9938a.js +0 -1
  2264. package/gui/.next/static/chunks/app/api/setup/apply-vercel-bridge/route-979ec1702bd9938a.js +0 -1
  2265. package/gui/.next/static/chunks/app/api/setup/finalize-target-workflow/route-979ec1702bd9938a.js +0 -1
  2266. package/gui/.next/static/chunks/app/api/setup/harness-provisioning-summary/route-979ec1702bd9938a.js +0 -1
  2267. package/gui/.next/static/chunks/app/api/setup/linear-options/route-979ec1702bd9938a.js +0 -1
  2268. package/gui/.next/static/chunks/app/api/setup/linear-summary/route-979ec1702bd9938a.js +0 -1
  2269. package/gui/.next/static/chunks/app/api/setup/local-readiness/route-979ec1702bd9938a.js +0 -1
  2270. package/gui/.next/static/chunks/app/api/setup/manual-harness-secret-values/route-979ec1702bd9938a.js +0 -1
  2271. package/gui/.next/static/chunks/app/api/setup/preview-connect-services/route-979ec1702bd9938a.js +0 -1
  2272. package/gui/.next/static/chunks/app/api/setup/preview-harness-repo-provisioning/route-979ec1702bd9938a.js +0 -1
  2273. package/gui/.next/static/chunks/app/api/setup/preview-harness-secrets/route-979ec1702bd9938a.js +0 -1
  2274. package/gui/.next/static/chunks/app/api/setup/preview-linear-setup/route-979ec1702bd9938a.js +0 -1
  2275. package/gui/.next/static/chunks/app/api/setup/preview-local-files/route-979ec1702bd9938a.js +0 -1
  2276. package/gui/.next/static/chunks/app/api/setup/preview-target-workflow/route-979ec1702bd9938a.js +0 -1
  2277. package/gui/.next/static/chunks/app/api/setup/preview-vercel-bridge/route-979ec1702bd9938a.js +0 -1
  2278. package/gui/.next/static/chunks/app/api/setup/remote-summary/route-979ec1702bd9938a.js +0 -1
  2279. package/gui/.next/static/chunks/app/api/setup/summary/route-979ec1702bd9938a.js +0 -1
  2280. package/gui/.next/static/chunks/app/api/setup/vercel-bridge-options/route-979ec1702bd9938a.js +0 -1
  2281. package/gui/.next/static/chunks/app/api/setup/vercel-bridge-redeploy-status/route-979ec1702bd9938a.js +0 -1
  2282. package/gui/.next/static/chunks/app/api/setup/vercel-summary/route-979ec1702bd9938a.js +0 -1
  2283. package/gui/.next/static/chunks/app/api/setup/verify-harness-repo/route-979ec1702bd9938a.js +0 -1
  2284. package/gui/.next/static/chunks/app/api/setup/verify-service/route-979ec1702bd9938a.js +0 -1
  2285. package/gui/.next/static/chunks/app/api/setup/verify-target-repo/route-979ec1702bd9938a.js +0 -1
  2286. package/gui/.next/static/chunks/app/layout-10445a363bff6a38.js +0 -1
  2287. package/gui/.next/static/chunks/app/page-979ec1702bd9938a.js +0 -1
  2288. package/gui/.next/static/chunks/app/settings/configure/page-25b2288ace2949a1.js +0 -1
  2289. package/gui/.next/static/chunks/framework-7318ce553e854ad6.js +0 -1
  2290. package/gui/.next/static/chunks/main-app-732547e2b1a794b6.js +0 -1
  2291. package/gui/.next/static/chunks/main-f7a784f5852cbbd1.js +0 -1
  2292. package/gui/.next/static/chunks/pages/_error-bda15e7831eec981.js +0 -1
  2293. package/gui/.next/static/css/cc2acc71c03f3b4b.css +0 -3
  2294. /package/gui/.next/static/{7x8X_k4tESvkyqRnNCC9E → wM7YWpWgyTcGc7H5h1u7U}/_ssgManifest.js +0 -0
@@ -0,0 +1,200 @@
1
+ "use strict";exports.id=1304,exports.ids=[1304],exports.modules={1304:(a,b,c)=>{c.d(b,{pA:()=>f9,ix:()=>f5,kd:()=>fG,$X:()=>fS,xS:()=>fX,R6:()=>fE,T9:()=>fv,ty:()=>gc,n3:()=>fI,R7:()=>f_,BP:()=>fJ,BD:()=>f3,g1:()=>f2,oV:()=>fT,VP:()=>fO,F2:()=>fV,xQ:()=>fP,Ig:()=>f7,W8:()=>fz,SE:()=>fw,Bw:()=>ft,CP:()=>fA,al:()=>fy,XV:()=>fY,F$:()=>fZ,bT:()=>fQ,oO:()=>f0,b1:()=>f8,K7:()=>f4,A5:()=>fF,LV:()=>fR,Rm:()=>fW,HV:()=>fD,P9:()=>fu,$$:()=>gb,j3:()=>fH,hp:()=>f$,u4:()=>f6});var d=c(77598),e=c(83954),f=c(51455),g=c(12884),h=c(87285),i=c(19965),j=c(57362),k=c(84998);async function l(a){try{return await (0,f.access)(a),!0}catch{return!1}}function m(a,b=[]){return(0,j.qs)(a,b)}async function n(a){if(!await l(a.envExample))throw Error(`Missing source file: ${a.envExample}`);return(0,f.readFile)(a.envExample,"utf8")}async function o(a){let{paths:b,force:c=!1,mode:d="apply"}=a,e=k.gr,h=await l(b.envLocal);if(h&&!c)return m({actionId:"scaffold-env-local",outcome:"skipped",targetPath:b.envLocal,permission:g.P.localFileWrite,reason:"already exists",logMessage:`skipped ${e} (already exists)`});let i=await n(b);return"dry-run"===d?m({actionId:"scaffold-env-local",outcome:h?"wouldChange":"preview",targetPath:b.envLocal,content:i,permission:g.P.localFileWrite,reason:h?"would overwrite with --force":"would create",logMessage:h?`would overwrite ${e}`:`would create ${e}`}):(await (0,f.copyFile)(b.envExample,b.envLocal),m({actionId:"scaffold-env-local",outcome:"changed",targetPath:b.envLocal,content:i,permission:g.P.localFileWrite,reason:h?"overwrote existing file":"created new file",logMessage:`${h?"overwrote":"created"} ${e}`}))}async function p(a){let{paths:b,force:c=!1,mode:d="apply"}=a,e=k.gr,h=await l(b.envLocal),i=(0,j.B8)(a.input);if(h&&!c)return m({actionId:"write-env-local",outcome:"skipped",targetPath:b.envLocal,permission:g.P.localFileWrite,reason:"already exists",logMessage:`skipped ${e} (already exists)`});let n=a.content??function(a){let b=a?.harnessConfigPath??k.it,c=a?.linearApiKey??"",d=a?.cursorApiKey??"",e=a?.githubToken??"";return`# Operator local setup — generated by harness setup core
2
+ # Do not commit .env.local (gitignored).
3
+
4
+ # --- Local private harness config (local only) ---
5
+ # Points at your structured target-repo config file.
6
+ # Edit .harness/config.local.json after init; keep this path unchanged.
7
+ HARNESS_CONFIG_PATH=${b}
8
+
9
+ # --- GitHub Actions only (cloud runs) — do NOT put in .env.local ---
10
+ # HARNESS_CONFIG_JSON_B64 replaces the whole harness config for that run.
11
+ # It is NOT an overlay with committed harness.config.json.
12
+ # Base64-encode your full .harness/config.local.json and set it as a
13
+ # GitHub Actions secret on the harness repo. Include every repo you want
14
+ # the harness to manage in repos[] and allowedTargetRepos[].
15
+
16
+ # --- Live automation API keys (local CLI) ---
17
+ # Fill these in .env.local for local doctor and harness runs.
18
+ LINEAR_API_KEY=${c}
19
+ CURSOR_API_KEY=${d}
20
+
21
+ # Local CLI name for GitHub API access (doctor merge profile, handoff, merge).
22
+ # In GitHub Actions the secret is named HARNESS_GITHUB_TOKEN (workflow maps it
23
+ # to runtime GITHUB_TOKEN). Do not use HARNESS_GITHUB_TOKEN in .env.local.
24
+ GITHUB_TOKEN=${e}
25
+ `}(a.input);return"dry-run"===d?m({actionId:"write-env-local",outcome:h?"wouldChange":"preview",targetPath:b.envLocal,content:n,permission:g.P.localFileWrite,reason:h?"would overwrite with --force":"would create",logMessage:h?`would overwrite ${e}`:`would create ${e}`},i):(await (0,f.writeFile)(b.envLocal,n,"utf8"),m({actionId:"write-env-local",outcome:"changed",targetPath:b.envLocal,content:n,permission:g.P.localFileWrite,reason:h?"overwrote existing file":"created new file",logMessage:`${h?"overwrote":"created"} ${e}`},i))}var q=c(45081);let r=g.P.localFileWrite.scope;function s(a){if(!a)return"";let b=0;for(let c=0;c<a.length;c+=1)b=(b+a.charCodeAt(c))%0x3b9aca07;return`${a.length}:${b}`}function t(a){return{harnessConfigPath:a.harnessConfigPath,githubDispatchRepository:a.githubDispatchRepository,linearApiKey:a.linearApiKey,cursorApiKey:a.cursorApiKey,githubToken:a.githubToken,vercelToken:a.vercelToken}}async function u(a){let[b,c]=await Promise.all([(0,h.X_)(a.envLocal),(0,h.X_)(a.configLocal)]);return{envLocalPath:a.envLocal,configLocalPath:a.configLocal,envLocalHash:b,configLocalHash:c}}function v(a){return{harnessConfigPath:a.harnessConfigPath?.trim()??"",githubDispatchRepository:a.githubDispatchRepository?.trim()??"",linearApiKeyToken:s(a.linearApiKey?.trim()??""),cursorApiKeyToken:s(a.cursorApiKey?.trim()??""),githubTokenToken:s(a.githubToken?.trim()??""),vercelTokenToken:s(a.vercelToken?.trim()??""),preserveLinear:!a.linearApiKey?.trim(),preserveCursor:!a.cursorApiKey?.trim(),preserveGithub:!a.githubToken?.trim(),preserveVercel:!a.vercelToken?.trim()}}function w(a,b,c){return JSON.stringify({cwd:c??process.cwd(),paths:{envLocal:b.envLocalPath,configLocal:b.configLocalPath},baselines:{envLocalHash:b.envLocalHash,configLocalHash:b.configLocalHash},env:v(a.env),config:(0,q.W)(a.config)})}async function x(a){let b=await (0,h.Hn)(a),{access:d}=await Promise.resolve().then(c.t.bind(c,51455,23)),e=!1;try{await d(a.configLocal),e=!0}catch{e=!1}return{envExists:!!b,configExists:e,envAction:b?"update":"create",configAction:e?"update":"create"}}async function y(a,b){let c=await (0,h.Hn)(a),d=await (0,h.ed)(a),e=(0,h._b)(c,b),f=(0,h.HF)(d,e),g=[...(0,h.Ol)(e),...(0,j.B8)(b)];return{mergedEnv:e,envContent:f,knownSecrets:g}}async function z(a){var b;let c=(0,k.ym)(a.cwd),d=t(a.env),{mergedEnv:e,envContent:f,knownSecrets:i}=await y(c,d),l=(0,j.qs)({actionId:"write-env-local",outcome:"preview",targetPath:c.envLocal,content:f,permission:g.P.localFileWrite,reason:f?"would update merged env":"would create env"},i),m=await u(c);return{fingerprint:(b=a.env,JSON.stringify({cwd:a.cwd??process.cwd(),paths:{envLocal:m.envLocalPath,configLocal:m.configLocalPath},baselines:{envLocalHash:m.envLocalHash,configLocalHash:m.configLocalHash},env:v(b)})),envPreview:(0,h.W)(f),envKeyPresence:(0,h.lL)(e),envResult:l}}async function A(a){if(!a.confirmed)throw Error("Local file writes require explicit confirmation");let b=await z({cwd:a.cwd,env:a.env});if(a.fingerprint!==b.fingerprint)throw Error("Preview fingerprint is stale. Regenerate preview before applying.");let c=(0,k.ym)(a.cwd),d=t(a.env),{envContent:e,knownSecrets:f}=await y(c,d);if((0,h.W)(e)!==b.envPreview)throw Error("Preview fingerprint is stale. Regenerate preview before applying.");return{envResult:(0,j.qs)(await p({paths:c,mode:"apply",content:e,force:!0}),f)}}async function B(a){var b,c;let d,e,f=(0,k.ym)(a.cwd),l=t(a.payload.env),{mergedEnv:m,envContent:n,knownSecrets:o}=await y(f,l),p="";try{p=(0,q.nb)(a.payload.config).json,e=await (0,i.writeConfigLocal)({paths:f,mode:"dry-run",content:p,force:!0})}catch(a){d=a instanceof Error?a.message:String(a),p="",e={actionId:"write-config-local",outcome:"preview",targetPath:f.configLocal,permission:g.P.localFileWrite,reason:(b=d,(0,j.h4)(b,o))}}let r=(0,j.qs)({actionId:"write-env-local",outcome:"preview",targetPath:f.envLocal,content:n,permission:g.P.localFileWrite,reason:n?"would update merged env":"would create env"},o),s=await x(f),v=await u(f);return{fingerprint:w(a.payload,v,a.cwd),plan:s,envPreview:(0,h.W)(n),configPreview:p,envKeyPresence:(0,h.lL)(m),envResult:r,configResult:(0,j.qs)(e,o),validationError:d?(c=d,(0,j.h4)(c,o)):void 0}}async function C(a){if(!a.confirmed)throw Error("Local file writes require explicit confirmation");let b=(0,k.ym)(a.cwd),c=await u(b),d=w(a.payload,c,a.cwd);if(a.fingerprint!==d)throw Error("Preview fingerprint is stale. Regenerate preview before applying.");let e=await B({cwd:a.cwd,payload:a.payload});if(e.validationError)throw Error(e.validationError);if(e.envResult.permission.scope!==r||e.configResult.permission.scope!==r)throw Error("Only local-file-write actions are allowed in Milestone 4");let g=t(a.payload.env),{envContent:l,knownSecrets:m}=await y(b,g);if((0,h.W)(l)!==e.envPreview)throw Error("Preview fingerprint is stale. Regenerate preview before applying.");await (0,f.mkdir)(b.harnessDir,{recursive:!0});let n=(0,j.qs)(await p({paths:b,mode:"apply",content:l,force:!0}),m);return{envResult:n,configResult:(0,j.qs)(await (0,i.writeConfigLocal)({paths:b,mode:"apply",content:e.configPreview,force:!0}),m),plan:await x(b)}}async function D(a){let b=(0,k.ym)(a.cwd),c=await (0,h.Hn)(b),d=void 0!==a.githubDispatchRepositoryId?String(a.githubDispatchRepositoryId):void 0,e=(0,h._b)(c,{githubDispatchRepository:a.githubDispatchRepository.trim(),githubDispatchRepositoryId:d}),f=c?.values.GITHUB_DISPATCH_REPOSITORY?.trim()===a.githubDispatchRepository.trim(),i=void 0===d||c?.values.GITHUB_DISPATCH_REPOSITORY_ID?.trim()===d;if(f&&i)return{actionId:"write-env-local",outcome:"skipped",targetPath:b.envLocal,permission:g.P.localFileWrite,reason:"GITHUB_DISPATCH_REPOSITORY already persisted."};let j=await (0,h.ed)(b);return p({paths:b,mode:"apply",content:(0,h.HF)(j,e),force:!0})}var E=c(84107),F=c(4631),G=c(95332),H=c(75365),I=c(29281),J=c(84783),K=c(50615);let L=[{group:"configuration",match:a=>a.includes("harness config")||a.includes("allowedTargetRepos")||a.includes("harness.config.json")},{group:"filesystem",match:a=>a.includes("runs/ directory writable")},{group:"linear",match:a=>a.startsWith("LINEAR_API_KEY")},{group:"cursor",match:a=>a.startsWith("CURSOR_API_KEY")||a.startsWith("Cursor models.list")||a.startsWith("Cursor repositories.list")},{group:"github",match:a=>a.startsWith("GITHUB_TOKEN")||a.includes("base branch exists")||a.includes("PR head-branch write")}];var M=c(5890);let N={scaffoldEnvLocal:{id:"scaffold-env-local",label:"Scaffold .env.local",description:"Create or update local environment file from committed example",permission:g.P.localFileWrite},scaffoldConfigLocal:{id:"scaffold-config-local",label:"Scaffold .harness/config.local.json",description:"Create or update private harness config from committed example",permission:g.P.localFileWrite},generateHarnessConfigB64Instructions:{id:"generate-harness-config-b64-instructions",label:"Generate HARNESS_CONFIG_JSON_B64 instructions",description:"Produce manual copy-paste steps for GitHub Actions config secret",permission:g.P.readOnly},generateGitHubSecretInstructions:{id:"generate-github-secret-instructions",label:"Generate GitHub Actions secret instructions",description:"Produce manual copy-paste steps for harness repo secrets",permission:g.P.readOnly},applyHarnessSecrets:{id:F.PN.applyHarnessSecrets.id,label:F.PN.applyHarnessSecrets.label,description:F.PN.applyHarnessSecrets.description,permission:F.PN.applyHarnessSecrets.permission},futureSetGitHubSecrets:{id:F.PN.applyHarnessSecrets.id,label:F.PN.applyHarnessSecrets.label,description:F.PN.applyHarnessSecrets.description,permission:F.PN.applyHarnessSecrets.permission},previewHarnessSecrets:{id:F.PN.previewHarnessSecrets.id,label:F.PN.previewHarnessSecrets.label,description:F.PN.previewHarnessSecrets.description,permission:F.PN.previewHarnessSecrets.permission},previewTargetWorkflowPr:{id:F.PN.previewTargetWorkflowPr.id,label:F.PN.previewTargetWorkflowPr.label,description:F.PN.previewTargetWorkflowPr.description,permission:F.PN.previewTargetWorkflowPr.permission},applyTargetWorkflowPr:{id:F.PN.applyTargetWorkflowPr.id,label:F.PN.applyTargetWorkflowPr.label,description:F.PN.applyTargetWorkflowPr.description,permission:F.PN.applyTargetWorkflowPr.permission}};async function O(a){let b=(0,k.ym)(a?.cwd),c=a?.force??!1,d=a?.mode??"apply",e=[],g=[];"apply"===d&&await (0,f.mkdir)(b.harnessDir,{recursive:!0});let h=await o({paths:b,force:c,mode:d});e.push(h),h.logMessage&&g.push(h.logMessage);let j=await (0,i.vb)({paths:b,force:c,mode:d});return e.push(j),j.logMessage&&g.push(j.logMessage),{results:e,logMessages:g}}var P=c(8846);async function Q(a){try{return await (0,f.access)(a),!0}catch{return!1}}async function R(a){let b={LINEAR_API_KEY:!1,CURSOR_API_KEY:!1,GITHUB_TOKEN:!1,VERCEL_TOKEN:!1,HARNESS_CONFIG_PATH:!1};try{for(let c of(await (0,f.readFile)(a,"utf8")).split("\n")){let a=c.trim();if(!a||a.startsWith("#"))continue;let d=a.indexOf("=");if(-1===d)continue;let e=a.slice(0,d).trim(),f=a.slice(d+1).trim();e in b&&f.length>0&&(b[e]=!0)}}catch{}return b}function S(a){return{repoCount:a.repos.length,repos:a.repos.map(a=>({id:a.id,targetRepo:a.targetRepo,baseBranch:a.baseBranch,productionBranch:a.productionBranch,previewProvider:a.previewProvider,linearProjects:a.linearProjects,linearAssociations:(a.linearAssociations??[]).map(a=>({workspaceId:a.workspaceId,teamId:a.teamId,projectId:a.projectId}))})),linearTeamKey:a.linear?.teamKey,allowedTargetRepos:a.allowedTargetRepos,closureValid:function(a){try{return(0,I.g1)(a),!0}catch{return!1}}(a),model:(0,P.M)(a)}}async function T(a){let b=(0,k.ym)(a?.cwd),c=a?.envLocalExists??await Q(b.envLocal),d=a?.configLocalExists??await Q(b.configLocal),e=[];if(a?.configParseError?e.push({label:"harness config valid",ok:!1,detail:a.configParseError}):a?.config?(e.push({label:"harness config valid",ok:!0,detail:"resolved for local GUI summary"}),e.push({label:"allowedTargetRepos covers all repo mappings",ok:!0})):e.push({label:"harness config valid",ok:!1,detail:"config could not be resolved"}),e.push({label:".env.local present",ok:c,detail:c?b.envLocal:"run npm run harness:operator:init"}),e.push({label:".harness/config.local.json present",ok:d,detail:d?b.configLocal:"run npm run harness:operator:init"}),a?.config){let b=(0,P.M)(a.config);e.push({label:"Cursor model policy resolved",ok:!0,detail:`${b.resolvedModelId} (${b.source})`})}return e.push({label:"LINEAR_API_KEY set",ok:!1,skipped:!0,detail:"remote provider checks are CLI-only in Milestone 3"}),e.push({label:"CURSOR_API_KEY set",ok:!1,skipped:!0,detail:"remote provider checks are CLI-only in Milestone 3"}),e.push({label:"GITHUB_TOKEN set",ok:!1,skipped:!0,detail:"remote provider checks are CLI-only in Milestone 3"}),e}let U=new Set(["HARNESS_CONFIG_JSON_B64","HARNESS_CONFIG_JSON"]);function V(a,b,c){return{kind:a.kind,label:U.has(a.kind)?a.kind:a.label,resolved:b,parseError:c}}async function W(a){let b,c=a?.cwd??process.cwd();(0,e.Re)(c);let d=(0,k.ym)(c),f=await Q(d.envLocal),g=await Q(d.configLocal),h=await R(d.envLocal),l=null,m=(0,J.m)({baseDir:c}),n=V(m,!1);try{let a=await (0,I.rL)({baseDir:c});l=a.config,n=V(a.source,!0)}catch(a){n=V(m,!1,b=a instanceof Error?a.message:String(a))}let o=await O({cwd:c,mode:"dry-run"}),q=await p({paths:d,mode:"dry-run",input:{}}),r=await (0,i.writeConfigLocal)({paths:d,mode:"dry-run",input:{repos:[{id:"target-app",linearProjects:["Example Target App"],targetRepo:"https://github.com/owner/example-target-app"}]}}),s=(0,K.RB)(),t=await (0,E.z8)({cwd:c}),u=(0,E.OW)(t),v=await T({cwd:c,config:l,configParseError:b,envLocalExists:f,configLocalExists:g}),w=function(a){let b=new Map;for(let c of a){let a=L.find(a=>a.match(c.label))?.group??"configuration",d=b.get(a)??[];d.push(c),b.set(a,d)}return["configuration","filesystem","linear","cursor","github"].filter(a=>b.has(a)).map(a=>({group:a,checks:b.get(a)??[]}))}(v),x=!!l&&!b,y=x&&g&&("HARNESS_CONFIG_PATH"===n.kind||"cli-config"===n.kind),z=f&&g;return function(a,b=[]){let c=a=>(0,j.h4)((0,j.QJ)(a),b);return{...a,scaffoldPreviews:a.scaffoldPreviews.map(a=>(0,j.qs)(a,b)),instructionPreviews:a.instructionPreviews.map(a=>(0,j.qs)(a,b)),generatedPreviews:{envLocal:a.generatedPreviews.envLocal?c(a.generatedPreviews.envLocal):void 0,configLocal:a.generatedPreviews.configLocal},missingSteps:a.missingSteps.map(a=>({...a,detail:c(a.detail)})),doctor:{...a.doctor,checks:a.doctor.checks.map(a=>({...a,detail:a.detail?c(a.detail):void 0})),groups:a.doctor.groups.map(a=>({...a,checks:a.checks.map(a=>({...a,detail:a.detail?c(a.detail):void 0}))}))}}}({overview:{readyForLocalDoctor:x&&z,configResolved:x,operatorConfigResolved:y,localFilesPresent:z},localFiles:[{label:".env.local",path:d.envLocal,exists:f},{label:".harness/config.local.json",path:d.configLocal,exists:g},{label:".env.example",path:d.envExample,exists:await Q(d.envExample)},{label:".harness/config.example.json",path:d.configExample,exists:await Q(d.configExample)}],configSource:{...n,parseError:b,resolved:x},configSummary:l?S(l):S(s),envKeyPresence:h,scaffoldPreviews:o.results,instructionPreviews:[function(a){let b=(0,M.te)(a);return{actionId:N.generateHarnessConfigB64Instructions.id,outcome:"preview",permission:N.generateHarnessConfigB64Instructions.permission,manualInstructions:b.steps,content:b.command,reason:b.summary}}({configPath:".harness/config.local.json"}),function(a){let b=(0,M.sJ)(a);return{actionId:N.generateGitHubSecretInstructions.id,outcome:"preview",permission:N.generateGitHubSecretInstructions.permission,manualInstructions:b.steps,reason:b.summary}}({harnessRepo:u})],generatedPreviews:{envLocal:q.content,configLocal:r.content??JSON.stringify(s,null,2)},missingSteps:function(a){let b=[];return a.envExists||b.push({id:"missing-env-local",label:"Create .env.local",detail:"Run npm run harness:operator:init to scaffold local env files."}),a.configExists||b.push({id:"missing-config-local",label:"Create .harness/config.local.json",detail:"Run npm run harness:operator:init, then edit your target repo mapping."}),a.configParseError?b.push({id:"config-parse-error",label:"Fix harness config parse errors",detail:a.configParseError}):a.configResolved||b.push({id:"config-unresolved",label:"Point harness config resolution at your private config",detail:"Set HARNESS_CONFIG_PATH in .env.local to .harness/config.local.json."}),a.envKeyPresence.HARNESS_CONFIG_PATH||b.push({id:"missing-harness-config-path",label:"Set HARNESS_CONFIG_PATH",detail:"Keep HARNESS_CONFIG_PATH=.harness/config.local.json in .env.local."}),a.envKeyPresence.LINEAR_API_KEY||b.push({id:"missing-linear-key",label:"Add LINEAR_API_KEY for live doctor and harness runs",detail:"Fill LINEAR_API_KEY in .env.local when ready for live validation."}),a.envKeyPresence.CURSOR_API_KEY||b.push({id:"missing-cursor-key",label:"Add CURSOR_API_KEY for live cloud agent phases",detail:"Fill CURSOR_API_KEY in .env.local when ready for live validation."}),a.envKeyPresence.GITHUB_TOKEN||b.push({id:"missing-github-token",label:"Add GITHUB_TOKEN for handoff and merge checks",detail:"Fill GITHUB_TOKEN in .env.local when ready for live validation."}),a.envKeyPresence.VERCEL_TOKEN||b.push({id:"missing-vercel-token",label:"Add VERCEL_TOKEN for Vercel bridge setup",detail:"Fill VERCEL_TOKEN in .env.local for Configure-time Vercel inspection."}),b}({envExists:f,configExists:g,configResolved:x,configParseError:b,envKeyPresence:h}),doctor:{checks:v,groups:w,failed:v.some(a=>!a.ok&&!a.skipped),remoteChecksNote:"Live Linear, GitHub, and Cursor doctor checks remain CLI-only in Milestone 3. Run npm run harness:doctor for full validation."},deferredActions:[]},function(){let a=[],b=process.env.HARNESS_CONFIG_JSON?.trim();b&&a.push(b);let c=process.env.HARNESS_CONFIG_JSON_B64?.trim();if(c){a.push(c);try{a.push(Buffer.from(c,"base64").toString("utf8"))}catch{}}return a}())}var X=c(4907),Y=c(79148);let Z=".p-dev/product.json",$="README.md",_="main",aa=Y.Ik({platformRuntime:Y.Yj().min(1),languageFramework:Y.Yj().min(1),repositoryStructure:Y.Yj().optional(),testingStrategy:Y.Yj().optional(),ciStrategy:Y.Yj().optional()});Y.Ik({schemaVersion:Y.eu(1),createdBy:Y.eu("p-dev"),initializationStatus:Y.k5(["uninitialized","initialized"]),createdAt:Y.Yj().datetime(),operationId:Y.Yj().min(1),creationActionId:Y.Yj().min(1),approvedArchitecture:aa.optional()});let ab=/^[a-zA-Z0-9._-]+$/,ac=new Set(["settings","admin","root","api","www","mail","support","help","status","security"]);function ad(a){let b=a.trim();return b?b.length>100?{ok:!1,reason:"Repository name must be 100 characters or fewer."}:ab.test(b)?b.startsWith(".")||b.endsWith(".")?{ok:!1,reason:"Repository name cannot start or end with a dot."}:b.includes("..")?{ok:!1,reason:"Repository name cannot contain consecutive dots."}:ac.has(b.toLowerCase())?{ok:!1,reason:"Repository name is reserved."}:{ok:!0,normalized:b}:{ok:!1,reason:"Repository name may only contain letters, numbers, dots, underscores, and hyphens."}:{ok:!1,reason:"Repository name is required."}}function ae(a,b){return a.trim().toLowerCase()!==b.trim().toLowerCase()?{ok:!1,reason:"Repository owner must match the authenticated GitHub user."}:{ok:!0}}var af=c(76760),ag=c.n(af);let ah=new Map;async function ai(a,b){let c,d=ah.get(a)??Promise.resolve(),e=new Promise(a=>{c=a}),f=d.then(()=>e);ah.set(a,f),await d;try{return await b()}finally{c(),ah.get(a)===f&&ah.delete(a)}}function aj(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"target-repo-provisioning")}function ak(a,b){return ag().join(aj(b),`${a}.json`)}async function al(a,b){try{let c=await (0,f.readFile)(ak(a,b),"utf8"),d=JSON.parse(c);if("string"!=typeof d.operationId||"string"!=typeof d.creationActionId||"string"!=typeof d.createdAt||"string"!=typeof d.previewFingerprint)return null;return d}catch{return null}}async function am(a,b){let c=aj(b);await (0,f.mkdir)(c,{recursive:!0});let d=ak(a.operationId,b),e=`${d}.${process.pid}.${Date.now()}.tmp`;await (0,f.writeFile)(e,`${JSON.stringify(a,null,2)}
26
+ `,"utf8"),await (0,f.rename)(e,d)}function an(a){return{owner:a.owner.trim(),name:a.name.trim(),description:a.description?.trim()??"",visibility:a.visibility??"private"}}function ao(a){var b;return b={action:"target-repo-provisioning",owner:a.owner,name:a.name,description:a.description,visibility:a.visibility,operationId:a.operationId,creationActionId:a.creationActionId,createdAt:a.createdAt,mainBranch:_,devBranch:"dev",initialFilePaths:[$,Z]},(0,d.createHash)("sha256").update(JSON.stringify(b)).digest("hex").slice(0,16)}async function ap(a,b,c){let d=await a.verifyBranchExists(b,c,_);if(!d){let e=await a.getRepositoryMetadata(b,c),f=e?.defaultBranch;if(f&&f!==_){let e=await a.getRepositoryDefaultBranchHead(b,c,f);await a.createGitRef(b,c,_,e),d=!0}}if(!d)throw Error(`Repository ${b}/${c} is missing required branch ${_}.`);let e=await a.ensureDefaultBranch(b,c,_);return{mainSha:await a.getRepositoryDefaultBranchHead(b,c,_),defaultBranchCorrected:e.corrected}}async function aq(a,b,c,d){for(let e of[$,Z])if(!await a.readRepositoryFileContent(b,c,e,d))throw Error(`Missing ${e} on branch ${d}.`)}async function ar(a){let b=an(a.request),c=ad(b.name);if(!c.ok)return{state:"invalid-input",fingerprint:"",operationId:a.request.operationId??"",creationActionId:a.request.creationActionId??"",createdAt:a.request.createdAt??"",owner:b.owner,repositoryName:b.name,repositoryFullName:`${b.owner}/${b.name}`,visibility:b.visibility,description:b.description,initialBranches:[_,"dev"],initialFilePaths:[$,Z],resultingTargetRepoConfigId:`target-${b.name}`,actionsWillPerform:[],actionsWillNotPerform:[],message:c.reason,resumedFromPending:!1};let e=await a.provider.resolveAuthenticatedUser(),f=ae(b.owner,e.login);if(!f.ok)return{state:"invalid-input",fingerprint:"",operationId:a.request.operationId??"",creationActionId:a.request.creationActionId??"",createdAt:a.request.createdAt??"",owner:b.owner,repositoryName:c.normalized,repositoryFullName:`${b.owner}/${c.normalized}`,visibility:b.visibility,description:b.description,initialBranches:[_,"dev"],initialFilePaths:[$,Z],resultingTargetRepoConfigId:`target-${c.normalized}`,actionsWillPerform:[],actionsWillNotPerform:[],message:f.reason,resumedFromPending:!1};let g=`${b.owner}/${c.normalized}`;if("repository_already_exists"===await a.provider.checkRepositoryAvailability(b.owner,c.normalized))return{state:"repository_already_exists",fingerprint:"",operationId:a.request.operationId??"",creationActionId:a.request.creationActionId??"",createdAt:a.request.createdAt??"",owner:b.owner,repositoryName:c.normalized,repositoryFullName:g,visibility:b.visibility,description:b.description,initialBranches:[_,"dev"],initialFilePaths:[$,Z],resultingTargetRepoConfigId:`target-${c.normalized}`,actionsWillPerform:[],actionsWillNotPerform:["Overwrite or repurpose an existing repository","Select an application stack or framework","Configure application deployment"],message:"A repository with this name already exists.",connectExistingHint:`https://github.com/${g}`,resumedFromPending:!1};let h=a.request.operationId,i=a.request.creationActionId,j=a.request.createdAt,k=!1;if(h){let b=await al(h,a.cwd);b&&(i=b.creationActionId,j=b.createdAt,k=!0)}h=h??(0,d.randomUUID)(),i=i??(0,d.randomUUID)(),j=j??new Date().toISOString();let l=ao({owner:b.owner,name:c.normalized,description:b.description,visibility:b.visibility,operationId:h,creationActionId:i,createdAt:j}),m=[`Create private repository ${g}`.replace("private",b.visibility),`Ensure ${_} exists and is the GitHub default branch`,`Add ${$} and ${Z} in one commit on ${_}`,`Create dev from the final ${_} head`];return{state:"preview-ready",fingerprint:l,operationId:h,creationActionId:i,createdAt:j,owner:b.owner,repositoryName:c.normalized,repositoryFullName:g,visibility:b.visibility,description:b.description,initialBranches:[_,"dev"],initialFilePaths:[$,Z],resultingTargetRepoConfigId:`target-${c.normalized}`,actionsWillPerform:m,actionsWillNotPerform:["Select an application stack or framework","Add package manifests, source directories, or stack-specific CI","Configure application deployment or Vercel application hosting","Install the generic PDev target workflow (handled in setup Step 7)"],message:k?"Resume target repository provisioning from saved operation state.":"Ready to create a technology-neutral product repository.",resumedFromPending:k}}async function as(a){if(!a.apply.confirmed)return{state:"invalid-input",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:null,repositoryFullName:null,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:"Explicit confirmation is required before applying repository creation."};let b=an(a.apply),c=ad(b.name);if(!c.ok)return{state:"invalid-input",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:null,repositoryFullName:null,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:c.reason};let e=`${b.owner}/${c.normalized}`;if(ao({owner:b.owner,name:c.normalized,description:b.description,visibility:b.visibility,operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,createdAt:a.apply.createdAt})!==a.apply.fingerprint)return{state:"preview-stale",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:null,repositoryFullName:e,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:"Target repository provisioning preview is stale."};let f=await a.provider.resolveAuthenticatedUser(),g=ae(b.owner,f.login);return g.ok?ai(a.cwd??process.cwd(),async()=>{var g;let h=await al(a.apply.operationId,a.cwd);if(h){let c=(g={operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,owner:b.owner,repositoryFullName:e,previewFingerprint:a.apply.fingerprint},h.operationId!==g.operationId?{ok:!1,reason:"Provisioning operation ID does not match."}:h.creationActionId!==g.creationActionId?{ok:!1,reason:"Provisioning creation action ID does not match."}:h.repositoryFullName!==g.repositoryFullName?{ok:!1,reason:"Provisioning repository name does not match."}:`${h.targetOwner}/${h.targetRepo}`!==g.repositoryFullName?{ok:!1,reason:"Provisioning owner/repo does not match."}:h.previewFingerprint!==g.previewFingerprint?{ok:!1,reason:"Provisioning preview fingerprint does not match."}:{ok:!0});if(!c.ok)return{state:"preview-stale",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:null,repositoryFullName:e,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:c.reason}}else if("repository_already_exists"===await a.provider.checkRepositoryAvailability(b.owner,c.normalized))return{state:"repository_already_exists",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:`https://github.com/${e}`,repositoryFullName:e,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:"A repository with this name already exists.",connectExistingHint:`https://github.com/${e}`};let i=function(a){var b,c;let d={schemaVersion:1,createdBy:"p-dev",initializationStatus:"uninitialized",createdAt:(b={createdAt:a.createdAt,operationId:a.operationId,creationActionId:a.creationActionId}).createdAt,operationId:b.operationId,creationActionId:b.creationActionId};return[{path:$,content:(c=a.productName,`# ${c}
27
+
28
+ This product repository was created by PDev.
29
+
30
+ The product architecture has not been selected yet. Describe the product you want to build in Linear and begin with planning.
31
+ `)},{path:Z,content:`${JSON.stringify(d,null,2)}
32
+ `}]}({productName:c.normalized,createdAt:a.apply.createdAt,operationId:a.apply.operationId,creationActionId:a.apply.creationActionId}),j=i.find(a=>a.path===Z)?.content,k=j?(0,d.createHash)("sha256").update(j).digest("hex").slice(0,16):void 0,l=h??{operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,createdAt:a.apply.createdAt,authenticatedUserId:f.id,authenticatedLogin:f.login,targetOwner:b.owner,targetRepo:c.normalized,repositoryFullName:e,visibility:b.visibility,description:b.description,previewFingerprint:a.apply.fingerprint,startedAt:a.apply.createdAt,phase:"pending-preview",completionState:"incomplete",markerPath:Z,markerContentHash:k};h||await am(l,a.cwd);try{let d=l.repositoryId,f=l.mainSha,g=l.devSha,h=l.defaultBranchCorrected??!1;if(d||(d=(await a.provider.createPersonalRepository({owner:b.owner,name:c.normalized,description:b.description,visibility:b.visibility})).repositoryId,l={...l,repositoryId:d,phase:"repository-created"},await am(l,a.cwd)),!f||"repository-created"===l.phase){let d=await ap(a.provider,b.owner,c.normalized);f=d.mainSha,h=d.defaultBranchCorrected,l={...l,mainSha:f,defaultBranchCorrected:h,phase:h?"default-branch-corrected":"main-verified"},await am(l,a.cwd)}let j=await a.provider.getRepositoryMetadata(b.owner,c.normalized),m=await a.provider.getRepositoryDefaultBranchHead(b.owner,c.normalized,_);await a.provider.readRepositoryFileContent(b.owner,c.normalized,Z,_)?f=m:(f=(await a.provider.writeBootstrapCommit({owner:b.owner,repo:c.normalized,branch:_,parentSha:m,files:i,message:"Initialize PDev product repository"})).commitSha,l={...l,mainSha:f,markerContentHash:k,phase:"bootstrap-committed"},await am(l,a.cwd));let n=await a.provider.getRepositoryDefaultBranchHead(b.owner,c.normalized,_);return f=n,await a.provider.verifyBranchExists(b.owner,c.normalized,"dev")||await a.provider.createGitRef(b.owner,c.normalized,"dev",n),g=await a.provider.getRepositoryDefaultBranchHead(b.owner,c.normalized,"dev"),await aq(a.provider,b.owner,c.normalized,_),await aq(a.provider,b.owner,c.normalized,"dev"),l={...l,mainSha:f,devSha:g,repositoryId:d??j?.repositoryId,phase:"verified-complete",completionState:"complete"},await am(l,a.cwd),{state:"verified-complete",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:`https://github.com/${e}`,repositoryFullName:e,repositoryId:l.repositoryId??null,mainSha:f,devSha:g,defaultBranchCorrected:h,initialFilePaths:[$,Z],message:h?"Repository created; GitHub default branch was corrected to main.":"Repository created and verified."}}catch(c){l={...l,completionState:"setup-incomplete"},await am(l,a.cwd);let b=c instanceof Error?c.message:"Repository setup incomplete.";return{state:"setup-incomplete",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:`https://github.com/${e}`,repositoryFullName:e,repositoryId:l.repositoryId??null,mainSha:l.mainSha??null,devSha:l.devSha??null,defaultBranchCorrected:l.defaultBranchCorrected??!1,initialFilePaths:[$,Z],message:`Repository created; setup incomplete. ${b}`}}}):{state:"owner-mismatch",operationId:a.apply.operationId,creationActionId:a.apply.creationActionId,repositoryUrl:null,repositoryFullName:e,repositoryId:null,mainSha:null,devSha:null,defaultBranchCorrected:!1,initialFilePaths:[$,Z],message:g.reason}}var at=c(55827),au=c(643),av=c(50053),aw=c(26618),ax=c(67470),ay=c(34185);async function az(a){let b=a.explicitRepo?.trim();if(b){let a=(0,ay.e)(b);if(a)return{repo:a,source:"env-local"}}let c=await (0,E.vE)(a.cwd),d=c?(0,ay.e)(c):null;return d?{repo:d,source:"git-remote-origin"}:null}var aA=c(7285);let aB="preview";function aC(a){return a.trim().toLowerCase()}function aD(a){let b=a.trim(),c=b.indexOf("/");if(-1===c)return b.toLowerCase();let d=b.slice(0,c),e=b.slice(c+1);return`${d.trim().toLowerCase()}/${e.trim().toLowerCase()}`}function aE(a){return{operationId:a.operationId,authenticatedUserId:a.user.id,authenticatedLogin:aC(a.user.login),destination:aD(a.destination),packageName:a.manifest.packageName,packageVersion:a.manifest.packageVersion,sourceRepository:a.manifest.sourceRepository,sourceCommit:a.manifest.sourceCommit,manifestSchemaVersion:a.manifest.schemaVersion,snapshotFingerprint:a.snapshotFingerprint,snapshotContentId:a.manifest.snapshotContentId.trim(),snapshotSha256:a.manifest.snapshotSha256,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1,classification:a.classification,envBaseline:aD(a.envBaseline||""),pDevVersion:a.pDevVersion.trim(),resumedFromPending:a.resumedFromPending,creationPreviewFingerprint:a.creationPreviewFingerprint}}var aF=c(22043),aG=c(8334);let aH=new Map;async function aI(a,b){let c,d=aH.get(a)??Promise.resolve(),e=new Promise(a=>{c=a}),f=d.then(()=>e);aH.set(a,f),await d;try{return await b()}finally{c(),aH.get(a)===f&&aH.delete(a)}}function aJ(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-harness-provisioning.pending.json")}async function aK(a){try{let b=await (0,f.readFile)(aJ(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.operationId||"number"!=typeof c.authenticatedUserId||"string"!=typeof c.previewFingerprint||"string"!=typeof c.snapshotContentId)return null;return c}catch{return null}}async function aL(a,b){let c=aJ(b);await (0,f.mkdir)(ag().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${Date.now()}.tmp`;await (0,f.writeFile)(d,`${JSON.stringify(a,null,2)}
33
+ `,"utf8"),await (0,f.rename)(d,c)}async function aM(a){try{await (0,f.rm)(aJ(a),{force:!0})}catch{}}function aN(a,b){return void 0!==b.operationId&&a.operationId!==b.operationId?{ok:!1,reason:"Pending provisioning operation ID does not match."}:a.authenticatedUserId!==b.authenticatedUserId?{ok:!1,reason:"Pending provisioning authenticated user ID does not match."}:a.authenticatedLogin!==b.authenticatedLogin?{ok:!1,reason:"Pending provisioning authenticated login does not match."}:a.packageName!==b.packageName?{ok:!1,reason:"Pending provisioning package name does not match."}:a.packageVersion!==b.packageVersion?{ok:!1,reason:"Pending provisioning package version does not match."}:a.sourceRepository!==b.sourceRepository?{ok:!1,reason:"Pending provisioning source repository does not match."}:a.sourceCommit!==b.sourceCommit?{ok:!1,reason:"Pending provisioning source commit does not match."}:a.manifestSchemaVersion!==b.manifestSchemaVersion?{ok:!1,reason:"Pending provisioning manifest schema version does not match."}:a.snapshotContentId!==b.snapshotContentId?{ok:!1,reason:"Pending provisioning snapshot content ID does not match."}:a.snapshotSha256!==b.snapshotSha256?{ok:!1,reason:"Pending provisioning snapshot digest does not match."}:a.snapshotGitTreeSha1!==b.snapshotGitTreeSha1?{ok:!1,reason:"Pending provisioning snapshot tree SHA does not match."}:a.targetOwner!==b.targetOwner?{ok:!1,reason:"Pending provisioning target owner does not match."}:a.targetRepo!==b.targetRepo?{ok:!1,reason:"Pending provisioning target repository does not match."}:void 0!==b.previewFingerprint&&a.previewFingerprint!==b.previewFingerprint?{ok:!1,reason:"Pending provisioning creation fingerprint does not match."}:void 0!==b.defaultBranch&&void 0!==a.defaultBranch&&a.defaultBranch!==b.defaultBranch?{ok:!1,reason:"Pending provisioning default branch does not match."}:void 0!==a.repositoryId&&void 0===a.defaultBranch&&void 0!==b.defaultBranch?{ok:!1,reason:"Pending provisioning state is missing default branch."}:{ok:!0}}function aO(a){switch(a){case"repository-created":case"creating-private-workspace":default:return"creating-private-workspace";case"preparing-snapshot":case"preparing-workspace-snapshot":case"snapshot-objects-uploading":return"preparing-workspace-snapshot";case"workspace-uploading":case"uploading-workspace":return"uploading-workspace";case"snapshot-commit-created":case"marker-pending":case"verifying":case"verifying-workspace":return"verifying-workspace";case"description-pending":case"persistence-pending":case"saving-configuration":return"saving-configuration"}}function aP(a){switch(a){case"creating-private-workspace":return"Creating private workspace";case"preparing-workspace-snapshot":return"Preparing workspace snapshot";case"uploading-workspace":return"Uploading workspace";case"verifying-workspace":return"Verifying workspace";case"saving-configuration":return"Saving configuration"}}function aQ(a,b){return`Retry Step 1 Continue to resume operation ${b} from checkpoint ${a??"unknown"}.`}function aR(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-harness-provisioning.progress.json")}async function aS(a,b){let c=a.uiPhase??aO(a.phase),d=Date.parse(a.startedAt),e=a.elapsedMs??(Number.isFinite(d)?Math.max(0,Date.now()-d):0),g={operationId:a.operationId,phase:a.phase,uiPhase:c,phaseStartedAt:a.phaseStartedAt,startedAt:a.startedAt,elapsedMs:e,completed:a.completed,total:a.total,rateLimitPauseSeconds:a.rateLimitPauseSeconds,lastSafeCheckpoint:a.lastSafeCheckpoint,recoveryInstruction:a.recoveryInstruction??aQ(a.lastSafeCheckpoint??a.phase,a.operationId),updatedAt:new Date().toISOString()},h=aR(b);await (0,f.mkdir)(ag().dirname(h),{recursive:!0});let i=`${h}.${process.pid}.${Date.now()}.tmp`;return await (0,f.writeFile)(i,`${JSON.stringify(g,null,2)}
34
+ `,"utf8"),await (0,f.rename)(i,h),g}async function aT(a){try{let b=await (0,f.readFile)(aR(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.operationId||"string"!=typeof c.phase)return null;return{...c,uiPhase:c.uiPhase??aO(c.phase),recoveryInstruction:c.recoveryInstruction??aQ(c.lastSafeCheckpoint??c.phase,c.operationId)}}catch{return null}}async function aU(a){try{await (0,f.rm)(aR(a),{force:!0})}catch{}}async function aV(a){let b=await aT(a.cwd),c=a.pending,d=b?.operationId??c?.operationId??null,e=b?.phase??c?.phase??null,f=e?aO(e):null;return{operationId:d,phase:e,uiPhase:f,uiPhaseLabel:f?aP(f):null,phaseStartedAt:b?.phaseStartedAt??null,startedAt:b?.startedAt??c?.startedAt??null,elapsedMs:b?.elapsedMs??null,completed:b?.completed??null,total:b?.total??null,rateLimitPauseSeconds:b?.rateLimitPauseSeconds??null,lastSafeCheckpoint:b?.lastSafeCheckpoint??c?.phase??null,recoveryInstruction:b?.recoveryInstruction??(d?aQ(e??void 0,d):null),pendingPhase:c?.phase??null,pendingRepositoryId:c?.repositoryId??null,pendingTargetRepo:c?.targetOwner&&c?.targetRepo?`${c.targetOwner}/${c.targetRepo}`:c?.targetRepo??null,hasPendingState:!!c?.operationId}}async function aW(a,b){let c=function(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-harness-provisioning.last-run.json")}(b);await (0,f.mkdir)(ag().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${Date.now()}.tmp`;return await (0,f.writeFile)(d,`${JSON.stringify(a,null,2)}
35
+ `,"utf8"),await (0,f.rename)(d,c),a}async function aX(a){let b=function(a){let b=[];void 0!==a.authenticationMs&&b.push({phase:"authentication",durationMs:a.authenticationMs});let c=a.snapshotProvisioning;c?.repositoryCreateReconcileMs!==void 0&&b.push({phase:"repository-reconciliation",durationMs:c.repositoryCreateReconcileMs});let d=c?.gitTransport,e=(d?.objectTreePreparationMs??0)+(d?.packCreationMs??0)+(c?.workspaceUploadMs??0);e>0&&b.push({phase:"object-import",durationMs:e});let f=(d?.temporaryGitPreparationMs??0)+(d?.initialRemoteFetchMs??0);f>0&&b.push({phase:"commit-creation",durationMs:f}),d?.gitPushMs!==void 0&&b.push({phase:"push",durationMs:d.gitPushMs});let g=a.remoteVerificationMs??d?.remoteVerificationMs;return void 0!==g&&b.push({phase:"remote-verification",durationMs:g}),void 0!==a.localPersistenceMs&&b.push({phase:"local-persistence",durationMs:a.localPersistenceMs}),b}(a.timings),c=b.reduce((a,b)=>a+b.durationMs,0);return aW({operationId:a.operationId,outcome:a.outcome,completedAt:new Date().toISOString(),phases:b,totalMs:c},a.cwd)}var aY=c(1913),aZ=c(23465),a$=c(80988),a_=c(45599),a0=c(16051);class a1{constructor(a={}){this.pauseUntilMs=0,this.secondaryStrikeCount=0,this.now=a.now??(()=>Date.now()),this.sleep=a.sleep??(a=>new Promise(b=>setTimeout(b,a)))}get pauseDeadlineMs(){return this.pauseUntilMs}async waitBeforeMutation(){let a=this.pauseUntilMs-this.now();a>0&&await this.sleep(a)}recordRateLimitFailure(a){(403===a.status||429===a.status)&&(!(void 0!==a.retryAfterSeconds&&a.retryAfterSeconds>0||0===a.rateLimitRemaining&&void 0!==a.rateLimitResetEpochSeconds)||(0,a_.pe)(a.message))&&(this.secondaryStrikeCount+=1);let b=(0,a_.J6)({error:a,secondaryStrikeCount:this.secondaryStrikeCount,nowMs:this.now()});return this.pauseUntilMs=Math.max(this.pauseUntilMs,this.now()+b),b}}var a2=c(71992);async function a3(a,b,c){let d;try{return await Promise.race([c(),new Promise((c,e)=>{d=setTimeout(()=>{e(new a$.gk("remote-phase-timeout",`Provisioning phase "${a}" timed out after ${b}ms. Retry Step 1 Continue to resume or reconcile.`,!0))},b)})])}finally{d&&clearTimeout(d)}}let a4=function(a=process.env.HARNESS_SNAPSHOT_UPLOAD_CONCURRENCY){if(void 0===a||""===a.trim())return 2;let b=a.trim();if(!/^\d+$/.test(b))throw Error("Invalid HARNESS_SNAPSHOT_UPLOAD_CONCURRENCY: must be an integer between 1 and 4.");let c=Number(b);if(c<1||c>4)throw Error("Invalid HARNESS_SNAPSHOT_UPLOAD_CONCURRENCY: must be between 1 and 4.");return c}(),a5=Number(process.env.HARNESS_SNAPSHOT_UPLOAD_RETRIES??3);function a6(a){return Math.round(au.performance.now()-a)}function a7(a){return new Promise(b=>setTimeout(b,a))}function a8(a){return a instanceof ax.OS&&(!!(0,a_.df)(a)||408===a.status||a.status>=500)}async function a9(a,b,c){let d=0;for(;;){await b.gate.waitBeforeMutation();try{return await a()}catch(a){if(d+=1,!(a instanceof ax.OS))throw a;if((0,a_.df)(a)){let e=b.gate.recordRateLimitFailure(a);if(b.onRateLimitPause?.(Math.ceil(e/1e3),c),d>a5)throw a;continue}if(a8(a)&&d<=a5){let a=Math.min(8e3,250*2**(d-1));await a7(a+Math.floor(100*Math.random()));continue}throw a}}}async function ba(a,b,c){let d=Array(a.length),e=0,f=Array.from({length:Math.max(1,b)},async()=>{for(;;){let b=e;if(e+=1,b>=a.length)return;d[b]=await c(a[b],b)}});return await Promise.all(f),d}async function bb(a){let b=new Map,c=a.manifest.files;a.onProgress?.({phase:"snapshot-objects-uploading",uploadedBlobs:0,totalBlobs:c.length});let d=0;return await ba(c,a4,async e=>{let f=await (0,a0.bY)({snapshotRoot:a.snapshotRoot,path:e.path,expectedSha256:e.sha256}),g=await a9(()=>a.provider.createGitBlob({owner:a.owner,repo:a.repo,content:f}),a.retryContext,"snapshot-objects-uploading");if(g.sha!==e.gitBlobSha1)throw Error(`Uploaded blob SHA mismatch for ${e.path} (expected ${e.gitBlobSha1}, got ${g.sha}).`);b.set(e.path,g.sha),d+=1,a.onProgress?.({phase:"snapshot-objects-uploading",uploadedBlobs:d,totalBlobs:c.length})}),b}async function bc(a){let b=(0,a$.ig)({operationId:a.operationId,sourceCommit:a.manifest.sourceCommit}),c=await a9(()=>a.provider.createGitTree({owner:a.owner,repo:a.repo,tree:a.manifest.files.map(b=>({path:b.path,mode:b.mode,type:"blob",sha:a.blobShaByPath.get(b.path)??b.gitBlobSha1}))}),a.retryContext,"snapshot-commit-created");if(c.sha!==a.manifest.gitRootTreeSha1)throw new a$.gk("snapshot-tree-mismatch",`Snapshot tree SHA mismatch (expected ${a.manifest.gitRootTreeSha1}, got ${c.sha}).`,!1);return(await a9(()=>a.provider.createGitCommit({owner:a.owner,repo:a.repo,message:`Initialize p-dev harness workspace snapshot (${a.manifest.packageVersion})`,tree:c.sha,parents:[a.parentCommitSha],author:b,committer:b}),a.retryContext,"snapshot-commit-created")).sha}async function bd(a){let b=(0,a$.ig)({operationId:a.operationId,sourceCommit:a.sourceCommit}),c=await a9(()=>a.provider.createGitBlob({owner:a.owner,repo:a.repo,content:Buffer.from(a.markerContent,"utf8")}),a.retryContext,"marker-pending"),d=await a9(()=>a.provider.createGitTree({owner:a.owner,repo:a.repo,baseTree:a.snapshotTreeSha,tree:[{path:aF.wJ,mode:"100644",type:"blob",sha:c.sha}]}),a.retryContext,"marker-pending");if(d.sha===a.snapshotTreeSha)throw new a$.gk("marker-commit-failed","Marker tree must overlay the snapshot tree rather than replace it.",!1);let e=await a9(()=>a.provider.createGitCommit({owner:a.owner,repo:a.repo,message:"Initialize p-dev managed harness workspace marker",tree:d.sha,parents:[a.parentCommitSha],author:b,committer:b}),a.retryContext,"marker-pending").catch(a=>{throw new a$.gk("marker-commit-failed",a instanceof Error?a.message:"Marker commit creation failed.",!0)});return(await a.provider.getGitRef(a.owner,a.repo,a.defaultBranch)).object.sha===e.sha||await a9(()=>a.provider.updateGitRef({owner:a.owner,repo:a.repo,ref:a.defaultBranch,sha:e.sha,force:!1,expectedSha:a.parentCommitSha}),a.retryContext,"marker-pending"),e.sha}async function be(a){let b=await a.provider.getRepositoryMetadata(a.owner,a.repoName);if(!b||!b.private||!b.permissions.admin||b.owner!==a.owner||b.repo!==a.repoName||!(0,a$.DR)(b.description,a.operationId))return null;let c=await a.provider.getRepositoryDefaultBranchHead(a.owner,a.repoName,b.defaultBranch);return{repositoryId:b.repositoryId,defaultBranch:b.defaultBranch,initializedCommitSha:c}}async function bf(a){let{attempts:b,initialDelayMs:c}={attempts:Number(process.env.HARNESS_SNAPSHOT_RECONCILE_ATTEMPTS??5),initialDelayMs:Number(process.env.HARNESS_SNAPSHOT_RECONCILE_DELAY_MS??500)};for(let d=0;d<b;d+=1){let e=await be(a);if(e)return e;if(d<b-1){let a=c*2**d+Math.floor(100*Math.random());await a7(a)}}return null}async function bg(a){let b=await a.provider.getRepositoryMetadata(a.owner,a.repo);if(!b)throw new a$.gk("description-finalization-failed","Destination repository is not accessible for description finalization.",!0);if(await a.provider.getRepositoryDefaultBranchHead(a.owner,a.repo,a.defaultBranch)!==a.markerCommitSha)throw new a$.gk("description-finalization-failed","Marker commit is not at branch HEAD; refusing to finalize repository description.",!0);let c=b.description??"";if(c!==a.normalDescription){if(!(0,a$.DR)(c,a.operationId))throw new a$.gk("description-finalization-failed","Repository description does not match the expected operation ownership marker.",!1);try{await a.provider.updateUserRepositoryDescription({owner:a.owner,repo:a.repo,description:a.normalDescription})}catch(a){throw new a$.gk("description-finalization-failed",a instanceof Error?a.message:"Description finalization failed.",!0)}}}async function bh(a){if(!a.pending.repositoryId)return{ok:!1,message:"Pending state is missing repository ID."};let b=await a.provider.getRepositoryMetadata(a.pending.targetOwner,a.pending.targetRepo);if(!b)return{ok:!1,message:"Pending destination repository no longer exists."};if(b.repositoryId!==a.pending.repositoryId)return{ok:!1,message:"Pending destination repository ID does not match remote repository."};if(b.owner!==a.pending.targetOwner||b.repo!==a.pending.targetRepo)return{ok:!1,message:"Pending destination repository slug does not match remote repository."};if(!b.private||!b.permissions.admin)return{ok:!1,message:"Pending destination repository is not private/admin-accessible."};if(a.pending.defaultBranch&&b.defaultBranch!==a.pending.defaultBranch)return{ok:!1,message:"Pending destination repository default branch does not match remote repository."};let c=a.pending.defaultBranch??b.defaultBranch,d=await a.provider.getRepositoryDefaultBranchHead(b.owner,b.repo,c);if(a.pending.markerCommitSha&&d!==a.pending.markerCommitSha&&a.pending.snapshotCommitSha&&d!==a.pending.snapshotCommitSha&&a.pending.initializedCommitSha&&d!==a.pending.initializedCommitSha)return{ok:!1,message:"Pending destination repository HEAD does not match recorded phase."};if(a.pending.snapshotCommitSha){let c=await a.provider.getGitCommit(b.owner,b.repo,a.pending.snapshotCommitSha);if(c.tree.sha!==a.manifest.gitRootTreeSha1)return{ok:!1,message:"Recorded snapshot commit tree does not match embedded manifest."};if(a.pending.initializedCommitSha&&c.parents[0]?.sha!==a.pending.initializedCommitSha)return{ok:!1,message:"Recorded snapshot commit parent does not match initialized commit."}}if(a.pending.markerCommitSha&&a.pending.snapshotCommitSha){let c=await a.provider.getGitCommit(b.owner,b.repo,a.pending.markerCommitSha);if(c.parents[0]?.sha!==a.pending.snapshotCommitSha)return{ok:!1,message:"Recorded marker commit parent does not match snapshot commit."}}return{ok:!0}}async function bi(a){var b;let c=a.user.login,{repo:d}=(0,X.Jj)(`${c}/${a.repoName}`),e=(b={onRateLimitPause:(b,c)=>{a.onProgress?.({phase:c,uploadedBlobs:a.pending?.snapshotCommitSha?a.manifest.fileCount:0,totalBlobs:a.manifest.fileCount,rateLimitPauseSeconds:b})}},{gate:new a1,onRateLimitPause:b?.onRateLimitPause}),f={},g=au.performance.now();if(a.pending?.repositoryId){let b=await bh({provider:a.provider,pending:a.pending,manifest:a.manifest});if(!b.ok)return{ok:!1,message:b.message,recoverable:!1,code:"repository-identity-mismatch"}}let h=a.pending?.repositoryId,i=a.pending?.defaultBranch,j=a.pending?.initializedCommitSha;if(h&&j&&!i){let b=await a.provider.getRepositoryMetadata(c,d);b&&(i=b.defaultBranch)}if(!h||!j){let b,e=(0,a$.qm)(a.description,a.operationId);try{let f=await a.provider.createUserRepository({name:a.repoName,description:e,private:!0,autoInit:!0}),g=await a.provider.getGitRef(c,d,f.defaultBranch);b={repositoryId:f.repositoryId,defaultBranch:f.defaultBranch,initializedCommitSha:g.object.sha}}catch(d){if(a8(d)){let e=await bf({provider:a.provider,owner:c,repoName:a.repoName,operationId:a.operationId});if(e)b=e;else throw d}else if(d instanceof ax.OS&&422===d.status){let d=await bf({provider:a.provider,owner:c,repoName:a.repoName,operationId:a.operationId});if(!d)return{ok:!1,message:"Repository creation returned an ambiguous result and no matching operation-owned repository was found.",recoverable:!0,code:"repository-create-ambiguous"};b=d}else throw d}h=b.repositoryId,i=b.defaultBranch,j=b.initializedCommitSha,await a.onCheckpoint?.({phase:"repository-created",repositoryId:h,defaultBranch:i,initializedCommitSha:j}),a.onProgress?.({phase:"repository-created",uploadedBlobs:0,totalBlobs:a.manifest.fileCount})}if(f.repositoryCreateReconcileMs=a6(g),!i)return{ok:!1,message:"Provisioning state is missing the repository default branch.",recoverable:!1,code:"repository-identity-mismatch"};let k=i,l=a.pending?.snapshotCommitSha,m=a.pending?.markerCommitSha,n=(await a.provider.getGitRef(c,d,k)).object.sha;if(m&&n===m);else if(l&&n===l&&!m);else if(l&&m&&n!==m&&n!==l)return{ok:!1,message:`Remote branch changed unexpectedly (expected marker ${m} or snapshot ${l}, found ${n}). Force push is not allowed.`,recoverable:!0,code:"ref-update-unexpected-head"};else if(!l&&n!==j&&n!==a.pending?.snapshotCommitSha)try{let b=await a.provider.getGitCommit(c,d,n);if(b.parents[0]?.sha===j)l=n,await a.onCheckpoint?.({phase:"snapshot-commit-created",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1});else if(b.parents[0]?.sha){let e=await a.provider.getGitCommit(c,d,b.parents[0].sha);if(e.parents[0]?.sha===j)l=b.parents[0].sha,m=n,await a.onCheckpoint?.({phase:"marker-pending",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1});else if(n!==j)return{ok:!1,message:`Remote branch changed unexpectedly (expected initialized commit ${j}, found ${n}). Force push is not allowed.`,recoverable:!0,code:"ref-update-unexpected-head"}}else if(n!==j)return{ok:!1,message:`Remote branch changed unexpectedly (expected initialized commit ${j}, found ${n}). Force push is not allowed.`,recoverable:!0,code:"ref-update-unexpected-head"}}catch{if(n!==j)return{ok:!1,message:`Remote branch changed unexpectedly (expected initialized commit ${j}, found ${n}). Force push is not allowed.`,recoverable:!0,code:"ref-update-unexpected-head"}}let o="function"==typeof a.provider.pushHarnessSnapshotCommits;if(!o||l&&m){if(!o){if(!l){let b=await bb({provider:a.provider,owner:c,repo:d,snapshotRoot:a.snapshotRoot,manifest:a.manifest,retryContext:e,onProgress:a.onProgress});l=await bc({provider:a.provider,owner:c,repo:d,manifest:a.manifest,parentCommitSha:j,operationId:a.operationId,blobShaByPath:b,retryContext:e}),(await a.provider.getGitRef(c,d,k)).object.sha!==l&&await a9(()=>a.provider.updateGitRef({owner:c,repo:d,ref:k,sha:l,force:!1,expectedSha:j}),e,"snapshot-commit-created"),await a.onCheckpoint?.({phase:"snapshot-commit-created",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1}),a.onProgress?.({phase:"snapshot-commit-created",uploadedBlobs:a.manifest.fileCount,totalBlobs:a.manifest.fileCount})}if(!m){let b=(0,aF.a)({repository:`${c}/${a.repoName}`,repositoryId:h,manifest:a.manifest,snapshotCommitSha:l,operationId:a.operationId,createdByGithubUserId:a.user.id,createdByLogin:a.user.login,pDevVersion:a.packageVersion,defaultBranch:k});try{m=await bd({provider:a.provider,owner:c,repo:d,defaultBranch:k,parentCommitSha:l,snapshotTreeSha:a.manifest.gitRootTreeSha1,markerContent:`${JSON.stringify(b,null,2)}
36
+ `,operationId:a.operationId,sourceCommit:a.manifest.sourceCommit,retryContext:e})}catch(a){if(a instanceof a$.gk&&"marker-commit-failed"===a.code)return{ok:!1,message:a.message,recoverable:!0,code:a.code};throw a}await a.onCheckpoint?.({phase:"marker-pending",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1}),a.onProgress?.({phase:"marker-pending",uploadedBlobs:a.manifest.fileCount,totalBlobs:a.manifest.fileCount})}}}else{let b=l??j,e=l?"snapshot-commit-created":"repository-created";a.onProgress?.({phase:"preparing-snapshot",uploadedBlobs:0,totalBlobs:a.manifest.fileCount,completed:0,total:a.manifest.fileCount,lastSafeCheckpoint:e}),await a.onCheckpoint?.({phase:"preparing-snapshot",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1});try{let g=(0,a2.CM)(),i=au.performance.now(),n=await a3("workspace-uploading",g,()=>a.provider.pushHarnessSnapshotCommits({owner:c,repo:d,defaultBranch:k,expectedHeadSha:b,initializedCommitSha:j,snapshotRoot:a.snapshotRoot,manifest:a.manifest,operationId:a.operationId,packageVersion:a.packageVersion,existingSnapshotCommitSha:l,timeoutMs:g,buildMarkerContent:b=>{let d=(0,aF.a)({repository:`${c}/${a.repoName}`,repositoryId:h,manifest:a.manifest,snapshotCommitSha:b,operationId:a.operationId,createdByGithubUserId:a.user.id,createdByLogin:a.user.login,pDevVersion:a.packageVersion,defaultBranch:k});return`${JSON.stringify(d,null,2)}
37
+ `},onProgress:b=>{a.onProgress?.({phase:b.phase,uploadedBlobs:b.completed??0,totalBlobs:b.total??a.manifest.fileCount,completed:b.completed,total:b.total??a.manifest.fileCount,lastSafeCheckpoint:e})}}));f.workspaceUploadMs=a6(i),f.gitTransport=n.timings,l=n.snapshotCommitSha,m=n.markerCommitSha,await a.onCheckpoint?.({phase:"snapshot-commit-created",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1}),await a.onCheckpoint?.({phase:"marker-pending",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1}),a.onProgress?.({phase:"verifying",uploadedBlobs:a.manifest.fileCount,totalBlobs:a.manifest.fileCount,completed:a.manifest.fileCount,total:a.manifest.fileCount,lastSafeCheckpoint:"marker-pending"})}catch(a){if(a instanceof a$.gk&&("marker-commit-failed"===a.code||"workspace-upload-failed"===a.code||"workspace-upload-timeout"===a.code||"remote-phase-timeout"===a.code||"ref-update-unexpected-head"===a.code||"snapshot-tree-mismatch"===a.code))return{ok:!1,message:a.message,recoverable:a.recoverable,code:a.code};throw a}}try{let b=au.performance.now();await bg({provider:a.provider,owner:c,repo:d,operationId:a.operationId,normalDescription:a.description,markerCommitSha:m,defaultBranch:k}),f.descriptionFinalizationMs=a6(b)}catch(b){if(b instanceof a$.gk&&"description-finalization-failed"===b.code)return await a.onCheckpoint?.({phase:"description-pending",repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1}),{ok:!1,message:b.message,recoverable:b.recoverable,code:b.code};throw b}return{ok:!0,fullName:`${c}/${a.repoName}`,repositoryId:h,defaultBranch:k,initializedCommitSha:j,snapshotCommitSha:l,markerCommitSha:m,timings:f}}async function bj(a){let{owner:b,repo:c}=(0,X.Jj)(a.repoSlug),d=await a.provider.getRepositoryMetadata(b,c);if(!d)return{ok:!1,message:`Harness workspace ${a.repoSlug} is not accessible.`};if(d.repositoryId!==a.repositoryId)return{ok:!1,message:`Harness workspace repository ID mismatch for ${a.repoSlug}.`};if(!d.private||!d.permissions.admin)return{ok:!1,message:`Harness workspace ${a.repoSlug} must be private and admin-accessible.`};let e=await a.provider.getRepositoryDefaultBranchHead(b,c,d.defaultBranch),f=await a.provider.readRepositoryFileContent(b,c,aF.wJ,e);if(!f)return{ok:!1,message:"Provisioned workspace is missing the managed marker at HEAD."};let g=(0,aF.Dr)(f);if(!g.ok)return{ok:!1,message:g.reason};if(!g.marker.createdFromPackageSnapshot)return{ok:!1,message:"Provisioned workspace marker is not snapshot-backed."};let h=g.marker.createdFromPackageSnapshot;if(h.snapshotContentId!==a.manifest.snapshotContentId||h.snapshotSha256!==a.manifest.snapshotSha256||h.snapshotGitTreeSha1!==a.manifest.gitRootTreeSha1||h.sourceCommit!==a.manifest.sourceCommit)return{ok:!1,message:"Provisioned workspace marker provenance does not match embedded manifest."};let i=await a.provider.getGitCommit(b,c,e),j=i.parents[0]?.sha;return j?(await a.provider.getGitCommit(b,c,j)).tree.sha!==a.manifest.gitRootTreeSha1?{ok:!1,message:"Snapshot commit tree does not match embedded manifest."}:await a.provider.readRepositoryFileContent(b,c,"README.md",e)?{ok:!0}:{ok:!1,message:"Provisioned workspace HEAD is missing README.md from the packaged snapshot."}:{ok:!1,message:"Marker commit is missing a parent snapshot commit."}}var bk=c(88414),bl=c(97631),bm=c(87509),bn=c(45191);let bo=new Set(["100644","100755","120000"]);async function bp(a){let b=new Set;for(let c of a.manifest.files){let d,e=function(a){let b;try{b=(0,bm.b6)(a.path)}catch{return{ok:!1,reason:`Snapshot file path is not canonical: ${a.path}`}}return b!==a.path?{ok:!1,reason:`Snapshot file path is not canonical: ${a.path}`}:(0,bm.lw)(a.path)?{ok:!1,reason:`Forbidden snapshot path: ${a.path}`}:bo.has(a.mode)?"file"===a.type&&"100644"!==a.mode&&"100755"!==a.mode?{ok:!1,reason:`Snapshot file ${a.path} has invalid file mode ${a.mode}.`}:"symlink"===a.type&&"120000"!==a.mode?{ok:!1,reason:`Snapshot symlink ${a.path} must use mode 120000.`}:{ok:!0}:{ok:!1,reason:`Unsupported snapshot mode ${a.mode} for ${a.path}.`}}(c);if(!e.ok)return e;if(b.has(c.path))return{ok:!1,reason:`Duplicate snapshot path: ${c.path}`};b.add(c.path);try{d=await (0,a0.bY)({snapshotRoot:a.snapshotRoot,path:c.path,expectedSha256:c.sha256})}catch(a){return{ok:!1,reason:a instanceof Error?a.message:`Snapshot file ${c.path} failed integrity validation.`}}if(d.byteLength!==c.size)return{ok:!1,reason:`Snapshot file ${c.path} size mismatch (expected ${c.size}, got ${d.byteLength}).`};if((0,bn.bo)(d)!==c.sha256)return{ok:!1,reason:`Snapshot file ${c.path} SHA-256 mismatch.`};if((0,bl.us)(d)!==c.gitBlobSha1)return{ok:!1,reason:`Snapshot file ${c.path} git blob SHA mismatch.`}}return(0,bl.dV)(a.manifest.files)!==a.manifest.gitRootTreeSha1?{ok:!1,reason:"Embedded snapshot root tree SHA does not match manifest files."}:(0,bn.dq)(a.manifest.files)!==a.manifest.snapshotSha256?{ok:!1,reason:"Embedded snapshot digest does not match manifest files."}:(0,bn.Aw)({packageVersion:a.manifest.packageVersion,sourceCommit:a.manifest.sourceCommit,snapshotSha256:a.manifest.snapshotSha256})!==a.manifest.snapshotContentId?{ok:!1,reason:"Embedded snapshot content ID does not match manifest inputs."}:{ok:!0}}async function bq(a,b,c){let d,e,g;if(c?.aborted)return{ok:!1,state:"snapshot-unavailable",message:"Embedded workspace snapshot load was aborted."};try{d=(0,aw.Ot)(b)?(0,aA.QX)(b):(0,aA.HF)(a)}catch(a){return{ok:!1,state:"snapshot-unavailable",message:a instanceof Error?a.message:"Could not resolve packaged workspace snapshot root."}}let h=(0,aA.ro)(d),i=ag().join(h,"manifest.json");try{if(c?.aborted)return{ok:!1,state:"snapshot-unavailable",message:"Embedded workspace snapshot load was aborted."};e=await (0,f.readFile)(i,"utf8")}catch{return{ok:!1,state:"snapshot-manifest-missing",message:"Embedded workspace snapshot manifest is missing from the package."}}let j=(0,bk.parseWorkspaceSnapshotManifestJson)(e);if(!j.ok)return{ok:!1,state:"snapshot-manifest-invalid",message:j.reason};try{g=(0,av.I2)(d)}catch(a){return{ok:!1,state:"snapshot-incompatible",message:a instanceof Error?a.message:"Packaged version metadata is invalid."}}return j.manifest.packageVersion!==g?{ok:!1,state:"snapshot-incompatible",message:`Embedded snapshot package version ${j.manifest.packageVersion} does not match installed package ${g}.`}:{ok:!0,packageRoot:d,snapshotRoot:h,packageVersion:g,manifest:j.manifest,fingerprint:(0,bk.Nk)(j.manifest)}}async function br(a="file:///Users/weston/Code/agentic-product-development-harness/src/setup/harness-workspace-snapshot-loader.ts",b=process.env,c){return bq(a,b,c)}async function bs(a="file:///Users/weston/Code/agentic-product-development-harness/src/setup/harness-workspace-snapshot-loader.ts",b=process.env){let c=await bq(a,b);if(!c.ok)return c;let d=await bp({snapshotRoot:c.snapshotRoot,manifest:c.manifest});return d.ok?c:{ok:!1,state:"snapshot-tampered",message:d.reason}}function bt(a){return Math.round(au.performance.now()-a)}function bu(a){return JSON.stringify(a)}function bv(a){return`${a}/${aZ.Zl}`}function bw(){return{packageName:"p-dev-harness",packageVersion:"",sourceRepository:"",sourceCommit:"",snapshotContentId:null,snapshotFingerprint:null,templateContentId:null}}function bx(a,b){if(!a)return bw();let c=a.manifest.snapshotContentId;return{packageName:a.manifest.packageName,packageVersion:a.manifest.packageVersion,sourceRepository:a.manifest.sourceRepository,sourceCommit:a.manifest.sourceCommit,snapshotContentId:c,snapshotFingerprint:a.fingerprint,templateContentId:b??c}}function by(a){let b=a?.values.GITHUB_DISPATCH_REPOSITORY_ID?.trim();if(!b)return null;let c=Number(b);return!Number.isInteger(c)||c<=0?null:c}function bz(a,b){var c;return{operationId:(c={operationId:b.operationId,authenticatedUserId:b.authenticatedUserId,authenticatedLogin:b.authenticatedLogin,targetOwner:b.targetOwner,targetRepo:b.targetRepo,packageName:a.manifest.packageName,packageVersion:a.manifest.packageVersion,sourceRepository:a.manifest.sourceRepository,sourceCommit:a.manifest.sourceCommit,manifestSchemaVersion:a.manifest.schemaVersion,snapshotContentId:a.manifest.snapshotContentId,snapshotSha256:a.manifest.snapshotSha256,snapshotGitTreeSha1:a.manifest.gitRootTreeSha1,previewFingerprint:b.previewFingerprint}).operationId,authenticatedUserId:c.authenticatedUserId,authenticatedLogin:c.authenticatedLogin,targetOwner:c.targetOwner,targetRepo:c.targetRepo,packageName:c.packageName??aA.Au,packageVersion:c.packageVersion,sourceRepository:c.sourceRepository??aG.Ig,sourceCommit:c.sourceCommit,manifestSchemaVersion:c.manifestSchemaVersion,snapshotContentId:c.snapshotContentId,snapshotSha256:c.snapshotSha256,snapshotGitTreeSha1:c.snapshotGitTreeSha1,previewFingerprint:c.previewFingerprint,defaultBranch:c.defaultBranch}}async function bA(a){let b=bz(a.snapshotPreview,{authenticatedUserId:a.user.id,authenticatedLogin:a.user.login,targetOwner:a.user.login,targetRepo:aZ.Zl});if(a.requestedOperationId){let b=await aK(a.cwd);return b&&b.operationId!==a.requestedOperationId?{ok:!1,state:"concurrent-request-recovered",message:"Another provisioning operation is already in progress for this workspace."}:{ok:!0,operationId:a.requestedOperationId,resumedFromPending:!!b,creationPreviewFingerprint:b?.previewFingerprint??null,pending:b}}let c=await aK(a.cwd);if(!c)return{ok:!0,operationId:(0,d.randomUUID)(),resumedFromPending:!1,creationPreviewFingerprint:null,pending:null};let e=aN(c,b);return e.ok?{ok:!0,operationId:c.operationId,resumedFromPending:!0,creationPreviewFingerprint:c.previewFingerprint,pending:c}:{ok:!1,state:"same-name-unmanaged-collision",message:e.reason}}async function bB(a,b,c){if(b===aZ.mg)return{ok:!1,state:"explicit-packaged-repo-legacy-source",message:"Saved harness repo points at the public source repo. Use advanced recovery to adopt a private managed workspace."};let d=aD(b),e=null;if(c){if(!(e=await a.getRepositoryMetadataById(c)))return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repository ID ${c} is missing or inaccessible.`};if(d=aD(`${e.owner}/${e.repo}`),aD(b)!==d&&c!==e.repositoryId)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repo ${b} does not match repository ID ${c}.`}}else{let{owner:b,repo:c}=(0,X.Jj)(d);e=await a.getRepositoryMetadata(b,c)}if(!e)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repo ${b} is missing or inaccessible.`};if(c&&e.repositoryId!==c)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repository ID does not match GitHub metadata for ${d}.`};if(!e.private||"private"!==e.visibility)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repo ${d} must be private in packaged mode.`};if(!e.permissions.admin)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repo ${d} requires admin access.`};let f=await a.readRepositoryFileContent(e.owner,e.repo,aF.wJ,e.defaultBranch);if(!f)return{ok:!1,state:"explicit-packaged-repo-invalid",message:`Saved harness repo ${d} is missing a compatible managed marker.`};let g=(0,aF.Dr)(f);if(!g.ok)return{ok:!1,state:"explicit-packaged-repo-invalid",message:g.reason};let h=(0,aF.qD)(g.marker,d,{repositoryId:e.repositoryId});return h.ok?{ok:!0,repoSlug:d,repositoryId:e.repositoryId,marker:g}:{ok:!1,state:"explicit-packaged-repo-invalid",message:h.reason}}async function bC(a,b,c,d){let e=bv(b.login),{owner:f,repo:g}=(0,X.Jj)(e),h=await a.getRepositoryMetadata(f,g);if(!h)return{kind:"absent"};if(!h.private||"private"!==h.visibility)return{kind:"public-collision"};if(!h.permissions.admin)return{kind:"unmanaged-collision"};let i=await a.readRepositoryFileContent(f,g,aF.wJ,h.defaultBranch);if(i){let a=(0,aF.Dr)(i);if(!a.ok)return{kind:"malformed-marker",reason:a.reason};let b=(0,aF.qD)(a.marker,e,{repositoryId:h.repositoryId});return b.ok?{kind:"valid-managed",repoSlug:e,repositoryId:h.repositoryId}:{kind:"malformed-marker",reason:b.reason}}let j=await aK(c);if(j&&d){let a=aN(j,bz(d,{authenticatedUserId:b.id,authenticatedLogin:b.login,targetOwner:b.login,targetRepo:aZ.Zl}));if(a.ok)return{kind:"snapshot-only-with-pending"};if(!a.ok)return{kind:"unmanaged-collision"}}let k=await a.readRepositoryFileContent(f,g,aZ.Oq,h.defaultBranch);if(k){let a=(0,aZ.eJ)(k);return a.ok?{kind:"snapshot-only-without-pending"}:{kind:"malformed-marker",reason:`Generated repository template identity is invalid: ${a.reason}`}}return{kind:"unmanaged-collision"}}function bD(a){let b=a.snapshotPreview.manifest;return{operationId:a.operationId,authenticatedUserId:a.user.id,authenticatedLogin:a.user.login,packageName:b.packageName,packageVersion:b.packageVersion,sourceRepository:b.sourceRepository,sourceCommit:b.sourceCommit,manifestSchemaVersion:b.schemaVersion,snapshotContentId:b.snapshotContentId,snapshotSha256:b.snapshotSha256,snapshotGitTreeSha1:b.gitRootTreeSha1,targetOwner:a.user.login,targetRepo:aZ.Zl,previewFingerprint:a.previewFingerprint,startedAt:a.pending?.startedAt??new Date().toISOString(),phase:a.phase??a.pending?.phase,repositoryId:a.repositoryId??a.pending?.repositoryId,defaultBranch:a.defaultBranch??a.pending?.defaultBranch,initializedCommitSha:a.initializedCommitSha??a.pending?.initializedCommitSha,snapshotCommitSha:a.snapshotCommitSha??a.pending?.snapshotCommitSha,markerCommitSha:a.markerCommitSha??a.pending?.markerCommitSha}}async function bE(a,b){let{owner:c,repo:d}=(0,X.Jj)(b.repoSlug),e=await a.getRepositoryMetadata(c,d);if(!e)return{ok:!1,message:`Generated harness workspace ${b.repoSlug} is not accessible for marker finalization.`};if(e.repositoryId!==b.repositoryId)return{ok:!1,message:`Generated harness workspace repository ID mismatch for ${b.repoSlug}.`};let f=(0,aF.G0)({repository:b.repoSlug,repositoryId:b.repositoryId,templateIdentity:b.templateIdentity.identity,defaultBranch:b.defaultBranch,sourceHeadSha:b.templateHeadSha,operationId:b.operationId,createdByGithubUserId:b.user.id,createdByLogin:b.user.login,pDevVersion:b.pDevVersion}),g=await a.readRepositoryFileContent(c,d,aF.wJ,b.defaultBranch);if(g){let a=(0,aF.Dr)(g);return a.ok?(0,aF.ok)(a.marker,f)||(0,aF.E5)(a.marker,b.repoSlug,{repositoryId:b.repositoryId})?{ok:!0}:{ok:!1,message:"Existing managed marker belongs to a different operation or repository."}:{ok:!1,message:a.reason}}try{await a.writeRepositoryFile({owner:c,repo:d,path:aF.wJ,branch:b.defaultBranch,message:"Initialize p-dev managed harness workspace marker",content:`${JSON.stringify(f,null,2)}
38
+ `})}catch(a){return{ok:!1,message:a instanceof Error?a.message:"Failed to write managed harness workspace marker."}}return{ok:!0}}async function bF(a,b){let{owner:c,repo:d}=(0,X.Jj)(b),e=await a.getRepositoryMetadata(c,d);if(!e)return{ok:!1,message:`Harness workspace ${b} is not accessible.`};let f=await a.readRepositoryFileContent(c,d,aZ.Oq,e.defaultBranch);if(!f)return{ok:!1,message:"Legacy generated repository template identity is missing."};let g=(0,aZ.eJ)(f);return g.ok?{ok:!0,defaultBranch:e.defaultBranch,repositoryId:e.repositoryId,identity:g}:{ok:!1,message:g.reason}}async function bG(a){let b=(0,aw.Ot)()?"packaged":process.env.P_DEV_RUNTIME_MODE?.trim()?"source":"unknown",c=(0,k.ym)(a.cwd),d=await (0,h.Hn)(c),e=d?.values.GITHUB_DISPATCH_REPOSITORY?.trim(),f=await aK(a.cwd),g={runtimeMode:b,harnessDispatchRepo:e??null,authenticatedLogin:null,verifiedSavedRepo:!1,connectedAutomatically:!1};if(!(0,aw.Ot)()){let c=await az({cwd:a.cwd,explicitRepo:e});if(c)return{...g,harnessDispatchRepo:c.repo,verifiedSavedRepo:!0,eligible:!1,state:"skipped-source-mode",message:"env-local"===c.source?`Using harness workspace ${c.repo} from Step 1 setup.`:`Using harness workspace ${c.repo} detected from git remote.`,recoverable:!1};return{...g,eligible:!1,state:"source"===b?"skipped-source-mode":"skipped-not-packaged",message:"source"===b?"Source mode does not auto-provision a harness workspace.":"Packaged runtime mode is not active.",recoverable:!1}}if(f)return{...g,eligible:!0,state:"repo-created-pending-verification",message:"Harness workspace provisioning is incomplete. Retry Step 1 Continue to resume.",recoverable:!0};if(!e)return{...g,eligible:!0,state:"repo-absent",message:"Packaged workspace provisioning has not completed yet.",recoverable:!0};if(!a.provider)return{...g,eligible:!0,state:"explicit-repo-present",message:`Saved harness workspace ${e} requires server validation.`,recoverable:!0};let i=await a.provider.inspectTokenCapabilities(),j=await bB(a.provider,e,by(d));if(!j.ok)return{...g,eligible:!0,state:j.state,authenticatedLogin:i.login,message:j.message,recoverable:!0};let l=e===bv(i.login)||e===bv(j.marker.marker.createdByLogin??"");return{...g,eligible:!0,state:"verified-and-persisted",harnessDispatchRepo:e,authenticatedLogin:i.login,message:`Connected to validated harness workspace ${e}.`,recoverable:!1,verifiedSavedRepo:!0,connectedAutomatically:l&&!!j.marker.marker.operationId}}async function bH(a){var b,c;let e={creationPreviewFingerprint:null,resumedFromPending:!1,harnessDispatchRepo:null,authenticatedLogin:null,recoverable:!1,willCreateRepository:!1,tokenCapabilities:{tokenType:"unknown",hasRepoScope:!1,hasWorkflowScope:!1,scopeAmbiguous:!0}};if(!(0,aw.Ot)())return{state:"skipped-not-packaged",fingerprint:bu({action:"preview",skipped:!0}),operationId:a.operationId??(0,d.randomUUID)(),message:"Packaged runtime mode is not active.",...e,...bw()};let f=(0,k.ym)(a.cwd),g=await (0,h.Hn)(f),i=g?.values.GITHUB_DISPATCH_REPOSITORY?.trim(),j=(0,av.zL)(),l=await a.provider.inspectTokenCapabilities(),m={login:l.login,tokenType:l.tokenType,oauthScopes:[],hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope},n=(0,aY.Z6)({...m,oauthScopes:l.scopeAmbiguous||"classic"!==l.tokenType?[]:[...l.hasRepoScope?["repo"]:[],...l.hasWorkflowScope?["workflow"]:[]]});if(l.scopeAmbiguous){let b=a.operationId??(0,d.randomUUID)();return{state:"token-scope-ambiguous",fingerprint:bu({action:"preview",operationId:b}),operationId:b,message:n.ok?"Token scope metadata is ambiguous.":n.message,...e,recoverable:!0,harnessDispatchRepo:i??null,authenticatedLogin:l.login,...bw(),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}}}if(!n.ok){let b="fine-grained"===l.tokenType?"token-unsupported":"unknown"===l.tokenType?"token-scope-ambiguous":"token-insufficient",c=a.operationId??(0,d.randomUUID)();return{state:b,fingerprint:bu({action:"preview",operationId:c}),operationId:c,message:n.message,...e,recoverable:!0,harnessDispatchRepo:i??null,authenticatedLogin:l.login,...bw(),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}}}let o=await a.provider.resolveAuthenticatedUser();if(i){let b=a.operationId??(0,d.randomUUID)(),c=await bB(a.provider,i,by(g)),f=bu({action:"preview",operationId:b,authenticatedLogin:o.login,explicitRepo:i,pDevVersion:j});if(!c.ok)return{state:c.state,fingerprint:f,operationId:b,message:c.message,...e,recoverable:!0,harnessDispatchRepo:i,authenticatedLogin:o.login,...bw(),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}};let h=c.marker.marker.createdFromTemplate?.templateContentId??null;return{state:"explicit-repo-present",fingerprint:f,operationId:b,message:`Reconnecting to saved harness workspace ${i}.`,...e,harnessDispatchRepo:i,authenticatedLogin:o.login,...bx(null,h),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}}}let p=await bs(a.moduleUrl??"file:///Users/weston/Code/agentic-product-development-harness/src/setup/harness-repo-provisioning.ts");if(!p.ok){let b=a.operationId??(0,d.randomUUID)();return{state:p.state,fingerprint:bu({action:"preview",operationId:b}),operationId:b,message:p.message,...e,authenticatedLogin:o.login,...bw(),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}}}let q=await bA({cwd:a.cwd,requestedOperationId:a.operationId,user:o,snapshotPreview:p});if(!q.ok)return{state:q.state,fingerprint:bu({action:"preview",conflict:q.message}),operationId:a.operationId??(0,d.randomUUID)(),message:q.message,...e,recoverable:!0,authenticatedLogin:o.login,...bx(p),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}};let{operationId:r,resumedFromPending:s,creationPreviewFingerprint:t}=q,u=bv(o.login),v=await bC(a.provider,o,a.cwd,p),w="snapshot-preview-ready",x=`p-dev will create or reconnect ${u} as your private harness workspace.`,y=!1;switch(v.kind){case"absent":w="repo-absent",y=!0,x=`p-dev will create private harness workspace ${u} from the packaged workspace snapshot.`;break;case"valid-managed":w="valid-existing-managed-repo",x=`Reconnecting to existing managed harness workspace ${u}.`;break;case"public-collision":w="same-name-public-collision",x=`${u} exists but is not private. p-dev will not change it automatically.`;break;case"unmanaged-collision":w="same-name-unmanaged-collision",x=`${u} exists without a compatible managed marker.`;break;case"malformed-marker":w="same-name-malformed-marker",x=v.reason;break;case"snapshot-only-without-pending":w="same-name-snapshot-only-without-pending",x=`${u} looks like an unmanaged generated repo.`;break;case"snapshot-only-with-pending":w="same-name-snapshot-only-with-pending",x=`Resuming snapshot provisioning for ${u}.`}let z=(b={operationId:r,user:o,destination:u,snapshotPreview:p,classification:v.kind,envBaseline:g?.values.GITHUB_DISPATCH_REPOSITORY??"",pDevVersion:j,resumedFromPending:s,creationPreviewFingerprint:t},JSON.stringify({action:aB,operationId:(c=aE({operationId:b.operationId,user:b.user,destination:b.destination,manifest:b.snapshotPreview.manifest,snapshotFingerprint:b.snapshotPreview.fingerprint,classification:b.classification,envBaseline:b.envBaseline,pDevVersion:b.pDevVersion,resumedFromPending:b.resumedFromPending,creationPreviewFingerprint:b.creationPreviewFingerprint})).operationId,authenticatedUserId:c.authenticatedUserId,authenticatedLogin:c.authenticatedLogin,destination:c.destination,packageName:c.packageName,packageVersion:c.packageVersion,sourceRepository:c.sourceRepository,sourceCommit:c.sourceCommit,manifestSchemaVersion:c.manifestSchemaVersion,snapshotFingerprint:c.snapshotFingerprint,snapshotContentId:c.snapshotContentId,snapshotSha256:c.snapshotSha256,snapshotGitTreeSha1:c.snapshotGitTreeSha1,classification:c.classification,envBaseline:c.envBaseline,pDevVersion:c.pDevVersion,resumedFromPending:c.resumedFromPending,creationPreviewFingerprint:c.creationPreviewFingerprint}));return{state:w,fingerprint:z,operationId:r,creationPreviewFingerprint:t,resumedFromPending:s,harnessDispatchRepo:"valid-managed"===v.kind?u:null,authenticatedLogin:o.login,message:x,recoverable:"repo-absent"===w||"valid-existing-managed-repo"===w||"same-name-snapshot-only-with-pending"===w,willCreateRepository:y,...bx(p),tokenCapabilities:{tokenType:l.tokenType,hasRepoScope:l.hasRepoScope,hasWorkflowScope:l.hasWorkflowScope,scopeAmbiguous:l.scopeAmbiguous}}}async function bI(a){return aI((0,k.ym)(a.cwd).cwd,async()=>bJ(a))}async function bJ(a){let b=await bH({cwd:a.cwd,provider:a.provider,operationId:a.operationId,moduleUrl:a.moduleUrl});if(!a.confirmed)return{state:b.state,harnessDispatchRepo:b.harnessDispatchRepo,message:"Confirmation is required before provisioning.",recoverable:!0,persisted:!1};if(b.fingerprint!==a.fingerprint)return{state:"snapshot-preview-stale",harnessDispatchRepo:b.harnessDispatchRepo,message:"Provisioning preview is stale. Retry Step 1 Continue.",recoverable:!0,persisted:!1};if("skipped-not-packaged"===b.state||"token-unsupported"===b.state||"token-insufficient"===b.state||"token-scope-ambiguous"===b.state||"snapshot-unavailable"===b.state||"snapshot-manifest-missing"===b.state||"snapshot-manifest-invalid"===b.state||"snapshot-incompatible"===b.state||"snapshot-tampered"===b.state||"same-name-public-collision"===b.state||"same-name-unmanaged-collision"===b.state||"same-name-malformed-marker"===b.state||"same-name-snapshot-only-without-pending"===b.state||"explicit-packaged-repo-invalid"===b.state||"explicit-packaged-repo-legacy-source"===b.state)return{state:b.state,harnessDispatchRepo:b.harnessDispatchRepo,message:b.message,recoverable:b.recoverable,persisted:!1};let c=au.performance.now(),d=await a.provider.resolveAuthenticatedUser(),e={authenticationMs:bt(c)},f=(0,av.zL)(),g=(0,k.ym)(a.cwd),i=await (0,h.Hn)(g),j=i?.values.GITHUB_DISPATCH_REPOSITORY?.trim();if(j){let b=await bB(a.provider,j,by(i));if(!b.ok)return{state:b.state,harnessDispatchRepo:j,message:b.message,recoverable:!0,persisted:!1};let c=await D({cwd:a.cwd,githubDispatchRepository:b.repoSlug,githubDispatchRepositoryId:b.repositoryId});return"changed"!==c.outcome&&"skipped"!==c.outcome?{state:"created-but-persistence-failed",harnessDispatchRepo:b.repoSlug,message:c.reason??"Failed to persist GITHUB_DISPATCH_REPOSITORY.",recoverable:!0,persisted:!1}:(await aM(a.cwd),{state:"verified-and-persisted",harnessDispatchRepo:b.repoSlug,message:`Connected to saved harness workspace ${b.repoSlug}.`,recoverable:!1,persisted:!0})}let l=await bs(a.moduleUrl??"file:///Users/weston/Code/agentic-product-development-harness/src/setup/harness-repo-provisioning.ts");if(!l.ok)return{state:l.state,harnessDispatchRepo:null,message:l.message,recoverable:!1,persisted:!1};let m=await bC(a.provider,d,a.cwd,l),n=aE({operationId:a.operationId,user:d,destination:bv(d.login),manifest:l.manifest,snapshotFingerprint:l.fingerprint,classification:m.kind,envBaseline:i?.values.GITHUB_DISPATCH_REPOSITORY??"",pDevVersion:f,resumedFromPending:b.resumedFromPending,creationPreviewFingerprint:b.creationPreviewFingerprint}),o=function(a){let b=function(a){let b;try{b=JSON.parse(a)}catch{return null}if(!b||"object"!=typeof b)return null;let c=b;return c.action===aB&&"string"==typeof c.operationId&&c.operationId.trim()&&"number"==typeof c.authenticatedUserId&&Number.isFinite(c.authenticatedUserId)&&"string"==typeof c.authenticatedLogin&&c.authenticatedLogin.trim()&&"string"==typeof c.destination&&c.packageName===aA.Au&&"string"==typeof c.packageVersion&&"string"==typeof c.sourceRepository&&"string"==typeof c.sourceCommit&&"number"==typeof c.manifestSchemaVersion&&"string"==typeof c.snapshotFingerprint&&"string"==typeof c.snapshotContentId&&"string"==typeof c.snapshotSha256&&"string"==typeof c.snapshotGitTreeSha1&&"string"==typeof c.classification&&"string"==typeof c.envBaseline&&"string"==typeof c.pDevVersion&&"boolean"==typeof c.resumedFromPending&&(null===c.creationPreviewFingerprint||"string"==typeof c.creationPreviewFingerprint)?{operationId:c.operationId.trim(),authenticatedUserId:c.authenticatedUserId,authenticatedLogin:aC(c.authenticatedLogin),destination:aD(c.destination),packageName:aA.Au,packageVersion:String(c.packageVersion).trim(),sourceRepository:String(c.sourceRepository),sourceCommit:String(c.sourceCommit),manifestSchemaVersion:c.manifestSchemaVersion,snapshotFingerprint:String(c.snapshotFingerprint),snapshotContentId:String(c.snapshotContentId).trim(),snapshotSha256:String(c.snapshotSha256),snapshotGitTreeSha1:String(c.snapshotGitTreeSha1),classification:c.classification,envBaseline:aD(String(c.envBaseline)),pDevVersion:String(c.pDevVersion).trim(),resumedFromPending:c.resumedFromPending,creationPreviewFingerprint:null===c.creationPreviewFingerprint?null:String(c.creationPreviewFingerprint)}:null}(a.submittedFingerprint);if(!b)return{ok:!1,mismatchedField:"operationId",message:"Provisioning preview fingerprint is invalid. Retry Step 1 Continue."};var c=a.currentContext;for(let[a,d,e]of[["operationId",b.operationId,c.operationId],["authenticatedUserId",b.authenticatedUserId,c.authenticatedUserId],["authenticatedLogin",b.authenticatedLogin,c.authenticatedLogin],["destination",b.destination,c.destination],["packageName",b.packageName,c.packageName],["packageVersion",b.packageVersion,c.packageVersion],["sourceRepository",b.sourceRepository,c.sourceRepository],["sourceCommit",b.sourceCommit,c.sourceCommit],["manifestSchemaVersion",b.manifestSchemaVersion,c.manifestSchemaVersion],["snapshotFingerprint",b.snapshotFingerprint,c.snapshotFingerprint],["snapshotContentId",b.snapshotContentId,c.snapshotContentId],["snapshotSha256",b.snapshotSha256,c.snapshotSha256],["snapshotGitTreeSha1",b.snapshotGitTreeSha1,c.snapshotGitTreeSha1],["classification",b.classification,c.classification],["envBaseline",b.envBaseline,c.envBaseline],["pDevVersion",b.pDevVersion,c.pDevVersion],["resumedFromPending",b.resumedFromPending,c.resumedFromPending],["creationPreviewFingerprint",b.creationPreviewFingerprint,c.creationPreviewFingerprint]]){let b=d!==e?{ok:!1,mismatchedField:a,message:`Provisioning preview is stale (${a} changed). Retry Step 1 Continue.`}:null;if(b)return b}return{ok:!0}}({submittedFingerprint:a.fingerprint,currentContext:n});if(!o.ok)return{state:"snapshot-preview-stale",harnessDispatchRepo:null,message:o.message,recoverable:!0,persisted:!1};let p=bv(d.login),q="valid-managed"===m.kind?m.repositoryId:void 0,r=await aK(a.cwd);if(b.resumedFromPending){if(!r||!b.creationPreviewFingerprint)return{state:"same-name-snapshot-only-without-pending",harnessDispatchRepo:bv(d.login),message:"Matching local pending provisioning evidence is required to resume.",recoverable:!0,persisted:!1};let c=aN(r,bz(l,{operationId:a.operationId,authenticatedUserId:d.id,authenticatedLogin:d.login,targetOwner:d.login,targetRepo:aZ.Zl,previewFingerprint:b.creationPreviewFingerprint}));if(!c.ok)return{state:"same-name-unmanaged-collision",harnessDispatchRepo:bv(d.login),message:c.reason,recoverable:!0,persisted:!1}}else if(r&&"valid-existing-managed-repo"!==b.state&&"valid-managed"!==m.kind)return{state:"concurrent-request-recovered",harnessDispatchRepo:null,message:"Another provisioning operation is already in progress for this workspace.",recoverable:!0,persisted:!1};let s=b.creationPreviewFingerprint??a.fingerprint,t=r,u=!1;if("valid-managed"===m.kind)p=m.repoSlug;else{if("absent"!==m.kind&&"snapshot-only-with-pending"!==m.kind)return{state:b.state,harnessDispatchRepo:b.harnessDispatchRepo,message:b.message,recoverable:b.recoverable,persisted:!1};let c="snapshot-only-with-pending"===m.kind?await bF(a.provider,p):null;if("snapshot-only-with-pending"===m.kind&&c?.ok){let{owner:b,repo:e}=(0,X.Jj)(p),g=await a.provider.getRepositoryDefaultBranchHead(b,e,c.defaultBranch),h=await bE(a.provider,{repoSlug:p,repositoryId:c.repositoryId,defaultBranch:c.defaultBranch,templateIdentity:c.identity,templateHeadSha:g,operationId:a.operationId,user:d,pDevVersion:f});if(!h.ok)return{state:"marker-write-pending",harnessDispatchRepo:p,message:h.message,recoverable:!0,persisted:!1};q=c.repositoryId}else{let c;"absent"!==m.kind||b.resumedFromPending||(await aL(bD({operationId:a.operationId,user:d,snapshotPreview:l,previewFingerprint:s}),a.cwd),t=await aK(a.cwd));try{let b,f=t?.startedAt??new Date().toISOString(),g=new Date().toISOString();(c=await bi({provider:a.provider,user:d,repoName:aZ.Zl,description:aZ.JJ,snapshotRoot:l.snapshotRoot,manifest:l.manifest,packageVersion:l.packageVersion,operationId:a.operationId,pending:t,onProgress:c=>{c.phase!==b&&(g=new Date().toISOString(),b=c.phase),aS({operationId:a.operationId,phase:c.phase,phaseStartedAt:g,startedAt:f,completed:c.completed??c.uploadedBlobs,total:c.total??c.totalBlobs,rateLimitPauseSeconds:c.rateLimitPauseSeconds,lastSafeCheckpoint:c.lastSafeCheckpoint??t?.phase},a.cwd).catch(()=>{})},onCheckpoint:async c=>{await aL(bD({operationId:a.operationId,user:d,snapshotPreview:l,previewFingerprint:s,pending:t,phase:c.phase,repositoryId:c.repositoryId,defaultBranch:c.defaultBranch,initializedCommitSha:c.initializedCommitSha,snapshotCommitSha:c.snapshotCommitSha,markerCommitSha:c.markerCommitSha}),a.cwd),t=await aK(a.cwd),g=new Date().toISOString(),b=c.phase,await aS({operationId:a.operationId,phase:c.phase,phaseStartedAt:g,startedAt:f,lastSafeCheckpoint:c.phase},a.cwd)}})).ok&&(e.snapshotProvisioning=c.timings)}catch(e){let b=e instanceof Error?e.message:"Repository provisioning failed unexpectedly.";if(e instanceof a$.gk&&"marker-commit-failed"===e.code){let{owner:c,repo:e}=(0,X.Jj)(bv(d.login)),f=await a.provider.getRepositoryMetadata(c,e);if(f){let b=await a.provider.getRepositoryDefaultBranchHead(c,e,f.defaultBranch),g=t?.initializedCommitSha;try{let d=await a.provider.getGitCommit(c,e,b);g=d.parents[0]?.sha??g}catch{}await aL(bD({operationId:a.operationId,user:d,snapshotPreview:l,previewFingerprint:s,pending:t,phase:"marker-pending",repositoryId:f.repositoryId,initializedCommitSha:g,snapshotCommitSha:b}),a.cwd)}return{state:"marker-write-pending",harnessDispatchRepo:bv(d.login),message:b,recoverable:!0,persisted:!1}}let c=await bC(a.provider,d,a.cwd,l);if("valid-managed"===c.kind||"snapshot-only-with-pending"===c.kind)return{state:"repo-created-pending-verification",harnessDispatchRepo:bv(d.login),message:b,recoverable:!0,persisted:!1};if(!(e instanceof ax.OS)||422!==e.status)return{state:"api-timeout-unknown",harnessDispatchRepo:bv(d.login),message:b,recoverable:!0,persisted:!1};if("absent"===(await bC(a.provider,d,a.cwd,l)).kind)return{state:"api-timeout-unknown",harnessDispatchRepo:bv(d.login),message:"Repository creation returned an ambiguous result. Retry Step 1 Continue.",recoverable:!0,persisted:!1};return{state:"repo-created-pending-verification",harnessDispatchRepo:bv(d.login),message:b,recoverable:!0,persisted:!1}}if(c){if(!c.ok){let b="marker-commit-failed"===c.code||"description-finalization-failed"===c.code||t?.phase==="marker-pending"||t?.phase==="description-pending"||!!t?.snapshotCommitSha,e="remote-phase-timeout"===c.code||"workspace-upload-timeout"===c.code,f=t?.phase??"repository-created",g=aO(f);return{state:e?"repo-created-pending-verification":b?"marker-write-pending":c.recoverable?"repo-created-pending-verification":"api-timeout-unknown",harnessDispatchRepo:bv(d.login),message:e?`${c.message} Operation ID: ${a.operationId}. Retry will resume or reconcile from the last safe checkpoint.`:c.message,recoverable:c.recoverable,persisted:!1,operationId:a.operationId,phase:f,uiPhaseLabel:aP(g)}}p=c.fullName,q=c.repositoryId,u=!0,e.snapshotProvisioning=c.timings,await aL(bD({operationId:a.operationId,user:d,snapshotPreview:l,previewFingerprint:s,pending:t,phase:"persistence-pending",repositoryId:c.repositoryId,defaultBranch:c.defaultBranch,initializedCommitSha:c.initializedCommitSha,snapshotCommitSha:c.snapshotCommitSha,markerCommitSha:c.markerCommitSha}),a.cwd)}}}if(void 0===q){let{owner:b,repo:c}=(0,X.Jj)(p),d=await a.provider.getRepositoryMetadata(b,c);if(!d)return{state:"repo-created-pending-verification",harnessDispatchRepo:p,message:`Harness workspace ${p} is not accessible for verification.`,recoverable:!0,persisted:!1};q=d.repositoryId}if(u){let b=au.performance.now(),c=await bj({provider:a.provider,repoSlug:p,repositoryId:q,manifest:l.manifest});if(e.remoteVerificationMs=bt(b),!c.ok)return{state:"repo-created-pending-verification",harnessDispatchRepo:p,message:c.message,recoverable:!0,persisted:!1,timings:e}}let v=au.performance.now(),w=await D({cwd:a.cwd,githubDispatchRepository:p,githubDispatchRepositoryId:q});return"changed"!==w.outcome&&"skipped"!==w.outcome?(e.localPersistenceMs=bt(v),{state:"created-but-persistence-failed",harnessDispatchRepo:p,message:w.reason??"Failed to persist GITHUB_DISPATCH_REPOSITORY.",recoverable:!0,persisted:!1,timings:e}):(await aM(a.cwd),await aU(a.cwd),e.localPersistenceMs=bt(v),await aX({cwd:a.cwd,operationId:a.operationId,outcome:"success",timings:e}).catch(()=>{}),{state:"verified-and-persisted",harnessDispatchRepo:p,message:`Private harness workspace ${p} is connected.`,recoverable:!1,persisted:!0,operationId:a.operationId,phase:"persistence-pending",uiPhaseLabel:aP("saving-configuration"),timings:e})}var bK=c(2581),bL=c(40763);let bM=new Set(["token-unavailable","token-invalid","token-unsupported","token-scope-ambiguous","token-insufficient"]),bN=new Set(["same-name-public-collision","same-name-unmanaged-collision","same-name-malformed-marker"]),bO=new Set(["snapshot-unavailable","snapshot-manifest-missing","snapshot-manifest-invalid","snapshot-incompatible","snapshot-tampered","snapshot-preview-stale"]),bP=new Set(["created-but-persistence-failed"]);function bQ(a){let b=bM.has(a)?"auth":bN.has(a)?"permission":bO.has(a)?"snapshot_validation":bP.has(a)?"local_persistence":a.includes("rate-limit")?"rate_limit":a.includes("network")?"network":a.includes("conflict")?"conflict":"unknown";return"validation"===b||"unexpected"===b?"unknown":b}function bR(a){return"explicit-repo-present"!==a&&"explicit-packaged-repo-invalid"!==a&&"explicit-packaged-repo-legacy-source"!==a&&"snapshot-preview-ready"!==a&&"repo-absent"!==a&&"valid-existing-managed-repo"!==a&&"skipped-not-packaged"!==a&&"skipped-source-mode"!==a}function bS(a){return`harness_provisioning_${a.replace(/-/g,"_")}`}var bT=c(15115),bU=c(76263),bV=c(79123),bW=c(86143);function bX(a,b){return(0,j.h4)(a,b)}async function bY(a){let b=[],c=[],d=(0,j.Gn)(a.operatorInput);for(let e of a.secretWritePlan){if("skip"===e.action){c.push(e.name);continue}if("HARNESS_CONFIG_JSON_B64"===e.name){let{bytes:c}=await (0,bU.bD)(a.cwd),f=(0,bU.Uw)(c);d.push(f),b.push({name:e.name,value:f});continue}let f="LINEAR_API_KEY"===e.name?a.operatorInput?.linearApiKey:"CURSOR_API_KEY"===e.name?a.operatorInput?.cursorApiKey:a.operatorInput?.githubToken;if(!f?.trim()){c.push(e.name);continue}b.push({name:e.name,value:f.trim()})}return{requests:b,skippedSecretNames:c,knownSecrets:d}}async function bZ(a){let b,c=await (0,E.z8)({cwd:a.cwd,manualRepo:a.manualHarnessDispatchRepo}),d=(0,E.OW)(c),e="unknown";a.provider&&c.resolved&&(e=await a.provider.checkHarnessRepoAccess(d),b=await a.provider.listHarnessSecretStatuses(d));let f=await (0,bU.AW)({cwd:a.cwd,operatorInput:a.operatorInput,manualHarnessDispatchRepo:a.manualHarnessDispatchRepo,secretStatuses:b,repoAccess:e}),g=(0,j.Gn)(a.operatorInput),h=f.manualInstructions.map(a=>bX(a,g));return{actionId:F.PN.previewHarnessSecrets.id,harnessDispatchRepo:d,harnessDispatchRepoResolved:c.resolved,harnessDispatchRepoSource:c.source,repoAccess:e,secretStatuses:b??f.secretWritePlan.map(a=>({name:a.name,status:"unknown"})),secretWritePlan:f.secretWritePlan,secretKeyNames:f.secretWritePlan.filter(a=>"skip"!==a.action).map(a=>a.name),fingerprint:f.fingerprint,permission:F.PN.previewHarnessSecrets.permission,manualInstructions:h,validationError:f.validationError?bX(f.validationError,g):void 0}}async function b$(a){(0,F.L6)(a.confirmed),(0,F.xp)(F.PN.applyHarnessSecrets.permission.scope,g.P.remoteSecretWrite.scope);let b=await bZ(a);if((0,F.Me)(a.fingerprint,b.fingerprint),b.validationError)throw Error(b.validationError);if(!a.provider)throw Error("GitHub token is required for remote harness secret writes");if(!b.harnessDispatchRepoResolved)throw Error("Harness dispatch repo must be resolved before applying secrets");let{requests:d,skippedSecretNames:e,knownSecrets:f}=await bY({cwd:a.cwd,operatorInput:a.operatorInput,secretWritePlan:b.secretWritePlan});if(0===d.length)throw Error("No harness repo Actions secrets are ready to write");try{let g=await a.provider.writeHarnessSecrets(b.harnessDispatchRepo,d),h={actionId:F.PN.applyHarnessSecrets.id,harnessDispatchRepo:b.harnessDispatchRepo,writtenSecrets:g,skippedSecretNames:e,fingerprint:b.fingerprint,permission:F.PN.applyHarnessSecrets.permission},i=JSON.stringify(h);for(let a of f)if(i.includes(a))throw Error("Remote apply result leaked secret material");if(g.some(a=>"HARNESS_CONFIG_JSON_B64"===a.name&&("created"===a.status||"updated"===a.status))){let{hash:d}=await (0,bU.bD)(a.cwd),{HARNESS_CONFIG_FINGERPRINT_VARIABLE:e}=await Promise.resolve().then(c.bind(c,67289));if(!a.provider.writeHarnessVariables)throw Error("GitHub provider must support repository variable writes for HARNESS_CONFIG_FINGERPRINT");await a.provider.writeHarnessVariables(b.harnessDispatchRepo,[{name:e,value:d}]);try{await (0,bV.V)({configFingerprint:d,harnessRepository:b.harnessDispatchRepo,syncedAt:new Date().toISOString()},a.cwd)}catch{}}return h}catch(a){throw Error((0,X.s7)(a))}}async function b_(a){let b,c=await (0,E.z8)({cwd:a.cwd,manualRepo:a.manualHarnessDispatchRepo}),d=(0,bW.g1)({repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,productionBranch:a.productionBranch,harnessDispatchRepo:c}),e=d.plan.workflowStatus,f="unknown";if(a.provider&&"<invalid-target-repo>"!==d.plan.targetRepoSlug){let c=await a.provider.checkTargetWorkflowStatus({targetRepoSlug:d.plan.targetRepoSlug,workflowPath:d.plan.workflowPath,intendedWorkflowContent:d.workflowContent,productionBranch:a.productionBranch});e=c.workflowStatus,f=c.repoAccess,b=c.productionBranchSha}let g=(0,bW.g1)({repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,productionBranch:a.productionBranch,harnessDispatchRepo:c,workflowStatus:e,productionBranchSha:b});return{actionId:F.PN.previewTargetWorkflowPr.id,plan:g.plan,repoAccess:f,workflowPreviewSummary:g.workflowPreviewSummary,fingerprint:g.fingerprint,permission:F.PN.previewTargetWorkflowPr.permission,manualInstructions:g.manualInstructions,validationError:g.validationError}}async function b0(a){(0,F.L6)(a.confirmed),(0,F.xp)(F.PN.applyTargetWorkflowPr.permission.scope,g.P.remoteRepoWrite.scope);let b=await b_(a);if((0,F.Me)(a.fingerprint,b.fingerprint),b.validationError)throw Error(b.validationError);if(!1!==b.plan.directProductionBranchWrite)throw Error("Direct production branch writes are not allowed");if(!a.provider)throw Error("GitHub token is required for target workflow PR install");try{let c=await a.provider.applyTargetWorkflowPr({targetRepoSlug:b.plan.targetRepoSlug,productionBranch:b.plan.productionBranch,branchName:b.plan.branchName,workflowPath:b.plan.workflowPath,workflowContent:(await (0,bW.g1)({repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,productionBranch:a.productionBranch,harnessDispatchRepo:await (0,E.z8)({cwd:a.cwd,manualRepo:a.manualHarnessDispatchRepo}),workflowStatus:b.plan.workflowStatus})).workflowContent,prTitle:b.plan.prTitle,prBody:b.plan.prBody});return{actionId:F.PN.applyTargetWorkflowPr.id,harnessDispatchRepo:b.plan.harnessDispatchRepo,repoConfigId:b.plan.repoConfigId,outcome:c.outcome,branchName:c.branchName,prUrl:c.prUrl,directProductionBranchWrite:!1,fingerprint:b.fingerprint,permission:F.PN.applyTargetWorkflowPr.permission}}catch(a){throw Error((0,X.tE)(a))}}var b1=c(3811);let b2=/pdh-smoke-harness-/i,b3=/pdh-smoke-target-/i;function b4(a){return b3.test(a.trim())}async function b5(a){let b,c,d=a?.cwd,e=await (0,b1.P)({cwd:d}),f=await (0,E.z8)({cwd:d,manualRepo:a?.manualHarnessDispatchRepo}),g=(0,E.OW)(f),h="unknown",i=[];a?.provider&&f.resolved?(h=await a.provider.checkHarnessRepoAccess(g),i=await a.provider.listHarnessSecretStatuses(g)):i=(await (0,bU.AW)({cwd:d,manualHarnessDispatchRepo:a?.manualHarnessDispatchRepo})).secretWritePlan.map(a=>({name:a.name,status:"unknown"}));let j=[];try{let e=await (0,I.rL)({baseDir:d});for(let d of(b=e.config.repos.map(a=>({id:a.id,targetRepo:a.targetRepo})),c=e.config.allowedTargetRepos,e.config.repos)){let b=(0,bW.g1)({repoConfigId:d.id,targetRepo:d.targetRepo,productionBranch:d.productionBranch??"main",harnessDispatchRepo:f}),c="unknown",e=b.plan.workflowStatus;if(a?.provider&&"<invalid-target-repo>"!==b.plan.targetRepoSlug){let d=await a.provider.checkTargetWorkflowStatus({targetRepoSlug:b.plan.targetRepoSlug,workflowPath:b.plan.workflowPath,intendedWorkflowContent:b.workflowContent,productionBranch:b.plan.productionBranch});c=d.repoAccess,e=d.workflowStatus}j.push({repoConfigId:d.id,targetRepo:d.targetRepo,productionBranch:d.productionBranch??"main",repoAccess:c,workflowStatus:e,harnessDispatchRepo:g})}}catch{}let k=function(a){let b=function(a){var b;let c=[];a.harnessDispatchRepo&&(b=a.harnessDispatchRepo,b2.test(b.trim()))&&c.push({kind:"harness-dispatch",value:a.harnessDispatchRepo,source:"GITHUB_DISPATCH_REPOSITORY"});let d=a.configSummary?.repos??a.targetRepos?.map(a=>({id:a.id,targetRepo:a.targetRepo,baseBranch:"main",productionBranch:"main"}))??[],e=a.configSummary?.allowedTargetRepos??a.allowedTargetRepos??[];for(let a of d)b4(a.targetRepo)&&c.push({kind:"target-repo",value:a.targetRepo,source:`repos[].targetRepo (${a.id})`});for(let a of e)b4(a)&&c.push({kind:"allowed-target-repo",value:a,source:"allowedTargetRepos[]"});return c}(a),c=a.gitRemoteOriginUrl?(0,ay.e)(a.gitRemoteOriginUrl)??void 0:void 0,d=b.find(a=>"harness-dispatch"===a.kind)?.value,e=[...new Set(b.filter(a=>"target-repo"===a.kind||"allowed-target-repo"===a.kind).map(a=>a.value))];return{hasStaleConfig:b.length>0,findings:b,staleHarnessDispatchRepo:d,staleTargetRepos:e,suggestedHarnessDispatchRepo:c}}({harnessDispatchRepo:g,gitRemoteOriginUrl:await (0,E.vE)(d),targetRepos:b,allowedTargetRepos:c});return{githubTokenConfigured:!!e,harnessDispatchRepo:g,harnessDispatchRepoResolved:f.resolved,harnessDispatchRepoSource:f.source,harnessRepoAccess:h,harnessSecretStatuses:i,targetRepos:j,staleSmokeDiagnostics:k}}var b6=c(71512),b7=c(16589);let b8=new Set(["failure","cancelled","timed_out","action_required"]),b9=new Set(["neutral","skipped","success"]);var ca=c(95203),cb=c(73928);function cc(a){let b=a.state.toLowerCase(),c=null,d="completed";return"success"===b?c="success":"pending"===b?(c=null,d="queued"):c="failure"===b||"error"===b?"failure":b,{name:a.context,status:d,conclusion:c,detailsUrl:a.target_url}}async function cd(a,b,c){let d=await ce(a,b,c);if(d.merged)return d;if("open"!==d.state)throw Error(`pr_closed: PR ${d.url} is closed but not merged`);return d}async function ce(a,b,c){let d;if(!(0,cb.rc)(b.repoUrl,c))throw Error(`wrong_target_repo: PR repo ${b.repoUrl} does not match expected ${c}`);try{d=await a.getPullRequest(b.owner,b.repo,b.pullNumber)}catch(a){throw a instanceof ax.OS&&a.status,a}let e=[];d.merged||(e=await a.getPullRequestFiles(b.owner,b.repo,b.pullNumber));let f=d.head.sha,g=null,h=[];try{h=(g=(await a.getCheckRunsForRef(b.owner,b.repo,f)).check_runs??[]).map(a=>({name:a.name,status:a.status,conclusion:a.conclusion,detailsUrl:a.details_url}))}catch{g=null,h=[]}if(0===h.length)try{let c=await a.getCombinedStatusForRef(b.owner,b.repo,f);h=function(a){if(a.statuses.length>0)return a.statuses.map(cc);let b=a.state.toLowerCase();return"pending"===b?[{name:"combined-status",status:"queued",conclusion:null,detailsUrl:null}]:[{name:"combined-status",status:"completed",conclusion:"success"===b?"success":"failure",detailsUrl:null}]}(c)}catch{}let i=(await a.getIssueComments(b.owner,b.repo,b.pullNumber)).map(a=>({author:a.user?.login??"unknown",body:a.body,createdAt:a.created_at})),j=e.map(a=>({path:a.filename,status:a.status}));return{title:d.title,url:d.html_url,branch:d.head.ref,headSha:d.head.sha,baseBranch:d.base.ref,state:d.state,merged:d.merged,isDraft:!0===d.draft,mergeable:d.mergeable??null,mergeableState:d.mergeable_state??null,rebaseable:d.rebaseable??null,mergeCommitSha:d.merge_commit_sha,mergedAt:d.merged_at,repoUrl:b.repoUrl,changedFiles:j,checks:h,checkSummary:function(a){if(0===a.length)return"No GitHub check runs reported for the PR head commit.";let b=a.filter(a=>"success"===a.conclusion).length,c=a.filter(a=>"failure"===a.conclusion||"cancelled"===a.conclusion).length,d=a.filter(a=>"completed"!==a.status||null===a.conclusion).length,e=[`- Passed: ${b}`,`- Failed: ${c}`,`- Pending/unknown: ${d}`];for(let b of a.filter(a=>"failure"===a.conclusion).slice(0,5))e.push(`- Failed check: ${b.name}${b.detailsUrl?` (${b.detailsUrl})`:""}`);return e.join("\n")}(h),comments:i,rawChecks:g}}function cf(a){let b=a.trim().match(/^https:\/\/github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/pull\/(\d+)\/?$/);if(!b)return null;let c=b[1],d=b[2];return{owner:c,repo:d,pullNumber:Number.parseInt(b[3],10),repoUrl:`https://github.com/${c}/${d}`}}var cg=c(92116),ch=c(55565),ci=c(44297);function cj(a){return`<!-- p-dev-workflow-install:${a} -->`}async function ck(a){let b,[c,d]=a.targetRepoSlug.split("/");try{b=await a.client.getBranchRef(c,d,a.branchName)}catch(a){if(a instanceof ax.OS&&404===a.status)return!1;throw a}let e=await a.client.getBranchRef(c,d,a.productionBranch);if(b.object.sha===e.object.sha)return!1;let f=await a.client.compareCommits(c,d,a.productionBranch,a.branchName);if("ahead"!==f.status||1!==f.ahead_by)return!1;let g=f.files??[];if(1!==g.length||g[0]?.filename!==a.workflowPath)return!1;let h=await a.client.getRepositoryContent(c,d,a.workflowPath,a.branchName);if(!h)return!1;let i=a.client.decodeRepositoryContent(h);return"present"===(0,bW.DR)(i,a.intendedWorkflowContent)}async function cl(a,b,c,d){try{return(await a.getBranchRef(b,c,d)).object.sha}catch(a){if(a instanceof ax.OS&&404===a.status)return null;throw a}}async function cm(a){let b=await a.client.getGitCommit(a.owner,a.repo,a.productionSha),c=await a.client.createGitBlob({owner:a.owner,repo:a.repo,content:Buffer.from(a.workflowContent,"utf8")}),d=await a.client.createGitTree({owner:a.owner,repo:a.repo,baseTree:b.tree.sha,tree:[{path:a.workflowPath,mode:"100644",type:"blob",sha:c.sha}]}),e=await a.client.createGitCommit({owner:a.owner,repo:a.repo,message:a.commitMessage,tree:d.sha,parents:[a.productionSha]});if(e.parents[0]?.sha!==a.productionSha)throw Error("Install branch recovery commit parent does not match production head.");if(e.tree.sha!==d.sha)throw Error("Install branch recovery commit tree does not match constructed tree.");let f=(await a.client.compareCommits(a.owner,a.repo,a.productionSha,e.sha)).files??[];if(1!==f.length||f[0]?.filename!==a.workflowPath)throw Error("Install branch recovery commit must change exactly the workflow path.");return{commitSha:e.sha,treeSha:d.sha}}async function cn(a){let b=await a.client.getBranchRef(a.owner,a.repo,a.branchName);if(b.object.sha!==a.expectedHeadSha)throw Error(`Install branch head mismatch after update (expected ${a.expectedHeadSha}, got ${b.object.sha}).`);if(b.object.sha===a.productionSha)throw Error("Install branch head must differ from production after recovery.");let c=await a.client.getGitCommit(a.owner,a.repo,b.object.sha);if(c.parents[0]?.sha!==a.productionSha)throw Error("Install branch commit parent must be current production head.");let d=(await a.client.compareCommits(a.owner,a.repo,a.productionBranch,a.branchName)).files??[];if(1!==d.length||d[0]?.filename!==a.workflowPath)throw Error("Install branch must differ from production by exactly the workflow path.");let e=await a.client.getRepositoryContent(a.owner,a.repo,a.workflowPath,a.branchName);if(!e)throw Error("Install branch is missing the intended workflow file.");let f=a.client.decodeRepositoryContent(e);if("present"!==(0,bW.DR)(f,a.workflowContent))throw Error("Install branch workflow content does not match the intended workflow.")}async function co(a){let b,[c,d]=a.targetRepoSlug.split("/");if(!a.branchName.startsWith("harness/setup-production-sync-"))return{recovered:!1,reason:"Force update refused: branch is not a reserved install branch."};let e=(await a.client.getBranchRef(c,d,a.productionBranch)).object.sha,f=void 0!==a.expectedReservedBranchHeadSha?a.expectedReservedBranchHeadSha:await cl(a.client,c,d,a.branchName),g=a.commitMessage??(0,bW.Hh)();try{b=(await cm({client:a.client,owner:c,repo:d,productionSha:e,workflowPath:a.workflowPath,workflowContent:a.workflowContent,commitMessage:g})).commitSha}catch(a){return{recovered:!1,reason:a instanceof Error?a.message:"Failed to build verified workflow install commit."}}let h=await cl(a.client,c,d,a.branchName);if(h!==f)return{recovered:!1,needsReconciliation:!0,reason:"Reserved install branch head changed during recovery; reconciling instead of overwriting.",observedHeadSha:h??void 0};null===h?await a.client.createGitRef(c,d,a.branchName,b):await a.client.updateGitRef({owner:c,repo:d,ref:a.branchName,sha:b,force:!0});try{await cn({client:a.client,owner:c,repo:d,productionBranch:a.productionBranch,productionSha:e,branchName:a.branchName,expectedHeadSha:b,workflowPath:a.workflowPath,workflowContent:a.workflowContent})}catch(a){return{recovered:!1,reason:a instanceof Error?a.message:"Install branch postcondition verification failed."}}return{recovered:!0,headSha:b,productionSha:e,commitSha:b}}async function cp(a,b){let[c,d]=b.targetRepoSlug.split("/");return(await a.listPullRequests(c,d,{state:"open",base:b.productionBranch,head:`${c}:${b.branchName}`})).length}async function cq(a){let[b,c]=a.targetRepoSlug.split("/"),d=await a.client.listPullRequests(b,c,{state:a.state??"open",base:a.productionBranch,head:`${b}:${a.branchName}`,sort:"updated",direction:"desc"}),e=cj(a.repoConfigId);for(let b of d)if((b.body??"").includes(e)&&b.head.ref===a.branchName&&b.base.ref===a.productionBranch)return{number:b.number,html_url:b.html_url,headSha:b.head.sha,state:b.state,body:b.body};return null}async function cr(a){let[b,c]=a.targetRepoSlug.split("/"),d=await a.client.listPullRequests(b,c,{state:"open",base:a.productionBranch,head:`${b}:${a.branchName}`}),e=d.find(b=>{var c,d;return b.head.ref===a.branchName&&b.base.ref===a.productionBranch&&b.head.sha===a.verifiedHeadSha&&(c=b.body,d=a.repoConfigId,!!c&&c.includes(cj(d)))});if(e)return{prNumber:e.number,prUrl:e.html_url,created:!1};let f=d.find(b=>b.head.ref===a.branchName&&b.base.ref===a.productionBranch&&b.head.sha===a.verifiedHeadSha);if(f)return{prNumber:f.number,prUrl:f.html_url,created:!1};let g=await cq({client:a.client,targetRepoSlug:a.targetRepoSlug,productionBranch:a.productionBranch,branchName:a.branchName,repoConfigId:a.repoConfigId,state:"closed"}),h=a.prBody.includes(cj(a.repoConfigId))?a.prBody:`${a.prBody}
39
+
40
+ ${cj(a.repoConfigId)}
41
+ `,i=await a.client.createPullRequest({owner:b,repo:c,title:a.prTitle,head:a.branchName,base:a.productionBranch,body:h});return{prNumber:i.number,prUrl:i.html_url,created:!0,supersededPrNumber:g?.number}}let cs=new Set,ct=new Map;async function cu(a,b){if(cs.has(a)){var c;let b=ct.get(a);if(b)return{result:b,lockContended:!0};await (c=a,cs.has(c)?new Promise(a=>{let b=cv.get(c)??[];b.push(a),cv.set(c,b)}):Promise.resolve());let d=ct.get(a);if(d)return{result:d,lockContended:!0}}cs.add(a);try{let c=await b();return"object"==typeof c&&null!==c&&"lifecycle"in c&&(ct.set(a,c),"complete"===c.lifecycle&&ct.delete(a)),{result:c,lockContended:!1}}finally{cs.delete(a),function(a){let b=cv.get(a)??[];for(let c of(cv.delete(a),b))c()}(a)}}let cv=new Map;function cw(a,b){let c=a.replace(/[^a-zA-Z0-9._-]/g,"_");return ag().join(function(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"target-workflow-finalization")}(b),`${c}.json`)}async function cx(a,b){var c,d;let e=Date.parse(a.startedAt),g=a.elapsedMs??(Number.isFinite(e)?Math.max(0,Date.now()-e):0),h={schemaVersion:a.schemaVersion??1,operationId:a.operationId,repoConfigId:a.repoConfigId,inputFingerprint:a.inputFingerprint,intendedWorkflowSha256:a.intendedWorkflowSha256,harnessDispatchRepo:a.harnessDispatchRepo,targetRepo:a.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.productionBranch,installBranch:a.installBranch,observedProductionHeadSha:a.observedProductionHeadSha,observedInstallHeadSha:a.observedInstallHeadSha,prNumber:a.prNumber,prUrl:a.prUrl,supersededPrNumber:a.supersededPrNumber,phase:a.phase,phaseStartedAt:a.phaseStartedAt,startedAt:a.startedAt,elapsedMs:g,checksDeadlineAt:a.checksDeadlineAt,verificationDeadlineAt:a.verificationDeadlineAt,lastVerifiedRemoteHead:a.lastVerifiedRemoteHead,lastSafeCheckpoint:a.lastSafeCheckpoint,retryCount:a.retryCount,lastRedactedError:a.lastRedactedError,recoveryInstruction:a.recoveryInstruction??(c=a.lastSafeCheckpoint||a.phase,d=a.operationId,`Retry Step 7 to resume workflow install operation ${d} from checkpoint ${c}.`),updatedAt:new Date().toISOString()},i=cw(a.repoConfigId,b);await (0,f.mkdir)(ag().dirname(i),{recursive:!0});let j=`${i}.${process.pid}.${Date.now()}.tmp`;return await (0,f.writeFile)(j,`${JSON.stringify(h,null,2)}
42
+ `,"utf8"),await (0,f.rename)(j,i),h}async function cy(a,b){try{let c=await (0,f.readFile)(cw(a,b),"utf8"),d=JSON.parse(c);if(1!==d.schemaVersion||"string"!=typeof d.operationId||d.repoConfigId!==a)return null;return d}catch{return null}}async function cz(a,b){try{await (0,f.rm)(cw(a,b),{force:!0})}catch{}}function cA(a){switch(a){case"preparing":case"pr-created":case"pr-updated":default:return"preparing-workflow-installation";case"updating-branch":return"creating-or-refreshing-install-branch";case"waiting-for-checks":return"waiting-for-github-checks";case"merging":return"merging-workflow-installation";case"verifying":case"complete":return"verifying-production-workflow";case"blocked":return"verifying-install-pull-request"}}let cB=new Map;function cC(a,b){return`${a}:${b}`}function cD(a){if(a)return Math.min(3e4,2e3+Math.floor(2e3*Math.random()))}function cE(a){var b;let c=a.lockContended||"checks-pending"===(b=a.category)||"mergeability-pending"===b||"branch-behind"===b||"verification-failed"===b||"transient-github-unavailable"===b,d=a.lockContended?"lock_contended":function(a){switch(a){case"checks-pending":return"checks_pending";case"mergeability-pending":return"mergeability_pending";case"branch-behind":return"branch_behind";case"unexpected-pr-content":case"checks-failing":case"review-required":return"unexpected_pr_content";case"merge-conflict":return"merge_conflict";case"permission-denied":return"permission_denied";case"verification-failed":return"verification_failed";case"merge-api-failure":case"merge-queue-required":return"merge_api_failure";case"transient-github-unavailable":return"transient_github_5xx";default:return"unknown"}}(a.category),e="blocked";return{repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.productionBranch,branchName:a.branchName,lifecycle:e,phase:cA(e),operationId:a.operationId,blockedCategory:a.category,message:a.customMessage??(0,ch.e)(a.category),prUrl:a.prUrl,prNumber:a.prNumber,supersededPrNumber:a.supersededPrNumber,validatedHeadSha:a.validatedHeadSha,workflowStatus:a.workflowStatus,canRetry:c||"verification-failed"===a.category,retryable:c,retryAfterMs:cD(c),lastSafeCheckpoint:a.lastSafeCheckpoint,errorCode:d,requiresGitHubIntervention:!["checks-pending","mergeability-pending","branch-behind","verification-failed","transient-github-unavailable"].includes(a.category),advancedThisRequest:a.advancedThisRequest,lockContended:a.lockContended,updatedAt:new Date().toISOString()}}function cF(a){let b=a.retryable??(a.lockContended||"waiting-for-checks"===a.lifecycle||"updating-branch"===a.lifecycle||"verifying"===a.lifecycle||"merging"===a.lifecycle||"preparing"===a.lifecycle);return{repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.productionBranch,branchName:a.branchName,lifecycle:a.lifecycle,phase:a.phase??cA(a.lifecycle),operationId:a.operationId,blockedCategory:a.blockedCategory,message:a.message,prUrl:a.prUrl,prNumber:a.prNumber,supersededPrNumber:a.supersededPrNumber,validatedHeadSha:a.validatedHeadSha,workflowStatus:a.workflowStatus,canRetry:a.canRetry??b,retryable:b,retryAfterMs:cD(b),lastSafeCheckpoint:a.lastSafeCheckpoint??a.lifecycle,errorCode:a.errorCode??(a.lockContended?"lock_contended":"none"),requiresGitHubIntervention:a.requiresGitHubIntervention??!1,advancedThisRequest:a.advancedThisRequest,lockContended:a.lockContended,updatedAt:new Date().toISOString()}}function cG(a){return cB.delete(cC(a.targetRepoSlug,a.repoConfigId)),cF({...a,lifecycle:"complete",phase:"verifying-production-workflow",workflowStatus:"present",message:"Workflow installed on the production branch.",advancedThisRequest:a.advancedThisRequest,lockContended:a.lockContended,retryable:!1,canRetry:!1,errorCode:"none",lastSafeCheckpoint:"complete"})}async function cH(a,b,c,d){let[e,f]=b.split("/"),g=await a.getRepositoryContent(e,f,c,d);return g?a.decodeRepositoryContent(g):null}async function cI(a,b){let[c,d]=b.targetRepoSlug.split("/"),e=(await a.listPullRequests(c,d,{state:"open",base:b.productionBranch,head:`${c}:${b.branchName}`}))[0];return e?{number:e.number,html_url:e.html_url,headSha:e.head.sha}:null}function cJ(a,b){return 1===a.length&&a[0]?.path===b}let cK="Refreshing the workflow install branch…";async function cL(a){let{client:b,input:c,targetRepoSlug:d,branchName:e,productionStatus:f,intendedWorkflowContent:g,inspection:h,parsedPr:i,prUrl:j,prNumber:k,validatedHeadSha:l,session:m,lockContended:n,filesValidationPassed:o,harnessDispatchRepoSlug:p,cwd:q,inputFingerprint:r}=a;if(m.recoveryAttemptedForHeadSha===l)return null;let s=await cH(b,d,F.CH,h.headSha),t=null!==s&&"present"===(0,bW.DR)(s,g),[u,v]=d.split("/"),w=null;try{w=(await b.compareCommits(u,v,c.productionBranch,e)).status}catch{w=null}if(!function(a){if(!a.headWorkflowMatchesIntended)return!0;if(a.filesValidationPassed)return!1;let b=a.mergeableState?.toLowerCase()??"",c=a.compareStatus?.toLowerCase()??"";return"behind"===b||"behind"===c||"diverged"===c||1===a.changedFiles.length&&a.changedFiles[0]?.path!==a.workflowPath||!!(a.changedFiles.length>1)}({changedFiles:h.changedFiles,workflowPath:F.CH,mergeableState:h.mergeableState,compareStatus:w,headWorkflowMatchesIntended:t,filesValidationPassed:o}))return null;let x=await cp(b,{targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e}),y=0===x||0===h.changedFiles.length||"identical"===w,z=function(a){let b=(0,bW.Yh)(a.configuredRepoConfigId);if(a.configuredTargetRepoSlug!==a.observedTargetRepoSlug)return{ok:!1,reason:"Install branch recovery target repository mismatch."};if(a.reservedBranchName!==b)return{ok:!1,reason:"Install branch recovery reserved branch name mismatch."};if(a.observedBranchName!==b)return{ok:!1,reason:"Install branch recovery PR head branch mismatch."};if(a.observedProductionBranch!==a.configuredProductionBranch)return{ok:!1,reason:"Install branch recovery PR base branch mismatch."};if(`${a.pullRequestOwner}/${a.pullRequestRepo}`!==a.configuredTargetRepoSlug)return{ok:!1,reason:"Install branch recovery PR repository mismatch."};let c=+!a.allowZeroOpenPullRequests;return a.openPullRequestsOnBranch<c||a.openPullRequestsOnBranch>1?{ok:!1,reason:"Install branch recovery requires at most one open PR on the reserved branch."}:{ok:!0}}({configuredTargetRepoSlug:d,observedTargetRepoSlug:d,configuredRepoConfigId:c.repoConfigId,reservedBranchName:e,observedBranchName:h.branch,configuredProductionBranch:c.productionBranch,observedProductionBranch:h.baseBranch,configuredWorkflowPath:F.CH,pullRequestOwner:i.owner,pullRequestRepo:i.repo,openPullRequestsOnBranch:x,allowZeroOpenPullRequests:y});if(!z.ok)return m.recoveryAttemptedForHeadSha=l,cB.set(cC(d,c.repoConfigId),m),cE({repoConfigId:c.repoConfigId,targetRepo:c.targetRepo,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,category:"unexpected-pr-content",workflowStatus:f.workflowStatus,operationId:m.operationId,prUrl:j,prNumber:k,validatedHeadSha:l,advancedThisRequest:!0,lockContended:n,customMessage:z.reason,lastSafeCheckpoint:"recovery-proof-failed"});if(await ck({client:b,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,workflowPath:F.CH,intendedWorkflowContent:g}))return m.recoveryAttemptedForHeadSha=l,cB.set(cC(d,c.repoConfigId),m),null;await cM({cwd:q,session:m,input:c,targetRepoSlug:d,branchName:e,intendedWorkflowContent:g,harnessDispatchRepoSlug:p,inputFingerprint:r,phase:"creating-or-refreshing-install-branch",prUrl:j,prNumber:k,observedInstallHeadSha:l,lastSafeCheckpoint:"before-branch-recovery"});let A=await co({client:b,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,workflowPath:F.CH,workflowContent:g,expectedReservedBranchHeadSha:l});if(!A.recovered)return A.needsReconciliation?cF({repoConfigId:c.repoConfigId,targetRepo:c.targetRepo,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,lifecycle:"updating-branch",phase:"creating-or-refreshing-install-branch",operationId:m.operationId,workflowStatus:f.workflowStatus,message:cK,prUrl:j,prNumber:k,validatedHeadSha:A.observedHeadSha,advancedThisRequest:!0,lockContended:n,blockedCategory:"branch-behind",retryable:!0,lastSafeCheckpoint:"branch-head-changed-reconcile",errorCode:"branch_behind"}):(m.recoveryAttemptedForHeadSha=l,cB.set(cC(d,c.repoConfigId),m),cE({repoConfigId:c.repoConfigId,targetRepo:c.targetRepo,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,category:"unexpected-pr-content",workflowStatus:f.workflowStatus,operationId:m.operationId,prUrl:j,prNumber:k,validatedHeadSha:l,advancedThisRequest:!0,lockContended:n,customMessage:A.reason,lastSafeCheckpoint:"recovery-failed"}));let B=await cr({client:b,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,repoConfigId:c.repoConfigId,prTitle:(0,bW.Hh)(),prBody:(0,bW.rv)({repoConfigId:c.repoConfigId,productionBranch:c.productionBranch,harnessDispatchRepo:p}),verifiedHeadSha:A.headSha,harnessDispatchRepo:p});return B.supersededPrNumber&&(m.supersededPrNumber=B.supersededPrNumber),m.recoveryAttemptedForHeadSha=l,m.lastValidatedHeadSha=A.headSha,cB.set(cC(d,c.repoConfigId),m),await cM({cwd:q,session:m,input:c,targetRepoSlug:d,branchName:e,intendedWorkflowContent:g,harnessDispatchRepoSlug:p,inputFingerprint:r,phase:"creating-or-refreshing-install-branch",prUrl:B.prUrl,prNumber:B.prNumber,supersededPrNumber:m.supersededPrNumber,observedInstallHeadSha:A.headSha,observedProductionHeadSha:A.productionSha,lastSafeCheckpoint:"branch-recovered"}),cF({repoConfigId:c.repoConfigId,targetRepo:c.targetRepo,targetRepoSlug:d,productionBranch:c.productionBranch,branchName:e,lifecycle:"updating-branch",phase:"creating-or-refreshing-install-branch",operationId:m.operationId,workflowStatus:f.workflowStatus,message:cK,prUrl:B.prUrl,prNumber:B.prNumber,supersededPrNumber:m.supersededPrNumber,validatedHeadSha:A.headSha,advancedThisRequest:!0,lockContended:n,blockedCategory:"branch-behind",retryable:!0,lastSafeCheckpoint:"branch-recovered",errorCode:"branch_behind"})}async function cM(a){var b;let c=new Date().toISOString();await cx({operationId:a.session.operationId,repoConfigId:a.input.repoConfigId,inputFingerprint:a.inputFingerprint,intendedWorkflowSha256:(b=a.intendedWorkflowContent,(0,d.createHash)("sha256").update(b,"utf8").digest("hex")),harnessDispatchRepo:a.harnessDispatchRepoSlug,targetRepo:a.input.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.input.productionBranch,installBranch:a.branchName,observedProductionHeadSha:a.observedProductionHeadSha,observedInstallHeadSha:a.observedInstallHeadSha,prNumber:a.prNumber,prUrl:a.prUrl,supersededPrNumber:a.supersededPrNumber,phase:a.phase,phaseStartedAt:c,startedAt:a.session.startedAt,checksDeadlineAt:a.session.checksPendingSince?new Date(a.session.checksPendingSince+12e4).toISOString():void 0,verificationDeadlineAt:a.session.verificationStartedAt?new Date(a.session.verificationStartedAt+6e4).toISOString():void 0,lastVerifiedRemoteHead:a.observedInstallHeadSha,lastSafeCheckpoint:a.lastSafeCheckpoint,retryCount:a.retryCount??0,lastRedactedError:a.lastRedactedError?(0,cg.MR)(a.lastRedactedError):void 0},a.cwd)}async function cN(a){if("missing"!==a.productionStatus.workflowStatus&&"differs"!==a.productionStatus.workflowStatus)return null;await cM({cwd:a.cwd,session:a.session,input:a.finalizeInput,targetRepoSlug:a.targetRepoSlug,branchName:a.branchName,intendedWorkflowContent:a.intendedWorkflowContent,harnessDispatchRepoSlug:a.harnessDispatchRepoSlug,inputFingerprint:a.inputFingerprint,phase:"creating-or-refreshing-install-branch",supersededPrNumber:a.supersededPrNumber,lastSafeCheckpoint:"before-empty-pr-recovery"});let[b,c]=a.targetRepoSlug.split("/"),d=null;try{d=(await a.client.getBranchRef(b,c,a.branchName)).object.sha}catch(a){if(!(a instanceof ax.OS&&404===a.status))throw a}let e=await co({client:a.client,targetRepoSlug:a.targetRepoSlug,productionBranch:a.finalizeInput.productionBranch,branchName:a.branchName,workflowPath:F.CH,workflowContent:a.intendedWorkflowContent,expectedReservedBranchHeadSha:d});if(!e.recovered)return e.needsReconciliation?cF({repoConfigId:a.finalizeInput.repoConfigId,targetRepo:a.finalizeInput.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.finalizeInput.productionBranch,branchName:a.branchName,lifecycle:"updating-branch",phase:"creating-or-refreshing-install-branch",operationId:a.session.operationId,workflowStatus:a.productionStatus.workflowStatus,message:cK,validatedHeadSha:e.observedHeadSha,advancedThisRequest:!0,lockContended:a.lockContended,retryable:!0,lastSafeCheckpoint:"empty-pr-reconcile",errorCode:"branch_behind"}):cE({repoConfigId:a.finalizeInput.repoConfigId,targetRepo:a.finalizeInput.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.finalizeInput.productionBranch,branchName:a.branchName,category:"unexpected-pr-content",workflowStatus:a.productionStatus.workflowStatus,operationId:a.session.operationId,advancedThisRequest:!0,lockContended:a.lockContended,customMessage:e.reason,lastSafeCheckpoint:"empty-pr-recovery-failed"});let f=await cr({client:a.client,targetRepoSlug:a.targetRepoSlug,productionBranch:a.finalizeInput.productionBranch,branchName:a.branchName,repoConfigId:a.finalizeInput.repoConfigId,prTitle:(0,bW.Hh)(),prBody:(0,bW.rv)({repoConfigId:a.finalizeInput.repoConfigId,productionBranch:a.finalizeInput.productionBranch,harnessDispatchRepo:a.harnessDispatchRepoSlug}),verifiedHeadSha:e.headSha,harnessDispatchRepo:a.harnessDispatchRepoSlug});return f.supersededPrNumber?a.session.supersededPrNumber=f.supersededPrNumber:a.supersededPrNumber&&(a.session.supersededPrNumber=a.supersededPrNumber),a.session.lastValidatedHeadSha=e.headSha,cB.set(cC(a.targetRepoSlug,a.finalizeInput.repoConfigId),a.session),await cM({cwd:a.cwd,session:a.session,input:a.finalizeInput,targetRepoSlug:a.targetRepoSlug,branchName:a.branchName,intendedWorkflowContent:a.intendedWorkflowContent,harnessDispatchRepoSlug:a.harnessDispatchRepoSlug,inputFingerprint:a.inputFingerprint,phase:"creating-or-refreshing-install-branch",prUrl:f.prUrl,prNumber:f.prNumber,supersededPrNumber:a.session.supersededPrNumber,observedInstallHeadSha:e.headSha,observedProductionHeadSha:e.productionSha,lastSafeCheckpoint:"empty-pr-recovered"}),cF({repoConfigId:a.finalizeInput.repoConfigId,targetRepo:a.finalizeInput.targetRepo,targetRepoSlug:a.targetRepoSlug,productionBranch:a.finalizeInput.productionBranch,branchName:a.branchName,lifecycle:"updating-branch",phase:"creating-or-refreshing-install-branch",operationId:a.session.operationId,workflowStatus:a.productionStatus.workflowStatus,message:cK,prUrl:f.prUrl,prNumber:f.prNumber,supersededPrNumber:a.session.supersededPrNumber,validatedHeadSha:e.headSha,advancedThisRequest:!0,lockContended:a.lockContended,blockedCategory:"branch-behind",retryable:!0,lastSafeCheckpoint:"empty-pr-recovered",errorCode:"branch_behind"})}async function cO(a){let{input:b,provider:c,client:e,lockContended:f=!1}=a,g=(0,bU.KO)(b.targetRepo),h=await cy(b.repoConfigId,a.cwd),i=b.operationId??h?.operationId??(0,d.randomUUID)();if(!g)return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:"<invalid>",productionBranch:b.productionBranch,branchName:(0,bW.Yh)(b.repoConfigId),category:"unexpected-pr-content",workflowStatus:"unknown",operationId:i,advancedThisRequest:!0,lockContended:f,customMessage:`Invalid target repo URL: ${b.targetRepo}`});let j=b.branchName??(0,bW.Yh)(b.repoConfigId),k=await (0,E.z8)({cwd:a.cwd,manualRepo:b.manualHarnessDispatchRepo}),l=(0,bW.g1)({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,productionBranch:b.productionBranch,harnessDispatchRepo:k}),m=l.workflowContent,n=(0,E.OW)(k),o=l.fingerprint,p=await c.checkTargetWorkflowStatus({targetRepoSlug:g,workflowPath:F.CH,intendedWorkflowContent:m,productionBranch:b.productionBranch});if("present"===p.workflowStatus)return await cz(b.repoConfigId,a.cwd),cG({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:i,advancedThisRequest:!0,lockContended:f});let q=cB.get(cC(g,b.repoConfigId))??{operationId:i,startedAt:h?.startedAt??new Date().toISOString(),supersededPrNumber:h?.supersededPrNumber,checksPendingSince:h?.checksDeadlineAt?Date.parse(h.checksDeadlineAt)-12e4:void 0,verificationStartedAt:h?.verificationDeadlineAt?Date.parse(h.verificationDeadlineAt)-6e4:void 0};q.operationId=i,h?.supersededPrNumber&&(q.supersededPrNumber=h.supersededPrNumber),cB.set(cC(g,b.repoConfigId),q);let r=b.prUrl??h?.prUrl,s=h?.prNumber,t=h?.observedInstallHeadSha;if(r){let a=cf(r);a&&(s=a.pullNumber)}if(!r){let a=await cI(e,{targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j});a&&(r=a.html_url,s=a.number,t=a.headSha)}if(!r||!s){let c=await cN({client:e,cwd:a.cwd,finalizeInput:b,targetRepoSlug:g,branchName:j,productionStatus:p,intendedWorkflowContent:m,harnessDispatchRepoSlug:n,inputFingerprint:o,session:q,lockContended:f,supersededPrNumber:h?.prNumber??q.supersededPrNumber});return c||cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,operationId:q.operationId,advancedThisRequest:!0,lockContended:f,customMessage:"No open workflow install PR was found for the deterministic install branch.",lastSafeCheckpoint:h?.lastSafeCheckpoint})}let u=cf(r);if(!u)return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,advancedThisRequest:!0,lockContended:f});let v=await cd(e,u,b.targetRepo);if(v.merged){let a=await c.checkTargetWorkflowStatus({targetRepoSlug:g,workflowPath:F.CH,intendedWorkflowContent:m,productionBranch:b.productionBranch});return"present"===a.workflowStatus?cG({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,prUrl:r,prNumber:s,advancedThisRequest:!0,lockContended:f}):(q.verificationStartedAt??=Date.now(),Date.now()-q.verificationStartedAt>6e4)?(cB.set(cC(g,b.repoConfigId),q),cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"verification-failed",workflowStatus:a.workflowStatus,prUrl:r,prNumber:s,advancedThisRequest:!0,lockContended:f})):(cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"verifying",workflowStatus:a.workflowStatus,message:"Verifying workflow on the production branch.",prUrl:r,prNumber:s,advancedThisRequest:!0,lockContended:f}))}if(v.branch!==j)return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,advancedThisRequest:!0,lockContended:f});try{(0,b7.$H)({prUrl:r,actualBaseBranch:v.baseBranch,expectedBaseBranch:b.productionBranch})}catch{return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,advancedThisRequest:!0,lockContended:f})}v.isDraft&&(await e.markPullRequestReadyForReview(u.owner,u.repo,u.pullNumber),v=await cd(e,u,b.targetRepo)),q.lastValidatedHeadSha=t=v.headSha;let w=cJ(v.changedFiles,F.CH);if(!w){let c=await cL({client:e,input:b,targetRepoSlug:g,branchName:j,productionStatus:p,intendedWorkflowContent:m,inspection:v,parsedPr:u,prUrl:r,prNumber:s,validatedHeadSha:t,session:q,lockContended:f,filesValidationPassed:w,harnessDispatchRepoSlug:n,cwd:a.cwd,inputFingerprint:o});return c||cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f})}let x=await cH(e,g,F.CH,v.headSha);if("present"!==(0,bW.DR)(x,m)){let c=await cL({client:e,input:b,targetRepoSlug:g,branchName:j,productionStatus:p,intendedWorkflowContent:m,inspection:v,parsedPr:u,prUrl:r,prNumber:s,validatedHeadSha:t,session:q,lockContended:f,filesValidationPassed:!0,harnessDispatchRepoSlug:n,cwd:a.cwd,inputFingerprint:o});return c||cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:"Workflow install PR content does not match the harness-generated workflow."})}if(!m.includes(n)||!m.includes(`--arg repo ${b.repoConfigId}`))return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"unexpected-pr-content",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f});let y=await (0,I.rL)({baseDir:a.cwd}),z=y.config.merge?.mergeMethod??b6.nm,A=function(a,b){let c=b.merge?.allowPendingChecks??b6.dM,d=b.merge?.allowUnknownChecks??b6.Sf,e=b.merge?.allowNeutralChecks??b6.R;if(0===a.length)return d?{decision:"allow",classification:null,reason:"No check runs reported; proceeding per allowUnknownChecks",warnings:["No GitHub check runs reported for the PR head commit"]}:{decision:"block",classification:"checks_unknown",reason:"No GitHub check runs reported for the PR head commit",warnings:[]};let f=a.filter(a=>null!==a.conclusion&&b8.has(a.conclusion));if(f.length>0)return{decision:"block",classification:"checks_failing",reason:`Failing checks: ${f.map(a=>a.name).join(", ")}`,warnings:[]};let g=a.filter(a=>"completed"!==a.status||null===a.conclusion);if(g.length>0)return c?{decision:"allow",classification:null,reason:"Pending checks present; proceeding per allowPendingChecks",warnings:g.map(a=>`Pending check: ${a.name}`)}:{decision:"block",classification:"checks_pending",reason:`Pending checks: ${g.map(a=>a.name).join(", ")}`,warnings:[]};let h=a.filter(a=>null!==a.conclusion&&!b9.has(a.conclusion));return h.length>0&&!e?{decision:"block",classification:"checks_unknown",reason:`Unrecognized check conclusions: ${h.map(a=>`${a.name}=${a.conclusion}`).join(", ")}`,warnings:[]}:{decision:"allow",classification:null,reason:"Checks policy passed",warnings:[]}}(v.checks,y.config);if("block"===A.decision)return"checks_failing"===A.classification?cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"checks-failing",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:(0,cg.MR)(A.reason)}):(q.checksPendingSince??=Date.now(),Date.now()-q.checksPendingSince>12e4)?(cB.set(cC(g,b.repoConfigId),q),cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"checks-pending",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:"Timed out waiting for GitHub checks on the workflow install PR."})):(cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"waiting-for-checks",workflowStatus:p.workflowStatus,message:"Waiting for GitHub checks on the workflow install PR.",prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,blockedCategory:"checks-pending"}));let B=v.mergeableState?.toLowerCase()??null;if("unknown"===B||null===v.mergeable)return cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"waiting-for-checks",workflowStatus:p.workflowStatus,message:"Waiting for GitHub mergeability on the workflow install PR.",prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,blockedCategory:"mergeability-pending"});if("behind"===B){if(q.branchUpdateAttemptedForHeadSha!==t)try{return await e.updatePullRequestBranch(u.owner,u.repo,u.pullNumber,{expectedHeadSha:t}),q.branchUpdateAttemptedForHeadSha=t,cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"updating-branch",workflowStatus:p.workflowStatus,message:"Updating the workflow install branch.",prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f})}catch(h){let c=(0,ch.y)({error:h}),d=await cL({client:e,input:b,targetRepoSlug:g,branchName:j,productionStatus:p,intendedWorkflowContent:m,inspection:v,parsedPr:u,prUrl:r,prNumber:s,validatedHeadSha:t,session:q,lockContended:f,filesValidationPassed:cJ(v.changedFiles,F.CH),harnessDispatchRepoSlug:n,cwd:a.cwd,inputFingerprint:o});if(d)return d;return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:c.category,workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:c.message})}let c=await cL({client:e,input:b,targetRepoSlug:g,branchName:j,productionStatus:p,intendedWorkflowContent:m,inspection:v,parsedPr:u,prUrl:r,prNumber:s,validatedHeadSha:t,session:q,lockContended:f,filesValidationPassed:cJ(v.changedFiles,F.CH),harnessDispatchRepoSlug:n,cwd:a.cwd,inputFingerprint:o});return c||cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"branch-behind",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f})}if("dirty"===B||!(0,ci.f)({mergeableState:v.mergeableState,mergeable:v.mergeable}))return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"merge-conflict",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f});if(q.mergeAttemptedForHeadSha===t)return cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"merging",workflowStatus:p.workflowStatus,message:"Waiting for workflow install PR merge to complete.",prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!1,lockContended:f});try{await e.mergePullRequest(u.owner,u.repo,u.pullNumber,{mergeMethod:z,commitTitle:(0,bW.Hh)(),expectedHeadSha:t}),q.mergeAttemptedForHeadSha=t,q.verificationStartedAt=Date.now(),cB.set(cC(g,b.repoConfigId),q)}catch(a){if((0,ca.B)(a))q.verificationStartedAt??=Date.now(),cB.set(cC(g,b.repoConfigId),q);else{let c=(0,ch.y)({error:a,mergeableState:v.mergeableState,message:a instanceof Error?a.message:String(a),checkPolicy:A});if(c.waiting)return cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"checks-pending"===c.category?"waiting-for-checks":"merging",workflowStatus:p.workflowStatus,message:c.message,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,blockedCategory:c.category});if(a instanceof ax.OS&&"github_auth_failure"===(0,ca.N)(a))return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"permission-denied",workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f});return cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:c.category,workflowStatus:p.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:c.message})}}let C=await c.checkTargetWorkflowStatus({targetRepoSlug:g,workflowPath:F.CH,intendedWorkflowContent:m,productionBranch:b.productionBranch});return"present"===C.workflowStatus?cG({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f}):(q.verificationStartedAt??=Date.now(),Date.now()-q.verificationStartedAt>6e4)?(cB.set(cC(g,b.repoConfigId),q),cE({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,category:"verification-failed",workflowStatus:C.workflowStatus,prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,customMessage:"Workflow install PR merged, but production verification timed out."})):(cB.set(cC(g,b.repoConfigId),q),cF({repoConfigId:b.repoConfigId,targetRepo:b.targetRepo,targetRepoSlug:g,productionBranch:b.productionBranch,branchName:j,operationId:q.operationId,lifecycle:"verifying",workflowStatus:C.workflowStatus,message:"Verifying workflow on the production branch.",prUrl:r,prNumber:s,validatedHeadSha:t,advancedThisRequest:!0,lockContended:f,canRetry:!0}))}async function cP(a){var b,c;let d=(b=(0,bU.KO)(a.input.targetRepo)??a.input.targetRepo,c=a.input.repoConfigId,`${b}:${c}`),{result:e,lockContended:f}=await cu(d,async()=>cO({cwd:a.cwd,input:a.input,provider:a.provider,client:a.client,lockContended:!1})),g={...e,lockContended:f||e.lockContended,retryable:!!f||e.retryable,errorCode:f?"lock_contended":e.errorCode,retryAfterMs:f?cD(!0):e.retryAfterMs};return"complete"===g.lifecycle&&await cz(a.input.repoConfigId,a.cwd),g}function cQ(a){let b="queued"===a.status||"in_progress"===a.status||"completed"===a.status?a.status:"waiting"===a.status||"requested"===a.status||"pending"===a.status?"queued":"in_progress",c="success"===a.conclusion||"failure"===a.conclusion||"cancelled"===a.conclusion?a.conclusion:null===a.conclusion?null:"failure";return{id:a.id,status:b,conclusion:c,htmlUrl:a.html_url,createdAt:a.created_at,name:a.name,displayTitle:a.display_title}}class cR{constructor(a){this.client=new ax.jh(a),this.remoteSetup=(0,X.iB)(a.token)}async getRepositoryMetadata(a,b,c){try{let d=await this.client.getRepository(a,b,{signal:c?.signal});if("number"!=typeof d.id||!Number.isInteger(d.id)||d.id<=0)throw Error(`GitHub repository metadata for ${a}/${b} is missing a valid numeric repository ID.`);return{id:d.id,fullName:d.full_name??`${a}/${b}`,defaultBranch:d.default_branch??"main"}}catch(a){if(a instanceof ax.OS&&404===a.status)return null;throw(0,X.jq)(a)}}async getRepositoryMetadataById(a){try{let b=(await this.client.getRepositoryById(a)).full_name;if(!b||!b.includes("/"))throw Error(`GitHub repository ID ${a} returned invalid full_name metadata.`);let[c,d]=b.split("/");if(!c||!d)throw Error(`GitHub repository ID ${a} returned invalid full_name metadata.`);return this.getRepositoryMetadata(c,d)}catch(a){if(a instanceof ax.OS&&404===a.status)return null;throw(0,X.jq)(a)}}async getRepositoryDefaultBranchHead(a,b,c,d){try{return(await this.client.getBranchRef(a,b,c,{signal:d?.signal})).object.sha}catch(a){throw(0,X.jq)(a)}}async readRepositoryFileContent(a,b,c,d,e){try{let f=await this.client.getRepositoryContent(a,b,c,d,{signal:e?.signal});return f?this.client.decodeRepositoryContent(f):null}catch(a){throw(0,X.jq)(a)}}async listRepositoryTreePaths(a,b,c){try{let d=await this.client.getGitCommit(a,b,c);return((await this.client.getGitTree({owner:a,repo:b,treeSha:d.tree.sha,recursive:!0})).tree??[]).filter(a=>a.path&&"blob"===a.type).map(a=>({path:a.path,sha:a.sha,type:a.type}))}catch(a){throw(0,X.jq)(a)}}async getBlobContentSha256(a,b,c){try{var e;let f=await this.client.getGitBlob(a,b,c);return e="base64"===f.encoding?Buffer.from(f.content,"base64"):Buffer.from(f.content,"utf8"),(0,d.createHash)("sha256").update(e).digest("hex")}catch(a){throw(0,X.jq)(a)}}async createGitBlob(a){try{return await this.client.createGitBlob(a)}catch(a){throw(0,X.jq)(a)}}async createGitTree(a){try{return{sha:(await this.client.createGitTree(a)).sha}}catch(a){throw(0,X.jq)(a)}}async createGitCommit(a){try{let b=await this.client.createGitCommit(a);return{sha:b.sha,tree:b.tree,parents:b.parents}}catch(a){throw(0,X.jq)(a)}}async getGitCommit(a,b,c){try{let d=await this.client.getGitCommit(a,b,c);return{sha:d.sha,tree:d.tree,parents:d.parents}}catch(a){throw(0,X.jq)(a)}}async getGitRef(a,b,c){try{let d=await this.client.getGitRef(a,b,c);return{ref:d.ref,object:{sha:d.object.sha}}}catch(a){throw(0,X.jq)(a)}}async updateGitRef(a){try{if(a.expectedSha){let b=await this.getGitRef(a.owner,a.repo,a.ref);if(b.object.sha!==a.expectedSha)throw Error(`Ref update rejected: expected ${a.expectedSha}, found ${b.object.sha}.`)}let b=await this.client.updateGitRef({owner:a.owner,repo:a.repo,ref:a.ref,sha:a.sha,force:a.force});return{ref:b.ref,object:{sha:b.object.sha}}}catch(a){throw(0,X.jq)(a)}}async createGitRef(a){try{var b;let c=(b=a.ref).startsWith("refs/heads/")?b.slice(11):b.startsWith("refs/")?b.slice(5):b,d=await this.client.createGitRef(a.owner,a.repo,c,a.sha);return{ref:d.ref,object:{sha:d.object.sha}}}catch(a){throw(0,X.jq)(a)}}async listPullRequests(a,b,c){try{return(await this.client.listPullRequests(a,b,{state:c.state,base:c.base,head:c.head})).map(a=>({number:a.number,htmlUrl:a.html_url,headRef:a.head.ref,baseRef:a.base.ref,body:a.body??"",state:"closed"===a.state?"closed":"open",headSha:a.head.sha}))}catch(a){throw(0,X.jq)(a)}}async createPullRequest(a){try{let b=await this.client.createPullRequest(a);return{number:b.number,htmlUrl:b.html_url}}catch(a){throw(0,X.jq)(a)}}async updatePullRequest(a,b,c,d){try{await this.client.updatePullRequest(a,b,c,d)}catch(a){throw(0,X.jq)(a)}}async mergePullRequest(a,b,c,d){try{await this.client.mergePullRequest(a,b,c,{mergeMethod:d.mergeMethod??"squash",commitTitle:d.commitTitle,expectedHeadSha:d.expectedHeadSha})}catch(a){throw(0,X.jq)(a)}}async dispatchWorkflow(a,b,c,d,e){try{return await this.client.createWorkflowDispatch(a,b,c,d,e),{}}catch(a){throw(0,X.jq)(a)}}async getWorkflowRun(a,b,c){try{let d=await this.client.getWorkflowRun(a,b,c);return cQ(d)}catch(a){throw(0,X.jq)(a)}}async listWorkflowRuns(a,b,c,d){try{return(await this.client.listWorkflowRuns(a,b,c,{branch:d?.branch,event:d?.event})).map(cQ)}catch(a){throw(0,X.jq)(a)}}async writeHarnessSecrets(a,b){if(!this.remoteSetup.writeHarnessSecrets)throw Error("Live remote setup provider does not support writeHarnessSecrets.");return this.remoteSetup.writeHarnessSecrets(a,b)}async writeHarnessVariables(a,b){if(!this.remoteSetup.writeHarnessVariables)throw Error("Live remote setup provider does not support writeHarnessVariables.");return this.remoteSetup.writeHarnessVariables(a,b)}}function cS(a,b){return new cR({token:a,timeoutMs:b?.timeoutMs})}async function cT(a=process.env){return!function(a=process.env){return"true"===a.VITEST||"test"===a.NODE_ENV}()||a.HARNESS_VITEST_RUNNER_UPGRADE_MOCK,null}var cU=c(33776),cV=c(73833);async function cW(a,b){await (0,cV.xj)({runnerUpgrade:a},b)}let cX=new Map;async function cY(a,b){let c,d=cX.get(a)??Promise.resolve(),e=new Promise(a=>{c=a}),f=d.then(()=>e);cX.set(a,f),await d;try{return await b()}finally{c(),cX.get(a)===f&&cX.delete(a)}}function cZ(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-runner-upgrade.pending.json")}async function c$(a){try{let b=await (0,f.readFile)(cZ(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.operationId||"number"!=typeof c.repositoryId||"string"!=typeof c.repoSlug||"string"!=typeof c.targetSnapshotContentId||"string"!=typeof c.previewFingerprint)return null;return c}catch{return null}}async function c_(a,b){let c=cZ(b);await (0,f.mkdir)(ag().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${Date.now()}.tmp`;await (0,f.writeFile)(d,`${JSON.stringify(a,null,2)}
43
+ `,"utf8"),await (0,f.rename)(d,c)}async function c0(a){try{await (0,f.rm)(cZ(a),{force:!0})}catch{}}var c1=c(52884);function c2(a){switch(a){case"verifying-managed-repository":case"comparing-runner-snapshots":case"preparing-upgrade-commit":case"updating-managed-runner":case"verifying-runner-on-production-branch":case"synchronizing-cloud-configuration":case"running-configuration-canary":return a;default:return"verifying-managed-repository"}}function c3(a,b){return`Retry Update PDev runner to resume operation ${b} from checkpoint ${a??"unknown"}.`}function c4(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-runner-upgrade.progress.json")}async function c5(a,b){let c=a.uiPhase??c2(a.phase),d=Date.parse(a.startedAt),e=a.elapsedMs??(Number.isFinite(d)?Math.max(0,Date.now()-d):0),g=new Date().toISOString(),h={operationId:a.operationId,phase:a.phase,uiPhase:c,uiPhaseLabel:a.uiPhaseLabel??(0,c1.s_)(c),phaseStartedAt:a.phaseStartedAt,startedAt:a.startedAt,elapsedMs:e,canaryRunId:a.canaryRunId,canaryRunUrl:a.canaryRunUrl,prUrl:a.prUrl,recoveryInstruction:a.recoveryInstruction??c3(a.phase,a.operationId),updatedAt:a.updatedAt??g,lastSuccessfulProviderCallAt:a.lastSuccessfulProviderCallAt,workerHeartbeatAt:a.workerHeartbeatAt??g,lastCheckpoint:a.lastCheckpoint??a.phase,filesInspected:a.filesInspected,filesTotal:a.filesTotal,lastCompletedBatch:a.lastCompletedBatch,retryCount:a.retryCount,retryable:a.retryable,errorCode:a.errorCode},i=c4(b);await (0,f.mkdir)(ag().dirname(i),{recursive:!0});let j=`${i}.${process.pid}.${Date.now()}.tmp`;return await (0,f.writeFile)(j,`${JSON.stringify(h,null,2)}
44
+ `,"utf8"),await (0,f.rename)(j,i),h}async function c6(a){try{let b=await (0,f.readFile)(c4(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.operationId||"string"!=typeof c.phase)return null;let d=c.uiPhase??c2(c.phase);return{...c,uiPhase:d,uiPhaseLabel:c.uiPhaseLabel??(0,c1.s_)(d),recoveryInstruction:c.recoveryInstruction??c3(c.phase,c.operationId)}}catch{return null}}function c7(a){let b={};for(let c of a.files)b[c.path]=c.sha256;return b}function c8(a){let b=a.createdFromPackageSnapshot?.fileHashes;if(!b||"object"!=typeof b)return null;let c=Object.entries(b).filter(([a,b])=>"string"==typeof a&&a.length>0&&"string"==typeof b&&b.length>0);return 0===c.length?null:Object.fromEntries(c)}function c9(a){return Object.keys(a).sort()}async function da(a,b){let c=b.workflowPath??c1.nE,d=Date.now();for(;Date.now()-d<b.pollTimeoutMs;){let d=(await a.listWorkflowRuns(b.owner,b.repo,c,{branch:b.ref,event:"workflow_dispatch"})).find(a=>(function(a,b){let c=b.trim();if(!c)return!1;let d=`PDev runner config canary ${c}`;return a.name===d||a.displayTitle===d||!!(a.name?.includes(c)||a.displayTitle?.includes(c))})(a,b.operationId));if(d)return d;await new Promise(a=>setTimeout(a,b.pollIntervalMs))}return null}function db(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-runner-upgrade.last-verified.json")}async function dc(a){try{let b=await (0,f.readFile)(db(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.snapshotContentId||"string"!=typeof c.packageVersion||"string"!=typeof c.sourceCommit||"string"!=typeof c.verifiedAt)return null;return c}catch{return null}}async function dd(a,b){let c=db(b);await (0,f.mkdir)(ag().dirname(c),{recursive:!0});let d=`${c}.${process.pid}.${Date.now()}.tmp`;await (0,f.writeFile)(d,`${JSON.stringify(a,null,2)}
45
+ `,"utf8"),await (0,f.rename)(d,c)}c(80641);class de extends Error{constructor(a,b,c,d){super(a),this.callName=b,this.timeoutMs=c,this.unresolvedStage=d,this.code="runner_upgrade_timeout",this.retryable=!0,this.name="RunnerUpgradeTimeoutError"}}class df{begin(a){this.current&&this.end(!1),this.current={stage:a,started:Date.now()},this.unresolvedStage=a}end(a=!1){this.current&&(this.timings.push({stage:this.current.stage,durationMs:Date.now()-this.current.started,timedOut:a||void 0}),a||(this.unresolvedStage=void 0),this.current=null)}markTimedOut(){this.current&&this.end(!0)}snapshot(){return[...this.timings]}commit(){this.snapshot(),this.unresolvedStage}constructor(){this.timings=[],this.current=null}}function dg(a){if(a?.aborted)throw new de("Runner upgrade status request was aborted.","aborted",0)}async function dh(a,b,c,d){dg(d);let e=new AbortController,f=function(...a){let b=a.filter(a=>!!a);if(0===b.length)return;if(1===b.length)return b[0];if("function"==typeof AbortSignal.any)return AbortSignal.any(b);let c=new AbortController;for(let a of b){if(a.aborted){c.abort(a.reason);break}a.addEventListener("abort",()=>{c.abort(a.reason)},{once:!0})}return c.signal}(e.signal,d),g=setTimeout(()=>{e.abort()},b),h=new Promise((c,g)=>{let h=()=>{g(new de(d?.aborted&&!e.signal.aborted?`${a} aborted.`:`${a} timed out after ${b}ms.`,a,b))};if(f.aborted)return void h();f.addEventListener("abort",h,{once:!0})}),i=c(f).catch(c=>{if(f.aborted)throw c instanceof de?c:new de(`${a} aborted.`,a,b);throw c});try{return await Promise.race([i,h])}finally{void 0!==g&&(clearTimeout(g),g=void 0),e.signal.aborted||e.abort(),i.catch(()=>{})}}async function di(a,b,c,d,e){let f=Date.now();try{let g=await dh(a,b,c,e);return d?.({call:a,durationMs:Date.now()-f,timedOut:!1}),g}catch(c){let b=c instanceof de;throw d?.({call:a,durationMs:Date.now()-f,timedOut:b}),c}}let dj=new Map;async function dk(a,b,c,d,e,f){let g,h=!1,i=new Promise(b=>{g=setTimeout(()=>{f?.markTimedOut();let a=f?.unresolvedStage;c(),Promise.resolve(e(a)).then(a=>{h||(h=!0,b(a))})},a)}),j=d(b).then(a=>(h=!0,a),a=>{if(b.aborted)return e(f?.unresolvedStage);throw a});try{return await Promise.race([j,i])}finally{void 0!==g&&clearTimeout(g),j.catch(()=>{})}}let dl=new Set,dm=[],dn=new Set,dp=null,dq=null,dr=!1,ds=!1;function dt(a,b){dl.has(a)||dn.has(a)||(dn.add(a),dm.push({operationId:a,cwd:b}),dv())}async function du(a){let b=await c$(a);b&&(!b.lastError||b.codeUpdateComplete)&&(dl.has(b.operationId)||dt(b.operationId,a))}async function dv(){if(!dr){dr=!0;try{for(;dm.length>0;){let a=dm.shift();if(!a)break;if(dn.delete(a.operationId),!dl.has(a.operationId)){dl.add(a.operationId);try{if(!dp||!dq)continue;let b=await dp(a.cwd);if(!b)continue;let c=await c$(a.cwd);if(!c||c.operationId!==a.operationId)continue;await dq(a.cwd,b)}catch{}finally{dl.delete(a.operationId)}}}}finally{dr=!1,dm.length>0&&dv()}}}let dw=["verifying-managed-repository","comparing-runner-snapshots","preparing-upgrade-commit","updating-managed-runner","verifying-runner-on-production-branch","synchronizing-cloud-configuration","running-configuration-canary"],dx=new Set([".harness/config.local.json",".env.local"]);function dy(a){return(0,d.createHash)("sha256").update(a).digest("hex")}function dz(a){return{snapshotContentId:a.snapshotContentId,packageVersion:a.packageVersion,sourceCommit:a.sourceCommit}}async function dA(a){let b=await (0,E.z8)({cwd:a});if(!b.resolved||!b.repo)throw Error("Harness dispatch repository is not configured.");let c=(0,E.OW)(b),[d,e]=c.split("/");if(!d||!e)throw Error(`Invalid harness repository slug ${c}.`);return{repoSlug:c,owner:d,repo:e}}async function dB(){let a=await bs("file:///Users/weston/Code/agentic-product-development-harness/src/setup/runner-upgrade.ts");return a.ok?{packageRoot:a.packageRoot,snapshotRoot:a.snapshotRoot,packageVersion:a.packageVersion,manifest:a.manifest,fingerprint:a.fingerprint}:null}async function dC(a){let b=await br("file:///Users/weston/Code/agentic-product-development-harness/src/setup/runner-upgrade.ts",process.env,a);return b.ok?{packageRoot:b.packageRoot,snapshotRoot:b.snapshotRoot,packageVersion:b.packageVersion,manifest:b.manifest,fingerprint:b.fingerprint}:null}async function dD(a){let b=await dV(a);return!!b&&(0,aF.Dr)(b).ok}async function dE(a,b){let c=await a.readRepositoryFileContent(b.owner,b.repo,aF.wJ,b.defaultBranchHead,{signal:b.signal});if(!c)return{ok:!1,status:"blocked_non_managed",reason:"Managed repository marker is missing on the default branch."};let d=(0,aF.Dr)(c);return d.ok?d.marker.createdFromPackageSnapshot?{ok:!0,marker:d.marker}:{ok:!1,status:"blocked_non_managed",reason:"Managed repository was not created from a packaged workspace snapshot."}:{ok:!1,status:"blocked_non_managed",reason:d.reason}}async function dF(a,b){let c={},d=b.paths.length,e=0;for(let f of b.paths){let g=await a.readRepositoryFileContent(b.owner,b.repo,f,b.defaultBranchHead);e+=1,null!==g&&(c[f]=dy(g)),b.onHeartbeat&&(e%5==0||e===d)&&await b.onHeartbeat({filesInspected:e,filesTotal:d,lastCompletedBatch:f})}return c}async function dG(a,b){b?.testHangAfterStage===a&&await new Promise((c,d)=>{let e=()=>{d(new de(`test hang aborted at ${a}`,"testHangAfterStage",0,a))};if(b.signal?.aborted)return void e();b.signal?.addEventListener("abort",e,{once:!0})})}async function dH(a,b,c="worker",d={}){let e="status"===c?5e3:6e4,f=[],g=a=>{f.push(a)},h=d.tracker,i=d.signal;h?.begin("embedded_snapshot_identity"),dg(i),await dG("embedded_snapshot_identity",d);let j="status"===c?await dC(i):await dB();if(h?.end(),!j)return"status"===c&&[...f],{ok:!1,result:{status:"failed",statusLabel:(0,c1.fA)("failed"),blockedReason:"Embedded workspace snapshot is unavailable."}};try{h?.begin("context_normalization"),dg(i),await dG("context_normalization",d);let{repoSlug:k,owner:l,repo:m}=await dA(a);h?.end(),h?.begin("provider_wrapper"),dg(i),await dG("provider_wrapper",d);let n=await di("getRepositoryMetadata",e,a=>b.getRepositoryMetadata(l,m,{signal:a}),g,i);if(!n)return h?.end(),"status"===c&&[...f],{ok:!1,result:{status:"failed",statusLabel:(0,c1.fA)("failed"),blockedReason:`Harness repository ${k} is not accessible.`}};let o=await di("getRepositoryDefaultBranchHead",e,a=>b.getRepositoryDefaultBranchHead(l,m,n.defaultBranch,{signal:a}),g,i);h?.end(),h?.begin("marker_parsing"),dg(i),await dG("marker_parsing",d);let p=await di("readRemoteManagedMarker",e,a=>dE(b,{owner:l,repo:m,defaultBranch:n.defaultBranch,defaultBranchHead:o,signal:a}),g,i);if(h?.end(),"status"===c&&[...f],!p.ok)return{ok:!1,result:{status:p.status,statusLabel:(0,c1.fA)(p.status),blockedReason:p.reason,availableSnapshot:dz(j.manifest)}};h?.begin("status_conversion"),dg(i),await dG("status_conversion",d);let q=(0,aF.qD)(p.marker,k,{repositoryId:n.id});if(!q.ok)return h?.end(),{ok:!1,result:{status:"blocked_non_managed",statusLabel:(0,c1.fA)("blocked_non_managed"),blockedReason:q.reason,currentSnapshot:p.marker.createdFromPackageSnapshot?{snapshotContentId:p.marker.createdFromPackageSnapshot.snapshotContentId,packageVersion:p.marker.createdFromPackageSnapshot.packageVersion,sourceCommit:p.marker.createdFromPackageSnapshot.sourceCommit}:void 0,availableSnapshot:dz(j.manifest)}};return h?.end(),{ok:!0,context:{repoSlug:k,owner:l,repo:m,repositoryId:n.id,defaultBranch:n.defaultBranch,defaultBranchHead:o,marker:p.marker,packagedSnapshot:j}}}catch(a){if("status"===c&&([...f],h?.markTimedOut()),a instanceof de||"status"===c)return{ok:!1,result:{status:"checking",statusLabel:(0,c1.fA)("checking"),degraded:!0,blockedReason:a instanceof Error?a.message:"Runner upgrade status check timed out.",retryGuidance:"Retry status shortly. GitHub did not respond within the page-status deadline.",retryAvailable:!0,unresolvedStage:h?.unresolvedStage,availableSnapshot:dz(j.manifest)}};throw a}}async function dI(a,b,c,d){let e=new Date().toISOString();await c5({operationId:b.operationId,phase:c,phaseStartedAt:e,startedAt:b.startedAt,canaryRunId:b.canaryRunId,canaryRunUrl:b.canaryRunUrl,prUrl:b.prUrl,workerHeartbeatAt:d?.workerHeartbeatAt??e,lastSuccessfulProviderCallAt:d?.lastSuccessfulProviderCallAt,filesInspected:d?.filesInspected,filesTotal:d?.filesTotal,lastCompletedBatch:d?.lastCompletedBatch,retryCount:d?.retryCount,retryable:d?.retryable,errorCode:d?.errorCode,lastCheckpoint:d?.lastCheckpoint??c,recoveryInstruction:d?.recoveryInstruction},a)}async function dJ(a,b,c){var d;let e=c8(b.marker),f=c7(b.packagedSnapshot.manifest),g=[...new Set([...Object.keys(e??{}),...Object.keys(f)])].sort(),h=await dF(a,{owner:b.owner,repo:b.repo,defaultBranchHead:b.defaultBranchHead,paths:g,onHeartbeat:c?.onHeartbeat});if(a.listRepositoryTreePaths){let c=function(a){let b=new Set(Object.keys(a.nextHashes)),c=[];for(let d of a.remoteTreePaths){if(!(d===aF.wJ||!(0,bm.o8)(d)||b.has(d)))!(dx.has(d)||(0,bm.lw)(d))&&(a.previousHashes?.[d]||c.push(d))}return[...new Set(c)].sort()}({remoteTreePaths:(await a.listRepositoryTreePaths(b.owner,b.repo,b.defaultBranchHead)).map(a=>a.path),nextHashes:f,previousHashes:e});if(c.length>0)return{ok:!1,status:"blocked_unexpected_remote",message:`Unexpected remote paths outside packaged policy: ${c.join(", ")}`}}let i=function(a){let b=function(a){if(a.previousHashes)return{hashes:a.previousHashes};let b=!!a.remoteTreeSha&&!!a.previousTreeSha&&a.remoteTreeSha===a.previousTreeSha;return a.previousSnapshotContentId&&a.remoteSnapshotContentId&&a.remoteSnapshotContentId===a.previousSnapshotContentId&&b?{hashes:a.remoteHashes}:{ok:!1,code:"legacy_unsafe",conflictPaths:[],message:"legacy_marker_without_hashes"}}(a);if("ok"in b)return b;let c=b.hashes,{replacePaths:d,deletePaths:e}=function(a){let b=[],c=[];for(let d of[...new Set([...c9(a.previousHashes),...c9(a.nextHashes)])].sort()){let e=a.previousHashes[d],f=a.nextHashes[d];if(e!==f){if(void 0===f){c.push(d);continue}b.push(d)}}return{replacePaths:b,deletePaths:c}}({previousHashes:c,nextHashes:a.nextHashes}),f=[];for(let b of[...d,...e]){let d=c[b],e=a.remoteHashes[b];if(void 0===d){void 0!==e&&f.push(b);continue}e!==d&&f.push(b)}return f.length>0?{ok:!1,code:"operator_conflicts",conflictPaths:[...new Set(f)].sort(),message:"Operator edits conflict with the packaged runner upgrade."}:{ok:!0,replacePaths:d,deletePaths:e}}({previousHashes:e,remoteHashes:h,nextHashes:f,previousSnapshotContentId:b.marker.createdFromPackageSnapshot?.snapshotContentId,remoteSnapshotContentId:b.marker.createdFromPackageSnapshot?.snapshotContentId,remoteTreeSha:b.marker.createdFromPackageSnapshot?.snapshotGitTreeSha1,previousTreeSha:b.marker.createdFromPackageSnapshot?.snapshotGitTreeSha1});if(!i.ok)return{ok:!1,status:"operator_conflicts"===i.code?"blocked_operator_conflicts":"blocked_non_managed",conflictPaths:i.conflictPaths,message:i.message};let j=dy(JSON.stringify({targetSnapshotContentId:(d={targetSnapshotContentId:b.packagedSnapshot.manifest.snapshotContentId,replacePaths:i.replacePaths,deletePaths:i.deletePaths,repositoryId:b.repositoryId}).targetSnapshotContentId,replacePaths:[...d.replacePaths].sort(),deletePaths:[...d.deletePaths].sort(),repositoryId:d.repositoryId}));return{ok:!0,previousHashes:e,remoteHashes:h,nextHashes:f,replacePaths:i.replacePaths,deletePaths:i.deletePaths,previewFingerprint:j}}async function dK(a,b){let c=await a.listPullRequests(b.owner,b.repo,{state:"open",base:b.defaultBranch});for(let a of c){let c=(0,c1.yH)(a.body);if(c&&c.repositoryId===b.repositoryId&&c.snapshotContentId===b.snapshotContentId)return{number:a.number,htmlUrl:a.htmlUrl,headSha:a.headSha}}let d=c.find(a=>a.headRef===b.branchName);return d?{number:d.number,htmlUrl:d.htmlUrl,headSha:d.headSha}:null}async function dL(a,b,c){let d=b.defaultBranchHead,e=(await a.getGitCommit(b.owner,b.repo,d)).tree.sha,f=b.packagedSnapshot.manifest,g=new Map;for(let d of c.replacePaths){let c=f.files.find(a=>a.path===d);if(!c)throw Error(`Packaged snapshot is missing ${d}.`);let e=await (0,a0.bY)({snapshotRoot:b.packagedSnapshot.snapshotRoot,path:d,expectedSha256:c.sha256}),h=await a.createGitBlob({owner:b.owner,repo:b.repo,content:e});g.set(d,h.sha)}let h=JSON.stringify((0,aF.a)({repository:b.repoSlug,repositoryId:b.repositoryId,manifest:f,snapshotCommitSha:"pending",defaultBranch:b.defaultBranch,operationId:c.operationId,pDevVersion:b.packagedSnapshot.packageVersion}),null,2),i=await a.createGitBlob({owner:b.owner,repo:b.repo,content:Buffer.from(`${h}
46
+ `,"utf8")});g.set(aF.wJ,i.sha);let j=[...c.replacePaths.map(a=>{let b=f.files.find(b=>b.path===a);return{path:a,mode:b?.mode??"100644",type:"blob",sha:g.get(a)}}),...c.deletePaths.map(a=>({path:a,mode:"100644",type:"blob",sha:null})),{path:aF.wJ,mode:"100644",type:"blob",sha:i.sha}],k=await a.createGitTree({owner:b.owner,repo:b.repo,baseTree:e,tree:j}),l=(0,a$.ig)({operationId:c.operationId,sourceCommit:f.sourceCommit}),m=await a.createGitCommit({owner:b.owner,repo:b.repo,message:`Update p-dev runner to ${f.packageVersion}`,tree:k.sha,parents:[d],author:l,committer:l}),n=null;try{n=(await a.getGitRef(b.owner,b.repo,c.branchName)).object.sha}catch{n=null}return n?await a.updateGitRef({owner:b.owner,repo:b.repo,ref:c.branchName,sha:m.sha,expectedSha:n}):a.createGitRef?await a.createGitRef({owner:b.owner,repo:b.repo,ref:c.branchName,sha:m.sha}):await a.updateGitRef({owner:b.owner,repo:b.repo,ref:c.branchName,sha:m.sha}),{commitSha:m.sha,headSha:m.sha}}async function dM(a,b,c){let d=await a.getRepositoryDefaultBranchHead(b.owner,b.repo,b.defaultBranch),e=await a.readRepositoryFileContent(b.owner,b.repo,aF.wJ,d);if(!e)return{ok:!1,message:"Production marker is missing after merge."};let f=(0,aF.Dr)(e);if(!f.ok)return{ok:!1,message:f.reason};let g=f.marker.createdFromPackageSnapshot?.snapshotContentId;if(g!==c)return{ok:!1,message:`Production marker snapshotContentId mismatch (expected ${c}, found ${g??"none"}).`};let h=c8(f.marker);if(h){for(let[a,c]of Object.entries(c7(b.packagedSnapshot.manifest)))if(h[a]!==c)return{ok:!1,message:`Production marker file hash mismatch for ${a}.`}}return{ok:!0}}async function dN(a,b){let c=Date.now();for(;Date.now()-c<b.pollTimeoutMs;){let c=await a.getWorkflowRun(b.owner,b.repo,b.runId);if(await b.onHeartbeat?.(),"completed"===c.status){if("success"===c.conclusion)return{ok:!0,run:{htmlUrl:c.htmlUrl}};return{ok:!1,message:`Configuration canary failed with conclusion ${c.conclusion??"unknown"}.`}}await new Promise(a=>setTimeout(a,b.pollIntervalMs))}return{ok:!1,message:"Configuration canary timed out."}}async function dO(a,b,c,d,e){let f=await dD(a),g=await dc(a);e?.commit();let h={...b,localManagedRepoEvidence:f,availableSnapshot:b.availableSnapshot??c,unresolvedStage:b.unresolvedStage??e?.unresolvedStage,retryAvailable:b.retryAvailable??("checking"===b.status||!0===b.degraded),debugTimings:d?e?.snapshot():b.debugTimings};return h.currentSnapshot||!g?h:{...h,currentSnapshot:{snapshotContentId:g.snapshotContentId,packageVersion:g.packageVersion,sourceCommit:g.sourceCommit},currentSnapshotCached:!0,currentSnapshotVerifiedAt:g.verifiedAt}}async function dP(a,b,c={}){let d=c.workspaceKey??a??process.cwd(),{signal:e,controller:f}=c.signal?{signal:c.signal,controller:null}:function(a){let b=dj.get(a);b&&!b.signal.aborted&&b.abort(),dj.delete(a);let c=new AbortController;return dj.set(a,c),{signal:c.signal,controller:c}}(d),g=new df,h=c.overallDeadlineMs??8e3,i=async d=>{g.begin("local_state_reads"),dg(d);let e=await c$(a),i=await dD(a);if(g.end(),e){var j;g.begin("reconciliation_enqueue"),e.lastError||(j=e.operationId,dl.has(j))||du(a),g.end(),g.begin("status_conversion");let b=function(a){if(a.lastError){let b=a.lastStatus??(a.codeUpdateComplete?"partially_updated":"failed");return{status:b,statusLabel:(0,c1.fA)(b),pendingOperationId:a.operationId,pendingPhase:a.phase,blockedReason:a.lastError,conflictPaths:a.conflictPaths,prUrl:a.prUrl,canaryRunUrl:a.canaryRunUrl,retryGuidance:a.codeUpdateComplete?"Resume the runner upgrade to finish cloud sync or canary.":"Retry or Resume the runner upgrade after reviewing the error.",retryAvailable:!0}}return{status:a.codeUpdateComplete?"partially_updated":"updating",statusLabel:(0,c1.fA)(a.codeUpdateComplete?"partially_updated":"updating"),pendingOperationId:a.operationId,pendingPhase:a.phase,prUrl:a.prUrl,canaryRunUrl:a.canaryRunUrl}}(e);return g.end(),dO(a,{...b,localManagedRepoEvidence:i},void 0,c.debugTimings,g)}g.begin("embedded_snapshot_identity"),dg(d);let k=await dC(d);g.end();let l=k?dz(k.manifest):void 0;return dk(h,d,()=>{d.aborted||f?.abort()},async d=>{let e=await dH(a,b,"status",{signal:d,tracker:g,testHangAfterStage:c.testHangAfterStage,debugTimings:c.debugTimings});if(!e.ok)return dO(a,{...e.result,localManagedRepoEvidence:i,retryAvailable:"checking"===e.result.status||!0===e.result.degraded},l,c.debugTimings,g);let{context:f}=e;g.begin("status_conversion"),dg(d);let h=dz(f.marker.createdFromPackageSnapshot?{...f.packagedSnapshot.manifest,snapshotContentId:f.marker.createdFromPackageSnapshot.snapshotContentId,packageVersion:f.marker.createdFromPackageSnapshot.packageVersion,sourceCommit:f.marker.createdFromPackageSnapshot.sourceCommit}:f.packagedSnapshot.manifest),j=new Date().toISOString();return(await dd({...h,verifiedAt:j,repoSlug:f.repoSlug},a),g.end(),h.snapshotContentId===l?.snapshotContentId)?dO(a,{status:"up_to_date",statusLabel:(0,c1.fA)("up_to_date"),currentSnapshot:h,availableSnapshot:l,localManagedRepoEvidence:i,currentSnapshotVerifiedAt:j},l,c.debugTimings,g):dO(a,{status:"update_available",statusLabel:(0,c1.fA)("update_available"),currentSnapshot:h,availableSnapshot:l,localManagedRepoEvidence:i,currentSnapshotVerifiedAt:j},l,c.debugTimings,g)},b=>dO(a,{status:"checking",statusLabel:(0,c1.fA)("checking"),degraded:!0,localManagedRepoEvidence:i,availableSnapshot:l,blockedReason:(void 0)??`runner-upgrade-status overall deadline exceeded after ${h}ms.`,retryGuidance:"Retry status shortly. GitHub did not respond within the page-status deadline.",retryAvailable:!0,unresolvedStage:b},l,c.debugTimings,g),g)};try{return await i(e)}finally{f&&dj.get(d)===f&&dj.delete(d)}}async function dQ(a,b){var c;let d=await dH(a,b);if(!d.ok)return{previewFingerprint:"",targetSnapshotContentId:"",phases:dw,blocked:!0,blockedStatus:d.result.status,message:d.result.blockedReason,impact:{replacePathCount:0,deletePathCount:0,sampleReplacePaths:[],sampleDeletePaths:[]}};let e=await dJ(b,d.context);return e.ok?{previewFingerprint:e.previewFingerprint,targetSnapshotContentId:d.context.packagedSnapshot.manifest.snapshotContentId,currentSnapshotContentId:d.context.marker.createdFromPackageSnapshot?.snapshotContentId,impact:{replacePathCount:(c={replacePaths:e.replacePaths,deletePaths:e.deletePaths}).replacePaths.length,deletePathCount:c.deletePaths.length,sampleReplacePaths:c.replacePaths.slice(0,8),sampleDeletePaths:c.deletePaths.slice(0,8)},phases:dw}:{previewFingerprint:"",targetSnapshotContentId:d.context.packagedSnapshot.manifest.snapshotContentId,currentSnapshotContentId:d.context.marker.createdFromPackageSnapshot?.snapshotContentId,phases:dw,blocked:!0,blockedStatus:e.status,conflictPaths:e.conflictPaths,message:e.message,impact:{replacePathCount:0,deletePathCount:0,sampleReplacePaths:[],sampleDeletePaths:[]}}}async function dR(a,b={}){let c=await c$(a);if(c){let a={...c,previewFingerprint:b.previewFingerprint??c.previewFingerprint};return(b.resume||c.lastError)&&(delete a.lastError,delete a.lastStatus),a}let e=await dB();if(!e)throw Error("Embedded workspace snapshot is unavailable.");let{repoSlug:f}=await dA(a),g=0,h="main";try{let b=await dV(a);if(b){let a=(0,aF.Dr)(b);a.ok&&(g=a.marker.repositoryId??g,h=a.marker.createdFromTemplate?.defaultBranch??h)}}catch{}return{operationId:(0,d.randomUUID)(),repositoryId:g,repoSlug:f,defaultBranch:h,targetSnapshotContentId:e.manifest.snapshotContentId,phase:"verifying-managed-repository",startedAt:new Date().toISOString(),previewFingerprint:b.previewFingerprint??"",syncInProgress:!1,codeUpdateComplete:!1,branchName:(0,c1.Wy)(e.manifest.snapshotContentId)}}async function dS(a,b={}){return cY(a??process.cwd(),async()=>{let c=await dR(a,b);await c_(c,a);let d=await c5({operationId:c.operationId,phase:c.phase,phaseStartedAt:new Date().toISOString(),startedAt:c.startedAt,canaryRunId:c.canaryRunId,canaryRunUrl:c.canaryRunUrl,prUrl:c.prUrl,workerHeartbeatAt:new Date().toISOString(),lastCheckpoint:c.phase},a);return dt(c.operationId,a),{apply:{operationId:c.operationId,status:"updating",phase:c.phase,previewFingerprint:c.previewFingerprint,message:"Runner upgrade accepted and queued."},progress:d}})}async function dT(a,b,c={}){return dU(a,b,c)}async function dU(a,b,c={}){let e=await c$(a),f=e?.startedAt??new Date().toISOString(),g=e?.operationId??(0,d.randomUUID)();e?await dI(a,e,e.phase,{workerHeartbeatAt:new Date().toISOString()}):(e=await dR(a,{previewFingerprint:c.previewFingerprint}),await c_(e,a),await dI(a,e,e.phase,{workerHeartbeatAt:new Date().toISOString(),lastSuccessfulProviderCallAt:void 0}));let h=await dH(a,b,"worker");if(!h.ok)return e.lastError=h.result.blockedReason,e.lastStatus=h.result.status,e.phase="verifying-managed-repository",await c_(e,a),await dI(a,e,e.phase,{retryable:!0,errorCode:"verify_managed_repository_failed"}),{operationId:g,status:h.result.status,phase:"verifying-managed-repository",previewFingerprint:e.previewFingerprint,message:h.result.blockedReason};let i=h.context;if(i.marker.createdFromPackageSnapshot&&await dd({snapshotContentId:i.marker.createdFromPackageSnapshot.snapshotContentId,packageVersion:i.marker.createdFromPackageSnapshot.packageVersion,sourceCommit:i.marker.createdFromPackageSnapshot.sourceCommit,verifiedAt:new Date().toISOString(),repoSlug:i.repoSlug},a),e.repositoryId=i.repositoryId,e.repoSlug=i.repoSlug,e.defaultBranch=i.defaultBranch,e.targetSnapshotContentId=i.packagedSnapshot.manifest.snapshotContentId,await c_(e,a),await dI(a,e,e.phase,{lastSuccessfulProviderCallAt:new Date().toISOString(),workerHeartbeatAt:new Date().toISOString()}),i.marker.createdFromPackageSnapshot?.snapshotContentId===i.packagedSnapshot.manifest.snapshotContentId&&!e.codeUpdateComplete)return await c0(a),{operationId:g,status:"up_to_date",phase:"verifying-managed-repository",previewFingerprint:e.previewFingerprint,message:"Runner is already up to date."};let j=null;if(!e.codeUpdateComplete){if(e.phase="comparing-runner-snapshots",await c_(e,a),await dI(a,e,e.phase,{workerHeartbeatAt:new Date().toISOString()}),!(j=await dJ(b,i,{onHeartbeat:async b=>{await dI(a,e,e.phase,{workerHeartbeatAt:new Date().toISOString(),lastSuccessfulProviderCallAt:new Date().toISOString(),filesInspected:b.filesInspected,filesTotal:b.filesTotal,lastCompletedBatch:b.lastCompletedBatch,lastCheckpoint:"comparing-runner-snapshots"})}})).ok)return e.phase="comparing-runner-snapshots",e.conflictPaths=j.conflictPaths,e.lastError=j.message,e.syncInProgress=!1,await c_(e,a),await dI(a,e,e.phase,{retryable:!0,errorCode:j.status}),{operationId:g,status:j.status,phase:"comparing-runner-snapshots",previewFingerprint:e.previewFingerprint,message:j.message};if(c.previewFingerprint&&c.previewFingerprint!==j.previewFingerprint)return e.lastError="Preview fingerprint mismatch; re-run preview before applying.",await c_(e,a),await dI(a,e,e.phase,{retryable:!0,errorCode:"preview_fingerprint_mismatch"}),{operationId:g,status:"failed",phase:"comparing-runner-snapshots",previewFingerprint:j.previewFingerprint,message:e.lastError}}let k=e.previewFingerprint||j?.previewFingerprint||"";e.previewFingerprint=k;let l=e.branchName??(0,c1.Wy)(i.packagedSnapshot.manifest.snapshotContentId);e.branchName=l;let m=i.packagedSnapshot.manifest.snapshotContentId;if(await c_(e,a),await dI(a,e,e.phase,{lastSuccessfulProviderCallAt:new Date().toISOString(),workerHeartbeatAt:new Date().toISOString()}),!e.codeUpdateComplete){e.phase="preparing-upgrade-commit",await c_(e,a),await dI(a,e,e.phase,{workerHeartbeatAt:new Date().toISOString()});let c=await dL(b,i,{operationId:g,branchName:l,replacePaths:j.replacePaths,deletePaths:j.deletePaths});await dI(a,e,e.phase,{lastSuccessfulProviderCallAt:new Date().toISOString(),workerHeartbeatAt:new Date().toISOString()}),e.phase="updating-managed-runner",await c_(e,a),await dI(a,e,e.phase);let d=await dK(b,{owner:i.owner,repo:i.repo,repositoryId:i.repositoryId,snapshotContentId:m,defaultBranch:i.defaultBranch,branchName:l});if(!d){let a=await b.createPullRequest({owner:i.owner,repo:i.repo,title:`Update p-dev runner to ${i.packagedSnapshot.packageVersion}`,head:l,base:i.defaultBranch,body:[(0,c1.dH)(i.repositoryId,m),"",`Updates the managed p-dev runner workspace to package ${i.packagedSnapshot.packageVersion}.`].join("\n")});d={number:a.number,htmlUrl:a.htmlUrl,headSha:c.headSha}}e.prUrl=d.htmlUrl,e.prNumber=d.number,await c_(e,a),await dI(a,e,e.phase);let f=(await b.getGitRef(i.owner,i.repo,l)).object.sha;await b.mergePullRequest(i.owner,i.repo,d.number,{mergeMethod:"squash",commitTitle:`Update p-dev runner to ${i.packagedSnapshot.packageVersion}`,expectedHeadSha:f}),e.phase="verifying-runner-on-production-branch",await c_(e,a),await dI(a,e,e.phase);let h=await dM(b,i,m);if(!h.ok)return e.lastError=h.message,e.phase="verifying-runner-on-production-branch",await c_(e,a),await dI(a,e,e.phase),{operationId:g,status:"failed",phase:e.phase,previewFingerprint:k,prUrl:e.prUrl,prNumber:e.prNumber,branchName:l,message:h.message};e.codeUpdateComplete=!0,e.phase="synchronizing-cloud-configuration",await c_(e,a),await dI(a,e,e.phase)}e.syncInProgress=!0,e.phase="synchronizing-cloud-configuration",await c_(e,a),await dI(a,e,e.phase);try{let c=await (0,cU.J)({cwd:a,provider:{checkHarnessRepoAccess:async()=>"available",listHarnessSecretStatuses:async()=>[],checkTargetWorkflowStatus:async()=>({repoAccess:"available",workflowStatus:"unknown"}),writeHarnessSecrets:async(a,c)=>{if(!b.writeHarnessSecrets)throw Error("Provider does not support writeHarnessSecrets.");return b.writeHarnessSecrets(a,c)},writeHarnessVariables:async(a,c)=>{if(!b.writeHarnessVariables)throw Error("Provider does not support writeHarnessVariables.");return b.writeHarnessVariables(a,c)},applyTargetWorkflowPr:async()=>{throw Error("Target workflow apply is not supported in runner upgrade.")}},harnessRepository:i.repoSlug});e.expectedFingerprint=c.fingerprint}catch(b){return e.lastError=b instanceof Error?b.message:"Cloud configuration sync failed.",e.syncInProgress=!1,e.phase="synchronizing-cloud-configuration",await c_(e,a),await dI(a,e,e.phase),{operationId:g,status:"partially_updated",phase:e.phase,previewFingerprint:k,prUrl:e.prUrl,prNumber:e.prNumber,branchName:l,message:e.lastError}}e.phase="running-configuration-canary",await c_(e,a),await dI(a,e,e.phase);let n=(0,d.randomUUID)();await b.dispatchWorkflow(i.owner,i.repo,c1.nE,i.defaultBranch,{canary_operation_id:n});let o=await da(b,{owner:i.owner,repo:i.repo,operationId:n,ref:i.defaultBranch,pollIntervalMs:c.canaryPollIntervalMs??2e3,pollTimeoutMs:Math.min(c.canaryPollTimeoutMs??12e4,6e4)});if(!o)return e.lastError=`Could not locate canary workflow run for operation id ${n} after workflow_dispatch (204).`,e.syncInProgress=!1,await c_(e,a),await dI(a,e,e.phase),{operationId:g,status:"partially_updated",phase:e.phase,previewFingerprint:k,prUrl:e.prUrl,prNumber:e.prNumber,branchName:l,message:e.lastError};e.canaryRunId=String(o.id);let p=await dN(b,{owner:i.owner,repo:i.repo,runId:o.id,pollIntervalMs:c.canaryPollIntervalMs??2e3,pollTimeoutMs:c.canaryPollTimeoutMs??12e4,onHeartbeat:async()=>{await dI(a,e,e.phase,{lastSuccessfulProviderCallAt:new Date().toISOString(),workerHeartbeatAt:new Date().toISOString(),lastCheckpoint:"running-configuration-canary"})}});return p.ok?(e.canaryRunUrl=p.run.htmlUrl,await cW({appliedSnapshotContentId:m,appliedAt:new Date().toISOString(),targetSnapshotContentId:m,repositoryId:i.repositoryId,lastOperationId:g,syncInProgress:!1,status:"up_to_date",canaryRunUrl:e.canaryRunUrl},a),await c0(a),await c5({operationId:g,phase:"running-configuration-canary",phaseStartedAt:new Date().toISOString(),startedAt:f,canaryRunUrl:e.canaryRunUrl,prUrl:e.prUrl,recoveryInstruction:"Runner upgrade completed successfully."},a),{operationId:g,status:"up_to_date",phase:"running-configuration-canary",previewFingerprint:k,prUrl:e.prUrl,prNumber:e.prNumber,branchName:l,canaryRunId:e.canaryRunId,canaryRunUrl:e.canaryRunUrl,message:"Runner upgrade completed successfully."}):(e.canaryRunUrl=o.htmlUrl??`https://github.com/${i.owner}/${i.repo}/actions/runs/${o.id}`,e.lastError=p.message,e.syncInProgress=!1,await c_(e,a),await dI(a,e,e.phase),{operationId:g,status:"partially_updated",phase:e.phase,previewFingerprint:k,prUrl:e.prUrl,prNumber:e.prNumber,branchName:l,canaryRunId:e.canaryRunId,canaryRunUrl:e.canaryRunUrl,message:e.lastError})}async function dV(a){let b=process.env.CANARY_MARKER_PATH??ag().join(a??process.cwd(),aF.wJ);try{return await (0,f.readFile)(b,"utf8")}catch{return null}}async function dW(a,b){return{state:await (0,cV.oQ)(a),linearTeamKeyFromConfig:b?.configSummary?.linearTeamKey}}var dX=c(96105),dY=c(71740),dZ=c(47183);function d$(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"p-dev-linear-setup.progress.json")}async function d_(a,b){let c=Date.parse(a.startedAt),d={actionId:a.actionId,phase:a.phase,phaseStartedAt:new Date().toISOString(),startedAt:a.startedAt,elapsedMs:Number.isFinite(c)?Math.max(0,Date.now()-c):0,completed:a.completed??!1,updatedAt:new Date().toISOString()},e=d$(b);await (0,f.mkdir)(ag().dirname(e),{recursive:!0});let g=`${e}.${process.pid}.${Date.now()}.tmp`;return await (0,f.writeFile)(g,`${JSON.stringify(d,null,2)}
47
+ `,"utf8"),await (0,f.rename)(g,e),d}async function d0(a){try{let b=await (0,f.readFile)(d$(a),"utf8"),c=JSON.parse(b);if("string"!=typeof c.actionId||"string"!=typeof c.phase)return null;return c}catch{return null}}async function d1(a){let b=await d0(a);return{actionId:b?.actionId??null,phase:b?.phase??null,uiPhaseLabel:b?.phase?function(a){switch(a){case"validate":return"Validating Linear plan";case"team":return"Creating or selecting team";case"project":return"Creating or selecting project";case"statuses":return"Configuring workflow statuses";case"verify":return"Verifying Linear workspace"}}(b.phase):null,phaseStartedAt:b?.phaseStartedAt??null,startedAt:b?.startedAt??null,elapsedMs:b?.elapsedMs??null,completed:b?.completed??!1}}var d2=c(68615);async function d3(a){let b=(0,k.ym)(a.cwd);try{await (0,f.access)(b.configLocal)}catch{return!1}let d=await (0,f.readFile)(b.configLocal,"utf8"),e=dX.k.parse(JSON.parse(d)),g=a.targetRepo??e.repos[0]?.targetRepo,h=a.repoConfigId??e.repos.find(a=>a.targetRepo===g)?.id??e.repos[0]?.id;if(!g||!h)return!1;let i=a.workspaceId?.trim()||e.linear?.workspaceId?.trim()||"unknown-workspace",{buildRequestedHarnessConfig:j}=await Promise.resolve().then(c.bind(c,11288)),l=j({current:e,workspaceId:i,requestedAssociations:[{workspaceId:i,teamId:a.teamId,teamKey:a.teamKey,teamName:a.teamName,projectId:a.projectId,projectName:a.projectName,targetRepo:g,repoConfigId:h}]}),{writeConfigLocal:m}=await Promise.resolve().then(c.bind(c,19965));return await m({paths:b,content:`${JSON.stringify(l,null,2)}
48
+ `,force:!0}),!0}async function d4(a){let{client:b,teamId:c,created:d,skipped:e}=a,f=async()=>{let a=await (0,dY.vy)(b,c);for(let f of(0,dZ.lS)(a)){if("create"!==f.action){f.present&&e.push(`status:${f.name}`);continue}let a=(0,G.YP)(f.name);if(a)try{await (0,dY.Iy)(b,{teamId:c,name:f.name,type:a.category}),d.push(`status:${f.name}`)}catch(a){if(!(0,dY.YC)(a)||!(await (0,dY.vy)(b,c)).find(a=>(0,dZ.kG)(a.name)===(0,dZ.kG)(f.name)))throw a;e.push(`status:${f.name}`)}}};await f();let g=await (0,dY.vy)(b,c);return(0,dZ.v8)((0,dZ.lS)(g))}async function d5(a){let b,c,d=new Date().toISOString(),e=(b,c=!1)=>d_({actionId:dZ.IW.apply.id,phase:b,startedAt:d,completed:c},a.cwd);(0,F.L6)(a.confirmed),(0,F.xp)(dZ.IW.apply.permission.scope,g.P.linearWrite.scope),await e("validate");let f=await (0,dZ.PA)(a.plan);if((0,F.Me)(a.fingerprint,f.fingerprint),f.validationError)throw Error(f.validationError);let h=(0,dY.os)(a.plan.linearApiKey),i=[],j=[],k=[];if(await e("team"),"create"===a.plan.team.mode){if(!a.plan.team.teamName||!a.plan.team.teamKey)throw Error("New Linear team requires name and key.");let c=await (0,dY.uB)(h),d=(0,dZ.nm)(c,{teamKey:a.plan.team.teamKey,teamName:a.plan.team.teamName});d?(b=d,j.push(`team:${b.key}`)):(b=await (0,dY.Db)(h,{name:a.plan.team.teamName,key:a.plan.team.teamKey}),i.push(`team:${b.key}`))}else{let a=f.selectedTeam;if(!a)throw Error("Selected Linear team is required for apply.");b=a,j.push(`team:${b.key}`)}if(await e("project"),"create"===a.plan.project.mode){if(!a.plan.project.projectName)throw Error("New Linear project requires a name.");let d=await (0,dY.gg)(h),e=(0,dZ.jn)(d,{projectName:a.plan.project.projectName,teamId:b.id});if(e)c=e,j.push(`project:${c.name}`);else{let d=a.plan.project.targetRepo?(0,dZ.TO)({baseDescription:a.plan.project.description,targetRepo:a.plan.project.targetRepo}):a.plan.project.description;c=await (0,dY.D3)(h,{name:a.plan.project.projectName,teamIds:[b.id],description:d}),i.push(`project:${c.name}`)}}else{let a=f.selectedProject;if(!a)throw Error("Selected Linear project is required for apply.");c=a,j.push(`project:${c.name}`)}await e("statuses");let l=await d4({client:h,teamId:b.id,created:i,skipped:j}),m=f.workflowStates.filter(a=>"repair"===a.action);if(m.length>0){let a=await (0,d2.TO)({client:h,teamId:b.id,entries:m});k.push(...a);let c=await (0,dY.vy)(h,b.id);l=(0,dZ.v8)((0,dZ.lS)(c))}await e("verify");let n={teamMode:a.plan.team.mode,teamId:b.id,teamKey:b.key,teamName:b.name,projectMode:a.plan.project.mode,projectId:c.id,projectName:c.name,statusCoverageComplete:l,appliedFingerprint:f.fingerprint,appliedAt:new Date().toISOString()};await (0,cV.xj)({linear:n},a.cwd);let o=await d3({cwd:a.cwd,teamId:b.id,teamKey:b.key,teamName:b.name,projectId:c.id,projectName:c.name});return await e("verify",!0),{actionId:dZ.IW.apply.id,team:b,project:c,created:i,skipped:j,repaired:k,statusCoverageComplete:l,verified:!!(b.id&&c.id&&l),fingerprint:f.fingerprint,permission:dZ.IW.apply.permission,configUpdated:o}}async function d6(a){let b=(0,k.ym)(a),c=await (0,h.Hn)(b),d=await (0,cV.oQ)(a);return{capabilities:(0,dY.P1)(),controlPlane:d,workspace:function(a){let b=a.state?.linearWorkspace,c=a.state?.linear,d=b?.teams.length??+!!c?.teamKey,e=b?.teams.reduce((a,b)=>a+b.projects.length,0)??+!!c?.projectName;return{configured:!!(d>0&&e>0),teamKey:b?.teams[0]?.teamKey??c?.teamKey,projectName:b?.teams[0]?.projects[0]?.projectName??c?.projectName,teamCount:d,projectCount:e,statusCoverageComplete:!!(b?.teams.every(a=>"healthy"===a.health)||c?.statusCoverageComplete||c?.manualComplete),requiredStatusCount:(0,G.GN)().length}}({state:d}),dispatchTriggerStatuses:(0,G.Ht)(),linearApiKeyConfigured:!!c?.presence.LINEAR_API_KEY}}var d7=c(39676),d8=c(44341),d9=c(99895),ea=c(11288);async function eb(a){let b=(0,k.ym)(a);try{await (0,f.access)(b.configLocal);let a=await (0,f.readFile)(b.configLocal,"utf8");return dX.k.parse(JSON.parse(a))}catch{return null}}async function ec(a){let b=(0,k.ym)(a.cwd),{writeConfigLocal:d}=await Promise.resolve().then(c.bind(c,19965));await d({paths:b,content:`${JSON.stringify(a.config,null,2)}
49
+ `,force:!0})}async function ed(a){let b=await (0,dY.x$)(a.client,a.projectId);if(!b)throw Error(`Linear project ${a.projectId} was not found during metadata repair.`);let c=(0,d8.Wt)(b.description,{targetRepo:a.targetRepo.replace(/^https:\/\/github\.com\//,""),productInitialization:"uninitialized"});await (0,dY.ym)(a.client,a.projectId,c)}async function ee(a){let b=await (0,dY.x$)(a.client,a.projectId);if(!b)return;let c=(0,d8.YZ)(b.description);await (0,dY.ym)(a.client,a.projectId,c)}async function ef(a){let{client:b,operation:c,created:d,skipped:e,repaired:f}=a;switch(c.type){case"add_team":e.push(`team:${c.teamKey}`);return;case"repair_team_statuses":{let a=await d4({client:b,teamId:c.teamId,created:d,skipped:e}),g=await (0,dY.vy)(b,c.teamId),h=(0,dZ.lS)(g).filter(a=>"repair"===a.action);if(h.length>0&&f.push(...await (0,d2.TO)({client:b,teamId:c.teamId,entries:h})),!a&&0===h.length)throw Error(`Required workflow statuses are incomplete for team ${c.teamKey}.`);return}case"add_project_association":e.push(`association:${c.teamId}/${c.projectId}`);return;case"repair_project_metadata":await ed({client:b,projectId:c.projectId,targetRepo:c.targetRepo}),f.push(`metadata:${c.projectId}`);return;case"detach_project_association":e.push(`detach:${c.teamId}/${c.projectId}`);return;case"detach_team":e.push(`detach-team:${c.teamKey}`);return;case"remove_project_metadata_block":await ee({client:b,projectId:c.projectId}),f.push(`metadata-removed:${c.projectId}`);return;default:return}}async function eg(a){(0,F.L6)(a.confirmed),(0,F.xp)(ea.C.apply.permission.scope,g.P.linearWrite.scope);let b=await (0,ea.b)(a.plan);if(b.validationError)throw Error(b.validationError);a.fingerprint&&(0,F.Me)(a.fingerprint,b.fingerprint);let c=await eb(a.cwd);if(!c)throw Error("Harness config is required before applying Linear workspace changes.");let d=(0,d7.Uv)(c),e=(0,d9.z3)(c),f=[],h=[],i=[],j=(0,dY.os)(a.plan.linearApiKey),k=[];try{for(let a of b.operations)await ef({client:j,operation:a,created:f,skipped:h,repaired:i}),k.push(a)}catch(c){return{actionId:ea.C.apply.id,verified:!1,fingerprint:b.fingerprint,committedFingerprint:e,operationsCompleted:k,failedOperation:b.operations[k.length]?{operation:b.operations[k.length],reason:c instanceof Error?c.message:String(c)}:void 0,evidence:(await (0,cV.oQ)(a.cwd))?.linearWorkspace??(0,d7.ay)({workspaceId:a.plan.workspaceId,workspaceName:a.plan.workspaceName,associations:d}),configUpdated:!1,permission:ea.C.apply.permission}}let l=(0,ea.buildRequestedHarnessConfig)({current:c,requestedAssociations:a.plan.requestedAssociations,workspaceId:a.plan.workspaceId});await ec({cwd:a.cwd,config:l});let m=(0,d7.Uv)(l),n=(0,d7.ay)({workspaceId:a.plan.workspaceId,workspaceName:a.plan.workspaceName,associations:m,appliedFingerprint:b.fingerprint,appliedAt:new Date().toISOString()});n.teams=n.teams.map(a=>{let b=m.filter(b=>b.teamId===a.teamId).length>0;return{...a,health:b?"healthy":"needs_repair",lastVerifiedAt:new Date().toISOString(),projects:a.projects.map(a=>({...a,health:"healthy",lastVerifiedAt:new Date().toISOString()}))}});let o=await (0,cV.oQ)(a.cwd)??{version:1};return await (0,cV.PY)({...o,version:1,linearWorkspace:n},a.cwd),{actionId:ea.C.apply.id,verified:!0,fingerprint:b.fingerprint,committedFingerprint:e,operationsCompleted:k,evidence:n,configUpdated:!0,permission:ea.C.apply.permission}}function eh(){return(0,d.randomBytes)(32).toString("hex")}function ei(a){return a.trim().replace(/\/$/,"")}function ej(a){let b=ei(a.webhookUrl);return a.webhooks.find(c=>{let d=ei(c.url);return(!a.linearTeamId||c.teamId===a.linearTeamId)&&d===b&&c.enabled&&c.resourceTypes.includes("Issue")})}async function ek(a){let b=a.operatorSecret?.trim();if(b)return{secret:b,source:"operator",manualSteps:[]};if(!a.linearApiKey?.trim())return{source:"generated",manualSteps:["Add LINEAR_API_KEY in Step 1 before automated Linear webhook setup can run.","A webhook signing secret will be generated during apply and shown once if manual copy is required."]};let c=(0,dY.os)(a.linearApiKey),d=ej({webhooks:await (0,dY.af)(c),webhookUrl:a.webhookUrl,linearTeamId:a.linearTeamId});if(d){let a=d.secret?.trim();return a?{secret:a,source:"reused-readable",matchingWebhook:{...d,secret:void 0},manualSteps:["A matching Linear Issue webhook exists. Apply will reuse its known signing secret for verification."]}:{source:"unreadable",matchingWebhook:{...d,secret:void 0},manualSteps:["A matching Linear Issue webhook exists, but its signing secret cannot be read from the Linear API.","Update the Linear webhook signing secret manually to match Vercel LINEAR_WEBHOOK_SECRET, then retry verification.","Apply will not rotate the webhook repeatedly while the secret remains unreadable."]}}return{secret:eh(),source:"generated",manualSteps:["Apply will create a Linear Issue webhook and write the signing secret to Vercel."]}}async function el(a){if(!a.linearApiKey?.trim())return{mode:"manual-copy",manualSteps:["Add LINEAR_API_KEY in Step 1 before automated Linear webhook setup can run.","A webhook signing secret will be generated during apply and shown once if manual copy is required."]};let b=await (0,dZ.Ce)({linearApiKey:a.linearApiKey,webhookUrl:a.webhookUrl,teamId:a.linearTeamId});return b.matchingWebhook?b.matchingWebhook.secret?.trim()?{mode:"automated",matchingWebhook:b.matchingWebhook,willGenerateOnApply:!1,manualSteps:["A matching Linear Issue webhook already exists. Apply will reuse its known signing secret for verification."]}:{mode:"existing-unverified",matchingWebhook:b.matchingWebhook,willGenerateOnApply:!0,manualSteps:["A matching Linear Issue webhook already exists, but its signing secret cannot be recovered.","Apply will attempt to rotate the existing webhook secret automatically once. If that fails, copy the generated secret into Linear manually."]}:{mode:"automated",willGenerateOnApply:!0,manualSteps:["Apply will create a Linear Issue webhook and write the signing secret to Vercel."]}}async function em(a){let b=ei(a.previousWebhookUrl),c=ei(a.canonicalWebhookUrl);if(!b||!c||b===c)return{attempted:!1,reconciled:!1,canonicalWebhookExists:!1,matchingPreviousWebhookFound:!1,manualSteps:[]};let d=(0,dY.os)(a.linearApiKey),e=await (0,dY.af)(d),f=ej({webhooks:e,webhookUrl:b,linearTeamId:a.linearTeamId}),g=ej({webhooks:e,webhookUrl:c,linearTeamId:a.linearTeamId});if(!f)return{attempted:!0,reconciled:!1,previousWebhookUrl:b,canonicalWebhookExists:!!g,matchingPreviousWebhookFound:!1,manualSteps:["No matching Linear Issue webhook was found at the previously stored webhook URL.","Create or update the Linear webhook manually to point at the canonical production URL, then retry verification."]};if(g)return g.id===f.id?{attempted:!0,reconciled:!0,previousWebhookId:f.id,previousWebhookUrl:b,canonicalWebhookExists:!0,matchingPreviousWebhookFound:!0,manualSteps:[]}:{attempted:!0,reconciled:!1,previousWebhookId:f.id,previousWebhookUrl:b,canonicalWebhookExists:!0,matchingPreviousWebhookFound:!0,manualSteps:["A separate Linear Issue webhook already exists at the canonical production URL.","Consolidate webhook configuration manually before retrying verification."]};try{return await (0,dY.lK)(d,{webhookId:f.id,url:c,secret:a.secret.trim()}),{attempted:!0,reconciled:!0,previousWebhookId:f.id,previousWebhookUrl:b,canonicalWebhookExists:!1,matchingPreviousWebhookFound:!0,manualSteps:[]}}catch{return{attempted:!0,reconciled:!1,previousWebhookId:f.id,previousWebhookUrl:b,canonicalWebhookExists:!1,matchingPreviousWebhookFound:!0,manualSteps:["Could not update the existing Linear Issue webhook to the canonical production URL automatically.","Update the Linear webhook URL manually to match the canonical production URL, then retry verification."]}}}async function en(a){let b=a.mutatePolicy??"setup",c=(0,dY.os)(a.linearApiKey),d=ej({webhooks:await (0,dY.af)(c),webhookUrl:a.webhookUrl,linearTeamId:a.linearTeamId});if(d){let e=d.secret?.trim();if(e===a.secret.trim())return{webhook:{...d,secret:void 0},secret:a.secret,mode:"automated",manualSteps:[]};if("verify-only"===b)return e?{webhook:{...d,secret:void 0},secret:e,mode:"automated",manualSteps:[]}:{webhook:{...d,secret:void 0},secret:a.secret,mode:"existing-unverified",manualSteps:["Matching Linear webhook exists, but its signing secret cannot be read from the Linear API.","Update the Linear webhook signing secret manually to match Vercel LINEAR_WEBHOOK_SECRET, then retry verification."]};try{return{webhook:{...await (0,dY.lK)(c,{webhookId:d.id,url:a.webhookUrl,secret:a.secret}),secret:void 0},secret:a.secret,mode:"automated",manualSteps:[]}}catch{return{webhook:{...d,secret:void 0},secret:a.secret,mode:"existing-unverified",manualSteps:["Matching Linear webhook exists, but its signing secret could not be rotated automatically.","Copy the generated webhook secret into the Linear webhook signing secret field, then retry verification."]}}}if("verify-only"===b||"verify-reconcile-url"===b)return{secret:a.secret,mode:"manual-copy",manualSteps:[`Create a Linear Issue webhook pointing at ${a.webhookUrl}.`,"Retry verification after the webhook exists and its signing secret matches Vercel."]};try{let b=await (0,dY.e0)(c,{url:a.webhookUrl,teamId:a.linearTeamId,label:"Harness webhook bridge",secret:a.secret});if(b.secret)return{webhook:{...b,secret:void 0},secret:b.secret,mode:"automated",manualSteps:[]};return{webhook:{...b,secret:void 0},secret:a.secret,mode:"manual-copy",manualSteps:["Linear webhook was created, but the signing secret was not returned by the API.","Copy the generated secret into the Linear webhook signing secret field."]}}catch{return{secret:a.secret,mode:"manual-copy",manualSteps:[`Create a Linear Issue webhook pointing at ${a.webhookUrl}.`,"Copy the generated webhook secret into Linear and confirm when complete."]}}}var eo=c(74590),ep=c(35244);async function eq(a){var b;let c=a.nowMs??Date.now(),e=function(a){try{let b=new URL(a);return{webhookHost:b.host,webhookPath:b.pathname}}catch{return{}}}(a.webhookUrl),f=JSON.stringify({action:"create",type:"Comment",webhookTimestamp:c,data:{id:"harness-setup-probe"}}),g=(b=a.secret,(0,d.createHmac)("sha256",b).update(f).digest("hex")),h=a.fetchImpl??fetch;try{let b=await h(a.webhookUrl,{method:"POST",headers:{"Content-Type":"application/json","linear-signature":g,"linear-timestamp":String(c),"linear-event":"Comment","linear-delivery":`harness-setup-probe-${c}`},body:f,redirect:"manual"});if(function(a){if(302!==a.status&&307!==a.status&&308!==a.status)return!1;let b=a.headers.get("location")??"";return/vercel\.com\/sso-api/i.test(b)}(b))return{passed:!1,statusCode:b.status,result:"protection_redirect",reason:"Vercel Deployment Protection redirected the webhook endpoint. Disable protection for /api/linear-webhook or allow public access before verifying the bridge.",probedAt:new Date(c).toISOString(),...e};let d=null;try{d=await b.json()}catch{return{passed:!1,statusCode:b.status,result:"error",reason:"Webhook endpoint did not return JSON.",probedAt:new Date(c).toISOString(),...e}}if(401===b.status)return{passed:!1,statusCode:b.status,result:"auth_failed",reason:d.error??"invalid_signature",probedAt:new Date(c).toISOString(),...e};if(404===b.status)return{passed:!1,statusCode:b.status,result:"unreachable",reason:"Webhook route was not found on the production deployment.",probedAt:new Date(c).toISOString(),...e};if(200===b.status&&!1===d.accepted&&"string"==typeof d.reason)return{passed:!0,statusCode:b.status,result:"accepted_ignored",reason:d.reason,probedAt:new Date(c).toISOString(),...e};return{passed:!1,statusCode:b.status,result:"error",reason:"Signed probe was not authentication-accepted and business-ignored.",probedAt:new Date(c).toISOString(),...e}}catch{return{passed:!1,result:"unreachable",reason:"Webhook endpoint could not be reached for signed probe verification.",probedAt:new Date(c).toISOString(),...e}}}function er(a){return!a.passed&&"auth_failed"===a.result&&"invalid_signature"===a.reason}async function es(a){let b=a.listDeployments??eo.bM,c=(await b(a.vercelToken,a.projectId,a.teamId,{state:"READY",limit:5})).find(a=>(0,eo.oN)(a));return c?.id}async function et(a){let b=a.listDeployments??eo.bM,c=a.triggerRedeploy??eo.b1,d=a.sourceDeploymentId?.trim()??await es({vercelToken:a.vercelToken,projectId:a.projectId,teamId:a.teamId,listDeployments:b});if(!d)return{status:"no_source_deployment",message:"No READY production deployment was found to redeploy. Deploy the project in Vercel before applying settings."};try{let b=await c(a.vercelToken,{projectName:a.projectName,sourceDeploymentId:d,teamId:a.teamId});return{status:"triggered",sourceDeploymentId:d,newDeploymentId:b.id,state:b.state,readyState:b.readyState,message:"Production redeploy triggered. Waiting for Vercel deployment READY."}}catch(a){return{status:"failed",sourceDeploymentId:d,message:a instanceof Error?a.message:"Vercel production redeploy request failed."}}}async function eu(a){let b=a.getDeployment??eo.V9,c=await b(a.vercelToken,a.newDeploymentId,a.teamId);return(0,eo.oN)(c)?{status:"ready",sourceDeploymentId:a.sourceDeploymentId,newDeploymentId:a.newDeploymentId,state:c.state,readyState:c.readyState,message:"Production redeploy completed and deployment is READY."}:!function(a){let b=a.readyState??a.state;return"ERROR"===b||"CANCELED"===b}(c)?Date.now()>Date.parse(a.deadlineAt)?{status:"timeout",sourceDeploymentId:a.sourceDeploymentId,newDeploymentId:a.newDeploymentId,state:c.state,readyState:c.readyState,message:"Production redeploy did not reach READY before the timeout. Retry verification after Vercel finishes building."}:{status:"building",sourceDeploymentId:a.sourceDeploymentId,newDeploymentId:a.newDeploymentId,state:c.state,readyState:c.readyState,message:"Waiting for Vercel deployment READY…"}:{status:"failed",sourceDeploymentId:a.sourceDeploymentId,newDeploymentId:a.newDeploymentId,state:c.state,readyState:c.readyState,message:`Production redeploy failed with state ${c.readyState??c.state}.`}}let ev="LINEAR_WEBHOOK_SECRET";async function ew(a){let b=a.secret.trim();if(!b)return!1;let c=(0,k.ym)(a.cwd),d=await (0,h.ed)(c);if((d?(0,h.Um)(d).values[ev]?.trim():void 0)&&!0!==a.overwriteExisting)return!1;let e=function(a,b){if(null===a)return`# Operator local setup — harness Step 3 generated secret
50
+ # Do not commit .env.local (gitignored).
51
+
52
+ ${ev}=${b}
53
+ `;let c=a.split("\n"),d=[],e=!1;for(let a of c){let c=a.trim();if(!c||c.startsWith("#")){d.push(a);continue}let f=c.indexOf("=");if(-1===f){d.push(a);continue}if(c.slice(0,f).trim()===ev){e=!0,d.push(`${ev}=${b}`);continue}d.push(a)}e||(d.length>0&&""!==d[d.length-1]&&d.push(""),d.push("# --- Harness Step 3 generated secret ---"),d.push(`${ev}=${b}`));let f=d.join("\n");return a.endsWith("\n")&&!f.endsWith("\n")&&(f+="\n"),f}(d,b);return await (0,f.writeFile)(c.envLocal,e,"utf8"),!0}var ex=c(70521);async function ey(a){let b=a.githubToken?.trim();if(!b)return{eligible:!1,source:"manual-required",message:"Add GITHUB_TOKEN in Step 1 with Contents write access to the harness dispatch repository."};let c=a.harnessProvisioningSummary?.runtimeMode==="packaged"||(0,aw.Ot)(),d=a.verifiedDispatchRepo?.trim()||(a.harnessProvisioningSummary?.verifiedSavedRepo?a.harnessProvisioningSummary.harnessDispatchRepo?.trim():void 0);if(c&&!0===a.requireVerifiedPackagedDispatchRepo&&!d)return{eligible:!1,source:"manual-required",message:"Complete Step 1 to connect a verified harness workspace before configuring the PDev automation bridge."};let e=await (0,E.z8)({cwd:a.cwd,verifiedProvisioningRepo:d});if(!e.resolved||!e.repo)return{eligible:!1,source:"manual-required",message:e.detail??"Could not resolve the harness dispatch repository. Set GITHUB_DISPATCH_REPOSITORY in Step 1."};let[f,g]=e.repo.split("/");if(!f||!g)return{eligible:!1,source:"manual-required",repository:e.repo,message:"Harness dispatch repository slug is invalid."};try{await (0,ex._u)(b);let a=new ax.jh({token:b}),c=await a.getRepository(f,g);if(c.permissions?.push!==!0&&c.permissions?.admin!==!0&&c.permissions?.maintain!==!0)return{eligible:!1,source:"manual-required",repository:e.repo,message:`Saved GITHUB_TOKEN cannot write repository contents for ${e.repo}. repository_dispatch requires Contents write access.`};return{eligible:!0,source:"saved-github-token",repository:e.repo,message:`Saved GITHUB_TOKEN can dispatch to ${e.repo}.`}}catch(b){let a=b instanceof ax.OS?`GitHub rejected dispatch token eligibility check (${b.status}).`:b instanceof Error?b.message:"GitHub dispatch token eligibility check failed.";return{eligible:!1,source:"manual-required",repository:e.repo,message:a}}}function ez(a){let b=a?.trim()??"";return b.length<1||b.length>100?{valid:!1,normalized:b,error:"Vercel project name must be 1-100 characters."}:b!==b.toLowerCase()?{valid:!1,normalized:b,error:"Vercel project name must be lowercase."}:/^[a-z0-9._-]+$/.test(b)?{valid:!0,normalized:b}:{valid:!1,normalized:b,error:"Vercel project name may only contain lowercase letters, numbers, dots, underscores, and hyphens."}}let eA={preview:{id:"preview-vercel-bridge",permission:g.P.remoteRead},apply:{id:"apply-vercel-bridge",permission:g.P.remoteSecretWrite}};function eB(a){return(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex").slice(0,16)}function eC(a){return{actionId:eA.preview.id,teamId:a.teamId,teamMode:a.teamMode,teamSlug:a.teamSlug,projectId:a.projectId,projectMode:a.projectMode,projectName:a.projectName,envWritePlan:a.envWritePlan.map(a=>({key:a.key,action:a.action,source:a.source,existingType:a.existingType,desiredType:a.desiredType})),linearWebhookSecretToken:a.willGenerateLinearWebhookSecret?"generate-on-apply":(0,ep.g)(a.linearWebhookSecretFromEnv),githubDispatchTokenToken:(0,ep.g)(a.githubDispatchTokenFromEnv??a.derivedGithubDispatchToken),harnessTeamKey:a.harnessTeamKey??a.derivedHarnessTeamKey??"",vercelTokenToken:(0,ep.g)(a.vercelToken),allowExistingProjectBridgeInstall:a.allowExistingProjectBridgeInstall}}function eD(a){return a.projectJustCreated?{message:`Project "${a.projectName}" was created in Vercel, but it has no production deployment yet.`,nextSteps:["Deploy or connect the project in Vercel so it has a production URL.","Return here, select the project under Use existing project, and apply again."]}:{message:`Project "${a.projectName}" exists in Vercel but has no production deployment yet.`,nextSteps:["Deploy the project in Vercel before applying settings.","After deployment completes, preview and apply again."]}}function eE(a){let b=a.team?.mode??"existing",c=a.project?.mode??"existing";return{...a,teamId:"existing"===b?a.team?.teamId??a.teamId:a.teamId,projectId:"existing"===c?a.project?.projectId??a.projectId:a.projectId,projectName:"create"===c?a.project?.projectName??a.projectName:a.projectName,team:a.team??{mode:"existing",teamId:a.teamId},project:a.project??{mode:"existing",projectId:a.projectId,projectName:a.projectName}}}function eF(a){let b=[],c=new Set(a.existingEnvByKey.keys()),d=b=>{let d=a.envInput?.[b]?.trim();return d?{value:d,source:"operator-input"}:"HARNESS_TEAM_KEY"===b&&a.derivedHarnessTeamKey?.trim()?{value:a.derivedHarnessTeamKey.trim(),source:"derived"}:"GITHUB_DISPATCH_TOKEN"===b&&a.derivedGithubDispatchToken?.trim()?{value:a.derivedGithubDispatchToken.trim(),source:"derived"}:"LINEAR_WEBHOOK_SECRET"===b&&a.willGenerateLinearWebhookSecret?{value:"<generated-on-apply>",source:"generated"}:c.has(b)?{value:void 0,source:"preserve-existing"}:{value:void 0,source:"missing-input"}};for(let e of H.P$){let f=d(e),g=a.existingEnvByKey.get(e),h=(0,eo.iQ)(e);if("preserve-existing"===f.source){b.push({key:e,action:"skip",source:"preserve-existing",existingType:g?.type,desiredType:h});continue}if("missing-input"===f.source||!f.value){b.push({key:e,action:"skip",source:"missing-input",desiredType:h});continue}b.push({key:e,action:c.has(e)?"update":"create",source:f.source,existingType:g?.type,desiredType:g?.type??h})}for(let d of H.ck){let e=a.envInput?.[d]?.trim(),f="GITHUB_DISPATCH_REPOSITORY"===d?a.derivedGithubDispatchRepository?.trim():void 0,g=e??f??H.vC[d],h=a.existingEnvByKey.get(d),i=(0,eo.iQ)(d);if(!g){b.push({key:d,action:"skip",source:"missing-input",desiredType:i});continue}if(c.has(d)){b.push({key:d,action:"skip",source:"preserve-existing",existingType:h?.type,desiredType:i});continue}b.push({key:d,action:"create",source:e?"operator-input":f?"derived":"default",desiredType:i})}return b}function eG(a){let b=a.envInput?.[a.key]?.trim();return b||("HARNESS_TEAM_KEY"===a.key&&a.derivedHarnessTeamKey?.trim()?a.derivedHarnessTeamKey.trim():"GITHUB_DISPATCH_TOKEN"===a.key&&a.derivedGithubDispatchToken?.trim()?a.derivedGithubDispatchToken.trim():"GITHUB_DISPATCH_REPOSITORY"===a.key&&a.derivedGithubDispatchRepository?.trim()?a.derivedGithubDispatchRepository.trim():"LINEAR_WEBHOOK_SECRET"===a.key&&a.generatedLinearWebhookSecret?.trim()?a.generatedLinearWebhookSecret.trim():a.key in H.vC?H.vC[a.key]:void 0)}async function eH(a){let b,c,d=eE(a);if(!d.vercelToken.trim())return{actionId:eA.preview.id,teams:[],projects:[],deploymentStatus:"missing",endpointReachable:!1,envWritePlan:[],requiredEnvPresence:{LINEAR_WEBHOOK_SECRET:"missing",GITHUB_DISPATCH_TOKEN:"missing",HARNESS_TEAM_KEY:"missing"},linearWebhookVerified:!1,readiness:(0,H.s5)({}),manualSteps:["Add VERCEL_TOKEN in Step 1 before configuring Vercel settings."],fingerprint:eB({invalid:"missing-vercel-token"}),permission:eA.preview.permission,validationError:"VERCEL_TOKEN is required for Vercel settings preview."};let e=function(a){let b=eE(a);if(b.team?.mode==="create"){if(!b.team.teamSlug?.trim())return"New Vercel team requires a team slug."}else b.teamId||b.team?.teamId;if(b.project?.mode==="create"){let a=ez(b.project.projectName??b.projectName);if(!a.valid)return a.error}else if(!b.projectId?.trim())return"Vercel project is required."}(d);if(e)return{actionId:eA.preview.id,teams:[],projects:[],deploymentStatus:"missing",endpointReachable:!1,envWritePlan:[],requiredEnvPresence:{LINEAR_WEBHOOK_SECRET:"missing",GITHUB_DISPATCH_TOKEN:"missing",HARNESS_TEAM_KEY:"missing"},linearWebhookVerified:!1,readiness:(0,H.s5)({}),manualSteps:[e],fingerprint:eB({invalid:"invalid-selection"}),permission:eA.preview.permission,validationError:e};let f=await (0,eo.dk)(d.vercelToken),g=d.team?.mode==="create"?(0,eo.wH)(f,d.team.teamSlug??"")?.id:d.teamId?.trim()?d.teamId:void 0,h=await (0,eo.Eb)(d.vercelToken,g),i=d.project?.mode==="existing"?h.find(a=>a.id===d.projectId)??h.find(a=>a.id===d.project?.projectId):(0,eo.MA)(h,d.project?.projectName??"");if(i||d.project?.mode!=="create"||(i=void 0),!i){let a=d.project?.mode==="create"?[`Project "${d.project?.projectName}" will be created during apply if it does not already exist.`]:["Select or enter the Vercel project for automation and preview checks."],b=d.willGenerateLinearWebhookSecret??!d.envInput?.LINEAR_WEBHOOK_SECRET?.trim(),c=d.project?.mode==="create"?eF({existingEnvByKey:new Map,envInput:d.envInput,derivedHarnessTeamKey:d.derivedHarnessTeamKey,derivedGithubDispatchToken:d.derivedGithubDispatchToken,derivedGithubDispatchRepository:d.derivedGithubDispatchRepository,willGenerateLinearWebhookSecret:b}):[],e=d.envInput?.GITHUB_DISPATCH_TOKEN?.trim()?"operator-input":d.derivedGithubDispatchToken?.trim()?"saved-github-token":"missing",i=eC({teamId:g,teamMode:d.team?.mode,teamSlug:d.team?.teamSlug,projectId:d.project?.projectName??"",projectMode:d.project?.mode,projectName:d.project?.projectName,envWritePlan:c,willGenerateLinearWebhookSecret:b,linearWebhookSecretFromEnv:d.envInput?.LINEAR_WEBHOOK_SECRET,githubDispatchTokenFromEnv:d.envInput?.GITHUB_DISPATCH_TOKEN,derivedGithubDispatchToken:d.derivedGithubDispatchToken,harnessTeamKey:d.envInput?.HARNESS_TEAM_KEY,derivedHarnessTeamKey:d.derivedHarnessTeamKey,vercelToken:d.vercelToken,allowExistingProjectBridgeInstall:d.allowExistingProjectBridgeInstall});return{actionId:eA.preview.id,teams:f,projects:h,deploymentStatus:d.project?.mode==="create"?"project-will-be-created":"missing",endpointReachable:!1,envWritePlan:c,requiredEnvPresence:{LINEAR_WEBHOOK_SECRET:"missing",GITHUB_DISPATCH_TOKEN:"missing",HARNESS_TEAM_KEY:"missing"},linearWebhookVerified:!1,readiness:(0,H.s5)({}),manualSteps:a,signedProbeVerified:!1,linearWebhookSecretMode:d.project?.mode==="create"?"manual-copy":void 0,githubDispatchSource:e,fingerprint:d.project?.mode==="create"?eB(i):eB({invalid:"missing-project",teamId:g,teamMode:d.team?.mode,teamSlug:d.team?.teamSlug,projectMode:d.project?.mode,projectName:d.project?.projectName}),permission:eA.preview.permission,validationError:d.project?.mode==="create"?void 0:"Vercel project is required."}}let j=await (0,eo.dQ)({vercelToken:d.vercelToken,projectId:i.id,teamId:g,preferredDeploymentId:d.preferredProductionDeploymentId}),k=j?.productionUrl,l=j?.webhookUrl,m=l?"ready":"missing",n=l?void 0:eD({projectName:i.name,projectJustCreated:d.project?.mode==="create"}),o=l?await (0,eo._i)(l):{reachable:!1},p=await (0,eo.A3)(d.vercelToken,i.id,g),q=new Map(p.map(a=>[a.key,a])),r=(0,eo.FR)(p),s=!1,t=[];if(d.team?.mode!=="create"||g||t.push(`Team "${d.team.teamSlug}" will be created during apply if it does not already exist.`),d.linearApiKey&&l){let a=await (0,dZ.Ce)({linearApiKey:d.linearApiKey,webhookUrl:l,teamId:d.linearTeamId});b=(c=await el({linearApiKey:d.linearApiKey,webhookUrl:l,linearTeamId:d.linearTeamId})).mode,s=!1,"existing-unverified"===c.mode&&(s=!1),t.push(...a.manualSteps,...c.manualSteps)}else l?t.push("After Vercel env vars are configured, create or verify the Linear Issue webhook."):t.push(n?.message??"No production deployment was found for the selected Vercel project yet. Deploy the project before automation checks can pass.",...n?.nextSteps??[]),b="manual-copy";let u=d.willGenerateLinearWebhookSecret??c?.willGenerateOnApply??!d.envInput?.LINEAR_WEBHOOK_SECRET?.trim(),v=eF({existingEnvByKey:q,envInput:d.envInput,derivedHarnessTeamKey:d.derivedHarnessTeamKey,derivedGithubDispatchToken:d.derivedGithubDispatchToken,derivedGithubDispatchRepository:d.derivedGithubDispatchRepository,willGenerateLinearWebhookSecret:u}),w=d.envInput?.GITHUB_DISPATCH_TOKEN?.trim()?"operator-input":d.derivedGithubDispatchToken?.trim()?"saved-github-token":"missing",x=(0,H.s5)({projectId:i.id,productionUrl:k,webhookUrl:l,endpointReachable:o.reachable,requiredEnvPresence:r,linearWebhookVerified:s,signedProbeVerified:!1,deploymentRedeployRequired:!1}),y=eB(eC({teamId:g,teamMode:d.team?.mode,teamSlug:d.team?.teamSlug,projectId:i.id,projectMode:d.project?.mode,projectName:d.project?.projectName,envWritePlan:v,willGenerateLinearWebhookSecret:u,linearWebhookSecretFromEnv:d.envInput?.LINEAR_WEBHOOK_SECRET,githubDispatchTokenFromEnv:d.envInput?.GITHUB_DISPATCH_TOKEN,derivedGithubDispatchToken:d.derivedGithubDispatchToken,harnessTeamKey:d.envInput?.HARNESS_TEAM_KEY,derivedHarnessTeamKey:d.derivedHarnessTeamKey,vercelToken:d.vercelToken,allowExistingProjectBridgeInstall:d.allowExistingProjectBridgeInstall}));return{actionId:eA.preview.id,teams:f,projects:h,selectedProject:i,productionUrl:k,webhookUrl:l,productionUrlSource:j?.source,canonicalDeploymentId:j?.deploymentId,deploymentStatus:m,deploymentRequired:n,endpointReachable:o.reachable,endpointStatusCode:o.statusCode,envWritePlan:v,requiredEnvPresence:r,linearWebhookVerified:s,signedProbeVerified:!1,deploymentRedeployRequired:!1,linearWebhookSecretMode:b,githubDispatchSource:w,readiness:x,manualSteps:t,fingerprint:y,permission:eA.preview.permission}}let eI=/LINEAR_WEBHOOK_SECRET|GITHUB_TOKEN|LINEAR_API_KEY|VERCEL_TOKEN|GITHUB_DISPATCH_TOKEN|linear-signature|signature/i;function eJ(a){return eI.test(a)?"[redacted]":a}function eK(a){console.log(`[setup:vercel-bridge] ${JSON.stringify(function(a){let b={event:"vercel_bridge_setup",...a};return a.setupBlockedMessage&&(b.setupBlockedMessage=eJ(a.setupBlockedMessage)),a.setupBlockedNextSteps&&(b.setupBlockedNextSteps=a.setupBlockedNextSteps.map(a=>eJ(a))),a.message&&(b.message=eJ(a.message)),b}(a))}`)}let eL="PDEV_BRIDGE_PROJECT_MARKER",eM=String.raw`
54
+ const { createHmac, timingSafeEqual } = require("node:crypto");
55
+
56
+ function json(res, status, body) {
57
+ res.statusCode = status;
58
+ res.setHeader("Content-Type", "application/json");
59
+ res.end(JSON.stringify(body));
60
+ }
61
+
62
+ async function readRawBody(req) {
63
+ const chunks = [];
64
+ for await (const chunk of req) {
65
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
66
+ }
67
+ return Buffer.concat(chunks).toString("utf8");
68
+ }
69
+
70
+ function getHeader(req, name) {
71
+ const value = req.headers[name.toLowerCase()] || req.headers[name];
72
+ return Array.isArray(value) ? value[0] || null : value || null;
73
+ }
74
+
75
+ function computeSignature(secret, rawBody) {
76
+ return createHmac("sha256", secret).update(rawBody).digest("hex");
77
+ }
78
+
79
+ function signatureMatches(secret, rawBody, signatureHeader) {
80
+ if (!signatureHeader || !/^[0-9a-f]+$/i.test(signatureHeader)) {
81
+ return false;
82
+ }
83
+ const computed = Buffer.from(computeSignature(secret, rawBody), "hex");
84
+ const provided = Buffer.from(signatureHeader, "hex");
85
+ return computed.length === provided.length && timingSafeEqual(computed, provided);
86
+ }
87
+
88
+ function parseTimestampMs(value) {
89
+ if (typeof value === "number" && Number.isFinite(value)) {
90
+ return value;
91
+ }
92
+ if (typeof value === "string" && value.trim() !== "") {
93
+ const parsed = Number(value);
94
+ return Number.isFinite(parsed) ? parsed : null;
95
+ }
96
+ return null;
97
+ }
98
+
99
+ function timestampOk(payloadTimestamp, headerTimestamp) {
100
+ const toleranceMs = Number(process.env.LINEAR_WEBHOOK_TIMESTAMP_TOLERANCE_MS || 60000);
101
+ const now = Date.now();
102
+ return [payloadTimestamp, headerTimestamp]
103
+ .filter((value) => value !== null)
104
+ .some((value) => Math.abs(now - value) <= toleranceMs);
105
+ }
106
+
107
+ async function dispatchToGitHub(payload) {
108
+ const repository = process.env.GITHUB_DISPATCH_REPOSITORY;
109
+ const token = process.env.GITHUB_DISPATCH_TOKEN;
110
+ if (!repository || !token) {
111
+ throw new Error("missing_dispatch_configuration");
112
+ }
113
+ const eventType = process.env.GITHUB_DISPATCH_EVENT_TYPE || "linear_issue_event";
114
+ const response = await fetch("https://api.github.com/repos/" + repository + "/dispatches", {
115
+ method: "POST",
116
+ headers: {
117
+ Accept: "application/vnd.github+json",
118
+ Authorization: "Bearer " + token,
119
+ "Content-Type": "application/json",
120
+ "X-GitHub-Api-Version": "2022-11-28",
121
+ },
122
+ body: JSON.stringify({
123
+ event_type: eventType,
124
+ client_payload: payload,
125
+ }),
126
+ });
127
+ if (!response.ok) {
128
+ throw new Error("github_dispatch_" + response.status);
129
+ }
130
+ }
131
+
132
+ module.exports = async function handler(req, res) {
133
+ if ((req.method || "GET") !== "POST") {
134
+ return json(res, 405, { error: "method_not_allowed" });
135
+ }
136
+
137
+ const secret = process.env.LINEAR_WEBHOOK_SECRET;
138
+ if (!secret) {
139
+ return json(res, 500, { error: "dispatch_failed" });
140
+ }
141
+
142
+ const rawBody = await readRawBody(req);
143
+ if (!signatureMatches(secret, rawBody, getHeader(req, "linear-signature"))) {
144
+ return json(res, 401, { error: "invalid_signature" });
145
+ }
146
+
147
+ let payload;
148
+ try {
149
+ payload = JSON.parse(rawBody);
150
+ } catch {
151
+ return json(res, 401, { error: "invalid_signature" });
152
+ }
153
+
154
+ if (
155
+ !timestampOk(
156
+ parseTimestampMs(payload && payload.webhookTimestamp),
157
+ parseTimestampMs(getHeader(req, "linear-timestamp")),
158
+ )
159
+ ) {
160
+ return json(res, 401, { error: "timestamp_out_of_tolerance" });
161
+ }
162
+
163
+ if (payload.type !== "Issue" || !payload.data || !payload.data.identifier) {
164
+ return json(res, 200, { accepted: false, reason: "ignored_event" });
165
+ }
166
+
167
+ const issueKey = payload.data.identifier;
168
+ const teamKey = process.env.HARNESS_TEAM_KEY;
169
+ if (teamKey && !issueKey.startsWith(teamKey + "-")) {
170
+ return json(res, 200, { accepted: false, reason: "team_key_mismatch" });
171
+ }
172
+
173
+ try {
174
+ await dispatchToGitHub({
175
+ issueKey,
176
+ issueId: payload.data.id,
177
+ issueUrl: payload.data.url,
178
+ action: payload.action,
179
+ statusName: payload.data.state && payload.data.state.name,
180
+ linearDeliveryId: getHeader(req, "linear-delivery"),
181
+ linearWebhookId: getHeader(req, "linear-webhook-id"),
182
+ receivedAt: new Date().toISOString(),
183
+ });
184
+ } catch {
185
+ return json(res, 500, { error: "dispatch_failed" });
186
+ }
187
+
188
+ return json(res, 200, { accepted: true, dispatched: true, issueKey });
189
+ };
190
+ `.trimStart();async function eN(a){if((0,eo.oN)(a.deployment))return"ready";let b=a.sleep??(a=>new Promise(b=>setTimeout(b,a))),c=a.pollIntervalMs??5e3,d=a.timeoutMs??3e5,e=Date.now()+d;for(;Date.now()<e;){let d=await (0,eo.V9)(a.vercelToken,a.deployment.id,a.teamId);if((0,eo.oN)(d))return"ready";let e=d.readyState??d.state;if("ERROR"===e||"CANCELED"===e)return"failed";await b(c)}return"timeout"}async function eO(a){let b;try{b=await (0,eo.dK)(a.vercelToken,{projectName:a.projectName,teamId:a.teamId,target:"production",files:[{file:"api/linear-webhook.js",data:eM,encoding:"utf-8"},{file:"package.json",data:JSON.stringify({type:"commonjs"},null,2),encoding:"utf-8"},{file:"vercel.json",data:JSON.stringify({functions:{"api/linear-webhook.js":{maxDuration:10}}},null,2),encoding:"utf-8"}],projectSettings:{framework:null,buildCommand:null,installCommand:null}})}catch(a){return{status:"failed",source:"artifact",message:a instanceof Error?a.message:"Vercel bridge artifact deployment failed."}}let c=await eN({vercelToken:a.vercelToken,deployment:b,teamId:a.teamId,pollIntervalMs:a.pollIntervalMs,timeoutMs:a.timeoutMs,sleep:a.sleep});return{status:c,source:"artifact",deploymentId:b.id,deploymentUrl:b.url,state:b.state,readyState:b.readyState,message:"ready"===c?"Vercel bridge artifact deployment reached READY.":"Vercel bridge artifact deployment did not reach READY."}}async function eP(a){let b;try{b=await (0,eo.dK)(a.vercelToken,{projectName:a.projectName,teamId:a.teamId,target:"production"})}catch(a){return{status:"failed",source:"git",message:a instanceof Error?a.message:"Vercel git deployment failed."}}let c=await eN({vercelToken:a.vercelToken,deployment:b,teamId:a.teamId,pollIntervalMs:a.pollIntervalMs,timeoutMs:a.timeoutMs,sleep:a.sleep});return{status:c,source:"git",deploymentId:b.id,deploymentUrl:b.url,state:b.state,readyState:b.readyState,message:"ready"===c?"Vercel git deployment reached READY.":"Vercel git deployment did not reach READY."}}async function eQ(a){if("git"===a.preferredSource){let b=await eP(a);if("ready"===b.status)return b}return eO(a)}async function eR(a){let b=a.repository?.trim();if(!b)return{source:"artifact",reason:"missing_harness_repository"};let c=await (0,eo.u_)(a.vercelToken,{repository:b,teamId:a.teamId});return c.accessible?{source:"git",gitRepository:{type:"github",repo:b}}:{source:"artifact",reason:c.reason}}async function eS(a){let b=eE(a.plan);if(b.team?.mode!=="create"){let c=b.teamId?.trim()?b.teamId:void 0,d=await (0,eo.dk)(b.vercelToken),e=c?d.find(a=>a.id===c):void 0;return e?(a.reused.push(`team:${e.slug}`),{teamId:e.id,teamName:e.name,team:{id:e.id,name:e.name,outcome:"reused"}}):{teamId:c}}let c=b.team.teamSlug?.trim();if(!c)throw Error("New Vercel team requires a team slug.");let d=await (0,eo.dk)(b.vercelToken),e=(0,eo.wH)(d,c);if(e)return a.reused.push(`team:${e.slug}`),{teamId:e.id,teamName:e.name,team:{id:e.id,name:e.name,outcome:"reused"}};let f=await (0,eo.ln)(b.vercelToken,{slug:c,name:b.team.teamName});return a.created.push(`team:${f.slug}`),{teamId:f.id,teamName:f.name,team:{id:f.id,name:f.name,outcome:"created"}}}async function eT(a){let b=eE(a.plan),c=await (0,eo.Eb)(b.vercelToken,a.teamId);if(b.project?.mode==="existing"){let d=b.projectId??b.project.projectId,e=c.find(a=>a.id===d);if(!e)throw Error("Selected Vercel project is required for apply.");return a.reused.push(`project:${e.name}`),{project:e,projectResult:{id:e.id,name:e.name,outcome:"reused"},preferredDeploymentSource:"artifact"}}let d=ez(b.project?.projectName??b.projectName);if(!d.valid)throw Error(d.error);let e=d.normalized,f=(0,eo.MA)(c,e);if(f)return a.reused.push(`project:${f.name}`),{project:f,projectResult:{id:f.id,name:f.name,outcome:"reused"},preferredDeploymentSource:"artifact"};let g=await eR({vercelToken:b.vercelToken,teamId:a.teamId,repository:b.derivedGithubDispatchRepository}),h=await (0,eo.P4)(b.vercelToken,{name:e,teamId:a.teamId,gitRepository:g.gitRepository});return a.created.push(`project:${h.name}`),{project:h,projectResult:{id:h.id,name:h.name,outcome:"created"},preferredDeploymentSource:g.source}}function eU(){return{message:"No READY production deployment was found to redeploy after env var changes.",nextSteps:["Deploy the project in Vercel so it has a production deployment.","Return here and apply Vercel settings again."]}}async function eV(a){let b=await (0,eo.A3)(a.vercelToken,a.projectId,a.teamId);return a.allowExistingProjectBridgeInstall||b.some(a=>a.key===eL)?{allowed:!0,envVars:b}:{allowed:!1,envVars:b,setupBlocked:{message:"PDev will not install the automation bridge into an existing Vercel project unless it is already marked as PDev-managed or you explicitly confirm bridge installation for that project.",nextSteps:["Create a dedicated Vercel bridge project with Create new project.","Or rerun apply with allowExistingProjectBridgeInstall after confirming this project may host the PDev bridge."]}}}async function eW(a){a.existingEnv.find(a=>a.key===eL)||(await (0,eo.wI)(a.vercelToken,{projectId:a.projectId,teamId:a.teamId,key:eL,value:"p-dev-managed"}),a.writtenEnvKeys.push(eL))}async function eX(a){var b,c,e;let f=[{phase:"writing_env_vars",status:a.baseResult.writtenEnvKeys.length>0?"completed":"failed",message:"Writing Vercel env vars…"},{phase:"verifying_webhook",status:"failed",message:"Initial signed probe failed due to stale deployment."}],g=a.baseResult.writtenEnvKeys.length>0,h=a.signedProbe;if(!g||!er(h))return{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!1,productionRedeployStatus:"not_triggered",orchestrationSteps:f.slice(0,1)};let i=await (0,cV.oQ)(a.applyInput.cwd),j=i?.vercel?.redeployVerification??a.priorSelection.redeployVerification;if(j?.newDeploymentId&&j.fingerprint===a.fingerprint&&!["verified","verify_failed","failed","timeout","no_source_deployment"].includes(j.status))return f.push({phase:"redeploying_production",status:"completed",message:"Redeploying production so new env vars take effect…"}),{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!0,productionRedeployStatus:"building"===j.status?"building":"triggered",setupPending:!0,pollActionId:j.actionId,orchestrationSteps:f};let k=await es({vercelToken:a.vercelToken,projectId:a.projectId,teamId:a.teamId});if(!((b={writtenEnvKeys:a.baseResult.writtenEnvKeys,signedProbe:h,sourceDeploymentId:k}).writtenEnvKeys.length>0&&er(b.signedProbe)&&b.sourceDeploymentId?.trim()))return k?{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!1,productionRedeployStatus:"not_triggered",orchestrationSteps:f.slice(0,1)}:{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!1,productionRedeployStatus:"no_source_deployment",setupBlocked:eU(),orchestrationSteps:f};let l=await et({vercelToken:a.vercelToken,projectId:a.projectId,projectName:a.projectName,teamId:a.teamId,sourceDeploymentId:k});if("triggered"!==l.status||!l.newDeploymentId){f.push({phase:"redeploying_production",status:"failed",message:l.message??"Redeploying production so new env vars take effect…"});let b="no_source_deployment"===l.status?eU():{message:(c=l.status,e=l.message,"timeout"===c?e??"Automatic production redeploy timed out before READY. Redeploy production in Vercel, then use Apply Vercel Settings again.":"failed"===c?e??"Automatic production redeploy failed. Redeploy production in Vercel, then use Apply Vercel Settings again.":"Redeploy production in Vercel, then use Apply Vercel Settings again."),nextSteps:["Redeploy production in Vercel manually if needed.","Use Apply Vercel Settings again to restart verification."]};return eK({phase:"blocked",actionId:eA.apply.id,pollStatus:l.status,projectId:a.projectId,fingerprint:a.fingerprint,setupBlockedMessage:b.message,setupBlockedNextSteps:b.nextSteps}),{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!1,productionRedeployStatus:l.status,setupBlocked:b,orchestrationSteps:f}}let m=function(a){let b=new Date().toISOString();return{actionId:`vercel-redeploy-${(0,d.randomUUID)()}`,projectId:a.projectId,projectName:a.projectName,teamId:a.teamId,webhookUrl:a.webhookUrl,fingerprint:a.fingerprint,fingerprintInputs:a.fingerprintInputs,candidateSecretSource:a.candidateSecretSource,sourceDeploymentId:a.sourceDeploymentId,newDeploymentId:a.newDeploymentId,status:"triggered",startedAt:b,updatedAt:b,deadlineAt:new Date(Date.now()+3e5).toISOString(),verifyAttempted:!1,phase:"triggered",verificationAttemptCount:0,maxVerificationAttempts:5,message:a.message??"Production redeploy triggered. Waiting for Vercel deployment READY.",writtenEnvKeys:a.writtenEnvKeys,skippedEnvKeys:a.skippedEnvKeys}}({projectId:a.projectId,projectName:a.projectName,teamId:a.teamId,webhookUrl:a.webhookUrl,fingerprint:a.fingerprint,fingerprintInputs:a.fingerprintInputs,candidateSecretSource:a.baseResult.candidateSecretSource,sourceDeploymentId:l.sourceDeploymentId,newDeploymentId:l.newDeploymentId,message:l.message,writtenEnvKeys:a.baseResult.writtenEnvKeys,skippedEnvKeys:a.baseResult.skippedEnvKeys});return await (0,cV.xj)({vercel:{...a.priorSelection,redeployVerification:m}},a.applyInput.cwd),eK({phase:"redeploy_trigger",actionId:m.actionId,pollStatus:"triggered",projectId:a.projectId,projectName:a.projectName,teamId:a.teamId,fingerprint:a.fingerprint,candidateSecretSource:a.baseResult.candidateSecretSource}),f.push({phase:"redeploying_production",status:"completed",message:"Redeploying production so new env vars take effect…"}),{...a.baseResult,envVarsWritten:g,signedProbeInitialResult:h,signedProbe:h,productionRedeployTriggered:!0,productionRedeployStatus:"triggered",setupPending:!0,pollActionId:m.actionId,orchestrationSteps:f}}async function eY(a){var b,c;let e,f;(0,F.L6)(a.confirmed),(0,F.xp)(eA.apply.permission.scope,g.P.remoteSecretWrite.scope);let h=eE(a.plan);eK({phase:"apply_start",actionId:eA.apply.id,verifyOnly:!0===a.verifyOnly,fingerprint:a.fingerprint,projectId:h.projectId,projectName:h.projectName,teamId:h.teamId});let i=await eH(h);if((0,F.Me)(a.fingerprint,i.fingerprint),i.validationError)throw Error(i.validationError);if(!0!==a.verifyOnly){let b=await (0,ex.tl)({cwd:a.cwd,key:"GITHUB_TOKEN"}),c=await ey({githubToken:b,cwd:a.cwd,verifiedDispatchRepo:h.derivedGithubDispatchRepository,requireVerifiedPackagedDispatchRepo:!0});if(!c.eligible)return eK({phase:"blocked",actionId:eA.apply.id,setupBlockedMessage:c.message,fingerprint:a.fingerprint}),{actionId:eA.apply.id,status:"applied",projectId:h.projectId??"",projectName:h.projectName??"",writtenEnvKeys:[],skippedEnvKeys:[],linearWebhookSetup:{mode:"manual-copy",manualSteps:[]},signedProbeVerified:!1,deploymentRedeployRequired:!1,verified:!1,fingerprint:i.fingerprint,permission:eA.apply.permission,setupBlocked:{message:c.message,nextSteps:["Update GITHUB_TOKEN in Step 1 with Contents write access to the harness dispatch repository."]}}}let k=[],l=[],m=await eS({plan:h,created:k,reused:l}),n=await eT({plan:{...h,teamId:m.teamId,projectId:h.project?.mode==="existing"?h.projectId??h.project?.projectId:void 0},teamId:m.teamId,created:k,reused:l}),o={...h,teamId:m.teamId,projectId:n.project.id,projectName:n.project.name,team:{mode:"existing",teamId:m.teamId??""},project:{mode:"existing",projectId:n.project.id,projectName:n.project.name}},p=await eH(o);if(p.validationError)throw Error(p.validationError);if(!p.selectedProject)throw Error("Vercel project must be selected before apply.");let q="created"===n.projectResult.outcome,r=[];if(!p.webhookUrl){let b=q?{allowed:!0,envVars:await (0,eo.A3)(h.vercelToken,p.selectedProject.id,m.teamId),setupBlocked:void 0}:await eV({vercelToken:h.vercelToken,projectId:p.selectedProject.id,teamId:m.teamId,allowExistingProjectBridgeInstall:h.allowExistingProjectBridgeInstall});if(!b.allowed)return eK({phase:"blocked",actionId:eA.apply.id,projectId:p.selectedProject.id,projectName:p.selectedProject.name,fingerprint:p.fingerprint,setupBlockedMessage:b.setupBlocked?.message,setupBlockedNextSteps:b.setupBlocked?.nextSteps}),{actionId:eA.apply.id,status:"applied",projectId:p.selectedProject.id,projectName:p.selectedProject.name,team:m.team,project:n.projectResult,writtenEnvKeys:[],skippedEnvKeys:[],linearWebhookSetup:{mode:"manual-copy",manualSteps:b.setupBlocked?.nextSteps??[]},verified:!1,signedProbeVerified:!1,deploymentRedeployRequired:!1,fingerprint:p.fingerprint,permission:eA.apply.permission,setupBlocked:b.setupBlocked};e=h.envInput?.LINEAR_WEBHOOK_SECRET?.trim()??eh(),h.envInput?.LINEAR_WEBHOOK_SECRET?.trim()||await ew({cwd:a.cwd,secret:e});let c=new Map(b.envVars.map(a=>[a.key,a])),d=[];for(let a of p.envWritePlan){if("skip"===a.action){d.push(a.key);continue}let b=eG({key:a.key,envInput:h.envInput,derivedHarnessTeamKey:h.derivedHarnessTeamKey,derivedGithubDispatchToken:h.derivedGithubDispatchToken,derivedGithubDispatchRepository:h.derivedGithubDispatchRepository,generatedLinearWebhookSecret:e});if(!b?.trim()){d.push(a.key);continue}await (0,eo.wI)(h.vercelToken,{projectId:p.selectedProject.id,teamId:m.teamId,key:a.key,value:b.trim(),existingEnv:c.get(a.key)}),r.push(a.key)}await eW({vercelToken:h.vercelToken,projectId:p.selectedProject.id,teamId:m.teamId,existingEnv:b.envVars,writtenEnvKeys:r});let f=await eQ({vercelToken:h.vercelToken,projectName:p.selectedProject.name,teamId:m.teamId,preferredSource:n.preferredDeploymentSource});if("ready"!==f.status||!f.deploymentId)return{actionId:eA.apply.id,status:"applied",projectId:p.selectedProject.id,projectName:p.selectedProject.name,team:m.team,project:n.projectResult,writtenEnvKeys:r,skippedEnvKeys:d,linearWebhookSetup:{mode:"manual-copy",manualSteps:[f.message??"Vercel bridge deployment did not reach READY before verification."]},verified:!1,signedProbeVerified:!1,deploymentRedeployRequired:!1,productionRedeployStatus:"timeout"===f.status?"timeout":"failed",fingerprint:p.fingerprint,permission:eA.apply.permission,setupBlocked:{message:f.message??"Vercel bridge deployment did not reach READY before verification.",nextSteps:["Check the Vercel deployment logs for the bridge project.","Apply Vercel settings again after the deployment reaches READY."]},orchestrationSteps:[{phase:"writing_env_vars",status:"completed",message:"Writing Vercel env vars before deployment."},{phase:"deploying_bridge",status:"failed",message:f.message??"Creating the production bridge deployment failed."}]};let g=await (0,eo.dQ)({vercelToken:h.vercelToken,projectId:p.selectedProject.id,teamId:m.teamId,preferredDeploymentId:f.deploymentId});if(!g?.webhookUrl)throw Error("Vercel bridge deployment reached READY but no production URL was resolved.");let i=await (0,eo._i)(g.webhookUrl);p={...p,productionUrl:g.productionUrl,webhookUrl:g.webhookUrl,productionUrlSource:g.source,canonicalDeploymentId:g.deploymentId,deploymentStatus:"ready",endpointReachable:i.reachable,endpointStatusCode:i.statusCode,deploymentRequired:void 0}}if(!p.webhookUrl){let a=p.selectedProject;if(!a)throw Error("Vercel project must be selected before apply.");let b=eD({projectName:a.name,projectJustCreated:q});return{actionId:eA.apply.id,status:"deployment-required",projectId:a.id,projectName:a.name,team:m.team,project:n.projectResult,writtenEnvKeys:[],skippedEnvKeys:[],linearWebhookSetup:{mode:"manual-copy",manualSteps:b.nextSteps},deploymentRequired:{...b,projectJustCreated:q},verified:!1,signedProbeVerified:!1,deploymentRedeployRequired:!1,fingerprint:p.fingerprint,permission:eA.apply.permission}}let s=p.selectedProject;if(!s)throw Error("Vercel project must be selected before apply.");let t=await (0,cV.oQ)(a.cwd),u=!!(t?.vercel?.redeployVerification?.newDeploymentId&&"verified"!==t.vercel.redeployVerification.status&&"verify_failed"!==t.vercel.redeployVerification.status&&"failed"!==t.vercel.redeployVerification.status&&"timeout"!==t.vercel.redeployVerification.status&&"no_source_deployment"!==t.vercel.redeployVerification.status),v=!0===a.verifyOnly||!!(!u&&t?.vercel?.deploymentRedeployRequired&&t.vercel.projectId===s.id&&t.vercel.appliedFingerprint===p.fingerprint),w=t?.vercel?.webhookUrl?.trim(),x=p.webhookUrl?.trim(),y=!!(v&&w&&x&&w!==x),z=await ek({linearApiKey:h.linearApiKey,webhookUrl:p.webhookUrl,linearTeamId:h.linearTeamId,operatorSecret:h.envInput?.LINEAR_WEBHOOK_SECRET}),A=h.verificationLinearWebhookSecret?.trim(),B=!!(A&&(v||h.preserveGeneratedWebhookSecretFingerprint)),C=e??z.secret;B?C=A:e||C?.trim()||"generated"!==z.source||(C=eh()),e||"unreadable"!==z.source||v||C?.trim()||(C=eh()),!v&&!e&&C?.trim()&&!B&&("generated"===z.source||"unreadable"===z.source)&&await ew({cwd:a.cwd,secret:C});let D={mode:"manual-copy",manualSteps:z.manualSteps,manualCopySecret:void 0};if(y&&C?.trim()&&B&&h.linearApiKey?.trim()&&(f=await em({linearApiKey:h.linearApiKey,linearTeamId:h.linearTeamId,previousWebhookUrl:w,canonicalWebhookUrl:x,secret:C}),eK({phase:"linear_webhook_url_reconcile",actionId:eA.apply.id,verifyOnly:!0===a.verifyOnly,projectId:s.id,fingerprint:p.fingerprint,webhookUrlDrift:!0,reconciliationAttempted:f.attempted,reconciliationSucceeded:f.reconciled,matchingPreviousWebhookFound:f.matchingPreviousWebhookFound,canonicalWebhookExists:f.canonicalWebhookExists})),"unreadable"===z.source&&v)D={mode:"existing-unverified",manualSteps:z.manualSteps,manualCopySecret:void 0};else if(f?.attempted&&!f.reconciled)D={mode:"existing-unverified",manualSteps:f.manualSteps,manualCopySecret:void 0};else if(C?.trim())if(h.linearApiKey?.trim()){let a=await en({linearApiKey:h.linearApiKey,webhookUrl:p.webhookUrl,linearTeamId:h.linearTeamId,secret:C,mutatePolicy:v?"verify-only":"setup"});D={mode:a.mode,manualSteps:a.manualSteps,manualCopySecret:"automated"===a.mode?void 0:a.secret},B||(C=a.secret)}else D={mode:"manual-copy",manualSteps:["Add LINEAR_API_KEY in Step 1 before automated Linear webhook setup can run.","Copy the generated webhook secret into Linear when prompted."],manualCopySecret:C};else D={mode:"manual-copy",manualSteps:z.manualSteps,manualCopySecret:void 0};let E=(0,j.Gn)({linearApiKey:h.linearApiKey,githubToken:h.envInput?.GITHUB_DISPATCH_TOKEN??h.derivedGithubDispatchToken});C?.trim()&&E.push(C),h.envInput?.GITHUB_DISPATCH_TOKEN&&E.push(h.envInput.GITHUB_DISPATCH_TOKEN),h.derivedGithubDispatchToken&&E.push(h.derivedGithubDispatchToken);let G=new Map((await (0,eo.A3)(h.vercelToken,s.id,m.teamId)).map(a=>[a.key,a])),I=!v&&!!C?.trim(),J=[...r],K=[];for(let a of p.envWritePlan){if(r.includes(a.key)||"skip"===a.action||"LINEAR_WEBHOOK_SECRET"===a.key&&!I){K.push(a.key);continue}let b=eG({key:a.key,envInput:h.envInput,derivedHarnessTeamKey:h.derivedHarnessTeamKey,derivedGithubDispatchToken:h.derivedGithubDispatchToken,derivedGithubDispatchRepository:h.derivedGithubDispatchRepository,generatedLinearWebhookSecret:C});if(!b?.trim()){K.push(a.key);continue}let c=G.get(a.key);try{await (0,eo.wI)(h.vercelToken,{projectId:s.id,teamId:m.teamId,key:a.key,value:b.trim(),existingEnv:c})}catch(a){throw a instanceof eo.c9,a}J.push(a.key)}if(I&&!J.includes("LINEAR_WEBHOOK_SECRET")&&C?.trim()){let a=G.get("LINEAR_WEBHOOK_SECRET");await (0,eo.wI)(h.vercelToken,{projectId:s.id,teamId:m.teamId,key:"LINEAR_WEBHOOK_SECRET",value:C,existingEnv:a}),J.push("LINEAR_WEBHOOK_SECRET")}let L=await (0,eo.A3)(h.vercelToken,s.id,m.teamId),M=(0,eo.FR)(L),N=!1;if(h.linearApiKey?.trim()){let a=await (0,dZ.Ce)({linearApiKey:h.linearApiKey,webhookUrl:p.webhookUrl,teamId:h.linearTeamId});N="automated"===D.mode&&!!a.matchingWebhook}let O=(c={projectId:s.id,linearTeamId:h.linearTeamId,productionUrl:p.productionUrl,webhookUrl:p.webhookUrl,envWritePlan:p.envWritePlan,candidateSecretToken:(b=C,(0,ep.g)(b))},(0,d.createHash)("sha256").update(JSON.stringify({projectId:c.projectId??"",linearTeamId:c.linearTeamId??"",productionUrl:c.productionUrl??"",webhookUrl:c.webhookUrl??"",envWritePlan:(c.envWritePlan??[]).map(a=>({key:a.key,action:a.action,source:a.source})),candidateSecretToken:c.candidateSecretToken??""})).digest("hex").slice(0,16)),P=C?.trim()?await eq({webhookUrl:p.webhookUrl,secret:C}):{passed:!1,result:"error",reason:"missing_candidate_secret",probedAt:new Date().toISOString()},Q=P.passed,R=J.length>0&&!Q;eK({phase:"signed_probe",actionId:eA.apply.id,verifyOnly:!0===a.verifyOnly,projectId:s.id,projectName:s.name,teamId:m.teamId,fingerprint:p.fingerprint,candidateSecretSource:z.source,hasLocalWebhookSecret:!!(h.verificationLinearWebhookSecret?.trim()||h.envInput?.LINEAR_WEBHOOK_SECRET?.trim()),envWritePlan:p.envWritePlan.map(a=>({key:a.key,action:a.action,source:a.source})),signedProbeResult:P.result,signedProbeReason:P.reason,signedProbeStatusCode:P.statusCode});let S=H.P$.every(a=>"present"===M[a])&&p.endpointReachable&&N&&Q&&!R,T={teamId:m.teamId,teamName:m.teamName,projectId:s.id,projectName:s.name,productionUrl:p.productionUrl??"",webhookUrl:p.webhookUrl??"",endpointReachable:p.endpointReachable,envVarPresence:M,linearWebhookVerified:N,signedProbeVerified:Q,signedProbe:P,verificationFingerprint:O,deploymentRedeployRequired:R,appliedFingerprint:p.fingerprint,appliedAt:new Date().toISOString(),manualComplete:a.manualComplete};await (0,cV.xj)({vercel:T},a.cwd);let U=JSON.stringify({actionId:eA.apply.id,writtenEnvKeys:J,skippedEnvKeys:K,linearWebhookSetup:{mode:D.mode,manualSteps:D.manualSteps},signedProbeVerified:Q,verified:S});for(let a of E)if(U.includes(a))throw Error("Vercel bridge apply result leaked secret material");let V={actionId:eA.apply.id,status:"applied",projectId:s.id,projectName:s.name,team:m.team,project:n.projectResult,writtenEnvKeys:J,skippedEnvKeys:K,linearWebhookSetup:D,signedProbeVerified:Q,signedProbeReason:P.reason,signedProbe:P,deploymentRedeployRequired:R,verificationRetry:v,candidateSecretSource:z.source,verified:S,fingerprint:p.fingerprint,permission:eA.apply.permission,envVarsWritten:J.length>0,productionRedeployTriggered:!1,productionRedeployStatus:"not_triggered"};return a.verifyOnly||v||!R||V.verified?(eK({phase:"apply_complete",actionId:eA.apply.id,verifyOnly:!0===a.verifyOnly,projectId:s.id,projectName:s.name,teamId:m.teamId,fingerprint:p.fingerprint,signedProbeResult:P.result,signedProbeReason:P.reason,pollStatus:V.verified?"verified":void 0}),V):(eK({phase:"redeploy_trigger",actionId:eA.apply.id,projectId:s.id,projectName:s.name,teamId:m.teamId,fingerprint:p.fingerprint,candidateSecretSource:z.source,signedProbeResult:P.result,signedProbeReason:P.reason}),eX({applyInput:a,baseResult:V,signedProbe:P,vercelToken:h.vercelToken,projectId:s.id,projectName:s.name,teamId:m.teamId,webhookUrl:p.webhookUrl??"",fingerprint:p.fingerprint,fingerprintInputs:eC({teamId:m.teamId,teamMode:o.team?.mode,teamSlug:o.team?.teamSlug,projectId:s.id,projectMode:o.project?.mode,projectName:o.project?.projectName,envWritePlan:p.envWritePlan,willGenerateLinearWebhookSecret:o.willGenerateLinearWebhookSecret??!o.envInput?.LINEAR_WEBHOOK_SECRET?.trim(),linearWebhookSecretFromEnv:o.envInput?.LINEAR_WEBHOOK_SECRET,githubDispatchTokenFromEnv:o.envInput?.GITHUB_DISPATCH_TOKEN,derivedGithubDispatchToken:o.derivedGithubDispatchToken,harnessTeamKey:o.envInput?.HARNESS_TEAM_KEY,derivedHarnessTeamKey:o.derivedHarnessTeamKey,vercelToken:h.vercelToken,allowExistingProjectBridgeInstall:o.allowExistingProjectBridgeInstall}),priorSelection:T}))}async function eZ(a){try{let b=await (0,f.readFile)(a,"utf8");return JSON.parse(b)}catch{return null}}async function e$(a){let b=await eZ(a);if(!b?.claimedAt)return!0;let c=Date.now()-Date.parse(b.claimedAt);return Number.isNaN(c)||c>3e4}async function e_(a){let b=(0,k.ym)(a);await (0,f.mkdir)(b.harnessDir,{recursive:!0});let c=function(a){let b=(0,k.ym)(a);return ag().join(b.harnessDir,"control-plane-setup.lock")}(a),e=(0,d.randomUUID)(),g=Date.now()+5e3;for(;Date.now()<g;)try{let a=await (0,f.open)(c,"wx"),b={ownerId:e,claimedAt:new Date().toISOString()};return await a.writeFile(JSON.stringify(b),"utf8"),await a.close(),{ownerId:e,lockPath:c,release:async()=>{let a=await eZ(c);a?.ownerId===e&&await (0,f.unlink)(c).catch(()=>void 0)}}}catch(a){if("EEXIST"===a.code){if(await e$(c)){await (0,f.unlink)(c).catch(()=>void 0);continue}await new Promise(a=>setTimeout(a,50));continue}throw a}throw Error("Timed out waiting for control-plane setup state lock.")}async function e0(a,b){let c=await e_(a);try{return await b()}finally{await c.release()}}let e1=new Set(["failed","timeout","no_source_deployment","verify_failed","verified"]);function e2(a){if(!a?.result)return"terminal";switch(a.result){case"unreachable":case"error":case"auth_failed":return"retryable";default:return"terminal"}}function e3(a){let b=a.pending.maxVerificationAttempts??5,c=a.pending.verificationAttemptCount;if(void 0===c)if(a.pending.verifyAttempted){let d=e2(a.signedProbe??void 0);c="verify_failed"===a.pending.status&&"retryable"===d&&Date.parse(a.pending.deadlineAt)>Date.now()?1:b}else c=0;let d={...a.pending,maxVerificationAttempts:b,verificationAttemptCount:c,phase:function(a){if(a.phase)return a.phase;switch(a.status){case"triggered":return"triggered";case"building":return"building";case"ready":return a.verificationClaim?"verifying":a.nextVerificationAttemptAt?"retry_wait":"waiting_for_ready";case"verified":return"verified";case"verify_failed":case"failed":case"timeout":case"no_source_deployment":return"terminal";default:return"waiting_for_ready"}}(a.pending)};return d.verifyAttempted&&c>=b&&"verify_failed"===d.status&&(d.phase="terminal"),d}function e4(a){var b;return!!a&&(b=a.status,!e1.has(b))}function e5(a,b=Date.now()){return"due"===e6(a,b)}function e6(a,b=Date.now()){let c=e3({pending:a}),d=c.verificationAttemptCount??0,e=c.maxVerificationAttempts??5;return"ready"!==c.status?"not_ready":d>=e?"budget_exhausted":Date.parse(c.deadlineAt)<=b?"deadline_expired":c.verificationClaim&&!function(a,b=Date.now()){let c=a.verificationClaim;if(!c?.claimedAt)return!0;let d=b-Date.parse(c.claimedAt);return Number.isNaN(d)||d>3e4}(c,b)?"claim_in_flight":c.nextVerificationAttemptAt?Date.parse(c.nextVerificationAttemptAt)<=b?"due":"waiting_for_schedule":"due"}function e7(a){let b=e3({pending:a}),c=b.verificationAttemptCount??0,d=b.maxVerificationAttempts??5;switch(b.phase){case"triggered":return"Redeploying production so new env vars take effect…";case"building":case"waiting_for_ready":return"Waiting for the production deployment…";case"verifying":return"Verifying the signed webhook…";case"retry_wait":return`Retrying signed webhook verification (attempt ${Math.min(c+1,d)} of ${d})…`;case"verified":return"Vercel settings verified.";case"terminal":return b.blockedMessage??b.message??"Vercel bridge verification requires operator action.";default:return b.message??"Applying Vercel settings…"}}function e8(a){switch(a){case"triggered":return"triggered";case"building":return"building";case"ready":return"waiting_for_ready";default:return"terminal"}}function e9(a){return{message:`Cannot resume redeploy verification because ${a} is missing from saved setup.`,nextSteps:["Return to Step 1 and save the required token in .env.local.","Then use Apply Vercel Settings again to restart verification."]}}async function fa(a){let b=a.state.vercel;if(!b)return{ok:!1,setupBlocked:e9("saved Vercel selection")};let c=await (0,ex.tl)({cwd:a.cwd,key:"VERCEL_TOKEN"})??"";if(!c.trim())return{ok:!1,setupBlocked:e9("VERCEL_TOKEN")};let d=await (0,ex.tl)({cwd:a.cwd,key:"LINEAR_API_KEY"}),e=await (0,ex.tl)({cwd:a.cwd,key:"GITHUB_TOKEN"}),f=await ey({githubToken:e,cwd:a.cwd}),g=a.pending.teamId??b.teamId,h=a.pending.projectId,i=a.pending.projectName,j=await (0,ex.tl)({cwd:a.cwd,key:"LINEAR_WEBHOOK_SECRET"}),k="generated"===a.pending.candidateSecretSource||"unreadable"===a.pending.candidateSecretSource||!!j?.trim();return{ok:!0,plan:eE({vercelToken:c,linearApiKey:d,teamId:g,projectId:h,projectName:i,preferredProductionDeploymentId:a.pending.newDeploymentId,team:{mode:"existing",teamId:g??""},project:{mode:"existing",projectId:h,projectName:i},linearTeamId:a.state.linear?.teamId,derivedHarnessTeamKey:a.state.linear?.teamKey,derivedGithubDispatchToken:f.eligible&&e?e:void 0,willGenerateLinearWebhookSecret:!!k||!j?.trim(),verificationLinearWebhookSecret:j,preserveGeneratedWebhookSecretFingerprint:k}),vercelToken:c}}async function fb(a){let b=await fa(a);if(!b.ok)return b;let c=await eH(b.plan);return c.fingerprint!==a.pending.fingerprint?(eK({phase:"poll_reconstruct",actionId:a.pending.actionId,expectedFingerprint:a.pending.fingerprint,reconstructedFingerprint:c.fingerprint,fingerprintMatch:!1,projectId:a.pending.projectId,projectName:a.pending.projectName,teamId:a.pending.teamId}),{ok:!1,setupBlocked:{message:"Persisted Step 3 setup context no longer matches the in-progress redeploy verification.",nextSteps:["Use Apply Vercel Settings again to regenerate preview and restart verification.","If the problem persists, confirm team and project selections match the original apply."]}}):{ok:!0,plan:b.plan,vercelToken:b.vercelToken}}function fc(a){let b=a?.retryReason?.trim()?` (${a.retryReason})`:"";return{message:a?.exhausted?`Signed webhook verification failed after 5 attempts${b}.`:`Production redeploy completed, but signed webhook delivery verification still failed${b}.`,nextSteps:["Use Apply Vercel Settings again after confirming the Linear webhook signing secret matches Vercel production.","If verification still fails, confirm the production deployment and webhook URL are correct."]}}function fd(a,b){return"timeout"===a?b??"Automatic production redeploy timed out before READY. Redeploy production in Vercel, then use Apply Vercel Settings again.":"failed"===a?b??"Automatic production redeploy failed. Redeploy production in Vercel, then use Apply Vercel Settings again.":"Redeploy production in Vercel, then use Apply Vercel Settings again."}function fe(a){let b=a.pending??a.vercel.redeployVerification,c=b?e3({pending:b,signedProbe:a.vercel.signedProbe}):void 0,d=a.retryApply,e=!!c,f=c?function(a){switch(a){case"triggered":return"triggered";case"building":return"building";case"ready":case"verified":case"verify_failed":return"ready";case"failed":return"failed";case"timeout":return"timeout";case"no_source_deployment":return"no_source_deployment";default:return"not_triggered"}}(c.status):"not_triggered",h=a.setupBlocked??(c?.blockedMessage?{message:c.blockedMessage,nextSteps:c.blockedNextSteps??[]}:void 0),i=a.vercel.signedProbe,j=d?.signedProbe,k=d?.signedProbeVerified??a.vercel.signedProbeVerified??!1,l=c?.phase,m=c?e7(c):void 0;return{actionId:c?.actionId??"vercel-bridge-apply",status:"applied",projectId:a.vercel.projectId,projectName:a.vercel.projectName,writtenEnvKeys:a.pending?.writtenEnvKeys??[],skippedEnvKeys:a.pending?.skippedEnvKeys??[],linearWebhookSetup:d?.linearWebhookSetup??{mode:"automated",manualSteps:[]},signedProbeVerified:k,signedProbeReason:d?.signedProbeReason??i?.reason,signedProbe:j??i,deploymentRedeployRequired:a.vercel.deploymentRedeployRequired??!1,verificationRetry:d?.verificationRetry,verified:d?.verified??k,fingerprint:c?.fingerprint??a.vercel.appliedFingerprint??"",permission:d?.permission??g.P.remoteSecretWrite,envVarsWritten:!0,signedProbeInitialResult:i,signedProbeRetryResult:j,productionRedeployTriggered:e,productionRedeployStatus:f,setupBlocked:h,setupPending:!!c&&e4(c),pollActionId:c?.actionId,orchestrationSteps:function(a){let b=[{phase:"writing_env_vars",status:"completed",message:"Writing Vercel env vars…"}];if(!a.pending)return b;let c=e3({pending:a.pending});return"no_source_deployment"===c.status?b.push({phase:"redeploying_production",status:"failed",message:c.message??"No READY production deployment was found to redeploy after env var changes."}):(b.push({phase:"redeploying_production",status:"failed"===c.status||"timeout"===c.status?"failed":"completed",message:e7({...c,phase:"building"===c.phase||"triggered"===c.phase?c.phase:"waiting_for_ready"})}),("verifying"===c.phase||"retry_wait"===c.phase||"verify_failed"===c.status||"verified"===c.status||a.apply?.verificationRetry)&&b.push({phase:"verifying_webhook",status:"verified"===c.status||a.apply?.signedProbeVerified?"completed":"verify_failed"===c.status?"failed":"active",message:e7({...c,phase:"retry_wait"===c.phase||"verifying"===c.phase?c.phase:"verifying"})})),b}({pending:c,apply:d}),orchestrationPhase:l,orchestrationStatusMessage:m,verificationAttemptCount:c?.verificationAttemptCount,maxVerificationAttempts:c?.maxVerificationAttempts}}async function ff(a){return e0(a.cwd,async()=>{let b=await (0,cV.oQ)(a.cwd),c=b?.vercel?.redeployVerification;if(!c||c.actionId!==a.pending.actionId)return null;let e=e3({pending:c,signedProbe:b?.vercel?.signedProbe});if(!e5(e))return null;let f=(e.verificationAttemptCount??0)+1,g={attemptNumber:f,claimId:(0,d.randomUUID)(),claimedAt:new Date().toISOString()},h={...e,status:"ready",phase:"verifying",verificationClaim:g,verifyAttempted:!0,updatedAt:new Date().toISOString()};return eK({phase:"verify_claim",actionId:e.actionId,pollStatus:"ready",verifyAttempted:!0,verifyOnly:!0,verificationAttemptCount:f,maxVerificationAttempts:e.maxVerificationAttempts??5,verificationClaimId:g?.claimId,projectId:e.projectId,fingerprint:e.fingerprint,candidateSecretSource:e.candidateSecretSource}),await (0,cV.xj)({vercel:{redeployVerification:h}},a.cwd),h})}async function fg(a){await e0(a.cwd,async()=>{let b=await (0,cV.oQ)(a.cwd);if(!b?.vercel)return;let c=new Date().toISOString(),d={...a.pending,status:a.status,phase:a.phase??a.pending.phase,updatedAt:c,completedAt:a.clearPending?c:a.pending.completedAt??c,message:a.message??a.pending.message,blockedMessage:a.setupBlocked?.message,blockedNextSteps:a.setupBlocked?.nextSteps,verificationAttemptCount:a.verificationAttemptCount??a.pending.verificationAttemptCount,verificationClaim:void 0,nextVerificationAttemptAt:a.nextVerificationAttemptAt,lastVerificationAttemptAt:c,lastVerificationFailureReason:a.lastVerificationFailureReason,lastVerificationFailureClass:a.lastVerificationFailureClass};await (0,cV.xj)({vercel:{...a.vercelPatch,redeployVerification:a.clearPending?void 0:d}},a.cwd)})}async function fh(a){return e0(a.cwd,async()=>{let b=await (0,cV.oQ)(a.cwd),c=b?.vercel?.redeployVerification;if(!c||c.actionId!==a.pending.actionId)return a.pending;let d={...c,status:a.status,phase:e8(a.status),updatedAt:new Date().toISOString(),message:a.message??c.message};return await (0,cV.xj)({vercel:{redeployVerification:d}},a.cwd),d})}async function fi(a){let b=a.retryResult.signedProbe,c=e2(b),d=a.claimed.verificationClaim?.attemptNumber??(a.claimed.verificationAttemptCount??0)+1,e=a.claimed.maxVerificationAttempts??5,f=d>=e;if("retryable"===c&&!f){eK({phase:"verify_retry",actionId:a.claimed.actionId,pollStatus:"ready",verifyAttempted:!0,verifyOnly:!0,verificationAttemptCount:d,maxVerificationAttempts:e,verificationFailureClass:c,signedProbeResult:b?.result,signedProbeReason:a.retryResult.signedProbeReason,signedProbeStatusCode:b?.statusCode,fingerprint:a.claimed.fingerprint}),await fg({cwd:a.cwd,pending:a.claimed,status:"ready",phase:"retry_wait",message:e7({...a.claimed,phase:"retry_wait",verificationAttemptCount:d}),verificationAttemptCount:d,nextVerificationAttemptAt:new Date(Date.now()+5e3).toISOString(),lastVerificationFailureReason:a.retryResult.signedProbeReason,lastVerificationFailureClass:c,vercelPatch:a.vercelPatch});let f=await (0,cV.oQ)(a.cwd);return fe({vercel:f.vercel,pending:f.vercel.redeployVerification,retryApply:{...a.retryResult,verificationRetry:!0}})}let g=fc({retryReason:a.retryResult.signedProbeReason,exhausted:f});eK({phase:"blocked",actionId:a.claimed.actionId,pollStatus:"verify_failed",verificationAttemptCount:d,maxVerificationAttempts:e,verificationFailureClass:c,signedProbeResult:b?.result,signedProbeReason:a.retryResult.signedProbeReason,signedProbeStatusCode:b?.statusCode,setupBlockedMessage:g.message,setupBlockedNextSteps:g.nextSteps,fingerprint:a.claimed.fingerprint}),await fg({cwd:a.cwd,pending:a.claimed,status:"verify_failed",phase:"terminal",message:g.message,setupBlocked:g,verificationAttemptCount:d,lastVerificationFailureReason:a.retryResult.signedProbeReason,lastVerificationFailureClass:c,vercelPatch:a.vercelPatch});let h=await (0,cV.oQ)(a.cwd);return fe({vercel:h.vercel,pending:h.vercel.redeployVerification,retryApply:{...a.retryResult,verificationRetry:!0},setupBlocked:g})}async function fj(a){var b;let c=await (0,cV.oQ)(a.cwd),d=c?.vercel,e=d?.redeployVerification;if(!d||!e)throw Error("No pending Vercel redeploy verification is in progress.");let f=e3({pending:e,signedProbe:d.signedProbe});if(a.actionId&&f.actionId!==a.actionId)throw Error("Pending Vercel redeploy verification action was not found.");if(b=f.status,e1.has(b))return eK({phase:"poll",actionId:f.actionId,pollStatus:f.status,orchestrationPhase:f.phase,verificationAttemptCount:f.verificationAttemptCount,maxVerificationAttempts:f.maxVerificationAttempts,projectId:f.projectId,projectName:f.projectName,teamId:f.teamId,fingerprint:f.fingerprint,setupBlockedMessage:f.blockedMessage}),fe({vercel:d,pending:f,setupBlocked:f.blockedMessage?{message:f.blockedMessage,nextSteps:f.blockedNextSteps??[]}:void 0});if(!f.newDeploymentId)throw Error("Pending Vercel redeploy verification is missing deployment id.");let g=await fb({cwd:a.cwd,state:c,pending:f});if(!g.ok){eK({phase:"blocked",actionId:f.actionId,pollStatus:"verify_failed",orchestrationPhase:"terminal",setupBlockedMessage:g.setupBlocked.message,setupBlockedNextSteps:g.setupBlocked.nextSteps,projectId:f.projectId,fingerprint:f.fingerprint}),await fg({cwd:a.cwd,pending:f,status:"verify_failed",phase:"terminal",message:g.setupBlocked.message,setupBlocked:g.setupBlocked});let b=await (0,cV.oQ)(a.cwd),c=b.vercel.redeployVerification;return fe({vercel:b.vercel,pending:c,setupBlocked:g.setupBlocked})}let h=await eu({vercelToken:g.vercelToken,newDeploymentId:f.newDeploymentId,teamId:f.teamId,sourceDeploymentId:f.sourceDeploymentId,deadlineAt:f.deadlineAt});if("failed"===h.status||"timeout"===h.status){let b={message:fd(h.status,h.message),nextSteps:["Redeploy production in Vercel manually if needed.","Use Apply Vercel Settings again to restart verification."]};eK({phase:"blocked",actionId:f.actionId,pollStatus:h.status,orchestrationPhase:"terminal",setupBlockedMessage:b.message,setupBlockedNextSteps:b.nextSteps,projectId:f.projectId,fingerprint:f.fingerprint}),await fg({cwd:a.cwd,pending:f,status:h.status,phase:"terminal",message:h.message,setupBlocked:b});let c=await (0,cV.oQ)(a.cwd),d=c.vercel.redeployVerification;return fe({vercel:c.vercel,pending:d,setupBlocked:b})}if("building"===h.status||"triggered"===h.status){eK({phase:"poll",actionId:f.actionId,pollStatus:h.status,orchestrationPhase:e8(h.status),verificationAttemptCount:f.verificationAttemptCount,projectId:f.projectId,fingerprint:f.fingerprint});let b=await fh({cwd:a.cwd,vercel:d,pending:f,status:h.status,message:h.message});return fe({vercel:{...d,redeployVerification:b},pending:b})}if("ready"!==h.status)return fe({vercel:d,pending:f});let i=await fh({cwd:a.cwd,vercel:d,pending:f,status:"ready",message:h.message});if(!e5(i)){let b=e6(i);if("deadline_expired"===b||"budget_exhausted"===b){let c="budget_exhausted"===b?fc({exhausted:!0}):{message:fd("timeout"),nextSteps:["Redeploy production in Vercel manually if needed.","Use Apply Vercel Settings again to restart verification."]};await fg({cwd:a.cwd,pending:i,status:"deadline_expired"===b?"timeout":"verify_failed",phase:"terminal",message:c.message,setupBlocked:c});let d=await (0,cV.oQ)(a.cwd),e=d.vercel.redeployVerification;return fe({vercel:d.vercel,pending:e,setupBlocked:c})}return fe({vercel:{...d,redeployVerification:i},pending:i})}let j=await ff({cwd:a.cwd,pending:i});if(!j){let b=await (0,cV.oQ)(a.cwd);return fe({vercel:b.vercel,pending:b.vercel.redeployVerification})}eK({phase:"verify_retry",actionId:j.actionId,pollStatus:"ready",verifyAttempted:!0,verifyOnly:!0,verificationAttemptCount:j.verificationClaim?.attemptNumber,maxVerificationAttempts:j.maxVerificationAttempts??5,verificationClaimId:j.verificationClaim?.claimId,projectId:j.projectId,fingerprint:j.fingerprint,candidateSecretSource:j.candidateSecretSource});let k=await eY({plan:g.plan,confirmed:!0,fingerprint:f.fingerprint,verifyOnly:!0,cwd:a.cwd}),l=await (0,cV.oQ)(a.cwd),m={productionUrl:l?.vercel?.productionUrl,webhookUrl:l?.vercel?.webhookUrl,signedProbe:k.signedProbe};return k.signedProbeVerified&&k.verified?(eK({phase:"signed_probe",actionId:j.actionId,pollStatus:"verified",orchestrationPhase:"verified",verificationAttemptCount:j.verificationClaim?.attemptNumber,signedProbeResult:k.signedProbe?.result,signedProbeReason:k.signedProbeReason,signedProbeStatusCode:k.signedProbe?.statusCode,fingerprint:j.fingerprint}),await fg({cwd:a.cwd,pending:j,status:"verified",phase:"verified",message:"Signed webhook verification passed after production redeploy.",clearPending:!0,verificationAttemptCount:j.verificationClaim?.attemptNumber,vercelPatch:{...m,signedProbeVerified:!0,deploymentRedeployRequired:!1}}),fe({vercel:(await (0,cV.oQ)(a.cwd)).vercel,pending:{...j,status:"verified",phase:"verified",completedAt:new Date().toISOString()},retryApply:k})):fi({cwd:a.cwd,claimed:j,retryResult:k,vercelPatch:{...m,signedProbeVerified:!1,deploymentRedeployRequired:!0}})}async function fk(a){let b=(0,k.ym)(a),c=await (0,h.Hn)(b),d=await (0,cV.oQ)(a),e=d?.vercel,f=function(a){var b;let c=a?.vercel?.redeployVerification;if(!c)return;let d=e3({pending:c,signedProbe:a?.vercel?.signedProbe});return{active:e4(d),terminal:(b=d.status,e1.has(b)),verified:"verified"===d.status,phase:d.phase,statusMessage:e7(d),pollActionId:d.actionId,verificationAttemptCount:d.verificationAttemptCount,maxVerificationAttempts:d.maxVerificationAttempts}}(d),g=(0,H.s5)({projectId:e?.projectId,productionUrl:e?.productionUrl,webhookUrl:e?.webhookUrl,endpointReachable:e?.endpointReachable,requiredEnvPresence:e?.envVarPresence,linearWebhookVerified:e?.linearWebhookVerified,signedProbeVerified:e?.signedProbeVerified,deploymentRedeployRequired:e?.deploymentRedeployRequired,manualComplete:e?.manualComplete,orchestrationActive:f?.active});return{controlPlane:d,vercelTokenConfigured:!!c?.presence.VERCEL_TOKEN,linearApiKeyConfigured:!!c?.presence.LINEAR_API_KEY,readiness:g,linearTeamKey:d?.linear?.teamKey,orchestration:f}}function fl(a){return a.map(a=>({id:a.id,name:a.name,accountId:a.accountId}))}function fm(a,b){return b&&a.some(a=>a.id===b)?b:1===a.length?a[0]?.id:void 0}async function fn(a){let b=await (0,cV.oQ)(a.cwd),c=b?.linear?.teamKey,d=await ey({githubToken:a.githubToken,cwd:a.cwd,harnessProvisioningSummary:a.harnessProvisioningSummary,requireVerifiedPackagedDispatchRepo:!0}),e={teamCreate:!0,projectCreate:!0};if(!a.vercelToken.trim())return{scopes:[],projects:[],harnessTeamKey:c,githubDispatch:d,capabilities:e,loadError:"VERCEL_TOKEN is required to load Vercel bridge options."};try{var f;let g=(f=await (0,eo.dk)(a.vercelToken),[{id:"",label:"Personal account (no team)",kind:"personal"},...f.map(a=>({id:a.id,label:`${a.name} (${a.slug})`,kind:"team"}))]),h=b?.vercel?.teamId??"",i=void 0!==a.teamId?a.teamId??"":h,j=g.some(a=>a.id===i)?i:fm(g,h),k=j&&j.length>0?j:void 0,l=fl(await (0,eo.Eb)(a.vercelToken,k)),m=fm(l,b?.vercel?.projectId);return{scopes:g,projects:l,selectedScopeId:j,selectedProjectId:m,harnessTeamKey:c,githubDispatch:d,capabilities:e}}catch(a){return{scopes:[],projects:[],harnessTeamKey:c,githubDispatch:d,capabilities:e,loadError:a instanceof Error?a.message:"Failed to load Vercel bridge options."}}}async function fo(a){return fl(await (0,eo.Eb)(a.vercelToken,a.teamId?.trim()?a.teamId:void 0))}function fp(){return(0,e.Vi)()}async function fq(){let a=function(a=process.env){return!function(a=process.env){return"true"===a.VITEST||"test"===a.NODE_ENV}()||a.HARNESS_VITEST_REMOTE_SETUP_MOCK,null}();if(a)return a;let b=await (0,b1.P)({cwd:fp()});if((0,b1.H)(b))return(0,X.iB)(b)}async function fr(){let a=await cT();if(a)return a;let b=await (0,b1.P)({cwd:fp()});if((0,b1.H)(b))return cS(b,{timeoutMs:6e4})}async function fs(){let a=await cT();if(a)return a;let b=await (0,b1.P)({cwd:fp()});if((0,b1.H)(b))return cS(b,{timeoutMs:5e3})}async function ft(a){let b=fp(),c=await fs();return c?dP(b,c,{debugTimings:a?.debugTimings===!0,testHangAfterStage:a?.testHangAfterStage,overallDeadlineMs:a?.overallDeadlineMs,workspaceKey:b}):{status:"failed",statusLabel:(0,c1.fA)("failed"),blockedReason:"GITHUB_TOKEN is required to check or update the managed p-dev runner.",retryAvailable:!0}}async function fu(){let a=await fr();return a?dQ(fp(),a):{previewFingerprint:"",targetSnapshotContentId:"",phases:[],blocked:!0,blockedStatus:"failed",message:"GITHUB_TOKEN is required to preview a managed p-dev runner upgrade.",impact:{replacePathCount:0,deletePathCount:0,sampleReplacePaths:[],sampleDeletePaths:[]}}}async function fv(a){var b;if(!a.confirmed)throw Error("Confirmed apply is required.");if(dp=(b={resolveProvider:async()=>fr(),execute:async(a,b)=>dT(a,b,{})}).resolveProvider,dq=b.execute,ds||(ds=!0,du()),!await fr())throw Error("GITHUB_TOKEN is required to apply a managed p-dev runner upgrade.");let c=await dS(fp(),{previewFingerprint:a.previewFingerprint,resume:!0===a.resume});return{apply:c.apply,progress:c.progress,status:{status:"updating",statusLabel:(0,c1.fA)("updating"),pendingOperationId:c.apply.operationId,pendingPhase:c.apply.phase}}}async function fw(){return c6(fp())}async function fx(a){let b=fp(),c=function(a){let b=[];return a.linearApiKey?.trim()&&b.push("LINEAR_API_KEY"),a.cursorApiKey?.trim()&&b.push("CURSOR_API_KEY"),a.harnessGithubToken?.trim()&&b.push("HARNESS_GITHUB_TOKEN"),{linearApiKey:a.linearApiKey,cursorApiKey:a.cursorApiKey,githubToken:a.harnessGithubToken,explicitCredentialReplacements:b.length>0?b:void 0}}(a),d=await (0,bU.PY)({cwd:b,payload:a});return{linearApiKey:c.linearApiKey?.trim()||d.linearApiKey,cursorApiKey:c.cursorApiKey?.trim()||d.cursorApiKey,githubToken:c.githubToken?.trim()||d.githubToken,explicitCredentialReplacements:c.explicitCredentialReplacements,credentialInputSources:d.credentialInputSources}}async function fy(){return W({cwd:fp()})}async function fz(){return b5({cwd:fp(),provider:await fq()})}async function fA(){let a=fp(),b=(0,k.ym)(a),c=await (0,h.Hn)(b),d=await (0,q.dT)({cwd:a}),e=(0,aw.Ot)()?null:await (0,E.vE)(a),f=e?(0,E.e8)(e)??void 0:void 0,g={LINEAR_API_KEY:c?.presence.LINEAR_API_KEY??!1,CURSOR_API_KEY:c?.presence.CURSOR_API_KEY??!1,GITHUB_TOKEN:c?.presence.GITHUB_TOKEN??!1,VERCEL_TOKEN:c?.presence.VERCEL_TOKEN??!1};return{env:{harnessConfigPath:c?.values.HARNESS_CONFIG_PATH??".harness/config.local.json",githubDispatchRepository:c?.values.GITHUB_DISPATCH_REPOSITORY??"",suggestedHarnessDispatchRepo:f,secretPresence:g,serviceConnectionSummaries:await fC(a,g)},config:d}}let fB={LINEAR_API_KEY:"linear",CURSOR_API_KEY:"cursor",GITHUB_TOKEN:"github",VERCEL_TOKEN:"vercel"};async function fC(a,b){return Object.fromEntries(await Promise.all(Object.keys(fB).map(async c=>{if(!b[c])return[c,{status:"missing"}];try{let b=await (0,ex.yu)({cwd:a,service:fB[c]});return[c,{status:b.status,message:b.message,label:b.label,limitation:b.limitation,checkedAt:new Date().toISOString()}]}catch(a){return[c,{status:"unknown",message:a instanceof Error?a.message:"Saved credential could not be verified.",checkedAt:new Date().toISOString()}]}})))}async function fD(a){return B({cwd:fp(),payload:a})}async function fE(a){let b=fp();return{apply:await C({cwd:b,payload:a.payload,confirmed:a.confirmed,fingerprint:a.fingerprint}),summary:await W({cwd:b})}}async function fF(a){let b=await fx(a),c=(0,j.Gn)(b);return function(a,b=[]){return{...a,manualInstructions:a.manualInstructions.map(a=>bX(a,b)),validationError:a.validationError?bX(a.validationError,b):void 0}}(await bZ({cwd:fp(),operatorInput:b,manualHarnessDispatchRepo:a.manualHarnessDispatchRepo,provider:await fq()}),c)}async function fG(a){let b=fp(),c=await fx(a.payload),d=await b$({cwd:b,operatorInput:c,manualHarnessDispatchRepo:a.payload.manualHarnessDispatchRepo,confirmed:a.confirmed,fingerprint:a.fingerprint,provider:await fq()}),[e,f]=await Promise.all([fz(),fy()]),g=await dW(b,f),h=function(a){var b;let c=a.remoteSummary,d=c?(0,F.fm)(c.harnessSecretStatuses):void 0;return{path:"automatic",applyFingerprint:a.applyResult.fingerprint,configStateFingerprint:JSON.stringify(function(a){let b=a.setupSummary.configSummary,c=(b?.repos??[]).flatMap(a=>(a.linearAssociations??[]).map(b=>`${a.id}:${b.workspaceId}:${b.teamId}:${b.projectId}`)).sort((a,b)=>a.localeCompare(b));return{configResolved:a.setupSummary.overview.configResolved,operatorConfigResolved:a.setupSummary.overview.operatorConfigResolved,linearTeamKeyFromConfig:a.controlPlaneContext?.linearTeamKeyFromConfig??null,linearTeamKeyFromControlPlane:a.controlPlaneContext?.state?.linear?.teamKey??null,associationKeys:c,repoIds:(b?.repos??[]).map(a=>a.id).sort((a,b)=>a.localeCompare(b)),repoTargets:(b?.repos??[]).map(a=>({id:a.id,targetRepo:a.targetRepo})).sort((a,b)=>a.id.localeCompare(b.id)),allowedTargetRepos:[...b?.allowedTargetRepos??[]].sort((a,b)=>a.localeCompare(b))}}({setupSummary:a.setupSummary,controlPlaneContext:a.controlPlaneContext})),harnessConfigJsonB64Written:!!(b=a.applyResult)&&b.writtenSecrets.some(a=>"HARNESS_CONFIG_JSON_B64"===a.name&&("created"===a.status||"updated"===a.status)),harnessDispatchRepo:c?.harnessDispatchRepo??a.applyResult.harnessDispatchRepo,harnessDispatchRepoResolved:c?.harnessDispatchRepoResolved,harnessDispatchRepoSource:c?.harnessDispatchRepoSource,harnessRepoAccess:c?.harnessRepoAccess,postApplyVerificationReady:c?function(a){let b=(0,F.fm)(a.harnessSecretStatuses);return a.harnessDispatchRepoResolved&&"denied"!==a.harnessRepoAccess&&b.allPresent}(c):void 0,secretPresence:d?{allPresent:d.allPresent,missing:d.missing,unknown:d.unknown}:void 0}}({applyResult:d,setupSummary:f,controlPlaneContext:g,remoteSummary:e});return{apply:d,summary:e,evidence:h}}async function fH(a){return b_({cwd:fp(),repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,productionBranch:a.productionBranch,manualHarnessDispatchRepo:a.manualHarnessDispatchRepo,provider:await fq()})}async function fI(a){let b,c=await fq(),d=await b0({cwd:fp(),repoConfigId:a.payload.repoConfigId,targetRepo:a.payload.targetRepo,productionBranch:a.payload.productionBranch,manualHarnessDispatchRepo:a.payload.manualHarnessDispatchRepo,confirmed:a.confirmed,fingerprint:a.fingerprint,provider:c});return c&&"already-installed"!==d.outcome&&("pr-created"===d.outcome||"pr-updated"===d.outcome||"branch-updated"===d.outcome)&&(b=await fK({provider:c,input:{repoConfigId:a.payload.repoConfigId,targetRepo:a.payload.targetRepo,productionBranch:a.payload.productionBranch,manualHarnessDispatchRepo:a.payload.manualHarnessDispatchRepo,prUrl:d.prUrl,branchName:d.branchName}})),{apply:d,summary:await fz(),finalization:b}}async function fJ(a){let b=await fq();if(!b)throw Error("GitHub token is required for target workflow finalization");return{finalization:await fK({provider:b,input:{repoConfigId:a.repoConfigId,targetRepo:a.targetRepo,productionBranch:a.productionBranch,manualHarnessDispatchRepo:a.manualHarnessDispatchRepo,prUrl:a.prUrl,branchName:a.branchName,operationId:a.operationId}}),summary:await fz()}}async function fK(a){if(a.provider instanceof bT.Ig)return a.provider.advanceTargetWorkflowFinalization(a.input);let b=fp(),c=await (0,b1.P)({cwd:b});if(!(0,b1.H)(c))throw Error("GitHub token is required for target workflow finalization");let d=new ax.jh({token:c});return cP({cwd:b,input:a.input,provider:a.provider,client:d})}async function fL(a){return(0,ex.tl)({cwd:a,key:"LINEAR_API_KEY"})}async function fM(a){return(0,ex.tl)({cwd:a,key:"VERCEL_TOKEN"})}async function fN(a,b){let c=b.vercelToken??await fM(a)??"",d=b.linearApiKey??await fL(a),e=await (0,ex.tl)({cwd:a,key:"GITHUB_TOKEN"}),f=await (0,cV.oQ)(a),g=await f2(),h=await ey({githubToken:e,cwd:a,harnessProvisioningSummary:g,requireVerifiedPackagedDispatchRepo:!0}),i=await (0,ex.tl)({cwd:a,key:"LINEAR_WEBHOOK_SECRET"}),j=!!b.envInput?.LINEAR_WEBHOOK_SECRET?.trim(),k=!!i?.trim(),l=!j&&k;return{...b,vercelToken:c,linearApiKey:d,linearTeamId:b.linearTeamId??f?.linear?.teamId,derivedHarnessTeamKey:b.derivedHarnessTeamKey??f?.linear?.teamKey,derivedGithubDispatchToken:b.envInput?.GITHUB_DISPATCH_TOKEN?.trim()||!h.eligible?void 0:e,derivedGithubDispatchRepository:h.eligible?h.repository:void 0,willGenerateLinearWebhookSecret:!!l||(b.willGenerateLinearWebhookSecret??!j),verificationLinearWebhookSecret:b.verificationLinearWebhookSecret??i,preserveGeneratedWebhookSecretFingerprint:b.preserveGeneratedWebhookSecretFingerprint??l}}async function fO(){return d6(fp())}async function fP(){let a=fp(),b=await fL(a);if(!b?.trim())throw Error("LINEAR_API_KEY is required to load Linear workspace options.");let c=(0,dY.os)(b),[d,e,f]=await Promise.all([(0,dY.P0)(c),(0,dY.uB)(c),(0,dY.gg)(c)]);return{workspaceId:d.id,workspaceName:d.name,teams:e,projects:f}}async function fQ(){return fk(fp())}async function fR(a){let b=fp(),c=a.linearApiKey??await fL(b)??"";return(0,dZ.PA)({...a,linearApiKey:c})}async function fS(a){let b=fp(),c=a.plan.linearApiKey??await fL(b)??"";return{apply:await d5({plan:{...a.plan,linearApiKey:c},confirmed:a.confirmed,fingerprint:a.fingerprint,cwd:b}),summary:await d6(b)}}async function fT(){return d1(fp())}async function fU(a=fp()){let b=await (0,d9.$l)({cwd:a});if("nothing_to_migrate"!==b.status)return b;let c=await fL(a)??"";if(!c)return b;let d=await (0,cV.oQ)(a);if(!d?.linear?.teamId)return b;let e=(0,dY.os)(c),f=await (0,dY.P0)(e),g=await (0,d9.$l)({cwd:a,workspaceId:f.id,workspaceName:f.name});return"candidate"!==g.status?g:(0,d9.XN)({cwd:a,workspaceId:f.id,workspaceName:f.name,candidate:g.candidate})}async function fV(a=fp()){await fU(a);let b=await d6(a),c=await (0,I.rL)({baseDir:a}),d=await (0,cV.oQ)(a),e=(0,d7.Uv)(c.config),f=(0,d9.z3)(c.config),g=b.controlPlane?.linearWorkspace,h=(0,d7.sf)({config:c.config,controlPlane:d});return{summary:b,associations:e,repos:c.config.repos.map(a=>({id:a.id,targetRepo:a.targetRepo})),expectedCommittedFingerprint:f,workspaceId:c.config.linear?.workspaceId??g?.workspaceId??"",workspaceName:g?.workspaceName??"Linear workspace",driftWarnings:h}}async function fW(a){let b=fp(),c=a.linearApiKey??await fL(b)??"";return(0,ea.b)({...a,linearApiKey:c,cwd:b})}async function fX(a){let b=fp(),c=a.plan.linearApiKey??await fL(b)??"",d=await eg({plan:{...a.plan,linearApiKey:c,cwd:b},confirmed:a.confirmed,fingerprint:a.fingerprint,cwd:b}),e=await d6(b),f=await (0,I.rL)({baseDir:b});return{apply:d,summary:e,expectedCommittedFingerprint:(0,d9.z3)(f.config)}}async function fY(a){let b=fp(),c=await fM(b)??"",d=await (0,ex.tl)({cwd:b,key:"GITHUB_TOKEN"}),e=await f2();return fn({vercelToken:c,githubToken:d,cwd:b,teamId:a?.teamId,harnessProvisioningSummary:e})}async function fZ(a){let b=fp();return fo({vercelToken:await fM(b)??"",teamId:a})}async function f$(a){let b=fp();return eH(await fN(b,a))}async function f_(a){let b=fp(),c=await fN(b,a.plan);return{apply:await eY({plan:c,confirmed:a.confirmed,fingerprint:a.fingerprint,manualComplete:a.manualComplete,verifyOnly:a.verifyOnly,cwd:b}),summary:await fk(b)}}async function f0(a){let b=fp();return{apply:await fj({actionId:a.actionId,cwd:b}),summary:await fk(b)}}async function f1(){let a=function(a=process.env){return!function(a=process.env){return"true"===a.VITEST||"test"===a.NODE_ENV}()||a.HARNESS_VITEST_PROVISIONING_MOCK,null}();if(a)return a;let b=await (0,b1.P)({cwd:fp()});if((0,b1.H)(b))return(0,X.W8)(b)}async function f2(){let a=await f1();return bG({cwd:fp(),provider:a})}async function f3(){let a=fp(),b=await aK(a);return aV({cwd:a,pending:b})}async function f4(a){let b=await f1();return b?bH({cwd:fp(),provider:b,operationId:a?.operationId}):{state:"token-unavailable",fingerprint:JSON.stringify({action:"preview",tokenUnavailable:!0}),operationId:a?.operationId??(0,d.randomUUID)(),creationPreviewFingerprint:null,resumedFromPending:!1,harnessDispatchRepo:null,authenticatedLogin:null,packageName:"p-dev-harness",packageVersion:"",sourceRepository:"",sourceCommit:"",snapshotContentId:null,snapshotFingerprint:null,templateContentId:null,message:"GITHUB_TOKEN is required before provisioning a harness workspace.",recoverable:!0,willCreateRepository:!1,tokenCapabilities:{tokenType:"unknown",hasRepoScope:!1,hasWorkflowScope:!1,scopeAmbiguous:!0}}}async function f5(a){let b=await f1();if(!b)throw Error("GITHUB_TOKEN is required before provisioning a harness workspace.");let c=await bH({cwd:fp(),provider:b,operationId:a.operationId});(0,bK.fq)(a.operationId);let d="unknown";if((0,bK.aK)()){let a=await bs("file:///Users/weston/Code/agentic-product-development-harness/apps/gui/lib/setup-server.ts");d=a.ok?(0,bL.ae)(a.manifest.fileCount):"unknown",(0,bK.Lp)({type:"p_dev_workspace_provision_started",snapshotFileCountBucket:d,resumedFromDurablePendingState:c.resumedFromPending})}let e=Date.now(),f=await bI({cwd:fp(),provider:b,confirmed:a.confirmed,fingerprint:a.fingerprint,operationId:a.operationId});if((0,bK.aK)()){let a=(0,bL.Eo)(Date.now()-e);if(f.persisted){var g,h;(0,bK.Lp)({type:"p_dev_workspace_provision_completed",snapshotFileCountBucket:d,durationBucket:a,retryCountBucket:"unknown",rateLimitPauseCountBucket:"unknown",outcome:"success",resumedFromDurablePendingState:c.resumedFromPending,connectedToExistingLegacyWorkspace:(g={persisted:f.persisted,previewState:c.state}).persisted&&"valid-existing-managed-repo"===g.previewState,createdSnapshotBackedWorkspace:!!(h={persisted:f.persisted,applyState:f.state,preview:c}).persisted&&"verified-and-persisted"===h.applyState&&(h.preview.willCreateRepository||"same-name-snapshot-only-with-pending"===h.preview.state)})}else{let b=bQ(f.state);(0,bK.Lp)({type:"p_dev_workspace_provision_failed",snapshotFileCountBucket:d,durationBucket:a,retryCountBucket:"unknown",rateLimitPauseCountBucket:"unknown",failureCategory:b,resumedFromDurablePendingState:c.resumedFromPending,recoveryStateRemainedAfterFailure:f.recoverable}),bR(f.state)&&(0,bK.kS)({lifecyclePhase:"provisioning",productErrorCode:bS(f.state),errorCategory:b})}}else if(bR(f.state)){let a=bQ(f.state);(0,bK.kS)({lifecyclePhase:"provisioning",productErrorCode:bS(f.state),errorCategory:a})}return{apply:f,summary:await W({cwd:fp()}),provisioning:c}}async function f6(a){let b=fp(),c=(0,E.e8)(a.harnessDispatchRepo.trim());if(!c)return{status:"failed",repoSlug:a.harnessDispatchRepo.trim(),message:"Enter a valid GitHub repo slug or URL (owner/repo)."};let d=a.githubToken?.trim()||await (0,b1.P)({cwd:b});if(!d)return{status:"failed",repoSlug:c,message:"GITHUB_TOKEN is required to verify harness repo access. Add it in Step 1 first."};let e=(0,X.iB)(d),f=await e.checkHarnessRepoAccess(c);return"available"===f?{status:"connected",repoSlug:c,message:`Connected to ${c}.`,limitation:"This check confirms GitHub access only. Saving still happens when you create or update local setup files."}:"denied"===f?{status:"failed",repoSlug:c,message:`GitHub denied access to ${c}.`,limitation:"Confirm this is the harness repo you intend to use and that your GitHub token has admin or maintain access."}:{status:"unknown",repoSlug:c,message:`Harness repo access for ${c} could not be verified yet.`,limitation:"Retry after saving GITHUB_TOKEN in Step 1."}}async function f7(){return(0,bU.Sc)({cwd:fp()})}async function f8(a){return z({cwd:fp(),env:a})}async function f9(a){let b=fp();return await A({cwd:b,env:a.env,confirmed:a.confirmed,fingerprint:a.fingerprint}),{summary:await W({cwd:b})}}async function ga(){let a=function(a=process.env){return!function(a=process.env){return"true"===a.VITEST||"test"===a.NODE_ENV}()||a.HARNESS_VITEST_TARGET_REPO_PROVISIONING_MOCK,null}();if(a)return a;let b=await (0,b1.P)({cwd:fp()});if((0,b1.H)(b))return(0,at.createLiveGitHubTargetRepositoryProvider)(b)}async function gb(a){let b=await ga();return b?ar({request:a,provider:b,cwd:fp()}):{state:"invalid-input",fingerprint:"",operationId:a.operationId??"",creationActionId:a.creationActionId??"",createdAt:a.createdAt??"",owner:a.owner,repositoryName:a.name,repositoryFullName:`${a.owner}/${a.name}`,visibility:a.visibility??"private",description:a.description??"",initialBranches:["main","dev"],initialFilePaths:["README.md",".p-dev/product.json"],resultingTargetRepoConfigId:`target-${a.name}`,actionsWillPerform:[],actionsWillNotPerform:[],message:"GITHUB_TOKEN is required before creating a product repository.",resumedFromPending:!1}}async function gc(a){let b=await ga();if(!b)throw Error("GITHUB_TOKEN is required before creating a product repository.");return as({apply:a,provider:b,cwd:fp()})}},8846:(a,b,c)=>{c.d(b,{M:()=>e});var d=c(78505);function e(a){let b,c=a??{version:1,orchestratorMarker:"harness-orchestrator-v1",logDirectory:"runs",repos:[{id:"target-app",targetRepo:"https://github.com/owner/example-target-app",baseBranch:"main",productionBranch:"main"}],allowedTargetRepos:["https://github.com/owner/example-target-app"]},e=(0,d.bH)(c),f=(0,d.AX)(c),g="code-default";return c.agentProvider?.model?.id?(g="agentProvider.model.id",b=c.agentProvider.model.id):c.defaultModel?.id&&(g="defaultModel.id",b=c.defaultModel.id),{providerId:"cursor",resolvedModelId:e,configuredModelId:b,source:g,pinnedParams:f.params??[...d.ls],paramsControlledInCode:!0,policyNote:"Model ids are Cursor cloud agent selections. fast:false is pinned in code for cost control and is not user-editable in config."}}},11288:(a,b,c)=>{c.d(b,{C:()=>o,buildRequestedHarnessConfig:()=>u,b:()=>t});var d=c(77598),e=c(51455),f=c(96105),g=c(39676),h=c(99895),i=c(71740),j=c(47183),k=c(12884),l=c(35244),m=c(84998),n=c(73833);let o={preview:{id:"preview-linear-workspace",permission:k.P.remoteRead},apply:{id:"apply-linear-workspace",permission:k.P.linearWrite}};function p(a){return new Set(a.map(a=>(0,g.iF)(a)))}function q(a){let b=new Map;for(let c of a){let a=b.get(c.teamId)??[];a.push(c),b.set(c.teamId,a)}return b}async function r(a){let b=(0,m.ym)(a);try{await (0,e.access)(b.configLocal);let a=await (0,e.readFile)(b.configLocal,"utf8");return f.k.parse(JSON.parse(a))}catch{return null}}function s(a){return(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex").slice(0,16)}async function t(a){let b=await r(a.cwd),c=b?(0,g.Uv)(b):[],d=b?(0,h.z3)(b):"",e=await (0,n.oQ)(a.cwd),f=b?(0,g.sf)({config:b,controlPlane:e}):[],k={actionId:o.preview.id,committedFingerprint:d,requestedFingerprint:s(a.requestedAssociations),operations:[],impactSummary:{teamsToAdd:[],projectsToAdd:[],teamsToRepair:[],projectsToRepair:[],projectsToDetach:[],teamsToDetach:[],metadataBlocksToRemove:[],explicitNonActions:["Will not delete Linear teams, projects, issues, or statuses.","Will not modify Linear project-team membership in v0.4."]},driftWarnings:f,permission:o.preview.permission};if(a.expectedCommittedFingerprint!==d)return{...k,fingerprint:s({stale:"committed-fingerprint"}),validationError:"concurrent_local_edit"};let m=(0,g.Sr)(a.requestedAssociations);if(!m.ok)return{...k,fingerprint:s({invalid:m.code}),validationError:`${m.code}: project ${m.projectId} has conflicting target repos`};for(let[b,c]of q(a.requestedAssociations))if(0===c.length)return{...k,fingerprint:s({invalid:"team-without-projects"}),validationError:`Team ${b} must include at least one project before apply.`};if(!a.linearApiKey.trim())return{...k,fingerprint:s({invalid:"missing-linear-key"}),validationError:"LINEAR_API_KEY is required for Linear workspace preview."};let t=(0,i.os)(a.linearApiKey),u=await (0,i.uB)(t),v=await (0,i.gg)(t),w=p(c),x=p(a.requestedAssociations),y=[],z=new Set,A=new Set;for(let[b,d]of q(a.requestedAssociations)){let a=d[0],e=u.some(a=>a.id===b),f=c.filter(a=>a.teamId===b);e||0!==f.length||(y.push({type:"add_team",teamId:b,teamKey:a.teamKey,teamName:a.teamName?.trim()||a.teamKey}),k.impactSummary.teamsToAdd.push(a.teamKey));let h=e?await (0,i.vy)(t,b):[];for(let c of(e&&(0===f.length||(0,j.lS)(h).some(a=>"create"===a.action||"repair"===a.action||a.present&&!a.categoryMatches))&&(y.push({type:"repair_team_statuses",teamId:b,teamKey:a.teamKey}),k.impactSummary.teamsToRepair.push(a.teamKey)),d)){let a=(0,g.iF)(c);if(w.has(a))continue;let d=v.find(a=>a.id===c.projectId);if(!d)return{...k,fingerprint:s({invalid:"project-not-found"}),validationError:`Linear project ${c.projectName} was not found.`};if(!d.teamIds.includes(b))return{...k,fingerprint:s({invalid:"project-not-on-team"}),validationError:`Project ${c.projectName} is not associated with team ${c.teamKey} in Linear.`};y.push({type:"add_project_association",teamId:b,projectId:c.projectId,targetRepo:c.targetRepo}),k.impactSummary.projectsToAdd.push(`${c.teamKey}/${c.projectName}`),z.has(c.projectId)||(z.add(c.projectId),y.push({type:"repair_project_metadata",teamId:b,projectId:c.projectId,targetRepo:c.targetRepo}),k.impactSummary.projectsToRepair.push(c.projectName))}}for(let a of c){let b=(0,g.iF)(a);x.has(b)||(y.push({type:"detach_project_association",teamId:a.teamId,projectId:a.projectId}),k.impactSummary.projectsToDetach.push(`${a.teamKey}/${a.projectName}`))}let B=new Set(a.requestedAssociations.map(a=>a.teamId));for(let a of new Set(c.map(a=>a.teamId)))if(!B.has(a)){let b=c.find(b=>b.teamId===a);y.push({type:"detach_team",teamId:a,teamKey:b.teamKey}),k.impactSummary.teamsToDetach.push(b.teamKey)}let C=new Set(a.requestedAssociations.map(a=>a.projectId));for(let a of c){let b=(0,g.iF)(a);if(!x.has(b)&&!C.has(a.projectId)){if(A.has(a.projectId))continue;A.add(a.projectId),y.push({type:"remove_project_metadata_block",projectId:a.projectId,projectName:a.projectName}),k.impactSummary.metadataBlocksToRemove.push(a.projectName)}}let D=s({actionId:o.preview.id,committedFingerprint:d,requestedAssociations:a.requestedAssociations,operations:y,linearApiKeyToken:(0,l.g)(a.linearApiKey)});return{...k,operations:y,fingerprint:D}}function u(a){let b=new Map;for(let c of a.requestedAssociations){let a=b.get(c.repoConfigId)??[],d=c.teamName?.trim()||void 0;a.push({workspaceId:c.workspaceId,teamId:c.teamId,teamKey:c.teamKey,...d?{teamName:d}:{},projectId:c.projectId,projectName:c.projectName}),b.set(c.repoConfigId,a)}let c=[...b.values()].flat(),d=function(a){let b=[...new Set([a.workspaceId?.trim(),...a.associations.map(a=>a.workspaceId.trim())].filter(a=>!!a))],c=(0,g.pd)(a.associations),d={};if(1===b.length&&(d.workspaceId=b[0]),1===c.length){let b=c[0],e=a.associations.find(a=>a.teamId===b);d.teamId=b,e?.teamKey?.trim()&&(d.teamKey=e.teamKey.trim())}return d}({workspaceId:a.workspaceId,associations:c});return f.k.parse({...a.current,linear:{...a.current.linear,workspaceId:d.workspaceId,teamKey:d.teamKey,teamId:d.teamId},repos:a.current.repos.map(a=>({...a,linearAssociations:b.get(a.id)??[]}))})}},19965:(a,b,c)=>{c.d(b,{vb:()=>o,writeConfigLocal:()=>p});var d=c(51455),e=c(48161),f=c(76760),g=c.n(f),h=c(29281),i=c(12884),j=c(50615),k=c(84998);async function l(a){try{return await (0,d.access)(a),!0}catch{return!1}}async function m(a){let b=await (0,d.mkdtemp)(g().join((0,e.tmpdir)(),"harness-setup-config-")),c=g().join(b,"config.local.json");try{await (0,d.writeFile)(c,a,"utf8"),await (0,h.Z9)(c)}finally{await (0,d.rm)(b,{recursive:!0,force:!0})}}async function n(a){if(!await l(a.configExample))throw Error(`Missing source file: ${a.configExample}`);let b=await (0,d.readFile)(a.configExample,"utf8");return b.endsWith("\n")?b:`${b}
191
+ `}async function o(a){let{paths:b,force:c=!1,mode:e="apply"}=a,f=k.bm,g=await l(b.configLocal);if(g&&!c)return{actionId:"scaffold-config-local",outcome:"skipped",targetPath:b.configLocal,permission:i.P.localFileWrite,reason:"already exists",logMessage:`skipped ${f} (already exists)`};let h=await n(b);return"dry-run"===e?{actionId:"scaffold-config-local",outcome:g?"wouldChange":"preview",targetPath:b.configLocal,content:h,permission:i.P.localFileWrite,reason:g?"would overwrite with --force":"would create",logMessage:g?`would overwrite ${f}`:`would create ${f}`}:(await (0,d.writeFile)(b.configLocal,h,"utf8"),{actionId:"scaffold-config-local",outcome:"changed",targetPath:b.configLocal,content:h,permission:i.P.localFileWrite,reason:g?"overwrote existing file":"created new file",logMessage:`${g?"overwrote":"created"} ${f}`})}async function p(a){let{paths:b,force:c=!1,mode:e="apply"}=a,f=k.bm,g=await l(b.configLocal);if(g&&!c)return{actionId:"write-config-local",outcome:"skipped",targetPath:b.configLocal,permission:i.P.localFileWrite,reason:"already exists",logMessage:`skipped ${f} (already exists)`};let h=function(a){if(a.content)return a.content.endsWith("\n")?a.content:`${a.content}
192
+ `;if(a.input)return(0,j.rb)(a.input);throw Error("writeConfigLocal requires content or structured input")}(a);return(await m(h),"dry-run"===e)?{actionId:"write-config-local",outcome:g?"wouldChange":"preview",targetPath:b.configLocal,content:h,permission:i.P.localFileWrite,reason:g?"would overwrite with --force":"would create",logMessage:g?`would overwrite ${f}`:`would create ${f}`}:(await (0,d.writeFile)(b.configLocal,h,"utf8"),{actionId:"write-config-local",outcome:"changed",targetPath:b.configLocal,content:h,permission:i.P.localFileWrite,reason:g?"overwrote existing file":"created new file",logMessage:`${g?"overwrote":"created"} ${f}`})}},35244:(a,b,c)=>{c.d(b,{g:()=>d});function d(a){var b=a?.trim()??"";if(!b)return"";let c=0;for(let a=0;a<b.length;a+=1)c=(c+b.charCodeAt(a))%0x3b9aca07;return`${b.length}:${c}`}},39676:(a,b,c)=>{function d(a){return`${a.workspaceId}:${a.teamId}:${a.projectId}`}function e(a){let b=[];for(let c of a.repos)for(let a of c.linearAssociations??[])b.push({...a,targetRepo:c.targetRepo,repoConfigId:c.id});return b}function f(a){let b=new Map;for(let c of a){let a=b.get(c.projectId)??new Set;a.add(c.targetRepo),b.set(c.projectId,a)}for(let[a,c]of b.entries())if(c.size>1)return{ok:!1,code:"linear_project_target_repo_conflict",projectId:a,targetRepos:[...c]};return{ok:!0}}function g(a){return[...new Set(a.map(a=>a.teamId))]}function h(a){return a.repos.some(a=>(a.linearAssociations?.length??0)>0)}function i(a){let b=new Map;for(let c of a.associations){let a=c.teamName?.trim()||"(unnamed team)",d=b.get(c.teamId)??{teamId:c.teamId,teamKey:c.teamKey,teamName:a,projects:[]};c.teamName?.trim()&&(d.teamName=c.teamName.trim()),d.projects.some(a=>a.projectId===c.projectId)||d.projects.push({projectId:c.projectId,projectName:c.projectName,targetRepo:c.targetRepo,health:"verification_pending"}),b.set(c.teamId,d)}return{workspaceId:a.workspaceId,workspaceName:a.workspaceName,teams:[...b.values()].map(a=>({...a,health:"verification_pending"})),appliedFingerprint:a.appliedFingerprint,appliedAt:a.appliedAt,migratedFromVersion:a.migratedFromVersion,migratedAt:a.migratedAt}}function j(a){let b=[],c=a.controlPlane?.linearWorkspace;if(!c)return b;let d=e(a.config),f=c.teams.flatMap(a=>a.projects.map(b=>({workspaceId:c.workspaceId,teamId:a.teamId,projectId:b.projectId,targetRepo:b.targetRepo})));d.length!==f.length&&b.push({code:"association_count_mismatch",message:`Harness config has ${d.length} association(s) but control-plane evidence has ${f.length}.`});let g=function(a){let b=a.linear?.workspaceId?.trim();if(b)return b;let c=[...new Set(e(a).map(a=>a.workspaceId))];return 1===c.length?c[0]:void 0}(a.config);for(let a of(g&&g!==c.workspaceId&&b.push({code:"workspace_id_mismatch",message:`Harness config workspaceId (${g}) does not match control-plane (${c.workspaceId}).`}),d)){let c=f.find(b=>b.teamId===a.teamId&&b.projectId===a.projectId);if(!c){b.push({code:"project_id_mismatch",message:`Association ${a.teamId}/${a.projectId} exists in harness config but not in control-plane evidence.`,teamId:a.teamId,projectId:a.projectId});continue}c.targetRepo&&c.targetRepo!==a.targetRepo&&b.push({code:"target_repo_mismatch",message:`Target repo for ${a.projectId} differs between harness config and control-plane evidence.`,teamId:a.teamId,projectId:a.projectId})}return b}c.d(b,{Sr:()=>f,Uv:()=>e,ay:()=>i,b0:()=>h,iF:()=>d,pd:()=>g,sf:()=>j})},44341:(a,b,c)=>{c.d(b,{Wt:()=>f,YZ:()=>g,gl:()=>e});let d="Harness metadata:";function e(a){let b=[d];return a.targetRepo&&b.push(`Target repo: ${a.targetRepo}`),a.productInitialization&&b.push(`Product initialization: ${a.productInitialization}`),b.join("\n")}function f(a,b){let c=e({...function(a){if(!a?.trim())return{};let b=a.split("\n"),c=b.findIndex(a=>a.trim().toLowerCase()===d.toLowerCase());if(-1===c)return{};let e={};for(let a=c+1;a<b.length;a+=1){let c=b[a].trim();if(!c||c.startsWith("#")||c.startsWith("##"))break;let d=function(a){let b=a.match(/^([A-Za-z][A-Za-z ]*):\s*(.+)$/);return b?{key:b[1].trim().toLowerCase(),value:b[2].trim()}:null}(c);d&&("target repo"===d.key?e.targetRepo=d.value.replace(/^`|`$/g,""):"product initialization"===d.key&&("uninitialized"===d.value||"initialized"===d.value)&&(e.productInitialization=d.value))}return e}(a),...b});if(!a?.trim())return`${c}
193
+ `;let f=a.split("\n"),g=f.findIndex(a=>a.trim().toLowerCase()===d.toLowerCase());if(-1===g){let b=a.endsWith("\n")?"":"\n";return`${a}${b}
194
+ ${c}
195
+ `}let h=g+1;for(;h<f.length;){let a=f[h].trim();if(!a||a.startsWith("#"))break;h+=1}let i=[...f.slice(0,g),c,...f.slice(h)].join("\n").replace(/\n{3,}/g,"\n\n");return i.endsWith("\n")?i:`${i}
196
+ `}function g(a){if(!a?.trim())return"";let b=a.split("\n"),c=b.findIndex(a=>a.trim().toLowerCase()===d.toLowerCase());if(-1===c)return a.endsWith("\n")?a:`${a}
197
+ `;let e=c+1;for(;e<b.length;){let a=b[e].trim();if(!a||a.startsWith("#"))break;e+=1}let f=[...b.slice(0,c),...b.slice(e)].join("\n").replace(/\n{3,}/g,"\n\n").trim();return f?`${f}
198
+ `:""}},47183:(a,b,c)=>{c.d(b,{IW:()=>l,TO:()=>o,jn:()=>r,nm:()=>q,v8:()=>s,lS:()=>p,kG:()=>n,PA:()=>t,Ce:()=>u});var d=c(77598),e=c(95332),f=c(71740),g=c(68615);function h(a){switch(a){case"unstarted":return"Unstarted";case"started":return"Started";case"backlog":return"Backlog";case"completed":return"Completed";case"canceled":return"Canceled";case"duplicate":return"Duplicate";default:return a}}var i=c(12884),j=c(35244),k=c(44341);let l={preview:{id:"preview-linear-setup",permission:i.P.remoteRead},apply:{id:"apply-linear-setup",permission:i.P.linearWrite}};function m(a){return(0,d.createHash)("sha256").update(JSON.stringify(a)).digest("hex").slice(0,16)}function n(a){return a.trim().toLowerCase()}function o(a){let b=(0,k.gl)({targetRepo:a.targetRepo.replace(/^https:\/\/github\.com\//,""),productInitialization:"uninitialized"});return a.baseDescription?.trim()?(0,k.Wt)(a.baseDescription,{targetRepo:a.targetRepo.replace(/^https:\/\/github\.com\//,""),productInitialization:"uninitialized"}):`${b}
199
+ `}function p(a){let b=new Map(a.map(a=>[n(a.name),a]));return(0,e.pB)().map(a=>{let c=b.get(n(a.name)),d=!!c,e=d&&c.type===a.category,f="skip";return f=d?e?"skip":(0,g.T_)(a.name)?"repair":"manual":a.creatable?"create":"manual",{name:a.name,category:a.category,role:a.role,present:d,existingType:c?.type,existingStatusId:c?.id,categoryMatches:e,action:f,creatable:a.creatable,repairStrategy:"repair"===f?"replacement":void 0}})}function q(a,b){let c=b.teamKey.trim().toLowerCase(),d=n(b.teamName);return a.find(a=>a.key.trim().toLowerCase()===c)??a.find(a=>n(a.name)===d)}function r(a,b){let c=n(b.projectName);return a.find(a=>n(a.name)===c&&(!b.teamId||0===a.teamIds.length||a.teamIds.includes(b.teamId)))}function s(a){return a.every(a=>a.present&&a.categoryMatches)}async function t(a){let b,c,d=(0,f.P1)(),i=[],k=[];if(!a.linearApiKey.trim())return{actionId:l.preview.id,capabilities:d,teams:[],projects:[],workflowStates:[],dispatchTriggerStatuses:(0,e.Ht)(),missingStatuses:(0,e.pB)().filter(a=>a.creatable).map(a=>a.name),createActions:[],repairActions:[],manualSteps:["Add LINEAR_API_KEY in Step 1 before previewing Linear setup."],fingerprint:m({invalid:"missing-linear-key"}),permission:l.preview.permission,validationError:"LINEAR_API_KEY is required for Linear setup preview."};let n=(0,f.os)(a.linearApiKey),o=await (0,f.uB)(n),s=await (0,f.gg)(n);if("existing"===a.team.mode){if(!(b=o.find(b=>b.id===a.team.teamId))&&a.team.teamId)return{actionId:l.preview.id,capabilities:d,teams:o,projects:s,workflowStates:[],dispatchTriggerStatuses:(0,e.Ht)(),missingStatuses:[],createActions:[],repairActions:[],manualSteps:[],fingerprint:m({invalid:"team-not-found"}),permission:l.preview.permission,validationError:"Selected Linear team was not found."}}else if(a.team.teamName&&a.team.teamKey){let c=q(o,{teamKey:a.team.teamKey,teamName:a.team.teamName});c?b=c:(k.push({kind:"team",name:`${a.team.teamName} (${a.team.teamKey})`}),b={id:"pending-team",key:a.team.teamKey,name:a.team.teamName})}if("existing"===a.project.mode)c=s.find(b=>b.id===a.project.projectId);else if(a.project.projectName&&b){let d=r(s,{projectName:a.project.projectName,teamId:"pending-team"===b.id?void 0:b.id});d?c=d:(k.push({kind:"project",name:a.project.projectName}),c={id:"pending-project",name:a.project.projectName,teamIds:"pending-team"===b.id?[]:[b.id]})}let t=[],u=[];if(b&&"pending-team"!==b.id)for(let a of(t=p(await (0,f.vy)(n,b.id)),t=await Promise.all(t.map(a=>(0,g.UM)({client:n,teamId:b.id,entry:a})))))"create"===a.action&&k.push({kind:"workflow-state",name:a.name}),"manual"===a.action&&(a.present?a.categoryMatches||i.push(`${a.name} exists but uses category ${h(a.existingType??"unknown")}; harness expects ${h(a.category)}. Rename manually if needed.`):i.push(`${a.name} is Linear-managed and must be verified manually in the workspace.`)),"repair"===a.action&&a.existingStatusId&&a.existingType&&a.affectedIssueSetHash&&u.push({statusName:a.name,existingStatusId:a.existingStatusId,expectedCategory:a.category,actualCategory:a.existingType,affectedIssueCount:a.affectedIssueCount??0,affectedIssueSetHash:a.affectedIssueSetHash,repairStrategy:"replacement",explanation:"Needs Revision"===a.name?(0,g.lb)():`${a.name} must use the ${h(a.category)} category.`});else if(b)for(let a of t=(0,e.pB)().map(a=>({name:a.name,category:a.category,role:a.role,present:!1,categoryMatches:!1,action:a.creatable?"create":"manual",creatable:a.creatable})))"create"===a.action&&k.push({kind:"workflow-state",name:a.name});let v=t.filter(a=>!a.present&&a.creatable).map(a=>a.name),w=m({actionId:l.preview.id,team:a.team,project:a.project,teamId:b?.id,workflowStates:t.map(a=>({name:a.name,action:a.action,existingStatusId:a.existingStatusId,existingType:a.existingType,category:a.category,categoryMatches:a.categoryMatches,repairStrategy:a.repairStrategy,affectedIssueSetHash:a.affectedIssueSetHash})),linearApiKeyToken:(0,j.g)(a.linearApiKey)});return{actionId:l.preview.id,capabilities:d,teams:o,projects:s,selectedTeam:b,selectedProject:c,workflowStates:t,dispatchTriggerStatuses:(0,e.Ht)(),missingStatuses:v,createActions:k,repairActions:u,manualSteps:i,fingerprint:w,permission:l.preview.permission}}async function u(a){let b=(0,f.os)(a.linearApiKey),c=await (0,f.af)(b),d=a.webhookUrl.trim().replace(/\/$/,""),e=c.find(b=>{let c=b.url.trim().replace(/\/$/,"");return(!a.teamId||b.teamId===a.teamId)&&c===d&&b.enabled&&b.resourceTypes.includes("Issue")}),g=[];return e||(g.push(`Create a Linear Issue webhook pointing at ${a.webhookUrl}.`),g.push("Copy the webhook signing secret into Vercel production env var LINEAR_WEBHOOK_SECRET.")),{webhooks:c,matchingWebhook:e,manualSteps:g}}},52884:(a,b,c)=>{c.d(b,{Wy:()=>h,dH:()=>f,fA:()=>j,nE:()=>d,s_:()=>i,yH:()=>g});let d=".github/workflows/p-dev-runner-config-canary.yml",e=/<!--\s*p-dev-runner-upgrade:(\d+):([^\s>]+)\s*-->/;function f(a,b){return`<!-- p-dev-runner-upgrade:${a}:${b} -->`}function g(a){let b=a.match(e);if(!b)return null;let c=Number(b[1]);if(!Number.isInteger(c)||c<=0)return null;let d=b[2]?.trim();return d?{repositoryId:c,snapshotContentId:d}:null}function h(a){return`harness/update-runner-${a.slice(0,12)}`}function i(a){switch(a){case"verifying-managed-repository":return"Verifying managed repository";case"comparing-runner-snapshots":return"Comparing runner snapshots";case"preparing-upgrade-commit":return"Preparing upgrade commit";case"updating-managed-runner":return"Updating managed runner";case"verifying-runner-on-production-branch":return"Verifying runner on production branch";case"synchronizing-cloud-configuration":return"Synchronizing cloud configuration";case"running-configuration-canary":return"Running configuration canary"}}function j(a){switch(a){case"up_to_date":return"Up to date";case"update_available":return"Update available";case"checking":return"Checking runner version";case"updating":return"Updating";case"partially_updated":return"Partially updated";case"failed":return"Failed";case"blocked_non_managed":return"Blocked — repository is not managed";case"blocked_unexpected_remote":return"Blocked — unexpected remote changes";case"blocked_operator_conflicts":return"Blocked — operator conflicts"}}},68615:(a,b,c)=>{c.d(b,{TO:()=>n,T_:()=>j,UM:()=>l,lb:()=>k});var d=c(77598);c(86359);var e=c(71740);let f="Needs Revision",g="unstarted";class h extends Error{constructor(a,b){super(a),this.code=b,this.name="LinearWorkflowStatusRepairError"}}function i(a){return(0,d.createHash)("sha256").update(JSON.stringify([...a].sort())).digest("hex").slice(0,16)}function j(a){return a===f}function k(){return"Needs Revision means revision work is waiting to begin. Revising represents active revision work."}async function l(a){if("repair"!==a.entry.action||!a.entry.existingStatusId)return a.entry;let b=await (0,e.$l)({client:a.client,teamId:a.teamId,stateId:a.entry.existingStatusId});return{...a.entry,affectedIssueCount:b.length,affectedIssueSetHash:i(b),repairStrategy:"replacement"}}async function m(a){var b;let{client:c,teamId:d,entry:j}=a;if("repair"!==j.action||j.name!==f||!j.existingStatusId||!j.affectedIssueSetHash)throw Error("Needs Revision replacement repair requires a repair plan entry.");let k=await (0,e.$l)({client:c,teamId:d,stateId:j.existingStatusId}),l=i(k);if(l!==j.affectedIssueSetHash)throw new h("Affected issue set changed since preview. Regenerate preview before applying.","stale-issue-set");let m=await (0,e.vy)(c,d),n=m.find(a=>a.id===j.existingStatusId);if(!n)throw new h("Needs Revision status changed or is no longer present. Regenerate preview before applying.","status-changed");let o=m.find(a=>a.name===f&&a.type===g);if(n.name===f&&n.type===g)return{repaired:[`status:${f}`],replacementStatusId:n.id};if(n.name!==f||n.type===g)throw new h("Needs Revision status no longer matches the repair plan. Regenerate preview before applying.","status-changed");let p=(b=n.id,`Needs Revision leg ${b.slice(0,8)}`),q=n.id,r=o?.id;if(n.name===f){let a=n.name;try{await (0,e.np)(c,{id:n.id,name:p}),n=(m=await (0,e.vy)(c,d)).find(a=>a.id===q)}catch(a){throw a}if(!r)try{r=(await (0,e.Iy)(c,{teamId:d,name:f,type:g})).id}catch(b){throw await (0,e.np)(c,{id:q,name:a}),new h(b instanceof Error?b.message:"Failed to create replacement Needs Revision status.","create-failed")}}else if(!r)throw new h("Replacement Needs Revision status is missing after legacy rename. Regenerate preview before applying.","verification-failed");if(!r)throw new h("Replacement Needs Revision status could not be resolved.","verification-failed");let s=[];for(let a of k)try{await (0,e.BE)(c,{issueId:a,stateId:r}),s.push(a)}catch(a){throw new h(a instanceof Error?a.message:"Issue migration failed for Needs Revision repair.","migration-incomplete")}let t=await (0,e.$l)({client:c,teamId:d,stateId:q});if(t.length>0)throw new h(`Issue migration incomplete: ${t.length} issue(s) remain on the legacy Needs Revision status.`,"migration-incomplete");let u=(m=await (0,e.vy)(c,d)).filter(a=>a.name===f&&a.type===g);if(1!==u.length)throw new h("Needs Revision replacement verification failed.","verification-failed");if(l===i(k)&&0===t.length)try{await (0,e.Wx)(c,q)}catch{}return{repaired:[`status:${f}`],replacementStatusId:u[0].id}}async function n(a){let b=[];for(let c of a.entries)if("repair"===c.action){if(c.name===f){let d=await m({client:a.client,teamId:a.teamId,entry:c});b.push(...d.repaired);continue}throw Error(`Unsupported workflow status repair for ${c.name}.`)}return b}},99895:(a,b,c)=>{c.d(b,{$l:()=>n,XN:()=>p,z3:()=>j});var d=c(77598),e=c(51455),f=c(96105),g=c(39676),h=c(73833),i=c(84998);function j(a){let b=(0,g.Uv)(a).map(a=>({workspaceId:a.workspaceId,teamId:a.teamId,teamKey:a.teamKey,projectId:a.projectId,projectName:a.projectName,targetRepo:a.targetRepo,repoConfigId:a.repoConfigId}));return(0,d.createHash)("sha256").update(JSON.stringify(b)).digest("hex").slice(0,16)}function k(a){for(let b=0;b<a.repos.length;b+=1){let c=a.repos[b],d=c.linearProjects?.[0]?.trim(),e=c.linearTeams?.[0]?.trim()??a.linear?.teamKey?.trim();if(d||e)return{repoIndex:b,projectName:d,teamKey:e}}return{repoIndex:0}}async function l(a){let b=(0,i.ym)(a);try{await (0,e.access)(b.configLocal);let a=await (0,e.readFile)(b.configLocal,"utf8");return f.k.parse(JSON.parse(a))}catch{return null}}async function m(a){let b=(0,i.ym)(a.cwd),{writeConfigLocal:d}=await Promise.resolve().then(c.bind(c,19965));await d({paths:b,content:`${JSON.stringify(a.config,null,2)}
200
+ `,force:!0})}async function n(a={}){let b=await l(a.cwd);if(!b)return{status:"nothing_to_migrate"};if((0,g.b0)(b))return{status:"already_migrated",fingerprint:j(b)};let c=await (0,h.oQ)(a.cwd),d=a.workspaceId?.trim(),e=a.workspaceName?.trim();if(!d||!e)return{status:"nothing_to_migrate"};let i=function(a){if((0,g.b0)(a.config))return null;let b=a.controlPlane?.linear,c=b?.teamId?.trim()??a.config.linear?.teamId?.trim(),d=b?.teamKey?.trim()??a.config.linear?.teamKey?.trim(),e=b?.projectId?.trim(),h=b?.projectName?.trim()??k(a.config).projectName;if(!c||!d||!e||!h)return null;let{repoIndex:i}=k(a.config),j=a.config.repos[i];if(!j)return null;let l={workspaceId:a.workspaceId,teamId:c,teamKey:d,projectId:e,projectName:h,targetRepo:j.targetRepo,repoConfigId:j.id},m=[l],n=(0,g.ay)({workspaceId:a.workspaceId,workspaceName:a.workspaceName,associations:m,appliedFingerprint:b?.appliedFingerprint,appliedAt:b?.appliedAt,migratedFromVersion:"singular-linear-selection",migratedAt:new Date().toISOString()});b?.statusCoverageComplete&&(n.teams=n.teams.map(a=>a.teamId===c?{...a,health:"healthy",lastVerifiedAt:b.appliedAt,projects:a.projects.map(a=>a.projectId===e?{...a,health:"healthy",lastVerifiedAt:b.appliedAt}:a)}:a));let o=a.config.repos.map((a,b)=>b===i?{...a,linearAssociations:[l]}:a),p=f.k.parse({...a.config,linear:{...a.config.linear,workspaceId:a.workspaceId,teamKey:d,teamId:c},repos:o});return{workspaceId:a.workspaceId,workspaceName:a.workspaceName,associations:m,evidence:n,configPatch:p}}({config:b,controlPlane:c,workspaceId:d,workspaceName:e});return i?{status:"candidate",candidate:i}:{status:"nothing_to_migrate"}}let o=Promise.resolve();async function p(a){let b,c=async()=>{let b=await l(a.cwd);if(!b)return{status:"nothing_to_migrate"};if((0,g.b0)(b))return{status:"already_migrated",fingerprint:j(b)};await m({cwd:a.cwd,config:a.candidate.configPatch});let c={...await (0,h.oQ)(a.cwd)??{version:1},version:1,linearWorkspace:a.candidate.evidence};return await (0,h.PY)(c,a.cwd),{status:"applied",fingerprint:j(a.candidate.configPatch),evidence:a.candidate.evidence}},d=o;o=new Promise(a=>{b=a}),await d;try{return await c()}finally{b()}}}};