@mindfoldhq/trellis 0.5.0-beta.17 → 0.5.0-beta.18

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.
@@ -1,157 +1,89 @@
1
1
  ---
2
- description: "Trellis Copilot prompt: Finish Work - Pre-Commit Checklist"
2
+ description: "Trellis Copilot prompt: Finish Work survey + archive task + record session journal"
3
3
  ---
4
4
 
5
- # Finish Work - Pre-Commit Checklist
5
+ # Finish Work
6
6
 
7
- Before submitting or committing, use this checklist to ensure work completeness.
7
+ Wrap up the current session: archive the active task (and any other completed-but-unarchived tasks the user wants to clean up) and record the session journal. Code commits are NOT done here — those happen in workflow Phase 3.4 before you invoke this prompt.
8
8
 
9
- **Timing**: After code is written and tested, before commit
9
+ **Timing**: After Phase 3.4 (Commit changes) when the working tree is already clean.
10
10
 
11
11
  ---
12
12
 
13
- ## Checklist
14
-
15
- ### 1. Code Quality
13
+ ## Step 1: Survey current state
16
14
 
17
15
  ```bash
18
- # Must pass
19
- pnpm lint
20
- pnpm type-check
21
- pnpm test
16
+ python3 ./.trellis/scripts/get_context.py --mode record
22
17
  ```
23
18
 
24
- - [ ] `pnpm lint` passes with 0 errors?
25
- - [ ] `pnpm type-check` passes with no type errors?
26
- - [ ] Tests pass?
27
- - [ ] No `console.log` statements (use logger)?
28
- - [ ] No non-null assertions (the `x!` operator)?
29
- - [ ] No `any` types?
30
-
31
- ### 1.5. Test Coverage
32
-
33
- Check if your change needs new or updated tests (see `.trellis/spec/unit-test/conventions.md`):
34
-
35
- - [ ] New pure function �?unit test added?
36
- - [ ] Bug fix �?regression test added in `test/regression.test.ts`?
37
- - [ ] Changed init/update behavior �?integration test added/updated?
38
- - [ ] No logic change (text/data only) �?no test needed
39
-
40
- ### 2. Code-Spec Sync
41
-
42
- **Code-Spec Docs**:
43
- - [ ] Does `.trellis/spec/backend/` need updates?
44
- - New patterns, new modules, new conventions
45
- - [ ] Does `.trellis/spec/frontend/` need updates?
46
- - New components, new hooks, new patterns
47
- - [ ] Does `.trellis/spec/guides/` need updates?
48
- - New cross-layer flows, lessons from bugs
49
-
50
- **Key Question**:
51
- > "If I fixed a bug or discovered something non-obvious, should I document it so future me (or others) won't hit the same issue?"
52
-
53
- If YES -> Update the relevant code-spec doc.
54
-
55
- ### 2.5. Code-Spec Hard Block (Infra/Cross-Layer)
56
-
57
- If this change touches infra or cross-layer contracts, this is a blocking checklist:
58
-
59
- - [ ] Spec content is executable (real signatures/contracts), not principle-only text
60
- - [ ] Includes file path + command/API name + payload field names
61
- - [ ] Includes validation and error matrix
62
- - [ ] Includes Good/Base/Bad cases
63
- - [ ] Includes required tests and assertion points
19
+ This prints:
64
20
 
65
- **Block Rule**:
66
- In pipeline mode, the finish agent will automatically detect and execute spec updates when gaps are found.
67
- If running this checklist manually, ensure spec sync is complete before committing �?run `/` if needed.
21
+ - **My active tasks** — review whether any besides the current one are actually done (code merged, AC met) and should be archived this round.
22
+ - **Git status** quick visual on what's dirty.
23
+ - **Recent commits** you'll need their hashes in Step 4 for `--commit`.
68
24
 
69
- ### 3. API Changes
25
+ If `--mode record` surfaces other completed tasks not tied to the current session, surface them to the user with a one-shot confirmation: "These N tasks look done — archive them too in this round? [y/N]". Default is no; the current active task is always archived in Step 3 regardless.
70
26
 
71
- If you modified API endpoints:
27
+ ## Step 2: Sanity check — working tree must be clean
72
28
 
73
- - [ ] Input schema updated?
74
- - [ ] Output schema updated?
75
- - [ ] API documentation updated?
76
- - [ ] Client code updated to match?
29
+ Run:
77
30
 
