@codyswann/lisa 2.242.0 → 2.244.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/core/instruction-files-migration.d.ts +38 -0
- package/dist/core/instruction-files-migration.d.ts.map +1 -1
- package/dist/core/instruction-files-migration.js +76 -7
- package/dist/core/instruction-files-migration.js.map +1 -1
- package/dist/core/learnings-projection.d.ts +38 -0
- package/dist/core/learnings-projection.d.ts.map +1 -0
- package/dist/core/learnings-projection.js +94 -0
- package/dist/core/learnings-projection.js.map +1 -0
- package/dist/core/learnings.d.ts +2 -1
- package/dist/core/learnings.d.ts.map +1 -1
- package/dist/core/learnings.js +2 -1
- package/dist/core/learnings.js.map +1 -1
- package/dist/core/lisa.d.ts +40 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +90 -12
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/project-config.d.ts +36 -3
- package/dist/core/project-config.d.ts.map +1 -1
- package/dist/core/project-config.js +127 -10
- package/dist/core/project-config.js.map +1 -1
- package/dist/sync/registry.js +1 -1
- package/dist/sync/registry.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/.codex-plugin/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/lisa/.codex-plugin/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa/rules/eager/config-resolution.md +6 -3
- package/plugins/lisa/rules/eager/project-learnings.md +11 -5
- package/plugins/lisa/rules/reference/config-resolution.md +2 -1
- package/plugins/lisa/rules/reference/intent-routing.md +2 -0
- package/plugins/lisa/rules/reference/project-learnings.md +28 -8
- package/plugins/lisa/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/lisa/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-agy/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/lisa-agy/skills/lisa-persist-learning/SKILL.md +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-copilot/rules/eager/config-resolution.md +6 -3
- package/plugins/lisa-copilot/rules/eager/project-learnings.md +11 -5
- package/plugins/lisa-copilot/rules/reference/config-resolution.md +2 -1
- package/plugins/lisa-copilot/rules/reference/intent-routing.md +2 -0
- package/plugins/lisa-copilot/rules/reference/project-learnings.md +28 -8
- package/plugins/lisa-copilot/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/lisa-copilot/skills/lisa-persist-learning/SKILL.md +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +2 -1
- package/plugins/lisa-cursor/rules/config-resolution.mdc +6 -3
- package/plugins/lisa-cursor/rules/intent-routing-reference.mdc +2 -0
- package/plugins/lisa-cursor/rules/project-learnings-reference.mdc +28 -8
- package/plugins/lisa-cursor/rules/project-learnings.mdc +11 -5
- package/plugins/lisa-cursor/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/lisa-cursor/skills/lisa-persist-learning/SKILL.md +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/plugins/src/base/rules/eager/config-resolution.md +6 -3
- package/plugins/src/base/rules/eager/project-learnings.md +11 -5
- package/plugins/src/base/rules/reference/config-resolution.md +2 -1
- package/plugins/src/base/rules/reference/intent-routing.md +2 -0
- package/plugins/src/base/rules/reference/project-learnings.md +28 -8
- package/plugins/src/base/skills/lisa-implement/SKILL.md +6 -1
- package/plugins/src/base/skills/lisa-persist-learning/SKILL.md +1 -1
- package/scripts/check-learnings-budget.ts +1 -2
- /package/all/create-only/{.claude/rules → .lisa}/PROJECT_LEARNINGS.md +0 -0
|
@@ -15,8 +15,46 @@ import { ACCEPTED_HARNESS_INPUTS, DEFAULT_HARNESS, HARNESS_ALIASES, HARNESS_VALU
|
|
|
15
15
|
export const PROJECT_CONFIG_FILENAME = ".lisa.config.json";
|
|
16
16
|
/** Default durable project-rules destination used by governance skills. */
|
|
17
17
|
export const DEFAULT_PROJECT_RULES_FILE = ".claude/rules/PROJECT_RULES.md";
|
|
18
|
-
/** Fixed
|
|
18
|
+
/** Fixed filename for the machine-managed project-learnings ledger. */
|
|
19
19
|
export const PROJECT_LEARNINGS_FILENAME = "PROJECT_LEARNINGS.md";
|
|
20
|
+
/**
|
|
21
|
+
* Default location for the machine-managed learnings ledger.
|
|
22
|
+
*
|
|
23
|
+
* The ledger lives beside other machine-managed state under `.lisa/`, NOT in an
|
|
24
|
+
* auto-loaded rules tree. Anything under `.claude/rules/` (and the equivalents
|
|
25
|
+
* other runtimes inject) is read raw into every session — placing the ledger
|
|
26
|
+
* there double-loads it and bypasses the executable contract's budget and
|
|
27
|
+
* validation. `.lisa/` is cold: the ledger is consumed only through the
|
|
28
|
+
* contract's bounded projection.
|
|
29
|
+
*/
|
|
30
|
+
export const DEFAULT_PROJECT_LEARNINGS_FILE = path.posix.join(".lisa", PROJECT_LEARNINGS_FILENAME);
|
|
31
|
+
/**
|
|
32
|
+
* Directory prefixes that one or more runtimes inject raw at session start. The
|
|
33
|
+
* learnings ledger must never resolve inside any of them, or the relocation's
|
|
34
|
+
* whole point — keeping the raw file out of eager context — is defeated. Kept
|
|
35
|
+
* conservative and explicit rather than agent-exhaustive; extend it as new
|
|
36
|
+
* eager rule trees are added.
|
|
37
|
+
*/
|
|
38
|
+
const AUTO_LOADED_RULES_DIR_PREFIXES = [
|
|
39
|
+
".claude/rules",
|
|
40
|
+
".cursor/rules",
|
|
41
|
+
".github/instructions",
|
|
42
|
+
".agents/rules",
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Repo-root instruction files that runtimes auto-load whole at session start
|
|
46
|
+
* (AGENTS.md for Codex/Cursor/Copilot/agy/OpenCode; CLAUDE.md for Claude). A
|
|
47
|
+
* `learnings.file` override must never resolve to one of these, or the ledger
|
|
48
|
+
* would again be injected raw.
|
|
49
|
+
*/
|
|
50
|
+
const ROOT_EAGER_INSTRUCTION_FILES = ["AGENTS.md", "CLAUDE.md"];
|
|
51
|
+
/**
|
|
52
|
+
* Non-root instruction files the generators maintain and runtimes auto-load
|
|
53
|
+
* (Copilot reads `.github/copilot-instructions.md`). Matched by exact path.
|
|
54
|
+
*/
|
|
55
|
+
const EAGER_INSTRUCTION_FILE_PATHS = [
|
|
56
|
+
".github/copilot-instructions.md",
|
|
57
|
+
];
|
|
20
58
|
/**
|
|
21
59
|
* Resolve the validated project-rules path from config or its default.
|
|
22
60
|
* @param config - Parsed project configuration
|
|
@@ -26,12 +64,28 @@ export function resolveProjectRulesFile(config) {
|
|
|
26
64
|
return validateProjectRulesFile(config.projectRulesFile ?? DEFAULT_PROJECT_RULES_FILE, PROJECT_CONFIG_FILENAME);
|
|
27
65
|
}
|
|
28
66
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
67
|
+
* Resolve the machine-managed learnings ledger path. A validated
|
|
68
|
+
* `learnings.file` override wins; otherwise the `.lisa/PROJECT_LEARNINGS.md`
|
|
69
|
+
* default is used. The path is intentionally independent of `projectRulesFile`:
|
|
70
|
+
* the ledger is cold state, not a rules sibling.
|
|
31
71
|
* @param config - Parsed project configuration
|
|
32
72
|
* @returns Safe project-relative learnings Markdown path
|
|
33
73
|
*/
|
|
34
74
|
export function resolveProjectLearningsFile(config) {
|
|
75
|
+
if (config.learnings?.file !== undefined) {
|
|
76
|
+
return validateLearningsFile(config.learnings.file, PROJECT_CONFIG_FILENAME);
|
|
77
|
+
}
|
|
78
|
+
return DEFAULT_PROJECT_LEARNINGS_FILE;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve the ledger's LEGACY location — the sibling of `projectRulesFile`,
|
|
82
|
+
* where releases before the `.lisa/` relocation kept it. Used only by the
|
|
83
|
+
* apply/doctor relocation so an existing file can be found and moved to the new
|
|
84
|
+
* canonical path; never a serving path.
|
|
85
|
+
* @param config - Parsed project configuration
|
|
86
|
+
* @returns Legacy project-relative learnings Markdown path
|
|
87
|
+
*/
|
|
88
|
+
export function resolveLegacyProjectLearningsFile(config) {
|
|
35
89
|
return path.posix.join(path.posix.dirname(resolveProjectRulesFile(config)), PROJECT_LEARNINGS_FILENAME);
|
|
36
90
|
}
|
|
37
91
|
/**
|
|
@@ -158,9 +212,11 @@ function validateProjectConfig(parsed, configPath) {
|
|
|
158
212
|
const projectRulesFile = obj.projectRulesFile === undefined
|
|
159
213
|
? undefined
|
|
160
214
|
: validateProjectRulesFile(obj.projectRulesFile, configPath);
|
|
215
|
+
const learnings = validateLearningsConfig(obj.learnings, configPath);
|
|
161
216
|
return {
|
|
162
217
|
...(harness === undefined ? {} : { harness }),
|
|
163
218
|
...(projectRulesFile === undefined ? {} : { projectRulesFile }),
|
|
219
|
+
...(learnings === undefined ? {} : { learnings }),
|
|
164
220
|
};
|
|
165
221
|
}
|
|
166
222
|
/**
|
|
@@ -186,12 +242,15 @@ function validateOptionalHarness(value, configPath) {
|
|
|
186
242
|
throw new Error(`Invalid harness in ${configPath}: expected ${allowed}, got ${JSON.stringify(value)}`);
|
|
187
243
|
}
|
|
188
244
|
/**
|
|
189
|
-
* Validate
|
|
245
|
+
* Validate a configurable destination as a safe, relative, non-traversing
|
|
246
|
+
* Markdown path. Shared by every path-typed config field; the `field` label is
|
|
247
|
+
* interpolated into each diagnostic so callers get a field-specific message.
|
|
190
248
|
* @param value - Raw configured path
|
|
191
249
|
* @param source - Config source for errors
|
|
250
|
+
* @param field - Config field name used in error messages
|
|
192
251
|
* @returns Validated project-relative path
|
|
193
252
|
*/
|
|
194
|
-
function
|
|
253
|
+
function validateSafeRelativeMarkdownPath(value, source, field) {
|
|
195
254
|
if (typeof value !== "string" ||
|
|
196
255
|
value.length === 0 ||
|
|
197
256
|
value.trim() !== value ||
|
|
@@ -200,20 +259,78 @@ function validateProjectRulesFile(value, source) {
|
|
|
200
259
|
/^[a-z]:/iu.test(value) ||
|
|
201
260
|
path.posix.isAbsolute(value) ||
|
|
202
261
|
path.win32.isAbsolute(value)) {
|
|
203
|
-
throw new Error(`Invalid
|
|
262
|
+
throw new Error(`Invalid ${field} in ${source}: expected a safe relative POSIX path`);
|
|
204
263
|
}
|
|
205
264
|
const segments = value.split("/");
|
|
206
265
|
if (segments.some(segment => segment === "" || segment === "." || segment === "..")) {
|
|
207
|
-
throw new Error(`Invalid
|
|
266
|
+
throw new Error(`Invalid ${field} in ${source}: path traversal is not allowed`);
|
|
208
267
|
}
|
|
209
268
|
if (path.posix.extname(value).toLowerCase() !== ".md") {
|
|
210
|
-
throw new Error(`Invalid
|
|
269
|
+
throw new Error(`Invalid ${field} in ${source}: expected a Markdown file`);
|
|
211
270
|
}
|
|
212
|
-
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Validate the configurable rules destination as a safe Markdown path, and
|
|
275
|
+
* reject the reserved learnings filename so a rules file can never collide with
|
|
276
|
+
* the machine-managed ledger.
|
|
277
|
+
* @param value - Raw configured path
|
|
278
|
+
* @param source - Config source for errors
|
|
279
|
+
* @returns Validated project-relative path
|
|
280
|
+
*/
|
|
281
|
+
function validateProjectRulesFile(value, source) {
|
|
282
|
+
const safe = validateSafeRelativeMarkdownPath(value, source, "projectRulesFile");
|
|
283
|
+
if (path.posix.basename(safe).toLowerCase() ===
|
|
213
284
|
PROJECT_LEARNINGS_FILENAME.toLowerCase()) {
|
|
214
285
|
throw new Error(`Invalid projectRulesFile in ${source}: ${PROJECT_LEARNINGS_FILENAME} is reserved for machine-managed learnings`);
|
|
215
286
|
}
|
|
216
|
-
return
|
|
287
|
+
return safe;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Validate a `learnings.file` override: a safe relative Markdown path that does
|
|
291
|
+
* NOT resolve inside any auto-loaded rules tree. Placing the ledger in an eager
|
|
292
|
+
* tree is exactly the defect this relocation exists to prevent, so it is a hard
|
|
293
|
+
* rejection with a readable reason rather than a silent fallback.
|
|
294
|
+
* @param value - Raw configured path
|
|
295
|
+
* @param source - Config source for errors
|
|
296
|
+
* @returns Validated project-relative learnings path
|
|
297
|
+
*/
|
|
298
|
+
function validateLearningsFile(value, source) {
|
|
299
|
+
const safe = validateSafeRelativeMarkdownPath(value, source, "learnings.file");
|
|
300
|
+
const normalized = path.posix.normalize(safe);
|
|
301
|
+
const lowered = normalized.toLowerCase();
|
|
302
|
+
const insideEagerTree = AUTO_LOADED_RULES_DIR_PREFIXES.some(prefix => normalized === prefix || normalized.startsWith(`${prefix}/`));
|
|
303
|
+
const isRootEagerFile = path.posix.dirname(normalized) === "." &&
|
|
304
|
+
ROOT_EAGER_INSTRUCTION_FILES.some(name => name.toLowerCase() === lowered);
|
|
305
|
+
const isNamedEagerFile = EAGER_INSTRUCTION_FILE_PATHS.some(filePath => filePath.toLowerCase() === lowered);
|
|
306
|
+
if (insideEagerTree || isRootEagerFile || isNamedEagerFile) {
|
|
307
|
+
const surfaces = [
|
|
308
|
+
...AUTO_LOADED_RULES_DIR_PREFIXES,
|
|
309
|
+
...ROOT_EAGER_INSTRUCTION_FILES,
|
|
310
|
+
...EAGER_INSTRUCTION_FILE_PATHS,
|
|
311
|
+
].join(", ");
|
|
312
|
+
throw new Error(`Invalid learnings.file in ${source}: the ledger must not live in an auto-loaded rules tree or instruction file (${surfaces}); the default ${DEFAULT_PROJECT_LEARNINGS_FILE} is the recommended location`);
|
|
313
|
+
}
|
|
314
|
+
return safe;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Validate the optional `learnings` block, preserving an absent value.
|
|
318
|
+
* @param value - Raw learnings value
|
|
319
|
+
* @param source - Config source for errors
|
|
320
|
+
* @returns Typed learnings config, or undefined when absent
|
|
321
|
+
*/
|
|
322
|
+
function validateLearningsConfig(value, source) {
|
|
323
|
+
if (value === undefined) {
|
|
324
|
+
return undefined;
|
|
325
|
+
}
|
|
326
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
327
|
+
throw new Error(`Invalid learnings in ${source}: expected an object`);
|
|
328
|
+
}
|
|
329
|
+
const file = value.file;
|
|
330
|
+
if (file === undefined) {
|
|
331
|
+
return {};
|
|
332
|
+
}
|
|
333
|
+
return { file: validateLearningsFile(file, source) };
|
|
217
334
|
}
|
|
218
335
|
/**
|
|
219
336
|
* Whether a path contains an ASCII control character.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,eAAe,EACf,cAAc,EACd,sBAAsB,GAEvB,MAAM,aAAa,CAAC;AAErB,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE3D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/registry.js
CHANGED
|
@@ -56,7 +56,7 @@ export const SYNC_REGISTRY = [
|
|
|
56
56
|
{
|
|
57
57
|
key: "projectRulesFile",
|
|
58
58
|
defaultValue: DEFAULT_PROJECT_RULES_FILE,
|
|
59
|
-
description: "
|
|
59
|
+
description: "Hand-authored project rules file (independent of the ledger)",
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
key: "quality.testCoverage",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAiDvE,MAAM,iBAAiB,GAAG,cAAc,CAAC;AACzC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAC7C,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAC3C,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAE3C,MAAM,iBAAiB,GAAc;IACnC,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CACnE,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC3B,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,oBAAoB;IAC7B,OAAO,EAAE,gBAAgB;IACzB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE;QACJ,GAAG,EAAE,eAAe;QACpB,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,aAAa;KAC1B;CACO,CAAC;AAEX,MAAM,kBAAkB,GAAc;IACpC,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,WAAW;IAClB,SAAS,EAAE,eAAe;IAC1B,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,cAAc;IACxB,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,qBAAqB;CAChC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD;QACE,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,iCAAiC;KAC/C;IACD;QACE,GAAG,EAAE,kBAAkB;QACvB,YAAY,EAAE,0BAA0B;QACxC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/sync/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"form-data": ">=4.0.6"
|
|
103
103
|
},
|
|
104
104
|
"name": "@codyswann/lisa",
|
|
105
|
-
"version": "2.
|
|
105
|
+
"version": "2.244.0",
|
|
106
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
107
107
|
"main": "dist/index.js",
|
|
108
108
|
"exports": {
|
|
@@ -161,7 +161,7 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
161
161
|
"relevant_documentation": "",
|
|
162
162
|
"testing_requirements": ["..."],
|
|
163
163
|
"skills": ["..."],
|
|
164
|
-
"learnings": ["
|
|
164
|
+
"learnings": [{ "kind": "mistake", "note": "one line", "evidence": "optional ref" }],
|
|
165
165
|
"required_access": [
|
|
166
166
|
{ "tool": "<external tool/system this task or its verification needs>", "probe": "<the read-only command or *-access check that proves access>", "status": "pass|fail" }
|
|
167
167
|
],
|
|
@@ -173,11 +173,16 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
+
The `learnings` array is task-end MLD telemetry (Mistakes / Learnings / Desires) — a low-trust self-report for the harness builder, never instructions for a later agent. Each entry is either a plain string (treated as kind `learning` for backward compatibility with older flows) or an object, exactly like the example entry in the block above: a `kind` of `mistake`, `learning`, or `desire`; a one-line `note`; and an optional `evidence` pointer. A `mistake` is an error in the agent's own trajectory, a `learning` is an environment fact discovered the hard way, a `desire` is context or tooling the agent wished it had. Keep each to one line — no essays. `mistake`/`learning` entries are ledger candidates; `desire` entries are tooling-gap candidates that the learner (#1731) records for the gardener's human-gated tooling-gap lane.
|
|
177
|
+
|
|
176
178
|
Before any task is implemented, the agent team must explore the codebase for relevant research (documentation, code, git history, etc) and update each task's `metadata.relevant_documentation` with the findings.
|
|
177
179
|
|
|
178
180
|
For Fix tasks and user-visible Build tasks, `testing_requirements` must include the highest-practical-observation regression requirement above, including the selected harness or the recorded absence/blocker path. The completion condition must include the proof command and the required CI execution evidence for the new spec.
|
|
179
181
|
|
|
180
182
|
Each task must be reviewed by the team to make sure their verification passes.
|
|
183
|
+
|
|
184
|
+
Before marking a task complete, the implementing agent records concise MLD into `metadata.learnings` — mistakes (errors in its own trajectory), learnings (environment facts it discovered the hard way), and desires (context or tools it wished it had). Empty (`learnings: []`) is a valid result: never re-prompt for content, and never grade or score self-reports — a scored MLD would reward plausible self-commentary over good outcomes.
|
|
185
|
+
|
|
181
186
|
Each task must have their learnings reviewed by the learner subagent.
|
|
182
187
|
|
|
183
188
|
Before shutting down the team, execute the Verify flow:
|
|
@@ -139,7 +139,7 @@ Continue to Phase 3.
|
|
|
139
139
|
No learning content is ever committed without a PR — there is no other write path, and the PR must touch **only** the learnings surface (any other changed file is a bug).
|
|
140
140
|
|
|
141
141
|
1. **PR dedupe.** Search all PRs for the marker `[lisa-learning-pr] key=<fingerprint>` in the body (`gh pr list --state all --search '"<marker>" in:body' --json number,url`), with the stale-index guard above. If one exists, reference it and stop — never open a duplicate.
|
|
142
|
-
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the
|
|
142
|
+
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the machine-managed ledger resolved from `.lisa.config.json` (the `learnings.file` override, else the default `.lisa/PROJECT_LEARNINGS.md` — a cold path, never an auto-loaded rules tree):
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
145
|
LEARNINGS_FILE=$(node -e 'import("@codyswann/lisa/learnings").then(async m => { const c = await m.readProjectConfig(process.cwd()); console.log(m.resolveProjectLearningsFile(c)); })')
|
|
@@ -29,9 +29,12 @@ Project tracker (`jira` / `github` / `linear`) is read from `.lisa.config.json`
|
|
|
29
29
|
|
|
30
30
|
Resolve hand-authored project rules from `.lisa.config.json`
|
|
31
31
|
`projectRulesFile`, defaulting to `.claude/rules/PROJECT_RULES.md`. Automated
|
|
32
|
-
learnings never append to that file: they use the separate
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
learnings never append to that file: they use the separate machine-managed
|
|
33
|
+
ledger resolved from `.lisa.config.json` — the optional `learnings.file`
|
|
34
|
+
override, else the default `.lisa/PROJECT_LEARNINGS.md`. The ledger lives in the
|
|
35
|
+
cold `.lisa/` tree (never an auto-loaded rules directory) and is consumed only
|
|
36
|
+
through the contract's bounded projection, never read raw wholesale. Both
|
|
37
|
+
writers and budget checks import the executable contract from
|
|
35
38
|
`@codyswann/lisa/learnings`; they must not copy its numeric limits.
|
|
36
39
|
|
|
37
40
|
## Env → base branch
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
# Project Learnings (load-bearing)
|
|
2
2
|
|
|
3
3
|
Before normal task work, resolve this repository's committed `.lisa.config.json`
|
|
4
|
-
and derive the
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
and derive the machine-managed learnings ledger: the optional `learnings.file`
|
|
5
|
+
override, else the default `.lisa/PROJECT_LEARNINGS.md`. The ledger lives cold in
|
|
6
|
+
`.lisa/`, NOT in an auto-loaded rules tree — so it is never injected raw into the
|
|
7
|
+
session.
|
|
8
|
+
|
|
9
|
+
Consume it ONLY through the executable Lisa learnings contract exported by
|
|
10
|
+
`@codyswann/lisa/learnings`: parse and validate with `parseLearningsFile`, then
|
|
11
|
+
take the bounded serving slice from `projectLearnings` (the highest-priority
|
|
12
|
+
entries within the token/entry budget). **Never read the raw ledger file
|
|
13
|
+
wholesale into context** — the whole point of the relocation is that sessions
|
|
14
|
+
receive the contract's bounded projection, not the full file.
|
|
9
15
|
|
|
10
16
|
Missing learnings are a silent no-op. Malformed, non-canonical, unsafe, or
|
|
11
17
|
over-budget learnings produce one readable warning, apply no entry, and must not
|
|
@@ -179,7 +179,8 @@ fi
|
|
|
179
179
|
|-------|----------|---------|-------|
|
|
180
180
|
| `tracker` | **yes** | — | Destination for ticket writes. One of `"jira"`, `"github"`, `"linear"`. Missing → fail with instruction to run the matching `/lisa:setup:*` skill. |
|
|
181
181
|
| `source` | no | — | Default PRD source for batch skills (`/lisa:intake`) and arg-less single-PRD skills. One of `"notion"`, `"confluence"`, `"linear"`, `"github"`, `"jira"`. Explicit URLs/keys passed to a skill always win over `source`; this is a default, not a lock. |
|
|
182
|
-
| `projectRulesFile` | no | `.claude/rules/PROJECT_RULES.md` | Safe repo-relative Markdown path for hand-authored project rules.
|
|
182
|
+
| `projectRulesFile` | no | `.claude/rules/PROJECT_RULES.md` | Safe repo-relative Markdown path for hand-authored project rules. Independent of the learnings ledger — relocating the rules file never moves the ledger. |
|
|
183
|
+
| `learnings.file` | no | `.lisa/PROJECT_LEARNINGS.md` | Safe repo-relative Markdown path for the machine-managed learnings ledger, overriding the `.lisa/` default. Rejected if it resolves inside any auto-loaded rules tree (`.claude/rules`, `.cursor/rules`, `.github/instructions`, `.agents/rules`) — the ledger must stay out of eager context. |
|
|
183
184
|
| `usage` | no | — | Optional token/cost pricing metadata consumed by the `usage-accounting` rule. Missing pricing never blocks a lifecycle flow; Lisa records token counts with `estimated_cost: null` when no trustworthy price source is configured. |
|
|
184
185
|
| `wiki` | no | — | Wiki location for the `wiki-knowledge-source` rule. Omit for a local in-repo wiki (`wiki/`). See **Wiki source** below. |
|
|
185
186
|
|
|
@@ -166,6 +166,8 @@ Determine the work type and execute the matching variant:
|
|
|
166
166
|
3. Recommend next action (Research, Plan, Implement, or escalate)
|
|
167
167
|
4. `learner` -- capture discoveries
|
|
168
168
|
|
|
169
|
+
In every work type above, before a task completes -- immediately ahead of the closing `learner` step -- the implementing agent records concise kind-tagged MLD (Mistakes / Learnings / Desires) into that task's `metadata.learnings`: one line per item, empty is valid, never re-prompted or scored. See the `lisa-implement` skill for the full `{ kind, note, evidence? }` schema and routing (change the schema there, not here).
|
|
170
|
+
|
|
169
171
|
Output: Code passing all quality gates + local empirical verification + codified regression test for each verification (except for spikes, which produce findings only, and non-behavioral verification types — PR / Documentation / Deploy — which carry their own proof).
|
|
170
172
|
|
|
171
173
|
### Verify
|
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
# Project Learnings
|
|
2
2
|
|
|
3
|
-
Project learnings are Lisa's bounded, repo-local memory surface.
|
|
4
|
-
|
|
5
|
-
`.lisa.config.json
|
|
6
|
-
|
|
3
|
+
Project learnings are Lisa's bounded, repo-local memory surface. The
|
|
4
|
+
machine-managed ledger is `PROJECT_LEARNINGS.md`, resolved from
|
|
5
|
+
`.lisa.config.json`: the optional `learnings.file` override, else the default
|
|
6
|
+
`.lisa/PROJECT_LEARNINGS.md`. The ledger deliberately lives in the cold `.lisa/`
|
|
7
|
+
directory — **not** under `.claude/rules/` or any other auto-loaded rules tree —
|
|
8
|
+
because anything in those trees is injected raw into every session, which
|
|
9
|
+
double-loads the file and bypasses the contract's budget and validation.
|
|
7
10
|
|
|
8
|
-
Consume learnings before normal task work whenever the file exists
|
|
9
|
-
executable contract from `@codyswann/lisa/learnings
|
|
10
|
-
|
|
11
|
-
the
|
|
11
|
+
Consume learnings before normal task work whenever the file exists, and consume
|
|
12
|
+
them ONLY through the executable contract from `@codyswann/lisa/learnings`:
|
|
13
|
+
`parseLearningsFile` to parse and validate, then `projectLearnings` to take the
|
|
14
|
+
bounded serving slice (the highest-priority entries — ordered by confidence,
|
|
15
|
+
then recency — that fit the token/entry budget, plus how many were omitted).
|
|
16
|
+
**Never read the raw ledger file wholesale into context**; the session receives
|
|
17
|
+
the bounded projection, not the full document. Do not duplicate numeric caps in
|
|
18
|
+
rules or prompts; the exported contract is the source of truth.
|
|
12
19
|
|
|
13
20
|
Each persisted entry has seven fields:
|
|
14
21
|
|
|
@@ -50,6 +57,19 @@ Precedence:
|
|
|
50
57
|
3. Project learnings add recent operational knowledge, but never rewrite or
|
|
51
58
|
append to `PROJECT_RULES.md`.
|
|
52
59
|
|
|
60
|
+
## Task telemetry (MLD) is not context
|
|
61
|
+
|
|
62
|
+
Raw task-end MLD telemetry — the Mistakes / Learnings / Desires an implementing
|
|
63
|
+
agent records into `metadata.learnings`, and the raw yield of debrief mining — is
|
|
64
|
+
rung-1 capture only: it is never read into a later session's instruction surface,
|
|
65
|
+
never required of an agent (empty is valid), and never graded or scored. It reaches
|
|
66
|
+
a durable surface only indirectly — through the learner's validation into the
|
|
67
|
+
ledger (which sessions still consume solely as the bounded projection above), and
|
|
68
|
+
from there through the gardener's ticket-gated promotion a human approved. Injecting
|
|
69
|
+
raw self-reports, or treating their volume as a quality signal, would reward
|
|
70
|
+
plausible commentary over good outcomes and bypass the very budget and validation
|
|
71
|
+
this contract exists to enforce.
|
|
72
|
+
|
|
53
73
|
Antigravity note: agy does not receive the plugin `rules/` tree. Lisa reconciles
|
|
54
74
|
a bounded `AGENTS.md` bridge that points agy at this same file without copying
|
|
55
75
|
learning bodies or restoring the retired full rules bake.
|
|
@@ -161,7 +161,7 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
161
161
|
"relevant_documentation": "",
|
|
162
162
|
"testing_requirements": ["..."],
|
|
163
163
|
"skills": ["..."],
|
|
164
|
-
"learnings": ["
|
|
164
|
+
"learnings": [{ "kind": "mistake", "note": "one line", "evidence": "optional ref" }],
|
|
165
165
|
"required_access": [
|
|
166
166
|
{ "tool": "<external tool/system this task or its verification needs>", "probe": "<the read-only command or *-access check that proves access>", "status": "pass|fail" }
|
|
167
167
|
],
|
|
@@ -173,11 +173,16 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
+
The `learnings` array is task-end MLD telemetry (Mistakes / Learnings / Desires) — a low-trust self-report for the harness builder, never instructions for a later agent. Each entry is either a plain string (treated as kind `learning` for backward compatibility with older flows) or an object, exactly like the example entry in the block above: a `kind` of `mistake`, `learning`, or `desire`; a one-line `note`; and an optional `evidence` pointer. A `mistake` is an error in the agent's own trajectory, a `learning` is an environment fact discovered the hard way, a `desire` is context or tooling the agent wished it had. Keep each to one line — no essays. `mistake`/`learning` entries are ledger candidates; `desire` entries are tooling-gap candidates that the learner (#1731) records for the gardener's human-gated tooling-gap lane.
|
|
177
|
+
|
|
176
178
|
Before any task is implemented, the agent team must explore the codebase for relevant research (documentation, code, git history, etc) and update each task's `metadata.relevant_documentation` with the findings.
|
|
177
179
|
|
|
178
180
|
For Fix tasks and user-visible Build tasks, `testing_requirements` must include the highest-practical-observation regression requirement above, including the selected harness or the recorded absence/blocker path. The completion condition must include the proof command and the required CI execution evidence for the new spec.
|
|
179
181
|
|
|
180
182
|
Each task must be reviewed by the team to make sure their verification passes.
|
|
183
|
+
|
|
184
|
+
Before marking a task complete, the implementing agent records concise MLD into `metadata.learnings` — mistakes (errors in its own trajectory), learnings (environment facts it discovered the hard way), and desires (context or tools it wished it had). Empty (`learnings: []`) is a valid result: never re-prompt for content, and never grade or score self-reports — a scored MLD would reward plausible self-commentary over good outcomes.
|
|
185
|
+
|
|
181
186
|
Each task must have their learnings reviewed by the learner subagent.
|
|
182
187
|
|
|
183
188
|
Before shutting down the team, execute the Verify flow:
|
|
@@ -139,7 +139,7 @@ Continue to Phase 3.
|
|
|
139
139
|
No learning content is ever committed without a PR — there is no other write path, and the PR must touch **only** the learnings surface (any other changed file is a bug).
|
|
140
140
|
|
|
141
141
|
1. **PR dedupe.** Search all PRs for the marker `[lisa-learning-pr] key=<fingerprint>` in the body (`gh pr list --state all --search '"<marker>" in:body' --json number,url`), with the stale-index guard above. If one exists, reference it and stop — never open a duplicate.
|
|
142
|
-
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the
|
|
142
|
+
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the machine-managed ledger resolved from `.lisa.config.json` (the `learnings.file` override, else the default `.lisa/PROJECT_LEARNINGS.md` — a cold path, never an auto-loaded rules tree):
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
145
|
LEARNINGS_FILE=$(node -e 'import("@codyswann/lisa/learnings").then(async m => { const c = await m.readProjectConfig(process.cwd()); console.log(m.resolveProjectLearningsFile(c)); })')
|
|
@@ -161,7 +161,7 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
161
161
|
"relevant_documentation": "",
|
|
162
162
|
"testing_requirements": ["..."],
|
|
163
163
|
"skills": ["..."],
|
|
164
|
-
"learnings": ["
|
|
164
|
+
"learnings": [{ "kind": "mistake", "note": "one line", "evidence": "optional ref" }],
|
|
165
165
|
"required_access": [
|
|
166
166
|
{ "tool": "<external tool/system this task or its verification needs>", "probe": "<the read-only command or *-access check that proves access>", "status": "pass|fail" }
|
|
167
167
|
],
|
|
@@ -173,11 +173,16 @@ Every task MUST include this JSON metadata block. Do NOT omit `skills` (use `[]`
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
+
The `learnings` array is task-end MLD telemetry (Mistakes / Learnings / Desires) — a low-trust self-report for the harness builder, never instructions for a later agent. Each entry is either a plain string (treated as kind `learning` for backward compatibility with older flows) or an object, exactly like the example entry in the block above: a `kind` of `mistake`, `learning`, or `desire`; a one-line `note`; and an optional `evidence` pointer. A `mistake` is an error in the agent's own trajectory, a `learning` is an environment fact discovered the hard way, a `desire` is context or tooling the agent wished it had. Keep each to one line — no essays. `mistake`/`learning` entries are ledger candidates; `desire` entries are tooling-gap candidates that the learner (#1731) records for the gardener's human-gated tooling-gap lane.
|
|
177
|
+
|
|
176
178
|
Before any task is implemented, the agent team must explore the codebase for relevant research (documentation, code, git history, etc) and update each task's `metadata.relevant_documentation` with the findings.
|
|
177
179
|
|
|
178
180
|
For Fix tasks and user-visible Build tasks, `testing_requirements` must include the highest-practical-observation regression requirement above, including the selected harness or the recorded absence/blocker path. The completion condition must include the proof command and the required CI execution evidence for the new spec.
|
|
179
181
|
|
|
180
182
|
Each task must be reviewed by the team to make sure their verification passes.
|
|
183
|
+
|
|
184
|
+
Before marking a task complete, the implementing agent records concise MLD into `metadata.learnings` — mistakes (errors in its own trajectory), learnings (environment facts it discovered the hard way), and desires (context or tools it wished it had). Empty (`learnings: []`) is a valid result: never re-prompt for content, and never grade or score self-reports — a scored MLD would reward plausible self-commentary over good outcomes.
|
|
185
|
+
|
|
181
186
|
Each task must have their learnings reviewed by the learner subagent.
|
|
182
187
|
|
|
183
188
|
Before shutting down the team, execute the Verify flow:
|
|
@@ -139,7 +139,7 @@ Continue to Phase 3.
|
|
|
139
139
|
No learning content is ever committed without a PR — there is no other write path, and the PR must touch **only** the learnings surface (any other changed file is a bug).
|
|
140
140
|
|
|
141
141
|
1. **PR dedupe.** Search all PRs for the marker `[lisa-learning-pr] key=<fingerprint>` in the body (`gh pr list --state all --search '"<marker>" in:body' --json number,url`), with the stale-index guard above. If one exists, reference it and stop — never open a duplicate.
|
|
142
|
-
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the
|
|
142
|
+
2. **Resolve the learnings surface path — never hardcode it.** The canonical path is `resolveProjectLearningsFile` from `@codyswann/lisa/learnings`: the machine-managed ledger resolved from `.lisa.config.json` (the `learnings.file` override, else the default `.lisa/PROJECT_LEARNINGS.md` — a cold path, never an auto-loaded rules tree):
|
|
143
143
|
|
|
144
144
|
```bash
|
|
145
145
|
LEARNINGS_FILE=$(node -e 'import("@codyswann/lisa/learnings").then(async m => { const c = await m.readProjectConfig(process.cwd()); console.log(m.resolveProjectLearningsFile(c)); })')
|
|
@@ -29,9 +29,12 @@ Project tracker (`jira` / `github` / `linear`) is read from `.lisa.config.json`
|
|
|
29
29
|
|
|
30
30
|
Resolve hand-authored project rules from `.lisa.config.json`
|
|
31
31
|
`projectRulesFile`, defaulting to `.claude/rules/PROJECT_RULES.md`. Automated
|
|
32
|
-
learnings never append to that file: they use the separate
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
learnings never append to that file: they use the separate machine-managed
|
|
33
|
+
ledger resolved from `.lisa.config.json` — the optional `learnings.file`
|
|
34
|
+
override, else the default `.lisa/PROJECT_LEARNINGS.md`. The ledger lives in the
|
|
35
|
+
cold `.lisa/` tree (never an auto-loaded rules directory) and is consumed only
|
|
36
|
+
through the contract's bounded projection, never read raw wholesale. Both
|
|
37
|
+
writers and budget checks import the executable contract from
|
|
35
38
|
`@codyswann/lisa/learnings`; they must not copy its numeric limits.
|
|
36
39
|
|
|
37
40
|
## Env → base branch
|