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,802 @@
1
+ /**
2
+ * The shape every provider adapter conforms to.
3
+ *
4
+ * A provider is looked up by name in `registry.ts`. It exposes four members,
5
+ * plus one optional descriptor:
6
+ *
7
+ * - `config` a zod schema validating the provider's own slice of a
8
+ * remote declaration — its `connection` and `mapping`
9
+ * blocks. Core validates only the frame; this validates the
10
+ * contents, when the remote is opened (LP-259).
11
+ * - `capabilities` what the platform can natively hold (capabilities.ts).
12
+ * - `translator` the two-way vocabulary mapping: a board op becomes a
13
+ * request description, a remote record becomes board fields.
14
+ * - `connector` a factory that turns a validated connection block into a
15
+ * connector the executor (LP-490) can drive.
16
+ * - `credentials` (optional) which connection keys hold secrets and each
17
+ * one's conventional env var, for the resolver (LP-295).
18
+ *
19
+ * The op / request / record vocabularies here are the *shape* of the sync; the
20
+ * push planner (LP-280) emits the ops, the pull planner (LP-281) consumes the
21
+ * records, and the executor (LP-490) walks the requests through a connector.
22
+ * Those stories may refine these types — a provider adapter exposes the four
23
+ * members (plus the optional `credentials` descriptor) and nothing else, so supporting a fourth platform is a folder plus a
24
+ * line in the registry, never an edit to the planners or to core.
25
+ */
26
+ import type { z } from 'zod';
27
+ import type { AdfDocument } from '../shared/adf.js';
28
+ import type { AttributeDef } from '../core/model/types.js';
29
+ import type { Roster, ResourceGap, UnknownAccount } from './accounts.js';
30
+ import type { AttributeProblem } from './attributes.js';
31
+ import type { LabelClaim } from './labels.js';
32
+ import type { Capabilities } from './capabilities.js';
33
+ import type { StandardVocabulary } from './vocabulary.js';
34
+ import type { RemoteVocabulary } from './reconcile.js';
35
+ import type { DegradedPeriod, PeriodContainer, PeriodGap, PeriodIndex, PeriodPull } from './periods.js';
36
+ /**
37
+ * A board-side operation the push planner emits for one document, in board
38
+ * vocabulary. The translator turns it into a `RemoteRequest` the connector can
39
+ * execute. `localId` is the board id; `remoteId` appears on update/delete,
40
+ * where a twin already exists.
41
+ */
42
+ export type BoardOp = {
43
+ kind: 'create';
44
+ localId: string;
45
+ fields: BoardFields;
46
+ } | {
47
+ kind: 'update';
48
+ localId: string;
49
+ remoteId: string;
50
+ fields: BoardFields;
51
+ } | {
52
+ kind: 'delete';
53
+ localId: string;
54
+ remoteId: string;
55
+ };
56
+ /**
57
+ * The board-vocabulary fields a document carries, as the translator sees them.
58
+ * Only the fields a remote can mirror are here — no ids, no local-only state.
59
+ *
60
+ * `title` and `body` are optional because an `update` op may carry only the
61
+ * fields that changed since the base snapshot — the executor passes `undefined`
62
+ * for an unchanged one so the request omits it rather than re-sending it
63
+ * (LP-307). `type` and `status` stay required: the translator derives the
64
+ * labels and workflow state from them, and a push always sends the full
65
+ * document for those.
66
+ */
67
+ export interface BoardFields {
68
+ title?: string;
69
+ body?: string;
70
+ /** Board type name, e.g. `user_story`. */
71
+ type: string;
72
+ /** Board status id, e.g. `in_progress`. */
73
+ status: string;
74
+ /** Board resource id, or null when unassigned. */
75
+ assignee?: string | null;
76
+ /** Board period id the issue is scheduled into, or null when unscheduled. */
77
+ period?: string | null;
78
+ /** Config-declared attributes, keyed by attribute name. */
79
+ attributes?: Record<string, unknown>;
80
+ }
81
+ /**
82
+ * A provider-agnostic description of the request to make against the remote.
83
+ * The translator fills it in; the connector turns it into the platform's own
84
+ * call. Fields the provider cannot hold are simply absent — the degradation
85
+ * ladder (LP-255) decides what gets encoded before the translator runs.
86
+ */
87
+ export interface RemoteRequest {
88
+ kind: 'create' | 'update' | 'delete';
89
+ /** Native issue type, where the provider has one. */
90
+ type?: string;
91
+ title?: string;
92
+ /**
93
+ * The body to write. For a text-body remote (GitHub) this is markdown; for a
94
+ * structured-body remote (Jira) the translator hands the connector an ADF
95
+ * document, which is the shape the platform's `description` field holds.
96
+ */
97
+ body?: string | AdfDocument;
98
+ /** Native labels / tags. */
99
+ labels?: string[];
100
+ /**
101
+ * Which labels this request's `labels` list claims — the exact labels and
102
+ * prefixes the mapping writes. A connector reconciles labels against it, so
103
+ * only the claimed ones are added or removed and a human's triage labels
104
+ * survive (LP-308). Absent means the connector may replace the list, the
105
+ * pre-reconciliation behaviour.
106
+ */
107
+ labelClaim?: LabelClaim;
108
+ /** Native workflow state (`open` / `closed` for GitHub, the workflow-state
109
+ * name for Linear, the native status name for jsonfile). */
110
+ state?: string;
111
+ /**
112
+ * The issue's estimate, where the provider holds a native estimate field
113
+ * (Linear's `estimate`, the rung-1 home for the board's effort attribute —
114
+ * LP-333). A number sets it, `null` clears it, `undefined` leaves the remote
115
+ * side untouched.
116
+ */
117
+ estimate?: number | null;
118
+ /**
119
+ * The account to assign the issue to, when the provider holds assignees:
120
+ * a non-empty string assigns it, `null` unassigns it, and `undefined` leaves
121
+ * the remote side untouched.
122
+ */
123
+ assignee?: string | null;
124
+ /**
125
+ * The period container to schedule the issue into, when the mapping resolved
126
+ * one. Carried as a name plus dates; the connector resolves the name to the
127
+ * platform's own id (and provisions it when absent, where the provider can),
128
+ * then writes it to the configured carrier — a milestone or a Project
129
+ * iteration field (LP-313).
130
+ */
131
+ period?: PeriodContainer | null;
132
+ /**
133
+ * The degraded period levels (the ones above the mapped level), carried in
134
+ * the managed block rather than a native container (LP-313). The executor
135
+ * composes them into the body block; the connector never sees them.
136
+ */
137
+ degradedPeriods?: DegradedPeriod[];
138
+ /**
139
+ * The remote id of the created issue's parent, when the provider holds a
140
+ * native hierarchy and the plan placed the new issue under one. Set by the
141
+ * executor after the parent's placeholder is resolved; absent at the remote
142
+ * root. A provider without native hierarchy ignores it (its nesting is
143
+ * carried by the degradation ladder instead).
144
+ */
145
+ parent?: string;
146
+ /**
147
+ * The remote status value to write to a Project single-select status column
148
+ * (LP-312), when the mapping carries the board's status in one
149
+ * (`mapping.fields.status`). It is the remote status label, the same value
150
+ * the translator also writes as a status label; the connector resolves it
151
+ * to an option id via the cached Project ids and sets it after the issue
152
+ * write — adding the issue to the Project first when it is not already an
153
+ * item. The executor asks for this only on a status-affecting write
154
+ * (create / transition / close), never a plain field update.
155
+ */
156
+ projectStatus?: string;
157
+ }
158
+ /**
159
+ * A raw issue exactly as the remote returned it, keyed by the remote's own
160
+ * field names. Provider-specific; the translator is the only reader.
161
+ */
162
+ export type RemoteRecord = Record<string, unknown>;
163
+ /**
164
+ * The board fields recovered from a remote record. Only fields the remote
165
+ * actually carries are present — nothing is invented, so a caller applies
166
+ * exactly what it finds and nothing more.
167
+ */
168
+ export interface BoardFieldsPatch {
169
+ title?: string;
170
+ body?: string;
171
+ /** Board type name, when the mapping resolves it unambiguously. */
172
+ type?: string;
173
+ /** Board status id, when the mapping resolves it. */
174
+ status?: string;
175
+ assignee?: string | null;
176
+ /** Board period id, when the mapping resolves it. */
177
+ period?: string | null;
178
+ attributes?: Record<string, unknown>;
179
+ }
180
+ /**
181
+ * A disagreement between two remote signals that both spoke for one board
182
+ * status (LP-312). Two signals is inherent to some providers — GitHub's issue
183
+ * `state` and its Project single-select column are the worked example — so the
184
+ * pull reports the disagreement rather than silently choosing a winner.
185
+ */
186
+ export interface StatusDiscrepancy {
187
+ /** Which signal won, in the provider's own vocabulary (`issue` | `project`). */
188
+ took: string;
189
+ /** The board status the *losing* signal would have produced, when it named one. */
190
+ otherStatus?: string;
191
+ /** The losing signal's raw values, so a report can name what was overridden. */
192
+ column?: string;
193
+ state?: string;
194
+ }
195
+ /**
196
+ * The board's config-declared attribute definitions, keyed by attribute name —
197
+ * what the coercion (LP-270) needs to know what a value *is* on each side of
198
+ * the wire. Passed per call, exactly like `mapping`, because the translator is
199
+ * pure and has no board handle of its own.
200
+ */
201
+ export type AttributeDefs = Record<string, AttributeDef>;
202
+ /** `describeRequest`'s result: the request, plus everything that could not be mapped. */
203
+ export interface DescribeResult {
204
+ request: RemoteRequest;
205
+ /** Coercion failures on the way out; the planner reports them before writing. */
206
+ problems: AttributeProblem[];
207
+ /** People whose account could not be resolved — reported once per person. */
208
+ resourceGaps: ResourceGap[];
209
+ /** A period id not on the timeline — reported rather than dropped. */
210
+ periodGaps: PeriodGap[];
211
+ }
212
+ /** `fieldsFromRecord`'s result: the recovered fields, plus everything that could not be mapped back. */
213
+ export interface FieldsFromRecordResult {
214
+ patch: BoardFieldsPatch;
215
+ /** Coercion failures on the way in; the failed attribute is left alone. */
216
+ problems: AttributeProblem[];
217
+ /** Remote assignees nobody on the roster matches — reported, never invented. */
218
+ unknownAccounts: UnknownAccount[];
219
+ /**
220
+ * The period recovered from the remote container — the resolved local period
221
+ * id (mirrored in `patch.period`), the observed dates for the planner to
222
+ * reconcile, and any degraded-level names read back out of labels. Absent
223
+ * when the remote carries no container or the board has no period mapping.
224
+ */
225
+ period?: PeriodPull;
226
+ /**
227
+ * A disagreement between the two signals that both spoke for the status
228
+ * (LP-312) — the issue state and the Project column. Absent when the two
229
+ * agree or when only one resolves. A caller reports it rather than hiding
230
+ * the overridden signal.
231
+ */
232
+ statusDiscrepancy?: StatusDiscrepancy;
233
+ }
234
+ /**
235
+ * The two native edge kinds a provider may hold (LP-325). `depends` is the
236
+ * gating `depends_on` edge (`blocks` / `is blocked by` on Jira); `relates` is
237
+ * the non-gating `relates_to` edge (`relates to`). A provider that holds
238
+ * neither carries both through the managed block instead.
239
+ */
240
+ export type LinkKind = 'depends' | 'relates';
241
+ /**
242
+ * A provider's two-way vocabulary translation. Pure: no I/O. `mapping` is the
243
+ * remote's validated `mapping` block and `attributes` the board's declared
244
+ * attribute definitions, both passed per call so one translator serves every
245
+ * remote of that provider.
246
+ */
247
+ export interface Translator {
248
+ /** Push: a board op plus the mapping becomes a request description. */
249
+ describeRequest(op: BoardOp, mapping: Record<string, unknown>, attributes: AttributeDefs, roster?: Roster, periods?: PeriodIndex): DescribeResult;
250
+ /** Pull: a remote record plus the mapping becomes board fields. */
251
+ fieldsFromRecord(record: RemoteRecord, mapping: Record<string, unknown>, attributes: AttributeDefs, roster?: Roster, periods?: PeriodIndex): FieldsFromRecordResult;
252
+ /**
253
+ * The value a board person's `accounts.via` attribute should hold so this
254
+ * remote assigns work to `user`, or `undefined` when the remote user cannot
255
+ * answer that attribute at all.
256
+ *
257
+ * `via` names a *board* attribute (`email`, `jira_account_id`, `github`) and
258
+ * only the provider knows which of a remote user's fields satisfies it —
259
+ * Jira assigns by account id and resolves an email by search, GitHub assigns
260
+ * by login. Absent on a provider with no accounts, in which case the
261
+ * readiness check can report a gap but never offer to close it.
262
+ */
263
+ accountValue?(user: RemoteUser, via: string): string | undefined;
264
+ /**
265
+ * A board body as it will read *after* a round trip through the remote's own
266
+ * format — for a provider whose body format is not markdown.
267
+ *
268
+ * The base snapshot records the body the remote echoed back, and the push
269
+ * compares the board's body against it. When the two formats are not
270
+ * isomorphic that comparison never settles: Jira's description is ADF, which
271
+ * has paragraphs but no source line breaks, so a body hard-wrapped at 80
272
+ * columns comes back as one long line and *every* document is permanently
273
+ * ahead — the push rewrites all of them, and the next push does it again.
274
+ *
275
+ * Declaring this makes the comparison like-for-like: the board's body is put
276
+ * through the same round trip before hashing, so formatting the remote cannot
277
+ * hold stops counting as a change while a real edit on either side still
278
+ * does. Absent on a provider whose body is markdown already (GitHub, Linear,
279
+ * jsonfile), where the round trip is the identity.
280
+ */
281
+ normalizeBody?(markdown: string): string;
282
+ }
283
+ /**
284
+ * One connection key a part of the mapping needs, and why.
285
+ */
286
+ export interface ConditionalConnectionKey {
287
+ /** The `connection` key (`board`). */
288
+ key: string;
289
+ /** The `mapping` block whose presence makes the key necessary (`periods`). */
290
+ needs: string;
291
+ /** One line saying what breaks without it — printed as the remedy. */
292
+ why: string;
293
+ }
294
+ /**
295
+ * A value the remote can supply for a connection key the config has not got —
296
+ * the answer to "which Agile board?" asked of Jira rather than of the person.
297
+ */
298
+ export interface ConnectionCandidate {
299
+ /** The connection key this answers (`board`). */
300
+ key: string;
301
+ /** The value to write into `connection`. */
302
+ value: string;
303
+ /** How to name it when there is more than one to choose between. */
304
+ label: string;
305
+ }
306
+ /**
307
+ * What a connector returns after a successful create / update / delete, so the
308
+ * executor can record the link and its base snapshot.
309
+ */
310
+ export interface ConnectorResult {
311
+ /**
312
+ * Fields the remote would not take, named the way the base snapshot names
313
+ * them (`period`).
314
+ *
315
+ * A write is not all-or-nothing on every platform, and one case is ordinary
316
+ * rather than exceptional: an issue scheduled into a sprint the tracker does
317
+ * not have yet. Refusing the whole issue for it would make the board's
318
+ * timeline a precondition of filing any work at all — so the connector files
319
+ * the issue without the field and says which one it dropped, and the
320
+ * executor records that field as **unset** in the base. The next push sees
321
+ * the board's value against an empty base and writes it, the moment the
322
+ * sprint exists. Same shape as a parent that arrives later: file now, repair
323
+ * when the other half turns up.
324
+ */
325
+ unwritten?: readonly string[];
326
+ /** The remote system's opaque id for this issue. */
327
+ remoteId: string;
328
+ /** A human-readable key, e.g. `acme/payments#418`. */
329
+ remoteKey: string;
330
+ /** Full URL to the remote issue. */
331
+ remoteUrl: string;
332
+ /** The remote's revision marker — a timestamp, a hash, whatever it supplies. */
333
+ remoteRev: string;
334
+ /**
335
+ * The remote id of the comment a comment method created, so the executor can
336
+ * record it as the managed comment id and edit it on the next push rather
337
+ * than posting a duplicate. Absent for issue methods.
338
+ */
339
+ commentId?: string;
340
+ /**
341
+ * The issue exactly as it stands **after** the write, in the provider's own
342
+ * record shape (the same shape `get` / `list` return). The executor
343
+ * translates this back to board vocabulary and records the base snapshot
344
+ * from it, so a remote that normalises markdown, reorders labels or rejects
345
+ * part of an update is absorbed into the base rather than coming back as a
346
+ * remote change on the next pull (LP-288).
347
+ *
348
+ * A connector whose write response does not echo the issue back should
349
+ * `get()` it before returning, or omit this field — in which case the
350
+ * executor falls back to the local document's fields as the best available
351
+ * record of the write.
352
+ */
353
+ record?: RemoteRecord;
354
+ /**
355
+ * The remote's GraphQL node id, where the platform exposes one (GitHub's
356
+ * `node_id`). Distinct from `remoteId`, which is the address the connector's
357
+ * own calls use (GitHub's issue number); the node id is the stable
358
+ * GraphQL-side identifier later stories (sub-issues, Projects v2) address.
359
+ * The executor records it on the link (LP-307); absent on a platform without
360
+ * one.
361
+ */
362
+ nodeId?: string;
363
+ }
364
+ /**
365
+ * Progress through a listing's internal pages, so a caller can show movement.
366
+ *
367
+ * A listing of a large project is a handful of requests inside one `list` call,
368
+ * and before this the whole thing was one opaque await — which on the Sync tab
369
+ * read as a hang. Called once per page with the running record count; the total
370
+ * is unknown until the remote stops handing out pages, so it is a count rather
371
+ * than a percentage.
372
+ */
373
+ export type ListProgress = (progress: {
374
+ page: number;
375
+ records: number;
376
+ }) => void;
377
+ /** One page of remote records, plus the cursor for the next pull. */
378
+ export interface RemotePage {
379
+ records: RemoteRecord[];
380
+ /** Server-supplied cursor, or null when there are no more changes. */
381
+ cursor: string | null;
382
+ }
383
+ /**
384
+ * A user comment exactly as the remote holds it, for the pull side of comment
385
+ * sync (LP-316). The comment's own id is what the link store records so a
386
+ * later pull never appends the same comment twice; `author` and `createdAt`
387
+ * are the remote's report, written into the `_comments.md` heading verbatim.
388
+ */
389
+ export interface RemoteComment {
390
+ /** The remote system's opaque id for this comment. */
391
+ id: string;
392
+ /** The comment author's name, as the remote reports it. */
393
+ author: string;
394
+ /** ISO-8601 timestamp of when the comment was written. */
395
+ createdAt: string;
396
+ /** The comment body text (markdown). */
397
+ body: string;
398
+ }
399
+ /**
400
+ * One issue type in a provider's type scheme, as the preflight reads it
401
+ * (LP-324). A connector that holds native issue types exposes them through
402
+ * `issueTypes()`; the preflight validates the board's `mapping.types` against
403
+ * this list — a mapped type the project does not have is an error, and a
404
+ * sub-task type is a type that must always be created with a parent.
405
+ */
406
+ export interface IssueTypeSchemeEntry {
407
+ /** The issue type name, e.g. "Story", "Epic", "Sub-task". */
408
+ name: string;
409
+ /** True for sub-task types — they must be created with a parent. */
410
+ subtask?: boolean;
411
+ /** The hierarchy level: -1 sub-task, 0 standard, 1 epic, 2+ above. */
412
+ hierarchyLevel?: number;
413
+ }
414
+ /**
415
+ * The reachability probe's answer (LP-364): can the remote be seen at all, and
416
+ * why. `reachable` is false when the connector could not confirm the remote's
417
+ * existence or its own access to it — a permission loss, a deleted repo or a
418
+ * network failure — and `evidence` is the request and answer that produced the
419
+ * verdict, so a surprising classification can be argued with.
420
+ */
421
+ export interface ReachabilityResult {
422
+ /** True when the remote answered its probe healthy (repo/project/team reachable). */
423
+ reachable: boolean;
424
+ /** Human-readable evidence: the request made and what it answered. */
425
+ evidence: string;
426
+ }
427
+ /**
428
+ * A live connector to one remote. The executor (LP-490) drives it; the factory
429
+ * that builds it from a connection block is the provider's `connector`. The
430
+ * `delete` method applies a delete op — a provider that cannot hard-delete
431
+ * (GitHub) closes instead, which the provider documents on its adapter.
432
+ *
433
+ * `link`, `unlink`, `comment`, `editComment` and `deleteComment` are optional
434
+ * because the connector contract (LP-289) does not yet define their wire
435
+ * shape for every provider.
436
+ * The executor skips those ops with a reason when the method is absent rather
437
+ * than pretending the remote edge or comment was written.
438
+ */
439
+ export interface Connector {
440
+ /** The provider name, so a report can say which remote it talked to. */
441
+ readonly name: string;
442
+ /**
443
+ * File a new twin. `signal`, when given, aborts the in-flight request
444
+ * (LP-298): the caller passes its Ctrl-C signal and the connector honours it
445
+ * in whatever it uses for transport — a `fetch` call, a `gh` process.
446
+ */
447
+ create(request: RemoteRequest, signal?: AbortSignal): Promise<ConnectorResult>;
448
+ update(remoteId: string, request: RemoteRequest, signal?: AbortSignal): Promise<ConnectorResult>;
449
+ delete(remoteId: string, signal?: AbortSignal): Promise<ConnectorResult>;
450
+ get(remoteId: string): Promise<RemoteRecord | null>;
451
+ /**
452
+ * The whole listing, exhaustively — a connector pages internally and returns
453
+ * one `RemotePage` holding every record, plus the cursor for the *next* pull.
454
+ *
455
+ * So a caller calls this **once**. `page.cursor` is not a continuation token,
456
+ * and treating it as one asks the remote for the same listing twice.
457
+ */
458
+ list(opts?: {
459
+ cursor?: string | null;
460
+ onPage?: ListProgress;
461
+ }): Promise<RemotePage>;
462
+ /**
463
+ * The human-readable key and URL of a **listed** record, with no request.
464
+ *
465
+ * A `RemoteRecord` is opaque above the provider, and every other route to a
466
+ * key goes through a `ConnectorResult` — which only a write or a `get`
467
+ * produces. That was fine while nothing read a listing for anything but its
468
+ * fields, and became a gap the moment the drift report started reporting
469
+ * remote issues the board has never seen: a reader needs something to click
470
+ * and something to recognise, and fetching 40 of them one at a time to learn
471
+ * their own keys would reintroduce the cost the listing exists to avoid.
472
+ *
473
+ * Pure and local — it reads the record it is handed and the connection the
474
+ * connector closed over. Optional: a provider without it falls back to the
475
+ * remote id, which is always available and merely less pleasant to read.
476
+ */
477
+ describe?(record: RemoteRecord): {
478
+ remoteKey: string;
479
+ remoteUrl: string;
480
+ };
481
+ /**
482
+ * Answer a `conditionalConnection` key from the remote itself, for every one
483
+ * the config has not got.
484
+ *
485
+ * The setup conversation calls this after the credential resolves: one
486
+ * candidate is written into `config.yml` (nobody should be sent to a URL bar
487
+ * to copy a number a token can read), several become a question, and none is
488
+ * reported with what to do. Absent on a connector with nothing to discover.
489
+ */
490
+ discoverConnection?(signal?: AbortSignal): Promise<ConnectionCandidate[]>;
491
+ /**
492
+ * Resolve a human-readable remote key (e.g. `acme/payments#418`) to the live
493
+ * issue, when the provider can (LP-367). Returns the same shape a create's
494
+ * response would — remote id, key, url, revision and the issue record — so
495
+ * the caller can seed a base snapshot from the remote's current values
496
+ * without writing to either side. `null` means the key names no issue the
497
+ * connector can see. Absent on a connector that cannot resolve a key, in
498
+ * which case the caller must supply the remote id directly.
499
+ */
500
+ resolve?(key: string): Promise<ConnectorResult | null>;
501
+ /**
502
+ * Add an edge between two remote issues, when the provider holds one. `kind`
503
+ * selects the edge: `depends` (the default) links the gating `depends_on`
504
+ * edge, `relates` the non-gating `relates_to` edge. `dependentRemoteId` is
505
+ * the local issue; `dependencyRemoteId` is the issue it points at — for
506
+ * `relates` the two are interchangeable, for `depends` the direction is the
507
+ * provider's own (Jira: `dependent` is blocked by `dependency`).
508
+ */
509
+ link?(dependentRemoteId: string, dependencyRemoteId: string, signal?: AbortSignal, kind?: LinkKind): Promise<ConnectorResult>;
510
+ /**
511
+ * Remove an edge between two remote issues, when the provider holds one.
512
+ * Mirrors `link`'s arguments and `kind`.
513
+ */
514
+ unlink?(dependentRemoteId: string, dependencyRemoteId: string, signal?: AbortSignal, kind?: LinkKind): Promise<ConnectorResult>;
515
+ /**
516
+ * Move an existing issue under a new native parent, or clear its native
517
+ * parent (LP-493). `parentRemoteId` names the new parent; `null` clears the
518
+ * edge. Idempotent: setting the parent an issue already has, or clearing one
519
+ * it does not have, is a no-op that returns the issue unchanged. Absent on a
520
+ * connector that cannot move an existing issue — the executor then skips the
521
+ * native half of a reparent with a reason.
522
+ */
523
+ reparent?(remoteId: string, parentRemoteId: string | null, signal?: AbortSignal): Promise<ConnectorResult>;
524
+ /** Post a comment on a remote issue. The result carries the comment id. */
525
+ comment?(remoteId: string, body: string, signal?: AbortSignal): Promise<ConnectorResult>;
526
+ /**
527
+ * List the user comments on a remote issue, oldest first (LP-316). The
528
+ * pull appends any not already recorded in the link store to `_comments.md`;
529
+ * the managed comment is excluded by the caller, never by the connector.
530
+ * Absent on a connector that cannot list comments — the pull then reports
531
+ * comment sync as unavailable rather than pretending the thread is empty.
532
+ */
533
+ listComments?(remoteId: string, signal?: AbortSignal): Promise<RemoteComment[]>;
534
+ /**
535
+ * Edit an existing comment in place, when the platform allows it. Absent
536
+ * when comments cannot be edited — the executor then deletes and reposts,
537
+ * when deletion is available (LP-278).
538
+ */
539
+ editComment?(remoteId: string, commentId: string, body: string, signal?: AbortSignal): Promise<ConnectorResult>;
540
+ /**
541
+ * Delete an existing comment, when the platform allows it. Used by the
542
+ * delete-then-repost path for a platform where comments cannot be edited.
543
+ */
544
+ deleteComment?(remoteId: string, commentId: string, signal?: AbortSignal): Promise<ConnectorResult>;
545
+ /**
546
+ * Answer a capability probe by name (LP-274). A provider that declares a
547
+ * probed capability cell implements the matching probe here; a fake
548
+ * connector supplies canned answers in tests. The name and the returned
549
+ * value's shape are the provider's own vocabulary.
550
+ */
551
+ probe?(probeName: string): Promise<unknown>;
552
+ /**
553
+ * List the project's issue types, each with its name, sub-task flag and
554
+ * hierarchy level (LP-324). Absent on a connector without a type scheme. The
555
+ * preflight validates the type mapping against this list; `probe('hierarchy')`
556
+ * reports the same fact as a capability depth.
557
+ */
558
+ issueTypes?(): Promise<IssueTypeSchemeEntry[]>;
559
+ /**
560
+ * The words this target actually has — its issue types and its workflow
561
+ * statuses, as plain names (LP-537). `lpm remote setup` reconciles the
562
+ * drafted mapping against them, so a conventional name the project renamed is
563
+ * corrected once instead of failing at every push.
564
+ *
565
+ * Absent on a connector with no vocabulary to report: `jsonfile` writes
566
+ * whatever the mapping says, and a GitHub board's types and statuses are
567
+ * labels of our own choosing. A key the provider omits means "this platform
568
+ * has no such vocabulary", which is not the same as an empty list — an empty
569
+ * list means the remote reported nothing and every mapped name is unresolved.
570
+ */
571
+ vocabulary?(signal?: AbortSignal): Promise<RemoteVocabulary>;
572
+ /**
573
+ * List the labels the repository already defines, as plain names. Absent on
574
+ * a connector that cannot list labels — the push's prerequisite step
575
+ * then cannot report or create a missing label (LP-308).
576
+ */
577
+ listLabels?(): Promise<string[]>;
578
+ /**
579
+ * Create a label with the given colour — a hex string with no leading `#`,
580
+ * the shape the platform's label API expects. The prerequisite step calls
581
+ * it for each mapped label the repository lacks (LP-308).
582
+ */
583
+ createLabel?(name: string, color: string, signal?: AbortSignal): Promise<void>;
584
+ /**
585
+ * The reachability probe (LP-364): can this remote be seen at all, with the
586
+ * current credentials and scope? The resolver calls it before trusting a 404
587
+ * as a deletion, because a permission loss and a genuine deletion are
588
+ * indistinguishable per issue. Returns a verdict *with evidence*, so a
589
+ * surprising classification can be argued with. Absent on a connector that
590
+ * cannot probe — a missing twin is then classified conservatively.
591
+ */
592
+ reachable?(): Promise<ReachabilityResult>;
593
+ /**
594
+ * Run one GraphQL query against the platform's GraphQL endpoint, where the
595
+ * platform has one (GitHub Projects v2, Linear). Returns the decoded
596
+ * response body — `{ data, errors? }` — so a resolver can read the data it
597
+ * asked for and report a platform-level miss (a missing object, a
598
+ * permission loss) rather than fail. Absent on a connector without a
599
+ * GraphQL API.
600
+ *
601
+ * `variables` carries the query's named variables; the query string is the
602
+ * caller's GraphQL document. The callers today are the Projects v2 id
603
+ * resolver (LP-310) and the status-field read/write (LP-312).
604
+ */
605
+ graphql?(query: string, variables?: Record<string, unknown>): Promise<Record<string, unknown>>;
606
+ /**
607
+ * Set the Project single-select status column for an issue (LP-312), when
608
+ * the provider carries the board's status in a Project field. `value` is
609
+ * the remote status label to write; the connector resolves it to an option
610
+ * id via the cached Project ids, adds the issue to the Project first when
611
+ * it is not already an item, and writes the field value. Absent on a
612
+ * connector without a Project status surface.
613
+ */
614
+ setProjectStatus?(remoteId: string, value: string, signal?: AbortSignal): Promise<void>;
615
+ /**
616
+ * Read the Project single-select status column for an issue (LP-312),
617
+ * returning the option name (a remote status label) or `undefined` when the
618
+ * issue is not an item or the field has no value. Absent on a connector
619
+ * without a Project status surface.
620
+ */
621
+ readProjectStatus?(remoteId: string, signal?: AbortSignal): Promise<string | undefined>;
622
+ /**
623
+ * Read the Project iteration field for an issue (LP-313), returning the
624
+ * iteration title or `undefined` when the issue is not an item or the field
625
+ * has no value. Absent on a connector without a Project iteration surface.
626
+ * The title is what the pull resolves back to a local period.
627
+ */
628
+ readProjectPeriod?(remoteId: string, signal?: AbortSignal): Promise<string | undefined>;
629
+ /**
630
+ * The people this target can actually assign work to.
631
+ *
632
+ * The account mapping resolves a board person to an account *value* offline
633
+ * (`accounts.via`), and the value it finds is a claim about the remote that
634
+ * nothing checks until the write fails: a stale account id, a colleague who
635
+ * left the project, an email a privacy-restricted instance will not resolve.
636
+ * Asking once — the project's assignable users, not every user on the
637
+ * instance — is what lets a push say "this will land unassigned" *before* it
638
+ * files anything, and what gives the roster something to be reconciled
639
+ * against.
640
+ *
641
+ * Absent on a connector with no notion of an account, in which case the
642
+ * readiness check reports what it can work out offline and nothing more.
643
+ */
644
+ listUsers?(signal?: AbortSignal): Promise<RemoteUser[]>;
645
+ /**
646
+ * List the sprints on the configured Agile board (LP-328), when the provider
647
+ * holds native sprints (Jira). Each entry carries the sprint's id, name,
648
+ * state and dates — the list a push matches a period to by name and a
649
+ * closed-sprint guard refuses work into. Absent on a connector without
650
+ * sprints, in which case sprint provision is unavailable.
651
+ */
652
+ listSprints?(signal?: AbortSignal): Promise<NativeSprint[]>;
653
+ /**
654
+ * Create a future sprint on the configured Agile board (LP-328), returning
655
+ * its id. Absent on a connector without sprints.
656
+ */
657
+ createSprint?(name: string, starts?: string, ends?: string, signal?: AbortSignal): Promise<{
658
+ id: string;
659
+ }>;
660
+ }
661
+ /**
662
+ * One person the remote can assign work to.
663
+ *
664
+ * Deliberately three plain fields rather than the platform's own shape: `id`
665
+ * is what the platform addresses them by (a Jira `accountId`, a GitHub login),
666
+ * `name` is what a person reading a list recognises, and `email` is what a
667
+ * board roster most often already holds. Which of them belongs in the board's
668
+ * `accounts.via` attribute is the provider's to say — `Translator.accountValue`
669
+ * — because that is platform knowledge and nothing above the provider may
670
+ * guess at it.
671
+ */
672
+ export interface RemoteUser {
673
+ id: string;
674
+ name: string;
675
+ email?: string;
676
+ }
677
+ /** One native sprint/cycle container a provider lists (LP-328). */
678
+ export interface NativeSprint {
679
+ /** The sprint's numeric id. */
680
+ id: string;
681
+ /** The sprint name — what a period title matches. */
682
+ name: string;
683
+ /** The sprint state: `future`, `active` or `closed`. */
684
+ state: string;
685
+ /** `YYYY-MM-DD` start date, when the sprint carries one. */
686
+ starts?: string;
687
+ /** `YYYY-MM-DD` end date, when the sprint carries one. */
688
+ ends?: string;
689
+ /** ISO completion timestamp, when the sprint was closed. */
690
+ completeDate?: string;
691
+ }
692
+ /**
693
+ * What a connector factory needs beyond the two blocks it already receives,
694
+ * passed through by `buildConnector` (LP-312). Some connectors read committed
695
+ * per-remote caches — the GitHub Projects v2 ids cache — which live on the
696
+ * board's filesystem, so they need the board paths and the remote's name to
697
+ * find them. Absent when a caller builds a connector without a board.
698
+ */
699
+ export interface ConnectorContext {
700
+ /** Board paths, for connectors that read committed caches. */
701
+ paths?: import('../core/storage/paths.js').BoardPaths;
702
+ /** The remote's name, for naming per-remote caches. */
703
+ remoteName?: string;
704
+ }
705
+ /** Builds a connector from a validated connection block, mapping block, and optional board context. */
706
+ export type ConnectorFactory = (connection: Record<string, unknown>, mapping: Record<string, unknown>, context?: ConnectorContext) => Connector;
707
+ /**
708
+ * A zod schema validating `{ connection, mapping }` for one provider. Typed
709
+ * loosely (the exact output shape is the provider's own `z.infer`), because the
710
+ * registry holds many providers behind one interface and only LP-259 calls it.
711
+ */
712
+ export type ProviderConfigSchema = z.ZodType;
713
+ /**
714
+ * What a provider adapter exposes. Exactly these four members — the shape that
715
+ * makes "adding a provider is a folder and a line" true.
716
+ */
717
+ export interface Provider {
718
+ /** Validates the provider-specific `connection` and `mapping` blocks. */
719
+ config: ProviderConfigSchema;
720
+ /** What the platform can natively hold, as a table (LP-274). */
721
+ capabilities: Capabilities;
722
+ /** Board vocabulary ↔ remote vocabulary, both directions. */
723
+ translator: Translator;
724
+ /** Turns a validated connection block into a live connector. */
725
+ connector: ConnectorFactory;
726
+ /**
727
+ * Which connection keys hold secrets, each with the platform's own
728
+ * conventional env var (LP-295). The resolver fills an unset secret from
729
+ * this; the check uses it to refuse a literal secret in the committed
730
+ * config. Absent on a provider with no secrets.
731
+ */
732
+ /**
733
+ * Connection keys that only *part* of a mapping needs, which is why the
734
+ * provider's schema cannot simply mark them required.
735
+ *
736
+ * Jira's Agile board id is the whole of the motivation: a Jira remote that
737
+ * never schedules anything needs no board, and one whose mapping carries
738
+ * `periods` cannot create or find a single sprint without it. The schema
739
+ * sees one remote declaration at a time and has no view of what the push
740
+ * will try to do, so the demand is stated here as data and checked where the
741
+ * two facts meet — the push preflight, which holds the mapping and the
742
+ * connection together and runs before anything is written.
743
+ *
744
+ * Two things read it: `preflightPush`, which turns an unmet one into an
745
+ * error that refuses the push with `why` as the remedy, and the setup
746
+ * conversation, which tries to answer it from the remote itself
747
+ * (`Connector.discoverConnection`) before anybody is asked to go and find it.
748
+ */
749
+ conditionalConnection?: readonly ConditionalConnectionKey[];
750
+ credentials?: {
751
+ /** Secret-bearing connection key → the platform's conventional env var. */
752
+ secrets: Record<string, string>;
753
+ /**
754
+ * Which of those keys are not themselves secret to *look* at, and may be
755
+ * echoed while somebody types them (Jira's account `email`, which is half
756
+ * of the credential and no secret at all). Everything else is read with
757
+ * the terminal's echo off. Absent means every key is hidden, which is the
758
+ * safe default for a provider that declares nothing.
759
+ */
760
+ visible?: readonly string[];
761
+ /**
762
+ * Where a person creates this credential — the page to open, printed by
763
+ * `lpm remote add` and whenever a credential is missing. A person who has
764
+ * just declared a remote needs one thing next, and hunting for the token
765
+ * page is the step nothing in the tool used to help with.
766
+ */
767
+ url?: string;
768
+ /** One line naming what to create and with what access. */
769
+ hint?: string;
770
+ };
771
+ /**
772
+ * The platform's *conventional* words for a board's types and statuses, used
773
+ * when nobody has yet told the tool anything about the remote (LP-537).
774
+ *
775
+ * Only meaningful for a provider whose `capabilities.vocabulary` is `fixed`:
776
+ * a vocabulary that pre-exists remotely and can only be listed by asking. The
777
+ * scaffold writes these instead of a `TODO:` marker, so the remote opens and
778
+ * syncs without a hand-edited mapping; the push preflight still validates
779
+ * every name against the live project before a write, and `lpm remote setup`
780
+ * replaces a convention with the remote's real word as soon as a credential
781
+ * exists. Absent on a provider whose vocabulary is ours to write (`jsonfile`)
782
+ * or that has none (a labels-only GitHub remote).
783
+ */
784
+ standardVocabulary?: StandardVocabulary;
785
+ /**
786
+ * Connection values this provider can work out for itself, given only the
787
+ * remote's name — so `lpm remote add` does not have to ask for them.
788
+ *
789
+ * The worked example is `jsonfile`, whose `file` is a path *this tool*
790
+ * owns: there is no external system to point at, so making a person invent
791
+ * `--file .lpm/remotes/demo/tracker.json` was asking them to name something
792
+ * the tool can name better. A key here is still an ordinary connection key —
793
+ * written into config.yml, validated by the same schema, and overridable by
794
+ * passing the flag explicitly. It is a default, never a lock.
795
+ *
796
+ * Only a value derivable with **no** external knowledge belongs here: a
797
+ * GitHub `repo` or a Jira `site` names somebody else's system and can never
798
+ * be guessed. Must be pure, and its *key set* must not depend on the name it
799
+ * is given — `connectionFlags` calls it to learn which flags are optional.
800
+ */
801
+ defaultConnection?(remoteName: string): Record<string, unknown>;
802
+ }