xtrm-tools 2.4.0 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/README.md +23 -9
  2. package/cli/dist/index.cjs +774 -240
  3. package/cli/dist/index.cjs.map +1 -1
  4. package/cli/package.json +1 -1
  5. package/config/hooks.json +10 -0
  6. package/config/pi/extensions/core/adapter.ts +2 -14
  7. package/config/pi/extensions/core/guard-rules.ts +70 -0
  8. package/config/pi/extensions/core/session-state.ts +59 -0
  9. package/config/pi/extensions/main-guard.ts +10 -14
  10. package/config/pi/extensions/plan-mode/README.md +65 -0
  11. package/config/pi/extensions/plan-mode/index.ts +340 -0
  12. package/config/pi/extensions/plan-mode/utils.ts +168 -0
  13. package/config/pi/extensions/service-skills.ts +51 -7
  14. package/config/pi/extensions/session-flow.ts +117 -0
  15. package/hooks/beads-claim-sync.mjs +123 -2
  16. package/hooks/beads-compact-restore.mjs +41 -9
  17. package/hooks/beads-compact-save.mjs +36 -5
  18. package/hooks/beads-gate-messages.mjs +27 -1
  19. package/hooks/beads-stop-gate.mjs +58 -8
  20. package/hooks/guard-rules.mjs +86 -0
  21. package/hooks/hooks.json +28 -18
  22. package/hooks/main-guard.mjs +3 -21
  23. package/hooks/quality-check.cjs +1286 -0
  24. package/hooks/quality-check.py +345 -0
  25. package/hooks/session-state.mjs +138 -0
  26. package/package.json +2 -1
  27. package/project-skills/quality-gates/.claude/settings.json +1 -24
  28. package/skills/creating-service-skills/SKILL.md +433 -0
  29. package/skills/creating-service-skills/references/script_quality_standards.md +425 -0
  30. package/skills/creating-service-skills/references/service_skill_system_guide.md +278 -0
  31. package/skills/creating-service-skills/scripts/bootstrap.py +326 -0
  32. package/skills/creating-service-skills/scripts/deep_dive.py +304 -0
  33. package/skills/creating-service-skills/scripts/scaffolder.py +482 -0
  34. package/skills/scoping-service-skills/SKILL.md +231 -0
  35. package/skills/scoping-service-skills/scripts/scope.py +74 -0
  36. package/skills/sync-docs/SKILL.md +235 -0
  37. package/skills/sync-docs/evals/evals.json +89 -0
  38. package/skills/sync-docs/references/doc-structure.md +104 -0
  39. package/skills/sync-docs/references/schema.md +103 -0
  40. package/skills/sync-docs/scripts/context_gatherer.py +246 -0
  41. package/skills/sync-docs/scripts/doc_structure_analyzer.py +495 -0
  42. package/skills/sync-docs/scripts/validate_doc.py +365 -0
  43. package/skills/sync-docs-workspace/iteration-1/benchmark.json +293 -0
  44. package/skills/sync-docs-workspace/iteration-1/benchmark.md +13 -0
  45. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/eval_metadata.json +27 -0
  46. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/outputs/result.md +210 -0
  47. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/grading.json +28 -0
  48. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/with_skill/run-1/timing.json +1 -0
  49. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/outputs/result.md +101 -0
  50. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/grading.json +28 -0
  51. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/run-1/timing.json +5 -0
  52. package/skills/sync-docs-workspace/iteration-1/eval-doc-audit/without_skill/timing.json +5 -0
  53. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/eval_metadata.json +27 -0
  54. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/outputs/result.md +198 -0
  55. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/grading.json +28 -0
  56. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/with_skill/run-1/timing.json +1 -0
  57. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/outputs/result.md +94 -0
  58. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/grading.json +28 -0
  59. package/skills/sync-docs-workspace/iteration-1/eval-fix-mode/without_skill/run-1/timing.json +1 -0
  60. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/eval_metadata.json +27 -0
  61. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/outputs/result.md +237 -0
  62. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/grading.json +28 -0
  63. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
  64. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/outputs/result.md +134 -0
  65. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/grading.json +28 -0
  66. package/skills/sync-docs-workspace/iteration-1/eval-sprint-closeout/without_skill/run-1/timing.json +1 -0
  67. package/skills/sync-docs-workspace/iteration-2/benchmark.json +297 -0
  68. package/skills/sync-docs-workspace/iteration-2/benchmark.md +13 -0
  69. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/eval_metadata.json +27 -0
  70. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/outputs/result.md +137 -0
  71. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/grading.json +92 -0
  72. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/with_skill/run-1/timing.json +1 -0
  73. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/outputs/result.md +134 -0
  74. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/grading.json +86 -0
  75. package/skills/sync-docs-workspace/iteration-2/eval-doc-audit/without_skill/run-1/timing.json +1 -0
  76. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/eval_metadata.json +27 -0
  77. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/outputs/result.md +193 -0
  78. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/grading.json +72 -0
  79. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/with_skill/run-1/timing.json +1 -0
  80. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/outputs/result.md +211 -0
  81. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/grading.json +91 -0
  82. package/skills/sync-docs-workspace/iteration-2/eval-fix-mode/without_skill/run-1/timing.json +5 -0
  83. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/eval_metadata.json +27 -0
  84. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/outputs/result.md +182 -0
  85. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
  86. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/with_skill/run-1/timing.json +1 -0
  87. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/outputs/result.md +222 -0
  88. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/grading.json +88 -0
  89. package/skills/sync-docs-workspace/iteration-2/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
  90. package/skills/sync-docs-workspace/iteration-3/benchmark.json +298 -0
  91. package/skills/sync-docs-workspace/iteration-3/benchmark.md +13 -0
  92. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/eval_metadata.json +27 -0
  93. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/outputs/result.md +125 -0
  94. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/grading.json +97 -0
  95. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/with_skill/run-1/timing.json +5 -0
  96. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/outputs/result.md +144 -0
  97. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/grading.json +78 -0
  98. package/skills/sync-docs-workspace/iteration-3/eval-doc-audit/without_skill/run-1/timing.json +5 -0
  99. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/eval_metadata.json +27 -0
  100. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/outputs/result.md +104 -0
  101. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/grading.json +91 -0
  102. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/with_skill/run-1/timing.json +5 -0
  103. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/outputs/result.md +79 -0
  104. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/grading.json +82 -0
  105. package/skills/sync-docs-workspace/iteration-3/eval-fix-mode/without_skill/run-1/timing.json +5 -0
  106. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/eval_metadata.json +27 -0
  107. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase1_context.json +302 -0
  108. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase2_drift.txt +33 -0
  109. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase3_analysis.json +114 -0
  110. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase4_fix.txt +118 -0
  111. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/phase5_validate.txt +38 -0
  112. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/outputs/result.md +158 -0
  113. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/grading.json +95 -0
  114. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/with_skill/run-1/timing.json +5 -0
  115. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/outputs/result.md +71 -0
  116. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/grading.json +90 -0
  117. package/skills/sync-docs-workspace/iteration-3/eval-sprint-closeout/without_skill/run-1/timing.json +5 -0
  118. package/skills/updating-service-skills/SKILL.md +136 -0
  119. package/skills/updating-service-skills/scripts/drift_detector.py +222 -0
  120. package/skills/using-quality-gates/SKILL.md +254 -0
  121. package/skills/using-service-skills/SKILL.md +108 -0
  122. package/skills/using-service-skills/scripts/cataloger.py +74 -0
  123. package/skills/using-service-skills/scripts/skill_activator.py +152 -0
  124. package/skills/using-service-skills/scripts/test_skill_activator.py +58 -0
  125. package/skills/using-xtrm/SKILL.md +34 -38
