@codyswann/lisa 2.254.0 → 2.256.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/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/.codex-plugin/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +34 -0
- package/plugins/lisa/scripts/automation-run-record.mjs +110 -0
- package/plugins/lisa/scripts/automation-status-claude-adapter.mjs +64 -8
- package/plugins/lisa/scripts/automation-status-codex-adapter.mjs +61 -5
- package/plugins/lisa/scripts/automation-status-report.mjs +30 -0
- package/plugins/lisa/scripts/automation-status-run-history.mjs +185 -0
- package/plugins/lisa/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/lisa/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/lisa/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +34 -0
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/scripts/automation-run-record.mjs +110 -0
- package/plugins/lisa-agy/scripts/automation-status-claude-adapter.mjs +64 -8
- package/plugins/lisa-agy/scripts/automation-status-codex-adapter.mjs +61 -5
- package/plugins/lisa-agy/scripts/automation-status-report.mjs +30 -0
- package/plugins/lisa-agy/scripts/automation-status-run-history.mjs +185 -0
- package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +34 -0
- 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/scripts/automation-run-record.mjs +110 -0
- package/plugins/lisa-copilot/scripts/automation-status-claude-adapter.mjs +64 -8
- package/plugins/lisa-copilot/scripts/automation-status-codex-adapter.mjs +61 -5
- package/plugins/lisa-copilot/scripts/automation-status-report.mjs +30 -0
- package/plugins/lisa-copilot/scripts/automation-status-run-history.mjs +185 -0
- package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +34 -0
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/scripts/automation-run-record.mjs +110 -0
- package/plugins/lisa-cursor/scripts/automation-status-claude-adapter.mjs +64 -8
- package/plugins/lisa-cursor/scripts/automation-status-codex-adapter.mjs +61 -5
- package/plugins/lisa-cursor/scripts/automation-status-report.mjs +30 -0
- package/plugins/lisa-cursor/scripts/automation-status-run-history.mjs +185 -0
- package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +34 -0
- 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/scripts/automation-run-record.mjs +110 -0
- package/plugins/src/base/scripts/automation-status-claude-adapter.mjs +64 -8
- package/plugins/src/base/scripts/automation-status-codex-adapter.mjs +61 -5
- package/plugins/src/base/scripts/automation-status-report.mjs +30 -0
- package/plugins/src/base/scripts/automation-status-run-history.mjs +185 -0
- package/plugins/src/base/skills/lisa-automation-status/SKILL.md +11 -3
- package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +30 -0
- package/plugins/src/base/skills/lisa-intake/SKILL.md +40 -0
- package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +46 -10
- package/plugins/src/base/skills/lisa-monitor/SKILL.md +36 -0
- package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +36 -0
- package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +34 -0
|
@@ -975,6 +975,40 @@ Report outcomes in these buckets:
|
|
|
975
975
|
State every item repaired this cycle and the action taken. If the output would be long, group by
|
|
976
976
|
bucket and show compact refs plus counts.
|
|
977
977
|
|
|
978
|
+
## Run outcome
|
|
979
|
+
|
|
980
|
+
As the registered `intake-repair` automation loop, each cycle conforms to the
|
|
981
|
+
`automation-runbook-contract` rule: it ends in **exactly one** of the six run outcomes and records it,
|
|
982
|
+
so a cycle that found nothing stuck and a cycle where the repair machinery itself broke never look
|
|
983
|
+
alike. A run outcome describes this *cycle*; the Summary-report buckets above describe *what happened
|
|
984
|
+
to each item* — the two never merge in the one-line summary.
|
|
985
|
+
|
|
986
|
+
| This cycle's exit path | Run outcome |
|
|
987
|
+
|---|---|
|
|
988
|
+
| Nothing actionable — the idle case (walk step 5): examined N, all active or in backoff | `nothing-needed` |
|
|
989
|
+
| Repairs applied **and confirmed** this cycle — `resumed` / `resynced` / `recovered` / `unblocked` / `closed_out` / `rolled_up` / `relinked` / `normalized_ready` | `change-proved` |
|
|
990
|
+
| Repair produced new work for a human to pick up — e.g. an unmergeable PR or failed deploy filed as a **build-ready fix ticket** and left `blocked` | `candidate-proposed` |
|
|
991
|
+
| A repair reached an autonomy boundary needing a human (a protected-deploy approval before it can proceed) | `approval-requested` |
|
|
992
|
+
| The loop itself could not run — the queue is unreadable or tracker credentials are revoked | `recovery-required` |
|
|
993
|
+
|
|
994
|
+
Record **exactly one** outcome per invocation through the run-record CLI, naming this loop's runbook
|
|
995
|
+
(the `--summary` is the operator-readable one-liner in the contract's exemplar voice — plain,
|
|
996
|
+
specific, actionable, e.g. `Examined 14 items; all active or in backoff — nothing to repair.` for
|
|
997
|
+
`nothing-needed`):
|
|
998
|
+
|
|
999
|
+
```bash
|
|
1000
|
+
node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
|
|
1001
|
+
--loop-id intake-repair --outcome change-proved \
|
|
1002
|
+
--summary "Recovered 3 stalled builds and closed out 2 rollups; all confirmed." \
|
|
1003
|
+
--runbook .lisa/automations/intake-repair.runbook.md [--ref <item-url>]...
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory directly — the built copy
|
|
1007
|
+
`plugins/lisa/scripts/automation-run-record.mjs` or the source
|
|
1008
|
+
`plugins/src/base/scripts/automation-run-record.mjs`. If recording still fails, **degrade, never
|
|
1009
|
+
abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
|
|
1010
|
+
the cycle — a recording failure is a degradation to report, never a reason to block the loop.
|
|
1011
|
+
|
|
978
1012
|
## Schedule examples
|
|
979
1013
|
|
|
980
1014
|
```text
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.256.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.256.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.256.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.256.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.256.0",
|
|
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"
|
|
@@ -260,3 +260,113 @@ async function writeJsonlAtomically(filePath, records) {
|
|
|
260
260
|
await writeFile(tempPath, content, "utf8");
|
|
261
261
|
await rename(tempPath, filePath);
|
|
262
262
|
}
|
|
263
|
+
|
|
264
|
+
const CLI_USAGE = `Usage: node automation-run-record.mjs \\
|
|
265
|
+
--loop-id <slug> --outcome <${AUTOMATION_RUN_OUTCOMES.join("|")}> \\
|
|
266
|
+
--summary "<operator-readable one-liner>" --runbook <path> \\
|
|
267
|
+
[--ref <url>]... [--run-id <id>] [--project-root <dir>]`;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Translate a repeatable-flag argv into a {@link RecordAutomationRunInput}.
|
|
271
|
+
*
|
|
272
|
+
* Every flag takes a following value; `--ref` may repeat and accumulates into
|
|
273
|
+
* `refs`. Unknown flags and value-less flags throw so a typo never silently
|
|
274
|
+
* records the wrong thing.
|
|
275
|
+
*
|
|
276
|
+
* @param {readonly string[]} argv
|
|
277
|
+
* @returns {RecordAutomationRunInput}
|
|
278
|
+
*/
|
|
279
|
+
function parseAutomationRunRecordArgv(argv) {
|
|
280
|
+
/** @type {Record<string, string>} */
|
|
281
|
+
const single = {};
|
|
282
|
+
/** @type {string[]} */
|
|
283
|
+
const refs = [];
|
|
284
|
+
const flags = {
|
|
285
|
+
"--loop-id": "loopId",
|
|
286
|
+
"--outcome": "outcome",
|
|
287
|
+
"--summary": "summary",
|
|
288
|
+
"--runbook": "runbook",
|
|
289
|
+
"--run-id": "runId",
|
|
290
|
+
"--project-root": "projectRoot",
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
294
|
+
const token = argv[index];
|
|
295
|
+
const eq = token.indexOf("=");
|
|
296
|
+
const flag = eq === -1 ? token : token.slice(0, eq);
|
|
297
|
+
const inlineValue = eq === -1 ? undefined : token.slice(eq + 1);
|
|
298
|
+
const takeValue = () => {
|
|
299
|
+
if (inlineValue !== undefined) {
|
|
300
|
+
return inlineValue;
|
|
301
|
+
}
|
|
302
|
+
index += 1;
|
|
303
|
+
if (index >= argv.length) {
|
|
304
|
+
throw new Error(`Missing value for ${flag}.`);
|
|
305
|
+
}
|
|
306
|
+
return argv[index];
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
if (flag === "--ref") {
|
|
310
|
+
refs.push(takeValue());
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
const key = flags[flag];
|
|
314
|
+
if (!key) {
|
|
315
|
+
throw new Error(`Unknown flag "${flag}".`);
|
|
316
|
+
}
|
|
317
|
+
single[key] = takeValue();
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
return { ...single, refs };
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Argv-driven CLI wrapper so registered loop skills can record an outcome with
|
|
325
|
+
* one portable `node …/automation-run-record.mjs --outcome …` call. Delegates
|
|
326
|
+
* validation to {@link recordAutomationRun}; surfaces its errors verbatim.
|
|
327
|
+
*
|
|
328
|
+
* @param {readonly string[]} argv
|
|
329
|
+
* @returns {Promise<number>} process exit code
|
|
330
|
+
*/
|
|
331
|
+
export async function runAutomationRunRecordCli(argv) {
|
|
332
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
333
|
+
process.stdout.write(`${CLI_USAGE}\n`);
|
|
334
|
+
return 0;
|
|
335
|
+
}
|
|
336
|
+
let input;
|
|
337
|
+
try {
|
|
338
|
+
input = parseAutomationRunRecordArgv(argv);
|
|
339
|
+
} catch (error) {
|
|
340
|
+
process.stderr.write(`${error.message}\n\n${CLI_USAGE}\n`);
|
|
341
|
+
return 2;
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
const result = await recordAutomationRun(input);
|
|
345
|
+
process.stdout.write(
|
|
346
|
+
`${JSON.stringify({
|
|
347
|
+
path: result.path,
|
|
348
|
+
appended: result.appended,
|
|
349
|
+
outcome: result.record.outcome,
|
|
350
|
+
loop_id: result.record.loop_id,
|
|
351
|
+
run_id: result.record.run_id,
|
|
352
|
+
})}\n`
|
|
353
|
+
);
|
|
354
|
+
return 0;
|
|
355
|
+
} catch (error) {
|
|
356
|
+
process.stderr.write(`${error.message}\n`);
|
|
357
|
+
return 1;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
// CLI entrypoint.
|
|
362
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
363
|
+
runAutomationRunRecordCli(process.argv.slice(2)).then(
|
|
364
|
+
code => {
|
|
365
|
+
process.exitCode = code;
|
|
366
|
+
},
|
|
367
|
+
error => {
|
|
368
|
+
process.stderr.write(`${error?.message ?? error}\n`);
|
|
369
|
+
process.exitCode = 1;
|
|
370
|
+
}
|
|
371
|
+
);
|
|
372
|
+
}
|