light-plan 0.0.0-stage → 0.1.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 (963) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3181 -2
  3. package/assets/README.md +111 -0
  4. package/assets/agents/lpm-developer.md +468 -0
  5. package/assets/agents/lpm-planner.md +532 -0
  6. package/assets/harnesses/claude.yml +43 -0
  7. package/assets/harnesses/copilot.yml +54 -0
  8. package/assets/harnesses/reasonix.yml +49 -0
  9. package/assets/hcm/light-plan.yml +45 -0
  10. package/assets/skills/lpm-board-health.md +243 -0
  11. package/assets/skills/lpm-board-setup.md +354 -0
  12. package/assets/skills/lpm-delivery.md +344 -0
  13. package/assets/skills/lpm-planning.md +411 -0
  14. package/assets/skills/lpm-templates.md +144 -0
  15. package/assets/skills/lpm.md +267 -0
  16. package/dist/cli/agent-view.d.ts +27 -0
  17. package/dist/cli/agent-view.js +247 -0
  18. package/dist/cli/agent-view.js.map +1 -0
  19. package/dist/cli/commands/agent/assets.d.ts +64 -0
  20. package/dist/cli/commands/agent/assets.js +106 -0
  21. package/dist/cli/commands/agent/assets.js.map +1 -0
  22. package/dist/cli/commands/agent/glob.d.ts +25 -0
  23. package/dist/cli/commands/agent/glob.js +82 -0
  24. package/dist/cli/commands/agent/glob.js.map +1 -0
  25. package/dist/cli/commands/agent/index.d.ts +11 -0
  26. package/dist/cli/commands/agent/index.js +284 -0
  27. package/dist/cli/commands/agent/index.js.map +1 -0
  28. package/dist/cli/commands/agent/install.d.ts +59 -0
  29. package/dist/cli/commands/agent/install.js +131 -0
  30. package/dist/cli/commands/agent/install.js.map +1 -0
  31. package/dist/cli/commands/agent/mapping.d.ts +175 -0
  32. package/dist/cli/commands/agent/mapping.js +256 -0
  33. package/dist/cli/commands/agent/mapping.js.map +1 -0
  34. package/dist/cli/commands/check.d.ts +2 -0
  35. package/dist/cli/commands/check.js +81 -0
  36. package/dist/cli/commands/check.js.map +1 -0
  37. package/dist/cli/commands/comment.d.ts +2 -0
  38. package/dist/cli/commands/comment.js +104 -0
  39. package/dist/cli/commands/comment.js.map +1 -0
  40. package/dist/cli/commands/convert.d.ts +2 -0
  41. package/dist/cli/commands/convert.js +115 -0
  42. package/dist/cli/commands/convert.js.map +1 -0
  43. package/dist/cli/commands/copy.d.ts +2 -0
  44. package/dist/cli/commands/copy.js +69 -0
  45. package/dist/cli/commands/copy.js.map +1 -0
  46. package/dist/cli/commands/export.d.ts +11 -0
  47. package/dist/cli/commands/export.js +226 -0
  48. package/dist/cli/commands/export.js.map +1 -0
  49. package/dist/cli/commands/flag.d.ts +2 -0
  50. package/dist/cli/commands/flag.js +172 -0
  51. package/dist/cli/commands/flag.js.map +1 -0
  52. package/dist/cli/commands/git.d.ts +11 -0
  53. package/dist/cli/commands/git.js +357 -0
  54. package/dist/cli/commands/git.js.map +1 -0
  55. package/dist/cli/commands/hcm/bundle.d.ts +60 -0
  56. package/dist/cli/commands/hcm/bundle.js +166 -0
  57. package/dist/cli/commands/hcm/bundle.js.map +1 -0
  58. package/dist/cli/commands/hcm/index.d.ts +11 -0
  59. package/dist/cli/commands/hcm/index.js +162 -0
  60. package/dist/cli/commands/hcm/index.js.map +1 -0
  61. package/dist/cli/commands/init.d.ts +2 -0
  62. package/dist/cli/commands/init.js +81 -0
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/insert.d.ts +2 -0
  65. package/dist/cli/commands/insert.js +70 -0
  66. package/dist/cli/commands/insert.js.map +1 -0
  67. package/dist/cli/commands/instructions.d.ts +7 -0
  68. package/dist/cli/commands/instructions.js +256 -0
  69. package/dist/cli/commands/instructions.js.map +1 -0
  70. package/dist/cli/commands/link.d.ts +2 -0
  71. package/dist/cli/commands/link.js +121 -0
  72. package/dist/cli/commands/link.js.map +1 -0
  73. package/dist/cli/commands/mcp/config.d.ts +71 -0
  74. package/dist/cli/commands/mcp/config.js +119 -0
  75. package/dist/cli/commands/mcp/config.js.map +1 -0
  76. package/dist/cli/commands/mcp/index.d.ts +9 -0
  77. package/dist/cli/commands/mcp/index.js +92 -0
  78. package/dist/cli/commands/mcp/index.js.map +1 -0
  79. package/dist/cli/commands/mcp/serve.d.ts +1 -0
  80. package/dist/cli/commands/mcp/serve.js +76 -0
  81. package/dist/cli/commands/mcp/serve.js.map +1 -0
  82. package/dist/cli/commands/mcp/setup.d.ts +1 -0
  83. package/dist/cli/commands/mcp/setup.js +83 -0
  84. package/dist/cli/commands/mcp/setup.js.map +1 -0
  85. package/dist/cli/commands/me.d.ts +2 -0
  86. package/dist/cli/commands/me.js +85 -0
  87. package/dist/cli/commands/me.js.map +1 -0
  88. package/dist/cli/commands/move.d.ts +2 -0
  89. package/dist/cli/commands/move.js +81 -0
  90. package/dist/cli/commands/move.js.map +1 -0
  91. package/dist/cli/commands/new.d.ts +2 -0
  92. package/dist/cli/commands/new.js +222 -0
  93. package/dist/cli/commands/new.js.map +1 -0
  94. package/dist/cli/commands/open.d.ts +2 -0
  95. package/dist/cli/commands/open.js +43 -0
  96. package/dist/cli/commands/open.js.map +1 -0
  97. package/dist/cli/commands/period.d.ts +10 -0
  98. package/dist/cli/commands/period.js +165 -0
  99. package/dist/cli/commands/period.js.map +1 -0
  100. package/dist/cli/commands/profile.d.ts +2 -0
  101. package/dist/cli/commands/profile.js +133 -0
  102. package/dist/cli/commands/profile.js.map +1 -0
  103. package/dist/cli/commands/queue.d.ts +2 -0
  104. package/dist/cli/commands/queue.js +582 -0
  105. package/dist/cli/commands/queue.js.map +1 -0
  106. package/dist/cli/commands/remote.d.ts +10 -0
  107. package/dist/cli/commands/remote.js +3142 -0
  108. package/dist/cli/commands/remote.js.map +1 -0
  109. package/dist/cli/commands/rm.d.ts +2 -0
  110. package/dist/cli/commands/rm.js +63 -0
  111. package/dist/cli/commands/rm.js.map +1 -0
  112. package/dist/cli/commands/set.d.ts +2 -0
  113. package/dist/cli/commands/set.js +139 -0
  114. package/dist/cli/commands/set.js.map +1 -0
  115. package/dist/cli/commands/split.d.ts +2 -0
  116. package/dist/cli/commands/split.js +90 -0
  117. package/dist/cli/commands/split.js.map +1 -0
  118. package/dist/cli/commands/task.d.ts +2 -0
  119. package/dist/cli/commands/task.js +298 -0
  120. package/dist/cli/commands/task.js.map +1 -0
  121. package/dist/cli/commands/team.d.ts +2 -0
  122. package/dist/cli/commands/team.js +114 -0
  123. package/dist/cli/commands/team.js.map +1 -0
  124. package/dist/cli/commands/template.d.ts +2 -0
  125. package/dist/cli/commands/template.js +338 -0
  126. package/dist/cli/commands/template.js.map +1 -0
  127. package/dist/cli/commands/ui.d.ts +2 -0
  128. package/dist/cli/commands/ui.js +98 -0
  129. package/dist/cli/commands/ui.js.map +1 -0
  130. package/dist/cli/commands/upstream.d.ts +2 -0
  131. package/dist/cli/commands/upstream.js +218 -0
  132. package/dist/cli/commands/upstream.js.map +1 -0
  133. package/dist/cli/context.d.ts +24 -0
  134. package/dist/cli/context.js +52 -0
  135. package/dist/cli/context.js.map +1 -0
  136. package/dist/cli/index.d.ts +2 -0
  137. package/dist/cli/index.js +208 -0
  138. package/dist/cli/index.js.map +1 -0
  139. package/dist/cli/live.d.ts +71 -0
  140. package/dist/cli/live.js +182 -0
  141. package/dist/cli/live.js.map +1 -0
  142. package/dist/cli/plan.d.ts +28 -0
  143. package/dist/cli/plan.js +76 -0
  144. package/dist/cli/plan.js.map +1 -0
  145. package/dist/cli/prompt.d.ts +60 -0
  146. package/dist/cli/prompt.js +185 -0
  147. package/dist/cli/prompt.js.map +1 -0
  148. package/dist/cli/ui.d.ts +65 -0
  149. package/dist/cli/ui.js +79 -0
  150. package/dist/cli/ui.js.map +1 -0
  151. package/dist/core/board/dependency-rollup.d.ts +54 -0
  152. package/dist/core/board/dependency-rollup.js +72 -0
  153. package/dist/core/board/dependency-rollup.js.map +1 -0
  154. package/dist/core/board/flag-rollup.d.ts +33 -0
  155. package/dist/core/board/flag-rollup.js +56 -0
  156. package/dist/core/board/flag-rollup.js.map +1 -0
  157. package/dist/core/board/index.d.ts +21 -0
  158. package/dist/core/board/index.js +22 -0
  159. package/dist/core/board/index.js.map +1 -0
  160. package/dist/core/board/load/cache.d.ts +52 -0
  161. package/dist/core/board/load/cache.js +105 -0
  162. package/dist/core/board/load/cache.js.map +1 -0
  163. package/dist/core/board/load/fields.d.ts +33 -0
  164. package/dist/core/board/load/fields.js +154 -0
  165. package/dist/core/board/load/fields.js.map +1 -0
  166. package/dist/core/board/load/scan.d.ts +39 -0
  167. package/dist/core/board/load/scan.js +88 -0
  168. package/dist/core/board/load/scan.js.map +1 -0
  169. package/dist/core/board/load/tree.d.ts +10 -0
  170. package/dist/core/board/load/tree.js +114 -0
  171. package/dist/core/board/load/tree.js.map +1 -0
  172. package/dist/core/board/load.d.ts +69 -0
  173. package/dist/core/board/load.js +204 -0
  174. package/dist/core/board/load.js.map +1 -0
  175. package/dist/core/board/query.d.ts +126 -0
  176. package/dist/core/board/query.js +291 -0
  177. package/dist/core/board/query.js.map +1 -0
  178. package/dist/core/board/registry.d.ts +51 -0
  179. package/dist/core/board/registry.js +98 -0
  180. package/dist/core/board/registry.js.map +1 -0
  181. package/dist/core/board/remote-scopes.d.ts +71 -0
  182. package/dist/core/board/remote-scopes.js +103 -0
  183. package/dist/core/board/remote-scopes.js.map +1 -0
  184. package/dist/core/board/rollup.d.ts +32 -0
  185. package/dist/core/board/rollup.js +67 -0
  186. package/dist/core/board/rollup.js.map +1 -0
  187. package/dist/core/board/scope.d.ts +81 -0
  188. package/dist/core/board/scope.js +134 -0
  189. package/dist/core/board/scope.js.map +1 -0
  190. package/dist/core/board/simulate.d.ts +138 -0
  191. package/dist/core/board/simulate.js +141 -0
  192. package/dist/core/board/simulate.js.map +1 -0
  193. package/dist/core/board/tasks/index.d.ts +25 -0
  194. package/dist/core/board/tasks/index.js +26 -0
  195. package/dist/core/board/tasks/index.js.map +1 -0
  196. package/dist/core/board/tasks/ranking.d.ts +155 -0
  197. package/dist/core/board/tasks/ranking.js +374 -0
  198. package/dist/core/board/tasks/ranking.js.map +1 -0
  199. package/dist/core/board/tasks/roster.d.ts +42 -0
  200. package/dist/core/board/tasks/roster.js +82 -0
  201. package/dist/core/board/tasks/roster.js.map +1 -0
  202. package/dist/core/board/tasks.d.ts +1 -0
  203. package/dist/core/board/tasks.js +2 -0
  204. package/dist/core/board/tasks.js.map +1 -0
  205. package/dist/core/config/index.d.ts +9 -0
  206. package/dist/core/config/index.js +10 -0
  207. package/dist/core/config/index.js.map +1 -0
  208. package/dist/core/config/lookup.d.ts +114 -0
  209. package/dist/core/config/lookup.js +221 -0
  210. package/dist/core/config/lookup.js.map +1 -0
  211. package/dist/core/config/remote-blocks.d.ts +17 -0
  212. package/dist/core/config/remote-blocks.js +47 -0
  213. package/dist/core/config/remote-blocks.js.map +1 -0
  214. package/dist/core/config/schema.d.ts +10 -0
  215. package/dist/core/config/schema.js +451 -0
  216. package/dist/core/config/schema.js.map +1 -0
  217. package/dist/core/errors.d.ts +23 -0
  218. package/dist/core/errors.js +31 -0
  219. package/dist/core/errors.js.map +1 -0
  220. package/dist/core/gitsync/hosts.d.ts +40 -0
  221. package/dist/core/gitsync/hosts.js +115 -0
  222. package/dist/core/gitsync/hosts.js.map +1 -0
  223. package/dist/core/gitsync/index.d.ts +25 -0
  224. package/dist/core/gitsync/index.js +25 -0
  225. package/dist/core/gitsync/index.js.map +1 -0
  226. package/dist/core/gitsync/integrate.d.ts +72 -0
  227. package/dist/core/gitsync/integrate.js +115 -0
  228. package/dist/core/gitsync/integrate.js.map +1 -0
  229. package/dist/core/gitsync/repo.d.ts +61 -0
  230. package/dist/core/gitsync/repo.js +213 -0
  231. package/dist/core/gitsync/repo.js.map +1 -0
  232. package/dist/core/gitsync/run.d.ts +58 -0
  233. package/dist/core/gitsync/run.js +102 -0
  234. package/dist/core/gitsync/run.js.map +1 -0
  235. package/dist/core/gitsync/status.d.ts +59 -0
  236. package/dist/core/gitsync/status.js +81 -0
  237. package/dist/core/gitsync/status.js.map +1 -0
  238. package/dist/core/gitsync/sync.d.ts +111 -0
  239. package/dist/core/gitsync/sync.js +275 -0
  240. package/dist/core/gitsync/sync.js.map +1 -0
  241. package/dist/core/index.d.ts +31 -0
  242. package/dist/core/index.js +32 -0
  243. package/dist/core/index.js.map +1 -0
  244. package/dist/core/instructions/analyze.d.ts +70 -0
  245. package/dist/core/instructions/analyze.js +275 -0
  246. package/dist/core/instructions/analyze.js.map +1 -0
  247. package/dist/core/instructions/builtin.d.ts +21 -0
  248. package/dist/core/instructions/builtin.js +133 -0
  249. package/dist/core/instructions/builtin.js.map +1 -0
  250. package/dist/core/instructions/context.d.ts +155 -0
  251. package/dist/core/instructions/context.js +209 -0
  252. package/dist/core/instructions/context.js.map +1 -0
  253. package/dist/core/instructions/index.d.ts +29 -0
  254. package/dist/core/instructions/index.js +30 -0
  255. package/dist/core/instructions/index.js.map +1 -0
  256. package/dist/core/instructions/instructions.d.ts +90 -0
  257. package/dist/core/instructions/instructions.js +179 -0
  258. package/dist/core/instructions/instructions.js.map +1 -0
  259. package/dist/core/instructions/template.d.ts +108 -0
  260. package/dist/core/instructions/template.js +252 -0
  261. package/dist/core/instructions/template.js.map +1 -0
  262. package/dist/core/model/attributes.d.ts +16 -0
  263. package/dist/core/model/attributes.js +119 -0
  264. package/dist/core/model/attributes.js.map +1 -0
  265. package/dist/core/model/index.d.ts +10 -0
  266. package/dist/core/model/index.js +11 -0
  267. package/dist/core/model/index.js.map +1 -0
  268. package/dist/core/model/links.d.ts +34 -0
  269. package/dist/core/model/links.js +114 -0
  270. package/dist/core/model/links.js.map +1 -0
  271. package/dist/core/model/profile.d.ts +31 -0
  272. package/dist/core/model/profile.js +8 -0
  273. package/dist/core/model/profile.js.map +1 -0
  274. package/dist/core/model/types.d.ts +441 -0
  275. package/dist/core/model/types.js +167 -0
  276. package/dist/core/model/types.js.map +1 -0
  277. package/dist/core/model/zod.d.ts +6 -0
  278. package/dist/core/model/zod.js +11 -0
  279. package/dist/core/model/zod.js.map +1 -0
  280. package/dist/core/operations/board-index.d.ts +45 -0
  281. package/dist/core/operations/board-index.js +147 -0
  282. package/dist/core/operations/board-index.js.map +1 -0
  283. package/dist/core/operations/claim.d.ts +69 -0
  284. package/dist/core/operations/claim.js +115 -0
  285. package/dist/core/operations/claim.js.map +1 -0
  286. package/dist/core/operations/comment.d.ts +30 -0
  287. package/dist/core/operations/comment.js +46 -0
  288. package/dist/core/operations/comment.js.map +1 -0
  289. package/dist/core/operations/create.d.ts +82 -0
  290. package/dist/core/operations/create.js +306 -0
  291. package/dist/core/operations/create.js.map +1 -0
  292. package/dist/core/operations/flag.d.ts +58 -0
  293. package/dist/core/operations/flag.js +95 -0
  294. package/dist/core/operations/flag.js.map +1 -0
  295. package/dist/core/operations/git-sync.d.ts +148 -0
  296. package/dist/core/operations/git-sync.js +341 -0
  297. package/dist/core/operations/git-sync.js.map +1 -0
  298. package/dist/core/operations/index.d.ts +44 -0
  299. package/dist/core/operations/index.js +45 -0
  300. package/dist/core/operations/index.js.map +1 -0
  301. package/dist/core/operations/init.d.ts +25 -0
  302. package/dist/core/operations/init.js +122 -0
  303. package/dist/core/operations/init.js.map +1 -0
  304. package/dist/core/operations/link.d.ts +40 -0
  305. package/dist/core/operations/link.js +131 -0
  306. package/dist/core/operations/link.js.map +1 -0
  307. package/dist/core/operations/move.d.ts +43 -0
  308. package/dist/core/operations/move.js +103 -0
  309. package/dist/core/operations/move.js.map +1 -0
  310. package/dist/core/operations/profile.d.ts +23 -0
  311. package/dist/core/operations/profile.js +26 -0
  312. package/dist/core/operations/profile.js.map +1 -0
  313. package/dist/core/operations/remotes-off.d.ts +12 -0
  314. package/dist/core/operations/remotes-off.js +67 -0
  315. package/dist/core/operations/remotes-off.js.map +1 -0
  316. package/dist/core/operations/remove.d.ts +18 -0
  317. package/dist/core/operations/remove.js +114 -0
  318. package/dist/core/operations/remove.js.map +1 -0
  319. package/dist/core/operations/retype.d.ts +25 -0
  320. package/dist/core/operations/retype.js +59 -0
  321. package/dist/core/operations/retype.js.map +1 -0
  322. package/dist/core/operations/rollup.d.ts +74 -0
  323. package/dist/core/operations/rollup.js +121 -0
  324. package/dist/core/operations/rollup.js.map +1 -0
  325. package/dist/core/operations/shared.d.ts +133 -0
  326. package/dist/core/operations/shared.js +383 -0
  327. package/dist/core/operations/shared.js.map +1 -0
  328. package/dist/core/operations/update.d.ts +43 -0
  329. package/dist/core/operations/update.js +161 -0
  330. package/dist/core/operations/update.js.map +1 -0
  331. package/dist/core/operations/user.d.ts +27 -0
  332. package/dist/core/operations/user.js +68 -0
  333. package/dist/core/operations/user.js.map +1 -0
  334. package/dist/core/profile/current.d.ts +35 -0
  335. package/dist/core/profile/current.js +31 -0
  336. package/dist/core/profile/current.js.map +1 -0
  337. package/dist/core/profile/index.d.ts +14 -0
  338. package/dist/core/profile/index.js +15 -0
  339. package/dist/core/profile/index.js.map +1 -0
  340. package/dist/core/profile/schema.d.ts +9 -0
  341. package/dist/core/profile/schema.js +100 -0
  342. package/dist/core/profile/schema.js.map +1 -0
  343. package/dist/core/storage/activity.d.ts +78 -0
  344. package/dist/core/storage/activity.js +131 -0
  345. package/dist/core/storage/activity.js.map +1 -0
  346. package/dist/core/storage/atomic.d.ts +34 -0
  347. package/dist/core/storage/atomic.js +117 -0
  348. package/dist/core/storage/atomic.js.map +1 -0
  349. package/dist/core/storage/comments.d.ts +39 -0
  350. package/dist/core/storage/comments.js +88 -0
  351. package/dist/core/storage/comments.js.map +1 -0
  352. package/dist/core/storage/document.d.ts +16 -0
  353. package/dist/core/storage/document.js +98 -0
  354. package/dist/core/storage/document.js.map +1 -0
  355. package/dist/core/storage/frontmatter.d.ts +16 -0
  356. package/dist/core/storage/frontmatter.js +33 -0
  357. package/dist/core/storage/frontmatter.js.map +1 -0
  358. package/dist/core/storage/git.d.ts +8 -0
  359. package/dist/core/storage/git.js +48 -0
  360. package/dist/core/storage/git.js.map +1 -0
  361. package/dist/core/storage/index.d.ts +27 -0
  362. package/dist/core/storage/index.js +28 -0
  363. package/dist/core/storage/index.js.map +1 -0
  364. package/dist/core/storage/local.d.ts +57 -0
  365. package/dist/core/storage/local.js +133 -0
  366. package/dist/core/storage/local.js.map +1 -0
  367. package/dist/core/storage/lock.d.ts +85 -0
  368. package/dist/core/storage/lock.js +364 -0
  369. package/dist/core/storage/lock.js.map +1 -0
  370. package/dist/core/storage/paths.d.ts +125 -0
  371. package/dist/core/storage/paths.js +202 -0
  372. package/dist/core/storage/paths.js.map +1 -0
  373. package/dist/core/storage/state.d.ts +32 -0
  374. package/dist/core/storage/state.js +71 -0
  375. package/dist/core/storage/state.js.map +1 -0
  376. package/dist/core/storage/templates.d.ts +29 -0
  377. package/dist/core/storage/templates.js +62 -0
  378. package/dist/core/storage/templates.js.map +1 -0
  379. package/dist/core/storage/views.d.ts +18 -0
  380. package/dist/core/storage/views.js +62 -0
  381. package/dist/core/storage/views.js.map +1 -0
  382. package/dist/core/validation/check.d.ts +4 -0
  383. package/dist/core/validation/check.js +22 -0
  384. package/dist/core/validation/check.js.map +1 -0
  385. package/dist/core/validation/checks/collection.d.ts +4 -0
  386. package/dist/core/validation/checks/collection.js +152 -0
  387. package/dist/core/validation/checks/collection.js.map +1 -0
  388. package/dist/core/validation/checks/counters.d.ts +3 -0
  389. package/dist/core/validation/checks/counters.js +23 -0
  390. package/dist/core/validation/checks/counters.js.map +1 -0
  391. package/dist/core/validation/checks/dependencies.d.ts +3 -0
  392. package/dist/core/validation/checks/dependencies.js +58 -0
  393. package/dist/core/validation/checks/dependencies.js.map +1 -0
  394. package/dist/core/validation/checks/gitignore.d.ts +10 -0
  395. package/dist/core/validation/checks/gitignore.js +22 -0
  396. package/dist/core/validation/checks/gitignore.js.map +1 -0
  397. package/dist/core/validation/checks/index-file.d.ts +8 -0
  398. package/dist/core/validation/checks/index-file.js +26 -0
  399. package/dist/core/validation/checks/index-file.js.map +1 -0
  400. package/dist/core/validation/checks/index.d.ts +20 -0
  401. package/dist/core/validation/checks/index.js +21 -0
  402. package/dist/core/validation/checks/index.js.map +1 -0
  403. package/dist/core/validation/checks/issues.d.ts +3 -0
  404. package/dist/core/validation/checks/issues.js +152 -0
  405. package/dist/core/validation/checks/issues.js.map +1 -0
  406. package/dist/core/validation/checks/periods.d.ts +3 -0
  407. package/dist/core/validation/checks/periods.js +89 -0
  408. package/dist/core/validation/checks/periods.js.map +1 -0
  409. package/dist/core/validation/checks/remotes.d.ts +20 -0
  410. package/dist/core/validation/checks/remotes.js +42 -0
  411. package/dist/core/validation/checks/remotes.js.map +1 -0
  412. package/dist/core/validation/checks/resources.d.ts +3 -0
  413. package/dist/core/validation/checks/resources.js +77 -0
  414. package/dist/core/validation/checks/resources.js.map +1 -0
  415. package/dist/core/validation/checks/rollup.d.ts +27 -0
  416. package/dist/core/validation/checks/rollup.js +53 -0
  417. package/dist/core/validation/checks/rollup.js.map +1 -0
  418. package/dist/core/validation/checks/squads.d.ts +3 -0
  419. package/dist/core/validation/checks/squads.js +42 -0
  420. package/dist/core/validation/checks/squads.js.map +1 -0
  421. package/dist/core/validation/checks/templates.d.ts +14 -0
  422. package/dist/core/validation/checks/templates.js +119 -0
  423. package/dist/core/validation/checks/templates.js.map +1 -0
  424. package/dist/core/validation/fix.d.ts +7 -0
  425. package/dist/core/validation/fix.js +273 -0
  426. package/dist/core/validation/fix.js.map +1 -0
  427. package/dist/core/validation/index.d.ts +7 -0
  428. package/dist/core/validation/index.js +8 -0
  429. package/dist/core/validation/index.js.map +1 -0
  430. package/dist/core/validation/shared.d.ts +47 -0
  431. package/dist/core/validation/shared.js +66 -0
  432. package/dist/core/validation/shared.js.map +1 -0
  433. package/dist/mcp/context.d.ts +70 -0
  434. package/dist/mcp/context.js +110 -0
  435. package/dist/mcp/context.js.map +1 -0
  436. package/dist/mcp/index.d.ts +49 -0
  437. package/dist/mcp/index.js +90 -0
  438. package/dist/mcp/index.js.map +1 -0
  439. package/dist/mcp/reply.d.ts +28 -0
  440. package/dist/mcp/reply.js +34 -0
  441. package/dist/mcp/reply.js.map +1 -0
  442. package/dist/mcp/tools/plan/create.d.ts +3 -0
  443. package/dist/mcp/tools/plan/create.js +128 -0
  444. package/dist/mcp/tools/plan/create.js.map +1 -0
  445. package/dist/mcp/tools/plan/delete.d.ts +3 -0
  446. package/dist/mcp/tools/plan/delete.js +35 -0
  447. package/dist/mcp/tools/plan/delete.js.map +1 -0
  448. package/dist/mcp/tools/plan/graph.d.ts +3 -0
  449. package/dist/mcp/tools/plan/graph.js +53 -0
  450. package/dist/mcp/tools/plan/graph.js.map +1 -0
  451. package/dist/mcp/tools/plan/index.d.ts +15 -0
  452. package/dist/mcp/tools/plan/index.js +16 -0
  453. package/dist/mcp/tools/plan/index.js.map +1 -0
  454. package/dist/mcp/tools/plan/link.d.ts +3 -0
  455. package/dist/mcp/tools/plan/link.js +46 -0
  456. package/dist/mcp/tools/plan/link.js.map +1 -0
  457. package/dist/mcp/tools/plan/registrar.d.ts +10 -0
  458. package/dist/mcp/tools/plan/registrar.js +24 -0
  459. package/dist/mcp/tools/plan/registrar.js.map +1 -0
  460. package/dist/mcp/tools/plan/reshape.d.ts +3 -0
  461. package/dist/mcp/tools/plan/reshape.js +95 -0
  462. package/dist/mcp/tools/plan/reshape.js.map +1 -0
  463. package/dist/mcp/tools/plan/timeline.d.ts +3 -0
  464. package/dist/mcp/tools/plan/timeline.js +68 -0
  465. package/dist/mcp/tools/plan/timeline.js.map +1 -0
  466. package/dist/mcp/tools/plan/upstream.d.ts +14 -0
  467. package/dist/mcp/tools/plan/upstream.js +69 -0
  468. package/dist/mcp/tools/plan/upstream.js.map +1 -0
  469. package/dist/mcp/tools/plan.d.ts +1 -0
  470. package/dist/mcp/tools/plan.js +2 -0
  471. package/dist/mcp/tools/plan.js.map +1 -0
  472. package/dist/mcp/tools/read.d.ts +3 -0
  473. package/dist/mcp/tools/read.js +339 -0
  474. package/dist/mcp/tools/read.js.map +1 -0
  475. package/dist/mcp/tools/remote.d.ts +3 -0
  476. package/dist/mcp/tools/remote.js +254 -0
  477. package/dist/mcp/tools/remote.js.map +1 -0
  478. package/dist/mcp/tools/templates.d.ts +12 -0
  479. package/dist/mcp/tools/templates.js +165 -0
  480. package/dist/mcp/tools/templates.js.map +1 -0
  481. package/dist/mcp/tools/work.d.ts +16 -0
  482. package/dist/mcp/tools/work.js +359 -0
  483. package/dist/mcp/tools/work.js.map +1 -0
  484. package/dist/remote/accounts.d.ts +158 -0
  485. package/dist/remote/accounts.js +207 -0
  486. package/dist/remote/accounts.js.map +1 -0
  487. package/dist/remote/adopt.d.ts +139 -0
  488. package/dist/remote/adopt.js +181 -0
  489. package/dist/remote/adopt.js.map +1 -0
  490. package/dist/remote/anchor.d.ts +35 -0
  491. package/dist/remote/anchor.js +53 -0
  492. package/dist/remote/anchor.js.map +1 -0
  493. package/dist/remote/attributes.d.ts +103 -0
  494. package/dist/remote/attributes.js +245 -0
  495. package/dist/remote/attributes.js.map +1 -0
  496. package/dist/remote/audit.d.ts +112 -0
  497. package/dist/remote/audit.js +215 -0
  498. package/dist/remote/audit.js.map +1 -0
  499. package/dist/remote/capabilities.d.ts +267 -0
  500. package/dist/remote/capabilities.js +225 -0
  501. package/dist/remote/capabilities.js.map +1 -0
  502. package/dist/remote/check.d.ts +49 -0
  503. package/dist/remote/check.js +356 -0
  504. package/dist/remote/check.js.map +1 -0
  505. package/dist/remote/comments.d.ts +86 -0
  506. package/dist/remote/comments.js +87 -0
  507. package/dist/remote/comments.js.map +1 -0
  508. package/dist/remote/config-file.d.ts +237 -0
  509. package/dist/remote/config-file.js +640 -0
  510. package/dist/remote/config-file.js.map +1 -0
  511. package/dist/remote/conflicts.d.ts +110 -0
  512. package/dist/remote/conflicts.js +188 -0
  513. package/dist/remote/conflicts.js.map +1 -0
  514. package/dist/remote/connection-catalogue.d.ts +65 -0
  515. package/dist/remote/connection-catalogue.js +66 -0
  516. package/dist/remote/connection-catalogue.js.map +1 -0
  517. package/dist/remote/connection.d.ts +84 -0
  518. package/dist/remote/connection.js +229 -0
  519. package/dist/remote/connection.js.map +1 -0
  520. package/dist/remote/coverage.d.ts +65 -0
  521. package/dist/remote/coverage.js +244 -0
  522. package/dist/remote/coverage.js.map +1 -0
  523. package/dist/remote/credentials.d.ts +95 -0
  524. package/dist/remote/credentials.js +210 -0
  525. package/dist/remote/credentials.js.map +1 -0
  526. package/dist/remote/execute.d.ts +178 -0
  527. package/dist/remote/execute.js +1245 -0
  528. package/dist/remote/execute.js.map +1 -0
  529. package/dist/remote/fingerprint.d.ts +172 -0
  530. package/dist/remote/fingerprint.js +337 -0
  531. package/dist/remote/fingerprint.js.map +1 -0
  532. package/dist/remote/fixtures.d.ts +176 -0
  533. package/dist/remote/fixtures.js +432 -0
  534. package/dist/remote/fixtures.js.map +1 -0
  535. package/dist/remote/guard.d.ts +90 -0
  536. package/dist/remote/guard.js +83 -0
  537. package/dist/remote/guard.js.map +1 -0
  538. package/dist/remote/hierarchy.d.ts +141 -0
  539. package/dist/remote/hierarchy.js +129 -0
  540. package/dist/remote/hierarchy.js.map +1 -0
  541. package/dist/remote/index.d.ts +145 -0
  542. package/dist/remote/index.js +146 -0
  543. package/dist/remote/index.js.map +1 -0
  544. package/dist/remote/inspect.d.ts +103 -0
  545. package/dist/remote/inspect.js +152 -0
  546. package/dist/remote/inspect.js.map +1 -0
  547. package/dist/remote/labels.d.ts +75 -0
  548. package/dist/remote/labels.js +137 -0
  549. package/dist/remote/labels.js.map +1 -0
  550. package/dist/remote/ladder.d.ts +145 -0
  551. package/dist/remote/ladder.js +387 -0
  552. package/dist/remote/ladder.js.map +1 -0
  553. package/dist/remote/ledger.d.ts +97 -0
  554. package/dist/remote/ledger.js +148 -0
  555. package/dist/remote/ledger.js.map +1 -0
  556. package/dist/remote/lifecycle.d.ts +175 -0
  557. package/dist/remote/lifecycle.js +274 -0
  558. package/dist/remote/lifecycle.js.map +1 -0
  559. package/dist/remote/links.d.ts +411 -0
  560. package/dist/remote/links.js +748 -0
  561. package/dist/remote/links.js.map +1 -0
  562. package/dist/remote/managed-block.d.ts +182 -0
  563. package/dist/remote/managed-block.js +406 -0
  564. package/dist/remote/managed-block.js.map +1 -0
  565. package/dist/remote/managed-comment.d.ts +104 -0
  566. package/dist/remote/managed-comment.js +92 -0
  567. package/dist/remote/managed-comment.js.map +1 -0
  568. package/dist/remote/mapping.d.ts +282 -0
  569. package/dist/remote/mapping.js +336 -0
  570. package/dist/remote/mapping.js.map +1 -0
  571. package/dist/remote/merge.d.ts +172 -0
  572. package/dist/remote/merge.js +221 -0
  573. package/dist/remote/merge.js.map +1 -0
  574. package/dist/remote/periods.d.ts +209 -0
  575. package/dist/remote/periods.js +224 -0
  576. package/dist/remote/periods.js.map +1 -0
  577. package/dist/remote/plan.d.ts +671 -0
  578. package/dist/remote/plan.js +1210 -0
  579. package/dist/remote/plan.js.map +1 -0
  580. package/dist/remote/policy.d.ts +67 -0
  581. package/dist/remote/policy.js +67 -0
  582. package/dist/remote/policy.js.map +1 -0
  583. package/dist/remote/preflight.d.ts +112 -0
  584. package/dist/remote/preflight.js +342 -0
  585. package/dist/remote/preflight.js.map +1 -0
  586. package/dist/remote/prerequisites.d.ts +113 -0
  587. package/dist/remote/prerequisites.js +161 -0
  588. package/dist/remote/prerequisites.js.map +1 -0
  589. package/dist/remote/provider.d.ts +802 -0
  590. package/dist/remote/provider.js +27 -0
  591. package/dist/remote/provider.js.map +1 -0
  592. package/dist/remote/providers/github/config.d.ts +84 -0
  593. package/dist/remote/providers/github/config.js +161 -0
  594. package/dist/remote/providers/github/config.js.map +1 -0
  595. package/dist/remote/providers/github/connector.d.ts +33 -0
  596. package/dist/remote/providers/github/connector.js +774 -0
  597. package/dist/remote/providers/github/connector.js.map +1 -0
  598. package/dist/remote/providers/github/edges.d.ts +29 -0
  599. package/dist/remote/providers/github/edges.js +56 -0
  600. package/dist/remote/providers/github/edges.js.map +1 -0
  601. package/dist/remote/providers/github/hierarchy.d.ts +21 -0
  602. package/dist/remote/providers/github/hierarchy.js +46 -0
  603. package/dist/remote/providers/github/hierarchy.js.map +1 -0
  604. package/dist/remote/providers/github/index.d.ts +26 -0
  605. package/dist/remote/providers/github/index.js +69 -0
  606. package/dist/remote/providers/github/index.js.map +1 -0
  607. package/dist/remote/providers/github/project-iteration.d.ts +71 -0
  608. package/dist/remote/providers/github/project-iteration.js +203 -0
  609. package/dist/remote/providers/github/project-iteration.js.map +1 -0
  610. package/dist/remote/providers/github/project-provision.d.ts +130 -0
  611. package/dist/remote/providers/github/project-provision.js +247 -0
  612. package/dist/remote/providers/github/project-provision.js.map +1 -0
  613. package/dist/remote/providers/github/project-status.d.ts +115 -0
  614. package/dist/remote/providers/github/project-status.js +317 -0
  615. package/dist/remote/providers/github/project-status.js.map +1 -0
  616. package/dist/remote/providers/github/projects.d.ts +181 -0
  617. package/dist/remote/providers/github/projects.js +481 -0
  618. package/dist/remote/providers/github/projects.js.map +1 -0
  619. package/dist/remote/providers/github/translator.d.ts +103 -0
  620. package/dist/remote/providers/github/translator.js +400 -0
  621. package/dist/remote/providers/github/translator.js.map +1 -0
  622. package/dist/remote/providers/jira/config.d.ts +96 -0
  623. package/dist/remote/providers/jira/config.js +200 -0
  624. package/dist/remote/providers/jira/config.js.map +1 -0
  625. package/dist/remote/providers/jira/connector.d.ts +42 -0
  626. package/dist/remote/providers/jira/connector.js +1688 -0
  627. package/dist/remote/providers/jira/connector.js.map +1 -0
  628. package/dist/remote/providers/jira/fields.d.ts +292 -0
  629. package/dist/remote/providers/jira/fields.js +463 -0
  630. package/dist/remote/providers/jira/fields.js.map +1 -0
  631. package/dist/remote/providers/jira/hierarchy.d.ts +28 -0
  632. package/dist/remote/providers/jira/hierarchy.js +60 -0
  633. package/dist/remote/providers/jira/hierarchy.js.map +1 -0
  634. package/dist/remote/providers/jira/index.d.ts +29 -0
  635. package/dist/remote/providers/jira/index.js +100 -0
  636. package/dist/remote/providers/jira/index.js.map +1 -0
  637. package/dist/remote/providers/jira/links.d.ts +41 -0
  638. package/dist/remote/providers/jira/links.js +102 -0
  639. package/dist/remote/providers/jira/links.js.map +1 -0
  640. package/dist/remote/providers/jira/sprints.d.ts +80 -0
  641. package/dist/remote/providers/jira/sprints.js +107 -0
  642. package/dist/remote/providers/jira/sprints.js.map +1 -0
  643. package/dist/remote/providers/jira/translator.d.ts +61 -0
  644. package/dist/remote/providers/jira/translator.js +382 -0
  645. package/dist/remote/providers/jira/translator.js.map +1 -0
  646. package/dist/remote/providers/jira/types.d.ts +112 -0
  647. package/dist/remote/providers/jira/types.js +160 -0
  648. package/dist/remote/providers/jira/types.js.map +1 -0
  649. package/dist/remote/providers/jira/vocabulary.d.ts +55 -0
  650. package/dist/remote/providers/jira/vocabulary.js +91 -0
  651. package/dist/remote/providers/jira/vocabulary.js.map +1 -0
  652. package/dist/remote/providers/jsonfile/config.d.ts +61 -0
  653. package/dist/remote/providers/jsonfile/config.js +83 -0
  654. package/dist/remote/providers/jsonfile/config.js.map +1 -0
  655. package/dist/remote/providers/jsonfile/connector.d.ts +34 -0
  656. package/dist/remote/providers/jsonfile/connector.js +251 -0
  657. package/dist/remote/providers/jsonfile/connector.js.map +1 -0
  658. package/dist/remote/providers/jsonfile/index.d.ts +38 -0
  659. package/dist/remote/providers/jsonfile/index.js +90 -0
  660. package/dist/remote/providers/jsonfile/index.js.map +1 -0
  661. package/dist/remote/providers/jsonfile/store.d.ts +59 -0
  662. package/dist/remote/providers/jsonfile/store.js +48 -0
  663. package/dist/remote/providers/jsonfile/store.js.map +1 -0
  664. package/dist/remote/providers/jsonfile/translator.d.ts +54 -0
  665. package/dist/remote/providers/jsonfile/translator.js +199 -0
  666. package/dist/remote/providers/jsonfile/translator.js.map +1 -0
  667. package/dist/remote/providers/linear/config.d.ts +83 -0
  668. package/dist/remote/providers/linear/config.js +140 -0
  669. package/dist/remote/providers/linear/config.js.map +1 -0
  670. package/dist/remote/providers/linear/connector.d.ts +36 -0
  671. package/dist/remote/providers/linear/connector.js +438 -0
  672. package/dist/remote/providers/linear/connector.js.map +1 -0
  673. package/dist/remote/providers/linear/estimate.d.ts +63 -0
  674. package/dist/remote/providers/linear/estimate.js +112 -0
  675. package/dist/remote/providers/linear/estimate.js.map +1 -0
  676. package/dist/remote/providers/linear/index.d.ts +31 -0
  677. package/dist/remote/providers/linear/index.js +75 -0
  678. package/dist/remote/providers/linear/index.js.map +1 -0
  679. package/dist/remote/providers/linear/labels.d.ts +51 -0
  680. package/dist/remote/providers/linear/labels.js +129 -0
  681. package/dist/remote/providers/linear/labels.js.map +1 -0
  682. package/dist/remote/providers/linear/states.d.ts +97 -0
  683. package/dist/remote/providers/linear/states.js +124 -0
  684. package/dist/remote/providers/linear/states.js.map +1 -0
  685. package/dist/remote/providers/linear/translator.d.ts +48 -0
  686. package/dist/remote/providers/linear/translator.js +343 -0
  687. package/dist/remote/providers/linear/translator.js.map +1 -0
  688. package/dist/remote/providers/linear/vocabulary.d.ts +27 -0
  689. package/dist/remote/providers/linear/vocabulary.js +42 -0
  690. package/dist/remote/providers/linear/vocabulary.js.map +1 -0
  691. package/dist/remote/provision.d.ts +45 -0
  692. package/dist/remote/provision.js +81 -0
  693. package/dist/remote/provision.js.map +1 -0
  694. package/dist/remote/pull.d.ts +52 -0
  695. package/dist/remote/pull.js +116 -0
  696. package/dist/remote/pull.js.map +1 -0
  697. package/dist/remote/readiness.d.ts +67 -0
  698. package/dist/remote/readiness.js +336 -0
  699. package/dist/remote/readiness.js.map +1 -0
  700. package/dist/remote/rebase.d.ts +157 -0
  701. package/dist/remote/rebase.js +255 -0
  702. package/dist/remote/rebase.js.map +1 -0
  703. package/dist/remote/reconcile.d.ts +115 -0
  704. package/dist/remote/reconcile.js +140 -0
  705. package/dist/remote/reconcile.js.map +1 -0
  706. package/dist/remote/redact.d.ts +70 -0
  707. package/dist/remote/redact.js +132 -0
  708. package/dist/remote/redact.js.map +1 -0
  709. package/dist/remote/registry.d.ts +32 -0
  710. package/dist/remote/registry.js +54 -0
  711. package/dist/remote/registry.js.map +1 -0
  712. package/dist/remote/remotes.d.ts +94 -0
  713. package/dist/remote/remotes.js +182 -0
  714. package/dist/remote/remotes.js.map +1 -0
  715. package/dist/remote/render.d.ts +147 -0
  716. package/dist/remote/render.js +683 -0
  717. package/dist/remote/render.js.map +1 -0
  718. package/dist/remote/report.d.ts +63 -0
  719. package/dist/remote/report.js +345 -0
  720. package/dist/remote/report.js.map +1 -0
  721. package/dist/remote/resolutions.d.ts +115 -0
  722. package/dist/remote/resolutions.js +217 -0
  723. package/dist/remote/resolutions.js.map +1 -0
  724. package/dist/remote/scaffold.d.ts +134 -0
  725. package/dist/remote/scaffold.js +370 -0
  726. package/dist/remote/scaffold.js.map +1 -0
  727. package/dist/remote/scope.d.ts +57 -0
  728. package/dist/remote/scope.js +91 -0
  729. package/dist/remote/scope.js.map +1 -0
  730. package/dist/remote/selection.d.ts +38 -0
  731. package/dist/remote/selection.js +50 -0
  732. package/dist/remote/selection.js.map +1 -0
  733. package/dist/remote/shape.d.ts +141 -0
  734. package/dist/remote/shape.js +220 -0
  735. package/dist/remote/shape.js.map +1 -0
  736. package/dist/remote/status.d.ts +104 -0
  737. package/dist/remote/status.js +238 -0
  738. package/dist/remote/status.js.map +1 -0
  739. package/dist/remote/sync.d.ts +182 -0
  740. package/dist/remote/sync.js +523 -0
  741. package/dist/remote/sync.js.map +1 -0
  742. package/dist/remote/transport/budget.d.ts +48 -0
  743. package/dist/remote/transport/budget.js +68 -0
  744. package/dist/remote/transport/budget.js.map +1 -0
  745. package/dist/remote/transport/connector.d.ts +115 -0
  746. package/dist/remote/transport/connector.js +21 -0
  747. package/dist/remote/transport/connector.js.map +1 -0
  748. package/dist/remote/transport/error.d.ts +88 -0
  749. package/dist/remote/transport/error.js +196 -0
  750. package/dist/remote/transport/error.js.map +1 -0
  751. package/dist/remote/transport/gh.d.ts +20 -0
  752. package/dist/remote/transport/gh.js +41 -0
  753. package/dist/remote/transport/gh.js.map +1 -0
  754. package/dist/remote/transport/graphql.d.ts +25 -0
  755. package/dist/remote/transport/graphql.js +81 -0
  756. package/dist/remote/transport/graphql.js.map +1 -0
  757. package/dist/remote/transport/http.d.ts +47 -0
  758. package/dist/remote/transport/http.js +195 -0
  759. package/dist/remote/transport/http.js.map +1 -0
  760. package/dist/remote/transport/index.d.ts +18 -0
  761. package/dist/remote/transport/index.js +19 -0
  762. package/dist/remote/transport/index.js.map +1 -0
  763. package/dist/remote/transport/process.d.ts +39 -0
  764. package/dist/remote/transport/process.js +121 -0
  765. package/dist/remote/transport/process.js.map +1 -0
  766. package/dist/remote/transport/rest.d.ts +22 -0
  767. package/dist/remote/transport/rest.js +57 -0
  768. package/dist/remote/transport/rest.js.map +1 -0
  769. package/dist/remote/transport/retry.d.ts +91 -0
  770. package/dist/remote/transport/retry.js +138 -0
  771. package/dist/remote/transport/retry.js.map +1 -0
  772. package/dist/remote/transport-error.d.ts +19 -0
  773. package/dist/remote/transport-error.js +22 -0
  774. package/dist/remote/transport-error.js.map +1 -0
  775. package/dist/remote/vocabulary.d.ts +126 -0
  776. package/dist/remote/vocabulary.js +57 -0
  777. package/dist/remote/vocabulary.js.map +1 -0
  778. package/dist/runner/config.d.ts +7 -0
  779. package/dist/runner/config.js +61 -0
  780. package/dist/runner/config.js.map +1 -0
  781. package/dist/runner/git.d.ts +19 -0
  782. package/dist/runner/git.js +26 -0
  783. package/dist/runner/git.js.map +1 -0
  784. package/dist/runner/index.d.ts +20 -0
  785. package/dist/runner/index.js +21 -0
  786. package/dist/runner/index.js.map +1 -0
  787. package/dist/runner/loop.d.ts +46 -0
  788. package/dist/runner/loop.js +243 -0
  789. package/dist/runner/loop.js.map +1 -0
  790. package/dist/runner/pi.d.ts +39 -0
  791. package/dist/runner/pi.js +276 -0
  792. package/dist/runner/pi.js.map +1 -0
  793. package/dist/runner/shell.d.ts +44 -0
  794. package/dist/runner/shell.js +174 -0
  795. package/dist/runner/shell.js.map +1 -0
  796. package/dist/runner/stats.d.ts +19 -0
  797. package/dist/runner/stats.js +58 -0
  798. package/dist/runner/stats.js.map +1 -0
  799. package/dist/runner/types.d.ts +218 -0
  800. package/dist/runner/types.js +37 -0
  801. package/dist/runner/types.js.map +1 -0
  802. package/dist/server/git.d.ts +8 -0
  803. package/dist/server/git.js +50 -0
  804. package/dist/server/git.js.map +1 -0
  805. package/dist/server/http/respond.d.ts +13 -0
  806. package/dist/server/http/respond.js +59 -0
  807. package/dist/server/http/respond.js.map +1 -0
  808. package/dist/server/http/router.d.ts +27 -0
  809. package/dist/server/http/router.js +48 -0
  810. package/dist/server/http/router.js.map +1 -0
  811. package/dist/server/http/static.d.ts +14 -0
  812. package/dist/server/http/static.js +55 -0
  813. package/dist/server/http/static.js.map +1 -0
  814. package/dist/server/index.d.ts +58 -0
  815. package/dist/server/index.js +124 -0
  816. package/dist/server/index.js.map +1 -0
  817. package/dist/server/routes/board.d.ts +8 -0
  818. package/dist/server/routes/board.js +19 -0
  819. package/dist/server/routes/board.js.map +1 -0
  820. package/dist/server/routes/comments.d.ts +13 -0
  821. package/dist/server/routes/comments.js +36 -0
  822. package/dist/server/routes/comments.js.map +1 -0
  823. package/dist/server/routes/flags.d.ts +16 -0
  824. package/dist/server/routes/flags.js +37 -0
  825. package/dist/server/routes/flags.js.map +1 -0
  826. package/dist/server/routes/git.d.ts +13 -0
  827. package/dist/server/routes/git.js +84 -0
  828. package/dist/server/routes/git.js.map +1 -0
  829. package/dist/server/routes/remotes.d.ts +36 -0
  830. package/dist/server/routes/remotes.js +749 -0
  831. package/dist/server/routes/remotes.js.map +1 -0
  832. package/dist/server/routes/views.d.ts +10 -0
  833. package/dist/server/routes/views.js +63 -0
  834. package/dist/server/routes/views.js.map +1 -0
  835. package/dist/server/views/schema.d.ts +2 -0
  836. package/dist/server/views/schema.js +121 -0
  837. package/dist/server/views/schema.js.map +1 -0
  838. package/dist/server/views/store.d.ts +17 -0
  839. package/dist/server/views/store.js +67 -0
  840. package/dist/server/views/store.js.map +1 -0
  841. package/dist/shared/adf.d.ts +83 -0
  842. package/dist/shared/adf.js +795 -0
  843. package/dist/shared/adf.js.map +1 -0
  844. package/dist/shared/blocking.d.ts +130 -0
  845. package/dist/shared/blocking.js +179 -0
  846. package/dist/shared/blocking.js.map +1 -0
  847. package/dist/shared/changes.d.ts +100 -0
  848. package/dist/shared/changes.js +112 -0
  849. package/dist/shared/changes.js.map +1 -0
  850. package/dist/shared/cohesion.d.ts +75 -0
  851. package/dist/shared/cohesion.js +132 -0
  852. package/dist/shared/cohesion.js.map +1 -0
  853. package/dist/shared/dependency-rollup.d.ts +91 -0
  854. package/dist/shared/dependency-rollup.js +132 -0
  855. package/dist/shared/dependency-rollup.js.map +1 -0
  856. package/dist/shared/errors.d.ts +23 -0
  857. package/dist/shared/errors.js +24 -0
  858. package/dist/shared/errors.js.map +1 -0
  859. package/dist/shared/flag-rollup.d.ts +88 -0
  860. package/dist/shared/flag-rollup.js +119 -0
  861. package/dist/shared/flag-rollup.js.map +1 -0
  862. package/dist/shared/git-sync.d.ts +90 -0
  863. package/dist/shared/git-sync.js +9 -0
  864. package/dist/shared/git-sync.js.map +1 -0
  865. package/dist/shared/index.d.ts +40 -0
  866. package/dist/shared/index.js +41 -0
  867. package/dist/shared/index.js.map +1 -0
  868. package/dist/shared/model.d.ts +218 -0
  869. package/dist/shared/model.js +95 -0
  870. package/dist/shared/model.js.map +1 -0
  871. package/dist/shared/period-query.d.ts +21 -0
  872. package/dist/shared/period-query.js +26 -0
  873. package/dist/shared/period-query.js.map +1 -0
  874. package/dist/shared/period-stance.d.ts +45 -0
  875. package/dist/shared/period-stance.js +50 -0
  876. package/dist/shared/period-stance.js.map +1 -0
  877. package/dist/shared/plans/breakdown.d.ts +66 -0
  878. package/dist/shared/plans/breakdown.js +186 -0
  879. package/dist/shared/plans/breakdown.js.map +1 -0
  880. package/dist/shared/plans/index.d.ts +21 -0
  881. package/dist/shared/plans/index.js +22 -0
  882. package/dist/shared/plans/index.js.map +1 -0
  883. package/dist/shared/plans/instantiate.d.ts +61 -0
  884. package/dist/shared/plans/instantiate.js +184 -0
  885. package/dist/shared/plans/instantiate.js.map +1 -0
  886. package/dist/shared/plans/reading.d.ts +79 -0
  887. package/dist/shared/plans/reading.js +149 -0
  888. package/dist/shared/plans/reading.js.map +1 -0
  889. package/dist/shared/plans/reparent.d.ts +54 -0
  890. package/dist/shared/plans/reparent.js +217 -0
  891. package/dist/shared/plans/reparent.js.map +1 -0
  892. package/dist/shared/plans/timeline.d.ts +93 -0
  893. package/dist/shared/plans/timeline.js +224 -0
  894. package/dist/shared/plans/timeline.js.map +1 -0
  895. package/dist/shared/plans/upstream.d.ts +67 -0
  896. package/dist/shared/plans/upstream.js +73 -0
  897. package/dist/shared/plans/upstream.js.map +1 -0
  898. package/dist/shared/remote-api.d.ts +413 -0
  899. package/dist/shared/remote-api.js +11 -0
  900. package/dist/shared/remote-api.js.map +1 -0
  901. package/dist/shared/remote-coverage.d.ts +120 -0
  902. package/dist/shared/remote-coverage.js +98 -0
  903. package/dist/shared/remote-coverage.js.map +1 -0
  904. package/dist/shared/remote-readiness.d.ts +162 -0
  905. package/dist/shared/remote-readiness.js +49 -0
  906. package/dist/shared/remote-readiness.js.map +1 -0
  907. package/dist/shared/remote-status.d.ts +268 -0
  908. package/dist/shared/remote-status.js +79 -0
  909. package/dist/shared/remote-status.js.map +1 -0
  910. package/dist/shared/rollup.d.ts +90 -0
  911. package/dist/shared/rollup.js +119 -0
  912. package/dist/shared/rollup.js.map +1 -0
  913. package/dist/shared/static.d.ts +65 -0
  914. package/dist/shared/static.js +107 -0
  915. package/dist/shared/static.js.map +1 -0
  916. package/dist/shared/template-params.d.ts +80 -0
  917. package/dist/shared/template-params.js +141 -0
  918. package/dist/shared/template-params.js.map +1 -0
  919. package/dist/shared/view.d.ts +105 -0
  920. package/dist/shared/view.js +44 -0
  921. package/dist/shared/view.js.map +1 -0
  922. package/dist/shared/work-unit.d.ts +34 -0
  923. package/dist/shared/work-unit.js +47 -0
  924. package/dist/shared/work-unit.js.map +1 -0
  925. package/dist/sync/apply.d.ts +21 -0
  926. package/dist/sync/apply.js +149 -0
  927. package/dist/sync/apply.js.map +1 -0
  928. package/dist/sync/dto.d.ts +9 -0
  929. package/dist/sync/dto.js +162 -0
  930. package/dist/sync/dto.js.map +1 -0
  931. package/dist/sync/index.d.ts +24 -0
  932. package/dist/sync/index.js +25 -0
  933. package/dist/sync/index.js.map +1 -0
  934. package/dist/sync/patch.d.ts +13 -0
  935. package/dist/sync/patch.js +212 -0
  936. package/dist/sync/patch.js.map +1 -0
  937. package/dist/sync/session.d.ts +31 -0
  938. package/dist/sync/session.js +55 -0
  939. package/dist/sync/session.js.map +1 -0
  940. package/dist/sync/static.d.ts +11 -0
  941. package/dist/sync/static.js +33 -0
  942. package/dist/sync/static.js.map +1 -0
  943. package/package.json +95 -4
  944. package/templates/blank.yml +71 -0
  945. package/templates/context/bug.md +107 -0
  946. package/templates/context/default.md +119 -0
  947. package/templates/context/epic.md +81 -0
  948. package/templates/context/feature.md +91 -0
  949. package/templates/context/research.md +87 -0
  950. package/templates/context/review.md +81 -0
  951. package/templates/context/story.md +94 -0
  952. package/templates/context/sub_task.md +108 -0
  953. package/templates/context/task.md +86 -0
  954. package/templates/context/test.md +73 -0
  955. package/templates/context/user_story.md +147 -0
  956. package/templates/kanban.yml +226 -0
  957. package/templates/scrum.yml +567 -0
  958. package/web/dist/assets/index-D0j8OnHq.js +35 -0
  959. package/web/dist/assets/index-DFL7v8aP.css +1 -0
  960. package/web/dist/index.html +13 -0
  961. package/web/dist-viewer/assets/index-Bcns6OuC.css +1 -0
  962. package/web/dist-viewer/assets/index-vVXzeiFo.js +7 -0
  963. package/web/dist-viewer/index.html +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"periods.js","sourceRoot":"","sources":["../../src/remote/periods.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,671 @@
1
+ /**
2
+ * The push and pull planners — pure functions from a board to a plan.
3
+ *
4
+ * planPush(board, links, remote) → PushPlan (LP-280, this file)
5
+ * planPull(board, links, remote, options) → PullPlan (LP-281, this file)
6
+ *
7
+ * Both take a `BoardView` DTO rather than a `LoadedBoard`, so neither needs a
8
+ * filesystem handle and the plan is a plain data structure a dry-run can render
9
+ * and an executor can walk. Neither touches the disk or the network: the push
10
+ * plan is handed to the executor (`LP-490`), the pull plan to `applyChanges`
11
+ * from `src/sync`.
12
+ *
13
+ * ## Why a push plan exists at all
14
+ *
15
+ * A push is a list of *remote operations*, not a batch write. The remote is a
16
+ * separate system with its own ids, its own workflow and its own idea of a
17
+ * parent, so the plan has to say, in order:
18
+ *
19
+ * 1. what to create, parents before children (a parent must exist before its
20
+ * children are filed under it);
21
+ * 2. what to update / transition / close, for documents that already have a
22
+ * twin;
23
+ * 3. what to link and unlink, after every endpoint exists.
24
+ *
25
+ * Two rules make the order load-bearing. A `create` op carries no remote id —
26
+ * it is referenced by a **placeholder** (`new:1`) until the executor resolves
27
+ * it against the response — and an edge (`link` / `unlink`) is emitted only
28
+ * once both endpoints exist, so a document created in this same push can be an
29
+ * endpoint. That is the held-back-link trick `src/sync/patch.ts` uses for
30
+ * `depends_on`, expressed here as a rule about op order rather than a deferred
31
+ * patch: every edge is placed after every create and update, and it references
32
+ * its endpoints through a `RemoteRef` that is either a recorded twin or a
33
+ * placeholder.
34
+ *
35
+ * ## What this file deliberately does not do
36
+ *
37
+ * - **Conflict detection on the push side** (both sides edited a field) is
38
+ * `LP-257`'s; `planPush` diffs a document against its base and pushes what
39
+ * changed locally — it never consults the remote side for a pushed field.
40
+ * The pull planner *does* detect a both-sides edit: a field both sides
41
+ * changed is reported in `PullPlan.fieldConflicts` rather than written.
42
+ * - **Existence and shape** (the twin was deleted, moved or converted) is
43
+ * `LP-361`'s; `remote.issues` is part of the input so that story and the pull
44
+ * planner can read it, but this planner does not yet act on it.
45
+ * - **The mapping** is the translator's job at execution time. The planner
46
+ * decides *what* changed against the base snapshot and *in what order* it is
47
+ * pushed; it never turns a board status into a remote state.
48
+ * - **`relates_to`** is a non-gating edge: it is linked / unlinked natively
49
+ * only where the provider declares a native relate edge (Jira, LP-325), and
50
+ * rides the managed block everywhere else (LP-314).
51
+ */
52
+ import type { RemoteDirection, RemoteOnDelete } from '../core/model/types.js';
53
+ import type { RemoteCommentsMode } from '../core/model/types.js';
54
+ import type { Change } from '../shared/changes.js';
55
+ import type { BoardView } from '../shared/plans/reading.js';
56
+ import type { ResolvedHierarchy } from './hierarchy.js';
57
+ import type { LinkStore } from './links.js';
58
+ import type { ManagedBlockEntry, ManagedBlockLinks } from './managed-block.js';
59
+ import { type LocalComment } from './comments.js';
60
+ import type { BoardFields, BoardFieldsPatch, LinkKind, RemoteComment, RemoteRecord } from './provider.js';
61
+ /**
62
+ * The remote as a planner sees it: how it is declared to sync, plus the
63
+ * remote-side issue state the executor captured before planning.
64
+ *
65
+ * `direction` and `scope` come from the remote's declaration; `issues` is the
66
+ * live listing (remote id → raw record). The push planner reads the first two
67
+ * and leaves `issues` to the pull planner and the lifecycle/conflict stories;
68
+ * it is carried here so one snapshot serves both directions.
69
+ */
70
+ export interface RemoteSnapshot {
71
+ /** The remote's declared direction; a pull-only remote plans nothing. */
72
+ direction: RemoteDirection;
73
+ /** The scope root id; absent means the whole board is in scope. */
74
+ scope?: string;
75
+ /**
76
+ * Act on only these documents this run (`lpm remote push LP-12`), leaving
77
+ * every other document exactly as it stands.
78
+ *
79
+ * **Selection is not scope, and the difference is load-bearing.** Scope says
80
+ * which documents this remote *owns*, so a linked document outside it has
81
+ * left the mirror and the `on_delete` policy applies — a decouple, a close,
82
+ * a delete. Selection says which documents this run is *about*. Narrowing
83
+ * the scope to say "just push this one" would tell the planner that every
84
+ * other twin on the board had gone away, and a selective push would file one
85
+ * story and decouple the other two hundred. So `only` filters what is
86
+ * created, updated, reparented, edged and commented, and the gone pass never
87
+ * consults it. Absent means the whole scope.
88
+ *
89
+ * Reference resolution (`refOf`) does not consult it either: a selected
90
+ * child whose parent is already linked still names that parent, which is
91
+ * what lets a plan be filed a piece at a time and still come out the right
92
+ * shape.
93
+ */
94
+ only?: ReadonlySet<string>;
95
+ /**
96
+ * Documents another remote already mirrors (`src/remote/ledger.ts`), local
97
+ * id → the key they hold there. A document is mirrored by one remote at a
98
+ * time, so these are never created a second time: they are reported in
99
+ * `skipped` with the reason `owned_elsewhere`, the same channel a
100
+ * deliberately decoupled document is reported through.
101
+ */
102
+ ownedElsewhere?: ReadonlyMap<string, string>;
103
+ /** Remote issues keyed by remote id, as the provider returned them. */
104
+ issues: ReadonlyMap<string, RemoteRecord>;
105
+ /**
106
+ * The listing is **not exhaustive** — it is one issue somebody named
107
+ * (`lpm remote pull PAY-31`), not everything the remote holds. The pull
108
+ * planner then never infers a deletion from absence: a twin missing from a
109
+ * partial listing was not looked for, and answering that with the
110
+ * `on_delete` policy would close or delete the rest of the board's twins on
111
+ * every targeted pull.
112
+ */
113
+ partial?: boolean;
114
+ /** What to do when a linked twin is absent from `issues`. Defaults to `unlink`. */
115
+ onDelete?: RemoteOnDelete;
116
+ /**
117
+ * Set by the caller (LP-364) when the remote could not be seen this run —
118
+ * the reachability probe failed, or the bulk guard tripped. The pull
119
+ * planner then plans **nothing**, so an expired credential can never become
120
+ * a wave of deletions. The caller derives it from
121
+ * `resolveLifecycle(...).runUnreachable`.
122
+ */
123
+ unreachable?: boolean;
124
+ /**
125
+ * The resolved hierarchy encoding (LP-309), computed by the caller from the
126
+ * resolved capability table (`resolveHierarchyEncoding`). Absent means the
127
+ * planners fall back to the pre-encoding behaviour: every parent is carried
128
+ * natively. Present, a document whose parent is beyond the native depth has
129
+ * its parent carried in the managed block instead (`blockParent`).
130
+ */
131
+ hierarchy?: ResolvedHierarchy;
132
+ /**
133
+ * Which dependency edge kinds the remote holds natively (LP-314, LP-325).
134
+ * Absent defaults to "native `depends_on`, no native `relates_to`" — the
135
+ * pre-edge-carrier behaviour, so a snapshot that does not know its
136
+ * capabilities still plans `link` / `unlink` ops. A provider with no native
137
+ * blocking edge carries `depends_on` in the managed block instead (an
138
+ * `edges` op); `relates_to` rides the block unless `relatesTo` is true, in
139
+ * which case it is linked and unlinked natively.
140
+ */
141
+ edges?: {
142
+ dependsOn: boolean;
143
+ relatesTo: boolean;
144
+ };
145
+ /**
146
+ * How user comments sync (LP-316): `push` (the default) or `both`. The push
147
+ * planner posts unsynced local comments whenever it runs; the pull planner
148
+ * appends remote comments only when this is `both`. Absent means `push`.
149
+ */
150
+ commentsMode?: RemoteCommentsMode;
151
+ /**
152
+ * Remote comments per remote issue id, fetched by the caller before planning
153
+ * (LP-316). The pull planner reads this map and emits append ops for every
154
+ * comment not already recorded in the link store. Absent means no comments
155
+ * were fetched, which is the caller's way of saying comment pull is
156
+ * unavailable this run.
157
+ */
158
+ remoteComments?: ReadonlyMap<string, readonly RemoteComment[]>;
159
+ /**
160
+ * A board body as it will read after a round trip through the remote's own
161
+ * body format (`Translator.normalizeBody`), for a provider whose bodies are
162
+ * not markdown.
163
+ *
164
+ * The base records the body the remote echoed back, so the comparison is
165
+ * only honest if the board's body is put through the same conversion first.
166
+ * Jira's ADF has no source line breaks, so without this every hard-wrapped
167
+ * document is permanently ahead and each push rewrites the lot. Absent for a
168
+ * provider whose bodies are markdown already, where the round trip is the
169
+ * identity.
170
+ */
171
+ normalizeBody?: (markdown: string) => string;
172
+ }
173
+ /** A document that already has a twin on the remote. */
174
+ export interface LinkedRef {
175
+ kind: 'linked';
176
+ localId: string;
177
+ remoteId: string;
178
+ }
179
+ /** A document this same plan creates, referenced by its placeholder. */
180
+ export interface CreatedRef {
181
+ kind: 'created';
182
+ localId: string;
183
+ /** The `create` op's placeholder, resolved by the executor when it lands. */
184
+ placeholder: string;
185
+ }
186
+ /**
187
+ * A remote issue an op points at. Either a twin that already exists, or a
188
+ * document the plan creates — which has no remote id yet, so it is referenced
189
+ * by its placeholder until execution resolves it.
190
+ */
191
+ export type RemoteRef = LinkedRef | CreatedRef;
192
+ /** File a new remote issue for a local document with no twin. */
193
+ export interface RemoteCreateOp {
194
+ kind: 'create';
195
+ /** Placeholder the executor resolves to a remote id when this create lands. */
196
+ placeholder: string;
197
+ localId: string;
198
+ /** The issue's fields in board vocabulary (the translator's input). */
199
+ fields: BoardFields;
200
+ /** The created issue's native parent, when it is in scope; absent = remote root. */
201
+ parent?: RemoteRef;
202
+ /** The created issue's degraded parent (LP-309): carried in the managed block, never a native edge. */
203
+ blockParent?: RemoteRef;
204
+ }
205
+ /** Change non-status fields of an existing twin. */
206
+ export interface RemoteUpdateOp {
207
+ kind: 'update';
208
+ localId: string;
209
+ ref: LinkedRef;
210
+ /** Only the fields that changed since the base snapshot. */
211
+ fields: Partial<BoardFields>;
212
+ /**
213
+ * The degraded parent (LP-314): carried in the managed block when the
214
+ * document nests beyond the native depth. The executor re-applies it
215
+ * whenever it rewrites the body, so a prose edit never strips the block.
216
+ */
217
+ blockParent?: RemoteRef;
218
+ }
219
+ /** Move an existing twin to a non-terminal status. */
220
+ export interface RemoteTransitionOp {
221
+ kind: 'transition';
222
+ localId: string;
223
+ ref: LinkedRef;
224
+ /** The new board status id; the translator maps it to a remote state. */
225
+ status: string;
226
+ }
227
+ /**
228
+ * Move an existing twin's parent, in place (LP-493). Covers both a local
229
+ * reparent (`lpm move` on a linked document) and a hierarchy-encoding switch,
230
+ * which moves the *same* parent between the two carriers. Exactly one of
231
+ * `parent` / `blockParent` is set while the new parent sits within / beyond
232
+ * the native depth; both are absent when the document moves to the root. The
233
+ * twin keeps its remote id — it is never re-created.
234
+ */
235
+ export interface RemoteReparentOp {
236
+ kind: 'reparent';
237
+ localId: string;
238
+ ref: LinkedRef;
239
+ /** The twin's native parent (the sub-issues edge), within the native depth. */
240
+ parent?: RemoteRef;
241
+ /** The twin's degraded parent (the block's `parent` row), beyond it. */
242
+ blockParent?: RemoteRef;
243
+ }
244
+ /** Close an existing twin (a terminal status reached). */
245
+ export interface RemoteCloseOp {
246
+ kind: 'close';
247
+ localId: string;
248
+ ref: LinkedRef;
249
+ /**
250
+ * A comment to post on the twin before closing, explaining why (the
251
+ * push-side `on_delete: close` policy). Only ever set when the close is a
252
+ * policy close for a document that went away — never for a terminal status
253
+ * the board reached on its own, which needs no explanation.
254
+ */
255
+ note?: string;
256
+ }
257
+ /**
258
+ * Delete an existing twin (`on_delete: delete`, LP-351).
259
+ *
260
+ * The connector decides what delete means on its platform — Jira and Linear
261
+ * hard-delete (or trash), GitHub cannot hard-delete and closes instead, which
262
+ * its adapter documents. The op carries only the twin to remove; the executor
263
+ * drops the link (or decouples, when the local document still exists) after
264
+ * the delete lands, so a failed delete leaves the link in place and the next
265
+ * sync retries it.
266
+ */
267
+ export interface RemoteDeleteOp {
268
+ kind: 'delete';
269
+ localId: string;
270
+ ref: LinkedRef;
271
+ }
272
+ /** Add an edge between two in-scope issues. */
273
+ export interface RemoteLinkOp {
274
+ kind: 'link';
275
+ /**
276
+ * The edge kind: `depends` (the gating `depends_on` edge, the default) or
277
+ * `relates` (the non-gating `relates_to` edge, LP-325). For `depends`,
278
+ * `dependent` waits on `dependency`; for `relates` the two are
279
+ * interchangeable.
280
+ */
281
+ linkKind: LinkKind;
282
+ /** The issue that waits (or, for relates, the local side of the edge). */
283
+ dependent: RemoteRef;
284
+ /** The issue it waits on (or, for relates, the other side of the edge). */
285
+ dependency: RemoteRef;
286
+ }
287
+ /** Remove an edge that no longer exists locally. */
288
+ export interface RemoteUnlinkOp {
289
+ kind: 'unlink';
290
+ /** The edge kind, exactly as `RemoteLinkOp.linkKind`. */
291
+ linkKind: LinkKind;
292
+ dependent: LinkedRef;
293
+ dependency: LinkedRef;
294
+ }
295
+ /**
296
+ * Write the dependency / relate edges into the managed block of a twin whose
297
+ * remote holds no native edge (LP-314).
298
+ *
299
+ * The block is authoritative: the op carries the **complete** current set of
300
+ * edges, not a diff, so the executor rewrites the block idempotently. A
301
+ * dependency referenced by a create that did not land is simply omitted (the
302
+ * executor cannot resolve its remote id), and the next push re-plans it — a
303
+ * reference is never written as a dangling local id (AC #2).
304
+ */
305
+ export interface RemoteEdgesOp {
306
+ kind: 'edges';
307
+ localId: string;
308
+ /** The twin carrying the block — an existing twin, or the create this same push files. */
309
+ ref: RemoteRef;
310
+ /** The degraded parent (block carrier), when the document nests beyond the native depth. */
311
+ parent?: RemoteRef;
312
+ /** The issues this document waits on, resolved to remote ids by the executor. */
313
+ dependsOn: RemoteRef[];
314
+ /** The issues this document is related to, resolved to remote ids by the executor. */
315
+ relatesTo: RemoteRef[];
316
+ }
317
+ /**
318
+ * Post a local work-log comment upstream (LP-316). Carries the comment's
319
+ * 1-based index so the executor can record `commentIds[index] = remote id`
320
+ * once it lands — which is what makes re-posting impossible. `body` is the
321
+ * rendered comment (`renderCommentForRemote`), already naming the local author
322
+ * for a platform that cannot set the comment author itself.
323
+ */
324
+ export interface RemoteCommentOp {
325
+ kind: 'comment';
326
+ /** The twin the comment hangs off — an existing twin, or the create this same push files. */
327
+ ref: RemoteRef;
328
+ /** 1-based index of the local comment in `_comments.md`. */
329
+ index: number;
330
+ /** The local author, for the report. */
331
+ author: string;
332
+ /** The rendered comment body posted upstream. */
333
+ body: string;
334
+ }
335
+ /**
336
+ * Write (or update) the managed comment holding a twin's degraded fields.
337
+ *
338
+ * The op carries the *entries* rather than a rendered body, so the executor
339
+ * renders them through the codec (byte-stable, sorted) and can tell "nothing
340
+ * to write" from "something to write" — the former removes the comment. The
341
+ * executor derives the id links from the link store; `links` is the pure
342
+ * override a test or a dry-run supplies when there is no store to read.
343
+ */
344
+ export interface RemoteManagedCommentOp {
345
+ kind: 'managedComment';
346
+ localId: string;
347
+ ref: LinkedRef;
348
+ /** The degraded fields the comment carries, as block entries. */
349
+ entries: readonly ManagedBlockEntry[];
350
+ /** Local id → remote URL, for rendering id cells as clickable links. */
351
+ links?: ManagedBlockLinks;
352
+ }
353
+ /** Detach a local document from its twin without touching the remote. */
354
+ export interface RemoteUnlinkLocalOp {
355
+ kind: 'unlinkLocal';
356
+ localId: string;
357
+ }
358
+ /**
359
+ * Decouple a local document from its twin, recording a tombstone so no later
360
+ * sync re-files it (LP-366). Unlike `unlinkLocal`, which just drops the link,
361
+ * a decouple *remembers*: the last known remote key, the reason, and when it
362
+ * happened. The remote twin is left alone — decoupling never deletes or closes
363
+ * anything upstream.
364
+ */
365
+ export interface RemoteDecoupleOp {
366
+ kind: 'decouple';
367
+ localId: string;
368
+ /** Why the link was dropped: `manual` (a human) or `out_of_scope`. */
369
+ reason: string;
370
+ }
371
+ /**
372
+ * Re-file a vanished twin upstream (`on_delete: restore`, LP-365).
373
+ *
374
+ * A restore is a push of a document that already has history: the remote issue
375
+ * was deleted, so this re-creates it from local state under a **new** remote id
376
+ * and the link is repointed at that id, the base snapshot rewritten from the
377
+ * response. It is deliberately not a `create` — a `create` says "this
378
+ * document has no twin", a restore says "the twin is gone and we are filing a
379
+ * replacement", and the report must say so rather than imply a true undelete.
380
+ */
381
+ export interface RemoteRestoreOp {
382
+ kind: 'restore';
383
+ /** Placeholder the executor resolves to the new remote id when this lands. */
384
+ placeholder: string;
385
+ localId: string;
386
+ /** The remote id that vanished — carried for the report, not the request. */
387
+ oldRemoteId: string;
388
+ /** The issue's fields in board vocabulary (the translator's input). */
389
+ fields: BoardFields;
390
+ /** The re-filed issue's native parent, when it is in scope; absent = remote root. */
391
+ parent?: RemoteRef;
392
+ /** The re-filed issue's degraded parent (LP-309): carried in the managed block. */
393
+ blockParent?: RemoteRef;
394
+ }
395
+ /**
396
+ * The push plan. Mirrors `Change` (`create` / `update` / `delete` there;
397
+ * `create` / `update` / `transition` / `link` / `unlink` / `comment` / `close`
398
+ * / `unlinkLocal` here). Providers implement the operations; they never see a
399
+ * `LoadedBoard`.
400
+ */
401
+ export type RemoteOp = RemoteCreateOp | RemoteUpdateOp | RemoteTransitionOp | RemoteReparentOp | RemoteCloseOp | RemoteDeleteOp | RemoteLinkOp | RemoteUnlinkOp | RemoteEdgesOp | RemoteCommentOp | RemoteManagedCommentOp | RemoteUnlinkLocalOp | RemoteDecoupleOp | RemoteRestoreOp;
402
+ /**
403
+ * A document a push deliberately left out, with why. A decoupled document is
404
+ * skipped — never created — and the reason names the tombstone's own reason
405
+ * plus the last known remote key, so the operator can tell "deliberately
406
+ * dropped" from "never pushed".
407
+ */
408
+ export interface PushSkip {
409
+ localId: string;
410
+ /** The tombstone's reason: `manual`, `out_of_scope`, or a policy reason. */
411
+ reason: string;
412
+ /** The last known remote key, kept by the tombstone; empty when none. */
413
+ remoteKey: string;
414
+ }
415
+ /** A push, planned: the operations to run, plus what was deliberately left out. */
416
+ export interface PushPlan {
417
+ ops: RemoteOp[];
418
+ skipped: PushSkip[];
419
+ }
420
+ /**
421
+ * One correspondence effect a pull performs on the link store, *alongside* the
422
+ * `Change[]` that lands on the board.
423
+ *
424
+ * The pull plan is two lists on purpose. `Change` is the board-document
425
+ * protocol (`create` / `update` / `delete`) and it has no word for a link
426
+ * store entry, which is the remote layer's own state — so the correspondence
427
+ * moves are carried here and applied by `applyPull` as the changes land.
428
+ */
429
+ export type PullLinkOp =
430
+ /** After a `create` lands, record its twin (real id → remote id). */
431
+ {
432
+ kind: 'record';
433
+ tempId: string;
434
+ remoteId: string;
435
+ }
436
+ /** The twin is gone upstream; drop the correspondence for this local id. */
437
+ | {
438
+ kind: 'unlink';
439
+ localId: string;
440
+ }
441
+ /** Drop the link and record a tombstone, so the next push never re-files it. */
442
+ | {
443
+ kind: 'decouple';
444
+ localId: string;
445
+ reason: string;
446
+ };
447
+ /**
448
+ * A pull-side existence decision left for a human (LP-365). Neither side has
449
+ * moved: `on_delete: manual` leaves a vanished twin unresolved, and a
450
+ * `delete` that would orphan a linked child is refused. The sync reports each
451
+ * one and exits non-zero; `lpm remote resolve` (LP-287) settles it.
452
+ */
453
+ export interface PullConflict {
454
+ localId: string;
455
+ /** The remote id that vanished. */
456
+ remoteId: string;
457
+ /** Why neither side moved — the policy, or the child a delete would orphan. */
458
+ reason: string;
459
+ /** The linked child a delete would have orphaned, when that was the refusal. */
460
+ childId?: string;
461
+ }
462
+ /**
463
+ * Append one remote comment to a document's `_comments.md` (LP-316). Carried
464
+ * separately from `Change[]` because a comment is not board state and is
465
+ * written straight through, exactly the way the web app writes one. `targetId`
466
+ * is the local document — its temporary id when the issue is also new in this
467
+ * pull, its real id otherwise — so `applyPull` resolves it the same way it
468
+ * resolves a `record` link op.
469
+ */
470
+ export interface PullCommentOp {
471
+ kind: 'append';
472
+ /** Temp id (new create) or real local id (twin) of the target document. */
473
+ targetId: string;
474
+ /** The remote comment id, recorded so the next pull never appends it twice. */
475
+ remoteId: string;
476
+ /** The remote author's name, written into the `_comments.md` heading. */
477
+ author: string;
478
+ /** The remote timestamp, written into the `_comments.md` heading. */
479
+ at: string;
480
+ /** The comment body text. */
481
+ body: string;
482
+ }
483
+ /**
484
+ * A field-level conflict on a linked twin still present on both sides (LP-257
485
+ * AC #2). Both sides edited the same field since the base snapshot, so
486
+ * neither value is derived from the other: the field is left untouched on both
487
+ * sides and reported — a question, not an operation, exactly like an
488
+ * existence conflict.
489
+ */
490
+ export interface PullFieldConflict {
491
+ localId: string;
492
+ remoteId: string;
493
+ /** The board field that diverged: `title`, `body`, `status`, `assignee`, `period`, or an attribute name. */
494
+ field: string;
495
+ /** The local (board) value. Body is the raw text. */
496
+ local: unknown;
497
+ /** The remote value, translated back to board vocabulary. Body is the raw text. */
498
+ remote: unknown;
499
+ }
500
+ /**
501
+ * A reference a managed block carried that the pull could not resolve to a
502
+ * local document (LP-314). Reported, never silently dropped: a cross-repo
503
+ * reference is out of scope, an unknown token is a human edit or a mangled
504
+ * row.
505
+ */
506
+ export interface PullEdgeWarning {
507
+ /** The remote id of the record whose block carried the reference. */
508
+ remoteId: string;
509
+ /** `depends_on` or `relates_to` — the row the reference came from. */
510
+ field: 'depends_on' | 'relates_to';
511
+ /** The raw reference: `owner/repo#12`, a bare local id, or free text. */
512
+ reference: string;
513
+ /** `cross_repo` (out of scope), `unknown` (unresolvable) or `cycle` (refused). */
514
+ kind: 'cross_repo' | 'unknown' | 'cycle';
515
+ /** The cycle the edge would close, named member → member → member (kind: `cycle` only). */
516
+ cycle?: string;
517
+ }
518
+ /**
519
+ * The edge references a record's managed block carries (LP-314), split by
520
+ * resolvability. Same-repo references come back as bare remote ids and are
521
+ * resolved through the link store exactly like a native edge; cross-repo and
522
+ * unknown references are reported by the planner rather than resolved.
523
+ */
524
+ export interface BlockEdges {
525
+ dependsOn: string[];
526
+ relatesTo: string[];
527
+ /** Cross-repo references (`owner/repo#12`) — out of scope, never resolved. */
528
+ crossRepo: Array<{
529
+ field: 'depends_on' | 'relates_to';
530
+ reference: string;
531
+ }>;
532
+ /** References that are neither a `#ref` nor a cross-repo reference. */
533
+ unknown: Array<{
534
+ field: 'depends_on' | 'relates_to';
535
+ reference: string;
536
+ }>;
537
+ }
538
+ /**
539
+ * A pull, planned: the board-document changes to apply, plus the link-store
540
+ * effects that travel with them.
541
+ *
542
+ * `changes` is a plain `Change[]` from `src/shared/changes.ts`, handed to
543
+ * `applyChanges` from `src/sync` — the one applier every front end shares. A
544
+ * create carries a temporary id from a fresh counter (never one derived from a
545
+ * view's pending list), and its parent is referenced by the same temporary id
546
+ * when the parent is also new, which is exactly what `applyChanges`'s
547
+ * hold-back-and-replay handles: the reference decides the order, not the plan.
548
+ *
549
+ * `restore` carries the push-side operations for `on_delete: restore` — a pull
550
+ * discovers the deletion, but the remedy is a re-file upstream, so the plan
551
+ * holds `RemoteOp[]` rather than `Change[]`. `conflicts` carries the documents
552
+ * a policy left for a human. Both are absent when empty, so an up-to-date pull
553
+ * is still exactly `{ changes: [], links: [] }`.
554
+ */
555
+ export interface PullPlan {
556
+ changes: Change[];
557
+ links: PullLinkOp[];
558
+ /** Remote comments to append to `_comments.md`, absent when there are none. */
559
+ comments?: PullCommentOp[];
560
+ restore?: RemoteRestoreOp[];
561
+ conflicts?: PullConflict[];
562
+ /** Field conflicts on twins still present on both sides, absent when empty. */
563
+ fieldConflicts?: PullFieldConflict[];
564
+ /** Edge references a managed block carried that could not be resolved, absent when empty. */
565
+ edgeWarnings?: PullEdgeWarning[];
566
+ }
567
+ /**
568
+ * The translation seams `planPull` needs, which are pure by construction so the
569
+ * planner stays browser-compatible and free of the disk and the network.
570
+ *
571
+ * `toPatch` turns one remote record into the board fields a `create` writes; it
572
+ * receives the issue's hierarchy depth so the type can be resolved exactly as
573
+ * `mapTypeFromRemote` wants it. It is a callback rather than a `Translator`
574
+ * plus mapping so the planner never learns a provider's vocabulary. When it
575
+ * returns no `type`, the create falls back to the deepest declared issue type
576
+ * (LP-315) — a triaged remote issue with no mapped label still becomes a
577
+ * document rather than a failure when it is applied.
578
+ *
579
+ * `parentIdOf` reads the remote id of a record's parent, for providers that
580
+ * hold a native hierarchy. Omit it for a flat remote (GitHub) and the pull
581
+ * files every issue at the top level.
582
+ *
583
+ * `dependsOnOf` reads the remote ids a record waits on, for providers that
584
+ * hold dependency edges. Each id is resolved to the local document it names —
585
+ * the dependency's temporary id when it is also new in this pull, its twin
586
+ * otherwise — exactly as `parentIdOf` is. A dependency naming a remote id
587
+ * with neither a twin nor a pending create is dropped, because there is no
588
+ * local document for the edge to point at. Omit it for a remote with no
589
+ * edges and every create is filed with no `depends_on`.
590
+ *
591
+ * `relatesToOf` reads the remote ids a record relates to, for providers that
592
+ * hold a native relate edge (LP-325). Resolved exactly as `dependsOnOf`'s
593
+ * are, and written onto `patch.relatesTo`.
594
+ *
595
+ * `blockEdgesOf` reads the dependency / relate references a record's managed
596
+ * block carries (LP-314), for providers with no native edge. Same-repo
597
+ * references are returned as bare remote ids and resolved exactly as
598
+ * `dependsOnOf`'s are; cross-repo and unknown references are reported in
599
+ * `PullPlan.edgeWarnings` rather than resolved. Omit it for a remote that
600
+ * never writes a managed block.
601
+ */
602
+ export interface PullOptions {
603
+ toPatch: (record: RemoteRecord, depth: number) => BoardFieldsPatch;
604
+ /**
605
+ * Where a remote issue with no parent of its own lands on the board.
606
+ *
607
+ * A tracker's issues are a flat list; a board's are a tree with rules about
608
+ * what may sit at which level, so an issue pulled in on its own has nowhere
609
+ * to go and the create is refused ("user_story needs a parent issue"). This
610
+ * is the caller's answer to that — `lpm remote pull PAY-31 --parent LP-3` —
611
+ * and it applies only where nothing else does: an issue whose remote parent
612
+ * is already mirrored is filed under that twin, whatever this says.
613
+ */
614
+ underParent?: string;
615
+ parentIdOf?: (record: RemoteRecord) => string | undefined;
616
+ dependsOnOf?: (record: RemoteRecord) => string[];
617
+ relatesToOf?: (record: RemoteRecord) => string[];
618
+ blockEdgesOf?: (record: RemoteRecord) => BlockEdges;
619
+ }
620
+ /**
621
+ * Plan a push: the remote operations needed to bring the remote's in-scope
622
+ * issues onto the board's current state, ordered so every reference resolves.
623
+ *
624
+ * Returns an empty `{ ops: [], skipped: [] }` when nothing changed, when the
625
+ * remote is pull-only, or when the scope holds no documents. The order inside
626
+ * a non-empty plan is:
627
+ *
628
+ * 1. `create` ops, parents before children (by depth);
629
+ * 2. `update` / `transition` / `close` ops for changed twins;
630
+ * 3. `link` / `unlink` ops, after every endpoint exists;
631
+ * 4. the `on_delete` resolution for linked twins whose local document went
632
+ * away (deleted, or left the scope subtree): `unlink` / `close` / `delete`.
633
+ *
634
+ * In-scope documents carrying a tombstone are never created; they are
635
+ * reported in `skipped` rather than silently omitted (LP-366).
636
+ *
637
+ * A `create` carries no remote id: it is referenced by a `new:` placeholder,
638
+ * which the executor resolves against each create's response before it reaches
639
+ * any op that points at it.
640
+ */
641
+ export declare function planPush(board: BoardView, links: LinkStore, remote: RemoteSnapshot, localComments?: ReadonlyMap<string, readonly LocalComment[]>): PushPlan;
642
+ /**
643
+ * Plan a pull: the `Change[]` needed to bring the board's in-scope issues into
644
+ * agreement with the remote listing, plus the link-store effects that travel
645
+ * with it.
646
+ *
647
+ * The pull is an *existence* reconciliation, plus a field diff. A remote
648
+ * issue with no twin is planned as a `create` — carrying its hierarchy parent
649
+ * and its dependency edges, both referenced by temporary ids when the other
650
+ * endpoint is also new in this pull, so the existing hold-back-and-replay
651
+ * wires them. A linked twin absent from the listing is resolved by the
652
+ * remote's `on_delete` policy (`unlink`, `close`, `delete`, `restore` or
653
+ * `manual`), one document at a time (LP-365). A linked twin still present on
654
+ * both sides is merged field by field against its base snapshot (LP-284): a
655
+ * field the remote alone changed becomes an `update` pulling the remote value
656
+ * onto the board, a field both sides changed is reported in `fieldConflicts`
657
+ * and left untouched on both sides (LP-257 AC #2), and a field the board alone
658
+ * changed is left for the push planner to carry upstream.
659
+ *
660
+ * The plan is applied by `applyChanges` from `src/sync` — the same applier the
661
+ * web app and the CLI push a view through — so the pull inherits partial
662
+ * application, temporary-id remapping and the hold-back-and-replay of a create
663
+ * whose parent is created later in the same push. (Naming note: `PushSession`
664
+ * inside `src/sync` is named for pushing a *view* onto the board, which is the
665
+ * same direction a remote **pull** moves — remote → board.)
666
+ *
667
+ * Returns an empty plan for a `direction: push` remote (it never pulls), for a
668
+ * scope that names no documents, and when the listing agrees with the link
669
+ * store. Pure: no disk, no network.
670
+ */
671
+ export declare function planPull(board: BoardView, links: LinkStore, remote: RemoteSnapshot, options: PullOptions): PullPlan;