@@ -24,9 +24,9 @@ within this stack. Read it at session start and refer back when uncertain about
24
24
  |---|---|
25
25
  | **Skills** | Domain expertise loaded on demand |
26
26
  | **Hooks** | Automated lifecycle enforcement (gates, suggestions, reminders) |
27
- | **Project Skills** | Per-project quality enforcement (quality-gates, service-skills-set) |
27
+ | **Project Data (`xtrm init`)** | Per-repo bootstrap data (`.beads/`, `service-registry.json`, GitNexus index) |
28
28
  | **MCP Servers** | Semantic tools: Serena (code), gitnexus (graph), context7 (docs), deepwiki |
29
- | **CLI** | `xtrm install / status / reset / help` — sync and install tooling |
29
+ | **CLI** | `xtrm install / status / finish / reset / help` — sync and closure tooling |
30
30
  | **beads (bd)** | Git-backed issue tracker with session gate enforcement |
31
31
 
32
32
  ---
@@ -70,36 +70,33 @@ proceeding. Don't ask about things you can reasonably infer.
70
70
 
71
71
  ---
72
72
 
73
- ## Beads Gate — Session Protocol
73
+ ## Beads + Session Flow — Session Protocol
74
74
 
75
- This environment enforces a **beads session gate**. You cannot edit files or stop the session
76
- without an active issue claim. Follow this protocol exactly:
75
+ This environment enforces a **beads session gate** plus **session-flow lifecycle gate**.
76
+ You cannot edit files without a claim, and you cannot safely end a closure-in-progress session.
77
77
 
