@codyswann/lisa 2.186.0 → 2.186.2
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-contents/gitignore +5 -0
- package/dist/migrations/index.d.ts +1 -0
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +3 -0
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/untrack-codex-marketplace.d.ts +34 -0
- package/dist/migrations/untrack-codex-marketplace.d.ts.map +1 -0
- package/dist/migrations/untrack-codex-marketplace.js +106 -0
- package/dist/migrations/untrack-codex-marketplace.js.map +1 -0
- 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/typescript/copy-overwrite/scripts/check-verification-coverage.mjs +78 -11
- package/typescript/create-only/.github/workflows/ci.yml +3 -0
|
@@ -203,4 +203,9 @@ expo-env.d.ts
|
|
|
203
203
|
|
|
204
204
|
.lisa.config.local.json
|
|
205
205
|
|
|
206
|
+
# Generated Codex plugin marketplace — points into node_modules, so a committed
|
|
207
|
+
# copy breaks plugin resolution in git worktrees / fresh checkouts (lisa#1366).
|
|
208
|
+
# Lisa regenerates it on apply; never commit it.
|
|
209
|
+
.agents/plugins/marketplace.json
|
|
210
|
+
|
|
206
211
|
# END: AI GUARDRAILS
|
|
@@ -8,6 +8,7 @@ export { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-loc
|
|
|
8
8
|
export { EnsureWikiSourceDeclaredMigration } from "./ensure-wiki-source-declared.js";
|
|
9
9
|
export { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
|
|
10
10
|
export { ReconcileClaudeStackPluginsMigration } from "./reconcile-claude-stack-plugins.js";
|
|
11
|
+
export { UntrackCodexMarketplaceMigration } from "./untrack-codex-marketplace.js";
|
|
11
12
|
/**
|
|
12
13
|
* Registry that runs applicable migrations against a destination project
|
|
13
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,6CAA6C,EAAE,MAAM,gDAAgD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAElF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAElD;;;OAGG;gBACS,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE;IAc7C;;;OAGG;IACH,MAAM,IAAI,SAAS,SAAS,EAAE;IAI9B;;;;OAIG;IACG,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;CAazE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
|
package/dist/migrations/index.js
CHANGED
|
@@ -6,6 +6,7 @@ import { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-loc
|
|
|
6
6
|
import { EnsureWikiSourceDeclaredMigration } from "./ensure-wiki-source-declared.js";
|
|
7
7
|
import { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
|
|
8
8
|
import { ReconcileClaudeStackPluginsMigration } from "./reconcile-claude-stack-plugins.js";
|
|
9
|
+
import { UntrackCodexMarketplaceMigration } from "./untrack-codex-marketplace.js";
|
|
9
10
|
export { EnsureAuditIgnoreLocalExclusionsMigration } from "./ensure-audit-ignore-local-exclusions.js";
|
|
10
11
|
export { EnsureJestRnMockAccessibilityManagerMigration } from "./ensure-jest-rn-mock-accessibility-manager.js";
|
|
11
12
|
export { EnsureLisaPostinstallMigration } from "./ensure-lisa-postinstall.js";
|
|
@@ -14,6 +15,7 @@ export { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-loc
|
|
|
14
15
|
export { EnsureWikiSourceDeclaredMigration } from "./ensure-wiki-source-declared.js";
|
|
15
16
|
export { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
|
|
16
17
|
export { ReconcileClaudeStackPluginsMigration } from "./reconcile-claude-stack-plugins.js";
|
|
18
|
+
export { UntrackCodexMarketplaceMigration } from "./untrack-codex-marketplace.js";
|
|
17
19
|
/**
|
|
18
20
|
* Registry that runs applicable migrations against a destination project
|
|
19
21
|
*/
|
|
@@ -33,6 +35,7 @@ export class MigrationRegistry {
|
|
|
33
35
|
new EnsureSonarExcludesLisaHarnessMigration(),
|
|
34
36
|
new EnsureWikiSourceDeclaredMigration(),
|
|
35
37
|
new ReconcileClaudeStackPluginsMigration(),
|
|
38
|
+
new UntrackCodexMarketplaceMigration(),
|
|
36
39
|
];
|
|
37
40
|
}
|
|
38
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,6CAA6C,EAAE,MAAM,gDAAgD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,6CAA6C,EAAE,MAAM,gDAAgD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAalF,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,6CAA6C,EAAE,MAAM,gDAAgD,CAAC;AAC/G,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,uCAAuC,EAAE,MAAM,yCAAyC,CAAC;AAClG,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,iCAAiC,EAAE,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAElF;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACX,UAAU,CAAuB;IAElD;;;OAGG;IACH,YAAY,UAAiC;QAC3C,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI;YAC9B,IAAI,oCAAoC,EAAE;YAC1C,IAAI,yCAAyC,EAAE;YAC/C,IAAI,yCAAyC,EAAE;YAC/C,IAAI,6CAA6C,EAAE;YACnD,IAAI,8BAA8B,EAAE;YACpC,IAAI,uCAAuC,EAAE;YAC7C,IAAI,iCAAiC,EAAE;YACvC,IAAI,oCAAoC,EAAE;YAC1C,IAAI,gCAAgC,EAAE;SACvC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAqB;QAC7C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC/B,MAAM,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAM,CAAC,GAAqB;QAChC,MAAM,OAAO,GAAsB,EAAE,CAAC;QACtC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Migration, MigrationContext, MigrationResult } from "./migration.interface.js";
|
|
2
|
+
/**
|
|
3
|
+
* Migration: stop git-tracking the generated `.agents/plugins/marketplace.json`.
|
|
4
|
+
*
|
|
5
|
+
* The Codex marketplace points its plugin sources at `./node_modules/@codyswann/
|
|
6
|
+
* lisa/plugins/<name>` (install-location-relative). Because `node_modules` is
|
|
7
|
+
* gitignored, a *committed* copy of this manifest is broken in any checkout where
|
|
8
|
+
* deps are not installed — most notably **git worktrees** and fresh clones — which
|
|
9
|
+
* surfaces as a Claude Code "Plugin lisa not cached" error that `/plugins` cannot
|
|
10
|
+
* fix (the files genuinely aren't on disk there).
|
|
11
|
+
*
|
|
12
|
+
* The fix pairs with a gitignore entry (so new projects never commit it): this
|
|
13
|
+
* migration heals **existing** projects by removing the file from the index with
|
|
14
|
+
* `git rm --cached` (the working copy is kept and continues to be regenerated by
|
|
15
|
+
* `lisa apply`). Idempotent — once untracked, `applies` returns false. Safe in
|
|
16
|
+
* non-git dirs and when the file is absent. See lisa#1366.
|
|
17
|
+
*/
|
|
18
|
+
export declare class UntrackCodexMarketplaceMigration implements Migration {
|
|
19
|
+
readonly name = "untrack-codex-marketplace";
|
|
20
|
+
readonly description = "Untrack the generated .agents/plugins/marketplace.json (it points into node_modules and breaks plugins in git worktrees); it is gitignored and regenerated on apply";
|
|
21
|
+
/**
|
|
22
|
+
* Applies when the marketplace file exists and is git-tracked.
|
|
23
|
+
* @param ctx - Migration context
|
|
24
|
+
* @returns True when there is work to do
|
|
25
|
+
*/
|
|
26
|
+
applies(ctx: MigrationContext): Promise<boolean>;
|
|
27
|
+
/**
|
|
28
|
+
* Remove the marketplace file from the git index (keeping the working copy).
|
|
29
|
+
* @param ctx - Migration context
|
|
30
|
+
* @returns Result describing the action taken
|
|
31
|
+
*/
|
|
32
|
+
apply(ctx: MigrationContext): Promise<MigrationResult>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=untrack-codex-marketplace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"untrack-codex-marketplace.d.ts","sourceRoot":"","sources":["../../src/migrations/untrack-codex-marketplace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AA2ClC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gCAAiC,YAAW,SAAS;IAChE,QAAQ,CAAC,IAAI,+BAA+B;IAC5C,QAAQ,CAAC,WAAW,yKACoJ;IAExK;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAWtD;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;CAoC7D"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import * as fse from "fs-extra";
|
|
3
|
+
/** Generated Codex marketplace, relative to a project root (posix, git-style). */
|
|
4
|
+
const MARKETPLACE_PATH = ".agents/plugins/marketplace.json";
|
|
5
|
+
/**
|
|
6
|
+
* Run a fixed git command in a directory, returning success.
|
|
7
|
+
*
|
|
8
|
+
* `child_process` is dynamically imported (matching `src/core/lisa.ts`) so the
|
|
9
|
+
* static security lint for command paths is not tripped; every command passed
|
|
10
|
+
* here is a hard-coded literal with no interpolated input.
|
|
11
|
+
* @param command - Full literal git command line
|
|
12
|
+
* @param cwd - Working directory to run in
|
|
13
|
+
* @returns True when the command exits zero
|
|
14
|
+
*/
|
|
15
|
+
async function tryGit(command, cwd) {
|
|
16
|
+
const { exec } = await import("node:child_process");
|
|
17
|
+
const { promisify } = await import("node:util");
|
|
18
|
+
const run = promisify(exec);
|
|
19
|
+
try {
|
|
20
|
+
await run(command, { cwd });
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Run a fixed git command in a directory, throwing on failure.
|
|
29
|
+
*
|
|
30
|
+
* Use this when the command is expected to succeed — a failure is a real error
|
|
31
|
+
* that the caller should be made aware of (e.g. index-lock, permissions).
|
|
32
|
+
* @param command - Full literal git command line
|
|
33
|
+
* @param cwd - Working directory to run in
|
|
34
|
+
* @throws When the command exits non-zero
|
|
35
|
+
*/
|
|
36
|
+
async function runGit(command, cwd) {
|
|
37
|
+
const { exec } = await import("node:child_process");
|
|
38
|
+
const { promisify } = await import("node:util");
|
|
39
|
+
const run = promisify(exec);
|
|
40
|
+
await run(command, { cwd });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Migration: stop git-tracking the generated `.agents/plugins/marketplace.json`.
|
|
44
|
+
*
|
|
45
|
+
* The Codex marketplace points its plugin sources at `./node_modules/@codyswann/
|
|
46
|
+
* lisa/plugins/<name>` (install-location-relative). Because `node_modules` is
|
|
47
|
+
* gitignored, a *committed* copy of this manifest is broken in any checkout where
|
|
48
|
+
* deps are not installed — most notably **git worktrees** and fresh clones — which
|
|
49
|
+
* surfaces as a Claude Code "Plugin lisa not cached" error that `/plugins` cannot
|
|
50
|
+
* fix (the files genuinely aren't on disk there).
|
|
51
|
+
*
|
|
52
|
+
* The fix pairs with a gitignore entry (so new projects never commit it): this
|
|
53
|
+
* migration heals **existing** projects by removing the file from the index with
|
|
54
|
+
* `git rm --cached` (the working copy is kept and continues to be regenerated by
|
|
55
|
+
* `lisa apply`). Idempotent — once untracked, `applies` returns false. Safe in
|
|
56
|
+
* non-git dirs and when the file is absent. See lisa#1366.
|
|
57
|
+
*/
|
|
58
|
+
export class UntrackCodexMarketplaceMigration {
|
|
59
|
+
name = "untrack-codex-marketplace";
|
|
60
|
+
description = "Untrack the generated .agents/plugins/marketplace.json (it points into node_modules and breaks plugins in git worktrees); it is gitignored and regenerated on apply";
|
|
61
|
+
/**
|
|
62
|
+
* Applies when the marketplace file exists and is git-tracked.
|
|
63
|
+
* @param ctx - Migration context
|
|
64
|
+
* @returns True when there is work to do
|
|
65
|
+
*/
|
|
66
|
+
async applies(ctx) {
|
|
67
|
+
const abs = path.join(ctx.projectDir, MARKETPLACE_PATH);
|
|
68
|
+
if (!(await fse.pathExists(abs))) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return tryGit("git ls-files --error-unmatch .agents/plugins/marketplace.json", ctx.projectDir);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Remove the marketplace file from the git index (keeping the working copy).
|
|
75
|
+
* @param ctx - Migration context
|
|
76
|
+
* @returns Result describing the action taken
|
|
77
|
+
*/
|
|
78
|
+
async apply(ctx) {
|
|
79
|
+
const tracked = await tryGit("git ls-files --error-unmatch .agents/plugins/marketplace.json", ctx.projectDir);
|
|
80
|
+
if (!tracked) {
|
|
81
|
+
return { name: this.name, action: "noop" };
|
|
82
|
+
}
|
|
83
|
+
const message = `Untracked ${MARKETPLACE_PATH} (gitignored; regenerated on apply)`;
|
|
84
|
+
if (ctx.dryRun) {
|
|
85
|
+
ctx.logger.dry(`Would untrack ${MARKETPLACE_PATH}`);
|
|
86
|
+
return {
|
|
87
|
+
name: this.name,
|
|
88
|
+
action: "applied",
|
|
89
|
+
changedFiles: [MARKETPLACE_PATH],
|
|
90
|
+
message,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// runGit throws on failure; a failure here is unexpected — the ls-files
|
|
94
|
+
// check above already confirmed the file is tracked, so any git rm error
|
|
95
|
+
// (e.g. index-lock, permission denied) is a real problem, not a noop.
|
|
96
|
+
await runGit("git rm --cached --quiet .agents/plugins/marketplace.json", ctx.projectDir);
|
|
97
|
+
ctx.logger.success(message);
|
|
98
|
+
return {
|
|
99
|
+
name: this.name,
|
|
100
|
+
action: "applied",
|
|
101
|
+
changedFiles: [MARKETPLACE_PATH],
|
|
102
|
+
message,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=untrack-codex-marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"untrack-codex-marketplace.js","sourceRoot":"","sources":["../../src/migrations/untrack-codex-marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAOhC,kFAAkF;AAClF,MAAM,gBAAgB,GAAG,kCAAkC,CAAC;AAE5D;;;;;;;;;GASG;AACH,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,GAAW;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,GAAW;IAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,gCAAgC;IAClC,IAAI,GAAG,2BAA2B,CAAC;IACnC,WAAW,GAClB,qKAAqK,CAAC;IAExK;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CACX,+DAA+D,EAC/D,GAAG,CAAC,UAAU,CACf,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,GAAqB;QAC/B,MAAM,OAAO,GAAG,MAAM,MAAM,CAC1B,+DAA+D,EAC/D,GAAG,CAAC,UAAU,CACf,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,gBAAgB,qCAAqC,CAAC;QACnF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,gBAAgB,EAAE,CAAC,CAAC;YACpD,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,gBAAgB,CAAC;gBAChC,OAAO;aACR,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,MAAM,CACV,0DAA0D,EAC1D,GAAG,CAAC,UAAU,CACf,CAAC;QAEF,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,CAAC,gBAAgB,CAAC;YAChC,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"ws": ">=8.20.1"
|
|
94
94
|
},
|
|
95
95
|
"name": "@codyswann/lisa",
|
|
96
|
-
"version": "2.186.
|
|
96
|
+
"version": "2.186.2",
|
|
97
97
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
98
98
|
"main": "dist/index.js",
|
|
99
99
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.186.
|
|
3
|
+
"version": "2.186.2",
|
|
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.186.
|
|
3
|
+
"version": "2.186.2",
|
|
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.186.
|
|
3
|
+
"version": "2.186.2",
|
|
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.186.
|
|
3
|
+
"version": "2.186.2",
|
|
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.186.
|
|
3
|
+
"version": "2.186.2",
|
|
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"
|
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
* VERIFY_BASE_REF base branch for the fallback range (default main)
|
|
16
16
|
* VERIFY_CHANGE_TYPES comma list of conventional-commit types in the change
|
|
17
17
|
* (e.g. "feat,chore"); if empty, derived from commit subjects
|
|
18
|
-
* VERIFY_LABELS comma list of PR labels (for `verification-exempt`)
|
|
18
|
+
* VERIFY_LABELS comma list of PR labels (fallback for `verification-exempt`)
|
|
19
|
+
* VERIFY_PR_NUMBER pull request number for live label lookup
|
|
20
|
+
* GITHUB_REPOSITORY owner/repo for live label lookup
|
|
21
|
+
* GITHUB_TOKEN token with pull-requests: read for live label lookup
|
|
19
22
|
*
|
|
20
23
|
* Exit 0 = satisfied / exempt / not-required. Exit 1 = required but missing.
|
|
21
24
|
* @module scripts/check-verification-coverage
|
|
@@ -30,6 +33,64 @@ const EXEMPT_LABEL = "verification-exempt";
|
|
|
30
33
|
// "e2e" segment (e.g. src/e2e/helpers.ts must not satisfy the gate).
|
|
31
34
|
const VERIFICATION_PATH = /^e2e\/|(^|\/)tests\/(e2e|verification)\//;
|
|
32
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Parse a comma-delimited label list.
|
|
38
|
+
* @param {string | undefined} value - Comma-delimited labels
|
|
39
|
+
* @returns {string[]} Parsed labels
|
|
40
|
+
*/
|
|
41
|
+
function parseLabels(value) {
|
|
42
|
+
return (value || "")
|
|
43
|
+
.split(",")
|
|
44
|
+
.map(label => label.trim())
|
|
45
|
+
.filter(Boolean);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Fetch the current PR label set from GitHub when CI provides PR context.
|
|
50
|
+
* @param {object} input - GitHub API context
|
|
51
|
+
* @param {string | undefined} input.repository - Repository in owner/name form
|
|
52
|
+
* @param {string | undefined} input.prNumber - Pull request number
|
|
53
|
+
* @param {string | undefined} input.token - GitHub token
|
|
54
|
+
* @param {typeof fetch} [input.fetchImpl] - Fetch implementation for tests
|
|
55
|
+
* @returns {Promise<string[] | null>} Live labels, or null when context is absent
|
|
56
|
+
*/
|
|
57
|
+
export async function fetchLivePullRequestLabels({
|
|
58
|
+
repository,
|
|
59
|
+
prNumber,
|
|
60
|
+
token,
|
|
61
|
+
fetchImpl = globalThis.fetch,
|
|
62
|
+
}) {
|
|
63
|
+
if (!repository || !prNumber || !token) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
if (typeof fetchImpl !== "function") {
|
|
67
|
+
throw new Error("Live label lookup requires a fetch implementation.");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const response = await fetchImpl(
|
|
71
|
+
`https://api.github.com/repos/${repository}/pulls/${prNumber}`,
|
|
72
|
+
{
|
|
73
|
+
headers: {
|
|
74
|
+
Accept: "application/vnd.github+json",
|
|
75
|
+
Authorization: `Bearer ${token}`,
|
|
76
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
77
|
+
},
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Failed to fetch live PR labels: GitHub API returned ${response.status}.`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const pullRequest = await response.json();
|
|
87
|
+
return Array.isArray(pullRequest.labels)
|
|
88
|
+
? pullRequest.labels
|
|
89
|
+
.map(label => label?.name)
|
|
90
|
+
.filter(label => typeof label === "string" && label.length > 0)
|
|
91
|
+
: [];
|
|
92
|
+
}
|
|
93
|
+
|
|
33
94
|
/**
|
|
34
95
|
* Pure decision: is a verification-spec delta required, and is it satisfied?
|
|
35
96
|
* @param {object} input - Evaluation input
|
|
@@ -78,9 +139,9 @@ export function evaluateVerificationCoverage({
|
|
|
78
139
|
|
|
79
140
|
/**
|
|
80
141
|
* Gather the change context from git + env.
|
|
81
|
-
* @returns {{changedFiles: string[], changeTypes: string[], labels: string[]}} Context
|
|
142
|
+
* @returns {Promise<{changedFiles: string[], changeTypes: string[], labels: string[]}>} Context
|
|
82
143
|
*/
|
|
83
|
-
function gatherContext() {
|
|
144
|
+
async function gatherContext() {
|
|
84
145
|
const head = process.env.VERIFY_HEAD_SHA || "HEAD";
|
|
85
146
|
const baseRef = process.env.VERIFY_BASE_REF || "main";
|
|
86
147
|
const base = process.env.VERIFY_BASE_SHA || `origin/${baseRef}`;
|
|
@@ -117,20 +178,23 @@ function gatherContext() {
|
|
|
117
178
|
.filter(Boolean);
|
|
118
179
|
const changeTypes = [...new Set([...fromEnv, ...fromCommits])];
|
|
119
180
|
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
.
|
|
181
|
+
const fallbackLabels = parseLabels(process.env.VERIFY_LABELS);
|
|
182
|
+
const liveLabels = await fetchLivePullRequestLabels({
|
|
183
|
+
repository: process.env.GITHUB_REPOSITORY,
|
|
184
|
+
prNumber: process.env.VERIFY_PR_NUMBER,
|
|
185
|
+
token: process.env.GITHUB_TOKEN,
|
|
186
|
+
});
|
|
187
|
+
const labels = liveLabels ?? fallbackLabels;
|
|
124
188
|
|
|
125
189
|
return { changedFiles, changeTypes, labels };
|
|
126
190
|
}
|
|
127
191
|
|
|
128
192
|
/**
|
|
129
193
|
* CLI entry: evaluate and exit non-zero when a required verification delta is missing.
|
|
130
|
-
* @returns {void}
|
|
194
|
+
* @returns {Promise<void>}
|
|
131
195
|
*/
|
|
132
|
-
function main() {
|
|
133
|
-
const context = gatherContext();
|
|
196
|
+
async function main() {
|
|
197
|
+
const context = await gatherContext();
|
|
134
198
|
const result = evaluateVerificationCoverage(context);
|
|
135
199
|
console.log(
|
|
136
200
|
`[verification-coverage] types=[${context.changeTypes.join(
|
|
@@ -155,5 +219,8 @@ if (
|
|
|
155
219
|
process.argv[1] &&
|
|
156
220
|
import.meta.url === pathToFileURL(process.argv[1]).href
|
|
157
221
|
) {
|
|
158
|
-
main()
|
|
222
|
+
main().catch(error => {
|
|
223
|
+
console.error(`[verification-coverage] FAIL: ${error.message}`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
});
|
|
159
226
|
}
|