@codyswann/lisa 2.141.1 → 2.142.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.
Files changed (69) hide show
  1. package/cdk/create-only/tsconfig.local.json +10 -2
  2. package/dist/migrations/ensure-tsconfig-local-files-fallback.d.ts +40 -0
  3. package/dist/migrations/ensure-tsconfig-local-files-fallback.d.ts.map +1 -0
  4. package/dist/migrations/ensure-tsconfig-local-files-fallback.js +76 -0
  5. package/dist/migrations/ensure-tsconfig-local-files-fallback.js.map +1 -0
  6. package/dist/migrations/index.d.ts +1 -0
  7. package/dist/migrations/index.d.ts.map +1 -1
  8. package/dist/migrations/index.js +3 -0
  9. package/dist/migrations/index.js.map +1 -1
  10. package/expo/create-only/tsconfig.local.json +18 -4
  11. package/nestjs/create-only/tsconfig.local.json +14 -3
  12. package/package.json +1 -1
  13. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa/skills/analyze-claude-remote/SKILL.md +18 -5
  16. package/plugins/lisa/skills/generate-claude-remote-build-script/SKILL.md +9 -5
  17. package/plugins/lisa-agy/plugin.json +1 -1
  18. package/plugins/lisa-agy/skills/analyze-claude-remote/SKILL.md +18 -5
  19. package/plugins/lisa-agy/skills/generate-claude-remote-build-script/SKILL.md +9 -5
  20. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  23. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-copilot/skills/analyze-claude-remote/SKILL.md +18 -5
  27. package/plugins/lisa-copilot/skills/generate-claude-remote-build-script/SKILL.md +9 -5
  28. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cursor/skills/analyze-claude-remote/SKILL.md +18 -5
  30. package/plugins/lisa-cursor/skills/generate-claude-remote-build-script/SKILL.md +9 -5
  31. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo-agy/plugin.json +1 -1
  34. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  39. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  44. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  49. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails-agy/plugin.json +1 -1
  54. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  59. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  64. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/src/base/skills/analyze-claude-remote/SKILL.md +18 -5
  67. package/plugins/src/base/skills/generate-claude-remote-build-script/SKILL.md +9 -5
  68. package/scripts/claude-remote-setup.sh +4 -6
  69. package/typescript/create-only/tsconfig.local.json +11 -2
@@ -1,4 +1,12 @@
1
1
  {
2
- "include": ["lib/**/*", "bin/**/*", "test/**/*"],
3
- "exclude": ["node_modules", "cdk.out"]
2
+ "include": [
3
+ "lib/**/*",
4
+ "bin/**/*",
5
+ "test/**/*"
6
+ ],
7
+ "exclude": [
8
+ "node_modules",
9
+ "cdk.out"
10
+ ],
11
+ "files": []
4
12
  }
