sequant 2.6.1 → 2.7.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +4 -0
- package/dist/bin/cli.js +28 -4
- package/dist/marketplace/external_plugins/sequant/.claude-plugin/plugin.json +1 -1
- package/dist/marketplace/external_plugins/sequant/skills/assess/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/clean/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/docs/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/exec/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/fullsolve/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/improve/SKILL.md +4 -1
- package/dist/marketplace/external_plugins/sequant/skills/loop/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/merger/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/qa/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/reflect/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/security-review/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/setup/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/solve/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/spec/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/test/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/testgen/SKILL.md +3 -0
- package/dist/marketplace/external_plugins/sequant/skills/verify/SKILL.md +3 -0
- package/dist/src/commands/ready.js +1 -1
- package/dist/src/commands/run.js +1 -1
- package/dist/src/commands/sync.d.ts +44 -5
- package/dist/src/commands/sync.js +244 -18
- package/dist/src/commands/update.d.ts +1 -0
- package/dist/src/commands/update.js +80 -68
- package/dist/src/lib/templates.d.ts +50 -0
- package/dist/src/lib/templates.js +134 -15
- package/dist/src/ui/tui/App.js +24 -2
- package/dist/src/ui/tui/IssueBox.js +4 -4
- package/dist/src/ui/tui/load.d.ts +25 -0
- package/dist/src/ui/tui/load.js +41 -0
- package/dist/src/ui/tui/theme.d.ts +21 -3
- package/dist/src/ui/tui/theme.js +22 -4
- package/package.json +1 -1
- package/templates/skills/assess/SKILL.md +3 -0
- package/templates/skills/clean/SKILL.md +3 -0
- package/templates/skills/docs/SKILL.md +3 -0
- package/templates/skills/exec/SKILL.md +3 -0
- package/templates/skills/fullsolve/SKILL.md +3 -0
- package/templates/skills/improve/SKILL.md +4 -1
- package/templates/skills/loop/SKILL.md +3 -0
- package/templates/skills/merger/SKILL.md +3 -0
- package/templates/skills/qa/SKILL.md +3 -0
- package/templates/skills/reflect/SKILL.md +3 -0
- package/templates/skills/security-review/SKILL.md +3 -0
- package/templates/skills/setup/SKILL.md +3 -0
- package/templates/skills/solve/SKILL.md +3 -0
- package/templates/skills/spec/SKILL.md +3 -0
- package/templates/skills/test/SKILL.md +3 -0
- package/templates/skills/testgen/SKILL.md +3 -0
- package/templates/skills/verify/SKILL.md +3 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
{
|
|
9
9
|
"name": "sequant",
|
|
10
10
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees, quality gates, and an MCP server. Includes 17 skills, workflow MCP tools, and pre/post-tool hooks.",
|
|
11
|
-
"version": "2.
|
|
11
|
+
"version": "2.7.0",
|
|
12
12
|
"author": {
|
|
13
13
|
"name": "sequant-io",
|
|
14
14
|
"email": "hello@sequant.io"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
3
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees and quality gates, through spec → exec → qa phases.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.7.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
package/README.md
CHANGED
|
@@ -16,6 +16,10 @@ AI coding agents write code well, but leave you to run the workflow around it
|
|
|
16
16
|
|
|
17
17
|
See the [CHANGELOG](CHANGELOG.md) for release notes, or the [migration guide](CHANGELOG.md#migration-from-v1x) if upgrading from v1.x.
|
|
18
18
|
|
|
19
|
+
### What's new in 2.7
|
|
20
|
+
|
|
21
|
+
- **Trustworthy `--dry-run` previews for `sync` and `update`** — `sequant sync --dry-run` (`-d`) previews the exact set the apply would write (`new` + `modified` + `local-override`) and mutates nothing. Both `sync --dry-run` and `update --dry-run` now exit non-zero when work is pending, so a CI/automation job can gate on the exit code instead of parsing stdout. (`update` is the interactive command; `sync` is the documented non-interactive/CI surface.)
|
|
22
|
+
|
|
19
23
|
### What's new in 2.6
|
|
20
24
|
|
|
21
25
|
- **Boxed Ink TUI is the default for `sequant run`** — on a TTY, `run` now renders the boxed dashboard by default (matching `sequant ready`). Opt out with `--no-tui` (line renderer) or `-s`/`--quiet` (heartbeat-only); non-TTY output auto-degrades.
|
package/dist/bin/cli.js
CHANGED
|
@@ -44,7 +44,7 @@ import { logsCommand } from "../src/commands/logs.js";
|
|
|
44
44
|
import { statsCommand } from "../src/commands/stats.js";
|
|
45
45
|
import { dashboardCommand } from "../src/commands/dashboard.js";
|
|
46
46
|
import { stateInitCommand, stateRebuildCommand, stateCleanCommand, } from "../src/commands/state.js";
|
|
47
|
-
import { syncCommand, areSkillsOutdated } from "../src/commands/sync.js";
|
|
47
|
+
import { syncCommand, areSkillsOutdated, checkAndWarnSkillsOutdated, } from "../src/commands/sync.js";
|
|
48
48
|
import { mergeCommand } from "../src/commands/merge.js";
|
|
49
49
|
import { readyCommand, } from "../src/commands/ready.js";
|
|
50
50
|
import { conventionsCommand } from "../src/commands/conventions.js";
|
|
@@ -128,12 +128,14 @@ program
|
|
|
128
128
|
.description("Update templates from the Sequant package")
|
|
129
129
|
.option("-d, --dry-run", "Show what would be updated without making changes")
|
|
130
130
|
.option("-f, --force", "Overwrite local modifications")
|
|
131
|
+
.option("-y, --yes", "Apply updates without prompting (for CI/non-interactive shells)")
|
|
131
132
|
.action(updateCommand);
|
|
132
133
|
program
|
|
133
134
|
.command("sync")
|
|
134
135
|
.description("Sync skills and templates from the Sequant package (non-interactive)")
|
|
135
136
|
.option("-f, --force", "Sync even if versions match")
|
|
136
137
|
.option("-q, --quiet", "Suppress output")
|
|
138
|
+
.option("-d, --dry-run", "Show what sync would write without making changes (exits non-zero if work is pending)")
|
|
137
139
|
.action(syncCommand);
|
|
138
140
|
program
|
|
139
141
|
.command("doctor")
|
|
@@ -399,14 +401,36 @@ locksCmd
|
|
|
399
401
|
// Projects that manage skills manually (no marker) are not affected.
|
|
400
402
|
program.hook("preAction", async (thisCommand) => {
|
|
401
403
|
const cmd = thisCommand.name();
|
|
402
|
-
|
|
404
|
+
// `update` is excluded alongside `init`/`sync`: it is itself the command that
|
|
405
|
+
// resolves drift, so the warn-only "run sync/update" pre-flight would be a
|
|
406
|
+
// circular nag right before it does exactly that.
|
|
407
|
+
if (cmd === "init" || cmd === "sync" || cmd === "update")
|
|
403
408
|
return;
|
|
404
409
|
const manifest = await getManifest();
|
|
405
410
|
if (!manifest)
|
|
406
411
|
return;
|
|
407
|
-
|
|
408
|
-
|
|
412
|
+
// `cache: true` opts the per-command pre-flight into the stat-only drift
|
|
413
|
+
// fingerprint cache: the full template scan runs only when something that
|
|
414
|
+
// affects drift changed, keeping latency off the hot path (AC-5).
|
|
415
|
+
const status = await areSkillsOutdated({ cache: true });
|
|
416
|
+
const { outdated, currentVersion, contentDrift } = status;
|
|
417
|
+
// No version marker → the project manages skills manually; stay silent and
|
|
418
|
+
// do nothing (unchanged behavior — see the header comment above the hook).
|
|
419
|
+
if (currentVersion === null)
|
|
420
|
+
return;
|
|
421
|
+
if (outdated) {
|
|
422
|
+
// Version-marker mismatch → stale install: auto-sync (copy) as before.
|
|
409
423
|
await syncCommand({ quiet: true });
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// Version-current but bundled content drifted in place (#708/#713). AC-3
|
|
427
|
+
// decision: auto-sync (copy) stays gated on version bumps ONLY — we do NOT
|
|
428
|
+
// copy here, because that would clobber in-place customizations (#711).
|
|
429
|
+
// Content-only drift is surfaced as a non-destructive, warn-only signal,
|
|
430
|
+
// leaving the fix to the user (`sequant sync`/`update`). The helper never
|
|
431
|
+
// touches process.exitCode, so the command still exits normally.
|
|
432
|
+
if (contentDrift > 0) {
|
|
433
|
+
await checkAndWarnSkillsOutdated(status);
|
|
410
434
|
}
|
|
411
435
|
});
|
|
412
436
|
// Parse and execute
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sequant",
|
|
3
3
|
"description": "AI coding agent orchestrator for Claude Code — resolve GitHub issues end-to-end with isolated git worktrees and quality gates, through spec → exec → qa phases.",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.7.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "sequant-io",
|
|
7
7
|
"email": "hello@sequant.io"
|
|
@@ -13,6 +13,9 @@ allowed-tools:
|
|
|
13
13
|
- Bash(gh *)
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
+
<!-- sequant:local-override -->
|
|
17
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/assess/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/assess` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
18
|
+
|
|
16
19
|
# Unified Issue Assessment & Triage
|
|
17
20
|
|
|
18
21
|
You are the "Assessment Agent" for the current repository.
|
|
@@ -27,6 +27,9 @@ allowed-tools:
|
|
|
27
27
|
- Grep
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
+
<!-- sequant:local-override -->
|
|
31
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/clean/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/clean` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
32
|
+
|
|
30
33
|
# Repository Cleanup Command
|
|
31
34
|
|
|
32
35
|
Comprehensive, safe repository cleanup that archives stale files, removes artifacts, and commits changes.
|
|
@@ -18,6 +18,9 @@ allowed-tools:
|
|
|
18
18
|
- Bash(gh pr diff:*)
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
+
<!-- sequant:local-override -->
|
|
22
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/docs/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/docs` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
23
|
+
|
|
21
24
|
# Documentation Generator
|
|
22
25
|
|
|
23
26
|
You are the Phase 4 "Documentation Agent" for the current repository.
|
|
@@ -43,6 +43,9 @@ allowed-tools:
|
|
|
43
43
|
- TodoWrite
|
|
44
44
|
---
|
|
45
45
|
|
|
46
|
+
<!-- sequant:local-override -->
|
|
47
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/exec/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/exec` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
48
|
+
|
|
46
49
|
# Implementation Command
|
|
47
50
|
|
|
48
51
|
You are the Phase 2 "Implementation Agent" for the current repository.
|
|
@@ -39,6 +39,9 @@ allowed-tools:
|
|
|
39
39
|
- Bash(./scripts/list-worktrees.sh:*)
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
<!-- sequant:local-override -->
|
|
43
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/fullsolve/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/fullsolve` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
44
|
+
|
|
42
45
|
# Full Solve Command
|
|
43
46
|
|
|
44
47
|
You are the "Full Solve Agent" for the current repository.
|
|
@@ -16,6 +16,9 @@ allowed-tools:
|
|
|
16
16
|
- AskUserQuestion
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
<!-- sequant:local-override -->
|
|
20
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/improve/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/improve` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
21
|
+
|
|
19
22
|
# Improve Command
|
|
20
23
|
|
|
21
24
|
You are the "Improvement Agent" for the current repository.
|
|
@@ -665,4 +668,4 @@ Error: Path `src/nonexistent/` not found.
|
|
|
665
668
|
- [ ] **Recommendations** - Tips for running quick wins vs larger refactors
|
|
666
669
|
|
|
667
670
|
**DO NOT proceed to issue creation without user selection.**
|
|
668
|
-
**DO NOT respond until all items are verified.**
|
|
671
|
+
**DO NOT respond until all items are verified.**
|
|
@@ -25,6 +25,9 @@ allowed-tools:
|
|
|
25
25
|
- Bash(git status:*)
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
+
<!-- sequant:local-override -->
|
|
29
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/loop/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/loop` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
30
|
+
|
|
28
31
|
# Quality Loop Command
|
|
29
32
|
|
|
30
33
|
You are the "Quality Loop Agent" for the current repository.
|
|
@@ -16,6 +16,9 @@ allowed-tools:
|
|
|
16
16
|
- Glob
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
<!-- sequant:local-override -->
|
|
20
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/merger/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/merger` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
21
|
+
|
|
19
22
|
# Merger Skill
|
|
20
23
|
|
|
21
24
|
You are the "Merger Agent" for handling post-QA integration of completed worktrees.
|
|
@@ -24,6 +24,9 @@ allowed-tools:
|
|
|
24
24
|
- AgentOutputTool
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
+
<!-- sequant:local-override -->
|
|
28
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/qa/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/qa` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
29
|
+
|
|
27
30
|
# QA & Code Review
|
|
28
31
|
|
|
29
32
|
You are the Phase 3 "QA & Code Review Agent" for the current repository.
|
|
@@ -12,6 +12,9 @@ allowed-tools:
|
|
|
12
12
|
- Grep
|
|
13
13
|
---
|
|
14
14
|
|
|
15
|
+
<!-- sequant:local-override -->
|
|
16
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/reflect/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/reflect` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
17
|
+
|
|
15
18
|
# Reflection Agent
|
|
16
19
|
|
|
17
20
|
You are the "Reflection Agent" for the current repository.
|
|
@@ -17,6 +17,9 @@ allowed-tools:
|
|
|
17
17
|
- Bash(gh issue comment:*)
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
<!-- sequant:local-override -->
|
|
21
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/security-review/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/security-review` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
22
|
+
|
|
20
23
|
# Security Review Command
|
|
21
24
|
|
|
22
25
|
You are the Security Review Agent for the current repository.
|
|
@@ -30,6 +30,9 @@ allowed-tools:
|
|
|
30
30
|
- Bash(curl:*)
|
|
31
31
|
---
|
|
32
32
|
|
|
33
|
+
<!-- sequant:local-override -->
|
|
34
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/setup/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/setup` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
35
|
+
|
|
33
36
|
# Sequant Setup
|
|
34
37
|
|
|
35
38
|
Initialize Sequant workflow system in your current project.
|
|
@@ -13,6 +13,9 @@ allowed-tools:
|
|
|
13
13
|
- Bash(gh *)
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
+
<!-- sequant:local-override -->
|
|
17
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/solve/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/solve` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
18
|
+
|
|
16
19
|
# /solve — Deprecated Alias for /assess
|
|
17
20
|
|
|
18
21
|
**This command has been merged into `/assess`.** Use `/assess` instead.
|
|
@@ -17,6 +17,9 @@ allowed-tools:
|
|
|
17
17
|
- AgentOutputTool
|
|
18
18
|
---
|
|
19
19
|
|
|
20
|
+
<!-- sequant:local-override -->
|
|
21
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/spec/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/spec` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
22
|
+
|
|
20
23
|
# Planning Agent
|
|
21
24
|
|
|
22
25
|
Phase 1 "Planning Agent." Understands the issue and AC, reviews or synthesizes a plan, identifies gaps and risks, and drafts a GitHub issue comment.
|
|
@@ -19,6 +19,9 @@ allowed-tools:
|
|
|
19
19
|
- Bash(npx tsx:*)
|
|
20
20
|
---
|
|
21
21
|
|
|
22
|
+
<!-- sequant:local-override -->
|
|
23
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/test/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/test` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
24
|
+
|
|
22
25
|
# Browser Testing Command
|
|
23
26
|
|
|
24
27
|
You are the "Testing Agent" for the current repository.
|
|
@@ -20,6 +20,9 @@ allowed-tools:
|
|
|
20
20
|
- Agent(sequant-testgen)
|
|
21
21
|
---
|
|
22
22
|
|
|
23
|
+
<!-- sequant:local-override -->
|
|
24
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/testgen/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/testgen` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
25
|
+
|
|
23
26
|
# Test Generation Command
|
|
24
27
|
|
|
25
28
|
You are the "Test Generation Agent" for the current repository.
|
|
@@ -15,6 +15,9 @@ allowed-tools:
|
|
|
15
15
|
- Bash(gh issue comment:*)
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
<!-- sequant:local-override -->
|
|
19
|
+
> **Local overrides (read this first).** Before following any instruction below, check whether `.claude/.local/skills/verify/overrides.md` exists. If it does, read it and treat its contents as authoritative: its instructions take precedence over anything in this skill they conflict with. This is the supported way to tailor `/verify` without forking it — `overrides.md` lives under `.claude/.local/`, which `sequant update` and `sync` never overwrite.
|
|
20
|
+
|
|
18
21
|
# Execution Verification
|
|
19
22
|
|
|
20
23
|
You are the "Execution Verification Agent" for the current repository.
|
|
@@ -130,7 +130,7 @@ export async function readyCommand(issueArg, options) {
|
|
|
130
130
|
const branch = listWorktrees().find((w) => w.issue === issueNumber)?.branch ?? "";
|
|
131
131
|
adapter = new ReadySnapshotAdapter({ issueNumber, title, branch });
|
|
132
132
|
onProgress = adapter.onProgress;
|
|
133
|
-
const { renderTui } = await import("../ui/tui/
|
|
133
|
+
const { renderTui } = await (await import("../ui/tui/load.js")).loadTui();
|
|
134
134
|
tuiHandle = renderTui(adapter);
|
|
135
135
|
}
|
|
136
136
|
else if (!options.json) {
|
package/dist/src/commands/run.js
CHANGED
|
@@ -92,7 +92,7 @@ export async function runCommand(issues, options) {
|
|
|
92
92
|
maxLoopIterations: resolved.config.maxIterations,
|
|
93
93
|
});
|
|
94
94
|
if (tuiEnabled) {
|
|
95
|
-
const { renderTui } = await import("../ui/tui/
|
|
95
|
+
const { renderTui } = await (await import("../ui/tui/load.js")).loadTui();
|
|
96
96
|
let tuiHandle = null;
|
|
97
97
|
// Unmount the TUI before ShutdownManager writes its shutdown banner so
|
|
98
98
|
// the two don't race on stdout / leave the terminal in alt-screen buffer.
|
|
@@ -7,22 +7,61 @@
|
|
|
7
7
|
interface SyncOptions {
|
|
8
8
|
force?: boolean;
|
|
9
9
|
quiet?: boolean;
|
|
10
|
+
dryRun?: boolean;
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* Get the version of skills currently installed
|
|
13
14
|
*/
|
|
14
15
|
export declare function getSkillsVersion(): Promise<string | null>;
|
|
15
16
|
/**
|
|
16
|
-
*
|
|
17
|
+
* Skills status relative to the bundled package, as seen by the pre-flight path.
|
|
17
18
|
*/
|
|
18
|
-
export
|
|
19
|
+
export interface SkillsOutdatedStatus {
|
|
20
|
+
/** Version-marker mismatch (`.sequant-version` ≠ package). Cheap fast-path. */
|
|
19
21
|
outdated: boolean;
|
|
20
22
|
currentVersion: string | null;
|
|
21
23
|
packageVersion: string;
|
|
22
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Count of bundled files that are `new` or `modified` in place at a *matching*
|
|
26
|
+
* version (the #708 blind spot the version marker can't see). Only computed
|
|
27
|
+
* when versions match; `0` otherwise (a mismatch already means stale). Excludes
|
|
28
|
+
* `local-override`/`unchanged` so customized files (e.g. constitution, #711)
|
|
29
|
+
* don't register as drift.
|
|
30
|
+
*/
|
|
31
|
+
contentDrift: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if skills are outdated compared to package version.
|
|
35
|
+
*
|
|
36
|
+
* The version marker is only a cheap hint: a tree at the matching version can
|
|
37
|
+
* still have drifted bundled content in place (the #708 root cause). So when the
|
|
38
|
+
* marker matches we run the same content diff `sync` uses (`computeTemplateChanges`,
|
|
39
|
+
* the single source of truth from #708/#710) and surface a `contentDrift` count.
|
|
40
|
+
* On a version *mismatch* we skip the diff entirely — the install is already stale
|
|
41
|
+
* and the copy path handles it — keeping the per-command pre-flight cheap (AC-5).
|
|
42
|
+
*
|
|
43
|
+
* `options.cache` opts into a stat-only fingerprint cache for the content scan,
|
|
44
|
+
* so the hot pre-flight path (which runs before most commands, including batched
|
|
45
|
+
* `/assess` dashboard calls) pays the full ~15ms scan only when something that
|
|
46
|
+
* affects drift actually changed. Off by default so diagnostic callers (`doctor`)
|
|
47
|
+
* always see fresh truth.
|
|
48
|
+
*/
|
|
49
|
+
export declare function areSkillsOutdated(options?: {
|
|
50
|
+
cache?: boolean;
|
|
51
|
+
}): Promise<SkillsOutdatedStatus>;
|
|
23
52
|
export declare function syncCommand(options?: SyncOptions): Promise<void>;
|
|
24
53
|
/**
|
|
25
|
-
* Check and warn if skills are outdated (for use by other commands)
|
|
54
|
+
* Check and warn if skills are outdated (for use by other commands).
|
|
55
|
+
*
|
|
56
|
+
* Warns on either signal: a version-marker mismatch, or in-place content drift at
|
|
57
|
+
* a matching version (#708/#713). The content-drift path is warn-only by design —
|
|
58
|
+
* it never mutates files and never sets `process.exitCode` (this is a pre-flight,
|
|
59
|
+
* not the command itself), so customized installs (#711) are left intact.
|
|
60
|
+
*
|
|
61
|
+
* Callers that have already computed the status (e.g. the `preAction` hook) can
|
|
62
|
+
* pass it in to avoid a second template scan on the hot path (AC-5).
|
|
63
|
+
*
|
|
64
|
+
* @returns `true` if a warning was emitted, `false` if up to date.
|
|
26
65
|
*/
|
|
27
|
-
export declare function checkAndWarnSkillsOutdated(): Promise<boolean>;
|
|
66
|
+
export declare function checkAndWarnSkillsOutdated(status?: SkillsOutdatedStatus): Promise<boolean>;
|
|
28
67
|
export {};
|