@codyswann/lisa 2.235.0 → 2.237.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/check-learnings-budget-cmd.d.ts +20 -0
- package/dist/cli/check-learnings-budget-cmd.d.ts.map +1 -0
- package/dist/cli/check-learnings-budget-cmd.js +59 -0
- package/dist/cli/check-learnings-budget-cmd.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +29 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ui-automations-adapters.d.ts +50 -0
- package/dist/cli/ui-automations-adapters.d.ts.map +1 -0
- package/dist/cli/ui-automations-adapters.js +162 -0
- package/dist/cli/ui-automations-adapters.js.map +1 -0
- package/dist/cli/ui-automations.d.ts +89 -0
- package/dist/cli/ui-automations.d.ts.map +1 -0
- package/dist/cli/ui-automations.js +148 -0
- package/dist/cli/ui-automations.js.map +1 -0
- package/dist/cli/ui-cmd.d.ts +5 -0
- package/dist/cli/ui-cmd.d.ts.map +1 -1
- package/dist/cli/ui-cmd.js +17 -0
- package/dist/cli/ui-cmd.js.map +1 -1
- package/dist/cli/ui-deploy-pipeline-model.d.ts +70 -0
- package/dist/cli/ui-deploy-pipeline-model.d.ts.map +1 -0
- package/dist/cli/ui-deploy-pipeline-model.js +127 -0
- package/dist/cli/ui-deploy-pipeline-model.js.map +1 -0
- package/dist/cli/ui-deploy-pipeline.d.ts +25 -0
- package/dist/cli/ui-deploy-pipeline.d.ts.map +1 -0
- package/dist/cli/ui-deploy-pipeline.js +192 -0
- package/dist/cli/ui-deploy-pipeline.js.map +1 -0
- package/dist/cli/ui-detected-stacks.d.ts +20 -0
- package/dist/cli/ui-detected-stacks.d.ts.map +1 -0
- package/dist/cli/ui-detected-stacks.js +28 -0
- package/dist/cli/ui-detected-stacks.js.map +1 -0
- package/dist/cli/ui-enabled-plugins.d.ts +52 -0
- package/dist/cli/ui-enabled-plugins.d.ts.map +1 -0
- package/dist/cli/ui-enabled-plugins.js +253 -0
- package/dist/cli/ui-enabled-plugins.js.map +1 -0
- package/dist/cli/ui-github-repo-expected.d.ts +36 -0
- package/dist/cli/ui-github-repo-expected.d.ts.map +1 -0
- package/dist/cli/ui-github-repo-expected.js +118 -0
- package/dist/cli/ui-github-repo-expected.js.map +1 -0
- package/dist/cli/ui-github-repo-gh.d.ts +36 -0
- package/dist/cli/ui-github-repo-gh.d.ts.map +1 -0
- package/dist/cli/ui-github-repo-gh.js +112 -0
- package/dist/cli/ui-github-repo-gh.js.map +1 -0
- package/dist/cli/ui-github-repo-map.d.ts +25 -0
- package/dist/cli/ui-github-repo-map.d.ts.map +1 -0
- package/dist/cli/ui-github-repo-map.js +150 -0
- package/dist/cli/ui-github-repo-map.js.map +1 -0
- package/dist/cli/ui-github-repo.d.ts +51 -0
- package/dist/cli/ui-github-repo.d.ts.map +1 -0
- package/dist/cli/ui-github-repo.js +117 -0
- package/dist/cli/ui-github-repo.js.map +1 -0
- package/dist/cli/ui-observability-checks.d.ts +23 -0
- package/dist/cli/ui-observability-checks.d.ts.map +1 -0
- package/dist/cli/ui-observability-checks.js +156 -0
- package/dist/cli/ui-observability-checks.js.map +1 -0
- package/dist/cli/ui-observability-providers.d.ts +69 -0
- package/dist/cli/ui-observability-providers.d.ts.map +1 -0
- package/dist/cli/ui-observability-providers.js +99 -0
- package/dist/cli/ui-observability-providers.js.map +1 -0
- package/dist/core/learnings-budget-check.d.ts +42 -0
- package/dist/core/learnings-budget-check.d.ts.map +1 -0
- package/dist/core/learnings-budget-check.js +210 -0
- package/dist/core/learnings-budget-check.js.map +1 -0
- package/dist/core/learnings-document.js +6 -1
- package/dist/core/learnings-document.js.map +1 -1
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/scripts/check-learnings-budget.ts +29 -163
- package/ui/README.md +5 -3
- package/ui/index.html +1097 -432
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Injectable collaborators for {@link runCheckLearningsBudget}. */
|
|
2
|
+
export interface CheckLearningsBudgetDependencies {
|
|
3
|
+
/** Working directory used to resolve the config and default file. */
|
|
4
|
+
readonly cwd?: string;
|
|
5
|
+
/** Sink for the pass / missing informational line (defaults to stdout). */
|
|
6
|
+
readonly log?: (message: string) => void;
|
|
7
|
+
/** Sink for the violation diagnostic (defaults to stderr). */
|
|
8
|
+
readonly error?: (message: string) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Run the budget check for one project and return the intended process exit
|
|
12
|
+
* code (0 pass or missing, 1 violation). Never throws for an expected
|
|
13
|
+
* condition — a missing learnings file resolves to a silent, successful pass.
|
|
14
|
+
* @param fileArg - Optional explicit learnings file to check (default: resolved
|
|
15
|
+
* from `.lisa.config.json`)
|
|
16
|
+
* @param dependencies - Injectable collaborators for tests
|
|
17
|
+
* @returns Process exit code
|
|
18
|
+
*/
|
|
19
|
+
export declare function runCheckLearningsBudget(fileArg: string | undefined, dependencies?: CheckLearningsBudgetDependencies): Promise<number>;
|
|
20
|
+
//# sourceMappingURL=check-learnings-budget-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-learnings-budget-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/check-learnings-budget-cmd.ts"],"names":[],"mappings":"AAyBA,oEAAoE;AACpE,MAAM,WAAW,gCAAgC;IAC/C,qEAAqE;IACrE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,GAAE,gCAAqC,GAClD,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `lisa check-learnings-budget` — fail CI when a project's learnings file breaks
|
|
3
|
+
* its hard budget.
|
|
4
|
+
*
|
|
5
|
+
* This is the delivery vehicle that carries the budget gate (built into Lisa's
|
|
6
|
+
* core) out to every host project's CI: the Lisa-managed reusable quality
|
|
7
|
+
* workflow invokes this command with `bunx`, which resolves the project's
|
|
8
|
+
* learnings file from `.lisa.config.json` and checks it against the shared
|
|
9
|
+
* contract. The learnings path is ALWAYS resolved through the
|
|
10
|
+
* executable config resolver — never hardcoded — so a project that relocates
|
|
11
|
+
* its rules directory is still gated at the right file. A project with no
|
|
12
|
+
* learnings file is the common, expected case and passes silently (exit 0), so
|
|
13
|
+
* hosts that have never recorded a learning stay green with zero configuration.
|
|
14
|
+
* @module cli/check-learnings-budget-cmd
|
|
15
|
+
*/
|
|
16
|
+
import * as path from "node:path";
|
|
17
|
+
import { checkLearningsBudget, formatDiagnosticPath, } from "../core/learnings-budget-check.js";
|
|
18
|
+
import { readProjectConfig, resolveProjectLearningsFile, } from "../core/project-config.js";
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the learnings file to check: an explicit path argument wins;
|
|
21
|
+
* otherwise the project config's resolved learnings path (never hardcoded).
|
|
22
|
+
* @param fileArg - Optional explicit learnings file argument
|
|
23
|
+
* @param cwd - Working directory the run is anchored to
|
|
24
|
+
* @returns Absolute learnings file path
|
|
25
|
+
*/
|
|
26
|
+
async function resolveLearningsPath(fileArg, cwd) {
|
|
27
|
+
if (fileArg !== undefined) {
|
|
28
|
+
return path.resolve(cwd, fileArg);
|
|
29
|
+
}
|
|
30
|
+
const config = await readProjectConfig(cwd);
|
|
31
|
+
return path.resolve(cwd, resolveProjectLearningsFile(config));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run the budget check for one project and return the intended process exit
|
|
35
|
+
* code (0 pass or missing, 1 violation). Never throws for an expected
|
|
36
|
+
* condition — a missing learnings file resolves to a silent, successful pass.
|
|
37
|
+
* @param fileArg - Optional explicit learnings file to check (default: resolved
|
|
38
|
+
* from `.lisa.config.json`)
|
|
39
|
+
* @param dependencies - Injectable collaborators for tests
|
|
40
|
+
* @returns Process exit code
|
|
41
|
+
*/
|
|
42
|
+
export async function runCheckLearningsBudget(fileArg, dependencies = {}) {
|
|
43
|
+
const cwd = dependencies.cwd ?? process.cwd();
|
|
44
|
+
const log = dependencies.log ?? ((message) => console.log(message));
|
|
45
|
+
const error = dependencies.error ?? ((message) => console.error(message));
|
|
46
|
+
const resolvedFile = await resolveLearningsPath(fileArg, cwd);
|
|
47
|
+
const result = await checkLearningsBudget(resolvedFile);
|
|
48
|
+
if (result.kind === "missing") {
|
|
49
|
+
log(`no learnings file at ${formatDiagnosticPath(resolvedFile)} — nothing to check`);
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
if (result.kind === "violation") {
|
|
53
|
+
error(`check-learnings-budget: ${formatDiagnosticPath(resolvedFile)}: ${result.detail}`);
|
|
54
|
+
return 1;
|
|
55
|
+
}
|
|
56
|
+
log(`${formatDiagnosticPath(resolvedFile)}: learnings budget passed (${result.entryCount}/${result.maxEntries} entries, ${result.measuredTokens}/${result.maxTokens} maxTokens)`);
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=check-learnings-budget-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-learnings-budget-cmd.js","sourceRoot":"","sources":["../../src/cli/check-learnings-budget-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AAYnC;;;;;;GAMG;AACH,KAAK,UAAU,oBAAoB,CACjC,OAA2B,EAC3B,GAAW;IAEX,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAA2B,EAC3B,eAAiD,EAAE;IAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,MAAM,KAAK,GACT,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,GAAG,CACD,wBAAwB,oBAAoB,CAAC,YAAY,CAAC,qBAAqB,CAChF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,KAAK,CACH,2BAA2B,oBAAoB,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAClF,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CACD,GAAG,oBAAoB,CAAC,YAAY,CAAC,8BAA8B,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,aAAa,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,SAAS,aAAa,CAC7K,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
|
+
import { runCheckLearningsBudget } from "./check-learnings-budget-cmd.js";
|
|
3
4
|
import { runCrossPollinate } from "./cross-pollinate-cmd.js";
|
|
4
5
|
import { runDoctor } from "./doctor.js";
|
|
5
6
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
@@ -34,6 +35,8 @@ export interface ProgramDependencies {
|
|
|
34
35
|
runSync: typeof runSync;
|
|
35
36
|
/** Serves the Lisa settings console (after a config sync). */
|
|
36
37
|
runUi: typeof runUi;
|
|
38
|
+
/** Checks the project learnings file against its hard budget. */
|
|
39
|
+
runCheckLearningsBudget: typeof runCheckLearningsBudget;
|
|
37
40
|
/** Runs the non-fatal npm update check (defaults to {@link runUpdateCheck}). */
|
|
38
41
|
runUpdateCheck: typeof runUpdateCheck;
|
|
39
42
|
/** Prints the update warning (defaults to {@link printUpdateWarning}). */
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAEL,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAuB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,4DAA4D;IAC5D,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,wCAAwC;IACxC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,yDAAyD;IACzD,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,qCAAqC;IACrC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,4EAA4E;IAC5E,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,2EAA2E;IAC3E,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,8DAA8D;IAC9D,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,gFAAgF;IAChF,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAEL,iBAAiB,EAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAuB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,4DAA4D;IAC5D,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,wCAAwC;IACxC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,yDAAyD;IACzD,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,qCAAqC;IACrC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,4EAA4E;IAC5E,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;IAC5C,2EAA2E;IAC3E,OAAO,EAAE,OAAO,OAAO,CAAC;IACxB,8DAA8D;IAC9D,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,iEAAiE;IACjE,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,gFAAgF;IAChF,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC/C;AAuID;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC9C,OAAO,CAiFT;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
|
+
import { runCheckLearningsBudget } from "./check-learnings-budget-cmd.js";
|
|
3
4
|
import { runCrossPollinate, } from "./cross-pollinate-cmd.js";
|
|
4
5
|
import { runDoctor } from "./doctor.js";
|
|
5
6
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
@@ -23,11 +24,30 @@ const DEFAULT_DEPENDENCIES = {
|
|
|
23
24
|
runCrossPollinate,
|
|
24
25
|
runSync,
|
|
25
26
|
runUi,
|
|
27
|
+
runCheckLearningsBudget,
|
|
26
28
|
runUpdateCheck,
|
|
27
29
|
printUpdateWarning,
|
|
28
30
|
};
|
|
29
31
|
/** Shared help text for the optional project-path positional argument. */
|
|
30
32
|
const PATH_ARG_DESCRIPTION = "Project path (default: current directory)";
|
|
33
|
+
/**
|
|
34
|
+
* Register the `check-learnings-budget` gate command. Extracted so the broader
|
|
35
|
+
* maintenance-command registrar stays within the function-length budget.
|
|
36
|
+
* @param program - Commander program to mutate
|
|
37
|
+
* @param deps - Program dependencies
|
|
38
|
+
*/
|
|
39
|
+
function addCheckLearningsBudgetCommand(program, deps) {
|
|
40
|
+
program
|
|
41
|
+
.command("check-learnings-budget")
|
|
42
|
+
.description("Fail if the project learnings file exceeds its hard budget (missing file passes)")
|
|
43
|
+
.argument("[path]", "Learnings file to check (default: resolved from .lisa.config.json)")
|
|
44
|
+
.action(async (targetPath) => {
|
|
45
|
+
const code = await deps.runCheckLearningsBudget(targetPath);
|
|
46
|
+
if (code !== 0) {
|
|
47
|
+
process.exitCode = code;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
31
51
|
/**
|
|
32
52
|
* Register CLI maintenance commands that do not run the root update warning.
|
|
33
53
|
* @param program - Commander program to mutate
|
|
@@ -81,6 +101,7 @@ function addMaintenanceCommands(program, deps) {
|
|
|
81
101
|
.action(async (targetPath, options) => {
|
|
82
102
|
await deps.runUi(targetPath, options);
|
|
83
103
|
});
|
|
104
|
+
addCheckLearningsBudgetCommand(program, deps);
|
|
84
105
|
program
|
|
85
106
|
.command("cross-pollinate")
|
|
86
107
|
.description("Make locally-authored agent definitions available to the other agents this project supports")
|
|
@@ -116,7 +137,14 @@ export function createProgram(dependencies = {}) {
|
|
|
116
137
|
// Run the npm update-check once per invocation, before the matched action.
|
|
117
138
|
// It is non-fatal: a failed check never blocks the action from running.
|
|
118
139
|
program.hook("preAction", async (_thisCommand, actionCommand) => {
|
|
119
|
-
if ([
|
|
140
|
+
if ([
|
|
141
|
+
"doctor",
|
|
142
|
+
"sync",
|
|
143
|
+
"ui",
|
|
144
|
+
"update",
|
|
145
|
+
"version",
|
|
146
|
+
"check-learnings-budget",
|
|
147
|
+
].includes(actionCommand.name())) {
|
|
120
148
|
return;
|
|
121
149
|
}
|
|
122
150
|
if (program.opts().updateCheck === false) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAEL,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAuB,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAqB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ClaudeAutomationLister, ClaudeScheduleListingReader, CodexAutomationLister, CodexDirReadableCheck, HarnessAutomationObservation, ProjectIdentityResolver } from "./ui-automations.js";
|
|
2
|
+
/**
|
|
3
|
+
* Default Codex automations directory (`$CODEX_HOME/automations` or `~/.codex/automations`).
|
|
4
|
+
* @returns Absolute directory path
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveDefaultCodexAutomationsDir(): string;
|
|
7
|
+
/** Raw adapter fields normalized by {@link toObservation}. */
|
|
8
|
+
export interface AdapterObservationInput {
|
|
9
|
+
readonly automationId: string;
|
|
10
|
+
readonly observedCadence?: string;
|
|
11
|
+
readonly status?: string;
|
|
12
|
+
readonly lastRunAt?: string | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Normalize adapter observations into the probe's observation shape.
|
|
16
|
+
* @param entry - Adapter observation fields
|
|
17
|
+
* @returns Probe observation without invented cadence/status
|
|
18
|
+
*/
|
|
19
|
+
export declare function toObservation(entry: AdapterObservationInput): HarnessAutomationObservation;
|
|
20
|
+
/**
|
|
21
|
+
* Default identity resolver: config + origin remote → `lisa-auto-<project>-`.
|
|
22
|
+
* @param cwd - Project root
|
|
23
|
+
* @param signal - Abort signal
|
|
24
|
+
* @returns Automation project identity
|
|
25
|
+
*/
|
|
26
|
+
export declare const defaultResolveIdentity: ProjectIdentityResolver;
|
|
27
|
+
/**
|
|
28
|
+
* Default Codex directory readability check.
|
|
29
|
+
* @param automationsDir - Directory to probe
|
|
30
|
+
* @returns Whether the directory is readable
|
|
31
|
+
*/
|
|
32
|
+
export declare const defaultCodexDirReadable: CodexDirReadableCheck;
|
|
33
|
+
/**
|
|
34
|
+
* Default Claude `/schedule` reader — Node cannot invoke the interactive
|
|
35
|
+
* `/schedule` surface, so the default is honest unavailability.
|
|
36
|
+
* @returns Always null
|
|
37
|
+
*/
|
|
38
|
+
export declare const defaultReadClaudeScheduleListing: ClaudeScheduleListingReader;
|
|
39
|
+
/**
|
|
40
|
+
* Default Codex lister via the shared automation-status adapter.
|
|
41
|
+
* @param input - Prefix and optional directory override
|
|
42
|
+
* @returns Observed Codex automations
|
|
43
|
+
*/
|
|
44
|
+
export declare const defaultListCodexAutomations: CodexAutomationLister;
|
|
45
|
+
/**
|
|
46
|
+
* Load the default Claude lister from the shared adapter.
|
|
47
|
+
* @returns Claude automation lister
|
|
48
|
+
*/
|
|
49
|
+
export declare function loadDefaultListClaudeAutomations(): Promise<ClaudeAutomationLister>;
|
|
50
|
+
//# sourceMappingURL=ui-automations-adapters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-automations-adapters.d.ts","sourceRoot":"","sources":["../../src/cli/ui-automations-adapters.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAEV,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAqC7B;;;GAGG;AACH,wBAAgB,iCAAiC,IAAI,MAAM,CAO1D;AAqDD,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,uBAAuB,GAC7B,4BAA4B,CAS9B;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,uBAepC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,qBAQnC,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,2BAC7B,CAAC;AAEnB;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,qBAOvC,CAAC;AAEJ;;;GAGG;AACH,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAQxF"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default harness-scheduler seams for the Automations live-status probe.
|
|
3
|
+
*
|
|
4
|
+
* Loads the shared Codex/Claude automation-status adapters dynamically so the
|
|
5
|
+
* TypeScript build root stays under `src/` while reusing the plugin scripts.
|
|
6
|
+
* @module cli/ui-automations-adapters
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, constants as fsConstants } from "node:fs";
|
|
9
|
+
import { access } from "node:fs/promises";
|
|
10
|
+
import { execFile } from "node:child_process";
|
|
11
|
+
import * as os from "node:os";
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
import { isJsonObject } from "../sync/json-path.js";
|
|
16
|
+
import { deepMerge, readJsonOrNull } from "../utils/index.js";
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
/**
|
|
19
|
+
* Walk parents until a package-root-relative file exists.
|
|
20
|
+
* @param startDir - Directory to start searching from
|
|
21
|
+
* @param relativePath - Path under the package root
|
|
22
|
+
* @returns Absolute path
|
|
23
|
+
*/
|
|
24
|
+
function findPackageFileWalk(startDir, relativePath) {
|
|
25
|
+
const candidate = path.join(startDir, relativePath);
|
|
26
|
+
if (existsSync(candidate)) {
|
|
27
|
+
return candidate;
|
|
28
|
+
}
|
|
29
|
+
const parent = path.dirname(startDir);
|
|
30
|
+
if (parent === startDir) {
|
|
31
|
+
throw new Error(`Unable to locate ${relativePath}`);
|
|
32
|
+
}
|
|
33
|
+
return findPackageFileWalk(parent, relativePath);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve a script under `plugins/src/base/scripts/` from src or dist.
|
|
37
|
+
* @param scriptName - File name inside the scripts directory
|
|
38
|
+
* @returns Absolute path to the script
|
|
39
|
+
*/
|
|
40
|
+
function resolveAutomationStatusScript(scriptName) {
|
|
41
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
42
|
+
const relative = path.join("plugins", "src", "base", "scripts", scriptName);
|
|
43
|
+
const fromPackageRoot = path.join(moduleDir, "..", "..", relative);
|
|
44
|
+
if (existsSync(fromPackageRoot)) {
|
|
45
|
+
return fromPackageRoot;
|
|
46
|
+
}
|
|
47
|
+
return findPackageFileWalk(moduleDir, relative);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Default Codex automations directory (`$CODEX_HOME/automations` or `~/.codex/automations`).
|
|
51
|
+
* @returns Absolute directory path
|
|
52
|
+
*/
|
|
53
|
+
export function resolveDefaultCodexAutomationsDir() {
|
|
54
|
+
// eslint-disable-next-line no-restricted-syntax -- harness path follows Codex's CODEX_HOME contract
|
|
55
|
+
const codexHome = process.env.CODEX_HOME;
|
|
56
|
+
return path.join(codexHome ?? path.join(os.homedir(), ".codex"), "automations");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Dynamically load a shared automation-status adapter module.
|
|
60
|
+
* @param scriptName - Adapter filename
|
|
61
|
+
* @returns Imported module
|
|
62
|
+
*/
|
|
63
|
+
async function loadAdapterModule(scriptName) {
|
|
64
|
+
const scriptPath = resolveAutomationStatusScript(scriptName);
|
|
65
|
+
return import(pathToFileURL(scriptPath).href);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Read merged Lisa config for identity resolution.
|
|
69
|
+
* @param cwd - Project root
|
|
70
|
+
* @returns Merged config object
|
|
71
|
+
*/
|
|
72
|
+
async function readMergedConfig(cwd) {
|
|
73
|
+
const committed = await readJsonOrNull(path.join(cwd, ".lisa.config.json"));
|
|
74
|
+
const local = await readJsonOrNull(path.join(cwd, ".lisa.config.local.json"));
|
|
75
|
+
const committedObject = isJsonObject(committed) ? committed : {};
|
|
76
|
+
const localObject = isJsonObject(local) ? local : {};
|
|
77
|
+
return deepMerge(committedObject, localObject);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Read the origin remote URL via git without a shell.
|
|
81
|
+
* @param cwd - Project root
|
|
82
|
+
* @param signal - Abort signal
|
|
83
|
+
* @returns Origin URL, or undefined when unavailable
|
|
84
|
+
*/
|
|
85
|
+
async function readOriginRemote(cwd, signal) {
|
|
86
|
+
try {
|
|
87
|
+
const { stdout } = await execFileAsync(
|
|
88
|
+
// eslint-disable-next-line sonarjs/no-os-command-from-path -- fixed user-installed git executable
|
|
89
|
+
"git", ["-C", cwd, "remote", "get-url", "origin"], { cwd, signal, timeout: 2_500, encoding: "utf8" });
|
|
90
|
+
const remote = stdout.trim();
|
|
91
|
+
return remote.length > 0 ? remote : undefined;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Normalize adapter observations into the probe's observation shape.
|
|
99
|
+
* @param entry - Adapter observation fields
|
|
100
|
+
* @returns Probe observation without invented cadence/status
|
|
101
|
+
*/
|
|
102
|
+
export function toObservation(entry) {
|
|
103
|
+
return {
|
|
104
|
+
automationId: entry.automationId,
|
|
105
|
+
lastRunAt: entry.lastRunAt ?? null,
|
|
106
|
+
...(typeof entry.observedCadence === "string"
|
|
107
|
+
? { observedCadence: entry.observedCadence }
|
|
108
|
+
: {}),
|
|
109
|
+
...(typeof entry.status === "string" ? { status: entry.status } : {}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Default identity resolver: config + origin remote → `lisa-auto-<project>-`.
|
|
114
|
+
* @param cwd - Project root
|
|
115
|
+
* @param signal - Abort signal
|
|
116
|
+
* @returns Automation project identity
|
|
117
|
+
*/
|
|
118
|
+
export const defaultResolveIdentity = async (cwd, signal) => {
|
|
119
|
+
const { resolveAutomationProjectIdentity } = await loadAdapterModule("automation-status-expected-fleet.mjs");
|
|
120
|
+
const config = await readMergedConfig(cwd);
|
|
121
|
+
const gitRemoteUrl = await readOriginRemote(cwd, signal);
|
|
122
|
+
return resolveAutomationProjectIdentity(gitRemoteUrl === undefined ? { config } : { config, gitRemoteUrl });
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Default Codex directory readability check.
|
|
126
|
+
* @param automationsDir - Directory to probe
|
|
127
|
+
* @returns Whether the directory is readable
|
|
128
|
+
*/
|
|
129
|
+
export const defaultCodexDirReadable = async (automationsDir) => {
|
|
130
|
+
try {
|
|
131
|
+
await access(automationsDir, fsConstants.R_OK);
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Default Claude `/schedule` reader — Node cannot invoke the interactive
|
|
140
|
+
* `/schedule` surface, so the default is honest unavailability.
|
|
141
|
+
* @returns Always null
|
|
142
|
+
*/
|
|
143
|
+
export const defaultReadClaudeScheduleListing = async () => null;
|
|
144
|
+
/**
|
|
145
|
+
* Default Codex lister via the shared automation-status adapter.
|
|
146
|
+
* @param input - Prefix and optional directory override
|
|
147
|
+
* @returns Observed Codex automations
|
|
148
|
+
*/
|
|
149
|
+
export const defaultListCodexAutomations = async (input) => {
|
|
150
|
+
const { listCodexAutomations } = await loadAdapterModule("automation-status-codex-adapter.mjs");
|
|
151
|
+
const observed = await listCodexAutomations(input);
|
|
152
|
+
return observed.map(toObservation);
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Load the default Claude lister from the shared adapter.
|
|
156
|
+
* @returns Claude automation lister
|
|
157
|
+
*/
|
|
158
|
+
export async function loadDefaultListClaudeAutomations() {
|
|
159
|
+
const { listClaudeAutomations } = await loadAdapterModule("automation-status-claude-adapter.mjs");
|
|
160
|
+
return ({ scheduleListing, automationPrefix }) => listClaudeAutomations({ scheduleListing, automationPrefix }).map(toObservation);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=ui-automations-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-automations-adapters.js","sourceRoot":"","sources":["../../src/cli/ui-automations-adapters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live-status probe for the console Automations section.
|
|
3
|
+
*
|
|
4
|
+
* Reads the harness scheduler (Codex `~/.codex/automations/` or Claude
|
|
5
|
+
* `/schedule`) and emits only `lisa-auto-<project>-` matches with their real
|
|
6
|
+
* cadence. READ-ONLY — never fabricates demo automations; absent or unreadable
|
|
7
|
+
* schedulers resolve to unknown with a reason.
|
|
8
|
+
* @module cli/ui-automations
|
|
9
|
+
*/
|
|
10
|
+
import type { JsonValue } from "../sync/json-path.js";
|
|
11
|
+
import type { ProbeResult, StatusProbe } from "./ui-status.js";
|
|
12
|
+
/** Stable probe id consumed by `/api/status` and the Automations section. */
|
|
13
|
+
export declare const AUTOMATIONS_PROBE_ID = "automations";
|
|
14
|
+
/** One observed automation from a harness scheduler adapter. */
|
|
15
|
+
export interface HarnessAutomationObservation {
|
|
16
|
+
readonly automationId: string;
|
|
17
|
+
readonly observedCadence?: string;
|
|
18
|
+
readonly status?: string;
|
|
19
|
+
readonly lastRunAt?: string | null;
|
|
20
|
+
}
|
|
21
|
+
/** One automation entry shipped to the console (never invented). */
|
|
22
|
+
export interface HarnessAutomationEntry {
|
|
23
|
+
readonly [key: string]: JsonValue;
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly cadence: string | null;
|
|
26
|
+
readonly runtime: "codex" | "claude";
|
|
27
|
+
readonly status: string | null;
|
|
28
|
+
readonly lastRunAt: string | null;
|
|
29
|
+
}
|
|
30
|
+
/** Structured value emitted when the scheduler is readable. */
|
|
31
|
+
export type AutomationsProbeValue = {
|
|
32
|
+
readonly [key: string]: JsonValue;
|
|
33
|
+
readonly prefix: string;
|
|
34
|
+
readonly runtime: "codex" | "claude";
|
|
35
|
+
/** Prefix-matching automations; typed as JsonValue[] for the probe transport. */
|
|
36
|
+
readonly automations: JsonValue[];
|
|
37
|
+
};
|
|
38
|
+
/** Resolved Lisa automation naming identity for the current project. */
|
|
39
|
+
export interface AutomationProjectIdentity {
|
|
40
|
+
readonly owner: string;
|
|
41
|
+
readonly repo: string;
|
|
42
|
+
readonly project: string;
|
|
43
|
+
readonly automationPrefix: string;
|
|
44
|
+
}
|
|
45
|
+
/** Resolve `lisa-auto-<project>-` for the served project root. */
|
|
46
|
+
export type ProjectIdentityResolver = (cwd: string, signal: AbortSignal) => Promise<AutomationProjectIdentity>;
|
|
47
|
+
/** List Codex automations matching a prefix (adapter seam). */
|
|
48
|
+
export type CodexAutomationLister = (input: {
|
|
49
|
+
readonly automationsDir?: string;
|
|
50
|
+
readonly automationPrefix: string;
|
|
51
|
+
}) => Promise<readonly HarnessAutomationObservation[]>;
|
|
52
|
+
/** List Claude `/schedule` automations matching a prefix (adapter seam). */
|
|
53
|
+
export type ClaudeAutomationLister = (input: {
|
|
54
|
+
readonly scheduleListing: unknown;
|
|
55
|
+
readonly automationPrefix: string;
|
|
56
|
+
}) => readonly HarnessAutomationObservation[];
|
|
57
|
+
/** Read the Claude `/schedule` listing when the runtime can expose it. */
|
|
58
|
+
export type ClaudeScheduleListingReader = (signal: AbortSignal) => Promise<unknown | null>;
|
|
59
|
+
/** Whether the Codex automations directory exists and is readable. */
|
|
60
|
+
export type CodexDirReadableCheck = (automationsDir: string, signal: AbortSignal) => Promise<boolean>;
|
|
61
|
+
/** Injectable collaborators for focused tests and default runtime wiring. */
|
|
62
|
+
export interface AutomationsProbeDependencies {
|
|
63
|
+
readonly cwd: string;
|
|
64
|
+
readonly automationsDir?: string;
|
|
65
|
+
readonly resolveIdentity?: ProjectIdentityResolver;
|
|
66
|
+
readonly listCodexAutomations?: CodexAutomationLister;
|
|
67
|
+
readonly listClaudeAutomations?: ClaudeAutomationLister;
|
|
68
|
+
readonly readClaudeScheduleListing?: ClaudeScheduleListingReader;
|
|
69
|
+
readonly codexAutomationsDirReadable?: CodexDirReadableCheck;
|
|
70
|
+
}
|
|
71
|
+
/** Inputs for {@link mapHarnessAutomations}. */
|
|
72
|
+
export interface MapHarnessAutomationsInput {
|
|
73
|
+
readonly prefix: string;
|
|
74
|
+
readonly runtime: "codex" | "claude";
|
|
75
|
+
readonly observations: readonly HarnessAutomationObservation[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Map scheduler observations onto the live-status tri-state contract.
|
|
79
|
+
* @param input - Prefix, runtime label, and raw observations
|
|
80
|
+
* @returns Probe value with only prefix-matching automations
|
|
81
|
+
*/
|
|
82
|
+
export declare function mapHarnessAutomations(input: MapHarnessAutomationsInput): ProbeResult<AutomationsProbeValue>;
|
|
83
|
+
/**
|
|
84
|
+
* Create the Automations live-status probe.
|
|
85
|
+
* @param dependencies - Project root plus injectable scheduler seams
|
|
86
|
+
* @returns Probe registered under {@link AUTOMATIONS_PROBE_ID}
|
|
87
|
+
*/
|
|
88
|
+
export declare function createAutomationsProbe(dependencies: AutomationsProbeDependencies): StatusProbe<AutomationsProbeValue>;
|
|
89
|
+
//# sourceMappingURL=ui-automations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-automations.d.ts","sourceRoot":"","sources":["../../src/cli/ui-automations.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAU/D,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AASlD,gEAAgE;AAChE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,iFAAiF;IACjF,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;CACnC,CAAC;AAEF,wEAAwE;AACxE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAExC,+DAA+D;AAC/D,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,KAAK,OAAO,CAAC,SAAS,4BAA4B,EAAE,CAAC,CAAC;AAEvD,4EAA4E;AAC5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE;IAC3C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,KAAK,SAAS,4BAA4B,EAAE,CAAC;AAE9C,0EAA0E;AAC1E,MAAM,MAAM,2BAA2B,GAAG,CACxC,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE7B,sEAAsE;AACtE,MAAM,MAAM,qBAAqB,GAAG,CAClC,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,6EAA6E;AAC7E,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAC;IACnD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IACtD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,sBAAsB,CAAC;IACxD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,2BAA2B,CAAC;IACjE,QAAQ,CAAC,2BAA2B,CAAC,EAAE,qBAAqB,CAAC;CAC9D;AAED,gDAAgD;AAChD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,SAAS,4BAA4B,EAAE,CAAC;CAChE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,WAAW,CAAC,qBAAqB,CAAC,CAiCpC;AA8BD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,4BAA4B,GACzC,WAAW,CAAC,qBAAqB,CAAC,CAmCpC"}
|