@blxzer/cursor-trellis 0.4.2 → 0.4.3

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 (315) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +23 -14
  3. package/README.zh-CN.md +14 -10
  4. package/bin/smart-search.js +10 -2
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +36 -15
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/commands/init.d.ts +1 -1
  9. package/dist/commands/init.d.ts.map +1 -1
  10. package/dist/commands/init.js +42 -153
  11. package/dist/commands/init.js.map +1 -1
  12. package/dist/commands/migrate.d.ts +10 -0
  13. package/dist/commands/migrate.d.ts.map +1 -0
  14. package/dist/commands/migrate.js +38 -0
  15. package/dist/commands/migrate.js.map +1 -0
  16. package/dist/commands/update.d.ts +5 -0
  17. package/dist/commands/update.d.ts.map +1 -1
  18. package/dist/commands/update.js +137 -40
  19. package/dist/commands/update.js.map +1 -1
  20. package/dist/configurators/cursor.d.ts +2 -1
  21. package/dist/configurators/cursor.d.ts.map +1 -1
  22. package/dist/configurators/cursor.js +4 -2
  23. package/dist/configurators/cursor.js.map +1 -1
  24. package/dist/configurators/index.js +4 -4
  25. package/dist/configurators/index.js.map +1 -1
  26. package/dist/configurators/shared.d.ts +8 -0
  27. package/dist/configurators/shared.d.ts.map +1 -1
  28. package/dist/configurators/shared.js +27 -1
  29. package/dist/configurators/shared.js.map +1 -1
  30. package/dist/configurators/workflow.d.ts +0 -9
  31. package/dist/configurators/workflow.d.ts.map +1 -1
  32. package/dist/configurators/workflow.js +2 -4
  33. package/dist/configurators/workflow.js.map +1 -1
  34. package/dist/constants/paths.d.ts +9 -0
  35. package/dist/constants/paths.d.ts.map +1 -1
  36. package/dist/constants/paths.js +13 -0
  37. package/dist/constants/paths.js.map +1 -1
  38. package/dist/migrations/manifests/0.3.0.json +1 -1
  39. package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/skills-and-commands.md +2 -4
  40. package/dist/templates/common/bundled-skills/cstl-skill-creator/SKILL.md +10 -7
  41. package/dist/templates/common/bundled-skills/cstl-skill-creator/references/authoring-rules.md +93 -19
  42. package/dist/templates/common/bundled-skills/cstl-skill-creator/references/general-authoring.md +189 -0
  43. package/dist/templates/common/bundled-skills/cstl-skill-creator/references/review-checklist.md +10 -5
  44. package/dist/templates/common/commands/continue.md +5 -4
  45. package/dist/templates/common/index.d.ts +20 -0
  46. package/dist/templates/common/index.d.ts.map +1 -1
  47. package/dist/templates/common/index.js +21 -2
  48. package/dist/templates/common/index.js.map +1 -1
  49. package/dist/templates/common/optional-skills/chrome-cdp/SKILL.md +179 -0
  50. package/dist/templates/common/optional-skills/chrome-cdp/examples/fetch-hook-api-capture.md +149 -0
  51. package/dist/templates/common/optional-skills/chrome-cdp/scripts/cdp.mjs +903 -0
  52. package/dist/templates/cursor/agents/cstl-research.md +1 -1
  53. package/dist/templates/cursor/fixtures/expected-rules.d.ts +1 -1
  54. package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +1 -1
  55. package/dist/templates/cursor/fixtures/expected-rules.js +7 -24
  56. package/dist/templates/cursor/fixtures/expected-rules.js.map +1 -1
  57. package/dist/templates/cursor/hooks.json +4 -0
  58. package/dist/templates/cursor/index.d.ts +1 -1
  59. package/dist/templates/cursor/index.js +1 -1
  60. package/dist/templates/cursor/rules/cstl-bootstrap.mdc +17 -0
  61. package/dist/templates/markdown/agents.md +15 -10
  62. package/dist/templates/markdown/framework/cursor-native-modes-guide.md.txt +12 -9
  63. package/dist/templates/markdown/framework/cursor-subagent-policy.md.txt +62 -126
  64. package/dist/templates/markdown/framework/dogfood-only-surfaces.md.txt +4 -6
  65. package/dist/templates/markdown/framework/execution-strategy.md.txt +2 -0
  66. package/dist/templates/markdown/framework/index.md.txt +4 -0
  67. package/dist/templates/markdown/framework/internal-skills-cursor-reachability.md.txt +4 -3
  68. package/dist/templates/markdown/framework/middleware-protocol.md.txt +83 -0
  69. package/dist/templates/markdown/framework/parallel-first-execution.md.txt +78 -0
  70. package/dist/templates/markdown/framework/release-boundary.md.txt +30 -0
  71. package/dist/templates/markdown/framework/retrieval-daily-guide.md.txt +1 -1
  72. package/dist/templates/markdown/framework/upgrade.md.txt +15 -0
  73. package/dist/templates/markdown/index.d.ts +4 -0
  74. package/dist/templates/markdown/index.d.ts.map +1 -1
  75. package/dist/templates/markdown/index.js +17 -0
  76. package/dist/templates/markdown/index.js.map +1 -1
  77. package/dist/templates/markdown/spec/guides/index.md.txt +0 -6
  78. package/dist/templates/shared-hooks/event-bridge.py +60 -0
  79. package/dist/templates/shared-hooks/index.d.ts +1 -1
  80. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  81. package/dist/templates/shared-hooks/index.js +1 -0
  82. package/dist/templates/shared-hooks/index.js.map +1 -1
  83. package/dist/templates/shared-hooks/session-start.py +18 -1
  84. package/dist/templates/trellis/CONTEXT.md +63 -3
  85. package/dist/templates/trellis/gitignore.txt +39 -39
  86. package/dist/templates/trellis/index.d.ts +12 -0
  87. package/dist/templates/trellis/index.d.ts.map +1 -1
  88. package/dist/templates/trellis/index.js +73 -15
  89. package/dist/templates/trellis/index.js.map +1 -1
  90. package/dist/templates/trellis/pool/README.md +12 -3
  91. package/dist/templates/trellis/pool/plan.md +24 -5
  92. package/dist/templates/trellis/scripts/common/adapter_middleware.py +158 -0
  93. package/dist/templates/trellis/scripts/common/artifact_locale.py +12 -3
  94. package/dist/templates/trellis/scripts/common/cursor_retrieval_env.py +5 -2
  95. package/dist/templates/trellis/scripts/common/full_quality.py +237 -0
  96. package/dist/templates/trellis/scripts/common/git.py +6 -0
  97. package/dist/templates/trellis/scripts/common/git_context.py +17 -5
  98. package/dist/templates/trellis/scripts/common/kernel_command.py +367 -0
  99. package/dist/templates/trellis/scripts/common/lite_context.py +280 -0
  100. package/dist/templates/trellis/scripts/common/ondemand_topology.py +225 -0
  101. package/dist/templates/trellis/scripts/common/parent_orchestration.py +1 -1
  102. package/dist/templates/trellis/scripts/common/pool_store.py +16 -4
  103. package/dist/templates/trellis/scripts/common/retrieval_agent_instructions.py +2 -2
  104. package/dist/templates/trellis/scripts/common/session_context.py +28 -2
  105. package/dist/templates/trellis/scripts/common/task_gates.py +73 -12
  106. package/dist/templates/trellis/scripts/common/task_map.py +42 -9
  107. package/dist/templates/trellis/scripts/common/task_store.py +286 -56
  108. package/dist/templates/trellis/scripts/common/test_adapter_middleware.py +56 -0
  109. package/dist/templates/trellis/scripts/common/test_depends_mode_block.py +9 -0
  110. package/dist/templates/trellis/scripts/common/test_full_quality.py +197 -0
  111. package/dist/templates/trellis/scripts/common/test_kernel_command.py +326 -0
  112. package/dist/templates/trellis/scripts/common/test_lite_path.py +190 -0
  113. package/dist/templates/trellis/scripts/common/test_ondemand_topology.py +122 -0
  114. package/dist/templates/trellis/scripts/common/test_pool_store.py +17 -0
  115. package/dist/templates/trellis/scripts/common/test_task_store_kernel_patch.py +163 -0
  116. package/dist/templates/trellis/scripts/common/workflow_phase.py +3 -0
  117. package/dist/templates/trellis/scripts/get_context.py +1 -0
  118. package/dist/templates/trellis/scripts/pool.py +5 -0
  119. package/dist/templates/trellis/scripts/task.py +83 -7
  120. package/dist/templates/trellis/workflow.md +100 -18
  121. package/dist/utils/cursor-retrieval-env.d.ts +2 -1
  122. package/dist/utils/cursor-retrieval-env.d.ts.map +1 -1
  123. package/dist/utils/cursor-retrieval-env.js +3 -2
  124. package/dist/utils/cursor-retrieval-env.js.map +1 -1
  125. package/dist/utils/cursor2plus-residue-cleanup.d.ts +38 -0
  126. package/dist/utils/cursor2plus-residue-cleanup.d.ts.map +1 -0
  127. package/dist/utils/cursor2plus-residue-cleanup.js +145 -0
  128. package/dist/utils/cursor2plus-residue-cleanup.js.map +1 -0
  129. package/dist/utils/manifest-prune.d.ts.map +1 -1
  130. package/dist/utils/manifest-prune.js +7 -2
  131. package/dist/utils/manifest-prune.js.map +1 -1
  132. package/dist/utils/p36-upgrade.d.ts +62 -0
  133. package/dist/utils/p36-upgrade.d.ts.map +1 -0
  134. package/dist/utils/p36-upgrade.js +160 -0
  135. package/dist/utils/p36-upgrade.js.map +1 -0
  136. package/dist/utils/project-capabilities.d.ts +1 -12
  137. package/dist/utils/project-capabilities.d.ts.map +1 -1
  138. package/dist/utils/project-capabilities.js +3 -100
  139. package/dist/utils/project-capabilities.js.map +1 -1
  140. package/dist/utils/readiness.d.ts +10 -0
  141. package/dist/utils/readiness.d.ts.map +1 -1
  142. package/dist/utils/readiness.js +58 -26
  143. package/dist/utils/readiness.js.map +1 -1
  144. package/dist/utils/retrieval-agent-instructions.js +1 -1
  145. package/dist/utils/retrieval-agent-instructions.js.map +1 -1
  146. package/dist/utils/template-hash.d.ts.map +1 -1
  147. package/dist/utils/template-hash.js +11 -1
  148. package/dist/utils/template-hash.js.map +1 -1
  149. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  150. package/dist/utils/uninstall-scrubbers.js +52 -14
  151. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  152. package/dist/utils/update-rollout-report.d.ts +14 -0
  153. package/dist/utils/update-rollout-report.d.ts.map +1 -1
  154. package/dist/utils/update-rollout-report.js +1 -0
  155. package/dist/utils/update-rollout-report.js.map +1 -1
  156. package/dist/utils/workflow-ownership.d.ts +1 -1
  157. package/dist/utils/workflow-ownership.js +4 -4
  158. package/dist/utils/workflow-ownership.js.map +1 -1
  159. package/package.json +5 -4
  160. package/scripts/postinstall.js +6 -7
  161. package/dist/commands/campaign/canvas-render.d.ts +0 -68
  162. package/dist/commands/campaign/canvas-render.d.ts.map +0 -1
  163. package/dist/commands/campaign/canvas-render.js +0 -414
  164. package/dist/commands/campaign/canvas-render.js.map +0 -1
  165. package/dist/commands/campaign/compose.d.ts +0 -15
  166. package/dist/commands/campaign/compose.d.ts.map +0 -1
  167. package/dist/commands/campaign/compose.js +0 -110
  168. package/dist/commands/campaign/compose.js.map +0 -1
  169. package/dist/commands/campaign/index.d.ts +0 -13
  170. package/dist/commands/campaign/index.d.ts.map +0 -1
  171. package/dist/commands/campaign/index.js +0 -134
  172. package/dist/commands/campaign/index.js.map +0 -1
  173. package/dist/commands/campaign/kind-map.d.ts +0 -6
  174. package/dist/commands/campaign/kind-map.d.ts.map +0 -1
  175. package/dist/commands/campaign/kind-map.js +0 -21
  176. package/dist/commands/campaign/kind-map.js.map +0 -1
  177. package/dist/commands/campaign/mcp-server.d.ts +0 -6
  178. package/dist/commands/campaign/mcp-server.d.ts.map +0 -1
  179. package/dist/commands/campaign/mcp-server.js +0 -167
  180. package/dist/commands/campaign/mcp-server.js.map +0 -1
  181. package/dist/commands/campaign/render.d.ts +0 -5
  182. package/dist/commands/campaign/render.d.ts.map +0 -1
  183. package/dist/commands/campaign/render.js +0 -103
  184. package/dist/commands/campaign/render.js.map +0 -1
  185. package/dist/commands/campaign/trellis-load.d.ts +0 -13
  186. package/dist/commands/campaign/trellis-load.d.ts.map +0 -1
  187. package/dist/commands/campaign/trellis-load.js +0 -122
  188. package/dist/commands/campaign/trellis-load.js.map +0 -1
  189. package/dist/commands/campaign/types.d.ts +0 -61
  190. package/dist/commands/campaign/types.d.ts.map +0 -1
  191. package/dist/commands/campaign/types.js +0 -3
  192. package/dist/commands/campaign/types.js.map +0 -1
  193. package/dist/commands/goal/index.d.ts +0 -3
  194. package/dist/commands/goal/index.d.ts.map +0 -1
  195. package/dist/commands/goal/index.js +0 -159
  196. package/dist/commands/goal/index.js.map +0 -1
  197. package/dist/commands/goal/review.d.ts +0 -6
  198. package/dist/commands/goal/review.d.ts.map +0 -1
  199. package/dist/commands/goal/review.js +0 -28
  200. package/dist/commands/goal/review.js.map +0 -1
  201. package/dist/commands/rpc/client.d.ts +0 -51
  202. package/dist/commands/rpc/client.d.ts.map +0 -1
  203. package/dist/commands/rpc/client.js +0 -147
  204. package/dist/commands/rpc/client.js.map +0 -1
  205. package/dist/commands/rpc/index.d.ts +0 -10
  206. package/dist/commands/rpc/index.d.ts.map +0 -1
  207. package/dist/commands/rpc/index.js +0 -157
  208. package/dist/commands/rpc/index.js.map +0 -1
  209. package/dist/commands/rpc/serve.d.ts +0 -23
  210. package/dist/commands/rpc/serve.d.ts.map +0 -1
  211. package/dist/commands/rpc/serve.js +0 -60
  212. package/dist/commands/rpc/serve.js.map +0 -1
  213. package/dist/commands/rpc/smoke.d.ts +0 -16
  214. package/dist/commands/rpc/smoke.d.ts.map +0 -1
  215. package/dist/commands/rpc/smoke.js +0 -92
  216. package/dist/commands/rpc/smoke.js.map +0 -1
  217. package/dist/commands/sdk/index.d.ts +0 -9
  218. package/dist/commands/sdk/index.d.ts.map +0 -1
  219. package/dist/commands/sdk/index.js +0 -58
  220. package/dist/commands/sdk/index.js.map +0 -1
  221. package/dist/commands/sdk/run.d.ts +0 -42
  222. package/dist/commands/sdk/run.d.ts.map +0 -1
  223. package/dist/commands/sdk/run.js +0 -220
  224. package/dist/commands/sdk/run.js.map +0 -1
  225. package/dist/commands/sdk/status.d.ts +0 -14
  226. package/dist/commands/sdk/status.d.ts.map +0 -1
  227. package/dist/commands/sdk/status.js +0 -69
  228. package/dist/commands/sdk/status.js.map +0 -1
  229. package/dist/configurators/cursor2plus-local.d.ts +0 -6
  230. package/dist/configurators/cursor2plus-local.d.ts.map +0 -1
  231. package/dist/configurators/cursor2plus-local.js +0 -21
  232. package/dist/configurators/cursor2plus-local.js.map +0 -1
  233. package/dist/goal/action-packet.d.ts +0 -89
  234. package/dist/goal/action-packet.d.ts.map +0 -1
  235. package/dist/goal/action-packet.js +0 -113
  236. package/dist/goal/action-packet.js.map +0 -1
  237. package/dist/goal/audit.d.ts +0 -14
  238. package/dist/goal/audit.d.ts.map +0 -1
  239. package/dist/goal/audit.js +0 -12
  240. package/dist/goal/audit.js.map +0 -1
  241. package/dist/goal/constants.d.ts +0 -26
  242. package/dist/goal/constants.d.ts.map +0 -1
  243. package/dist/goal/constants.js +0 -24
  244. package/dist/goal/constants.js.map +0 -1
  245. package/dist/goal/paths.d.ts +0 -8
  246. package/dist/goal/paths.d.ts.map +0 -1
  247. package/dist/goal/paths.js +0 -36
  248. package/dist/goal/paths.js.map +0 -1
  249. package/dist/goal/preflight.d.ts +0 -21
  250. package/dist/goal/preflight.d.ts.map +0 -1
  251. package/dist/goal/preflight.js +0 -97
  252. package/dist/goal/preflight.js.map +0 -1
  253. package/dist/goal/review-seam.d.ts +0 -44
  254. package/dist/goal/review-seam.d.ts.map +0 -1
  255. package/dist/goal/review-seam.js +0 -153
  256. package/dist/goal/review-seam.js.map +0 -1
  257. package/dist/goal/reviewer-rules.d.ts +0 -13
  258. package/dist/goal/reviewer-rules.d.ts.map +0 -1
  259. package/dist/goal/reviewer-rules.js +0 -153
  260. package/dist/goal/reviewer-rules.js.map +0 -1
  261. package/dist/goal/reviewer.d.ts +0 -9
  262. package/dist/goal/reviewer.d.ts.map +0 -1
  263. package/dist/goal/reviewer.js +0 -54
  264. package/dist/goal/reviewer.js.map +0 -1
  265. package/dist/goal/runtime.d.ts +0 -32
  266. package/dist/goal/runtime.d.ts.map +0 -1
  267. package/dist/goal/runtime.js +0 -242
  268. package/dist/goal/runtime.js.map +0 -1
  269. package/dist/goal/sdk-client.d.ts +0 -10
  270. package/dist/goal/sdk-client.d.ts.map +0 -1
  271. package/dist/goal/sdk-client.js +0 -34
  272. package/dist/goal/sdk-client.js.map +0 -1
  273. package/dist/goal/state.d.ts +0 -40
  274. package/dist/goal/state.d.ts.map +0 -1
  275. package/dist/goal/state.js +0 -37
  276. package/dist/goal/state.js.map +0 -1
  277. package/dist/goal/task-triggers.d.ts +0 -15
  278. package/dist/goal/task-triggers.d.ts.map +0 -1
  279. package/dist/goal/task-triggers.js +0 -23
  280. package/dist/goal/task-triggers.js.map +0 -1
  281. package/dist/goal/walls.d.ts +0 -12
  282. package/dist/goal/walls.d.ts.map +0 -1
  283. package/dist/goal/walls.js +0 -65
  284. package/dist/goal/walls.js.map +0 -1
  285. package/dist/goal/worker-prompt.d.ts +0 -13
  286. package/dist/goal/worker-prompt.d.ts.map +0 -1
  287. package/dist/goal/worker-prompt.js +0 -41
  288. package/dist/goal/worker-prompt.js.map +0 -1
  289. package/dist/goal/worker.d.ts +0 -42
  290. package/dist/goal/worker.d.ts.map +0 -1
  291. package/dist/goal/worker.js +0 -180
  292. package/dist/goal/worker.js.map +0 -1
  293. package/dist/templates/common/bundled-skills/cstl-cursor2plus-setup/SKILL.md +0 -63
  294. package/dist/templates/cursor/commands/cursor2plus-setup.md +0 -82
  295. package/dist/templates/cursor/rules/cstl-cursor-modes.mdc +0 -32
  296. package/dist/templates/cursor/rules/cstl-session-rename.mdc +0 -31
  297. package/dist/templates/cursor/rules/cstl-subagent-dispatch.mdc +0 -34
  298. package/dist/templates/cursor/rules/cstl-triage.mdc +0 -36
  299. package/dist/templates/cursor/rules/retrieval-routing.mdc +0 -78
  300. package/dist/templates/trellis/local/README.md +0 -85
  301. package/dist/templates/trellis/local/config.local.json.example +0 -6
  302. package/dist/templates/trellis/local/index.d.ts +0 -8
  303. package/dist/templates/trellis/local/index.d.ts.map +0 -1
  304. package/dist/templates/trellis/local/index.js +0 -15
  305. package/dist/templates/trellis/local/index.js.map +0 -1
  306. package/dist/templates/trellis/local/patch_wpelc8.py +0 -421
  307. package/dist/templates/trellis/local/smoke.py +0 -94
  308. package/dist/templates/trellis/local/subagent-models.json.example +0 -4
  309. package/dist/templates/trellis/local/trellis-task-models.json.example +0 -10
  310. package/dist/templates/trellis/local/trellis-task-models.json5.example +0 -45
  311. package/dist/templates/trellis/local/trellis_task_models_config.py +0 -200
  312. package/dist/utils/cursor-sdk-gate.d.ts +0 -10
  313. package/dist/utils/cursor-sdk-gate.d.ts.map +0 -1
  314. package/dist/utils/cursor-sdk-gate.js +0 -32
  315. package/dist/utils/cursor-sdk-gate.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-ownership.js","sourceRoot":"","sources":["../../src/utils/workflow-ownership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-ownership.js","sourceRoot":"","sources":["../../src/utils/workflow-ownership.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blxzer/cursor-trellis",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "AI capabilities grow like ivy — Trellis provides the structure to guide them along a disciplined path",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -27,8 +27,6 @@
