@thiagodiogo/pastelsdd 1.0.0-beta.1

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 (369) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +3 -0
  3. package/bin/pastelsdd.js +5 -0
  4. package/dist/cli/index.d.ts +5 -0
  5. package/dist/cli/index.js +526 -0
  6. package/dist/commands/change.d.ts +35 -0
  7. package/dist/commands/change.js +277 -0
  8. package/dist/commands/completion.d.ts +72 -0
  9. package/dist/commands/completion.js +264 -0
  10. package/dist/commands/config.d.ts +36 -0
  11. package/dist/commands/config.js +611 -0
  12. package/dist/commands/context-store.d.ts +3 -0
  13. package/dist/commands/context-store.js +282 -0
  14. package/dist/commands/feedback.d.ts +9 -0
  15. package/dist/commands/feedback.js +183 -0
  16. package/dist/commands/initiative.d.ts +13 -0
  17. package/dist/commands/initiative.js +318 -0
  18. package/dist/commands/schema.d.ts +6 -0
  19. package/dist/commands/schema.js +869 -0
  20. package/dist/commands/show.d.ts +14 -0
  21. package/dist/commands/show.js +132 -0
  22. package/dist/commands/spec.d.ts +15 -0
  23. package/dist/commands/spec.js +225 -0
  24. package/dist/commands/validate.d.ts +24 -0
  25. package/dist/commands/validate.js +294 -0
  26. package/dist/commands/workflow/index.d.ts +19 -0
  27. package/dist/commands/workflow/index.js +13 -0
  28. package/dist/commands/workflow/initiative-link.d.ts +24 -0
  29. package/dist/commands/workflow/initiative-link.js +47 -0
  30. package/dist/commands/workflow/instructions.d.ts +29 -0
  31. package/dist/commands/workflow/instructions.js +344 -0
  32. package/dist/commands/workflow/new-change.d.ts +17 -0
  33. package/dist/commands/workflow/new-change.js +141 -0
  34. package/dist/commands/workflow/schemas.d.ts +10 -0
  35. package/dist/commands/workflow/schemas.js +34 -0
  36. package/dist/commands/workflow/set-change.d.ts +13 -0
  37. package/dist/commands/workflow/set-change.js +87 -0
  38. package/dist/commands/workflow/shared.d.ts +59 -0
  39. package/dist/commands/workflow/shared.js +116 -0
  40. package/dist/commands/workflow/status.d.ts +14 -0
  41. package/dist/commands/workflow/status.js +90 -0
  42. package/dist/commands/workflow/templates.d.ts +16 -0
  43. package/dist/commands/workflow/templates.js +69 -0
  44. package/dist/commands/workspace/context-status.d.ts +4 -0
  45. package/dist/commands/workspace/context-status.js +59 -0
  46. package/dist/commands/workspace/open-view.d.ts +62 -0
  47. package/dist/commands/workspace/open-view.js +228 -0
  48. package/dist/commands/workspace/open.d.ts +37 -0
  49. package/dist/commands/workspace/open.js +102 -0
  50. package/dist/commands/workspace/opener-selection.d.ts +11 -0
  51. package/dist/commands/workspace/opener-selection.js +93 -0
  52. package/dist/commands/workspace/operations.d.ts +28 -0
  53. package/dist/commands/workspace/operations.js +543 -0
  54. package/dist/commands/workspace/prompt-theme.d.ts +29 -0
  55. package/dist/commands/workspace/prompt-theme.js +24 -0
  56. package/dist/commands/workspace/registration.d.ts +13 -0
  57. package/dist/commands/workspace/registration.js +84 -0
  58. package/dist/commands/workspace/selection.d.ts +6 -0
  59. package/dist/commands/workspace/selection.js +122 -0
  60. package/dist/commands/workspace/types.d.ts +103 -0
  61. package/dist/commands/workspace/types.js +36 -0
  62. package/dist/commands/workspace.d.ts +6 -0
  63. package/dist/commands/workspace.js +678 -0
  64. package/dist/core/archive.d.ts +11 -0
  65. package/dist/core/archive.js +318 -0
  66. package/dist/core/artifact-graph/graph.d.ts +56 -0
  67. package/dist/core/artifact-graph/graph.js +141 -0
  68. package/dist/core/artifact-graph/index.d.ts +9 -0
  69. package/dist/core/artifact-graph/index.js +14 -0
  70. package/dist/core/artifact-graph/instruction-loader.d.ts +183 -0
  71. package/dist/core/artifact-graph/instruction-loader.js +256 -0
  72. package/dist/core/artifact-graph/outputs.d.ts +14 -0
  73. package/dist/core/artifact-graph/outputs.js +39 -0
  74. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  75. package/dist/core/artifact-graph/resolver.js +257 -0
  76. package/dist/core/artifact-graph/schema.d.ts +13 -0
  77. package/dist/core/artifact-graph/schema.js +108 -0
  78. package/dist/core/artifact-graph/state.d.ts +12 -0
  79. package/dist/core/artifact-graph/state.js +31 -0
  80. package/dist/core/artifact-graph/types.d.ts +40 -0
  81. package/dist/core/artifact-graph/types.js +29 -0
  82. package/dist/core/available-tools.d.ts +17 -0
  83. package/dist/core/available-tools.js +43 -0
  84. package/dist/core/change-metadata/index.d.ts +2 -0
  85. package/dist/core/change-metadata/index.js +2 -0
  86. package/dist/core/change-metadata/schema.d.ts +18 -0
  87. package/dist/core/change-metadata/schema.js +28 -0
  88. package/dist/core/change-status-policy.d.ts +50 -0
  89. package/dist/core/change-status-policy.js +70 -0
  90. package/dist/core/collections/index.d.ts +3 -0
  91. package/dist/core/collections/index.js +3 -0
  92. package/dist/core/collections/initiatives/collection.d.ts +4 -0
  93. package/dist/core/collections/initiatives/collection.js +17 -0
  94. package/dist/core/collections/initiatives/index.d.ts +6 -0
  95. package/dist/core/collections/initiatives/index.js +6 -0
  96. package/dist/core/collections/initiatives/operations.d.ts +49 -0
  97. package/dist/core/collections/initiatives/operations.js +175 -0
  98. package/dist/core/collections/initiatives/resolution.d.ts +87 -0
  99. package/dist/core/collections/initiatives/resolution.js +374 -0
  100. package/dist/core/collections/initiatives/schema.d.ts +41 -0
  101. package/dist/core/collections/initiatives/schema.js +134 -0
  102. package/dist/core/collections/initiatives/templates.d.ts +12 -0
  103. package/dist/core/collections/initiatives/templates.js +90 -0
  104. package/dist/core/collections/runtime.d.ts +46 -0
  105. package/dist/core/collections/runtime.js +194 -0
  106. package/dist/core/command-generation/adapters/amazon-q.d.ts +13 -0
  107. package/dist/core/command-generation/adapters/amazon-q.js +26 -0
  108. package/dist/core/command-generation/adapters/antigravity.d.ts +13 -0
  109. package/dist/core/command-generation/adapters/antigravity.js +26 -0
  110. package/dist/core/command-generation/adapters/auggie.d.ts +13 -0
  111. package/dist/core/command-generation/adapters/auggie.js +27 -0
  112. package/dist/core/command-generation/adapters/bob.d.ts +14 -0
  113. package/dist/core/command-generation/adapters/bob.js +45 -0
  114. package/dist/core/command-generation/adapters/claude.d.ts +13 -0
  115. package/dist/core/command-generation/adapters/claude.js +50 -0
  116. package/dist/core/command-generation/adapters/cline.d.ts +14 -0
  117. package/dist/core/command-generation/adapters/cline.js +27 -0
  118. package/dist/core/command-generation/adapters/codebuddy.d.ts +13 -0
  119. package/dist/core/command-generation/adapters/codebuddy.js +28 -0
  120. package/dist/core/command-generation/adapters/codex.d.ts +16 -0
  121. package/dist/core/command-generation/adapters/codex.js +39 -0
  122. package/dist/core/command-generation/adapters/continue.d.ts +13 -0
  123. package/dist/core/command-generation/adapters/continue.js +28 -0
  124. package/dist/core/command-generation/adapters/costrict.d.ts +13 -0
  125. package/dist/core/command-generation/adapters/costrict.js +27 -0
  126. package/dist/core/command-generation/adapters/crush.d.ts +13 -0
  127. package/dist/core/command-generation/adapters/crush.js +30 -0
  128. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  129. package/dist/core/command-generation/adapters/cursor.js +44 -0
  130. package/dist/core/command-generation/adapters/factory.d.ts +13 -0
  131. package/dist/core/command-generation/adapters/factory.js +27 -0
  132. package/dist/core/command-generation/adapters/gemini.d.ts +13 -0
  133. package/dist/core/command-generation/adapters/gemini.js +26 -0
  134. package/dist/core/command-generation/adapters/github-copilot.d.ts +13 -0
  135. package/dist/core/command-generation/adapters/github-copilot.js +26 -0
  136. package/dist/core/command-generation/adapters/iflow.d.ts +13 -0
  137. package/dist/core/command-generation/adapters/iflow.js +29 -0
  138. package/dist/core/command-generation/adapters/index.d.ts +32 -0
  139. package/dist/core/command-generation/adapters/index.js +32 -0
  140. package/dist/core/command-generation/adapters/junie.d.ts +13 -0
  141. package/dist/core/command-generation/adapters/junie.js +26 -0
  142. package/dist/core/command-generation/adapters/kilocode.d.ts +14 -0
  143. package/dist/core/command-generation/adapters/kilocode.js +23 -0
  144. package/dist/core/command-generation/adapters/kiro.d.ts +13 -0
  145. package/dist/core/command-generation/adapters/kiro.js +26 -0
  146. package/dist/core/command-generation/adapters/lingma.d.ts +13 -0
  147. package/dist/core/command-generation/adapters/lingma.js +30 -0
  148. package/dist/core/command-generation/adapters/opencode.d.ts +13 -0
  149. package/dist/core/command-generation/adapters/opencode.js +29 -0
  150. package/dist/core/command-generation/adapters/pi.d.ts +18 -0
  151. package/dist/core/command-generation/adapters/pi.js +55 -0
  152. package/dist/core/command-generation/adapters/qoder.d.ts +13 -0
  153. package/dist/core/command-generation/adapters/qoder.js +30 -0
  154. package/dist/core/command-generation/adapters/qwen.d.ts +13 -0
  155. package/dist/core/command-generation/adapters/qwen.js +26 -0
  156. package/dist/core/command-generation/adapters/roocode.d.ts +14 -0
  157. package/dist/core/command-generation/adapters/roocode.js +27 -0
  158. package/dist/core/command-generation/adapters/windsurf.d.ts +14 -0
  159. package/dist/core/command-generation/adapters/windsurf.js +51 -0
  160. package/dist/core/command-generation/generator.d.ts +21 -0
  161. package/dist/core/command-generation/generator.js +27 -0
  162. package/dist/core/command-generation/index.d.ts +22 -0
  163. package/dist/core/command-generation/index.js +24 -0
  164. package/dist/core/command-generation/registry.d.ts +36 -0
  165. package/dist/core/command-generation/registry.js +98 -0
  166. package/dist/core/command-generation/types.d.ts +56 -0
  167. package/dist/core/command-generation/types.js +8 -0
  168. package/dist/core/completions/command-registry.d.ts +3 -0
  169. package/dist/core/completions/command-registry.js +939 -0
  170. package/dist/core/completions/completion-provider.d.ts +71 -0
  171. package/dist/core/completions/completion-provider.js +129 -0
  172. package/dist/core/completions/factory.d.ts +64 -0
  173. package/dist/core/completions/factory.js +75 -0
  174. package/dist/core/completions/generators/bash-generator.d.ts +35 -0
  175. package/dist/core/completions/generators/bash-generator.js +230 -0
  176. package/dist/core/completions/generators/fish-generator.d.ts +32 -0
  177. package/dist/core/completions/generators/fish-generator.js +160 -0
  178. package/dist/core/completions/generators/powershell-generator.d.ts +36 -0
  179. package/dist/core/completions/generators/powershell-generator.js +266 -0
  180. package/dist/core/completions/generators/zsh-generator.d.ts +47 -0
  181. package/dist/core/completions/generators/zsh-generator.js +274 -0
  182. package/dist/core/completions/installers/bash-installer.d.ts +87 -0
  183. package/dist/core/completions/installers/bash-installer.js +318 -0
  184. package/dist/core/completions/installers/fish-installer.d.ts +43 -0
  185. package/dist/core/completions/installers/fish-installer.js +143 -0
  186. package/dist/core/completions/installers/powershell-installer.d.ts +102 -0
  187. package/dist/core/completions/installers/powershell-installer.js +387 -0
  188. package/dist/core/completions/installers/zsh-installer.d.ts +117 -0
  189. package/dist/core/completions/installers/zsh-installer.js +421 -0
  190. package/dist/core/completions/shared-flags.d.ts +12 -0
  191. package/dist/core/completions/shared-flags.js +28 -0
  192. package/dist/core/completions/templates/bash-templates.d.ts +6 -0
  193. package/dist/core/completions/templates/bash-templates.js +30 -0
  194. package/dist/core/completions/templates/fish-templates.d.ts +7 -0
  195. package/dist/core/completions/templates/fish-templates.js +45 -0
  196. package/dist/core/completions/templates/powershell-templates.d.ts +6 -0
  197. package/dist/core/completions/templates/powershell-templates.js +34 -0
  198. package/dist/core/completions/templates/zsh-templates.d.ts +6 -0
  199. package/dist/core/completions/templates/zsh-templates.js +45 -0
  200. package/dist/core/completions/types.d.ts +101 -0
  201. package/dist/core/completions/types.js +2 -0
  202. package/dist/core/config-prompts.d.ts +9 -0
  203. package/dist/core/config-prompts.js +34 -0
  204. package/dist/core/config-schema.d.ts +86 -0
  205. package/dist/core/config-schema.js +213 -0
  206. package/dist/core/config.d.ts +18 -0
  207. package/dist/core/config.js +38 -0
  208. package/dist/core/context-store/binding.d.ts +53 -0
  209. package/dist/core/context-store/binding.js +197 -0
  210. package/dist/core/context-store/errors.d.ts +20 -0
  211. package/dist/core/context-store/errors.js +22 -0
  212. package/dist/core/context-store/foundation.d.ts +54 -0
  213. package/dist/core/context-store/foundation.js +318 -0
  214. package/dist/core/context-store/index.d.ts +6 -0
  215. package/dist/core/context-store/index.js +6 -0
  216. package/dist/core/context-store/operations.d.ts +62 -0
  217. package/dist/core/context-store/operations.js +352 -0
  218. package/dist/core/context-store/registry.d.ts +35 -0
  219. package/dist/core/context-store/registry.js +158 -0
  220. package/dist/core/converters/json-converter.d.ts +6 -0
  221. package/dist/core/converters/json-converter.js +51 -0
  222. package/dist/core/global-config.d.ts +49 -0
  223. package/dist/core/global-config.js +124 -0
  224. package/dist/core/index.d.ts +6 -0
  225. package/dist/core/index.js +7 -0
  226. package/dist/core/init.d.ts +37 -0
  227. package/dist/core/init.js +593 -0
  228. package/dist/core/legacy-cleanup.d.ts +162 -0
  229. package/dist/core/legacy-cleanup.js +514 -0
  230. package/dist/core/list.d.ts +9 -0
  231. package/dist/core/list.js +171 -0
  232. package/dist/core/migration.d.ts +23 -0
  233. package/dist/core/migration.js +108 -0
  234. package/dist/core/parsers/change-parser.d.ts +13 -0
  235. package/dist/core/parsers/change-parser.js +197 -0
  236. package/dist/core/parsers/markdown-parser.d.ts +26 -0
  237. package/dist/core/parsers/markdown-parser.js +227 -0
  238. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  239. package/dist/core/parsers/requirement-blocks.js +201 -0
  240. package/dist/core/parsers/spec-structure.d.ts +9 -0
  241. package/dist/core/parsers/spec-structure.js +88 -0
  242. package/dist/core/planning-home.d.ts +21 -0
  243. package/dist/core/planning-home.js +108 -0
  244. package/dist/core/profile-sync-drift.d.ts +38 -0
  245. package/dist/core/profile-sync-drift.js +200 -0
  246. package/dist/core/profiles.d.ts +26 -0
  247. package/dist/core/profiles.js +40 -0
  248. package/dist/core/project-config.d.ts +64 -0
  249. package/dist/core/project-config.js +223 -0
  250. package/dist/core/schemas/base.schema.d.ts +13 -0
  251. package/dist/core/schemas/base.schema.js +13 -0
  252. package/dist/core/schemas/change.schema.d.ts +73 -0
  253. package/dist/core/schemas/change.schema.js +31 -0
  254. package/dist/core/schemas/index.d.ts +4 -0
  255. package/dist/core/schemas/index.js +4 -0
  256. package/dist/core/schemas/spec.schema.d.ts +18 -0
  257. package/dist/core/schemas/spec.schema.js +15 -0
  258. package/dist/core/shared/index.d.ts +8 -0
  259. package/dist/core/shared/index.js +8 -0
  260. package/dist/core/shared/skill-generation.d.ts +49 -0
  261. package/dist/core/shared/skill-generation.js +96 -0
  262. package/dist/core/shared/tool-detection.d.ts +71 -0
  263. package/dist/core/shared/tool-detection.js +158 -0
  264. package/dist/core/specs-apply.d.ts +73 -0
  265. package/dist/core/specs-apply.js +392 -0
  266. package/dist/core/styles/palette.d.ts +7 -0
  267. package/dist/core/styles/palette.js +8 -0
  268. package/dist/core/templates/index.d.ts +8 -0
  269. package/dist/core/templates/index.js +9 -0
  270. package/dist/core/templates/skill-templates.d.ts +19 -0
  271. package/dist/core/templates/skill-templates.js +18 -0
  272. package/dist/core/templates/types.d.ts +19 -0
  273. package/dist/core/templates/types.js +5 -0
  274. package/dist/core/templates/workflows/apply-change.d.ts +10 -0
  275. package/dist/core/templates/workflows/apply-change.js +314 -0
  276. package/dist/core/templates/workflows/archive-change.d.ts +10 -0
  277. package/dist/core/templates/workflows/archive-change.js +277 -0
  278. package/dist/core/templates/workflows/bulk-archive-change.d.ts +10 -0
  279. package/dist/core/templates/workflows/bulk-archive-change.js +492 -0
  280. package/dist/core/templates/workflows/continue-change.d.ts +10 -0
  281. package/dist/core/templates/workflows/continue-change.js +234 -0
  282. package/dist/core/templates/workflows/explore.d.ts +10 -0
  283. package/dist/core/templates/workflows/explore.js +459 -0
  284. package/dist/core/templates/workflows/feedback.d.ts +9 -0
  285. package/dist/core/templates/workflows/feedback.js +108 -0
  286. package/dist/core/templates/workflows/ff-change.d.ts +10 -0
  287. package/dist/core/templates/workflows/ff-change.js +200 -0
  288. package/dist/core/templates/workflows/new-change.d.ts +10 -0
  289. package/dist/core/templates/workflows/new-change.js +143 -0
  290. package/dist/core/templates/workflows/onboard.d.ts +10 -0
  291. package/dist/core/templates/workflows/onboard.js +563 -0
  292. package/dist/core/templates/workflows/propose.d.ts +10 -0
  293. package/dist/core/templates/workflows/propose.js +218 -0
  294. package/dist/core/templates/workflows/sync-specs.d.ts +10 -0
  295. package/dist/core/templates/workflows/sync-specs.js +290 -0
  296. package/dist/core/templates/workflows/verify-change.d.ts +10 -0
  297. package/dist/core/templates/workflows/verify-change.js +338 -0
  298. package/dist/core/update.d.ts +82 -0
  299. package/dist/core/update.js +557 -0
  300. package/dist/core/validation/constants.d.ts +34 -0
  301. package/dist/core/validation/constants.js +40 -0
  302. package/dist/core/validation/types.d.ts +18 -0
  303. package/dist/core/validation/types.js +2 -0
  304. package/dist/core/validation/validator.d.ts +33 -0
  305. package/dist/core/validation/validator.js +418 -0
  306. package/dist/core/view.d.ts +8 -0
  307. package/dist/core/view.js +168 -0
  308. package/dist/core/workspace/foundation.d.ts +62 -0
  309. package/dist/core/workspace/foundation.js +274 -0
  310. package/dist/core/workspace/index.d.ts +8 -0
  311. package/dist/core/workspace/index.js +8 -0
  312. package/dist/core/workspace/legacy-state.d.ts +28 -0
  313. package/dist/core/workspace/legacy-state.js +200 -0
  314. package/dist/core/workspace/link-input.d.ts +9 -0
  315. package/dist/core/workspace/link-input.js +32 -0
  316. package/dist/core/workspace/open-surface.d.ts +43 -0
  317. package/dist/core/workspace/open-surface.js +214 -0
  318. package/dist/core/workspace/openers.d.ts +21 -0
  319. package/dist/core/workspace/openers.js +119 -0
  320. package/dist/core/workspace/registry.d.ts +24 -0
  321. package/dist/core/workspace/registry.js +146 -0
  322. package/dist/core/workspace/skills.d.ts +57 -0
  323. package/dist/core/workspace/skills.js +334 -0
  324. package/dist/core/workspace/state-io.d.ts +10 -0
  325. package/dist/core/workspace/state-io.js +119 -0
  326. package/dist/index.d.ts +3 -0
  327. package/dist/index.js +3 -0
  328. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  329. package/dist/prompts/searchable-multi-select.js +159 -0
  330. package/dist/telemetry/config.d.ts +38 -0
  331. package/dist/telemetry/config.js +136 -0
  332. package/dist/telemetry/index.d.ts +31 -0
  333. package/dist/telemetry/index.js +164 -0
  334. package/dist/ui/ascii-patterns.d.ts +16 -0
  335. package/dist/ui/ascii-patterns.js +133 -0
  336. package/dist/ui/welcome-screen.d.ts +10 -0
  337. package/dist/ui/welcome-screen.js +146 -0
  338. package/dist/utils/change-metadata.d.ts +54 -0
  339. package/dist/utils/change-metadata.js +141 -0
  340. package/dist/utils/change-utils.d.ts +71 -0
  341. package/dist/utils/change-utils.js +123 -0
  342. package/dist/utils/command-references.d.ts +18 -0
  343. package/dist/utils/command-references.js +20 -0
  344. package/dist/utils/file-system.d.ts +41 -0
  345. package/dist/utils/file-system.js +301 -0
  346. package/dist/utils/index.d.ts +6 -0
  347. package/dist/utils/index.js +9 -0
  348. package/dist/utils/interactive.d.ts +18 -0
  349. package/dist/utils/interactive.js +21 -0
  350. package/dist/utils/item-discovery.d.ts +4 -0
  351. package/dist/utils/item-discovery.js +72 -0
  352. package/dist/utils/match.d.ts +3 -0
  353. package/dist/utils/match.js +22 -0
  354. package/dist/utils/shell-detection.d.ts +20 -0
  355. package/dist/utils/shell-detection.js +41 -0
  356. package/dist/utils/task-progress.d.ts +8 -0
  357. package/dist/utils/task-progress.js +36 -0
  358. package/package.json +84 -0
  359. package/schemas/spec-driven/schema.yaml +153 -0
  360. package/schemas/spec-driven/templates/design.md +19 -0
  361. package/schemas/spec-driven/templates/proposal.md +23 -0
  362. package/schemas/spec-driven/templates/spec.md +8 -0
  363. package/schemas/spec-driven/templates/tasks.md +9 -0
  364. package/schemas/workspace-planning/schema.yaml +72 -0
  365. package/schemas/workspace-planning/templates/design.md +33 -0
  366. package/schemas/workspace-planning/templates/proposal.md +28 -0
  367. package/schemas/workspace-planning/templates/spec.md +9 -0
  368. package/schemas/workspace-planning/templates/tasks.md +15 -0
  369. package/scripts/postinstall.js +83 -0