78
78
  ```bash
79
- # 1. Find or create an issue before any edit
80
- bd list --status=open # see what exists
81
- bd create --title="..." --type=task --priority=2
82
- bd update <id> --status=in_progress
83
- bd kv set "claimed:<session_id>" "<id>"
79
+ # 1. Claim before editing
80
+ bd list --status=open
81
+ bd update <id> --claim
82
+ # hook auto-sets session claim + auto-creates worktree + writes .xtrm-session-state.json
84
83
 
85
- # 2. Work freely (hooks allow edits when claim is set)
84
+ # 2. Work in the claimed branch/worktree
86
85
 
87
- # 3. Close when done hook auto-clears claim
86
+ # 3. Close issue when implementation is done
88
87
  bd close <id>
89
88
 
90
- # 4. Session close protocol
91
- git add <files> && git commit -m "..."
92
- git push -u origin <feature-branch>
93
- gh pr create --fill
94
- gh pr merge --squash
95
- git checkout main && git reset --hard origin/main
89
+ # 4. Session close protocol (single command)
90
+ xtrm finish
91
+ # blocking: commit/push/pr-create/auto-merge poll/worktree cleanup
96
92
  ```
97
93
 
98
94
  **Key rules:**
99
95
  - One active claim per session
100
96
  - Always work on a **feature branch**, never directly on `main`/`master`
101
- - `main-guard.mjs` blocks all file edits on protected branches
102
- - `beads-stop-gate.mjs` blocks session end until the claim is closed
97
+ - `main-guard.mjs` blocks edits on protected branches
98
+ - `beads-stop-gate.mjs` blocks stop for closure phases: `waiting-merge`, `conflicting`, `pending-cleanup`
99
+ - If blocked on stop: resolve state then re-run `xtrm finish`
103
100
 
104
101
  ---
105
102
 
@@ -161,12 +158,9 @@ You do not invoke these manually — they fire via PostToolUse hooks. If a gate
161
158
  lint/type error before continuing. Do not suppress errors with `// eslint-disable` or `# type: ignore`
162
159
  unless there is a genuine reason.
163
160
 
