liteagents 3.5.0 → 3.6.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/CHANGELOG.md +36 -0
- package/installer/package-manager.js +3 -1
- package/package.json +1 -1
- package/packages/ampcode/skills/branch-review/SKILL.md +14 -0
- package/packages/claude/skills/branch-review/SKILL.md +14 -0
- package/packages/droid/commands/branch-review.md +14 -0
- package/packages/opencode/command/branch-review.md +14 -0
- package/tools/ampcode/manifest-template.json +0 -1
- package/tools/claude/manifest-template.json +0 -1
- package/tools/droid/manifest-template.json +0 -1
- package/tools/opencode/manifest-template.json +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [3.6.0] - 2026-09-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **`scripts/frontmatter.json` is frozen and date-stamped.** `mirror.cjs
|
|
14
|
+
shapes` now refuses to overwrite a recorded shape with a weaker one (a
|
|
15
|
+
required key demoted to optional, gone entirely, or a `Bash()` style
|
|
16
|
+
relaxed to `null`) — it reports `WEAKENING` instead of writing. `--force`
|
|
17
|
+
re-records it deliberately and updates the frozen date.
|
|
18
|
+
- **`mirror.cjs check` detects orphaned kit files** — a file under a mirrored
|
|
19
|
+
tool directory with no corresponding source under `packages/claude`, left
|
|
20
|
+
behind when a capability moves or is removed.
|
|
21
|
+
- **`/branch-review`'s review-record guard.** A recorded `last-review.md` is
|
|
22
|
+
now validated before being trusted: its `sha:` must resolve to a real
|
|
23
|
+
commit and be an ancestor of `HEAD`, and its `branch:` must match the
|
|
24
|
+
current branch. A record that fails either check — hand-edited, corrupted,
|
|
25
|
+
or left over from a merged, renamed, or rebased branch — is treated as no
|
|
26
|
+
record at all, falling through to a full review. Previously only the
|
|
27
|
+
`sha:` line was compared, so a stale record resolved to a commit range
|
|
28
|
+
that never existed.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- **`supported_variants` removed from all four `tools/*/manifest-template.json`.**
|
|
32
|
+
It advertised `["lite","standard","pro"]` in every installed `manifest.json`
|
|
33
|
+
when only one install exists, and nothing read the field.
|
|
34
|
+
- **`tests/installer/package-manager.test.js` was never registered** in
|
|
35
|
+
`tests/run-all-tests.js`, so it had never run. Standalone it failed 22 of
|
|
36
|
+
44 tests against the removed three-variant installer, and wrote 11 fixtures
|
|
37
|
+
into `packages/` inside the repo. Rewritten against the single-variant
|
|
38
|
+
reality, every fixture now in an isolated temp directory, and registered.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- Installer test coverage: 1103 → 1153 tests. `getAvailableContent`'s
|
|
42
|
+
deduplication — a capability shipping both `<name>.md` and a same-named
|
|
43
|
+
`<name>/` asset directory must be listed once — now has a regression suite
|
|
44
|
+
of its own.
|
|
45
|
+
|
|
10
46
|
## [3.5.0] - 2026-09-05
|
|
11
47
|
|
|
12
48
|
### Breaking
|
|
@@ -349,7 +349,9 @@ class PackageManager {
|
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
|
|
352
|
+
// A command with both a <name>.md file and a same-named <name>/
|
|
353
|
+
// subdirectory (bundled assets) would otherwise appear twice here.
|
|
354
|
+
return { items: [...new Set(result)], dirName: path.basename(dir) };
|
|
353
355
|
};
|
|
354
356
|
|
|
355
357
|
// Check for both plural and singular directory names
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "liteagents",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "AI development toolkit with 10 specialized agents and 13 capabilities including live-canvas UI design with click-to-annotate feedback. Simple one-question installer for Claude, Opencode, Ampcode, and Droid.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -100,6 +100,20 @@ was actually read rather than assuming.
|
|
|
100
100
|
you owe an answer on — take both from the file, never from the orchestrator's
|
|
101
101
|
recollection, for the same reason `/release` does. Then:
|
|
102
102
|
|
|
103
|
+
- **First, check the record belongs to this branch.** There is one record file
|
|
104
|
+
per repo, not one per branch. Validate `<that sha>` first with
|
|
105
|
+
`git rev-parse --verify <that sha>` — a value that fails this (e.g. a
|
|
106
|
+
corrupted or hand-edited record, or one starting with `-`, which git would
|
|
107
|
+
otherwise parse as an option) is a malformed record; treat it exactly as
|
|
108
|
+
**No file** below. If it validates, and its `branch:` line differs from the
|
|
109
|
+
current branch, or `git merge-base --is-ancestor <that sha> HEAD` exits
|
|
110
|
+
non-zero, the record describes a different or rewritten history — treat it
|
|
111
|
+
exactly as **No file** below and review the whole branch. Skipping this
|
|
112
|
+
resolves `<that sha>..HEAD` against a merged, renamed, or rebased sha, which
|
|
113
|
+
is not a subset of this branch but a range that never existed. Check both:
|
|
114
|
+
the branch name catches a switch, the ancestry check catches a rebase or
|
|
115
|
+
squash under the same name. Otherwise:
|
|
116
|
+
|
|
103
117
|
- **`sha:` ≠ HEAD** → this is a re-review. Target the range
|
|
104
118
|
`<that sha>..HEAD`. Stage 1 reads only the commits since, and stage 3
|
|
105
119
|
re-verifies each recorded blocker as fixed, unfixed, or dismissed with a
|
|
@@ -100,6 +100,20 @@ was actually read rather than assuming.
|
|
|
100
100
|
you owe an answer on — take both from the file, never from the orchestrator's
|
|
101
101
|
recollection, for the same reason `/release` does. Then:
|
|
102
102
|
|
|
103
|
+
- **First, check the record belongs to this branch.** There is one record file
|
|
104
|
+
per repo, not one per branch. Validate `<that sha>` first with
|
|
105
|
+
`git rev-parse --verify <that sha>` — a value that fails this (e.g. a
|
|
106
|
+
corrupted or hand-edited record, or one starting with `-`, which git would
|
|
107
|
+
otherwise parse as an option) is a malformed record; treat it exactly as
|
|
108
|
+
**No file** below. If it validates, and its `branch:` line differs from the
|
|
109
|
+
current branch, or `git merge-base --is-ancestor <that sha> HEAD` exits
|
|
110
|
+
non-zero, the record describes a different or rewritten history — treat it
|
|
111
|
+
exactly as **No file** below and review the whole branch. Skipping this
|
|
112
|
+
resolves `<that sha>..HEAD` against a merged, renamed, or rebased sha, which
|
|
113
|
+
is not a subset of this branch but a range that never existed. Check both:
|
|
114
|
+
the branch name catches a switch, the ancestry check catches a rebase or
|
|
115
|
+
squash under the same name. Otherwise:
|
|
116
|
+
|
|
103
117
|
- **`sha:` ≠ HEAD** → this is a re-review. Target the range
|
|
104
118
|
`<that sha>..HEAD`. Stage 1 reads only the commits since, and stage 3
|
|
105
119
|
re-verifies each recorded blocker as fixed, unfixed, or dismissed with a
|
|
@@ -97,6 +97,20 @@ was actually read rather than assuming.
|
|
|
97
97
|
you owe an answer on — take both from the file, never from the orchestrator's
|
|
98
98
|
recollection, for the same reason `/release` does. Then:
|
|
99
99
|
|
|
100
|
+
- **First, check the record belongs to this branch.** There is one record file
|
|
101
|
+
per repo, not one per branch. Validate `<that sha>` first with
|
|
102
|
+
`git rev-parse --verify <that sha>` — a value that fails this (e.g. a
|
|
103
|
+
corrupted or hand-edited record, or one starting with `-`, which git would
|
|
104
|
+
otherwise parse as an option) is a malformed record; treat it exactly as
|
|
105
|
+
**No file** below. If it validates, and its `branch:` line differs from the
|
|
106
|
+
current branch, or `git merge-base --is-ancestor <that sha> HEAD` exits
|
|
107
|
+
non-zero, the record describes a different or rewritten history — treat it
|
|
108
|
+
exactly as **No file** below and review the whole branch. Skipping this
|
|
109
|
+
resolves `<that sha>..HEAD` against a merged, renamed, or rebased sha, which
|
|
110
|
+
is not a subset of this branch but a range that never existed. Check both:
|
|
111
|
+
the branch name catches a switch, the ancestry check catches a rebase or
|
|
112
|
+
squash under the same name. Otherwise:
|
|
113
|
+
|
|
100
114
|
- **`sha:` ≠ HEAD** → this is a re-review. Target the range
|
|
101
115
|
`<that sha>..HEAD`. Stage 1 reads only the commits since, and stage 3
|
|
102
116
|
re-verifies each recorded blocker as fixed, unfixed, or dismissed with a
|
|
@@ -96,6 +96,20 @@ was actually read rather than assuming.
|
|
|
96
96
|
you owe an answer on — take both from the file, never from the orchestrator's
|
|
97
97
|
recollection, for the same reason `/release` does. Then:
|
|
98
98
|
|
|
99
|
+
- **First, check the record belongs to this branch.** There is one record file
|
|
100
|
+
per repo, not one per branch. Validate `<that sha>` first with
|
|
101
|
+
`git rev-parse --verify <that sha>` — a value that fails this (e.g. a
|
|
102
|
+
corrupted or hand-edited record, or one starting with `-`, which git would
|
|
103
|
+
otherwise parse as an option) is a malformed record; treat it exactly as
|
|
104
|
+
**No file** below. If it validates, and its `branch:` line differs from the
|
|
105
|
+
current branch, or `git merge-base --is-ancestor <that sha> HEAD` exits
|
|
106
|
+
non-zero, the record describes a different or rewritten history — treat it
|
|
107
|
+
exactly as **No file** below and review the whole branch. Skipping this
|
|
108
|
+
resolves `<that sha>..HEAD` against a merged, renamed, or rebased sha, which
|
|
109
|
+
is not a subset of this branch but a range that never existed. Check both:
|
|
110
|
+
the branch name catches a switch, the ancestry check catches a rebase or
|
|
111
|
+
squash under the same name. Otherwise:
|
|
112
|
+
|
|
99
113
|
- **`sha:` ≠ HEAD** → this is a re-review. Target the range
|
|
100
114
|
`<that sha>..HEAD`. Stage 1 reads only the commits since, and stage 3
|
|
101
115
|
re-verifies each recorded blocker as fixed, unfixed, or dismissed with a
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
"optimization": "amplified-codegen",
|
|
7
7
|
"integration_type": "cli",
|
|
8
8
|
"manifest_format": "ampcode-config",
|
|
9
|
-
"supported_variants": ["lite", "standard", "pro"],
|
|
10
9
|
"agent_format": "amplified-optimized",
|
|
11
10
|
"skill_compatibility": "ampcode-native",
|
|
12
11
|
"resource_format": "enhanced",
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
"optimization": "conversational-ai",
|
|
7
7
|
"integration_type": "plugin",
|
|
8
8
|
"manifest_format": "claude-plugin",
|
|
9
|
-
"supported_variants": ["lite", "standard", "pro"],
|
|
10
9
|
"agent_format": "claude-conversational",
|
|
11
10
|
"skill_compatibility": "claude-native",
|
|
12
11
|
"resource_format": "markdown",
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
"optimization": "mobile-codegen",
|
|
7
7
|
"integration_type": "cli",
|
|
8
8
|
"manifest_format": "droid-config",
|
|
9
|
-
"supported_variants": ["lite", "standard", "pro"],
|
|
10
9
|
"agent_format": "mobile-optimized",
|
|
11
10
|
"skill_compatibility": "droid-native",
|
|
12
11
|
"resource_format": "mobile-focused",
|