@blxzer/cursor-trellis 0.3.4 → 0.3.5

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 (95) hide show
  1. package/README.md +0 -13
  2. package/README.zh-CN.md +1 -1
  3. package/bin/cstl.js +1 -1
  4. package/bin/smart-search.js +1 -1
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +14 -2
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/commands/campaign/canvas-render.d.ts +68 -0
  9. package/dist/commands/campaign/canvas-render.d.ts.map +1 -0
  10. package/dist/commands/campaign/canvas-render.js +414 -0
  11. package/dist/commands/campaign/canvas-render.js.map +1 -0
  12. package/dist/commands/campaign/compose.d.ts +15 -0
  13. package/dist/commands/campaign/compose.d.ts.map +1 -0
  14. package/dist/commands/campaign/compose.js +110 -0
  15. package/dist/commands/campaign/compose.js.map +1 -0
  16. package/dist/commands/campaign/index.d.ts +13 -0
  17. package/dist/commands/campaign/index.d.ts.map +1 -0
  18. package/dist/commands/campaign/index.js +134 -0
  19. package/dist/commands/campaign/index.js.map +1 -0
  20. package/dist/commands/campaign/kind-map.d.ts +6 -0
  21. package/dist/commands/campaign/kind-map.d.ts.map +1 -0
  22. package/dist/commands/campaign/kind-map.js +21 -0
  23. package/dist/commands/campaign/kind-map.js.map +1 -0
  24. package/dist/commands/campaign/mcp-server.d.ts +6 -0
  25. package/dist/commands/campaign/mcp-server.d.ts.map +1 -0
  26. package/dist/commands/campaign/mcp-server.js +167 -0
  27. package/dist/commands/campaign/mcp-server.js.map +1 -0
  28. package/dist/commands/campaign/render.d.ts +5 -0
  29. package/dist/commands/campaign/render.d.ts.map +1 -0
  30. package/dist/commands/campaign/render.js +103 -0
  31. package/dist/commands/campaign/render.js.map +1 -0
  32. package/dist/commands/campaign/trellis-load.d.ts +13 -0
  33. package/dist/commands/campaign/trellis-load.d.ts.map +1 -0
  34. package/dist/commands/campaign/trellis-load.js +122 -0
  35. package/dist/commands/campaign/trellis-load.js.map +1 -0
  36. package/dist/commands/campaign/types.d.ts +61 -0
  37. package/dist/commands/campaign/types.d.ts.map +1 -0
  38. package/dist/commands/campaign/types.js +3 -0
  39. package/dist/commands/campaign/types.js.map +1 -0
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +11 -1
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/rpc/client.d.ts +51 -0
  44. package/dist/commands/rpc/client.d.ts.map +1 -0
  45. package/dist/commands/rpc/client.js +147 -0
  46. package/dist/commands/rpc/client.js.map +1 -0
  47. package/dist/commands/rpc/index.d.ts +10 -0
  48. package/dist/commands/rpc/index.d.ts.map +1 -0
  49. package/dist/commands/rpc/index.js +157 -0
  50. package/dist/commands/rpc/index.js.map +1 -0
  51. package/dist/commands/rpc/serve.d.ts +23 -0
  52. package/dist/commands/rpc/serve.d.ts.map +1 -0
  53. package/dist/commands/rpc/serve.js +60 -0
  54. package/dist/commands/rpc/serve.js.map +1 -0
  55. package/dist/commands/rpc/smoke.d.ts +16 -0
  56. package/dist/commands/rpc/smoke.d.ts.map +1 -0
  57. package/dist/commands/rpc/smoke.js +92 -0
  58. package/dist/commands/rpc/smoke.js.map +1 -0
  59. package/dist/commands/sdk/index.d.ts +9 -0
  60. package/dist/commands/sdk/index.d.ts.map +1 -0
  61. package/dist/commands/sdk/index.js +58 -0
  62. package/dist/commands/sdk/index.js.map +1 -0
  63. package/dist/commands/sdk/run.d.ts +42 -0
  64. package/dist/commands/sdk/run.d.ts.map +1 -0
  65. package/dist/commands/sdk/run.js +245 -0
  66. package/dist/commands/sdk/run.js.map +1 -0
  67. package/dist/commands/sdk/status.d.ts +14 -0
  68. package/dist/commands/sdk/status.d.ts.map +1 -0
  69. package/dist/commands/sdk/status.js +69 -0
  70. package/dist/commands/sdk/status.js.map +1 -0
  71. package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +35 -29
  72. package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +11 -25
  73. package/dist/templates/cursor/rules/retrieval-routing.mdc +1 -1
  74. package/dist/templates/markdown/agents.md +2 -0
  75. package/dist/templates/markdown/spec/guides/retrieval-daily-guide.md.txt +14 -0
  76. package/dist/templates/trellis/scripts/common/codebase_retrieval_router.py +14 -0
  77. package/dist/templates/trellis/scripts/common/parent_orchestration.py +341 -2
  78. package/dist/templates/trellis/scripts/common/task_map.py +638 -614
  79. package/dist/templates/trellis/scripts/common/task_store.py +47 -1
  80. package/dist/templates/trellis/scripts/task.py +32 -0
  81. package/dist/utils/codebase-retrieval-router.d.ts.map +1 -1
  82. package/dist/utils/codebase-retrieval-router.js +14 -0
  83. package/dist/utils/codebase-retrieval-router.js.map +1 -1
  84. package/dist/utils/cursor-sdk-gate.d.ts +10 -0
  85. package/dist/utils/cursor-sdk-gate.d.ts.map +1 -0
  86. package/dist/utils/cursor-sdk-gate.js +32 -0
  87. package/dist/utils/cursor-sdk-gate.js.map +1 -0
  88. package/dist/utils/project-capabilities.d.ts +30 -3
  89. package/dist/utils/project-capabilities.d.ts.map +1 -1
  90. package/dist/utils/project-capabilities.js +182 -11
  91. package/dist/utils/project-capabilities.js.map +1 -1
  92. package/dist/utils/readiness.d.ts.map +1 -1
  93. package/dist/utils/readiness.js +26 -0
  94. package/dist/utils/readiness.js.map +1 -1
  95. package/package.json +4 -3