@@ -0,0 +1,40 @@
1
+ import type { Migration, MigrationContext, MigrationResult } from "./migration.interface.js";
2
+ /**
3
+ * Migration: add an empty `files` array to tsconfig.local.json.
4
+ *
5
+ * Background: the stack tsconfig.local.json templates declare
6
+ * `include: ["src/**\/*"]`. A source-less repo (e.g. a SOC2 / infra-config
7
+ * project that ships only root-level *.config.ts and no `src/`) has an
8
+ * `include` that matches zero files, so `tsc --noEmit` aborts with
9
+ * `error TS18003: No inputs were found in config file`. That failure trips
10
+ * the lisa-managed typecheck pre-commit hook and blocks every commit, even
11
+ * though there is genuinely nothing to type-check.
12
+ *
13
+ * TypeScript treats an explicit (even empty) `files` array as an intentional
14
+ * file list and therefore does NOT raise TS18003. Crucially, when `include`
15
+ * also matches real sources the compiled program is the UNION of `files` and
16
+ * the `include` matches — so an empty `files` is a no-op for projects that
17
+ * have sources (they are still fully type-checked) and a graceful success for
18
+ * source-less ones. This is a posture change for empty-input tolerance, NOT a
19
+ * relaxation of any check.
20
+ *
21
+ * The key is injected only when absent, so a project that intentionally pins a
22
+ * non-empty `files` list keeps it.
23
+ */
24
+ export declare class EnsureTsconfigLocalFilesFallbackMigration implements Migration {
25
+ readonly name = "ensure-tsconfig-local-files-fallback";
26
+ readonly description = "Add an empty `files` array to tsconfig.local.json so source-less projects pass tsc (TS18003) without disabling typechecking";
27
+ /**
28
+ * Check whether this migration should run on the project
29
+ * @param ctx - Migration context
30
+ * @returns True when tsconfig.local.json exists but has no `files` key
31
+ */
32
+ applies(ctx: MigrationContext): Promise<boolean>;
33
+ /**
34
+ * Apply the migration, injecting an empty `files` array when absent
35
+ * @param ctx - Migration context
36
+ * @returns Result describing the action taken
37
+ */
38
+ apply(ctx: MigrationContext): Promise<MigrationResult>;
39
+ }
40
+ //# sourceMappingURL=ensure-tsconfig-local-files-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-tsconfig-local-files-fallback.d.ts","sourceRoot":"","sources":["../../src/migrations/ensure-tsconfig-local-files-fallback.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAYlC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,yCAA0C,YAAW,SAAS;IACzE,QAAQ,CAAC,IAAI,0CAA0C;IACvD,QAAQ,CAAC,WAAW,iIAC4G;IAEhI;;;;OAIG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAStD;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;CA+B7D"}
@@ -0,0 +1,76 @@
1
+ import * as path from "node:path";
2
+ import * as fse from "fs-extra";
3
+ import { readJsonOrNull, writeJson } from "../utils/json-utils.js";
4
+ const TSCONFIG_LOCAL = "tsconfig.local.json";
5
+ /**
6
+ * Migration: add an empty `files` array to tsconfig.local.json.
7
+ *
8
+ * Background: the stack tsconfig.local.json templates declare
9
+ * `include: ["src/**\/*"]`. A source-less repo (e.g. a SOC2 / infra-config
10
+ * project that ships only root-level *.config.ts and no `src/`) has an
11
+ * `include` that matches zero files, so `tsc --noEmit` aborts with
12
+ * `error TS18003: No inputs were found in config file`. That failure trips
13
+ * the lisa-managed typecheck pre-commit hook and blocks every commit, even
14
+ * though there is genuinely nothing to type-check.
15
+ *
16
+ * TypeScript treats an explicit (even empty) `files` array as an intentional
17
+ * file list and therefore does NOT raise TS18003. Crucially, when `include`
18
+ * also matches real sources the compiled program is the UNION of `files` and
19
+ * the `include` matches — so an empty `files` is a no-op for projects that
20
+ * have sources (they are still fully type-checked) and a graceful success for
21
+ * source-less ones. This is a posture change for empty-input tolerance, NOT a
22
+ * relaxation of any check.
23
+ *
24
+ * The key is injected only when absent, so a project that intentionally pins a
25
+ * non-empty `files` list keeps it.
26
+ */
27
+ export class EnsureTsconfigLocalFilesFallbackMigration {
28
+ name = "ensure-tsconfig-local-files-fallback";
29
+ description = "Add an empty `files` array to tsconfig.local.json so source-less projects pass tsc (TS18003) without disabling typechecking";
30
+ /**
31
+ * Check whether this migration should run on the project
32
+ * @param ctx - Migration context
33
+ * @returns True when tsconfig.local.json exists but has no `files` key
34
+ */
35
+ async applies(ctx) {
36
+ const tsconfigLocalPath = path.join(ctx.projectDir, TSCONFIG_LOCAL);
37
+ const existing = await readJsonOrNull(tsconfigLocalPath);
38
+ if (!existing) {
39
+ return false;
40
+ }
41
+ return existing.files === undefined;
42
+ }
43
+ /**
44
+ * Apply the migration, injecting an empty `files` array when absent
45
+ * @param ctx - Migration context
46
+ * @returns Result describing the action taken
47
+ */
48
+ async apply(ctx) {
49
+ const tsconfigLocalPath = path.join(ctx.projectDir, TSCONFIG_LOCAL);
50
+ const existing = await readJsonOrNull(tsconfigLocalPath);
51
+ if (!existing || existing.files !== undefined) {
52
+ return { name: this.name, action: "noop" };
53
+ }
54
+ const patched = { ...existing, files: [] };
55
+ const message = "Added empty `files` array to tsconfig.local.json (TS18003 fallback)";
56
+ if (ctx.dryRun) {
57
+ ctx.logger.dry(`Would add empty \`files\` array to ${TSCONFIG_LOCAL}`);
58
+ return {
59
+ name: this.name,
60
+ action: "applied",
61
+ changedFiles: [TSCONFIG_LOCAL],
62
+ message,
63
+ };
64
+ }
65
+ await fse.ensureDir(path.dirname(tsconfigLocalPath));
66
+ await writeJson(tsconfigLocalPath, patched);
67
+ ctx.logger.success(message);
68
+ return {
69
+ name: this.name,
70
+ action: "applied",
71
+ changedFiles: [TSCONFIG_LOCAL],
72
+ message,
73
+ };
74
+ }
75
+ }
76
+ //# sourceMappingURL=ensure-tsconfig-local-files-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-tsconfig-local-files-fallback.js","sourceRoot":"","sources":["../../src/migrations/ensure-tsconfig-local-files-fallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOnE,MAAM,cAAc,GAAG,qBAAqB,CAAC;AAU7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,yCAAyC;IAC3C,IAAI,GAAG,sCAAsC,CAAC;IAC9C,WAAW,GAClB,6HAA6H,CAAC;IAEhI;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAe,iBAAiB,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,GAAqB;QAC/B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAe,iBAAiB,CAAC,CAAC;QACvE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAiB,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACzD,MAAM,OAAO,GACX,qEAAqE,CAAC;QAExE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,sCAAsC,cAAc,EAAE,CAAC,CAAC;YACvE,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,cAAc,CAAC;gBAC9B,OAAO;aACR,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACrD,MAAM,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAC5C,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,cAAc,CAAC;YAC9B,OAAO;SACR,CAAC;IACJ,CAAC;CACF"}
@@ -2,6 +2,7 @@ import type { Migration, MigrationContext, MigrationResult } from "./migration.i
2
2
  export type { Migration, MigrationAction, MigrationContext, MigrationResult, } from "./migration.interface.js";
3
3
  export { EnsureAuditIgnoreLocalExclusionsMigration } from "./ensure-audit-ignore-local-exclusions.js";
4
4
  export { EnsureLisaPostinstallMigration } from "./ensure-lisa-postinstall.js";
