@codyswann/lisa 4.4.1 → 4.4.3
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/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +12 -29
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- 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-cursor/.claude-plugin/plugin.json +1 -1
- 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/scripts/check-delivery-deletion-conflicts.mjs +2 -2
- package/scripts/check-derived-artifacts.mjs +24 -5
- package/scripts/check-orphan-test-processes.mjs +2 -2
- package/scripts/check-security-floors.mjs +20 -9
- package/scripts/check-template-workflow-refs.mjs +23 -8
- package/scripts/check-workflow-package-paths.mjs +12 -8
- package/scripts/generate-lisa-owned-hash-ledger.mjs +12 -4
- package/scripts/generate-upstream-evidence-manifest.mjs +4 -4
- package/scripts/verify-health-agentic-built.mjs +4 -3
- package/scripts/verify-health-consumer-built.mjs +3 -2
- package/scripts/verify-health-contract-built.mjs +3 -2
- package/scripts/verify-health-deterministic-built.mjs +5 -4
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
- package/plugins/lisa/.codex-plugin/skills/lisa-parity-safety-net-rules/agents/openai.yaml +0 -4
- package/plugins/lisa/commands/parity-safety-net-rules.md +0 -6
- package/plugins/lisa/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
- package/plugins/lisa/skills/lisa-parity-safety-net-rules/agents/openai.yaml +0 -4
- package/plugins/lisa-agy/commands/lisa/parity-safety-net-rules.md +0 -6
- package/plugins/lisa-agy/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
- package/plugins/lisa-copilot/commands/lisa/parity-safety-net-rules.md +0 -6
- package/plugins/lisa-copilot/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
- package/plugins/lisa-cursor/commands/lisa/parity-safety-net-rules.md +0 -6
- package/plugins/lisa-cursor/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
- package/plugins/src/base/commands/parity-safety-net-rules.md +0 -6
- package/plugins/src/base/skills/lisa-parity-safety-net-rules/SKILL.md +0 -263
package/package.json
CHANGED
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
"zod-validation-error": "^4.0.0"
|
|
146
146
|
},
|
|
147
147
|
"name": "@codyswann/lisa",
|
|
148
|
-
"version": "4.4.
|
|
148
|
+
"version": "4.4.3",
|
|
149
149
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
150
150
|
"main": "dist/index.js",
|
|
151
151
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.3",
|
|
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.4.
|
|
3
|
+
"version": "4.4.3",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.4.
|
|
3
|
+
"version": "4.4.3",
|
|
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.4.
|
|
3
|
+
"version": "4.4.3",
|
|
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.4.
|
|
3
|
+
"version": "4.4.3",
|
|
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"
|
|
@@ -82,12 +82,12 @@
|
|
|
82
82
|
*
|
|
83
83
|
* @module scripts/check-delivery-deletion-conflicts
|
|
84
84
|
*/
|
|
85
|
-
import { execFileSync } from "node:child_process";
|
|
86
85
|
import fs from "node:fs";
|
|
87
86
|
import path from "node:path";
|
|
88
87
|
import process from "node:process";
|
|
89
88
|
import { fileURLToPath } from "node:url";
|
|
90
89
|
|
|
90
|
+
import { boundedExecFileSync } from "./lib/bounded-spawn.mjs";
|
|
91
91
|
import { invokedAsScript } from "./lib/invoked-as-script.mjs";
|
|
92
92
|
|
|
93
93
|
const REPO_ROOT = path.resolve(
|
|
@@ -250,7 +250,7 @@ export function matchDeletion(delivered, deleted) {
|
|
|
250
250
|
function listTrackedFiles(root) {
|
|
251
251
|
let stdout;
|
|
252
252
|
try {
|
|
253
|
-
stdout =
|
|
253
|
+
stdout = boundedExecFileSync("git", ["-C", root, "ls-files", "-z"], {
|
|
254
254
|
encoding: "utf8",
|
|
255
255
|
maxBuffer: MAX_GIT_OUTPUT_BYTES,
|
|
256
256
|
stdio: ["ignore", "pipe", "ignore"],
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
* on a commit that owed nothing, which is the safe direction to be wrong in.
|
|
45
45
|
* @module scripts/check-derived-artifacts
|
|
46
46
|
*/
|
|
47
|
-
import { execFileSync } from "node:child_process";
|
|
48
47
|
import path from "node:path";
|
|
49
48
|
import process from "node:process";
|
|
50
49
|
|
|
50
|
+
import { boundedExecFileSync, isChildTimeout } from "./lib/bounded-spawn.mjs";
|
|
51
51
|
import { invokedAsScript } from "./lib/invoked-as-script.mjs";
|
|
52
52
|
|
|
53
53
|
const repoRoot = path.resolve(import.meta.dirname, "..");
|
|
@@ -118,18 +118,26 @@ export function requiresManifestCheck(stagedPaths) {
|
|
|
118
118
|
* Renames report their destination (`-M` plus `--diff-filter=R`), and deletions
|
|
119
119
|
* are included because removing a template is also a way to move what the
|
|
120
120
|
* artifacts describe.
|
|
121
|
-
*
|
|
121
|
+
*
|
|
122
|
+
* A KILLED child re-raises rather than returning empty. An empty list means
|
|
123
|
+
* "nothing staged touches the artifacts", which makes this guard SKIP — so a
|
|
124
|
+
* busy machine would let through the commit that moves a template without
|
|
125
|
+
* regenerating what describes it. "I could not ask" is not "there is nothing
|
|
126
|
+
* to check", and only one of those is safe to act on.
|
|
127
|
+
* @returns {string[]} Staged paths, empty when git said there were none
|
|
128
|
+
* @throws {Error} When the child was killed at its deadline
|
|
122
129
|
*/
|
|
123
130
|
export function stagedPaths() {
|
|
124
131
|
try {
|
|
125
|
-
return
|
|
132
|
+
return boundedExecFileSync(
|
|
126
133
|
"git",
|
|
127
134
|
["diff", "--cached", "--name-only", "--diff-filter=ACMRD"],
|
|
128
135
|
{ cwd: repoRoot, encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }
|
|
129
136
|
)
|
|
130
137
|
.split("\n")
|
|
131
138
|
.filter(Boolean);
|
|
132
|
-
} catch {
|
|
139
|
+
} catch (error) {
|
|
140
|
+
if (isChildTimeout(error)) throw error;
|
|
133
141
|
return [];
|
|
134
142
|
}
|
|
135
143
|
}
|
|
@@ -172,13 +180,24 @@ export function readableFailure(raw) {
|
|
|
172
180
|
*/
|
|
173
181
|
function runCheck(script) {
|
|
174
182
|
try {
|
|
175
|
-
|
|
183
|
+
boundedExecFileSync(process.execPath, [script, "--check"], {
|
|
176
184
|
cwd: repoRoot,
|
|
177
185
|
encoding: "utf8",
|
|
178
186
|
stdio: ["ignore", "pipe", "pipe"],
|
|
179
187
|
});
|
|
180
188
|
return { ok: true, output: "" };
|
|
181
189
|
} catch (error) {
|
|
190
|
+
// Already fail-closed — `ok: false` fails the guard either way — so the
|
|
191
|
+
// catch stays. What it must NOT do is stay silent about a kill: a killed
|
|
192
|
+
// child hands back EMPTY streams, so a timeout would otherwise render as a
|
|
193
|
+
// generator that failed with no diagnostic, which reads as a content
|
|
194
|
+
// problem and sends the operator to the wrong place entirely.
|
|
195
|
+
if (isChildTimeout(error)) {
|
|
196
|
+
return {
|
|
197
|
+
ok: false,
|
|
198
|
+
output: `${script} was killed before it finished. This is a timeout, not a check failure — nothing about the artifact was measured.`,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
182
201
|
const stderr = error?.stderr ?? "";
|
|
183
202
|
const stdout = error?.stdout ?? "";
|
|
184
203
|
return { ok: false, output: readableFailure(`${stdout}${stderr}`) };
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
*
|
|
45
45
|
* @module scripts/check-orphan-test-processes
|
|
46
46
|
*/
|
|
47
|
-
import { execFileSync } from "node:child_process";
|
|
48
47
|
import process from "node:process";
|
|
48
|
+
import { boundedExecFileSync } from "./lib/bounded-spawn.mjs";
|
|
49
49
|
import { invokedAsScript } from "./lib/invoked-as-script.mjs";
|
|
50
50
|
|
|
51
51
|
/**
|
|
@@ -168,7 +168,7 @@ export function selectOrphans(rows, minAgeSeconds) {
|
|
|
168
168
|
*/
|
|
169
169
|
function readProcessTable() {
|
|
170
170
|
// eslint-disable-next-line sonarjs/no-os-command-from-path -- fixed executable and argv
|
|
171
|
-
return
|
|
171
|
+
return boundedExecFileSync("ps", ["-eo", "pid,ppid,etime,command"], {
|
|
172
172
|
encoding: "utf8",
|
|
173
173
|
maxBuffer: 32 * 1024 * 1024,
|
|
174
174
|
});
|