78
- ### 4. Database Changes
31
+ ```bash
32
+ git status --porcelain
33
+ ```
79
34
 
80
- If you modified database schema:
35
+ Filter out paths under `.trellis/workspace/` and `.trellis/tasks/` — those are managed by `add_session.py` and `task.py archive` auto-commits and will appear dirty as part of this prompt's own work.
81
36
 
82
- - [ ] Migration file created?
83
- - [ ] Schema file updated?
84
- - [ ] Related queries updated?
85
- - [ ] Seed data updated (if applicable)?
37
+ If anything else is dirty (any path outside those two prefixes), **stop and bail out** with:
86
38
 
87
- ### 5. Cross-Layer Verification
39
+ > "Working tree has uncommitted code changes. Return to workflow Phase 3.4 to commit them before running `/finish-work`."
88
40
 
89
- If the change spans multiple layers:
41
+ Do NOT run `git commit` here. Do NOT prompt the user to commit. The user goes back to Phase 3.4 and the AI drives the batched commit there.
90
42
 
91
- - [ ] Data flows correctly through all layers?
92
- - [ ] Error handling works at each boundary?
93
- - [ ] Types are consistent across layers?
94
- - [ ] Loading states handled?
43
+ ## Step 3: Archive task(s)
95
44
 
96
- ### 6. Manual Testing
45
+ ```bash
46
+ python3 ./.trellis/scripts/task.py archive <task-name>
47
+ ```
97
48
 
98
- - [ ] Feature works in browser/app?
99
- - [ ] Edge cases tested?
100
- - [ ] Error states tested?
101
- - [ ] Works after page refresh?
49
+ At minimum: the current active task (if any). Plus any extra tasks the user confirmed in Step 1. Each archive produces a `chore(task): archive ...` commit via the script's auto-commit.
102
50
 
103
- ---
51
+ If there is no active task and the user did not confirm any cleanup archives, skip this step.
104
52
 
105
- ## Quick Check Flow
53
+ ## Step 4: Record session journal
106
54
 
107
55
  ```bash
108
- # 1. Code checks
109
- pnpm lint && pnpm type-check
110
-
111
- # 2. View changes
112
- git status
113
- git diff --name-only
114
-
115
- # 3. Based on changed files, check relevant items above
56
+ python3 ./.trellis/scripts/add_session.py \
57
+ --title "Session Title" \
58
+ --commit "hash1,hash2" \
59
+ --summary "Brief summary"
116
60
  ```
117
61
 