5
+ export { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-local-files-fallback.js";
5
6
  export { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
6
7
  /**
7
8
  * Registry that runs applicable migrations against a destination project
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAGA,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,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAE3F;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAElD;;;OAGG;gBACS,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE;IAQ7C;;;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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,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,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAE3F;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAElD;;;OAGG;gBACS,UAAU,CAAC,EAAE,SAAS,SAAS,EAAE;IAS7C;;;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"}
@@ -1,8 +1,10 @@
1
1
  import { EnsureAuditIgnoreLocalExclusionsMigration } from "./ensure-audit-ignore-local-exclusions.js";
2
2
  import { EnsureLisaPostinstallMigration } from "./ensure-lisa-postinstall.js";
3
+ import { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-local-files-fallback.js";
3
4
  import { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
4
5
  export { EnsureAuditIgnoreLocalExclusionsMigration } from "./ensure-audit-ignore-local-exclusions.js";
5
6
  export { EnsureLisaPostinstallMigration } from "./ensure-lisa-postinstall.js";
7
+ export { EnsureTsconfigLocalFilesFallbackMigration } from "./ensure-tsconfig-local-files-fallback.js";
6
8
  export { EnsureTsconfigLocalIncludesMigration } from "./ensure-tsconfig-local-includes.js";
7
9
  /**
8
10
  * Registry that runs applicable migrations against a destination project
@@ -16,6 +18,7 @@ export class MigrationRegistry {
16
18
  constructor(migrations) {
17
19
  this.migrations = migrations ?? [
18
20
  new EnsureTsconfigLocalIncludesMigration(),
21
+ new EnsureTsconfigLocalFilesFallbackMigration(),
19
22
  new EnsureAuditIgnoreLocalExclusionsMigration(),
20
23
  new EnsureLisaPostinstallMigration(),
21
24
  ];
@@ -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,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAa3F,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAE3F;;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,8BAA8B,EAAE;SACrC,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"}
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,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAa3F,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,yCAAyC,EAAE,MAAM,2CAA2C,CAAC;AACtG,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAE3F;;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,8BAA8B,EAAE;SACrC,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"}
@@ -1,10 +1,24 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "paths": {
4
- "@/graphql/*": ["./generated/*"],
5
- "@/*": ["./*"]
4
+ "@/graphql/*": [
5
+ "./generated/*"
6
+ ],
7
+ "@/*": [
8
+ "./*"
9
+ ]
6
10
  }
7
11
  },
8
- "include": ["**/*.ts", "**/*.tsx", "nativewind-env.d.ts"],
9
- "exclude": ["node_modules", "dist", "web-build", "components/ui"]
12
+ "include": [
13
+ "**/*.ts",
14
+ "**/*.tsx",
15
+ "nativewind-env.d.ts"
16
+ ],
17
+ "exclude": [
18
+ "node_modules",
19
+ "dist",
20
+ "web-build",
21
+ "components/ui"
22
+ ],
23
+ "files": []
10
24
  }
@@ -3,9 +3,20 @@
3
3
  "outDir": ".build",
4
4
  "rootDir": "src",
5
5
  "paths": {
6
- "@/*": ["./src/*"]
6
+ "@/*": [
7
+ "./src/*"
8
+ ]
7
9
  }
8
10
  },
9
- "include": ["src/**/*"],
10
- "exclude": ["node_modules", ".build", "dist", "**/*.test.ts", "**/*.spec.ts"]
11
+ "include": [
12
+ "src/**/*"
13
+ ],
14
+ "exclude": [
15
+ "node_modules",
16
+ ".build",
17
+ "dist",
18
+ "**/*.test.ts",
19
+ "**/*.spec.ts"
20
+ ],
21
+ "files": []
11
22
  }
package/package.json CHANGED
@@ -84,7 +84,7 @@
84
84
  "lodash": ">=4.18.1"
85
85
  },
86
86
  "name": "@codyswann/lisa",
87
- "version": "2.141.1",
87
+ "version": "2.142.0",
88
88
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
89
89
  "main": "dist/index.js",
90
90
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -84,9 +84,19 @@ Group the findings as:
84
84
  `secrets.*`/`env:` in CI, and config-referenced tokens. Group by integration (GitHub, AWS,
85
85
  Atlassian/JIRA/Confluence, Notion, Linear, Anthropic, notifications, feature flags, other).
86
86
  Cross-reference `.lisa.config.json` `tracker`/`source` to mark which credentials are **active**
