@codyswann/lisa 4.55.12 → 4.55.14
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/all/copy-overwrite/scripts/lisa-work-item.mjs +56 -6
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +4 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +5 -3
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
- package/plugins/lisa/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/lisa/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/lisa-agy/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/lisa-copilot/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/lisa-cursor/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/base/skills/lisa-github-sync/SKILL.md +5 -3
- package/plugins/src/base/skills/lisa-setup-remote-env/scripts/setup-remote-env.mjs +7 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.55.
|
|
3
|
+
"version": "4.55.14",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.55.
|
|
3
|
+
"version": "4.55.14",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.55.
|
|
3
|
+
"version": "4.55.14",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -41,6 +41,8 @@ Optional arguments include `pr_url=<url>` for the live pull request and `merge_s
|
|
|
41
41
|
|
|
42
42
|
### Step 3: Post Update
|
|
43
43
|
|
|
44
|
+
For `--rollup`, skip this milestone path and use Step 5's classifier decision.
|
|
45
|
+
|
|
44
46
|
1. **Idempotency check** — read the issue's recent comments. If the most recent comment with the prefix `[claude-sync] <milestone>` matches the current milestone AND the body content is unchanged, skip the post (no duplicate).
|
|
45
47
|
2. **Add the comment**:
|
|
46
48
|
|
|
@@ -48,7 +50,7 @@ Optional arguments include `pr_url=<url>` for the live pull request and `merge_s
|
|
|
48
50
|
gh issue comment <number> --repo <org>/<repo> --body-file /tmp/sync-comment.md
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
The body must start with `[claude-sync] <milestone>` so the next sync run can
|
|
53
|
+
The body must start with `[claude-sync] <milestone>` so the next sync run can locate it for comparison.
|
|
52
54
|
|
|
53
55
|
3. **Report** to the user what was synced.
|
|
54
56
|
|
|
@@ -111,7 +113,7 @@ If the `subIssues` field is unavailable (older GHES), fall back to body parentag
|
|
|
111
113
|
| else (children exist, none started) | — | unchanged — parent keeps its non-ready container label |
|
|
112
114
|
|
|
113
115
|
- **Blocked dominates — and the rollup must say which child and which kind** — a single blocked child surfaces `status:blocked` on the parent even while siblings progress, so a human sees the parent needs attention. `status:blocked` alone is a single bit and cannot tell a child waiting on an external event from one whose acceptance criteria are unbuildable; the second never clears on its own.
|
|
114
|
-
- **Run the shared classifier for every derived rollup state before writing the label or comment**, not only for `status:blocked`. Include the exact rendered state and child tally in the classifier input alongside the resolved child graph, so
|
|
116
|
+
- **Run the shared classifier for every derived rollup state before writing the label or comment**, not only for `status:blocked`. Include the exact rendered state and child tally in the classifier input alongside the resolved child graph, so `change.changed` covers the complete rollup note for `status:in-progress`, every env-keyed `done`, and `status:blocked` alike:
|
|
115
117
|
|
|
116
118
|
```bash
|
|
117
119
|
run_rollup_classifier() {
|
|
@@ -190,7 +192,7 @@ gh issue edit <parent-number> --repo <org>/<repo> \
|
|
|
190
192
|
## Important Notes
|
|
191
193
|
|
|
192
194
|
- **Never auto-transition labels** — always suggest and let the user / pipeline confirm. The one exception is the explicit `--rollup` parent derivation (Step 5), which moves a *parent's* `status:*` label as the `leaf-only-lifecycle` rule mandates — never a leaf's, and never to `status:ready`.
|
|
193
|
-
- **Idempotent updates** —
|
|
195
|
+
- **Idempotent updates** — compare milestone comments as described in Step 3. For parent rollups, use `[claude-sync] rollup` only to locate the managed comment; use Step 5's persisted fingerprint and `change.changed` decision, never prefix or body equality.
|
|
194
196
|
- **Comment format** — use GitHub-flavored markdown (`##` headings, fenced code blocks). The same template is used for the JIRA path (rendered as wiki markup there); keep the markdown source canonical.
|
|
195
197
|
- **Rollup cites the rule by slug** — parent state derivation follows the `leaf-only-lifecycle` rule's state machine; this skill does not restate the policy.
|
|
196
198
|
|
|
@@ -846,6 +846,8 @@ export function installUserSessionHook(repoRoot, options = {}) {
|
|
|
846
846
|
? hooks.SessionStart
|
|
847
847
|
: [];
|
|
848
848
|
let installed = false;
|
|
849
|
+
// Distinct matchers may cover different events. Do not infer regex equivalence.
|
|
850
|
+
const installedMatchers = new Set();
|
|
849
851
|
let migrated = false;
|
|
850
852
|
const normalizedSessionStart = sessionStart.flatMap(entry => {
|
|
851
853
|
if (!Array.isArray(entry?.hooks)) return [entry];
|
|
@@ -853,18 +855,21 @@ export function installUserSessionHook(repoRoot, options = {}) {
|
|
|
853
855
|
if (hook?.command !== command && hook?.command !== legacyCommand) {
|
|
854
856
|
return [hook];
|
|
855
857
|
}
|
|
856
|
-
if (
|
|
858
|
+
if (installedMatchers.has(entry.matcher)) {
|
|
857
859
|
migrated = true;
|
|
858
860
|
return [];
|
|
859
861
|
}
|
|
860
862
|
installed = true;
|
|
863
|
+
installedMatchers.add(entry.matcher);
|
|
861
864
|
if (hook.command === command) return [hook];
|
|
862
865
|
migrated = true;
|
|
863
866
|
return [{ ...hook, command }];
|
|
864
867
|
});
|
|
865
868
|
return normalizedHooks.length > 0
|
|
866
869
|
? [{ ...entry, hooks: normalizedHooks }]
|
|
867
|
-
:
|
|
870
|
+
: entry.hooks.length === 0
|
|
871
|
+
? [entry]
|
|
872
|
+
: [];
|
|
868
873
|
});
|
|
869
874
|
|
|
870
875
|
if (installed) {
|