27
27
  "author": "Mindfold LLC",
28
28
  "license": "AGPL-3.0-only",
29
29
  "dependencies": {
30
- "@blxzer/smart-search": "^0.2.0",
31
- "@cursor/sdk": "^1.0.26",
32
30
  "chalk": "^5.3.0",
33
31
  "commander": "^12.1.0",
34
32
  "figlet": "^1.9.4",
@@ -36,7 +34,10 @@
36
34
  "inquirer": "^9.3.7",
37
35
  "undici": "^6.21.0",
38
36
  "zod": "^4.4.2",
39
- "@blxzer/cursor-trellis-core": "0.4.2"
37
+ "@blxzer/cursor-trellis-core": "0.4.3"
38
+ },
39
+ "optionalDependencies": {
40
+ "@blxzer/smart-search": "^0.2.0"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@eslint/js": "^9.18.0",
@@ -1,7 +1,6 @@
1
- #!/usr/bin/env node
2
-
3
- // smart-search is now a dependency (@blxzer/smart-search)
4
- // and handles its own postinstall setup.
5
- // This script is kept for backward compatibility but does nothing.
6
-
7
- process.exit(0);
1
+ #!/usr/bin/env node
2
+
3
+ // smart-search is an optional independent Middleware Provider.
4
+ // Missing package must not fail CSTL install. This script stays a no-op.
5
+
6
+ process.exit(0);
@@ -1,68 +0,0 @@
1
- import type { CampaignStatusSnapshot } from "./types.js";
2
- /**
3
- * Cursor project slug for `~/.cursor/projects/<slug>/`.
4
- * Example: `D:\\MyHarness` → `d-MyHarness`.
5
- */
6
- export declare function cursorProjectSlug(absPath: string): string;
7
- /**
8
- * Resolve the Cursor canvases directory for a harness root.
9
- * When harness is known, always returns `~/.cursor/projects/<slug>/canvases`
10
- * (directory need not exist yet — callers mkdir on write).
11
- * Returns null only when neither env override nor harness root is available.
12
- */
13
- export declare function resolveCanvasesDir(harnessRoot: string | null): string | null;
14
- /**
15
- * Soft-match `~/.cursor/projects/<name>/canvases` when the exact slug folder
16
- * is missing or differently cased / hyphenated.
17
- * Does **not** pick longer nested names (e.g. `d-MyHarness-Trellis` for harness
18
- * `D:\\MyHarness`) — those would steal writes from the canonical slug mkdir path.
19
- * Skips pure-numeric agent project ids.
20
- */
21
- export declare function softMatchCanvasesDir(projectsRoot: string, slug: string, _harnessRoot: string): string | null;
22
- /** True when `absPath` is under `canvasDir` (Windows case-insensitive). */
23
- export declare function isUnderCanvasDir(absPath: string, canvasDir: string | null): boolean;
24
- /**
25
- * Heuristic: path sits under `~/.cursor/projects/<any>/canvases/` even when
26
- * `resolveCanvasesDir` returned null (no harness / no env).
27
- */
28
- export declare function looksLikeCursorCanvasesPath(absPath: string): boolean;
29
- export type CanvasWriteEvaluation = {
30
- underCanvasDir: boolean;
31
- usedWorkspaceFallback: boolean;
32
- warnings: string[];
33
- hints: string[];
34
- };
35
- /**
36
- * Evaluate write destination for warnings/hints after `campaign canvas` succeeds.
37
- * Does not change exit code; callers print warnings on stderr.
38
- */
39
- export declare function evaluateCanvasWritePath(absOut: string, canvasDir: string | null, opts?: {
40
- usedWorkspaceFallback?: boolean;
41
- }): CanvasWriteEvaluation;
42
- export type CanvasOpenAttempt = {
43
- attempted: boolean;
44
- ok: boolean;
45
- detail: string;
46
- };
47
- /**
48
- * Best-effort open of a `.canvas.tsx` via the Cursor CLI (`cursor` / `CURSOR_BIN`).
49
- * Does not guarantee Canvas view (IDE may open as text); callers still print hints.
50
- */
51
- export declare function resolveCursorCliBin(): string | null;
52
- export declare function tryOpenCanvasFile(absPath: string): CanvasOpenAttempt;
53
- export declare function shouldAutoOpenCanvas(opts?: {
54
- open?: boolean;
55
- noOpen?: boolean;
56
- quiet?: boolean;
57
- }): boolean;
58
- export declare function resolveHarnessForCanvas(parentDir: string): string | null;
59
- export declare function defaultCanvasPath(snapshot: CampaignStatusSnapshot, parentDir: string): string;
60
- /** Whether `defaultCanvasPath` would use the workspace fallback for this parent. */
61
- export declare function defaultCanvasUsesWorkspaceFallback(parentDir: string): boolean;
62
- /**
63
- * Render a single-file Cursor Canvas (`.canvas.tsx`) with embedded snapshot.
64
- * Imports only `cursor/canvas`; no fetch / network.
65
- */
66
- export declare function renderCampaignCanvasTsx(snapshot: CampaignStatusSnapshot): string;
67
- export declare function writeCampaignCanvas(snapshot: CampaignStatusSnapshot, outPath: string): string;
68
- //# sourceMappingURL=canvas-render.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canvas-render.d.ts","sourceRoot":"","sources":["../../../src/commands/campaign/canvas-render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CA2B5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CA2Bf;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAWT;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGpE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAUF;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,CAAC,EAAE;IAAE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAAE,GACzC,qBAAqB,CAyBvB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAiBnD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAqCpE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAUV;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,MAAM,GAChB,MAAM,CAUR;AAED,oFAAoF;AACpF,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAG7E;AAOD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,sBAAsB,GAC/B,MAAM,CAwKR;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE,MAAM,GACd,MAAM,CAKR"}
@@ -1,414 +0,0 @@
1
- import { execFileSync, spawn } from "node:child_process";
2
- import fs from "node:fs";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { findHarnessRoot } from "./trellis-load.js";
6
- /**
7
- * Cursor project slug for `~/.cursor/projects/<slug>/`.
8
- * Example: `D:\\MyHarness` → `d-MyHarness`.
9
- */
10
- export function cursorProjectSlug(absPath) {
11
- const normalized = path.resolve(absPath).replace(/\\/g, "/");
12
- const win = normalized.match(/^([A-Za-z]):\/(.*)$/);
13
- if (win) {
14
- const drive = win[1].toLowerCase();
15
- const rest = win[2].replace(/\/+/g, "-").replace(/^-|-$/g, "");
16
- return rest ? `${drive}-${rest}` : drive;
17
- }
18
- return normalized.replace(/^\//, "").replace(/\/+/g, "-");
19
- }
20
- /**
21
- * Resolve the Cursor canvases directory for a harness root.
22
- * When harness is known, always returns `~/.cursor/projects/<slug>/canvases`
23
- * (directory need not exist yet — callers mkdir on write).
24
- * Returns null only when neither env override nor harness root is available.
25
- */
26
- export function resolveCanvasesDir(harnessRoot) {
27
- const fromEnv = process.env.TRELLIS_CAMPAIGN_CANVAS_DIR?.trim() ||
28
- process.env.CURSOR_CANVAS_DIR?.trim();
29
- if (fromEnv)
30
- return path.resolve(fromEnv);
31
- if (!harnessRoot)
32
- return null;
33
- const slug = process.env.TRELLIS_CURSOR_PROJECT_SLUG?.trim() ||
34
- cursorProjectSlug(harnessRoot);
35
- const candidate = path.join(os.homedir(), ".cursor", "projects", slug, "canvases");
36
- if (fs.existsSync(candidate))
37
- return candidate;
38
- // Soft match unusual project folder names; if projects root is missing, still
39
- // return the candidate so write can mkdir.
40
- const projectsRoot = path.join(os.homedir(), ".cursor", "projects");
41
- if (fs.existsSync(projectsRoot)) {
42
- const soft = softMatchCanvasesDir(projectsRoot, slug, harnessRoot);
43
- if (soft)
44
- return soft;
45
- }
46
- return candidate;
47
- }
48
- /**
49
- * Soft-match `~/.cursor/projects/<name>/canvases` when the exact slug folder
50
- * is missing or differently cased / hyphenated.
51
- * Does **not** pick longer nested names (e.g. `d-MyHarness-Trellis` for harness
52
- * `D:\\MyHarness`) — those would steal writes from the canonical slug mkdir path.
53
- * Skips pure-numeric agent project ids.
54
- */
55
- export function softMatchCanvasesDir(projectsRoot, slug, _harnessRoot) {
56
- let entries;
57
- try {
58
- entries = fs.readdirSync(projectsRoot, { withFileTypes: true });
59
- }
60
- catch {
61
- return null;
62
- }
63
- const dirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);
64
- const slugLower = slug.toLowerCase();
65
- const slugNorm = slugLower.replace(/_/g, "-");
66
- const exact = dirs.find((n) => n.toLowerCase() === slugLower);
67
- if (exact) {
68
- return path.join(projectsRoot, exact, "canvases");
69
- }
70
- // Same path slug with `_` vs `-` (or mixed), not a longer nested project name.
71
- const normalized = dirs.find((n) => {
72
- const lower = n.toLowerCase();
73
- if (/^\d+$/.test(lower))
74
- return false;
75
- return lower.replace(/_/g, "-") === slugNorm;
76
- });
77
- if (normalized) {
78
- return path.join(projectsRoot, normalized, "canvases");
79
- }
80
- return null;
81
- }
82
- /** True when `absPath` is under `canvasDir` (Windows case-insensitive). */
83
- export function isUnderCanvasDir(absPath, canvasDir) {
84
- if (!canvasDir)
85
- return false;
86
- const file = path.resolve(absPath);
87
- const root = path.resolve(canvasDir);
88
- if (process.platform === "win32") {
89
- const f = file.toLowerCase();
90
- const r = root.toLowerCase().replace(/[/\\]+$/, "");
91
- return f.startsWith(`${r}\\`) || f.startsWith(`${r}/`);
92
- }
93
- const rel = path.relative(root, file);
94
- return rel !== "" && !rel.startsWith("..") && !path.isAbsolute(rel);
95
- }
96
- /**
97
- * Heuristic: path sits under `~/.cursor/projects/<any>/canvases/` even when
98
- * `resolveCanvasesDir` returned null (no harness / no env).
99
- */
100
- export function looksLikeCursorCanvasesPath(absPath) {
101
- const normalized = path.resolve(absPath).replace(/\\/g, "/").toLowerCase();
102
- return /\/\.cursor\/projects\/[^/]+\/canvases\//.test(`${normalized}/`);
103
- }
104
- const OPEN_HINT = "Open this file in Cursor Canvas view (not a normal text editor). " +
105
- "Cursor only renders .canvas.tsx under ~/.cursor/projects/<slug>/canvases/ " +
106
- "(or TRELLIS_CAMPAIGN_CANVAS_DIR / CURSOR_CANVAS_DIR). " +
107
- "Opening outside that folder in a normal editor shows source only — no graphics. " +
108
- "By default the CLI also opens this file via the Cursor shell command. " +
109
- "Use --no-open to skip, --quiet for scripts (no hints, no open).";
110
- /**
111
- * Evaluate write destination for warnings/hints after `campaign canvas` succeeds.
112
- * Does not change exit code; callers print warnings on stderr.
113
- */
114
- export function evaluateCanvasWritePath(absOut, canvasDir, opts) {
115
- const underCanvasDir = isUnderCanvasDir(absOut, canvasDir) || looksLikeCursorCanvasesPath(absOut);
116
- const usedWorkspaceFallback = opts?.usedWorkspaceFallback === true;
117
- const warnings = [];
118
- if (!underCanvasDir) {
119
- warnings.push("⚠ Warning: output is outside the Cursor canvases directory" +
120
- (canvasDir ? ` (${canvasDir})` : "") +
121
- ". Opening this path in a normal editor shows TypeScript source only — no Canvas UI.");
122
- }
123
- if (usedWorkspaceFallback) {
124
- warnings.push("⚠ Warning: fell back to .cstl/workspace/campaign-status/ because no harness root " +
125
- "and no TRELLIS_CAMPAIGN_CANVAS_DIR / CURSOR_CANVAS_DIR were available. " +
126
- "Prefer the default path under ~/.cursor/projects/<slug>/canvases/.");
127
- }
128
- return {
129
- underCanvasDir,
130
- usedWorkspaceFallback,
131
- warnings,
132
- hints: [OPEN_HINT],
133
- };
134
- }
135
- /**
136
- * Best-effort open of a `.canvas.tsx` via the Cursor CLI (`cursor` / `CURSOR_BIN`).
137
- * Does not guarantee Canvas view (IDE may open as text); callers still print hints.
138
- */
139
- export function resolveCursorCliBin() {
140
- const fromEnv = process.env.CURSOR_BIN?.trim();
141
- if (fromEnv)
142
- return fromEnv;
143
- try {
144
- const finder = process.platform === "win32" ? "where.exe" : "which";
145
- const out = execFileSync(finder, ["cursor"], {
146
- encoding: "utf8",
147
- windowsHide: true,
148
- });
149
- const first = out
150
- .split(/\r?\n/)
151
- .map((s) => s.trim())
152
- .find(Boolean);
153
- return first ?? null;
154
- }
155
- catch {
156
- return null;
157
- }
158
- }
159
- export function tryOpenCanvasFile(absPath) {
160
- const abs = path.resolve(absPath);
161
- const bin = resolveCursorCliBin();
162
- if (!bin) {
163
- return {
164
- attempted: true,
165
- ok: false,
166
- detail: "Cursor CLI not found on PATH (set CURSOR_BIN or install the `cursor` shell command)",
167
- };
168
- }
169
- try {
170
- // Prefer argv form without shell when bin is an absolute .exe/.cmd path.
171
- const useShell = process.platform === "win32" &&
172
- !path.isAbsolute(bin) &&
173
- !/\.(exe|cmd|bat)$/i.test(bin);
174
- const child = spawn(bin, [abs], {
175
- detached: true,
176
- stdio: "ignore",
177
- windowsHide: true,
178
- shell: useShell,
179
- });
180
- child.unref();
181
- return {
182
- attempted: true,
183
- ok: true,
184
- detail: `spawned ${bin} ${abs}`,
185
- };
186
- }
187
- catch (error) {
188
- const msg = error instanceof Error ? error.message : String(error);
189
- return {
190
- attempted: true,
191
- ok: false,
192
- detail: `failed to spawn Cursor CLI (${bin}): ${msg}`,
193
- };
194
- }
195
- }
196
- export function shouldAutoOpenCanvas(opts) {
197
- // Scripts: --quiet means path-only, do not pop the IDE.
198
- if (opts?.quiet === true)
199
- return false;
200
- if (opts?.noOpen === true)
201
- return false;
202
- if (opts?.open === true)
203
- return true;
204
- const env = process.env.TRELLIS_CAMPAIGN_CANVAS_OPEN?.trim().toLowerCase();
205
- if (env === "0" || env === "false" || env === "no")
206
- return false;
207
- if (env === "1" || env === "true" || env === "yes")
208
- return true;
209
- // Default ON: writing a canvas is useless if the user never sees it.
210
- return true;
211
- }
212
- export function resolveHarnessForCanvas(parentDir) {
213
- return findHarnessRoot(parentDir) ?? findHarnessRoot(process.cwd());
214
- }
215
- export function defaultCanvasPath(snapshot, parentDir) {
216
- const harness = resolveHarnessForCanvas(parentDir);
217
- const canvases = resolveCanvasesDir(harness);
218
- const fileName = `campaign-${snapshot.parent.id}.canvas.tsx`;
219
- if (canvases) {
220
- return path.join(canvases, fileName);
221
- }
222
- // Last resort: no harness and no env canvas dir.
223
- const base = path.join(process.cwd(), ".cstl", "workspace", "campaign-status");
224
- return path.join(base, fileName);
225
- }
226
- /** Whether `defaultCanvasPath` would use the workspace fallback for this parent. */
227
- export function defaultCanvasUsesWorkspaceFallback(parentDir) {
228
- const harness = resolveHarnessForCanvas(parentDir);
229
- return resolveCanvasesDir(harness) === null;
230
- }
231
- /** Escape a JSON text so it is safe as a JS/TS expression. */
232
- function jsonAsTsLiteral(value) {
233
- return JSON.stringify(value, null, 2);
234
- }
235
- /**
236
- * Render a single-file Cursor Canvas (`.canvas.tsx`) with embedded snapshot.
237
- * Imports only `cursor/canvas`; no fetch / network.
238
- */
239
- export function renderCampaignCanvasTsx(snapshot) {
240
- const dataLiteral = jsonAsTsLiteral(snapshot);
241
- return `import {
242
- Callout,
243
- Card,
244
- CardBody,
245
- CardHeader,
246
- Grid,
247
- H1,
248
- H2,
249
- Pill,
250
- Row,
251
- Stack,
252
- Stat,
253
- Table,
254
- Text,
255
- useHostTheme,
256
- } from "cursor/canvas";
257
-
258
- /** Embedded campaign MIX snapshot — refresh via \\\`cstl campaign canvas\\\`. */
259
- const DATA = ${dataLiteral};
260
-
261
- type Snapshot = typeof DATA;
262
- type Child = Snapshot["parent"]["children"][number];
263
- type Stage = Snapshot["parent"]["stages"][number];
264
- type RpcClient = Snapshot["rpc"]["clients"][number];
265
-
266
- function stateTone(
267
- state: string,
268
- ): "neutral" | "success" | "warning" | "info" | "deleted" {
269
- const s = state.toLowerCase();
270
- if (s === "integrated" || s === "done" || s === "completed") return "success";
271
- if (s === "working" || s === "in_progress" || s === "integrating") return "info";
272
- if (s === "blocked" || s === "failed") return "deleted";
273
- if (s === "review" || s === "changes") return "warning";
274
- return "neutral";
275
- }
276
-
277
- export default function CampaignStatusCanvas() {
278
- const theme = useHostTheme();
279
- const parent = DATA.parent;
280
- const rpc = DATA.rpc;
281
-
282
- const stageRows = parent.stages.flatMap((stage: Stage) =>
283
- stage.units.map((unit) => [
284
- stage.id,
285
- stage.title || "—",
286
- unit.id,
287
- <Pill key={\`\${stage.id}-\${unit.id}-st\`} tone={stateTone(unit.state)} size="sm">
288
- {unit.state}
289
- </Pill>,
290
- unit.readiness,
291
- ]),
292
- );
293
-
294
- const childRows = parent.children.map((child: Child) => [
295
- child.id,
296
- <Pill key={\`\${child.id}-st\`} tone={stateTone(child.state)} size="sm">
297
- {child.state}
298
- </Pill>,
299
- child.dependsOn.length ? child.dependsOn.join(", ") : "—",
300
- child.ref ?? "—",
301
- ]);
302
-
303
- const clientRows = rpc.clients.map((c: RpcClient) => [
304
- c.kind,
305
- c.id,
306
- <Pill key={\`\${c.kind}-\${c.id}\`} tone="info" size="sm">
307
- {c.capLabel}
308
- </Pill>,
309
- c.campaignId ?? "—",
310
- c.lastSeenAt ?? "—",
311
- ]);
312
-
313
- return (
314
- <Stack gap={20} style={{ padding: 20, maxWidth: 1100 }}>
315
- <Stack gap={8}>
316
- <H1>Campaign — {parent.id}</H1>
317
- <Text style={{ color: theme.text.secondary, fontSize: 12 }}>
318
- Generated {DATA.generatedAt} · path {parent.path}
319
- </Text>
320
- <Text style={{ color: theme.text.tertiary, fontSize: 12 }}>
321
- Source: Trellis parent-status + optional RPC /status · read-only MIX
322
- </Text>
323
- </Stack>
324
-
325
- <Grid columns={4} gap={12}>
326
- <Stat value={String(parent.contractEpoch ?? "?")} label="contract_epoch" />
327
- <Stat
328
- value={String(parent.executionTopology ?? "?")}
329
- label="execution_topology"
330
- />
331
- <Stat value={String(parent.mergeLimit ?? "?")} label="merge_limit" />
332
- <Stat
333
- value={rpc.reachable ? "up" : "down"}
334
- label="RPC broker"
335
- tone={rpc.reachable ? "success" : "danger"}
336
- />
337
- </Grid>
338
-
339
- {stageRows.length > 0 ? (
340
- <Stack gap={8}>
341
- <H2>Stages</H2>
342
- <Table
343
- headers={["Stage", "Title", "Unit", "State", "Readiness"]}
344
- rows={stageRows}
345
- />
346
- </Stack>
347
- ) : null}
348
-
349
- {childRows.length > 0 ? (
350
- <Stack gap={8}>
351
- <H2>Children</H2>
352
- <Table
353
- headers={["Child", "State", "depends_on", "ref"]}
354
- rows={childRows}
355
- />
356
- </Stack>
357
- ) : null}
358
-
359
- <Card>
360
- <CardHeader>RPC broker</CardHeader>
361
- <CardBody>
362
- <Stack gap={12}>
363
- <Row gap={8} align="center">
364
- <Text style={{ fontSize: 12 }}>URL</Text>
365
- <Text style={{ color: theme.text.secondary, fontSize: 12 }}>
366
- {rpc.url}
367
- </Text>
368
- </Row>
369
- {!rpc.reachable ? (
370
- <Callout tone="warning" title="Broker unreachable">
371
- {rpc.error ?? "reachable: false — Trellis stages/children still shown."}
372
- </Callout>
373
- ) : null}
374
- {clientRows.length > 0 ? (
375
- <Table
376
- headers={["kind", "id", "capLabel", "campaignId", "lastSeenAt"]}
377
- rows={clientRows}
378
- />
379
- ) : null}
380
- {rpc.topics.length > 0 ? (
381
- <Text style={{ color: theme.text.secondary, fontSize: 12 }}>
382
- Topics: {rpc.topics.join(", ")}
383
- </Text>
384
- ) : null}
385
- </Stack>
386
- </CardBody>
387
- </Card>
388
-
389
- {DATA.notes.length > 0 ? (
390
- <Stack gap={6}>
391
- <H2>Notes</H2>
392
- {DATA.notes.map((note: string) => (
393
- <Text key={note} style={{ color: theme.text.secondary, fontSize: 12 }}>
394
- {note}
395
- </Text>
396
- ))}
397
- </Stack>
398
- ) : null}
399
-
400
- <Text style={{ color: theme.text.tertiary, fontSize: 12 }}>
401
- Refresh: cstl campaign canvas --parent {parent.path}
402
- </Text>
403
- </Stack>
404
- );
405
- }
406
- `;
407
- }
408
- export function writeCampaignCanvas(snapshot, outPath) {
409
- const abs = path.resolve(outPath);
410
- fs.mkdirSync(path.dirname(abs), { recursive: true });
411
- fs.writeFileSync(abs, renderCampaignCanvasTsx(snapshot), "utf8");
412
- return abs;
413
- }
414
- //# sourceMappingURL=canvas-render.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../../src/commands/campaign/canvas-render.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { getJson } from "../rpc/client.js";
2
- import type { CampaignParentSnapshot, CampaignStatusSnapshot } from "./types.js";
3
- export type TrellisLoader = (parentDir: string) => Promise<CampaignParentSnapshot>;
4
- export type RpcStatusFetcher = (url: string) => Promise<unknown>;
5
- export interface ComposeCampaignStatusOptions {
6
- parentDir: string;
7
- rpcUrl?: string;
8
- rpcTimeoutMs?: number;
9
- loadTrellis?: TrellisLoader;
10
- fetchRpcStatus?: RpcStatusFetcher;
11
- }
12
- export declare function composeCampaignStatus(options: ComposeCampaignStatusOptions): Promise<CampaignStatusSnapshot>;
13
- /** Re-export for tests that want getJson-shaped helpers. */
14
- export { getJson };
15
- //# sourceMappingURL=compose.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/commands/campaign/compose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,kBAAkB,CAAC;AAG1D,OAAO,KAAK,EACV,sBAAsB,EAGtB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAQpB,MAAM,MAAM,aAAa,GAAG,CAC1B,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAErC,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEjE,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC;AA4ED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAuCjC;AAED,4DAA4D;AAC5D,OAAO,EAAE,OAAO,EAAE,CAAC"}