87
- for this repo vs **dormant** (`OPTIONAL`). Always surface Claude Code feature flags actually set
88
- in `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) as `REQUIRED` to match
89
- local behavior, since the environment `env` block is the reliable place to set them.
87
+ for this repo vs **dormant** (`OPTIONAL`). Distinguish *where* each var must be set, because the
88
+ answer differs and getting it wrong sends the user to do redundant work:
89
+
90
+ - **Committed `.claude/settings.json` `env` flags** (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,
91
+ `ENABLE_LSP_TOOL`, `BASH_*`) — this file is repo-committed, so it reaches the cloud and Claude
92
+ Code applies its `env` block when it launches. These are **already provided — no action**.
93
+ Surface them as `OK` (cite the file), not `REQUIRED`. Do **not** tell the user to re-enter them
94
+ in the environment UI; a duplicate there only risks drifting from the committed value. The lone
95
+ caveat: the setup script runs *before* Claude Code launches, so it cannot see these — flag any
96
+ that the **setup script itself** would need (rare) as needing a UI value too.
97
+ - **Secrets** (tokens/keys) — cannot be committed, so the committed `settings.json` can't carry
98
+ them. These are the only vars that genuinely **must be set in the environment-variables UI**.
99
+ Mark active-integration secrets `REQUIRED`; dormant ones `OPTIONAL`.
90
100
 
91
101
  4a. **Tracker / PRD-source credentials** — this is the load-bearing part of the audit and must be
92
102
  driven by config, not by what the scan happens to find. Resolve the active integrations first:
@@ -199,7 +209,10 @@ checklist of the secrets the user must set in the routine's environment for the
199
209
  `tracker`/`source` (from group 4a). One block per active integration, each with its env-var name(s),
200
210
  an `Acquire:` URL, and an `Access:` scope line, plus a one-line note that the environment UI is where
201
211
  these are set (the generated build script only emits a names-only template, never values). If both
202
- `tracker` and `source` resolve to the same vendor (e.g. both `github`), render it once.
212
+ `tracker` and `source` resolve to the same vendor (e.g. both GitHub), render it once. List **only
213
+ secrets** here — do not include the committed `.claude/settings.json` `env` flags; close the
214
+ subsection with a one-line reminder that those flags are already provided by the committed file and
215
+ need no UI entry.
203
216
 
204
217
  End with a fenced, machine-readable inventory block (also printed when `--json` is passed) so
205
218
  `/lisa:generate-claude-remote-build-script` can consume it without re-deriving everything. Secret
@@ -216,7 +229,7 @@ so the generator can render acquisition comments into its template:
216
229
  "tracker": "github",
217
230
  "source": "github",
218
231
  "env": [
219
- { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": true, "secret": false, "reason": "set in .claude/settings.json" },
232
+ { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": false, "secret": false, "providedBy": "settings.json", "uiAction": "none", "reason": "committed in .claude/settings.json env — applied automatically; do not re-enter in the UI" },
220
233
  {
221
234
  "name": "GH_TOKEN", "required": true, "secret": true, "integration": "github",
222
235
  "reason": "active tracker+source; gh scripts gate on gh auth status",
@@ -51,9 +51,12 @@ tracker/source, plus the host project's own package manager and tooling — not
51
51
  3. **Emit the environment-variable template.** Write a commented block listing every `env` entry
52
52
  from the inventory grouped by integration, marked `REQUIRED`/`OPTIONAL` and `secret`/`plain`,
53
53
  with the reason. **Never write real secret values** — only names and placeholders, because the
54
- environment config is visible to anyone who can edit it. Include feature flags actually set in
55
- `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) so cloud behavior matches
56
- local. For every secret entry that carries `acquireUrl`/`accessScope`/`headlessSubstrate` (the
54
+ environment config is visible to anyone who can edit it. Entries flagged `providedBy: settings.json`
55
+ (the committed `.claude/settings.json` `env` flags, e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) are
56
+ **already applied from the committed file** list them under an `# Already provided by committed
57
+ .claude/settings.json — no UI entry needed` heading, not as values to set. The "set in the
58
+ environment UI" template is for **secrets only**. For every secret entry that carries
59
+ `acquireUrl`/`accessScope`/`headlessSubstrate` (the
57
60
  active tracker/source credentials from the analysis's group 4a), render those as comment lines
58
61
  directly above the name — `# Acquire: <url>` and `# Access: <scope>` — so the user knows exactly
59
62
  where to get the token and what permissions it needs. Emit only the **env-var form** of the name
@@ -83,8 +86,9 @@ shape, not a fixed payload):
83
86
  #
84
87
  # GAPS this script cannot fix (configure separately):
85
88
  # - <gaps from analysis, e.g. auto-memory is machine-local and not synced to cloud routines>
86
- # ENV VARS to set in the environment config (names onlyset real values there, not here):
87
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # REQUIRED, matches .claude/settings.json
89
+ # Already provided by committed .claude/settings.json (applied automaticallyno UI entry needed):
90
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
91
+ # SECRETS to set in the environment config (names only — set real values there, not here):
88
92
  # # --- credentials for the active tracker/source (set in the environment UI) ---
89
93
  # # Acquire: https://github.com/settings/personal-access-tokens
90
94
  # # Access: fine-grained PAT on target repo: Contents R/W, Issues R/W, Pull requests R/W, Metadata R
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -84,9 +84,19 @@ Group the findings as:
84
84
  `secrets.*`/`env:` in CI, and config-referenced tokens. Group by integration (GitHub, AWS,
85
85
  Atlassian/JIRA/Confluence, Notion, Linear, Anthropic, notifications, feature flags, other).
86
86
  Cross-reference `.lisa.config.json` `tracker`/`source` to mark which credentials are **active**
87
- for this repo vs **dormant** (`OPTIONAL`). Always surface Claude Code feature flags actually set
88
- in `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) as `REQUIRED` to match
89
- local behavior, since the environment `env` block is the reliable place to set them.
87
+ for this repo vs **dormant** (`OPTIONAL`). Distinguish *where* each var must be set, because the
88
+ answer differs and getting it wrong sends the user to do redundant work:
89
+
90
+ - **Committed `.claude/settings.json` `env` flags** (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,
91
+ `ENABLE_LSP_TOOL`, `BASH_*`) — this file is repo-committed, so it reaches the cloud and Claude
92
+ Code applies its `env` block when it launches. These are **already provided — no action**.
93
+ Surface them as `OK` (cite the file), not `REQUIRED`. Do **not** tell the user to re-enter them
94
+ in the environment UI; a duplicate there only risks drifting from the committed value. The lone
95
+ caveat: the setup script runs *before* Claude Code launches, so it cannot see these — flag any
96
+ that the **setup script itself** would need (rare) as needing a UI value too.
97
+ - **Secrets** (tokens/keys) — cannot be committed, so the committed `settings.json` can't carry
98
+ them. These are the only vars that genuinely **must be set in the environment-variables UI**.
99
+ Mark active-integration secrets `REQUIRED`; dormant ones `OPTIONAL`.
90
100
 
91
101
  4a. **Tracker / PRD-source credentials** — this is the load-bearing part of the audit and must be
92
102
  driven by config, not by what the scan happens to find. Resolve the active integrations first:
@@ -199,7 +209,10 @@ checklist of the secrets the user must set in the routine's environment for the
199
209
  `tracker`/`source` (from group 4a). One block per active integration, each with its env-var name(s),
200
210
  an `Acquire:` URL, and an `Access:` scope line, plus a one-line note that the environment UI is where
201
211
  these are set (the generated build script only emits a names-only template, never values). If both
202
- `tracker` and `source` resolve to the same vendor (e.g. both `github`), render it once.
212
+ `tracker` and `source` resolve to the same vendor (e.g. both GitHub), render it once. List **only
213
+ secrets** here — do not include the committed `.claude/settings.json` `env` flags; close the
214
+ subsection with a one-line reminder that those flags are already provided by the committed file and
215
+ need no UI entry.
203
216
 
204
217
  End with a fenced, machine-readable inventory block (also printed when `--json` is passed) so
205
218
  `/lisa:generate-claude-remote-build-script` can consume it without re-deriving everything. Secret
@@ -216,7 +229,7 @@ so the generator can render acquisition comments into its template:
216
229
  "tracker": "github",
217
230
  "source": "github",
218
231
  "env": [
219
- { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": true, "secret": false, "reason": "set in .claude/settings.json" },
232
+ { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": false, "secret": false, "providedBy": "settings.json", "uiAction": "none", "reason": "committed in .claude/settings.json env — applied automatically; do not re-enter in the UI" },
220
233
  {
221
234
  "name": "GH_TOKEN", "required": true, "secret": true, "integration": "github",
222
235
  "reason": "active tracker+source; gh scripts gate on gh auth status",
@@ -51,9 +51,12 @@ tracker/source, plus the host project's own package manager and tooling — not
51
51
  3. **Emit the environment-variable template.** Write a commented block listing every `env` entry
52
52
  from the inventory grouped by integration, marked `REQUIRED`/`OPTIONAL` and `secret`/`plain`,
53
53
  with the reason. **Never write real secret values** — only names and placeholders, because the
54
- environment config is visible to anyone who can edit it. Include feature flags actually set in
55
- `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) so cloud behavior matches
56
- local. For every secret entry that carries `acquireUrl`/`accessScope`/`headlessSubstrate` (the
54
+ environment config is visible to anyone who can edit it. Entries flagged `providedBy: settings.json`
55
+ (the committed `.claude/settings.json` `env` flags, e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) are
56
+ **already applied from the committed file** list them under an `# Already provided by committed
57
+ .claude/settings.json — no UI entry needed` heading, not as values to set. The "set in the
58
+ environment UI" template is for **secrets only**. For every secret entry that carries
59
+ `acquireUrl`/`accessScope`/`headlessSubstrate` (the
57
60
  active tracker/source credentials from the analysis's group 4a), render those as comment lines
58
61
  directly above the name — `# Acquire: <url>` and `# Access: <scope>` — so the user knows exactly
59
62
  where to get the token and what permissions it needs. Emit only the **env-var form** of the name
@@ -83,8 +86,9 @@ shape, not a fixed payload):
83
86
  #
84
87
  # GAPS this script cannot fix (configure separately):
85
88
  # - <gaps from analysis, e.g. auto-memory is machine-local and not synced to cloud routines>
86
- # ENV VARS to set in the environment config (names onlyset real values there, not here):
87
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # REQUIRED, matches .claude/settings.json
89
+ # Already provided by committed .claude/settings.json (applied automaticallyno UI entry needed):
90
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
91
+ # SECRETS to set in the environment config (names only — set real values there, not here):
88
92
  # # --- credentials for the active tracker/source (set in the environment UI) ---
89
93
  # # Acquire: https://github.com/settings/personal-access-tokens
90
94
  # # Access: fine-grained PAT on target repo: Contents R/W, Issues R/W, Pull requests R/W, Metadata R
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -84,9 +84,19 @@ Group the findings as:
84
84
  `secrets.*`/`env:` in CI, and config-referenced tokens. Group by integration (GitHub, AWS,
85
85
  Atlassian/JIRA/Confluence, Notion, Linear, Anthropic, notifications, feature flags, other).
86
86
  Cross-reference `.lisa.config.json` `tracker`/`source` to mark which credentials are **active**
87
- for this repo vs **dormant** (`OPTIONAL`). Always surface Claude Code feature flags actually set
88
- in `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) as `REQUIRED` to match
89
- local behavior, since the environment `env` block is the reliable place to set them.
87
+ for this repo vs **dormant** (`OPTIONAL`). Distinguish *where* each var must be set, because the
88
+ answer differs and getting it wrong sends the user to do redundant work:
89
+
90
+ - **Committed `.claude/settings.json` `env` flags** (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,
91
+ `ENABLE_LSP_TOOL`, `BASH_*`) — this file is repo-committed, so it reaches the cloud and Claude
92
+ Code applies its `env` block when it launches. These are **already provided — no action**.
93
+ Surface them as `OK` (cite the file), not `REQUIRED`. Do **not** tell the user to re-enter them
94
+ in the environment UI; a duplicate there only risks drifting from the committed value. The lone
95
+ caveat: the setup script runs *before* Claude Code launches, so it cannot see these — flag any
96
+ that the **setup script itself** would need (rare) as needing a UI value too.
97
+ - **Secrets** (tokens/keys) — cannot be committed, so the committed `settings.json` can't carry
98
+ them. These are the only vars that genuinely **must be set in the environment-variables UI**.
99
+ Mark active-integration secrets `REQUIRED`; dormant ones `OPTIONAL`.
90
100
 
91
101
  4a. **Tracker / PRD-source credentials** — this is the load-bearing part of the audit and must be
92
102
  driven by config, not by what the scan happens to find. Resolve the active integrations first:
@@ -199,7 +209,10 @@ checklist of the secrets the user must set in the routine's environment for the
199
209
  `tracker`/`source` (from group 4a). One block per active integration, each with its env-var name(s),
200
210
  an `Acquire:` URL, and an `Access:` scope line, plus a one-line note that the environment UI is where
201
211
  these are set (the generated build script only emits a names-only template, never values). If both
202
- `tracker` and `source` resolve to the same vendor (e.g. both `github`), render it once.
212
+ `tracker` and `source` resolve to the same vendor (e.g. both GitHub), render it once. List **only
213
+ secrets** here — do not include the committed `.claude/settings.json` `env` flags; close the
214
+ subsection with a one-line reminder that those flags are already provided by the committed file and
215
+ need no UI entry.
203
216
 
204
217
  End with a fenced, machine-readable inventory block (also printed when `--json` is passed) so
205
218
  `/lisa:generate-claude-remote-build-script` can consume it without re-deriving everything. Secret
@@ -216,7 +229,7 @@ so the generator can render acquisition comments into its template:
216
229
  "tracker": "github",
217
230
  "source": "github",
218
231
  "env": [
219
- { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": true, "secret": false, "reason": "set in .claude/settings.json" },
232
+ { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": false, "secret": false, "providedBy": "settings.json", "uiAction": "none", "reason": "committed in .claude/settings.json env — applied automatically; do not re-enter in the UI" },
220
233
  {
221
234
  "name": "GH_TOKEN", "required": true, "secret": true, "integration": "github",
222
235
  "reason": "active tracker+source; gh scripts gate on gh auth status",
@@ -51,9 +51,12 @@ tracker/source, plus the host project's own package manager and tooling — not
51
51
  3. **Emit the environment-variable template.** Write a commented block listing every `env` entry
52
52
  from the inventory grouped by integration, marked `REQUIRED`/`OPTIONAL` and `secret`/`plain`,
53
53
  with the reason. **Never write real secret values** — only names and placeholders, because the
54
- environment config is visible to anyone who can edit it. Include feature flags actually set in
55
- `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) so cloud behavior matches
56
- local. For every secret entry that carries `acquireUrl`/`accessScope`/`headlessSubstrate` (the
54
+ environment config is visible to anyone who can edit it. Entries flagged `providedBy: settings.json`
55
+ (the committed `.claude/settings.json` `env` flags, e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) are
56
+ **already applied from the committed file** list them under an `# Already provided by committed
57
+ .claude/settings.json — no UI entry needed` heading, not as values to set. The "set in the
58
+ environment UI" template is for **secrets only**. For every secret entry that carries
59
+ `acquireUrl`/`accessScope`/`headlessSubstrate` (the
57
60
  active tracker/source credentials from the analysis's group 4a), render those as comment lines
58
61
  directly above the name — `# Acquire: <url>` and `# Access: <scope>` — so the user knows exactly
59
62
  where to get the token and what permissions it needs. Emit only the **env-var form** of the name
@@ -83,8 +86,9 @@ shape, not a fixed payload):
83
86
  #
84
87
  # GAPS this script cannot fix (configure separately):
85
88
  # - <gaps from analysis, e.g. auto-memory is machine-local and not synced to cloud routines>
86
- # ENV VARS to set in the environment config (names onlyset real values there, not here):
87
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # REQUIRED, matches .claude/settings.json
89
+ # Already provided by committed .claude/settings.json (applied automaticallyno UI entry needed):
90
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
91
+ # SECRETS to set in the environment config (names only — set real values there, not here):
88
92
  # # --- credentials for the active tracker/source (set in the environment UI) ---
89
93
  # # Acquire: https://github.com/settings/personal-access-tokens
90
94
  # # Access: fine-grained PAT on target repo: Contents R/W, Issues R/W, Pull requests R/W, Metadata R
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -84,9 +84,19 @@ Group the findings as:
84
84
  `secrets.*`/`env:` in CI, and config-referenced tokens. Group by integration (GitHub, AWS,
85
85
  Atlassian/JIRA/Confluence, Notion, Linear, Anthropic, notifications, feature flags, other).
86
86
  Cross-reference `.lisa.config.json` `tracker`/`source` to mark which credentials are **active**
87
- for this repo vs **dormant** (`OPTIONAL`). Always surface Claude Code feature flags actually set
88
- in `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) as `REQUIRED` to match
89
- local behavior, since the environment `env` block is the reliable place to set them.
87
+ for this repo vs **dormant** (`OPTIONAL`). Distinguish *where* each var must be set, because the
88
+ answer differs and getting it wrong sends the user to do redundant work:
89
+
90
+ - **Committed `.claude/settings.json` `env` flags** (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,
91
+ `ENABLE_LSP_TOOL`, `BASH_*`) — this file is repo-committed, so it reaches the cloud and Claude
92
+ Code applies its `env` block when it launches. These are **already provided — no action**.
93
+ Surface them as `OK` (cite the file), not `REQUIRED`. Do **not** tell the user to re-enter them
94
+ in the environment UI; a duplicate there only risks drifting from the committed value. The lone
95
+ caveat: the setup script runs *before* Claude Code launches, so it cannot see these — flag any
96
+ that the **setup script itself** would need (rare) as needing a UI value too.
97
+ - **Secrets** (tokens/keys) — cannot be committed, so the committed `settings.json` can't carry
98
+ them. These are the only vars that genuinely **must be set in the environment-variables UI**.
99
+ Mark active-integration secrets `REQUIRED`; dormant ones `OPTIONAL`.
90
100
 
91
101
  4a. **Tracker / PRD-source credentials** — this is the load-bearing part of the audit and must be
92
102
  driven by config, not by what the scan happens to find. Resolve the active integrations first:
@@ -199,7 +209,10 @@ checklist of the secrets the user must set in the routine's environment for the
199
209
  `tracker`/`source` (from group 4a). One block per active integration, each with its env-var name(s),
200
210
  an `Acquire:` URL, and an `Access:` scope line, plus a one-line note that the environment UI is where
201
211
  these are set (the generated build script only emits a names-only template, never values). If both
202
- `tracker` and `source` resolve to the same vendor (e.g. both `github`), render it once.
212
+ `tracker` and `source` resolve to the same vendor (e.g. both GitHub), render it once. List **only
213
+ secrets** here — do not include the committed `.claude/settings.json` `env` flags; close the
214
+ subsection with a one-line reminder that those flags are already provided by the committed file and
215
+ need no UI entry.
203
216
 
204
217
  End with a fenced, machine-readable inventory block (also printed when `--json` is passed) so
205
218
  `/lisa:generate-claude-remote-build-script` can consume it without re-deriving everything. Secret
@@ -216,7 +229,7 @@ so the generator can render acquisition comments into its template:
216
229
  "tracker": "github",
217
230
  "source": "github",
218
231
  "env": [
219
- { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": true, "secret": false, "reason": "set in .claude/settings.json" },
232
+ { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": false, "secret": false, "providedBy": "settings.json", "uiAction": "none", "reason": "committed in .claude/settings.json env — applied automatically; do not re-enter in the UI" },
220
233
  {
221
234
  "name": "GH_TOKEN", "required": true, "secret": true, "integration": "github",
222
235
  "reason": "active tracker+source; gh scripts gate on gh auth status",
@@ -51,9 +51,12 @@ tracker/source, plus the host project's own package manager and tooling — not
51
51
  3. **Emit the environment-variable template.** Write a commented block listing every `env` entry
52
52
  from the inventory grouped by integration, marked `REQUIRED`/`OPTIONAL` and `secret`/`plain`,
53
53
  with the reason. **Never write real secret values** — only names and placeholders, because the
54
- environment config is visible to anyone who can edit it. Include feature flags actually set in
55
- `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) so cloud behavior matches
56
- local. For every secret entry that carries `acquireUrl`/`accessScope`/`headlessSubstrate` (the
54
+ environment config is visible to anyone who can edit it. Entries flagged `providedBy: settings.json`
55
+ (the committed `.claude/settings.json` `env` flags, e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) are
56
+ **already applied from the committed file** list them under an `# Already provided by committed
57
+ .claude/settings.json — no UI entry needed` heading, not as values to set. The "set in the
58
+ environment UI" template is for **secrets only**. For every secret entry that carries
59
+ `acquireUrl`/`accessScope`/`headlessSubstrate` (the
57
60
  active tracker/source credentials from the analysis's group 4a), render those as comment lines
58
61
  directly above the name — `# Acquire: <url>` and `# Access: <scope>` — so the user knows exactly
59
62
  where to get the token and what permissions it needs. Emit only the **env-var form** of the name
@@ -83,8 +86,9 @@ shape, not a fixed payload):
83
86
  #
84
87
  # GAPS this script cannot fix (configure separately):
85
88
  # - <gaps from analysis, e.g. auto-memory is machine-local and not synced to cloud routines>
86
- # ENV VARS to set in the environment config (names onlyset real values there, not here):
87
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # REQUIRED, matches .claude/settings.json
89
+ # Already provided by committed .claude/settings.json (applied automaticallyno UI entry needed):
90
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
91
+ # SECRETS to set in the environment config (names only — set real values there, not here):
88
92
  # # --- credentials for the active tracker/source (set in the environment UI) ---
89
93
  # # Acquire: https://github.com/settings/personal-access-tokens
90
94
  # # Access: fine-grained PAT on target repo: Contents R/W, Issues R/W, Pull requests R/W, Metadata R
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.141.1",
3
+ "version": "2.142.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.141.1",
3
+ "version": "2.142.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.141.1",
3
+ "version": "2.142.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.141.1",
3
+ "version": "2.142.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.141.1",
3
+ "version": "2.142.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-rails",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.141.1",
3
+ "version": "2.142.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -84,9 +84,19 @@ Group the findings as:
84
84
  `secrets.*`/`env:` in CI, and config-referenced tokens. Group by integration (GitHub, AWS,
85
85
  Atlassian/JIRA/Confluence, Notion, Linear, Anthropic, notifications, feature flags, other).
86
86
  Cross-reference `.lisa.config.json` `tracker`/`source` to mark which credentials are **active**
87
- for this repo vs **dormant** (`OPTIONAL`). Always surface Claude Code feature flags actually set
88
- in `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) as `REQUIRED` to match
89
- local behavior, since the environment `env` block is the reliable place to set them.
87
+ for this repo vs **dormant** (`OPTIONAL`). Distinguish *where* each var must be set, because the
88
+ answer differs and getting it wrong sends the user to do redundant work:
89
+
90
+ - **Committed `.claude/settings.json` `env` flags** (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`,
91
+ `ENABLE_LSP_TOOL`, `BASH_*`) — this file is repo-committed, so it reaches the cloud and Claude
92
+ Code applies its `env` block when it launches. These are **already provided — no action**.
93
+ Surface them as `OK` (cite the file), not `REQUIRED`. Do **not** tell the user to re-enter them
94
+ in the environment UI; a duplicate there only risks drifting from the committed value. The lone
95
+ caveat: the setup script runs *before* Claude Code launches, so it cannot see these — flag any
96
+ that the **setup script itself** would need (rare) as needing a UI value too.
97
+ - **Secrets** (tokens/keys) — cannot be committed, so the committed `settings.json` can't carry
98
+ them. These are the only vars that genuinely **must be set in the environment-variables UI**.
99
+ Mark active-integration secrets `REQUIRED`; dormant ones `OPTIONAL`.
90
100
 