118
- ---
119
-
120
- ## Common Oversights
62
+ Use the work-commit hashes produced in Phase 3.4 (visible in Step 1's `Recent commits` list, or via `git log --oneline`) for `--commit`. Do not include the archive commit hashes from Step 3. This produces a `chore: record journal` commit.
121
63
 
122
- | Oversight | Consequence | Check |
123
- |-----------|-------------|-------|
124
- | Code-spec docs not updated | Others don't know the change | Check .trellis/spec/ |
125
- | Spec text is abstract only | Easy regressions in infra/cross-layer changes | Require signature/contract/matrix/cases/tests |
126
- | Migration not created | Schema out of sync | Check db/migrations/ |
127
- | Types not synced | Runtime errors | Check shared types |
128
- | Tests not updated | False confidence | Run full test suite |
129
- | Console.log left in | Noisy production logs | Search for console.log |
64
+ Final git log order: `<work commits from 3.4>` → `chore(task): archive ...` (one or more) → `chore: record journal`.
130
65
 
131
66
  ---
132
67
 
133
68
  ## Relationship to Other Commands
134
69
 
135
70
  ```
136
- Development Flow:
137
- Write code -> Test -> / -> git commit -> /
138
- | |
139
- Ensure completeness Record progress
140
-
71
+ Development Flow (workflow.md Phase 3):
72
+ 3.1 Quality verification
73
+ 3.2 Debug retrospective (on demand)
74
+ 3.3 Spec update
75
+ 3.4 Commit changes -> AI drafts batched commits, user confirms
76
+ 3.5 Wrap-up -> /finish-work (this prompt: survey + archive + journal)
77
+
141
78
  Debug Flow:
142
- Hit bug -> Fix -> / -> Knowledge capture
143
- |
144
- Deep analysis
79
+ Hit bug -> Fix -> /break-loop -> Knowledge capture
145
80
  ```
146
81
 
147
- - `/` - Check work completeness (this command)
148
- - `/` - Record session and commits
149
- - `/` - Deep analysis after debugging
82
+ - `/finish-work` survey + archive + record session (this prompt)
83
+ - `/break-loop` deep analysis after debugging
150
84
 
151
85
  ---
152
86
 
153
87
  ## Core Principle
154
88
 
155
- > **Delivery includes not just code, but also documentation, verification, and knowledge capture.**
156
-
157
- Complete work = Code + Docs + Tests + Verification
89
+ > **Finish-work is pure bookkeeping.** Code is already committed before this runs. If the working tree is dirty, this prompt refuses to proceed.
@@ -1,3 +1,4 @@
1
+ /* global process */
1
2
  /**
2
3
  * Trellis Context Injection Plugin
3
4
  *
@@ -259,6 +260,19 @@ function shellQuote(value) {
259
260
  return `'${String(value).replace(/'/g, "'\\''")}'`
260
261
  }
261
262
 
263
+ function powershellQuote(value) {
264
+ return `'${String(value).replace(/'/g, "''")}'`
265
+ }
266
+
267
+ function buildTrellisContextPrefix(contextKey, hostPlatform = process.platform) {
268
+ if (hostPlatform === "win32") {
269
+ // OpenCode's Windows Bash tool runs through PowerShell, not a POSIX shell.
270
+ return `$env:TRELLIS_CONTEXT_ID = ${powershellQuote(contextKey)}; `
271
+ }
272
+
273
+ return `export TRELLIS_CONTEXT_ID=${shellQuote(contextKey)}; `
274
+ }
275
+
262
276
  function getBashCommandKey(args) {
263
277
  if (!args || typeof args !== "object") return null
264
278
  if (typeof args.command === "string") return "command"
@@ -271,7 +285,8 @@ function commandStartsWithTrellisContext(command) {
271
285
  return (
272
286
  /^TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
273
287
  /^export\s+TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
274
- /^env\s+(?:[^\s=]+\s+)*TRELLIS_CONTEXT_ID\s*=/.test(firstCommand)
288
+ /^env\s+(?:[^\s=]+\s+)*TRELLIS_CONTEXT_ID\s*=/.test(firstCommand) ||
289
+ /^\$env:TRELLIS_CONTEXT_ID\s*=/i.test(firstCommand)
275
290
  )
276
291
  }
277
292
 
@@ -279,7 +294,7 @@ function commandStartsWithTrellisContext(command) {
279
294
  * OpenCode TUI may not expose OPENCODE_RUN_ID to Bash. The plugin hook still
280
295
  * receives session identity, so inject it into Bash commands before execution.
281
296
  */
282
- function injectTrellisContextIntoBash(ctx, input, output) {
297
+ function injectTrellisContextIntoBash(ctx, input, output, hostPlatform) {
283
298
  const args = output?.args
284
299
  const commandKey = getBashCommandKey(args)
285
300
  if (!commandKey) return false
@@ -291,7 +306,7 @@ function injectTrellisContextIntoBash(ctx, input, output) {
291
306
  const contextKey = ctx.getContextKey(input)
292
307
  if (!contextKey) return false
293
308
 
294
- args[commandKey] = `export TRELLIS_CONTEXT_ID=${shellQuote(contextKey)}; ${command}`
309
+ args[commandKey] = `${buildTrellisContextPrefix(contextKey, hostPlatform)}${command}`
295
310
  return true
296
311
  }
297
312
 
@@ -300,7 +315,7 @@ function injectTrellisContextIntoBash(ctx, input, output) {
300
315
  // (packages/opencode/src/plugin/index.ts — `for ([_, fn] of Object.entries(mod)) await fn(input)`);
301
316
  // the previous `{ id, server }` object shape failed with
302
317
  // `TypeError: fn is not a function` in 1.2.x.
303
- export default async ({ directory }) => {
318
+ export default async ({ directory, platform: hostPlatform = process.platform }) => {
304
319
  const ctx = new TrellisContext(directory)
305
320
  debugLog("inject", "Plugin loaded, directory:", directory)
306
321
 
@@ -311,7 +326,7 @@ export default async ({ directory }) => {
311
326
 
312
327
  const toolName = input?.tool?.toLowerCase()
313
328
  if (toolName === "bash") {
314
- if (injectTrellisContextIntoBash(ctx, input, output)) {
329
+ if (injectTrellisContextIntoBash(ctx, input, output, hostPlatform)) {
315
330
  debugLog("inject", "Injected TRELLIS_CONTEXT_ID into Bash command")
316
331
  }
317
332
  return
@@ -81,7 +81,12 @@ const FALLBACK_BREADCRUMBS = {
81
81
  "Per-turn only; does not carry forward; do NOT invent an override the " +
82
82
  "user did not say.",
83
83
  completed:
84
- "User commits changes; then run task.py archive.",
84
+ "Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up " +
85
+ "(archive task + record session).\n" +
86
+ "If you reach this state with uncommitted code, return to Phase 3.4 " +
87
+ "first — `/finish-work` refuses to run on a dirty working tree.\n" +
88
+ "`task.py archive` deletes runtime session files that point at the " +
89
+ "archived task.",
85
90
  }
86
91
 
87
92
  /**
@@ -191,7 +191,12 @@ _FALLBACK_BREADCRUMBS = {
191
191
  "user did not say."
192
192
  ),
193
193
  "completed": (
194
- "User commits changes; then run task.py archive."
194
+ "Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up "
195
+ "(archive task + record session).\n"
196
+ "If you reach this state with uncommitted code, return to Phase 3.4 "
197
+ "first — `/finish-work` refuses to run on a dirty working tree.\n"
198
+ "`task.py archive` deletes runtime session files that point at the "
199
+ "archived task."
195
200
  ),
196
201
  }
197
202
 
@@ -322,24 +322,12 @@ def cmd_archive(args: argparse.Namespace) -> int:
322
322
  data["completedAt"] = today
323
323
  write_json(task_json_path, data)
324
324
 
325
- # Handle subtask relationships on archive
326
- task_parent = data.get("parent")
325
+ # Handle subtask relationships on archive.
326
+ # Keep this task in its parent's children list so progress
327
+ # counters (children_progress) stay consistent — children
328
+ # missing from the active set are treated as completed.
327
329
  task_children = data.get("children", [])
328
330
 
329
- # If this is a child, remove from parent's children list
330
- if task_parent:
331
- parent_dir = find_task_by_name(task_parent, tasks_dir)
332
- if parent_dir:
333
- parent_json = parent_dir / FILE_TASK_JSON
334
- if parent_json.is_file():
335
- parent_data = read_json(parent_json)
336
- if parent_data:
337
- parent_children = parent_data.get("children", [])
338
- if dir_name in parent_children:
339
- parent_children.remove(dir_name)
340
- parent_data["children"] = parent_children
341
- write_json(parent_json, parent_data)
342
-
343
331
  # If this is a parent, clear parent field in all children
344
332
  if task_children:
345
333
  for child_name in task_children:
@@ -102,8 +102,11 @@ def children_progress(
102
102
  """
103
103
  if not children:
104
104
  return ""
105
+ # A child missing from active statuses has been archived (cmd_archive
106
+ # sets status=completed before moving the dir). Count it as done so
107
+ # parent progress doesn't regress when children are archived.
105
108
  done = sum(
106
109
  1 for c in children
107
- if all_statuses.get(c) in ("completed", "done")
110
+ if c not in all_statuses or all_statuses.get(c) in ("completed", "done")
108
111
  )
109
112
  return f" [{done}/{len(children)} done]"
@@ -120,7 +120,8 @@ Phase 3: Finish → distill lessons + wrap-up
120
120
  - 3.1 Quality verification `[required · repeatable]`
121
121
  - 3.2 Debug retrospective `[on demand]`
122
122
  - 3.3 Spec update `[required · once]`
123
- - 3.4 Wrap-up reminder
123
+ - 3.4 Commit changes `[required · once]`
124
+ - 3.5 Wrap-up reminder
124
125
 
125
126
  ### Rules
126
127
 
@@ -442,7 +443,57 @@ Load the `trellis-update-spec` skill and review whether this task produced new k
442
443
 
443
444
  Update the docs under `.trellis/spec/` accordingly. Even if the conclusion is "nothing to update", walk through the judgment.
444
445
 
445
- #### 3.4 Wrap-up reminder
446
+ #### 3.4 Commit changes `[required · once]`
447
+
448
+ The AI drives a batched commit of this task's code changes so `/finish-work` can run cleanly afterwards. Goal: produce work commits FIRST, then bookkeeping (archive + journal) commits land after — never interleaved.
449
+
450
+ **Step-by-step**:
451
+
452
+ 1. **Inspect dirty state**:
453
+ ```bash
454
+ git status --porcelain
455
+ ```
456
+ Snapshot every dirty path. If the working tree is clean, skip to 3.5.
457
+
458
+ 2. **Learn commit style** from recent history (so drafted messages blend in):
459
+ ```bash
460
+ git log --oneline -5
461
+ ```
462
+ Note the prefix convention (`feat:` / `fix:` / `chore:` / `docs:` ...), language (中文/English), and length style.
463
+
464
+ 3. **Classify dirty files into two groups**:
465
+ - **AI-edited this session** — files you wrote/edited via Edit/Write/Bash tool calls in this session. You know what changed and why.
466
+ - **Unrecognized** — dirty files you did NOT touch this session (could be the user's manual edits, leftover WIP from a previous session, or unrelated work). Do NOT silently include these.
467
+
468
+ 4. **Draft a commit plan**. Group AI-edited files into logical commits (1 commit per coherent change unit, not 1 commit per file). Each entry: `<commit message>` + file list. List unrecognized files separately at the bottom.
469
+
470
+ 5. **Present the plan once, ask for one-shot confirmation**. Format:
471
+ ```
472
+ Proposed commits (in order):
473
+ 1. <message>
474
+ - <file>
475
+ - <file>
476
+ 2. <message>
477
+ - <file>
478
+
479
+ Unrecognized dirty files (NOT in any commit — confirm include/exclude):
480
+ - <file>
481
+ - <file>
482
+
483
+ Reply 'ok' / '行' to execute. Reply with edits, or '我自己来' / 'manual' to abort.
484
+ ```
485
+
486
+ 6. **On confirmation**: run `git add <files>` + `git commit -m "<msg>"` for each batch in order. Do not amend. Do not push.
487
+
488
+ 7. **On rejection** (user replies "不行" / "我自己来" / "manual" / any pushback on the plan): stop. Do not attempt a second plan. The user will commit by hand; you skip ahead to 3.5 once they confirm.
489
+
490
+ **Rules**:
491
+ - No `git commit --amend` anywhere — three-stage three-commit flow (work commits → archive commit → journal commit).
492
+ - Never push to remote in this step.
493
+ - If the user wants different message wording but accepts the file grouping, edit the message and re-confirm once — but if they reject the grouping, exit to manual mode.
494
+ - The batched plan is one prompt; do not prompt per commit.
495
+
496
+ #### 3.5 Wrap-up reminder
446
497
 
447
498
  After the above, remind the user they can run `/finish-work` to wrap up (archive the task, record the session).
448
499
 
@@ -483,5 +534,7 @@ User override (per-turn escape hatch): if the user's CURRENT message explicitly
483
534
  [/workflow-state:in_progress]
484
535
 
485
536
  [workflow-state:completed]
486
- User commits changes; then run task.py finish and task.py archive. If archive is run directly, it still deletes runtime session files that point at the archived task.
537
+ Code committed via Phase 3.4; run `/trellis:finish-work` to wrap up (archive task + record session).
538
+ If you reach this state with uncommitted code, return to Phase 3.4 first — `/finish-work` refuses to run on a dirty working tree.
539
+ `task.py archive` deletes runtime session files that point at the archived task.
487
540
  [/workflow-state:completed]
@@ -1 +1 @@
1
- {"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAoBD;;;;;;;;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,CAsBT;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;AAuED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBpD"}
1
+ {"version":3,"file":"template-hash.d.ts","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAe5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAoBD;;;;;;;;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,CAsBT;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;AA0ED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAwCpD"}
@@ -15,7 +15,7 @@
15
15
  import { createHash } from "node:crypto";
16
16
  import fs from "node:fs";
17
17
  import path from "node:path";
18
- import { DIR_NAMES } from "../constants/paths.js";
18
+ import { DIR_NAMES, FILE_NAMES } from "../constants/paths.js";
19
19
  import { ALL_MANAGED_DIRS } from "../configurators/index.js";
20
20
  import { toPosix } from "./posix.js";
21
21
  /** File name for storing template hashes */
@@ -207,6 +207,8 @@ export function getModificationStatus(cwd, relativePaths, hashes) {
207
207
  * Directories to scan for template files during init (derived from platform registry)
208
208
  */
209
209
  const TEMPLATE_DIRS = ALL_MANAGED_DIRS;
210
+ /** Root-level template files written by init and managed by update. */
211
+ const TEMPLATE_FILES = [FILE_NAMES.AGENTS];
210
212
  /**
211
213
  * Patterns to exclude from hash tracking
212
214
  */
@@ -272,6 +274,22 @@ function collectFiles(cwd, dir, relativeTo = "") {
272
274
  */
273
275
  export function initializeHashes(cwd) {
274
276
  const hashes = {};
277
+ for (const relativePath of TEMPLATE_FILES) {
278
+ if (shouldExcludeFromHash(relativePath)) {
279
+ continue;
280
+ }
281
+ const fullPath = path.join(cwd, relativePath);
282
+ if (!fs.existsSync(fullPath)) {
283
+ continue;
284
+ }
285
+ try {
286
+ const content = fs.readFileSync(fullPath, "utf-8");
287
+ hashes[relativePath] = computeHash(content);
288
+ }
289
+ catch {
290
+ // Skip files that can't be read (binary, etc.)
291
+ }
292
+ }
275
293
  // Collect all template files
276
294
  for (const dir of TEMPLATE_DIRS) {
277
295
  const files = collectFiles(cwd, dir);
@@ -1 +1 @@
1
- {"version":3,"file":"template-hash.js","sourceRoot":"","sources":["../../src/utils/template-hash.ts"],"names":[],"mappings":"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"}
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;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,4CAA4C;AAC5C,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAE5C,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAQhC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAsB;IAC/C,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAY,CAAC;QAE9C,IACE,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,KAAK,QAAQ;YAC1B,WAAW,IAAI,MAAM;YACpB,MAAiC,CAAC,SAAS,KAAK,qBAAqB;YACtE,QAAQ,IAAI,MAAM;YAClB,OAAQ,MAA8B,CAAC,MAAM,KAAK,QAAQ;YACzD,MAA8B,CAAC,MAAM,KAAK,IAAI,EAC/C,CAAC;YACD,MAAM,MAAM,GAAG,MAAwB,CAAC;YACxC,kEAAkE;YAClE,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,+DAA+D;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,MAAsB;IAC5D,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAmB;QAC9B,SAAS,EAAE,qBAAqB;QAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC;KAClC,CAAC;IACF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,KAA0B;IAClE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAE/B,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW,EAAE,YAAoB;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,YAAoB;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACrC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,OAAe,EACf,OAAe;IAEf,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;QACxB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,YAAoB,EACpB,MAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAE9C,2CAA2C;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uEAAuE;IACvE,iEAAiE;IACjE,iEAAiE;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAEhD,OAAO,WAAW,KAAK,UAAU,CAAC;AACpC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAW,EACX,YAAoB,EACpB,eAAuB;IAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,OAAO,cAAc,KAAK,eAAe,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAW,EACX,aAAuB,EACvB,MAAsB;IAEtB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE1C,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,uEAAuE;AACvE,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,MAAM,CAAU,CAAC;AAEpD;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,uBAAuB,EAAE,mBAAmB;IAC5C,UAAU,EAAE,eAAe;IAC3B,YAAY,EAAE,mBAAmB;IACjC,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,8BAA8B;IAC5C,QAAQ,EAAE,yBAAyB;IACnC,eAAe,EAAE,4CAA4C;IAC7D,gBAAgB,EAAE,6BAA6B;IAC/C,UAAU,EAAE,qBAAqB;CAClC,CAAC;AAEF;;GAEG;AACH,SAAS,qBAAqB,CAAC,YAAoB;IACjD,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7C,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,GAAW,EACX,GAAW,EACX,aAAqB,EAAE;IAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEhD,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;QAC1C,IAAI,qBAAqB,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;QACjD,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAErC,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;YACjC,oEAAoE;YACpE,yCAAyC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AACpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindfoldhq/trellis",
3
- "version": "0.5.0-beta.17",
3
+ "version": "0.5.0-beta.18",
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",