package/README.md CHANGED
@@ -38,18 +38,6 @@ Fresh installs use `.cstl/` directly. Projects on 0.3.0 run `cstl update --migra
38
38
  - **Cursor++ safety** — Method 2.5 patch requires explicit `--approve`; `--check-compat` pre-flight; `smoke.py` health check (no secrets)
39
39
  - **Evidence pack** — finish/check cite `retrieval-pack-latest.json` when present; research prompts include provider relevance caveats
40
40
 
41
- ## Quick demo (~5 min)
42
-
43
- Try Trellis on an empty app directory without touching this source tree:
44
-
45
- ```bash
46
- npm install -g @blxzer/cursor-trellis
47
- cd examples/minimal-agent-app
48
- ./demo.sh # or demo.ps1 on Windows
49
- ```
50
-
51
- The script runs `cstl init --cursor -y` → `cstl validate-rules` → lists `.cstl/` and `.cursor/`. Details: [examples/minimal-agent-app/README.md](examples/minimal-agent-app/README.md). Agent tooling narrative (CLI / MCP / Hook / Rule): [docs/agent-tooling-narrative.zh-CN.md](docs/agent-tooling-narrative.zh-CN.md).
52
-
53
41
  ## Quick start (Cursor)
54
42
 
55
43
  **1. Install the CLI** (global or project-local):
@@ -226,7 +214,6 @@ Local harness layout (`D:\MyHarness`), Git remote policy, release/publish, and d
226
214
  | [docs/skills.md](docs/skills.md) | Internal skills reference |
227
215
  | [docs/subagents.md](docs/subagents.md) | Subagent dispatch design |
228
216
  | [docs/agent-tooling-narrative.zh-CN.md](docs/agent-tooling-narrative.zh-CN.md) | CLI / MCP / Hook / Rule layering (ZH) |
229
- | [examples/minimal-agent-app/](examples/minimal-agent-app/) | 5-minute init demo |
230
217
  | [docs/spec-system.md](docs/spec-system.md) | Progressive spec system |
231
218
  | [docs/task-system.md](docs/task-system.md) | Task artifacts, gates, Parent/Child |
232
219
  | [packages/cli/README.md](packages/cli/README.md) | CLI / npm reference |
package/README.zh-CN.md CHANGED
@@ -198,7 +198,7 @@ smart-search --version
198
198
  | `pnpm build` | `tsc` + 拷贝模板 |
199
199
  | `pnpm test` | Vitest |
200
200
  | `pnpm mirror-check` | Dogfood `.cursor` / `.agents` vs templates |
201
- | `pnpm run sync:smart-search` | 刷新 vendor |
201
+ | `pnpm run sync:smart-search` | 刷新 bundled `smart-search-cli` skill(从 smart-search 仓库拷贝;非 vendor 源码) |
202
202
 
203
203
  Release 与 npm 发布流程**不在**公开 README 中;见内部维护文档。
204
204
 
package/bin/cstl.js CHANGED
@@ -1,3 +1,3 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import("../dist/cli/index.js");
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  import { spawn } from "node:child_process";
4
4
  import { dirname, join } from "node:path";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,9 @@ import { upgrade } from "../commands/upgrade.js";
9
9
  import { uninstall } from "../commands/uninstall.js";
10
10
  import { runWorkflowCommand, WorkflowCommandError, } from "../commands/workflow.js";
11
11
  // import { registerChannelCommand } from "../commands/channel/index.js";
12
+ import { registerCampaignCommand } from "../commands/campaign/index.js";
13
+ import { registerRpcCommand } from "../commands/rpc/index.js";
14
+ import { registerSdkCommand } from "../commands/sdk/index.js";
12
15
  import { runValidateRules } from "../commands/validate-rules.js";
13
16
  import { isWorkflowInitialized, workflowPath } from "../utils/workflow-dir.js";
14
17
  import { PACKAGE_NAME, VERSION } from "../constants/version.js";
@@ -36,9 +39,12 @@ function checkForUpdates(cwd) {
36
39
  console.log(chalk.gray(` Run: cstl upgrade\n`));
37
40
  }
38
41
  }
39
- // Check for updates at CLI startup when a workflow dir exists
42
+ // Check for updates at CLI startup when a workflow dir exists.
43
+ // Never print to stdout when running an MCP stdio server — Cursor hosts
44
+ // treat any non-framed stdout as a handshake failure.
40
45
  const cwd = process.cwd();
41
- if (isWorkflowInitialized(cwd)) {
46
+ const isStdioMcp = process.argv.slice(2).includes("mcp");
47
+ if (isWorkflowInitialized(cwd) && !isStdioMcp) {
42
48
  checkForUpdates(cwd);
43
49
  }
44
50
  const program = new Command();
@@ -251,6 +257,12 @@ program
251
257
  });
252
258
  // Cursor-only product: multi-agent `channel` runtime is upstream Trellis scope; not registered.
253
259
  // registerChannelCommand(program);
260
+ // Localhost RPC-FULL CORE control plane (Track B). Not a substitute for durable channel logs.
261
+ registerRpcCommand(program);
262
+ // Cursor SDK RUN bridge (Track B). Explicit --task; mock/live; never fakes IDE tabs or Parent integrate.
263
+ registerSdkCommand(program);
264
+ // Campaign observation MIX (CMD + MCP). Read-only; Canvas Should deferred.
265
+ registerCampaignCommand(program);
254
266
  program
255
267
  .command("validate-rules")
256
268
  .description("Validate Cursor .cursor/rules against the expected manifest (templates and/or installed rules)")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,yEAAyE;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,uFAAuF;AACvF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAEjC;;GAEG;AACH,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO;IAExD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACpE,MAAM,UAAU,GAAG,OAAO,CAAC;IAC3B,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAE/D,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,mCAAmC,cAAc,MAAM,UAAU,EAAE,CACpE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1B,iDAAiD;QACjD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,mBAAmB,UAAU,4BAA4B,cAAc,GAAG,CAC3E,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,wEAAwE;AACxE,sDAAsD;AACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzD,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAC9C,eAAe,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,SAAS,aAAa,CAAC,KAAa,EAAE,QAAkB;IACtD,OAAO,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,uDAAuD,CAAC;KACpE,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,2BAA2B,CAAC,CAAC;AAElE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CACL,eAAe,EACf,6GAA6G,CAC9G;KACA,MAAM,CACL,mBAAmB,EACnB,mDAAmD,CACpD;KACA,MAAM,CAAC,aAAa,EAAE,yCAAyC,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;KACnE,MAAM,CACL,kBAAkB,EAClB,yGAAyG,CAC1G;KACA,MAAM,CACL,mBAAmB,EACnB,+FAA+F,EAC/F,aAAa,EACb,EAAE,CACH;KACA,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC;KAC3C,MAAM,CAAC,eAAe,EAAE,yBAAyB,CAAC;KAClD,MAAM,CACL,uBAAuB,EACvB,uDAAuD,CACxD;KACA,MAAM,CACL,aAAa,EACb,uDAAuD,CACxD;KACA,MAAM,CAAC,UAAU,EAAE,4CAA4C,CAAC;KAChE,MAAM,CACL,yBAAyB,EACzB,8DAA8D,CAC/D;KACA,MAAM,CACL,iBAAiB,EACjB,2GAA2G,CAC5G;KACA,MAAM,CACL,4BAA4B,EAC5B,yFAAyF,CAC1F;KACA,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,kBAAkB,CAAC;KAC3B,WAAW,CACV,8EAA8E,CAC/E;KACA,MAAM,CAAC,QAAQ,EAAE,+CAA+C,CAAC;KACjE,MAAM,CACL,gBAAgB,EAChB,+EAA+E,CAChF;KACA,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,4BAA4B,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;YAC7C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,IAAI,EAAE,OAAO,CAAC,IAAe;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAsB;SAC5C,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;KACtE,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,mDAAmD,CAAC;KACxE,MAAM,CACL,kBAAkB,EAClB,yGAAyG,CAC1G;KACA,MAAM,CACL,QAAQ,EACR,wDAAwD,CACzD;KACA,MAAM,CACL,0BAA0B,EAC1B,4CAA4C,CAC7C;KACA,MAAM,CACL,sBAAsB,EACtB,oGAAoG,CACrG;KACA,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC;YACX,MAAM,EAAE,OAAO,CAAC,MAAiB;YACjC,KAAK,EAAE,OAAO,CAAC,KAAgB;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAkB;YACnC,SAAS,EAAE,OAAO,CAAC,SAAoB;YACvC,cAAc,EAAE,OAAO,CAAC,cAAyB;YACjD,OAAO,EAAE,OAAO,CAAC,OAAkB;YACnC,aAAa,EAAE,OAAO,CAAC,aAAwB;YAC/C,IAAI,EAAE,OAAO,CAAC,IAAe;YAC7B,mBAAmB,EAAE,OAAO,CAAC,mBAA8B;YAC3D,gBAAgB,EAAE,OAAO,CAAC,gBAA2B;SACtD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CACV,8EAA8E,CAC/E;KACA,cAAc,CACb,sBAAsB,EACtB,uCAAuC,EACvC,CAAC,GAAW,EAAE,IAA0B,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EACnE,EAAc,CACf;KACA,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAAC;KACvD,MAAM,CAAC,aAAa,EAAE,4CAA4C,CAAC;KACnE,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;KACjE,MAAM,CAAC,kBAAkB,EAAE,0CAA0C,CAAC;KACtE,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;KAChE,MAAM,CAAC,kBAAkB,EAAE,uBAAuB,CAAC;KACnD,MAAM,CAAC,0BAA0B,EAAE,8BAA8B,CAAC;KAClE,MAAM,CAAC,QAAQ,EAAE,uCAAuC,CAAC;KACzD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC;YACZ,QAAQ,EAAE,OAAO,CAAC,OAAmB;YACrC,MAAM,EAAE,OAAO,CAAC,MAAiB;YACjC,KAAK,EAAE,OAAO,CAAC,KAAgB;YAC/B,OAAO,EAAE,OAAO,CAAC,OAAkB;YACnC,SAAS,EAAE,OAAO,CAAC,SAAoB;YACvC,OAAO,EAAE,OAAO,CAAC,OAAkB;YACnC,cAAc,EAAE,OAAO,CAAC,cAAyB;YACjD,aAAa,EAAE,OAAO,CAAC,aAAwB;YAC/C,mBAAmB,EAAE,OAAO,CAAC,mBAA8B;YAC3D,IAAI,EAAE,OAAO,CAAC,IAAe;YAC7B,MAAM,EAAE,OAAO,CAAC,MAA4B;SAC7C,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CACL,aAAa,EACb,2FAA2F,CAC5F;KACA,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;KACnE,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC;YACZ,GAAG,EAAE,OAAO,CAAC,GAAyB;YACtC,MAAM,EAAE,OAAO,CAAC,MAAiB;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CACV,8EAA8E,CAC/E;KACA,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC;KAC/C,MAAM,CAAC,WAAW,EAAE,sDAAsD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC;YACd,GAAG,EAAE,OAAO,CAAC,GAAc;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAiB;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CACV,yHAAyH,CAC1H;KACA,MAAM,CACL,qBAAqB,EACrB,4EAA4E,CAC7E;KACA,MAAM,CACL,4BAA4B,EAC5B,+DAA+D,CAChE;KACA,MAAM,CAAC,QAAQ,EAAE,4CAA4C,CAAC;KAC9D,MAAM,CAAC,aAAa,EAAE,iDAAiD,CAAC;KACxE,MAAM,CACL,kBAAkB,EAClB,sEAAsE,CACvE;KACA,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC;YACvB,QAAQ,EAAE,OAAO,CAAC,QAA8B;YAChD,WAAW,EAAE,OAAO,CAAC,WAAiC;YACtD,IAAI,EAAE,OAAO,CAAC,IAA2B;YACzC,KAAK,EAAE,OAAO,CAAC,KAA4B;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAgC;SACpD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,gGAAgG;AAChG,mCAAmC;AAEnC,8FAA8F;AAC9F,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,yGAAyG;AACzG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE5B,2EAA2E;AAC3E,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAEjC,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CACV,gGAAgG,CACjG;KACA,MAAM,CACL,kBAAkB,EAClB,yEAAyE,CAC1E;KACA,MAAM,CACL,kBAAkB,EAClB,8EAA8E,CAC/E;KACA,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;IACjD,IAAI,CAAC;QACH,MAAM,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YACpC,GAAG,EAAE,OAAO,CAAC,GAAyB;YACtC,aAAa,EAAE,OAAO,CAAC,aAAoC;SAC5D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EACnB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,68 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,414 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-render.js","sourceRoot":"","sources":["../../../src/commands/campaign/canvas-render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAA0B;IAC3D,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE;QAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1C,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GACR,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,EAAE;QAC/C,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,EAAE,CAAC,OAAO,EAAE,EACZ,SAAS,EACT,UAAU,EACV,IAAI,EACJ,UAAU,CACX,CAAC;IACF,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,8EAA8E;IAC9E,2CAA2C;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACpE,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,YAAoB,EACpB,IAAY,EACZ,YAAoB;IAEpB,IAAI,OAAoB,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,CAAC;IAC9D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,+EAA+E;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,QAAQ,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,SAAwB;IAExB,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAe;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,OAAO,yCAAyC,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;AAC1E,CAAC;AASD,MAAM,SAAS,GACb,mEAAmE;IACnE,4EAA4E;IAC5E,wDAAwD;IACxD,kFAAkF;IAClF,wEAAwE;IACxE,iEAAiE,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,SAAwB,EACxB,IAA0C;IAE1C,MAAM,cAAc,GAClB,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,qBAAqB,GAAG,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACnE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,QAAQ,CAAC,IAAI,CACX,4DAA4D;YAC1D,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,qFAAqF,CACxF,CAAC;IACJ,CAAC;IACD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,mFAAmF;YACjF,yEAAyE;YACzE,oEAAoE,CACvE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,cAAc;QACd,qBAAqB;QACrB,QAAQ;QACR,KAAK,EAAE,CAAC,SAAS,CAAC;KACnB,CAAC;AACJ,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE;YAC3C,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,GAAG;aACd,KAAK,CAAC,OAAO,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,qFAAqF;SACxF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,yEAAyE;QACzE,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACrB,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;YAC9B,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,EAAE;SAChC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,OAAO;YACL,SAAS,EAAE,IAAI;YACf,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,+BAA+B,GAAG,MAAM,GAAG,EAAE;SACtD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAIpC;IACC,wDAAwD;IACxD,IAAI,IAAI,EAAE,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3E,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAChE,qEAAqE;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,SAAiB;IAEjB,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,YAAY,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAC7D,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IACD,iDAAiD;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,kCAAkC,CAAC,SAAiB;IAClE,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACnD,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;AAC9C,CAAC;AAED,8DAA8D;AAC9D,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgC;IAEhC,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO;;;;;;;;;;;;;;;;;;eAkBM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmJzB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAgC,EAChC,OAAe;IAEf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACjE,OAAO,GAAG,CAAC;AACb,CAAC"}