91
101
  4a. **Tracker / PRD-source credentials** — this is the load-bearing part of the audit and must be
92
102
  driven by config, not by what the scan happens to find. Resolve the active integrations first:
@@ -199,7 +209,10 @@ checklist of the secrets the user must set in the routine's environment for the
199
209
  `tracker`/`source` (from group 4a). One block per active integration, each with its env-var name(s),
200
210
  an `Acquire:` URL, and an `Access:` scope line, plus a one-line note that the environment UI is where
201
211
  these are set (the generated build script only emits a names-only template, never values). If both
202
- `tracker` and `source` resolve to the same vendor (e.g. both `github`), render it once.
212
+ `tracker` and `source` resolve to the same vendor (e.g. both GitHub), render it once. List **only
213
+ secrets** here — do not include the committed `.claude/settings.json` `env` flags; close the
214
+ subsection with a one-line reminder that those flags are already provided by the committed file and
215
+ need no UI entry.
203
216
 
204
217
  End with a fenced, machine-readable inventory block (also printed when `--json` is passed) so
205
218
  `/lisa:generate-claude-remote-build-script` can consume it without re-deriving everything. Secret
@@ -216,7 +229,7 @@ so the generator can render acquisition comments into its template:
216
229
  "tracker": "github",
217
230
  "source": "github",