164
- > **Needs configuration**: quality-gates is a project skill installed per-project:
165
- > ```bash
166
- > xtrm install project quality-gates
167
- > ```
168
- > After install, verify `.claude/settings.json` includes PostToolUse hooks, and that the project
169
- > has `eslint.config.*` (TS) or `pyproject.toml` / `ruff.toml` (Python) configured.
161
+ > **Global-first behavior**: quality-gates hooks are global; no per-project install is needed.
162
+ > Run `xtrm init` once per repository to bootstrap project data, then ensure the repo has
163
+ > `eslint.config.*` (TS) or `pyproject.toml` / `ruff.toml` (Python) configured so checks can run.
170
164
 
171
165
  ---
172
166
 
@@ -205,8 +199,9 @@ unless there is a genuine reason.
205
199
  **Integrations:**
206
200
  `obsidian-cli`, `hook-development`, `claude-api`
207
201
 
208
- **Project Skills** (install per-project with `xtrm install project <name>`):
209
- `quality-gates`, `service-skills-set`
202
+ **Global-first note:**
203
+ `quality-gates` and `service-skills` workflows are globally available after `xtrm install all`.
204
+ Use `xtrm init` to provision per-project data (beads + service-registry + GitNexus index).
210
205
 
211
206
  ---
212
207
 
@@ -216,14 +211,15 @@ These hooks run automatically — you cannot disable them mid-session:
216
211
 
217
212
  | Hook | Trigger | Effect |
218
213
  |---|---|---|
219
- | `main-guard.mjs` | PreToolUse (Edit/Write/Serena) | Blocks edits on `main`/`master` |
214
+ | `main-guard.mjs` | PreToolUse (Edit/Write/Serena/Bash) | Blocks edits and unsafe Bash on protected branches |
220
215
  | `beads-edit-gate.mjs` | PreToolUse (Edit/Write/Serena) | Blocks edits without active claim |
221
216
  | `beads-commit-gate.mjs` | PreToolUse (Bash: git commit) | Blocks commit with unclosed claim |
222
- | `beads-stop-gate.mjs` | Stop | Blocks session end with open claim |
223
- | `gitnexus-impact-reminder.py` | UserPromptSubmit (edit-intent keywords) | Injects impact analysis reminder |
224
- | `serena-workflow-reminder.py` | SessionStart + PreToolUse (Edit) | Enforces Serena LSP over raw Edit |
225
- | `skill-suggestion.py` | UserPromptSubmit | Suggests relevant skill if detected |
226
- | `quality-gates` hooks | PostToolUse (Edit/Write) | Runs lint + type checks automatically |
217
+ | `beads-claim-sync.mjs` | PostToolUse (Bash claim command) | Syncs claim + creates worktree + writes session state |
218
+ | `beads-stop-gate.mjs` | Stop | Blocks stop for unresolved session-flow phases |
219
+ | `beads-memory-gate.mjs` | Stop | Prompts for persistent insights after closure |
220
+ | `beads-compact-save/restore.mjs` | PreCompact / SessionStart | Preserves claim + session state across compact |
221
+ | `serena-workflow-reminder.py` | SessionStart | Reminds semantic editing workflow |
222
+ | `quality-check.(cjs|py)` | PostToolUse (Edit/Write) | Runs lint + type checks automatically |
227
223
 
228
224
  ---
229
225
 
@@ -241,9 +237,9 @@ These hooks run automatically — you cannot disable them mid-session:
241
237
 
242
238
  ## Checklist Before Finishing Any Task
243
239
 
244
- 1. `gitnexus_detect_changes({scope: "staged"})` — confirms only expected files changed
240
+ 1. `gitnexus_detect_changes(...)` — confirms only expected files/flows changed
245
241
  2. All d=1 dependents updated (if any signal from impact analysis)
246
- 3. Tests pass: `npx vitest run`
242
+ 3. Tests pass (targeted + relevant integration)
247
243
  4. Beads issue closed: `bd close <id>`
248
- 5. Feature branch pushed, PR created and merged
249
- 6. Back on `main`: `git checkout main && git reset --hard origin/main`
244
+ 5. Run `xtrm finish` for blocking closure lifecycle
245
+ 6. Verify session state reached `cleanup-done` (or intentional re-entry state)