@blxzer/cursor-trellis 0.3.2 → 0.3.4
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 +21 -0
- package/README.zh-CN.md +1 -0
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +59 -5
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/migrations/manifests/0.3.2.json +16 -0
- package/dist/migrations/manifests/0.3.3.json +9 -0
- package/dist/migrations/manifests/0.3.4.json +9 -0
- package/dist/templates/common/bundled-skills/cstl-meta/references/platform-files/hooks-and-settings.md +2 -1
- package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +1 -1
- package/dist/templates/cursor/fixtures/expected-rules.js +5 -0
- package/dist/templates/cursor/fixtures/expected-rules.js.map +1 -1
- package/dist/templates/cursor/hooks.json +7 -0
- package/dist/templates/cursor/rules/cstl-session-rename.mdc +31 -0
- package/dist/templates/markdown/spec/guides/cursor-trellis-release-coexistence-guide.md.txt +166 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +1 -0
- package/dist/templates/shared-hooks/index.d.ts +1 -1
- package/dist/templates/shared-hooks/index.d.ts.map +1 -1
- package/dist/templates/shared-hooks/index.js +1 -0
- package/dist/templates/shared-hooks/index.js.map +1 -1
- package/dist/templates/shared-hooks/rename-session-for-task.py +231 -0
- package/dist/templates/trellis/tasks/templates/release-execution/design.md +60 -60
- package/dist/utils/agents-md.d.ts +10 -0
- package/dist/utils/agents-md.d.ts.map +1 -1
- package/dist/utils/agents-md.js +25 -0
- package/dist/utils/agents-md.js.map +1 -1
- package/dist/utils/template-hash.d.ts.map +1 -1
- package/dist/utils/template-hash.js +39 -8
- package/dist/utils/template-hash.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,27 @@ SemVer: [semver.org](https://semver.org/spec/v2.0.0.html).
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.3.4] - 2026-07-04
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **feat(cursor)**: auto-rename the **main** Agent chat tab to the cstl task **directory name** after `task.py select` or `task.py start-execution --approved` (`rename-session-for-task.py` `afterShellExecution` hook + `cstl-session-rename.mdc` rule). Uses `cursor-app-control` `rename_chat` when available; skips silently when MCP is missing. Does not rename on `task.py create`. Native and BYOK share the same path.
|
|
19
|
+
|
|
20
|
+
## [0.3.3] - 2026-07-04
|
|
21
|
+
|
|
22
|
+
Follow-up polish after 0.3.2 coexistence release: closes known limitations from the runtime-isolation task.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **feat(uninstall)**: `cstl uninstall` strips the `<!-- CSTL:START -->` managed block from `AGENTS.md` while preserving an upstream `<!-- TRELLIS:START -->` block and user content (`removeCstlManagedBlock`).
|
|
27
|
+
- **feat(hash)**: `.template-hashes.json` tracks **CSTL block hash only** for `AGENTS.md` — upstream TRELLIS block or out-of-block user edits no longer false-positive as "modified" on `cstl update` in coexistence repos.
|
|
28
|
+
- **docs(spec)**: `.cstl/spec/guides/cursor-trellis-release-coexistence-guide.md` — npm publish runbook (`publish-packages.js`), `cstl-v*` tag convention, coexistence scenario matrix.
|
|
29
|
+
- **ci**: `.github/workflows/publish.yml` — publish on `cstl-v*` tag push (requires `NPM_TOKEN` secret).
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
|
|
33
|
+
- **docs(maintainers)**: release index points at the spec guide + `cstl-v*` / CI publish notes.
|
|
34
|
+
|
|
14
35
|
## [0.3.2] - 2026-07-04
|
|
15
36
|
|
|
16
37
|
> **0.3.1 was withdrawn** shortly after publish: the initial `npm publish` did not rewrite the `workspace:*` dependency on `@blxzer/cursor-trellis-core` (and core@0.3.1 was not published alongside), so 0.3.1 was uninstallable (`EUNSUPPORTEDPROTOCOL`). 0.3.2 reissues the same content via the proper `pnpm publish` orchestration (`publish-packages.js` publishes core first, then cli, rewriting `workspace:*` to the resolved version).
|
package/README.zh-CN.md
CHANGED
|
@@ -197,6 +197,7 @@ smart-search --version
|
|
|
197
197
|
| --- | --- |
|
|
198
198
|
| `pnpm build` | `tsc` + 拷贝模板 |
|
|
199
199
|
| `pnpm test` | Vitest |
|
|
200
|
+
| `pnpm mirror-check` | Dogfood `.cursor` / `.agents` vs templates |
|
|
200
201
|
| `pnpm run sync:smart-search` | 刷新 vendor |
|
|
201
202
|
|
|
202
203
|
Release 与 npm 发布流程**不在**公开 README 中;见内部维护文档。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA2BH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuWD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG7E"}
|
|
@@ -21,11 +21,12 @@ 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) {
|
|
@@ -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) {
|
|
@@ -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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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.3.2",
|
|
3
|
+
"description": "Reissue 0.3.1 runtime isolation with publishable core/cli pair (.cstl/)",
|
|
4
|
+
"breaking": true,
|
|
5
|
+
"recommendMigrate": true,
|
|
6
|
+
"changelog": "**@blxzer/cursor-trellis 0.3.2**\n\nReissues 0.3.1 content with a publishable `@blxzer/cursor-trellis-core` pair. Runtime root `.trellis/` → **`.cstl/`** for coexistence with upstream Trellis.\n\n```bash\nnpm install -g @blxzer/cursor-trellis@0.3.2\ncstl update --migrate\n```",
|
|
7
|
+
"migrations": [
|
|
8
|
+
{
|
|
9
|
+
"type": "rename-dir",
|
|
10
|
+
"from": ".trellis",
|
|
11
|
+
"to": ".cstl",
|
|
12
|
+
"description": "v0.3.2: cursor-trellis runtime dir isolation (.trellis -> .cstl)"
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"notes": "0.3.1 was withdrawn from npm; use 0.3.2+ for the .cstl/ migration."
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.3.3",
|
|
3
|
+
"description": "Coexistence polish: AGENTS CSTL block uninstall, hash scope, publish CI",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**@blxzer/cursor-trellis 0.3.3**\n\n- feat(uninstall): strip CSTL managed block from AGENTS.md while preserving upstream TRELLIS block\n- feat(hash): AGENTS.md template hash tracks CSTL block only\n- docs(spec): cursor-trellis release coexistence guide\n- ci: publish workflow on cstl-v* tags",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Run `cstl update` to sync templates. No `--migrate` required."
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.3.4",
|
|
3
|
+
"description": "Rename main Cursor chat to cstl task directory on select/start-execution",
|
|
4
|
+
"breaking": false,
|
|
5
|
+
"recommendMigrate": false,
|
|
6
|
+
"changelog": "**@blxzer/cursor-trellis 0.3.4**\n\n- feat(cursor): auto-rename main Agent chat tab to task directory name after `task.py select` or `start-execution --approved` (`rename-session-for-task.py` + `cstl-session-rename.mdc`). Uses `cursor-app-control` `rename_chat` when available; silent skip when MCP missing. No rename on `task.py create`.",
|
|
7
|
+
"migrations": [],
|
|
8
|
+
"notes": "Run `cstl update` to sync new hook, rule, and hooks.json wiring."
|
|
9
|
+
}
|
|
@@ -27,8 +27,9 @@ Whether legacy settings/config files exist in a project depends on which histori
|
|
|
27
27
|
| `inject-workflow-state.py` | Parses `[workflow-state:STATUS]` blocks in `.cstl/workflow.md` and emits the body matching the selected task status. Falls back to `Refer to workflow.md for current step.` when no matching block exists. |
|
|
28
28
|
| `inject-subagent-context.py` | Injects PRD, JSONL context, and related spec/research into sub-agents. |
|
|
29
29
|
| `inject-shell-session-context.py` | Lets shell commands inherit Trellis session identity. |
|
|
30
|
+
| `rename-session-for-task.py` | After successful `task.py select` / `start-execution --approved`, prompts main-session rename to task directory name (best-effort `rename_chat`). |
|
|
30
31
|
|
|
31
|
-
Cursor exposes sessionStart, preToolUse on Task/Subagent, beforeShellExecution, and stop events. Confirm against the current Cursor release before wiring a new event name; the available event surface has evolved over time and historical platform documentation may be stale.
|
|
32
|
+
Cursor exposes sessionStart, preToolUse on Task/Subagent, beforeShellExecution, afterShellExecution, and stop events. Confirm against the current Cursor release before wiring a new event name; the available event surface has evolved over time and historical platform documentation may be stale.
|
|
32
33
|
|
|
33
34
|
## Local Change Scenarios
|
|
34
35
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expected-rules.d.ts","sourceRoot":"","sources":["../../../../src/templates/cursor/fixtures/expected-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"expected-rules.d.ts","sourceRoot":"","sources":["../../../../src/templates/cursor/fixtures/expected-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,EAAE,YAAY,EAyBvC,CAAC"}
|
|
@@ -22,5 +22,10 @@ export const expectedRules = [
|
|
|
22
22
|
requiredSections: ["Native", "BYOK", "codegraph", "smart-search"],
|
|
23
23
|
minBytes: 600,
|
|
24
24
|
},
|
|
25
|
+
{
|
|
26
|
+
filename: "cstl-session-rename.mdc",
|
|
27
|
+
requiredSections: ["rename_chat", "select", "start-execution", "skip silently"],
|
|
28
|
+
minBytes: 300,
|
|
29
|
+
},
|
|
25
30
|
];
|
|
26
31
|
//# sourceMappingURL=expected-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expected-rules.js","sourceRoot":"","sources":["../../../../src/templates/cursor/fixtures/expected-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C;QACE,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE;YAChB,eAAe;YACf,qBAAqB;YACrB,cAAc;SACf;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,QAAQ,EAAE,4BAA4B;QACtC,gBAAgB,EAAE,CAAC,SAAS,EAAE,0BAA0B,EAAE,KAAK,CAAC;QAChE,QAAQ,EAAE,GAAG;KACd;IACD;QACE,QAAQ,EAAE,uBAAuB;QACjC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC;QACjE,QAAQ,EAAE,GAAG;KACd;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"expected-rules.js","sourceRoot":"","sources":["../../../../src/templates/cursor/fixtures/expected-rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C;QACE,QAAQ,EAAE,iBAAiB;QAC3B,gBAAgB,EAAE;YAChB,eAAe;YACf,qBAAqB;YACrB,cAAc;SACf;QACD,QAAQ,EAAE,GAAG;KACd;IACD;QACE,QAAQ,EAAE,4BAA4B;QACtC,gBAAgB,EAAE,CAAC,SAAS,EAAE,0BAA0B,EAAE,KAAK,CAAC;QAChE,QAAQ,EAAE,GAAG;KACd;IACD;QACE,QAAQ,EAAE,uBAAuB;QACjC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC;QACjE,QAAQ,EAAE,GAAG;KACd;IACD;QACE,QAAQ,EAAE,yBAAyB;QACnC,gBAAgB,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,EAAE,eAAe,CAAC;QAC/E,QAAQ,EAAE,GAAG;KACd;CACF,CAAC"}
|
|
@@ -26,6 +26,13 @@
|
|
|
26
26
|
"timeout": 5
|
|
27
27
|
}
|
|
28
28
|
],
|
|
29
|
+
"afterShellExecution": [
|
|
30
|
+
{
|
|
31
|
+
"command": "{{PYTHON_CMD}} .cursor/hooks/rename-session-for-task.py",
|
|
32
|
+
"matcher": "task\\.py.*(select|start-execution)",
|
|
33
|
+
"timeout": 5
|
|
34
|
+
}
|
|
35
|
+
],
|
|
29
36
|
"stop": [
|
|
30
37
|
{
|
|
31
38
|
"command": "{{PYTHON_CMD}} .cursor/hooks/research-end-retrieval-pack.py",
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Rename Cursor chat to cstl task directory name after select or start-execution (cursor-app-control rename_chat)"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Trellis session rename (Cursor main session)
|
|
7
|
+
|
|
8
|
+
Encourage **one task per main Agent chat**. Subagent / Task child windows are out of scope.
|
|
9
|
+
|
|
10
|
+
## When to rename
|
|
11
|
+
|
|
12
|
+
After **you** successfully run either command in the **main** session (same turn or immediately after shell output):
|
|
13
|
+
|
|
14
|
+
- `python ./.cstl/scripts/task.py select <task-dir>`
|
|
15
|
+
- `python ./.cstl/scripts/task.py start-execution <task-dir> --approved`
|
|
16
|
+
|
|
17
|
+
Do **not** rename for `task.py create` alone (create does not bind the session).
|
|
18
|
+
|
|
19
|
+
## Title
|
|
20
|
+
|
|
21
|
+
Use the task **directory name** only (e.g. `07-04-cstl-session-rename`), not `task.json` `title`.
|
|
22
|
+
|
|
23
|
+
## How
|
|
24
|
+
|
|
25
|
+
1. If `cursor-app-control` MCP `rename_chat` is available, call it once with `title` = directory name.
|
|
26
|
+
2. If the tool is **not** available (BYOK or other environments), **skip silently** — no user prompt to rename manually.
|
|
27
|
+
3. Do not rename repeatedly for the same task in the same session unless the user switched to a different task directory.
|
|
28
|
+
|
|
29
|
+
## Native vs BYOK
|
|
30
|
+
|
|
31
|
+
Same rule for both. BYOK availability of `rename_chat` is environment-dependent; never fail the task workflow when rename is unavailable.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# cursor-trellis Release & Coexistence Guide
|
|
2
|
+
|
|
3
|
+
> **Audience**: Maintainers and agents working on `@blxzer/cursor-trellis` in `D:\MyHarness\cursor-trellis`.
|
|
4
|
+
> **Scope**: npm publish runbook, git tag naming (`cstl-v*`), and upstream Trellis coexistence semantics (0.3.2+).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. npm publish runbook (mandatory)
|
|
9
|
+
|
|
10
|
+
cursor-trellis ships **two** npm packages at the **same version**:
|
|
11
|
+
|
|
12
|
+
| Package | Role |
|
|
13
|
+
| --- | --- |
|
|
14
|
+
| `@blxzer/cursor-trellis-core` | SDK (must publish **first**) |
|
|
15
|
+
| `@blxzer/cursor-trellis` | CLI (depends on core) |
|
|
16
|
+
|
|
17
|
+
### Do
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cd D:\MyHarness\cursor-trellis\packages\cli
|
|
21
|
+
|
|
22
|
+
# 1. Version parity (cli + core package.json must match)
|
|
23
|
+
cd ../.. && pnpm release:check
|
|
24
|
+
|
|
25
|
+
# 2. Optional: dry-run pack shape (rewrites workspace:* in tarball)
|
|
26
|
+
node packages/cli/scripts/publish-packages.js --dry-run
|
|
27
|
+
|
|
28
|
+
# 3. Publish both packages in dependency order
|
|
29
|
+
node packages/cli/scripts/publish-packages.js
|
|
30
|
+
|
|
31
|
+
# 4. Verify registry visibility
|
|
32
|
+
node packages/cli/scripts/release-preflight.js verify-npm --package all
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`publish-packages.js` uses **`pnpm publish`** (not bare `npm publish`). pnpm rewrites `workspace:*` dependencies to the resolved semver (e.g. `"@blxzer/cursor-trellis-core": "0.3.3"`). Bare `npm publish` leaves `workspace:*` in the tarball → **`EUNSUPPORTEDPROTOCOL`** on install.
|
|
36
|
+
|
|
37
|
+
### Do not
|
|
38
|
+
|
|
39
|
+
- **`npm publish`** from `packages/cli` alone (0.3.1 incident: cli tarball had `workspace:*`, core was missing).
|
|
40
|
+
- Publish cli before core (cli install fails with ETARGET until core exists).
|
|
41
|
+
- Skip `prepublishOnly` (runs test + build + copy-release-assets on cli).
|
|
42
|
+
|
|
43
|
+
### Preflight commands
|
|
44
|
+
|
|
45
|
+
| Command | Purpose |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| `release-preflight.js check-versions` | cli/core version match |
|
|
48
|
+
| `release-preflight.js verify-packed-cli` | Packed cli resolves core to exact semver (not `workspace:*`) |
|
|
49
|
+
| `release-preflight.js verify-npm` | Post-publish registry check |
|
|
50
|
+
| `release-preflight.js publish-plan` | Idempotent CI plan (skip already-published versions) |
|
|
51
|
+
|
|
52
|
+
### Withdrawn / deprecated versions
|
|
53
|
+
|
|
54
|
+
- **0.3.1 cli**: withdrawn (unpublish); use **0.3.2+**.
|
|
55
|
+
- **0.3.1 core**: cannot unpublish (npm policy); **`npm deprecate`** applied — use `@latest`.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 2. Git tags (`cstl-v*` prefix)
|
|
60
|
+
|
|
61
|
+
This repo shares git history with legacy `@blxzer/trellis` (1.x). Old tags `v0.3.x`–`v0.6.x` point at **trellis** commits, not cursor-trellis releases.
|
|
62
|
+
|
|
63
|
+
| Tag pattern | Product | Example |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| `v*` (legacy) | `@blxzer/trellis` | `v0.3.2` @ 2026-03 trellis commit |
|
|
66
|
+
| **`cstl-v*`** | `@blxzer/cursor-trellis` | `cstl-v0.3.2` @ cursor-trellis release commit |
|
|
67
|
+
|
|
68
|
+
`packages/cli/scripts/release.js` tags releases as **`cstl-v${version}`** (since 0.3.2 tag-hygiene commit).
|
|
69
|
+
|
|
70
|
+
`release-preflight tagVersionFromEnv` extracts semver from tag suffix (`cstl-v0.3.2` → `0.3.2`).
|
|
71
|
+
|
|
72
|
+
**CI publish workflow** (`.github/workflows/publish.yml`): triggers on `push.tags: cstl-v*`. Requires repo secret `NPM_TOKEN`.
|
|
73
|
+
|
|
74
|
+
Do **not** delete legacy `v*` tags — they are historical trellis releases.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 3. Coexistence with upstream mindfold-ai/Trellis
|
|
79
|
+
|
|
80
|
+
**Product decision**: Both are workflow frameworks. **Cursor configuration belongs to cursor-trellis**. Upstream Trellis keeps `.trellis/` and non-Cursor platform dirs; cursor-trellis uses `.cstl/` + `.cursor/cstl-*`.
|
|
81
|
+
|
|
82
|
+
### Scenario matrix
|
|
83
|
+
|
|
84
|
+
| Scenario | User state | Action |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| 1 Pure cstl | Only cursor-trellis (legacy `.trellis/` runtime) | `cstl update --migrate` → rename `.trellis/` → `.cstl/` |
|
|
87
|
+
| 2 Coexistence | Upstream `.trellis/` + wants Cursor cstl | `cstl init --cursor` → creates `.cstl/`, **takes over `.cursor/`**, AGENTS dual-block |
|
|
88
|
+
| 3 Fresh | Never used either | `cstl init --cursor` → `.cstl/` only |
|
|
89
|
+
|
|
90
|
+
### `cstl init` coexistence mode
|
|
91
|
+
|
|
92
|
+
When `.trellis/` exists and `.cstl/` does not:
|
|
93
|
+
|
|
94
|
+
1. Creates `.cstl/` (does not touch `.trellis/`).
|
|
95
|
+
2. **Force-writes** `.cursor/` (hooks, rules, commands) even under `-y`.
|
|
96
|
+
3. **AGENTS.md dual-block**: preserves `<!-- TRELLIS:START -->`, adds/refreshes `<!-- CSTL:START -->` (`insertCstlManagedBlock`).
|
|
97
|
+
4. Prints banner: do **not** run `cstl update --migrate` (would rename upstream `.trellis/`).
|
|
98
|
+
|
|
99
|
+
### Migrate gate (`assessCstlDirectoryMigrate`)
|
|
100
|
+
|
|
101
|
+
Conservative by default for `.trellis/` → `.cstl/` rename:
|
|
102
|
+
|
|
103
|
+
| Signal | Meaning |
|
|
104
|
+
| --- | --- |
|
|
105
|
+
| F1 | `.cursor/commands/cstl-*.md` |
|
|
106
|
+
| F2 | `.cursor/rules/cstl-triage.mdc` |
|
|
107
|
+
| F3 | `.trellis/scripts/common/cli_adapter.py` contains `cstl` |
|
|
108
|
+
| U1 | `.claude/agents/trellis-implement.md` |
|
|
109
|
+
| U2 | Non-Cursor platform `trellis-*` agents/skills |
|
|
110
|
+
| U4 | `.cursor/commands/trellis-*.md` without cstl fingerprint |
|
|
111
|
+
|
|
112
|
+
- No F fingerprint → **abort** (protect scenario 2).
|
|
113
|
+
- F + U mixed → **abort** (manual split).
|
|
114
|
+
- Escape: `cstl update --force-cstl-migrate`.
|
|
115
|
+
|
|
116
|
+
### AGENTS.md hash tracking (block-level)
|
|
117
|
+
|
|
118
|
+
`.template-hashes.json` stores **CSTL block hash only** for `AGENTS.md`, not the whole file. Upstream edits to TRELLIS block or user content outside CSTL block do **not** trigger "modified" on `cstl update`.
|
|
119
|
+
|
|
120
|
+
Implementation: `template-hash.ts` → `hashContentForPath` + `extractBlock(CSTL:START/END)`.
|
|
121
|
+
|
|
122
|
+
### `cstl uninstall` in coexistence repos
|
|
123
|
+
|
|
124
|
+
- Strips **CSTL block only** (`removeCstlManagedBlock`); keeps TRELLIS block + user content.
|
|
125
|
+
- If file was only the CSTL block → deletes `AGENTS.md`.
|
|
126
|
+
- Does **not** restore upstream `.cursor/` files overwritten during init (by design: cstl owned Cursor).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## 4. Post-release dogfood checklist
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm install -g @blxzer/cursor-trellis@latest
|
|
134
|
+
cstl --version
|
|
135
|
+
|
|
136
|
+
# Each dogfood project (no --migrate unless upgrading from pre-0.3.1):
|
|
137
|
+
cd <project>
|
|
138
|
+
cstl update --skip-readiness --skip-all
|
|
139
|
+
# Confirm .cstl/.version matches npm latest
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Sandbox smoke (from empty dir):
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm init -y && npm install @blxzer/cursor-trellis@latest
|
|
146
|
+
npx cstl init --yes --skip-readiness --cursor
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 5. Related files (source of truth)
|
|
152
|
+
|
|
153
|
+
| Topic | Path |
|
|
154
|
+
| --- | --- |
|
|
155
|
+
| Publish orchestration | `cursor-trellis/packages/cli/scripts/publish-packages.js` |
|
|
156
|
+
| Release preflight | `cursor-trellis/packages/cli/scripts/release-preflight.js` |
|
|
157
|
+
| Tag prefix | `cursor-trellis/packages/cli/scripts/release.js` |
|
|
158
|
+
| Coexistence init | `packages/cli/src/commands/init.ts` |
|
|
159
|
+
| Migrate gate | `packages/cli/src/utils/workflow-ownership.ts` |
|
|
160
|
+
| AGENTS helpers | `packages/cli/src/utils/agents-md.ts` |
|
|
161
|
+
| Block-level hash | `packages/cli/src/utils/template-hash.ts` |
|
|
162
|
+
| Uninstall strip | `packages/cli/src/commands/uninstall.ts` |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
**Last updated**: 2026-07-04 (0.3.3 follow-up: uninstall CSTL strip + block hash + this guide).
|
|
@@ -29,6 +29,7 @@ These guides help you **ask the right questions before coding**.
|
|
|
29
29
|
| [Cursor subagent policy](./cursor-subagent-policy.md) | Task tool scenes, Agent mode, `model_policy: cursor-configured`, Cursor++ | Parent/Child dispatch, research/implement/check, parallel execution |
|
|
30
30
|
| [Execution strategy](./execution-strategy.md) | `suggest-execution-strategy`, rules JSON, inline vs worker vs child-task | Writing `implement.md` contract, Phase 2 dispatch |
|
|
31
31
|
| [Cursor context injection guide](./cursor-context-injection-guide.md) | Which Cursor channels reach the model (sessionStart bug, .cursor/rules, AGENTS.md) | "Agent ignored instructions" on Cursor, adding always-visible rules |
|
|
32
|
+
| [cursor-trellis release & coexistence](./cursor-trellis-release-coexistence-guide.md) | npm publish runbook, `cstl-v*` tags, upstream Trellis coexistence | Releasing cstl, scenario 2 init, migrate gate, uninstall AGENTS strip |
|
|
32
33
|
|
|
33
34
|
---
|
|
34
35
|
|
|
@@ -11,7 +11,7 @@ export interface HookScript {
|
|
|
11
11
|
/** Script content — no placeholders, ready to write directly */
|
|
12
12
|
content: string;
|
|
13
13
|
}
|
|
14
|
-
export type SharedHookName = "session-start.py" | "inject-shell-session-context.py" | "inject-retrieval-plan.py" | "inject-workflow-state.py" | "inject-subagent-context.py" | "research-end-retrieval-pack.py";
|
|
14
|
+
export type SharedHookName = "session-start.py" | "inject-shell-session-context.py" | "rename-session-for-task.py" | "inject-retrieval-plan.py" | "inject-workflow-state.py" | "inject-subagent-context.py" | "research-end-retrieval-pack.py";
|
|
15
15
|
export type SharedHookPlatform = "claude" | "cursor" | "codex" | "gemini" | "qoder" | "copilot" | "codebuddy" | "droid" | "kiro";
|
|
16
16
|
/**
|
|
17
17
|
* Which shared hooks each platform actually invokes. Single source of truth
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,iCAAiC,GACjC,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,gCAAgC,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,kBAAkB,EAClB,SAAS,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,iCAAiC,GACjC,4BAA4B,GAC5B,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,gCAAgC,CAAC;AAErC,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,CAAC;AAEX;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,kBAAkB,EAClB,SAAS,cAAc,EAAE,CAiC1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,EAAE,CAWnD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AA6BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,MAAM,EAAE;QACN,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;QAC5B,gCAAgC;KACjC;IACD,MAAM,EAAE;QACN,kBAAkB;QAClB,iCAAiC;QACjC,4BAA4B;QAC5B,0BAA0B;QAC1B,4BAA4B;QAC5B,gCAAgC;KACjC;IACD,KAAK,EAAE,CAAC,0BAA0B,CAAC;IACnC,MAAM,EAAE,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACxD,KAAK,EAAE,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACvD,OAAO,EAAE,CAAC,0BAA0B,CAAC;IACrC,SAAS,EAAE;QACT,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;QAC5B,gCAAgC;KACjC;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;QAC5B,gCAAgC;KACjC;IACD,IAAI,EAAE,CAAC,4BAA4B,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,EAAE,CAAC;IAEV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Cursor afterShellExecution hook: prompt session rename after task bind/start.
|
|
3
|
+
|
|
4
|
+
When the agent successfully runs `task.py select` or
|
|
5
|
+
`task.py start-execution <task> --approved`, emit an agent_message (best-effort)
|
|
6
|
+
so the main session calls cursor-app-control `rename_chat` with the task
|
|
7
|
+
directory name. MCP unavailable → agent skips silently per cstl-session-rename rule.
|
|
8
|
+
"""
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import hashlib
|
|
12
|
+
import json
|
|
13
|
+
import os
|
|
14
|
+
import re
|
|
15
|
+
import shlex
|
|
16
|
+
import sys
|
|
17
|
+
from pathlib import Path
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
DIR_WORKFLOW = ".cstl"
|
|
21
|
+
DIR_RUNTIME = ".runtime"
|
|
22
|
+
DIR_SESSION_RENAME = "session-rename"
|
|
23
|
+
ANSI_ESCAPE = re.compile(r"\x1b\[[0-9;]*m")
|
|
24
|
+
CONTEXT_IDENTITY_KEYS = (
|
|
25
|
+
"session_id",
|
|
26
|
+
"sessionId",
|
|
27
|
+
"sessionID",
|
|
28
|
+
"conversation_id",
|
|
29
|
+
"conversationId",
|
|
30
|
+
"conversationID",
|
|
31
|
+
"transcript_path",
|
|
32
|
+
"transcriptPath",
|
|
33
|
+
"transcript",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _string_value(value: Any) -> str | None:
|
|
38
|
+
if isinstance(value, str):
|
|
39
|
+
stripped = value.strip()
|
|
40
|
+
return stripped or None
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _strip_ansi(text: str) -> str:
|
|
45
|
+
return ANSI_ESCAPE.sub("", text)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _find_trellis_root(start: Path) -> Path | None:
|
|
49
|
+
current = start.resolve()
|
|
50
|
+
while True:
|
|
51
|
+
if (current / DIR_WORKFLOW).is_dir():
|
|
52
|
+
return current
|
|
53
|
+
if current == current.parent:
|
|
54
|
+
return None
|
|
55
|
+
current = current.parent
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _task_py_token_index(tokens: list[str]) -> int | None:
|
|
59
|
+
for index, token in enumerate(tokens):
|
|
60
|
+
if Path(token.strip("\"'")).name == "task.py":
|
|
61
|
+
return index
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def parse_rename_intent(command: str) -> dict[str, str] | None:
|
|
66
|
+
"""Return subcommand + task_ref when command should trigger rename."""
|
|
67
|
+
try:
|
|
68
|
+
tokens = shlex.split(command, posix=os.name != "nt")
|
|
69
|
+
except ValueError:
|
|
70
|
+
return None
|
|
71
|
+
|
|
72
|
+
task_index = _task_py_token_index(tokens)
|
|
73
|
+
if task_index is None or task_index + 1 >= len(tokens):
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
subcommand = tokens[task_index + 1]
|
|
77
|
+
if subcommand == "select":
|
|
78
|
+
if task_index + 2 >= len(tokens):
|
|
79
|
+
return None
|
|
80
|
+
return {"subcommand": subcommand, "task_ref": tokens[task_index + 2]}
|
|
81
|
+
if subcommand == "start-execution":
|
|
82
|
+
if "--approved" not in tokens:
|
|
83
|
+
return None
|
|
84
|
+
if task_index + 2 >= len(tokens):
|
|
85
|
+
return None
|
|
86
|
+
task_ref = tokens[task_index + 2]
|
|
87
|
+
if task_ref.startswith("-"):
|
|
88
|
+
return None
|
|
89
|
+
return {"subcommand": subcommand, "task_ref": task_ref}
|
|
90
|
+
return None
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def task_directory_name(task_ref: str) -> str:
|
|
94
|
+
"""Use task folder basename as the chat title."""
|
|
95
|
+
cleaned = task_ref.strip().strip("\"'")
|
|
96
|
+
return Path(cleaned.replace("\\", "/")).name
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def shell_output_succeeded(subcommand: str, output: str) -> bool:
|
|
100
|
+
text = _strip_ansi(output or "")
|
|
101
|
+
if "Error:" in text or "error:" in text.lower():
|
|
102
|
+
return False
|
|
103
|
+
if subcommand == "select":
|
|
104
|
+
return "Selected task:" in text or "✓ Selected task" in text
|
|
105
|
+
if subcommand == "start-execution":
|
|
106
|
+
return "Execution approved" in text or "✓ Execution approved" in text
|
|
107
|
+
return False
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _safe_context_filename(context_key: str) -> str:
|
|
111
|
+
digest = hashlib.sha256(context_key.encode("utf-8")).hexdigest()[:24]
|
|
112
|
+
return f"{digest}.json"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def _rename_state_dir(root: Path) -> Path:
|
|
116
|
+
return root / DIR_WORKFLOW / DIR_RUNTIME / DIR_SESSION_RENAME
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def _load_rename_state(path: Path) -> dict[str, Any]:
|
|
120
|
+
if not path.is_file():
|
|
121
|
+
return {}
|
|
122
|
+
try:
|
|
123
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
124
|
+
except (json.JSONDecodeError, OSError):
|
|
125
|
+
return {}
|
|
126
|
+
return data if isinstance(data, dict) else {}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def _should_emit_rename(state: dict[str, Any], title: str) -> bool:
|
|
130
|
+
return state.get("last_title") != title
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def _write_rename_state(path: Path, context_key: str, title: str) -> None:
|
|
134
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
135
|
+
payload = {
|
|
136
|
+
"context_key": context_key,
|
|
137
|
+
"last_title": title,
|
|
138
|
+
}
|
|
139
|
+
path.write_text(
|
|
140
|
+
json.dumps(payload, indent=2, ensure_ascii=False) + "\n",
|
|
141
|
+
encoding="utf-8",
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def _agent_rename_message(title: str) -> str:
|
|
146
|
+
return (
|
|
147
|
+
"Trellis session rename: call cursor-app-control MCP `rename_chat` once "
|
|
148
|
+
f'with title "{title}" (task directory name). '
|
|
149
|
+
"If rename_chat is not in your tool list, skip silently — do not ask the user "
|
|
150
|
+
"to rename manually."
|
|
151
|
+
)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _load_context_key(root: Path, hook_input: dict[str, Any]) -> str | None:
|
|
155
|
+
scripts_dir = root / DIR_WORKFLOW / "scripts"
|
|
156
|
+
if str(scripts_dir) not in sys.path:
|
|
157
|
+
sys.path.insert(0, str(scripts_dir))
|
|
158
|
+
from common.active_task import resolve_context_key # type: ignore[import-not-found]
|
|
159
|
+
|
|
160
|
+
if not any(_string_value(hook_input.get(key)) for key in CONTEXT_IDENTITY_KEYS):
|
|
161
|
+
return None
|
|
162
|
+
return resolve_context_key(hook_input, platform="cursor")
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def main() -> int:
|
|
166
|
+
if os.environ.get("TRELLIS_HOOKS") == "0" or os.environ.get("TRELLIS_DISABLE_HOOKS") == "1":
|
|
167
|
+
print("{}")
|
|
168
|
+
return 0
|
|
169
|
+
|
|
170
|
+
try:
|
|
171
|
+
hook_input = json.loads(sys.stdin.read())
|
|
172
|
+
except (json.JSONDecodeError, ValueError):
|
|
173
|
+
hook_input = {}
|
|
174
|
+
if not isinstance(hook_input, dict):
|
|
175
|
+
hook_input = {}
|
|
176
|
+
|
|
177
|
+
event = _string_value(hook_input.get("hook_event_name")) or "afterShellExecution"
|
|
178
|
+
if event != "afterShellExecution":
|
|
179
|
+
print("{}")
|
|
180
|
+
return 0
|
|
181
|
+
|
|
182
|
+
command = _string_value(hook_input.get("command")) or ""
|
|
183
|
+
intent = parse_rename_intent(command)
|
|
184
|
+
if intent is None:
|
|
185
|
+
print("{}")
|
|
186
|
+
return 0
|
|
187
|
+
|
|
188
|
+
output = _string_value(hook_input.get("output")) or ""
|
|
189
|
+
if not shell_output_succeeded(intent["subcommand"], output):
|
|
190
|
+
print("{}")
|
|
191
|
+
return 0
|
|
192
|
+
|
|
193
|
+
title = task_directory_name(intent["task_ref"])
|
|
194
|
+
if not title:
|
|
195
|
+
print("{}")
|
|
196
|
+
return 0
|
|
197
|
+
|
|
198
|
+
cwd = Path(_string_value(hook_input.get("cwd")) or os.getcwd())
|
|
199
|
+
root = _find_trellis_root(cwd)
|
|
200
|
+
if root is None:
|
|
201
|
+
print("{}")
|
|
202
|
+
return 0
|
|
203
|
+
|
|
204
|
+
context_key = _load_context_key(root, hook_input)
|
|
205
|
+
if not context_key:
|
|
206
|
+
print("{}")
|
|
207
|
+
return 0
|
|
208
|
+
|
|
209
|
+
state_path = _rename_state_dir(root) / _safe_context_filename(context_key)
|
|
210
|
+
state = _load_rename_state(state_path)
|
|
211
|
+
if not _should_emit_rename(state, title):
|
|
212
|
+
print("{}")
|
|
213
|
+
return 0
|
|
214
|
+
|
|
215
|
+
try:
|
|
216
|
+
_write_rename_state(state_path, context_key, title)
|
|
217
|
+
except OSError:
|
|
218
|
+
print("{}")
|
|
219
|
+
return 0
|
|
220
|
+
|
|
221
|
+
print(
|
|
222
|
+
json.dumps(
|
|
223
|
+
{"agent_message": _agent_rename_message(title)},
|
|
224
|
+
ensure_ascii=False,
|
|
225
|
+
),
|
|
226
|
+
)
|
|
227
|
+
return 0
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
if __name__ == "__main__":
|
|
231
|
+
sys.exit(main())
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
# Design — Release execution
|
|
2
|
-
|
|
3
|
-
## Boundary
|
|
4
|
-
|
|
5
|
-
This task **may** mutate remotes **only** after explicit user approval captured in `verify.md` (quote or paraphrase the approval request/response).
|
|
6
|
-
|
|
7
|
-
## Release status model (this task)
|
|
8
|
-
|
|
9
|
-
| Status | When to use |
|
|
10
|
-
| --- | --- |
|
|
11
|
-
| **published** | npm and/or git remote actions completed for the approved version |
|
|
12
|
-
| **not published** | Execution aborted or only dry-run/preflight completed |
|
|
13
|
-
| **blocked** | Preflight failed; do not publish until fixed |
|
|
14
|
-
| **waived** | User approved proceeding despite a listed risk |
|
|
15
|
-
| **deferred** | User postponed publish after readiness |
|
|
16
|
-
|
|
17
|
-
Do not mark **ready to publish** here — that remains the readiness task outcome.
|
|
18
|
-
|
|
19
|
-
## Approval gate (mandatory)
|
|
20
|
-
|
|
21
|
-
Before any of the following, stop and obtain explicit user approval:
|
|
22
|
-
|
|
23
|
-
- `node scripts/release.js …` (bundles bump, commit, tag, push)
|
|
24
|
-
- `npm publish` / CI publish workflow dispatch
|
|
25
|
-
- `git tag` / `git push` (including `--tags`)
|
|
26
|
-
- GitHub **Create release** or promotion workflows
|
|
27
|
-
|
|
28
|
-
Document in `verify.md`:
|
|
29
|
-
|
|
30
|
-
```markdown
|
|
31
|
-
## Publish approval evidence
|
|
32
|
-
|
|
33
|
-
User explicitly approved: yes/no
|
|
34
|
-
Approved version: …
|
|
35
|
-
Approved dist-tag: …
|
|
36
|
-
Approved remote actions: tag / push / npm publish / …
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Evidence contract (`verify.md`)
|
|
40
|
-
|
|
41
|
-
1. **Readiness link** — path to readiness `handoff.md`.
|
|
42
|
-
2. **Publish approval evidence** — as above.
|
|
43
|
-
3. **Preflight results** — `check-versions`, `publish-plan`, `verify-packed-cli`.
|
|
44
|
-
4. **Execution log** — commands run (redact tokens); pass/fail.
|
|
45
|
-
5. **Post-publish smoke** — registry check, `
|
|
46
|
-
6. **Validation evidence** — tests run after publish if applicable.
|
|
47
|
-
|
|
48
|
-
## Trellis CLI reference sequence (after approval)
|
|
49
|
-
|
|
50
|
-
Typical human/CI sequence (do not automate without approval):
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
cd packages/cli
|
|
54
|
-
node scripts/release-preflight.js check-versions
|
|
55
|
-
node scripts/release-preflight.js publish-plan
|
|
56
|
-
# After approval:
|
|
57
|
-
pnpm --filter @blxzer/cursor-trellis release:beta # or patch/minor/major per policy
|
|
58
|
-
node scripts/release-preflight.js verify-npm --package all
|
|
59
|
-
```
|
|
60
|
-
|
|
1
|
+
# Design — Release execution
|
|
2
|
+
|
|
3
|
+
## Boundary
|
|
4
|
+
|
|
5
|
+
This task **may** mutate remotes **only** after explicit user approval captured in `verify.md` (quote or paraphrase the approval request/response).
|
|
6
|
+
|
|
7
|
+
## Release status model (this task)
|
|
8
|
+
|
|
9
|
+
| Status | When to use |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| **published** | npm and/or git remote actions completed for the approved version |
|
|
12
|
+
| **not published** | Execution aborted or only dry-run/preflight completed |
|
|
13
|
+
| **blocked** | Preflight failed; do not publish until fixed |
|
|
14
|
+
| **waived** | User approved proceeding despite a listed risk |
|
|
15
|
+
| **deferred** | User postponed publish after readiness |
|
|
16
|
+
|
|
17
|
+
Do not mark **ready to publish** here — that remains the readiness task outcome.
|
|
18
|
+
|
|
19
|
+
## Approval gate (mandatory)
|
|
20
|
+
|
|
21
|
+
Before any of the following, stop and obtain explicit user approval:
|
|
22
|
+
|
|
23
|
+
- `node scripts/release.js …` (bundles bump, commit, tag, push)
|
|
24
|
+
- `npm publish` / CI publish workflow dispatch
|
|
25
|
+
- `git tag` / `git push` (including `--tags`)
|
|
26
|
+
- GitHub **Create release** or promotion workflows
|
|
27
|
+
|
|
28
|
+
Document in `verify.md`:
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
## Publish approval evidence
|
|
32
|
+
|
|
33
|
+
User explicitly approved: yes/no
|
|
34
|
+
Approved version: …
|
|
35
|
+
Approved dist-tag: …
|
|
36
|
+
Approved remote actions: tag / push / npm publish / …
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Evidence contract (`verify.md`)
|
|
40
|
+
|
|
41
|
+
1. **Readiness link** — path to readiness `handoff.md`.
|
|
42
|
+
2. **Publish approval evidence** — as above.
|
|
43
|
+
3. **Preflight results** — `check-versions`, `publish-plan`, `verify-packed-cli`.
|
|
44
|
+
4. **Execution log** — commands run (redact tokens); pass/fail.
|
|
45
|
+
5. **Post-publish smoke** — registry check, `cstl --version`, dogfood smoke commands.
|
|
46
|
+
6. **Validation evidence** — tests run after publish if applicable.
|
|
47
|
+
|
|
48
|
+
## Trellis CLI reference sequence (after approval)
|
|
49
|
+
|
|
50
|
+
Typical human/CI sequence (do not automate without approval):
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd packages/cli
|
|
54
|
+
node scripts/release-preflight.js check-versions
|
|
55
|
+
node scripts/release-preflight.js publish-plan
|
|
56
|
+
# After approval:
|
|
57
|
+
pnpm --filter @blxzer/cursor-trellis release:beta # or patch/minor/major per policy
|
|
58
|
+
node scripts/release-preflight.js verify-npm --package all
|
|
59
|
+
```
|
|
60
|
+
|
|
61
61
|
`release.js` performs commit, tag, and push — treat it as a single approved bundle or decompose manually per policy.
|
|
@@ -34,4 +34,14 @@ export declare function insertCstlManagedBlock(existingContent: string, template
|
|
|
34
34
|
export declare function hasCstlBlock(content: string): boolean;
|
|
35
35
|
/** True if `content` contains a legacy TRELLIS managed block. */
|
|
36
36
|
export declare function hasLegacyTrellisBlock(content: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Remove the CSTL managed block from `content`, leaving any upstream TRELLIS
|
|
39
|
+
* block and user content untouched. Collapses the blank lines left behind so
|
|
40
|
+
* the result reads naturally. Returns the content unchanged if no CSTL block
|
|
41
|
+
* is present.
|
|
42
|
+
*
|
|
43
|
+
* Used by `cstl uninstall` so a coexistence repo ends up with only the
|
|
44
|
+
* upstream TRELLIS block + user content after cursor-trellis is removed.
|
|
45
|
+
*/
|
|
46
|
+
export declare function removeCstlManagedBlock(content: string): string;
|
|
37
47
|
//# sourceMappingURL=agents-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AACtD,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAClD,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AACnE,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,MAAM,CAwCR;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM9D"}
|
|
1
|
+
{"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,gBAAgB,wBAAwB,CAAC;AACtD,eAAO,MAAM,cAAc,sBAAsB,CAAC;AAClD,eAAO,MAAM,0BAA0B,2BAA2B,CAAC;AACnE,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAMf;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,MAAM,CAwCR;AAED,uDAAuD;AACvD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAMrD;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAM9D;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiB9D"}
|
package/dist/utils/agents-md.js
CHANGED
|
@@ -79,4 +79,29 @@ export function hasLegacyTrellisBlock(content) {
|
|
|
79
79
|
content.indexOf(LEGACY_TRELLIS_BLOCK_END) >
|
|
80
80
|
content.indexOf(LEGACY_TRELLIS_BLOCK_START));
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Remove the CSTL managed block from `content`, leaving any upstream TRELLIS
|
|
84
|
+
* block and user content untouched. Collapses the blank lines left behind so
|
|
85
|
+
* the result reads naturally. Returns the content unchanged if no CSTL block
|
|
86
|
+
* is present.
|
|
87
|
+
*
|
|
88
|
+
* Used by `cstl uninstall` so a coexistence repo ends up with only the
|
|
89
|
+
* upstream TRELLIS block + user content after cursor-trellis is removed.
|
|
90
|
+
*/
|
|
91
|
+
export function removeCstlManagedBlock(content) {
|
|
92
|
+
const startIdx = content.indexOf(CSTL_BLOCK_START);
|
|
93
|
+
if (startIdx === -1) {
|
|
94
|
+
return content;
|
|
95
|
+
}
|
|
96
|
+
const endIdx = content.indexOf(CSTL_BLOCK_END, startIdx);
|
|
97
|
+
if (endIdx === -1) {
|
|
98
|
+
return content;
|
|
99
|
+
}
|
|
100
|
+
const before = content.slice(0, startIdx);
|
|
101
|
+
const after = content.slice(endIdx + CSTL_BLOCK_END.length);
|
|
102
|
+
// Collapse up to one blank-line gap on each side so we don't leave a run of
|
|
103
|
+
// 4+ newlines, but never trim away meaningful separator lines.
|
|
104
|
+
return (before.replace(/\n{2,}$/, "\n\n") +
|
|
105
|
+
after.replace(/^\n{2,}/, "\n\n")).replace(/^\n{2,}/, "\n");
|
|
106
|
+
}
|
|
82
107
|
//# sourceMappingURL=agents-md.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/utils/agents-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAqB5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAuCD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA6BtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAOpE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAU1E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,IAAI,CASN;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAoCT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,GACtB,OAAO,CAST;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAQtB;AA8DD,oDAAoD;AACpD,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,uBAA4B,GACpC,MAAM,CAyDR"}
|
|
@@ -18,6 +18,7 @@ import path from "node:path";
|
|
|
18
18
|
import { DIR_NAMES, FILE_NAMES } from "../constants/paths.js";
|
|
19
19
|
import { toPosix } from "./posix.js";
|
|
20
20
|
import { resolveWorkflowDirName } from "./workflow-dir.js";
|
|
21
|
+
import { CSTL_BLOCK_END, CSTL_BLOCK_START, extractBlock, } from "./agents-md.js";
|
|
21
22
|
/** File name for storing template hashes */
|
|
22
23
|
const HASHES_FILE = ".template-hashes.json";
|
|
23
24
|
/** Current schema version for `.template-hashes.json` */
|
|
@@ -32,6 +33,23 @@ export function computeHash(content) {
|
|
|
32
33
|
const normalized = content.replace(/\r\n/g, "\n");
|
|
33
34
|
return createHash("sha256").update(normalized, "utf-8").digest("hex");
|
|
34
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Hash content for a tracked path. AGENTS.md is hashed at the CSTL managed
|
|
38
|
+
* block level (not the whole file) so that in a coexistence repo, upstream
|
|
39
|
+
* edits to the TRELLIS block or user content outside the CSTL block do NOT
|
|
40
|
+
* register as "cursor-trellis template modified" (which would prompt the
|
|
41
|
+
* user on every `cstl update`). Files without a CSTL block (or non-AGENTS
|
|
42
|
+
* paths) hash the whole content.
|
|
43
|
+
*/
|
|
44
|
+
function hashContentForPath(relativePath, content) {
|
|
45
|
+
if (toPosix(relativePath) === FILE_NAMES.AGENTS) {
|
|
46
|
+
const block = extractBlock(content, CSTL_BLOCK_START, CSTL_BLOCK_END);
|
|
47
|
+
if (block !== null) {
|
|
48
|
+
return computeHash(block);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return computeHash(content);
|
|
52
|
+
}
|
|
35
53
|
/**
|
|
36
54
|
* Get path to the hashes file
|
|
37
55
|
*/
|
|
@@ -106,7 +124,7 @@ export function saveHashes(cwd, hashes) {
|
|
|
106
124
|
export function updateHashes(cwd, files) {
|
|
107
125
|
const hashes = loadHashes(cwd);
|
|
108
126
|
for (const [relativePath, content] of files) {
|
|
109
|
-
hashes[toPosix(relativePath)] =
|
|
127
|
+
hashes[toPosix(relativePath)] = hashContentForPath(relativePath, content);
|
|
110
128
|
}
|
|
111
129
|
saveHashes(cwd, hashes);
|
|
112
130
|
}
|
|
@@ -120,7 +138,7 @@ export function updateHashFromFile(cwd, relativePath) {
|
|
|
120
138
|
}
|
|
121
139
|
const content = fs.readFileSync(fullPath, "utf-8");
|
|
122
140
|
const hashes = loadHashes(cwd);
|
|
123
|
-
hashes[toPosix(relativePath)] =
|
|
141
|
+
hashes[toPosix(relativePath)] = hashContentForPath(relativePath, content);
|
|
124
142
|
saveHashes(cwd, hashes);
|
|
125
143
|
}
|
|
126
144
|
/**
|
|
@@ -167,10 +185,23 @@ export function isTemplateModified(cwd, relativePath, hashes) {
|
|
|
167
185
|
if (!storedHash) {
|
|
168
186
|
return true;
|
|
169
187
|
}
|
|
170
|
-
// Compare current content hash with stored hash
|
|
188
|
+
// Compare current content hash with stored hash. AGENTS.md is compared at
|
|
189
|
+
// the CSTL block level (see hashContentForPath). Legacy grace: pre-0.3.3
|
|
190
|
+
// manifests stored a WHOLE-FILE hash for AGENTS.md, so the first 0.3.3
|
|
191
|
+
// update would see a block-hash mismatch. If the whole file still matches
|
|
192
|
+
// the legacy stored hash, treat it as unmodified — the upcoming write will
|
|
193
|
+
// re-store the block hash. This avoids a one-time false "modified" prompt
|
|
194
|
+
// for every existing user on upgrade.
|
|
171
195
|
const currentContent = fs.readFileSync(fullPath, "utf-8");
|
|
172
|
-
const currentHash =
|
|
173
|
-
|
|
196
|
+
const currentHash = hashContentForPath(relativePath, currentContent);
|
|
197
|
+
if (currentHash === storedHash) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (toPosix(relativePath) === FILE_NAMES.AGENTS &&
|
|
201
|
+
computeHash(currentContent) === storedHash) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
return true;
|
|
174
205
|
}
|
|
175
206
|
/**
|
|
176
207
|
* Check if a file matches its original template content
|
|
@@ -288,7 +319,7 @@ export function initializeHashes(cwd, options = {}) {
|
|
|
288
319
|
continue;
|
|
289
320
|
try {
|
|
290
321
|
const content = fs.readFileSync(fullPath, "utf-8");
|
|
291
|
-
hashes[toPosix(relativePath)] =
|
|
322
|
+
hashes[toPosix(relativePath)] = hashContentForPath(relativePath, content);
|
|
292
323
|
}
|
|
293
324
|
catch {
|
|
294
325
|
// Skip files that can't be read (binary, etc.)
|
|
@@ -304,7 +335,7 @@ export function initializeHashes(cwd, options = {}) {
|
|
|
304
335
|
const fullPath = path.join(cwd, relativePath);
|
|
305
336
|
try {
|
|
306
337
|
const content = fs.readFileSync(fullPath, "utf-8");
|
|
307
|
-
hashes[relativePath] =
|
|
338
|
+
hashes[relativePath] = hashContentForPath(relativePath, content);
|
|
308
339
|
}
|
|
309
340
|
catch {
|
|
310
341
|
// Skip files that can't be read (binary, etc.)
|
|
@@ -323,7 +354,7 @@ export function initializeHashes(cwd, options = {}) {
|
|
|
323
354
|
continue;
|
|
324
355
|
try {
|
|
325
356
|
const content = fs.readFileSync(fullPath, "utf-8");
|
|
326
|
-
hashes[toPosix(relativePath)] =
|
|
357
|
+
hashes[toPosix(relativePath)] = hashContentForPath(relativePath, content);
|
|
327
358
|
}
|
|
328
359
|
catch {
|
|
329
360
|
// Skip
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.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.3.
|
|
3
|
+
"version": "0.3.4",
|
|
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",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"inquirer": "^9.3.7",
|
|
36
36
|
"undici": "^6.21.0",
|
|
37
37
|
"zod": "^4.4.2",
|
|
38
|
-
"@blxzer/cursor-trellis-core": "0.3.
|
|
38
|
+
"@blxzer/cursor-trellis-core": "0.3.4"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@eslint/js": "^9.18.0",
|