@blxzer/cursor-trellis 0.3.0 → 0.3.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.
- package/CHANGELOG.md +45 -0
- package/README.md +51 -10
- package/README.zh-CN.md +21 -7
- package/bin/cstl.js +1 -1
- package/bin/smart-search.js +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +17 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/capability-smoke.js +2 -2
- package/dist/commands/capability-smoke.js.map +1 -1
- package/dist/commands/channel/agent-loader.d.ts +1 -1
- package/dist/commands/channel/agent-loader.js +4 -4
- package/dist/commands/channel/agent-loader.js.map +1 -1
- package/dist/commands/channel/guard.d.ts +2 -2
- package/dist/commands/channel/guard.js +3 -3
- package/dist/commands/channel/guard.js.map +1 -1
- package/dist/commands/channel/index.js +3 -3
- package/dist/commands/channel/index.js.map +1 -1
- package/dist/commands/channel/list.d.ts +1 -1
- package/dist/commands/channel/list.js +1 -1
- package/dist/commands/channel/rm.d.ts +1 -1
- package/dist/commands/channel/rm.js +1 -1
- package/dist/commands/channel/store/lock.d.ts +1 -1
- package/dist/commands/channel/store/lock.js +1 -1
- package/dist/commands/channel/store/paths.js +1 -1
- package/dist/commands/channel/store/paths.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +105 -59
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/uninstall.d.ts +3 -3
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +69 -15
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.d.ts +6 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +83 -28
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts +4 -4
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +10 -9
- package/dist/commands/workflow.js.map +1 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +1 -1
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/shared.js +6 -6
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/workflow.d.ts +4 -4
- package/dist/configurators/workflow.js +1 -1
- package/dist/constants/paths.d.ts +24 -24
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +16 -16
- package/dist/constants/paths.js.map +1 -1
- package/dist/migrations/manifests/0.3.1.json +32 -0
- package/dist/templates/common/bundled-skills/cstl-cursor2plus-setup/SKILL.md +11 -11
- package/dist/templates/common/bundled-skills/cstl-meta/SKILL.md +15 -15
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/add-project-local-conventions.md +12 -12
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-agents.md +2 -2
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-context-loading.md +21 -21
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-hooks.md +9 -9
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-skills-or-commands.md +7 -7
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-spec-structure.md +15 -15
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-task-lifecycle.md +27 -27
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/change-workflow.md +7 -7
- package/dist/templates/common/bundled-skills/cstl-meta/references/customize-local/overview.md +11 -11
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/context-injection.md +12 -12
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/generated-files.md +21 -21
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/overview.md +14 -14
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/spec-system.md +12 -12
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/task-system.md +23 -23
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/workflow.md +3 -3
- package/dist/templates/common/bundled-skills/cstl-meta/references/local-architecture/workspace-memory.md +16 -16
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/agents.md +2 -2
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/hooks-and-settings.md +6 -6
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/overview.md +5 -5
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/platform-map.md +3 -3
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/skills-and-commands.md +5 -5
- package/dist/templates/common/bundled-skills/cstl-skill-creator/SKILL.md +2 -2
- package/dist/templates/common/bundled-skills/cstl-skill-creator/references/review-checklist.md +1 -1
- package/dist/templates/common/bundled-skills/cstl-spec-bootstrap/SKILL.md +5 -5
- package/dist/templates/common/bundled-skills/cstl-spec-bootstrap/references/repository-analysis.md +1 -1
- package/dist/templates/common/bundled-skills/cstl-spec-bootstrap/references/spec-task-planning.md +3 -3
- package/dist/templates/common/bundled-skills/cstl-spec-bootstrap/references/spec-writing.md +1 -1
- package/dist/templates/common/commands/continue.md +6 -6
- package/dist/templates/common/commands/finish-work.md +5 -5
- package/dist/templates/common/commands/start.md +8 -8
- package/dist/templates/common/skills/before-dev.md +4 -4
- package/dist/templates/common/skills/brainstorm.md +5 -5
- package/dist/templates/common/skills/break-loop.md +3 -3
- package/dist/templates/common/skills/check.md +5 -5
- package/dist/templates/common/skills/update-spec.md +4 -4
- package/dist/templates/cursor/agents/cstl-check.md +6 -6
- package/dist/templates/cursor/agents/cstl-implement.md +7 -7
- package/dist/templates/cursor/agents/cstl-research.md +9 -9
- package/dist/templates/cursor/commands/cursor2plus-setup.md +10 -10
- package/dist/templates/cursor/rules/cstl-subagent-dispatch.mdc +2 -2
- package/dist/templates/cursor/rules/cstl-triage.mdc +2 -2
- package/dist/templates/cursor/rules/retrieval-routing.mdc +4 -4
- package/dist/templates/extract.d.ts +1 -1
- package/dist/templates/extract.js +1 -1
- package/dist/templates/markdown/agents.md +11 -11
- package/dist/templates/markdown/prompts/run-semantic-slice-12.md.txt +1 -1
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +5 -5
- package/dist/templates/markdown/spec/guides/cursor-context-injection-guide.md.txt +3 -3
- package/dist/templates/markdown/spec/guides/cursor-semantic-compliance.md.txt +1 -1
- package/dist/templates/markdown/spec/guides/cursor-subagent-policy.md.txt +11 -11
- package/dist/templates/markdown/spec/guides/cursor-trellis-release-coexistence-guide.md.txt +166 -0
- package/dist/templates/markdown/spec/guides/durable-learning-decision-guide.md.txt +8 -8
- package/dist/templates/markdown/spec/guides/execution-strategy.md.txt +3 -3
- package/dist/templates/markdown/spec/guides/index.md.txt +1 -0
- package/dist/templates/markdown/spec/guides/retrieval-daily-guide.md.txt +10 -10
- package/dist/templates/markdown/workspace-index.md +3 -3
- package/dist/templates/markdown/worktree.yaml.txt +1 -1
- package/dist/templates/shared-hooks/index.d.ts +1 -1
- package/dist/templates/shared-hooks/index.js +1 -1
- package/dist/templates/shared-hooks/inject-retrieval-plan.py +3 -3
- package/dist/templates/shared-hooks/inject-shell-session-context.py +7 -7
- package/dist/templates/shared-hooks/inject-subagent-context.py +1 -1
- package/dist/templates/shared-hooks/inject-workflow-state.py +11 -11
- package/dist/templates/shared-hooks/research-end-retrieval-pack.py +1 -1
- package/dist/templates/shared-hooks/session-start.py +13 -13
- package/dist/templates/trellis/config.yaml +2 -22
- package/dist/templates/trellis/index.d.ts +2 -2
- package/dist/templates/trellis/index.js +2 -2
- package/dist/templates/trellis/local/README.md +3 -3
- package/dist/templates/trellis/local/patch_wpelc8.py +4 -4
- package/dist/templates/trellis/scripts/add_session.py +20 -20
- package/dist/templates/trellis/scripts/common/active_task.py +2 -2
- package/dist/templates/trellis/scripts/common/artifact_search.py +587 -587
- package/dist/templates/trellis/scripts/common/codebase_retrieval_router.py +6 -6
- package/dist/templates/trellis/scripts/common/config.py +3 -3
- package/dist/templates/trellis/scripts/common/developer.py +2 -2
- package/dist/templates/trellis/scripts/common/packages_context.py +23 -23
- package/dist/templates/trellis/scripts/common/parent_orchestration.py +16 -16
- package/dist/templates/trellis/scripts/common/paths.py +107 -107
- package/dist/templates/trellis/scripts/common/project_file_stats.py +1 -1
- package/dist/templates/trellis/scripts/common/retrieval_agent_instructions.py +1 -1
- package/dist/templates/trellis/scripts/common/safe_commit.py +31 -31
- package/dist/templates/trellis/scripts/common/session_memory.py +360 -360
- package/dist/templates/trellis/scripts/common/smart_search_evidence.py +514 -514
- package/dist/templates/trellis/scripts/common/smart_search_resolve.py +1 -1
- package/dist/templates/trellis/scripts/common/subagent_dispatch.py +2 -2
- package/dist/templates/trellis/scripts/common/task_context.py +1 -1
- package/dist/templates/trellis/scripts/common/task_dashboard.py +140 -140
- package/dist/templates/trellis/scripts/common/task_gates.py +23 -23
- package/dist/templates/trellis/scripts/common/task_store.py +5 -5
- package/dist/templates/trellis/scripts/common/task_utils.py +3 -3
- package/dist/templates/trellis/scripts/common/tasks.py +1 -1
- package/dist/templates/trellis/scripts/common/trellis_config.py +3 -3
- package/dist/templates/trellis/scripts/common/workflow_phase.py +1 -1
- package/dist/templates/trellis/scripts/cursor_retrieval_probe.py +3 -3
- package/dist/templates/trellis/scripts/cursor_retrieval_probe_prompt.md +11 -11
- package/dist/templates/trellis/scripts/hooks/linear_sync.py +8 -8
- package/dist/templates/trellis/scripts/init_developer.py +2 -2
- package/dist/templates/trellis/scripts/retrieval_probe_matrix_template.json +4 -4
- package/dist/templates/trellis/scripts/route_codebase_retrieval.py +1 -1
- package/dist/templates/trellis/scripts/task.py +918 -918
- package/dist/templates/trellis/tasks/templates/release-readiness/implement.md +2 -2
- package/dist/templates/trellis/workflow.md +64 -64
- package/dist/types/migration.d.ts +1 -1
- package/dist/types/migration.d.ts.map +1 -1
- package/dist/utils/agents-md.d.ts +47 -0
- package/dist/utils/agents-md.d.ts.map +1 -0
- package/dist/utils/agents-md.js +107 -0
- package/dist/utils/agents-md.js.map +1 -0
- package/dist/utils/codebase-retrieval-router.js +5 -5
- package/dist/utils/codebase-retrieval-router.js.map +1 -1
- package/dist/utils/manifest-prune.d.ts +2 -2
- package/dist/utils/manifest-prune.js +4 -4
- package/dist/utils/manifest-prune.js.map +1 -1
- package/dist/utils/mirror-check.d.ts +3 -1
- package/dist/utils/mirror-check.d.ts.map +1 -1
- package/dist/utils/mirror-check.js +22 -11
- package/dist/utils/mirror-check.js.map +1 -1
- package/dist/utils/project-capabilities.js +5 -5
- package/dist/utils/project-capabilities.js.map +1 -1
- package/dist/utils/retrieval-agent-instructions.js +1 -1
- package/dist/utils/retrieval-agent-instructions.js.map +1 -1
- package/dist/utils/retrieval-execution-telemetry.js +1 -1
- package/dist/utils/retrieval-execution-telemetry.js.map +1 -1
- package/dist/utils/template-fetcher.js +1 -1
- package/dist/utils/template-fetcher.js.map +1 -1
- package/dist/utils/template-hash.d.ts +2 -2
- package/dist/utils/template-hash.d.ts.map +1 -1
- package/dist/utils/template-hash.js +51 -18
- package/dist/utils/template-hash.js.map +1 -1
- package/dist/utils/workflow-dir.d.ts +13 -0
- package/dist/utils/workflow-dir.d.ts.map +1 -0
- package/dist/utils/workflow-dir.js +35 -0
- package/dist/utils/workflow-dir.js.map +1 -0
- package/dist/utils/workflow-ownership.d.ts +36 -0
- package/dist/utils/workflow-ownership.d.ts.map +1 -0
- package/dist/utils/workflow-ownership.js +137 -0
- package/dist/utils/workflow-ownership.js.map +1 -0
- package/dist/utils/workflow-resolver.d.ts +1 -1
- package/dist/utils/workflow-resolver.js +1 -1
- package/package.json +2 -2
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cstl uninstall` — remove every file written by `cstl init` / `update`
|
|
3
|
-
* from the current project, plus the `.
|
|
3
|
+
* from the current project, plus the `.cstl/` directory itself.
|
|
4
4
|
*
|
|
5
5
|
* The single source of truth for "what trellis wrote" is
|
|
6
|
-
* `.
|
|
6
|
+
* `.cstl/.template-hashes.json`. Files outside that manifest are never
|
|
7
7
|
* touched (e.g. user-added hooks under `.cursor/hooks/`).
|
|
8
8
|
*
|
|
9
9
|
* Manifest-listed files split into two groups:
|
|
@@ -14,18 +14,19 @@
|
|
|
14
14
|
* file is fully empty afterwards, we delete it.
|
|
15
15
|
*
|
|
16
16
|
* Whether the user has modified a manifest-listed file or not, it is removed
|
|
17
|
-
* (per the PRD: "全删"). The `.
|
|
17
|
+
* (per the PRD: "全删"). The `.cstl/` tree is removed unconditionally.
|
|
18
18
|
*/
|
|
19
19
|
import fs from "node:fs";
|
|
20
20
|
import path from "node:path";
|
|
21
21
|
import readline from "node:readline";
|
|
22
22
|
import chalk from "chalk";
|
|
23
23
|
import inquirer from "inquirer";
|
|
24
|
-
import { DIR_NAMES } from "../constants/paths.js";
|
|
24
|
+
import { DIR_NAMES, FILE_NAMES } from "../constants/paths.js";
|
|
25
25
|
import { loadHashes } from "../utils/template-hash.js";
|
|
26
26
|
import { cleanupEmptyDirs } from "./update.js";
|
|
27
27
|
import { ALL_MANAGED_DIRS, getConfiguredPlatforms, } from "../configurators/index.js";
|
|
28
28
|
import { pruneOrphanManifestKeys } from "../utils/manifest-prune.js";
|
|
29
|
+
import { hasCstlBlock, removeCstlManagedBlock, } from "../utils/agents-md.js";
|
|
29
30
|
import { isCwdHomedir, homedirGuardMessage, homedirBypassEnabled, } from "../utils/cwd-guard.js";
|
|
30
31
|
import { scrubHooksJson } from "../utils/uninstall-scrubbers.js";
|
|
31
32
|
/**
|
|
@@ -47,6 +48,25 @@ function buildStructuredFileSpecs() {
|
|
|
47
48
|
}
|
|
48
49
|
return map;
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Decide the uninstall action for the root `AGENTS.md`. Independent of the
|
|
53
|
+
* manifest because AGENTS.md is pruned from it (see `pruneOrphanManifestKeys`).
|
|
54
|
+
*/
|
|
55
|
+
function planAgentsMdAction(cwd) {
|
|
56
|
+
const absPath = path.join(cwd, FILE_NAMES.AGENTS);
|
|
57
|
+
if (!fs.existsSync(absPath)) {
|
|
58
|
+
return { kind: "none" };
|
|
59
|
+
}
|
|
60
|
+
const content = fs.readFileSync(absPath, "utf-8");
|
|
61
|
+
if (!hasCstlBlock(content)) {
|
|
62
|
+
return { kind: "none" };
|
|
63
|
+
}
|
|
64
|
+
const stripped = removeCstlManagedBlock(content);
|
|
65
|
+
if (stripped.trim() === "") {
|
|
66
|
+
return { kind: "delete", absPath };
|
|
67
|
+
}
|
|
68
|
+
return { kind: "strip", absPath, strippedContent: stripped };
|
|
69
|
+
}
|
|
50
70
|
/**
|
|
51
71
|
* Walk through the manifest and decide, for each entry, whether it is a plain
|
|
52
72
|
* deletion or a structured modification (or fully-empty modification → still
|
|
@@ -58,6 +78,13 @@ function buildPlan(cwd, hashes) {
|
|
|
58
78
|
const deletions = [];
|
|
59
79
|
const modifications = [];
|
|
60
80
|
for (const posixPath of allPosixPaths) {
|
|
81
|
+
// AGENTS.md is handled by `plan.agentsMd` (strip CSTL block, preserve any
|
|
82
|
+
// upstream TRELLIS block + user content). Skip it here so the manifest
|
|
83
|
+
// loop never deletes the whole file — that would drop the upstream block
|
|
84
|
+
// and user content in a coexistence repo.
|
|
85
|
+
if (posixPath === FILE_NAMES.AGENTS) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
61
88
|
const absPath = path.join(cwd, ...posixPath.split("/"));
|
|
62
89
|
const spec = structured.get(posixPath);
|
|
63
90
|
if (!spec) {
|
|
@@ -92,6 +119,7 @@ function buildPlan(cwd, hashes) {
|
|
|
92
119
|
deletions,
|
|
93
120
|
modifications,
|
|
94
121
|
removeTrellisDir: true,
|
|
122
|
+
agentsMd: planAgentsMdAction(cwd),
|
|
95
123
|
};
|
|
96
124
|
}
|
|
97
125
|
/**
|
|
@@ -103,19 +131,30 @@ function renderPlan(cwd, plan) {
|
|
|
103
131
|
const deletePaths = plan.deletions
|
|
104
132
|
.filter((d) => !d.missing)
|
|
105
133
|
.map((d) => d.posixPath);
|
|
106
|
-
|
|
134
|
+
const agentsDelete = plan.agentsMd.kind === "delete";
|
|
135
|
+
const cstlDirShown = plan.removeTrellisDir && fs.existsSync(trellisDir);
|
|
136
|
+
const deleteCount = deletePaths.length + (cstlDirShown ? 1 : 0) + (agentsDelete ? 1 : 0);
|
|
137
|
+
console.log(chalk.red.bold(`Will be deleted (${deleteCount} entries):`));
|
|
107
138
|
for (const p of deletePaths) {
|
|
108
139
|
console.log(` ${chalk.red("-")} ${p}`);
|
|
109
140
|
}
|
|
110
|
-
if (
|
|
141
|
+
if (agentsDelete) {
|
|
142
|
+
console.log(` ${chalk.red("-")} ${FILE_NAMES.AGENTS} ${chalk.gray("(only the cursor-trellis managed block was present)")}`);
|
|
143
|
+
}
|
|
144
|
+
if (cstlDirShown) {
|
|
111
145
|
console.log(` ${chalk.red("-")} ${DIR_NAMES.WORKFLOW}/ ${chalk.gray("(entire directory, including tasks/runtime/config)")}`);
|
|
112
146
|
}
|
|
113
|
-
|
|
147
|
+
const agentsStrip = plan.agentsMd.kind === "strip";
|
|
148
|
+
const modCount = plan.modifications.length + (agentsStrip ? 1 : 0);
|
|
149
|
+
if (modCount > 0) {
|
|
114
150
|
console.log();
|
|
115
|
-
console.log(chalk.yellow.bold(`Will be modified (${
|
|
151
|
+
console.log(chalk.yellow.bold(`Will be modified (${modCount} files):`));
|
|
116
152
|
for (const m of plan.modifications) {
|
|
117
153
|
console.log(` ${chalk.yellow("~")} ${m.posixPath} ${chalk.gray(`(${m.reason})`)}`);
|
|
118
154
|
}
|
|
155
|
+
if (agentsStrip) {
|
|
156
|
+
console.log(` ${chalk.yellow("~")} ${FILE_NAMES.AGENTS} ${chalk.gray("(strip cursor-trellis managed block; keep upstream + user content)")}`);
|
|
157
|
+
}
|
|
119
158
|
}
|
|
120
159
|
const skipped = plan.deletions.filter((d) => d.missing);
|
|
121
160
|
if (skipped.length > 0) {
|
|
@@ -142,7 +181,7 @@ async function promptContinue() {
|
|
|
142
181
|
return proceed;
|
|
143
182
|
}
|
|
144
183
|
/**
|
|
145
|
-
* Execute the plan: write modifications, unlink deletions, remove `.
|
|
184
|
+
* Execute the plan: write modifications, unlink deletions, remove `.cstl/`,
|
|
146
185
|
* then prune empty managed directories.
|
|
147
186
|
*
|
|
148
187
|
* Returns counts for the summary.
|
|
@@ -155,6 +194,21 @@ function executePlan(cwd, plan) {
|
|
|
155
194
|
fs.writeFileSync(mod.absPath, mod.result.content);
|
|
156
195
|
modifiedFiles += 1;
|
|
157
196
|
}
|
|
197
|
+
// 1b. AGENTS.md CSTL-block strip (or delete if only the block was present).
|
|
198
|
+
// Handled outside the manifest loop because AGENTS.md is pruned from it.
|
|
199
|
+
if (plan.agentsMd.kind === "strip") {
|
|
200
|
+
fs.writeFileSync(plan.agentsMd.absPath, plan.agentsMd.strippedContent);
|
|
201
|
+
modifiedFiles += 1;
|
|
202
|
+
}
|
|
203
|
+
else if (plan.agentsMd.kind === "delete") {
|
|
204
|
+
try {
|
|
205
|
+
fs.unlinkSync(plan.agentsMd.absPath);
|
|
206
|
+
deletedFiles += 1;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Best-effort; a missing/locked file is reported via summary mismatch.
|
|
210
|
+
}
|
|
211
|
+
}
|
|
158
212
|
// 2. Deletions (skip already-missing entries).
|
|
159
213
|
const deletedDirCandidates = new Set();
|
|
160
214
|
for (const del of plan.deletions) {
|
|
@@ -172,7 +226,7 @@ function executePlan(cwd, plan) {
|
|
|
172
226
|
}
|
|
173
227
|
deletedDirCandidates.add(path.posix.dirname(del.posixPath));
|
|
174
228
|
}
|
|
175
|
-
// 3. Drop `.
|
|
229
|
+
// 3. Drop `.cstl/` entirely.
|
|
176
230
|
let deletedDirs = 0;
|
|
177
231
|
if (plan.removeTrellisDir) {
|
|
178
232
|
const trellisDir = path.join(cwd, DIR_NAMES.WORKFLOW);
|
|
@@ -194,7 +248,7 @@ function executePlan(cwd, plan) {
|
|
|
194
248
|
// `.agents/skills`, …) that is now empty. We deliberately handle this here
|
|
195
249
|
// — `cleanupEmptyDirs` refuses to touch managed root dirs because in normal
|
|
196
250
|
// `update` flow they must persist. During uninstall, an empty platform root
|
|
197
|
-
// has no purpose. `.
|
|
251
|
+
// has no purpose. `.cstl` is already gone (step 3), so we skip it.
|
|
198
252
|
// Process deepest-first so that nested managed dirs (e.g. `.agents/skills`)
|
|
199
253
|
// are removed before their parents (`.agents`).
|
|
200
254
|
const sortedManagedDirs = [...ALL_MANAGED_DIRS]
|
|
@@ -247,9 +301,9 @@ export async function uninstall(options = {}) {
|
|
|
247
301
|
}
|
|
248
302
|
const cwd = process.cwd();
|
|
249
303
|
const trellisDir = path.join(cwd, DIR_NAMES.WORKFLOW);
|
|
250
|
-
// Pre-check 1: must have a `.
|
|
304
|
+
// Pre-check 1: must have a `.cstl/` directory.
|
|
251
305
|
if (!fs.existsSync(trellisDir)) {
|
|
252
|
-
console.log(chalk.gray("Trellis is not installed in this project (no .
|
|
306
|
+
console.log(chalk.gray("Trellis is not installed in this project (no .cstl/ directory found)."));
|
|
253
307
|
return;
|
|
254
308
|
}
|
|
255
309
|
// Pre-check 2: must have a manifest. Without it we cannot determine which
|
|
@@ -257,7 +311,7 @@ export async function uninstall(options = {}) {
|
|
|
257
311
|
const hashes = loadHashes(cwd);
|
|
258
312
|
if (Object.keys(hashes).length === 0) {
|
|
259
313
|
console.error(chalk.red("Trellis directory found but manifest is missing — cannot determine which platform files to remove. " +
|
|
260
|
-
"You can manually delete .
|
|
314
|
+
"You can manually delete .cstl/ if needed."));
|
|
261
315
|
process.exit(1);
|
|
262
316
|
}
|
|
263
317
|
// Self-heal poisoned manifests from buggy init versions: prune any manifest
|
|
@@ -268,7 +322,7 @@ export async function uninstall(options = {}) {
|
|
|
268
322
|
// Dry-run: still compute the pruned hashes (so the plan reflects post-prune
|
|
269
323
|
// reality) but pass `persist: false` so no disk write happens. The actual
|
|
270
324
|
// disk write defers to executePlan time, where we'd be rewriting the
|
|
271
|
-
// manifest only to delete the whole .
|
|
325
|
+
// manifest only to delete the whole .cstl/ dir anyway — but the
|
|
272
326
|
// computation must remain to keep the rendered plan honest.
|
|
273
327
|
const configuredPlatforms = getConfiguredPlatforms(cwd);
|
|
274
328
|
const { pruned, hashes: prunedHashes } = pruneOrphanManifestKeys(cwd, [...configuredPlatforms], hashes, { persist: !options.dryRun });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,11 +12,16 @@ export interface UpdateOptions {
|
|
|
12
12
|
json?: boolean;
|
|
13
13
|
/** Skip post-apply Python script smoke checks (apply mode only). */
|
|
14
14
|
skipPostUpdateSmoke?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* F5 escape hatch: force the `.trellis/` → `.cstl/` rename-dir migration
|
|
17
|
+
* even when upstream Trellis signals are detected. Requires `--migrate`.
|
|
18
|
+
*/
|
|
19
|
+
forceCstlMigrate?: boolean;
|
|
15
20
|
/** Filled on completion for `cstl rollout` aggregation. */
|
|
16
21
|
lastReport?: UpdateRolloutReport;
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
19
|
-
* Load update.skip paths from .
|
|
24
|
+
* Load update.skip paths from .cstl/config.yaml
|
|
20
25
|
*
|
|
21
26
|
* Parses simple YAML structure:
|
|
22
27
|
* update:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EAKd,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EAKd,MAAM,uBAAuB,CAAC;AA2D/B,OAAO,EAQL,KAAK,mBAAmB,EACzB,MAAM,mCAAmC,CAAC;AAe3C,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC;AA4ZD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CA6DzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GACrB,MAAM,GAAG,IAAI,CA2Bf;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CA0CtB;AAyYD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAerE;AAsbD;;;GAGG;AACH,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAgCnE;AAED;;;;GAIG;AACH,0CAA0C;AAC1C,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,aAAa,EAAE,GAC1B,aAAa,EAAE,CAajB;AA2QD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+gClE"}
|
package/dist/commands/update.js
CHANGED
|
@@ -5,6 +5,8 @@ import inquirer from "inquirer";
|
|
|
5
5
|
import { DIR_NAMES, FILE_NAMES, PATHS } from "../constants/paths.js";
|
|
6
6
|
import { VERSION, PACKAGE_NAME } from "../constants/version.js";
|
|
7
7
|
import { getMigrationsForVersion, getAllMigrations, getMigrationMetadata, getConfigSectionsAddedBetween, } from "../migrations/index.js";
|
|
8
|
+
import { assessCstlDirectoryMigrate } from "../utils/workflow-ownership.js";
|
|
9
|
+
import { isWorkflowInitialized, resolveWorkflowDirName, workflowPath, } from "../utils/workflow-dir.js";
|
|
8
10
|
import { loadHashes, saveHashes, updateHashes, isTemplateModified, removeHash, renameHash, computeHash, } from "../utils/template-hash.js";
|
|
9
11
|
import { compareVersions } from "../utils/compare-versions.js";
|
|
10
12
|
import { toPosix } from "../utils/posix.js";
|
|
@@ -30,15 +32,13 @@ function logCursor2plusCompatHint(cwd) {
|
|
|
30
32
|
if (!fs.existsSync(bundleDir)) {
|
|
31
33
|
return;
|
|
32
34
|
}
|
|
33
|
-
console.log(chalk.gray("\nCursor++ BYOK: after Cursor/Cursor++ upgrades, run `python .
|
|
35
|
+
console.log(chalk.gray("\nCursor++ BYOK: after Cursor/Cursor++ upgrades, run `python .cstl/local/cursor2plus/patch_wpelc8.py --check-compat` before re-applying Method 2.5."));
|
|
34
36
|
}
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
+
const CSTL_BLOCK_START = "<!-- CSTL:START -->";
|
|
38
|
+
const CSTL_BLOCK_END = "<!-- CSTL:END -->";
|
|
39
|
+
const LEGACY_TRELLIS_BLOCK_START = "<!-- TRELLIS:START -->";
|
|
40
|
+
const LEGACY_TRELLIS_BLOCK_END = "<!-- TRELLIS:END -->";
|
|
37
41
|
const LEGACY_UNTRACKED_AGENTS_MD_BLOCK_HASHES = new Set([
|
|
38
|
-
// v0.5.0-beta.17 and earlier wrote AGENTS.md but did not hash-track it.
|
|
39
|
-
// This hash is the pristine Trellis-managed block before the Subagents
|
|
40
|
-
// section was added, so old untouched projects can be updated without a
|
|
41
|
-
// false "modified by you" conflict.
|
|
42
42
|
"c1f511b1cfc1902f2147da159f09cc51f380b0c9e341cdb3ac5dea5233f3e307",
|
|
43
43
|
]);
|
|
44
44
|
// Paths that should never be touched (true user data)
|
|
@@ -50,23 +50,37 @@ const PROTECTED_PATHS = [
|
|
|
50
50
|
`${DIR_NAMES.WORKFLOW}/.developer`,
|
|
51
51
|
`${DIR_NAMES.WORKFLOW}/.current-task`,
|
|
52
52
|
];
|
|
53
|
+
function getAgentsBlockMarkers(content) {
|
|
54
|
+
if (content.includes(CSTL_BLOCK_START)) {
|
|
55
|
+
return { start: CSTL_BLOCK_START, end: CSTL_BLOCK_END };
|
|
56
|
+
}
|
|
57
|
+
if (content.includes(LEGACY_TRELLIS_BLOCK_START)) {
|
|
58
|
+
return {
|
|
59
|
+
start: LEGACY_TRELLIS_BLOCK_START,
|
|
60
|
+
end: LEGACY_TRELLIS_BLOCK_END,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
53
65
|
function getTrellisManagedBlock(content) {
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
66
|
+
const markers = getAgentsBlockMarkers(content);
|
|
67
|
+
if (!markers) {
|
|
56
68
|
return null;
|
|
57
69
|
}
|
|
58
|
-
const
|
|
70
|
+
const start = content.indexOf(markers.start);
|
|
71
|
+
const end = content.indexOf(markers.end, start);
|
|
59
72
|
if (end === -1) {
|
|
60
73
|
return null;
|
|
61
74
|
}
|
|
62
|
-
return content.slice(start, end +
|
|
75
|
+
return content.slice(start, end + markers.end.length);
|
|
63
76
|
}
|
|
64
77
|
function replaceTrellisManagedBlock(existingContent, templateContent) {
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
78
|
+
const existingMarkers = getAgentsBlockMarkers(existingContent);
|
|
79
|
+
if (!existingMarkers) {
|
|
67
80
|
return null;
|
|
68
81
|
}
|
|
69
|
-
const
|
|
82
|
+
const existingStart = existingContent.indexOf(existingMarkers.start);
|
|
83
|
+
const existingEnd = existingContent.indexOf(existingMarkers.end, existingStart);
|
|
70
84
|
if (existingEnd === -1) {
|
|
71
85
|
return null;
|
|
72
86
|
}
|
|
@@ -76,7 +90,28 @@ function replaceTrellisManagedBlock(existingContent, templateContent) {
|
|
|
76
90
|
}
|
|
77
91
|
return (existingContent.slice(0, existingStart) +
|
|
78
92
|
templateBlock +
|
|
79
|
-
existingContent.slice(existingEnd +
|
|
93
|
+
existingContent.slice(existingEnd + existingMarkers.end.length));
|
|
94
|
+
}
|
|
95
|
+
function includesCstlRuntimeDirRename(migrations) {
|
|
96
|
+
return migrations.some((item) => item.type === "rename-dir" &&
|
|
97
|
+
item.from === ".trellis" &&
|
|
98
|
+
item.to === ".cstl");
|
|
99
|
+
}
|
|
100
|
+
function upgradeAgentsMdToCstlMarkers(cwd) {
|
|
101
|
+
const agentsPath = path.join(cwd, FILE_NAMES.AGENTS);
|
|
102
|
+
if (!fs.existsSync(agentsPath)) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const content = fs.readFileSync(agentsPath, "utf-8");
|
|
106
|
+
if (!content.includes(LEGACY_TRELLIS_BLOCK_START)) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const upgraded = content
|
|
110
|
+
.replace(LEGACY_TRELLIS_BLOCK_START, CSTL_BLOCK_START)
|
|
111
|
+
.replace(LEGACY_TRELLIS_BLOCK_END, CSTL_BLOCK_END)
|
|
112
|
+
.replace(/\.\/\.trellis\//g, "./.cstl/")
|
|
113
|
+
.replace(/(?<![A-Za-z0-9_])\.trellis\//g, ".cstl/");
|
|
114
|
+
fs.writeFileSync(agentsPath, upgraded, "utf-8");
|
|
80
115
|
}
|
|
81
116
|
function buildAgentsMdTemplate(cwd) {
|
|
82
117
|
const fullPath = path.join(cwd, FILE_NAMES.AGENTS);
|
|
@@ -289,7 +324,7 @@ function executeSafeFileDeletes(classified, cwd) {
|
|
|
289
324
|
return deleted;
|
|
290
325
|
}
|
|
291
326
|
/**
|
|
292
|
-
* Load update.skip paths from .
|
|
327
|
+
* Load update.skip paths from .cstl/config.yaml
|
|
293
328
|
*
|
|
294
329
|
* Parses simple YAML structure:
|
|
295
330
|
* update:
|
|
@@ -300,8 +335,8 @@ function executeSafeFileDeletes(classified, cwd) {
|
|
|
300
335
|
* @internal Exported for testing only
|
|
301
336
|
*/
|
|
302
337
|
export function loadUpdateSkipPaths(cwd) {
|
|
303
|
-
const configPath =
|
|
304
|
-
if (!fs.existsSync(configPath))
|
|
338
|
+
const configPath = workflowPath(cwd, "config.yaml");
|
|
339
|
+
if (!configPath || !fs.existsSync(configPath))
|
|
305
340
|
return [];
|
|
306
341
|
try {
|
|
307
342
|
const content = fs.readFileSync(configPath, "utf-8");
|
|
@@ -715,7 +750,9 @@ async function promptConflictResolution(file, options, applyToAll) {
|
|
|
715
750
|
*/
|
|
716
751
|
function createBackupDirPath(cwd) {
|
|
717
752
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, 19);
|
|
718
|
-
|
|
753
|
+
const workflowRoot = workflowPath(cwd, `.backup-${timestamp}`) ??
|
|
754
|
+
path.join(cwd, DIR_NAMES.WORKFLOW, `.backup-${timestamp}`);
|
|
755
|
+
return workflowRoot;
|
|
719
756
|
}
|
|
720
757
|
/**
|
|
721
758
|
* Backup a single file to the backup directory
|
|
@@ -817,15 +854,16 @@ function createFullBackup(cwd) {
|
|
|
817
854
|
* Update version file
|
|
818
855
|
*/
|
|
819
856
|
function updateVersionFile(cwd) {
|
|
820
|
-
const
|
|
857
|
+
const dirName = resolveWorkflowDirName(cwd) ?? DIR_NAMES.WORKFLOW;
|
|
858
|
+
const versionPath = path.join(cwd, dirName, ".version");
|
|
821
859
|
fs.writeFileSync(versionPath, VERSION);
|
|
822
860
|
}
|
|
823
861
|
/**
|
|
824
862
|
* Get current installed version
|
|
825
863
|
*/
|
|
826
864
|
function getInstalledVersion(cwd) {
|
|
827
|
-
const versionPath =
|
|
828
|
-
if (fs.existsSync(versionPath)) {
|
|
865
|
+
const versionPath = workflowPath(cwd, ".version");
|
|
866
|
+
if (versionPath && fs.existsSync(versionPath)) {
|
|
829
867
|
return fs.readFileSync(versionPath, "utf-8").trim();
|
|
830
868
|
}
|
|
831
869
|
return "unknown";
|
|
@@ -957,7 +995,7 @@ function classifyMigrations(migrations, cwd, hashes, templates) {
|
|
|
957
995
|
continue;
|
|
958
996
|
}
|
|
959
997
|
// For non-rename types, also block writing TO protected paths
|
|
960
|
-
// rename/rename-dir are allowed to target protected paths (e.g., 0.2.0 renames into .
|
|
998
|
+
// rename/rename-dir are allowed to target protected paths (e.g., 0.2.0 renames into .cstl/workspace)
|
|
961
999
|
if (item.to &&
|
|
962
1000
|
isProtectedPath(item.to) &&
|
|
963
1001
|
item.type !== "rename" &&
|
|
@@ -1310,7 +1348,7 @@ async function executeMigrations(classified, cwd, options) {
|
|
|
1310
1348
|
}
|
|
1311
1349
|
// For `backup-rename`, leave an inline .backup copy of the user's modified
|
|
1312
1350
|
// original next to the new location (for rename) or in place (for delete).
|
|
1313
|
-
// This is in addition to the full project snapshot at .
|
|
1351
|
+
// This is in addition to the full project snapshot at .cstl/.backup-*/;
|
|
1314
1352
|
// the inline copy is more discoverable when the user wants to diff or merge
|
|
1315
1353
|
// their customizations against the new template.
|
|
1316
1354
|
if (item.type === "rename" && item.to) {
|
|
@@ -1335,7 +1373,7 @@ async function executeMigrations(classified, cwd, options) {
|
|
|
1335
1373
|
const filePath = path.join(cwd, item.from);
|
|
1336
1374
|
if (action === "backup-rename") {
|
|
1337
1375
|
// Keep a .backup copy in place before deletion so the user can recover
|
|
1338
|
-
// inline without digging through .
|
|
1376
|
+
// inline without digging through .cstl/.backup-*/.
|
|
1339
1377
|
fs.copyFileSync(filePath, filePath + ".backup");
|
|
1340
1378
|
}
|
|
1341
1379
|
fs.unlinkSync(filePath);
|
|
@@ -1472,8 +1510,8 @@ export async function update(options) {
|
|
|
1472
1510
|
});
|
|
1473
1511
|
finishRollout(options, report);
|
|
1474
1512
|
};
|
|
1475
|
-
// Check if
|
|
1476
|
-
if (!
|
|
1513
|
+
// Check if cursor-trellis is initialized (.cstl/ or legacy .trellis/)
|
|
1514
|
+
if (!isWorkflowInitialized(cwd)) {
|
|
1477
1515
|
console.log(chalk.red("Error: Trellis not initialized in this directory."));
|
|
1478
1516
|
console.log(chalk.gray("Run 'cstl init' first."));
|
|
1479
1517
|
emitEarly("blocked_not_initialized");
|
|
@@ -1839,14 +1877,31 @@ export async function update(options) {
|
|
|
1839
1877
|
}
|
|
1840
1878
|
// Execute migrations if --migrate flag is set
|
|
1841
1879
|
if (options.migrate && classifiedMigrations) {
|
|
1880
|
+
const pendingRenameItems = [
|
|
1881
|
+
...classifiedMigrations.auto,
|
|
1882
|
+
...classifiedMigrations.confirm,
|
|
1883
|
+
...classifiedMigrations.conflict,
|
|
1884
|
+
];
|
|
1885
|
+
if (includesCstlRuntimeDirRename(pendingRenameItems)) {
|
|
1886
|
+
const assessment = assessCstlDirectoryMigrate(cwd, {
|
|
1887
|
+
forceCstlMigrate: options.forceCstlMigrate,
|
|
1888
|
+
});
|
|
1889
|
+
if (!assessment.ok) {
|
|
1890
|
+
console.error(chalk.red("Error:"), assessment.reason);
|
|
1891
|
+
process.exit(1);
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1842
1894
|
migrationApplyResult = await executeMigrations(classifiedMigrations, cwd, {
|
|
1843
1895
|
force: options.force,
|
|
1844
1896
|
skipAll: options.skipAll,
|
|
1845
1897
|
});
|
|
1846
1898
|
printMigrationResult(migrationApplyResult);
|
|
1899
|
+
if (includesCstlRuntimeDirRename(pendingRenameItems)) {
|
|
1900
|
+
upgradeAgentsMdToCstlMarkers(cwd);
|
|
1901
|
+
}
|
|
1847
1902
|
// Hardcoded: Rename traces-*.md to journal-*.md in workspace directories
|
|
1848
1903
|
// Why hardcoded: The migration system only supports fixed path renames, not pattern-based.
|
|
1849
|
-
// traces-*.md files are in .
|
|
1904
|
+
// traces-*.md files are in .cstl/workspace/{developer}/ with variable developer names
|
|
1850
1905
|
// and variable file numbers (traces-1.md, traces-2.md, etc.), so we can't enumerate them
|
|
1851
1906
|
// in the migration manifest. This is a one-time migration for the 0.2.0 naming redesign.
|
|
1852
1907
|
const workspaceDir = path.join(cwd, PATHS.WORKSPACE);
|