218
231
  "env": [
219
- { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": true, "secret": false, "reason": "set in .claude/settings.json" },
232
+ { "name": "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "required": false, "secret": false, "providedBy": "settings.json", "uiAction": "none", "reason": "committed in .claude/settings.json env — applied automatically; do not re-enter in the UI" },
220
233
  {
221
234
  "name": "GH_TOKEN", "required": true, "secret": true, "integration": "github",
222
235
  "reason": "active tracker+source; gh scripts gate on gh auth status",
@@ -51,9 +51,12 @@ tracker/source, plus the host project's own package manager and tooling — not
51
51
  3. **Emit the environment-variable template.** Write a commented block listing every `env` entry
52
52
  from the inventory grouped by integration, marked `REQUIRED`/`OPTIONAL` and `secret`/`plain`,
53
53
  with the reason. **Never write real secret values** — only names and placeholders, because the
54
- environment config is visible to anyone who can edit it. Include feature flags actually set in
55
- `.claude/settings.json` (e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) so cloud behavior matches
56
- local. For every secret entry that carries `acquireUrl`/`accessScope`/`headlessSubstrate` (the
54
+ environment config is visible to anyone who can edit it. Entries flagged `providedBy: settings.json`
55
+ (the committed `.claude/settings.json` `env` flags, e.g. `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS`) are
56
+ **already applied from the committed file** list them under an `# Already provided by committed
57
+ .claude/settings.json — no UI entry needed` heading, not as values to set. The "set in the
58
+ environment UI" template is for **secrets only**. For every secret entry that carries
59
+ `acquireUrl`/`accessScope`/`headlessSubstrate` (the
57
60
  active tracker/source credentials from the analysis's group 4a), render those as comment lines
58
61
  directly above the name — `# Acquire: <url>` and `# Access: <scope>` — so the user knows exactly
59
62
  where to get the token and what permissions it needs. Emit only the **env-var form** of the name
@@ -83,8 +86,9 @@ shape, not a fixed payload):
83
86
  #
84
87
  # GAPS this script cannot fix (configure separately):
85
88
  # - <gaps from analysis, e.g. auto-memory is machine-local and not synced to cloud routines>
86
- # ENV VARS to set in the environment config (names onlyset real values there, not here):
87
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 # REQUIRED, matches .claude/settings.json
89
+ # Already provided by committed .claude/settings.json (applied automaticallyno UI entry needed):
90
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
91
+ # SECRETS to set in the environment config (names only — set real values there, not here):
88
92
  # # --- credentials for the active tracker/source (set in the environment UI) ---
89
93
  # # Acquire: https://github.com/settings/personal-access-tokens
90
94
  # # Access: fine-grained PAT on target repo: Contents R/W, Issues R/W, Pull requests R/W, Metadata R
@@ -13,12 +13,10 @@
13
13
  # - linear-server MCP is OAuth (browser) → unusable headless. Dormant here (tracker=github);
14
14
  # if you switch to Linear, use LINEAR_API_KEY + Linear GraphQL instead.
15
15
  #
16
- # ENV VARS to set in the environment config (names onlyset real values in the UI, NOT here):
17
- # Plain config flags (match .claude/settings.json):
18
- # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1
19
- # - ENABLE_LSP_TOOL=1
20
- # - BASH_DEFAULT_TIMEOUT_MS=1800000
21
- # - BASH_MAX_TIMEOUT_MS=7200000
16
+ # Already provided by committed .claude/settings.json env (applied automaticallydo NOT re-enter in the UI):
17
+ # - CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS, ENABLE_LSP_TOOL, BASH_DEFAULT_TIMEOUT_MS, BASH_MAX_TIMEOUT_MS
18
+ #
19
+ # SECRETS to set in the environment config (names only — set real values in the UI, NOT here):
22
20
  # Credentials for the active tracker/source (tracker=github, source=github):
23
21
  # # Acquire: https://github.com/settings/personal-access-tokens
24
22
  # # Access: fine-grained PAT on CodySwannGT/lisa — Contents R/W, Issues R/W,
@@ -3,6 +3,15 @@
3
3
  "outDir": "dist",
4
4
  "rootDir": "src"
5
5
  },
6
- "include": ["src/**/*"],
7
- "exclude": ["node_modules", ".build", "dist", "**/*.test.ts", "**/*.spec.ts"]
6
+ "include": [
7
+ "src/**/*"
8
+ ],
9
+ "exclude": [
10
+ "node_modules",
11
+ ".build",
12
+ "dist",
13
+ "**/*.test.ts",
14
+ "**/*.spec.ts"
15
+ ],
16
+ "files": []
8
17
  }