@@ -0,0 +1,543 @@
1
+ import * as nodeFs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { getWorkspaceContextInitiativeId, getWorkspaceContextStoreId, getManagedWorkspaceRoot, hasWorkspaceSkillProfileDrift, getWorkspaceChangesDir, getWorkspaceViewStatePath, isWorkspaceRoot, listKnownWorkspaceEntries, parseWorkspaceSetupLinkInput, readWorkspaceViewState, syncWorkspaceOpenSurface, validateWorkspaceLinkName, validateWorkspaceName, writeWorkspaceViewState, } from '../../core/workspace/index.js';
4
+ import { formatContextStoreBinding, sameContextStoreBinding, } from '../../core/context-store/index.js';
5
+ import { FileSystemUtils } from '../../utils/file-system.js';
6
+ import { WorkspaceCliError, asErrorMessage, makeStatus, } from './types.js';
7
+ import { collectWorkspaceContextStatuses } from './context-status.js';
8
+ const fs = nodeFs.promises;
9
+ export async function directoryExists(dirPath) {
10
+ try {
11
+ return (await fs.stat(dirPath)).isDirectory();
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ function normalizeExistingPathForStorage(existingPath) {
18
+ return FileSystemUtils.canonicalizeExistingPath(existingPath);
19
+ }
20
+ export async function resolveExistingDirectory(inputPath, cwd = process.cwd()) {
21
+ if (inputPath.length === 0) {
22
+ throw new WorkspaceCliError('Repo or folder path must not be empty.', 'linked_path_empty', {
23
+ target: 'link.path',
24
+ fix: 'Choose an existing repo or folder path.',
25
+ });
26
+ }
27
+ const resolvedPath = path.isAbsolute(inputPath)
28
+ ? path.resolve(inputPath)
29
+ : path.resolve(cwd, inputPath);
30
+ if (!(await directoryExists(resolvedPath))) {
31
+ throw new WorkspaceCliError(`Path '${inputPath}' is not an existing folder.`, 'linked_path_missing', {
32
+ target: 'link.path',
33
+ fix: 'Choose an existing repo or folder path.',
34
+ });
35
+ }
36
+ return normalizeExistingPathForStorage(resolvedPath);
37
+ }
38
+ export function inferLinkName(absolutePath) {
39
+ return path.basename(absolutePath);
40
+ }
41
+ function normalizeLinksForOutput(viewState) {
42
+ return Object.keys(viewState.links)
43
+ .sort((a, b) => a.localeCompare(b))
44
+ .map((name) => ({
45
+ name,
46
+ path: viewState.links[name] ?? null,
47
+ status: [],
48
+ }));
49
+ }
50
+ function workspaceContextToOutput(context) {
51
+ if (!context) {
52
+ return null;
53
+ }
54
+ return {
55
+ store: getWorkspaceContextStoreId(context),
56
+ initiative: getWorkspaceContextInitiativeId(context),
57
+ store_selector: context.store.selector,
58
+ };
59
+ }
60
+ function formatDuplicateLinkMessage(linkName, existingPath, replacementPath) {
61
+ return [
62
+ `Cannot use link name '${linkName}' because another link already uses that name.`,
63
+ 'Existing link:',
64
+ ` ${linkName} -> ${existingPath ?? '(no local path recorded)'}`,
65
+ '',
66
+ 'Choose a different link name:',
67
+ ` pastelsdd workspace link archived-${linkName} ${replacementPath}`,
68
+ '',
69
+ 'If you meant to change the existing link path:',
70
+ ` pastelsdd workspace relink ${linkName} ${replacementPath}`,
71
+ ].join('\n');
72
+ }
73
+ function duplicateLinkError(linkName, existingPath, replacementPath) {
74
+ return new WorkspaceCliError(formatDuplicateLinkMessage(linkName, existingPath, replacementPath), 'duplicate_link_name', {
75
+ target: `links.${linkName}`,
76
+ fix: `Choose a different link name or run 'pastelsdd workspace relink ${linkName} ${replacementPath}'.`,
77
+ });
78
+ }
79
+ function hasWorkspaceLink(links, linkName) {
80
+ return Object.prototype.hasOwnProperty.call(links, linkName);
81
+ }
82
+ function duplicateSetupLinkError(linkName, existingPath, replacementPath) {
83
+ return new WorkspaceCliError([
84
+ `Cannot use link name '${linkName}' because another setup link already uses that name.`,
85
+ 'Existing link:',
86
+ ` ${linkName} -> ${existingPath}`,
87
+ '',
88
+ 'Use explicit --link <name>=<path> values with different names.',
89
+ ].join('\n'), 'duplicate_link_name', {
90
+ target: `links.${linkName}`,
91
+ fix: `Use explicit --link ${linkName}-alt=${replacementPath} with a different link name.`,
92
+ });
93
+ }
94
+ export function validateWorkspaceNameForSetup(name) {
95
+ try {
96
+ return validateWorkspaceName(name);
97
+ }
98
+ catch {
99
+ throw new WorkspaceCliError('Workspace name must be kebab-case with lowercase letters, numbers, and single hyphen separators.', 'invalid_workspace_name', {
100
+ target: 'workspace.name',
101
+ });
102
+ }
103
+ }
104
+ export function validateLinkNameForCommand(name) {
105
+ try {
106
+ return validateWorkspaceLinkName(name);
107
+ }
108
+ catch (error) {
109
+ throw new WorkspaceCliError(asErrorMessage(error), 'invalid_link_name', {
110
+ target: 'link.name',
111
+ });
112
+ }
113
+ }
114
+ function localStateInvalidStatus(error) {
115
+ return makeStatus('error', 'workspace_local_state_invalid', `Machine-local paths could not be read: ${asErrorMessage(error)}`, {
116
+ target: 'workspace.local_state',
117
+ fix: 'Repair workspace.yaml, then run pastelsdd workspace relink <name> <path> for affected links.',
118
+ });
119
+ }
120
+ function workspaceSkillDriftStatus(workspaceName) {
121
+ return makeStatus('warning', 'workspace_skills_out_of_sync', 'Workspace-local agent skills are out of sync with the active global profile.', {
122
+ target: 'workspace.skills',
123
+ fix: `pastelsdd workspace update --workspace ${workspaceName}`,
124
+ });
125
+ }
126
+ function appendWorkspaceSkillDriftStatus(statuses, workspaceName, viewState) {
127
+ if (hasWorkspaceSkillProfileDrift(viewState)) {
128
+ statuses.push(workspaceSkillDriftStatus(workspaceName));
129
+ }
130
+ }
131
+ export async function createManagedWorkspace(name, links, preferredOpener, context = null, tools) {
132
+ const workspaceName = validateWorkspaceNameForSetup(name);
133
+ const targetWorkspaceRoot = getManagedWorkspaceRoot(workspaceName);
134
+ let workspaceRoot = targetWorkspaceRoot;
135
+ if (await directoryExists(targetWorkspaceRoot)) {
136
+ throw new WorkspaceCliError(`Workspace '${workspaceName}' already exists at ${targetWorkspaceRoot}.`, 'workspace_already_exists', {
137
+ target: 'workspace.name',
138
+ });
139
+ }
140
+ let createdWorkspaceRoot = false;
141
+ try {
142
+ await FileSystemUtils.createDirectory(path.dirname(targetWorkspaceRoot));
143
+ await fs.mkdir(targetWorkspaceRoot);
144
+ createdWorkspaceRoot = true;
145
+ workspaceRoot = FileSystemUtils.canonicalizeExistingPath(targetWorkspaceRoot);
146
+ await FileSystemUtils.createDirectory(getWorkspaceChangesDir(workspaceRoot));
147
+ const viewState = {
148
+ version: 1,
149
+ name: workspaceName,
150
+ context,
151
+ links,
152
+ ...(preferredOpener ? { preferred_opener: preferredOpener } : {}),
153
+ ...(tools ? { tools } : {}),
154
+ };
155
+ await writeWorkspaceViewState(workspaceRoot, viewState);
156
+ await syncWorkspaceOpenSurface(workspaceRoot, viewState);
157
+ }
158
+ catch (error) {
159
+ if (createdWorkspaceRoot) {
160
+ try {
161
+ await fs.rm(targetWorkspaceRoot, { recursive: true, force: true });
162
+ }
163
+ catch {
164
+ // Preserve the original creation failure; callers can retry or inspect the path.
165
+ }
166
+ }
167
+ throw new WorkspaceCliError(`Could not create workspace '${workspaceName}': ${asErrorMessage(error)}`, 'workspace_create_failed', {
168
+ target: 'workspace.root',
169
+ });
170
+ }
171
+ return {
172
+ name: workspaceName,
173
+ root: workspaceRoot,
174
+ planning_path: getWorkspaceChangesDir(workspaceRoot),
175
+ state_path: getWorkspaceViewStatePath(workspaceRoot),
176
+ context: workspaceContextToOutput(context),
177
+ links: Object.entries(links)
178
+ .sort(([a], [b]) => a.localeCompare(b))
179
+ .map(([linkName, linkPath]) => ({
180
+ name: linkName,
181
+ path: linkPath,
182
+ status: [],
183
+ })),
184
+ status: [],
185
+ };
186
+ }
187
+ export async function parseSetupLinks(linkInputs) {
188
+ const links = {};
189
+ for (const rawLink of linkInputs ?? []) {
190
+ const parsed = await parseWorkspaceSetupLinkInput(rawLink);
191
+ const resolvedPath = await resolveExistingDirectory(parsed.pathInput);
192
+ const linkName = validateLinkNameForCommand(parsed.name ?? inferLinkName(resolvedPath));
193
+ if (links[linkName]) {
194
+ throw duplicateSetupLinkError(linkName, links[linkName], resolvedPath);
195
+ }
196
+ links[linkName] = resolvedPath;
197
+ }
198
+ return links;
199
+ }
200
+ export async function loadWorkspaceForList(entry) {
201
+ const workspaceStatus = [];
202
+ if (!(await directoryExists(entry.workspaceRoot)) || !(await isWorkspaceRoot(entry.workspaceRoot))) {
203
+ return {
204
+ name: entry.name,
205
+ root: entry.workspaceRoot,
206
+ context: null,
207
+ links: [],
208
+ status: [
209
+ makeStatus('error', 'workspace_root_missing', 'Workspace location does not exist.', {
210
+ target: 'workspace.root',
211
+ fix: 'Remove or repair the local workspace view.',
212
+ }),
213
+ ],
214
+ };
215
+ }
216
+ let viewState;
217
+ try {
218
+ viewState = await readWorkspaceViewState(entry.workspaceRoot);
219
+ }
220
+ catch (error) {
221
+ return {
222
+ name: entry.name,
223
+ root: entry.workspaceRoot,
224
+ context: null,
225
+ links: [],
226
+ status: [
227
+ makeStatus('error', 'workspace_state_invalid', `Workspace state could not be read: ${asErrorMessage(error)}`, {
228
+ target: 'workspace.root',
229
+ fix: 'Repair the workspace state files before using this workspace.',
230
+ }),
231
+ ],
232
+ };
233
+ }
234
+ appendWorkspaceSkillDriftStatus(workspaceStatus, viewState.name, viewState);
235
+ workspaceStatus.push(...(await collectWorkspaceContextStatuses(viewState.context)));
236
+ return {
237
+ name: viewState.name,
238
+ root: entry.workspaceRoot,
239
+ context: workspaceContextToOutput(viewState.context),
240
+ links: normalizeLinksForOutput(viewState),
241
+ status: workspaceStatus,
242
+ };
243
+ }
244
+ export async function loadWorkspaceForDoctor(selected) {
245
+ const commandStatus = [...selected.status];
246
+ const workspaceStatus = [];
247
+ const planningPath = getWorkspaceChangesDir(selected.root);
248
+ if (!(await directoryExists(selected.root)) || !(await isWorkspaceRoot(selected.root))) {
249
+ return {
250
+ workspace: {
251
+ name: selected.name,
252
+ root: selected.root,
253
+ planning_path: planningPath,
254
+ state_path: getWorkspaceViewStatePath(selected.root),
255
+ context: null,
256
+ links: [],
257
+ status: [
258
+ makeStatus('error', 'selected_workspace_root_missing', 'Selected workspace location does not exist or is not a valid workspace.', {
259
+ target: 'workspace.root',
260
+ fix: 'Repair the local workspace view or choose another workspace.',
261
+ }),
262
+ ],
263
+ },
264
+ status: commandStatus,
265
+ };
266
+ }
267
+ let viewState;
268
+ try {
269
+ viewState = await readWorkspaceViewState(selected.root);
270
+ }
271
+ catch (error) {
272
+ return {
273
+ workspace: {
274
+ name: selected.name,
275
+ root: selected.root,
276
+ planning_path: planningPath,
277
+ state_path: getWorkspaceViewStatePath(selected.root),
278
+ context: null,
279
+ links: [],
280
+ status: [
281
+ makeStatus('error', 'workspace_state_invalid', `Workspace state could not be read: ${asErrorMessage(error)}`, {
282
+ target: 'workspace.root',
283
+ fix: 'Repair .pastelsdd-workspace/workspace.yaml before using this workspace.',
284
+ }),
285
+ ],
286
+ },
287
+ status: commandStatus,
288
+ };
289
+ }
290
+ appendWorkspaceSkillDriftStatus(workspaceStatus, viewState.name, viewState);
291
+ workspaceStatus.push(...(await collectWorkspaceContextStatuses(viewState.context)));
292
+ const linkNames = Object.keys(viewState.links).sort((a, b) => a.localeCompare(b));
293
+ const links = [];
294
+ for (const linkName of linkNames) {
295
+ const linkStatus = [];
296
+ const localPath = viewState.links[linkName] ?? null;
297
+ let repoSpecsPath = null;
298
+ if (!localPath) {
299
+ linkStatus.push(makeStatus('error', 'linked_path_missing_from_local_state', 'Shared link does not have a local path on this machine.', {
300
+ target: `links.${linkName}.path`,
301
+ fix: `pastelsdd workspace relink ${linkName} /path/to/${linkName}`,
302
+ }));
303
+ }
304
+ if (localPath) {
305
+ if (await directoryExists(localPath)) {
306
+ const candidateSpecsPath = path.join(localPath, 'pastelsdd', 'specs');
307
+ repoSpecsPath = (await directoryExists(candidateSpecsPath)) ? candidateSpecsPath : null;
308
+ }
309
+ else {
310
+ linkStatus.push(makeStatus('error', 'linked_path_missing', 'Linked path does not exist.', {
311
+ target: `links.${linkName}.path`,
312
+ fix: `pastelsdd workspace relink ${linkName} /path/to/${linkName}`,
313
+ }));
314
+ }
315
+ }
316
+ links.push({
317
+ name: linkName,
318
+ path: localPath,
319
+ repo_specs_path: repoSpecsPath,
320
+ status: linkStatus,
321
+ });
322
+ }
323
+ return {
324
+ workspace: {
325
+ name: viewState.name,
326
+ root: selected.root,
327
+ planning_path: planningPath,
328
+ state_path: getWorkspaceViewStatePath(selected.root),
329
+ context: workspaceContextToOutput(viewState.context),
330
+ links,
331
+ status: workspaceStatus,
332
+ },
333
+ status: commandStatus,
334
+ };
335
+ }
336
+ async function readWorkspaceViewForMutation(selected) {
337
+ if (!(await directoryExists(selected.root)) || !(await isWorkspaceRoot(selected.root))) {
338
+ throw new WorkspaceCliError(`Workspace location does not exist for '${selected.name}': ${selected.root}`, 'selected_workspace_root_missing', {
339
+ target: 'workspace.root',
340
+ fix: 'Run pastelsdd workspace list to inspect known workspaces.',
341
+ });
342
+ }
343
+ try {
344
+ return await readWorkspaceViewState(selected.root);
345
+ }
346
+ catch (error) {
347
+ throw new WorkspaceCliError(`Workspace state could not be read: ${asErrorMessage(error)}`, 'workspace_state_invalid', {
348
+ target: 'workspace.state',
349
+ fix: 'Repair workspace.yaml before using this workspace.',
350
+ });
351
+ }
352
+ }
353
+ export async function readWorkspaceForMutation(selected) {
354
+ return readWorkspaceViewForMutation(selected);
355
+ }
356
+ function buildLinkMutationPayload(selected, viewState, linkName, linkPath) {
357
+ return {
358
+ workspace: {
359
+ name: viewState.name,
360
+ root: selected.root,
361
+ planning_path: getWorkspaceChangesDir(selected.root),
362
+ state_path: getWorkspaceViewStatePath(selected.root),
363
+ context: workspaceContextToOutput(viewState.context),
364
+ links: normalizeLinksForOutput(viewState),
365
+ status: [],
366
+ },
367
+ link: {
368
+ name: linkName,
369
+ path: linkPath,
370
+ status: [],
371
+ },
372
+ status: selected.status,
373
+ };
374
+ }
375
+ export async function addWorkspaceLink(selected, nameOrPath, linkPath) {
376
+ const explicitName = linkPath ? nameOrPath : undefined;
377
+ const pathInput = linkPath ?? nameOrPath;
378
+ const resolvedPath = await resolveExistingDirectory(pathInput);
379
+ const linkName = validateLinkNameForCommand(explicitName ?? inferLinkName(resolvedPath));
380
+ const viewState = await readWorkspaceViewForMutation(selected);
381
+ if (hasWorkspaceLink(viewState.links, linkName)) {
382
+ throw duplicateLinkError(linkName, viewState.links[linkName] ?? null, resolvedPath);
383
+ }
384
+ const updatedViewState = {
385
+ ...viewState,
386
+ links: {
387
+ ...viewState.links,
388
+ [linkName]: resolvedPath,
389
+ },
390
+ };
391
+ await writeWorkspaceViewState(selected.root, updatedViewState);
392
+ await syncWorkspaceOpenSurface(selected.root, updatedViewState);
393
+ return buildLinkMutationPayload(selected, updatedViewState, linkName, resolvedPath);
394
+ }
395
+ export async function updateWorkspaceLink(selected, linkNameInput, linkPath) {
396
+ const linkName = validateLinkNameForCommand(linkNameInput);
397
+ const resolvedPath = await resolveExistingDirectory(linkPath);
398
+ const viewState = await readWorkspaceViewForMutation(selected);
399
+ if (!hasWorkspaceLink(viewState.links, linkName)) {
400
+ throw new WorkspaceCliError(`Unknown workspace link '${linkName}'.`, 'unknown_link_name', {
401
+ target: `links.${linkName}`,
402
+ fix: 'Run pastelsdd workspace doctor to see linked repos or folders.',
403
+ });
404
+ }
405
+ const updatedViewState = {
406
+ ...viewState,
407
+ links: {
408
+ ...viewState.links,
409
+ [linkName]: resolvedPath,
410
+ },
411
+ };
412
+ await writeWorkspaceViewState(selected.root, updatedViewState);
413
+ await syncWorkspaceOpenSurface(selected.root, updatedViewState);
414
+ return buildLinkMutationPayload(selected, updatedViewState, linkName, resolvedPath);
415
+ }
416
+ function sameWorkspaceContext(left, right) {
417
+ return (left !== null &&
418
+ sameContextStoreBinding(left.store, right.store) &&
419
+ getWorkspaceContextInitiativeId(left) === getWorkspaceContextInitiativeId(right));
420
+ }
421
+ function formatWorkspaceContext(context) {
422
+ return context
423
+ ? `${formatContextStoreBinding(context.store)}/${getWorkspaceContextInitiativeId(context)}`
424
+ : 'no initiative context';
425
+ }
426
+ export function deriveWorkspaceNameForInitiative(initiativeId) {
427
+ return validateWorkspaceNameForSetup(initiativeId);
428
+ }
429
+ async function readExistingManagedWorkspaceView(workspaceName) {
430
+ const workspaceRoot = getManagedWorkspaceRoot(workspaceName);
431
+ if (!(await directoryExists(workspaceRoot))) {
432
+ return null;
433
+ }
434
+ if (!(await isWorkspaceRoot(workspaceRoot))) {
435
+ throw new WorkspaceCliError(`Workspace name '${workspaceName}' collides with a non-workspace directory at ${workspaceRoot}.`, 'workspace_name_collision', {
436
+ target: 'workspace.name',
437
+ fix: 'Choose an explicit unused workspace name.',
438
+ });
439
+ }
440
+ return {
441
+ root: workspaceRoot,
442
+ state: await readWorkspaceViewState(workspaceRoot),
443
+ };
444
+ }
445
+ function selectedWorkspaceFromManagedView(root, state) {
446
+ return {
447
+ name: state.name,
448
+ root,
449
+ status: [],
450
+ unregisteredCurrentWorkspace: false,
451
+ };
452
+ }
453
+ export async function selectOrCreateWorkspaceForInitiativeOpen(input) {
454
+ if (input.workspaceName) {
455
+ const workspaceName = validateWorkspaceNameForSetup(input.workspaceName);
456
+ const existing = await readExistingManagedWorkspaceView(workspaceName);
457
+ if (!existing) {
458
+ const workspace = await createManagedWorkspace(workspaceName, {}, input.preferredOpener, input.context);
459
+ return {
460
+ selected: {
461
+ name: workspace.name,
462
+ root: workspace.root,
463
+ status: [],
464
+ unregisteredCurrentWorkspace: false,
465
+ },
466
+ created: true,
467
+ state: await readWorkspaceViewState(workspace.root),
468
+ };
469
+ }
470
+ if (sameWorkspaceContext(existing.state.context, input.context)) {
471
+ return {
472
+ selected: selectedWorkspaceFromManagedView(existing.root, existing.state),
473
+ created: false,
474
+ state: existing.state,
475
+ };
476
+ }
477
+ if (!existing.state.context) {
478
+ throw new WorkspaceCliError(`Workspace '${workspaceName}' is not bound to an initiative.`, 'workspace_context_bind_required', {
479
+ target: 'workspace.context',
480
+ fix: 'Choose a new workspace name for this initiative or use a future workspace rebind/update surface.',
481
+ });
482
+ }
483
+ throw new WorkspaceCliError(`Workspace '${workspaceName}' is already bound to ${formatWorkspaceContext(existing.state.context)}.`, 'workspace_context_conflict', {
484
+ target: 'workspace.context',
485
+ fix: 'Choose a different workspace name or open the initiative already bound to this workspace.',
486
+ });
487
+ }
488
+ const matches = [];
489
+ for (const entry of await listKnownWorkspaceEntries()) {
490
+ try {
491
+ const state = await readWorkspaceViewState(entry.workspaceRoot);
492
+ if (sameWorkspaceContext(state.context, input.context)) {
493
+ matches.push({ root: entry.workspaceRoot, state });
494
+ }
495
+ }
496
+ catch {
497
+ // Broken workspaces are surfaced by list/doctor; initiative open should not
498
+ // guess through unreadable local view records.
499
+ }
500
+ }
501
+ if (matches.length === 1) {
502
+ const [match] = matches;
503
+ return {
504
+ selected: selectedWorkspaceFromManagedView(match.root, match.state),
505
+ created: false,
506
+ state: match.state,
507
+ };
508
+ }
509
+ if (matches.length > 1) {
510
+ const names = matches.map((match) => match.state.name).sort((a, b) => a.localeCompare(b));
511
+ throw new WorkspaceCliError(`Multiple workspaces are already bound to ${formatWorkspaceContext(input.context)}: ${names.join(', ')}.`, 'workspace_initiative_selection_ambiguous', {
512
+ target: 'workspace.name',
513
+ fix: 'Retry with an explicit workspace name.',
514
+ });
515
+ }
516
+ const derivedName = deriveWorkspaceNameForInitiative(getWorkspaceContextInitiativeId(input.context));
517
+ const existingDerived = await readExistingManagedWorkspaceView(derivedName);
518
+ if (existingDerived) {
519
+ if (sameWorkspaceContext(existingDerived.state.context, input.context)) {
520
+ return {
521
+ selected: selectedWorkspaceFromManagedView(existingDerived.root, existingDerived.state),
522
+ created: false,
523
+ state: existingDerived.state,
524
+ };
525
+ }
526
+ throw new WorkspaceCliError(`Default workspace name '${derivedName}' is already used by a workspace with ${formatWorkspaceContext(existingDerived.state.context)}.`, 'workspace_name_collision', {
527
+ target: 'workspace.name',
528
+ fix: `Retry with an explicit workspace name: pastelsdd workspace open <name> --initiative ${getWorkspaceContextStoreId(input.context)}/${getWorkspaceContextInitiativeId(input.context)}`,
529
+ });
530
+ }
531
+ const workspace = await createManagedWorkspace(derivedName, {}, input.preferredOpener, input.context);
532
+ return {
533
+ selected: {
534
+ name: workspace.name,
535
+ root: workspace.root,
536
+ status: [],
537
+ unregisteredCurrentWorkspace: false,
538
+ },
539
+ created: true,
540
+ state: await readWorkspaceViewState(workspace.root),
541
+ };
542
+ }
543
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1,29 @@
1
+ export declare const workspacePromptTheme: {
2
+ prefix: string;
3
+ style: {
4
+ answer: (text: string) => string;
5
+ defaultAnswer: (text: string) => string;
6
+ error: (text: string) => string;
7
+ help: (text: string) => string;
8
+ highlight: (text: string) => string;
9
+ key: (text: string) => string;
10
+ message: (text: string) => string;
11
+ };
12
+ };
13
+ export declare const workspaceSelectTheme: {
14
+ icon: {
15
+ cursor: string;
16
+ };
17
+ style: {
18
+ keysHelpTip: (keys: [key: string, action: string][]) => string;
19
+ answer: (text: string) => string;
20
+ defaultAnswer: (text: string) => string;
21
+ error: (text: string) => string;
22
+ help: (text: string) => string;
23
+ highlight: (text: string) => string;
24
+ key: (text: string) => string;
25
+ message: (text: string) => string;
26
+ };
27
+ prefix: string;
28
+ };
29
+ //# sourceMappingURL=prompt-theme.d.ts.map
@@ -0,0 +1,24 @@
1
+ import chalk from 'chalk';
2
+ export const workspacePromptTheme = {
3
+ prefix: '',
4
+ style: {
5
+ answer: (text) => chalk.cyan(text),
6
+ defaultAnswer: (text) => chalk.dim(text),
7
+ error: (text) => chalk.red(text),
8
+ help: (text) => chalk.dim(text),
9
+ highlight: (text) => chalk.cyan(text),
10
+ key: (text) => chalk.cyan(text),
11
+ message: (text) => chalk.bold(text),
12
+ },
13
+ };
14
+ export const workspaceSelectTheme = {
15
+ ...workspacePromptTheme,
16
+ icon: {
17
+ cursor: chalk.cyan('>'),
18
+ },
19
+ style: {
20
+ ...workspacePromptTheme.style,
21
+ keysHelpTip: (keys) => chalk.dim(keys.map(([key, action]) => `${key}: ${action}`).join(' | ')),
22
+ },
23
+ };
24
+ //# sourceMappingURL=prompt-theme.js.map
@@ -0,0 +1,13 @@
1
+ import { Command } from 'commander';
2
+ import { WorkspaceLinkOptions, WorkspaceListOptions, WorkspaceOpenOptions, WorkspaceSetupOptions, WorkspaceUpdateOptions } from './types.js';
3
+ export interface WorkspaceCommandActions {
4
+ setup(options: WorkspaceSetupOptions): Promise<void>;
5
+ list(options: WorkspaceListOptions): Promise<void>;
6
+ link(nameOrPath: string | undefined, linkPath: string | undefined, options: WorkspaceLinkOptions): Promise<void>;
7
+ relink(linkNameInput: string | undefined, linkPath: string | undefined, options: WorkspaceLinkOptions): Promise<void>;
8
+ doctor(options: WorkspaceLinkOptions): Promise<void>;
9
+ update(positionalName: string | undefined, options: WorkspaceUpdateOptions): Promise<void>;
10
+ open(positionalName: string | undefined, options: WorkspaceOpenOptions): Promise<void>;
11
+ }
12
+ export declare function registerWorkspaceCommandWith(program: Command, workspaceCommand: WorkspaceCommandActions): void;
13
+ //# sourceMappingURL=registration.d.ts.map