@agentxm/client-core 0.3.2 → 0.4.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 (142) hide show
  1. package/LICENSE +1 -1
  2. package/dist/src/unstable/agents/detection.d.ts.map +1 -1
  3. package/dist/src/unstable/agents/detection.js +2 -1
  4. package/dist/src/unstable/agents/detection.js.map +1 -1
  5. package/dist/src/unstable/branding.d.ts +2 -0
  6. package/dist/src/unstable/branding.d.ts.map +1 -0
  7. package/dist/src/unstable/branding.js +11 -0
  8. package/dist/src/unstable/branding.js.map +1 -0
  9. package/dist/src/unstable/cli-renderer/ansi-chrome.d.ts.map +1 -1
  10. package/dist/src/unstable/cli-renderer/ansi-chrome.js +4 -1
  11. package/dist/src/unstable/cli-renderer/ansi-chrome.js.map +1 -1
  12. package/dist/src/unstable/extensions/index.d.ts +1 -0
  13. package/dist/src/unstable/extensions/index.d.ts.map +1 -1
  14. package/dist/src/unstable/extensions/index.js +1 -0
  15. package/dist/src/unstable/extensions/index.js.map +1 -1
  16. package/dist/src/unstable/extensions/universal-skills-dir.d.ts +54 -0
  17. package/dist/src/unstable/extensions/universal-skills-dir.d.ts.map +1 -0
  18. package/dist/src/unstable/extensions/universal-skills-dir.js +68 -0
  19. package/dist/src/unstable/extensions/universal-skills-dir.js.map +1 -0
  20. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.js +1 -1
  21. package/dist/src/unstable/lint/catalog/pack/manifest-keys-recognized.js.map +1 -1
  22. package/dist/src/unstable/lint/catalog/pack/manifest-present.d.ts.map +1 -1
  23. package/dist/src/unstable/lint/catalog/pack/manifest-present.js +2 -5
  24. package/dist/src/unstable/lint/catalog/pack/manifest-present.js.map +1 -1
  25. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.js +1 -1
  26. package/dist/src/unstable/lint/catalog/pack/manifest-schema-valid.js.map +1 -1
  27. package/dist/src/unstable/lint/catalog/shared/schema-rule.d.ts.map +1 -1
  28. package/dist/src/unstable/lint/catalog/shared/schema-rule.js +12 -5
  29. package/dist/src/unstable/lint/catalog/shared/schema-rule.js.map +1 -1
  30. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.js +8 -11
  31. package/dist/src/unstable/lint/catalog/skill/frontmatter-parseable.js.map +1 -1
  32. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.js +1 -1
  33. package/dist/src/unstable/lint/catalog/skill/manifest-keys-recognized.js.map +1 -1
  34. package/dist/src/unstable/lint/catalog/skill/manifest-present.d.ts.map +1 -1
  35. package/dist/src/unstable/lint/catalog/skill/manifest-present.js +2 -5
  36. package/dist/src/unstable/lint/catalog/skill/manifest-present.js.map +1 -1
  37. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.js +1 -1
  38. package/dist/src/unstable/lint/catalog/skill/manifest-schema-valid.js.map +1 -1
  39. package/dist/src/unstable/lint/catalog/skill/skill-md-present.js +2 -3
  40. package/dist/src/unstable/lint/catalog/skill/skill-md-present.js.map +1 -1
  41. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.d.ts.map +1 -1
  42. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.js +5 -15
  43. package/dist/src/unstable/lint/catalog/workspace/agents-detected-declared.js.map +1 -1
  44. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.d.ts.map +1 -1
  45. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.js +4 -15
  46. package/dist/src/unstable/lint/catalog/workspace/agents-recognized.js.map +1 -1
  47. package/dist/src/unstable/lint/catalog/workspace/helpers/decode.d.ts +14 -0
  48. package/dist/src/unstable/lint/catalog/workspace/helpers/decode.d.ts.map +1 -0
  49. package/dist/src/unstable/lint/catalog/workspace/helpers/decode.js +28 -0
  50. package/dist/src/unstable/lint/catalog/workspace/helpers/decode.js.map +1 -0
  51. package/dist/src/unstable/lint/catalog/workspace/helpers/finding.d.ts +10 -0
  52. package/dist/src/unstable/lint/catalog/workspace/helpers/finding.d.ts.map +1 -0
  53. package/dist/src/unstable/lint/catalog/workspace/helpers/finding.js +11 -0
  54. package/dist/src/unstable/lint/catalog/workspace/helpers/finding.js.map +1 -0
  55. package/dist/src/unstable/lint/catalog/workspace/helpers/retained-skills.d.ts +24 -0
  56. package/dist/src/unstable/lint/catalog/workspace/helpers/retained-skills.d.ts.map +1 -0
  57. package/dist/src/unstable/lint/catalog/workspace/helpers/retained-skills.js +41 -0
  58. package/dist/src/unstable/lint/catalog/workspace/helpers/retained-skills.js.map +1 -0
  59. package/dist/src/unstable/lint/catalog/workspace/helpers/source-categorize.d.ts +16 -0
  60. package/dist/src/unstable/lint/catalog/workspace/helpers/source-categorize.d.ts.map +1 -0
  61. package/dist/src/unstable/lint/catalog/workspace/helpers/source-categorize.js +37 -0
  62. package/dist/src/unstable/lint/catalog/workspace/helpers/source-categorize.js.map +1 -0
  63. package/dist/src/unstable/lint/catalog/workspace/initialized.d.ts +1 -1
  64. package/dist/src/unstable/lint/catalog/workspace/initialized.js +4 -6
  65. package/dist/src/unstable/lint/catalog/workspace/initialized.js.map +1 -1
  66. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.d.ts.map +1 -1
  67. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.js +8 -21
  68. package/dist/src/unstable/lint/catalog/workspace/lockfile-valid.js.map +1 -1
  69. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.d.ts.map +1 -1
  70. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.js +12 -49
  71. package/dist/src/unstable/lint/catalog/workspace/packs-declarations-valid.js.map +1 -1
  72. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.d.ts.map +1 -1
  73. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.js +23 -17
  74. package/dist/src/unstable/lint/catalog/workspace/packs-dependencies-resolved.js.map +1 -1
  75. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.d.ts.map +1 -1
  76. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.js +24 -29
  77. package/dist/src/unstable/lint/catalog/workspace/packs-members-retained.js.map +1 -1
  78. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.d.ts.map +1 -1
  79. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.js +3 -6
  80. package/dist/src/unstable/lint/catalog/workspace/settings-schema-valid.js.map +1 -1
  81. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.d.ts +3 -1
  82. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.d.ts.map +1 -1
  83. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.js +142 -55
  84. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-correct.js.map +1 -1
  85. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.d.ts +3 -2
  86. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.d.ts.map +1 -1
  87. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.js +13 -56
  88. package/dist/src/unstable/lint/catalog/workspace/skills-declarations-valid.js.map +1 -1
  89. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.d.ts +3 -2
  90. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.d.ts.map +1 -1
  91. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.js +71 -54
  92. package/dist/src/unstable/lint/catalog/workspace/skills-integrity-valid.js.map +1 -1
  93. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.d.ts.map +1 -1
  94. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.js +76 -150
  95. package/dist/src/unstable/lint/catalog/workspace/skills-lockfile-aligned.js.map +1 -1
  96. package/dist/src/unstable/lint/catalog/workspace/skills-managed.d.ts +15 -0
  97. package/dist/src/unstable/lint/catalog/workspace/skills-managed.d.ts.map +1 -0
  98. package/dist/src/unstable/lint/catalog/workspace/skills-managed.js +102 -0
  99. package/dist/src/unstable/lint/catalog/workspace/skills-managed.js.map +1 -0
  100. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.d.ts.map +1 -1
  101. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.js +2 -1
  102. package/dist/src/unstable/lint/catalog/workspace-accessor/platform.js.map +1 -1
  103. package/dist/src/unstable/lint/catalog/workspace.d.ts +9 -5
  104. package/dist/src/unstable/lint/catalog/workspace.d.ts.map +1 -1
  105. package/dist/src/unstable/lint/catalog/workspace.js +20 -11
  106. package/dist/src/unstable/lint/catalog/workspace.js.map +1 -1
  107. package/dist/src/unstable/lint/cli.d.ts +45 -27
  108. package/dist/src/unstable/lint/cli.d.ts.map +1 -1
  109. package/dist/src/unstable/lint/cli.js +819 -59
  110. package/dist/src/unstable/lint/cli.js.map +1 -1
  111. package/dist/src/unstable/lint/index.d.ts +1 -1
  112. package/dist/src/unstable/lint/index.d.ts.map +1 -1
  113. package/dist/src/unstable/lint/index.js +1 -1
  114. package/dist/src/unstable/lint/index.js.map +1 -1
  115. package/dist/src/unstable/lint/issues-to-findings.d.ts +5 -5
  116. package/dist/src/unstable/lint/issues-to-findings.js +78 -15
  117. package/dist/src/unstable/lint/issues-to-findings.js.map +1 -1
  118. package/dist/src/unstable/lint/rule.d.ts +0 -8
  119. package/dist/src/unstable/lint/rule.d.ts.map +1 -1
  120. package/dist/src/unstable/skills/operations/install.d.ts.map +1 -1
  121. package/dist/src/unstable/skills/operations/install.js +2 -0
  122. package/dist/src/unstable/skills/operations/install.js.map +1 -1
  123. package/dist/src/unstable/workspace/classifier-records.d.ts.map +1 -1
  124. package/dist/src/unstable/workspace/classifier-records.js +1 -0
  125. package/dist/src/unstable/workspace/classifier-records.js.map +1 -1
  126. package/dist/src/unstable/workspace/classifier.d.ts +13 -2
  127. package/dist/src/unstable/workspace/classifier.d.ts.map +1 -1
  128. package/dist/src/unstable/workspace/classifier.js +14 -2
  129. package/dist/src/unstable/workspace/classifier.js.map +1 -1
  130. package/dist/src/unstable/workspace/initialization.js +1 -1
  131. package/dist/src/unstable/workspace/initialization.js.map +1 -1
  132. package/dist/src/unstable/workspace/service.d.ts.map +1 -1
  133. package/dist/src/unstable/workspace/service.js +30 -9
  134. package/dist/src/unstable/workspace/service.js.map +1 -1
  135. package/dist/src/unstable/workspace/taxonomy-types.d.ts +1 -0
  136. package/dist/src/unstable/workspace/taxonomy-types.d.ts.map +1 -1
  137. package/package.json +7 -3
  138. package/site-content/{INSTALL.md → install.md} +5 -5
  139. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.d.ts +0 -30
  140. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.d.ts.map +0 -1
  141. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.js +0 -232
  142. package/dist/src/unstable/lint/catalog/workspace/skills-artifacts-clean.js.map +0 -1
@@ -6,8 +6,9 @@
6
6
  * installed directory (`.axm/extensions/<owner>/skills/<name>/src/` for
7
7
  * registry sources; `.axm/extensions/external/skills/<name>/` for
8
8
  * non-registry) exists and its hash matches. Integrity-mismatch entries
9
- * each emit one `AutofixableFinding`; autofix: `install-skill` with
10
- * `force: true`.
9
+ * each emit one finding. Configured mismatches are autofixable via
10
+ * `install-skill` with `force: true`; pack-provided implicit mismatches are
11
+ * advisory because the repair is a pack-level reinstall.
11
12
  *
12
13
  * The integrity check MUST walk the workspace filesystem — `context.workspace`
13
14
  * exposes `exists` only; the accessor layer surfaces the pre-computed
@@ -26,38 +27,31 @@
26
27
  import * as Effect from "effect/Effect";
27
28
  import * as Option from "effect/Option";
28
29
  import * as Result from "effect/Result";
29
- import * as Schema from "effect/Schema";
30
- import { LockfileSchema } from "../../../lockfile/schema.js";
31
- import { SettingsSchema } from "../../../settings/schema.js";
30
+ import {} from "../../../lockfile/schema.js";
31
+ import {} from "../../../settings/schema.js";
32
+ import { decodeLockfile, decodeSettings } from "./helpers/decode.js";
33
+ import { isSameFinding } from "./helpers/finding.js";
32
34
  import { installSkillOp } from "./helpers/install-ops.js";
33
35
  import { EMPTY_LINT_FINDINGS, EMPTY_OPERATIONS } from "./helpers/empty.js";
36
+ import { buildRetainedSkillFqns, isImplicitRetainedSkill } from "./helpers/retained-skills.js";
34
37
  const RULE_ID = "workspace/skills-integrity-valid";
35
38
  const LOCKFILE_REL = ".axm/axm-lock.yaml";
36
- const SUG_INTEGRITY_PREFIX = "Reinstall skill ";
37
- const decodeSettings = (input) => {
38
- const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
39
- onExcessProperty: "ignore",
40
- errors: "all",
41
- });
42
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
43
- };
44
- const decodeLockfile = (input) => {
45
- const result = Schema.decodeUnknownResult(LockfileSchema)(input, {
46
- onExcessProperty: "ignore",
47
- errors: "all",
48
- });
49
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
50
- };
51
39
  const integrityFinding = (name, reason) => ({
52
40
  kind: "autofixable",
53
41
  ruleId: RULE_ID,
54
42
  severity: "error",
55
- message: `Skill '${name}' has an integrity mismatch: ${reason}.`,
56
- suggestions: [`${SUG_INTEGRITY_PREFIX}'${name}' to re-hash from source.`],
43
+ message: `Skill '${name}' is listed in the lockfile, but its installed source files do not match the lockfile entry. Detail: ${reason}. ` +
44
+ "Run `axm lint --fix` to reinstall it.",
45
+ location: { file: LOCKFILE_REL },
46
+ });
47
+ const implicitIntegrityFinding = (name, reason) => ({
48
+ kind: "advisory",
49
+ ruleId: RULE_ID,
50
+ severity: "error",
51
+ message: `Pack-provided skill '${name}' is listed in the lockfile, but its installed source files do not match the lockfile entry. Detail: ${reason}. ` +
52
+ "Run `axm install` to reinstall it from the owning pack declarations.",
57
53
  location: { file: LOCKFILE_REL },
58
54
  });
59
- const NAME_FROM_SUGGESTION_RE = /'([^']+)'/;
60
- const extractSkillName = (suggestion) => NAME_FROM_SUGGESTION_RE.exec(suggestion)?.[1];
61
55
  /**
62
56
  * Compute a stable integrity marker for the skill's installed `src/` tree.
63
57
  *
@@ -70,12 +64,12 @@ const extractSkillName = (suggestion) => NAME_FROM_SUGGESTION_RE.exec(suggestion
70
64
  * NOT exist as an integrity mismatch. A deeper byte-by-byte hash check
71
65
  * defers to the CLI-layer adapter that owns filesystem walks.
72
66
  */
73
- const checkIntegrity = (name, lockEntry, probeExists) => {
67
+ const integrityReason = (lockEntry, probeExists) => {
74
68
  if (lockEntry.sourceHash === undefined) {
75
69
  return Option.none();
76
70
  }
77
71
  if (!probeExists) {
78
- return Option.some(integrityFinding(name, "canonical install directory is missing"));
72
+ return Option.some("the installed source directory is missing");
79
73
  }
80
74
  return Option.none();
81
75
  };
@@ -85,9 +79,37 @@ const skillSrcProbe = (name, entry) => {
85
79
  }
86
80
  return `.axm/extensions/external/skills/${name}/SKILL.md`;
87
81
  };
82
+ const collectIntegrityViolations = (settings, lockfile, probes) => {
83
+ const declaredSkills = settings.skills ?? {};
84
+ const retainedFqns = buildRetainedSkillFqns(settings, lockfile);
85
+ const violations = [];
86
+ for (const { name, entry, exists } of probes) {
87
+ const reason = integrityReason(entry, exists);
88
+ if (Option.isNone(reason)) {
89
+ continue;
90
+ }
91
+ if (name in declaredSkills) {
92
+ const declared = declaredSkills[name];
93
+ if (declared === undefined) {
94
+ continue;
95
+ }
96
+ violations.push({
97
+ finding: integrityFinding(name, reason.value),
98
+ operation: installSkillOp({ name, source: declared.source, force: true }),
99
+ });
100
+ continue;
101
+ }
102
+ if (isImplicitRetainedSkill(name, entry, declaredSkills, retainedFqns)) {
103
+ violations.push({
104
+ finding: implicitIntegrityFinding(name, reason.value),
105
+ });
106
+ }
107
+ }
108
+ return violations;
109
+ };
88
110
  export const skillsIntegrityValidRule = {
89
111
  id: RULE_ID,
90
- description: "Each skill's canonical src/ content matches its lockfile sourceHash.",
112
+ description: "Installed skill source files match the lockfile.",
91
113
  kind: "autofixing",
92
114
  severity: "error",
93
115
  check: (context) => Effect.gen(function* () {
@@ -108,42 +130,37 @@ export const skillsIntegrityValidRule = {
108
130
  if (Option.isNone(lockfile)) {
109
131
  return EMPTY_LINT_FINDINGS;
110
132
  }
111
- const lockSkills = lockfile.value.skills;
112
- const declaredSkills = settings.value.skills ?? {};
113
- const findings = [];
114
- for (const [name, entry] of Object.entries(lockSkills)) {
115
- // Carve out: integrity only applies to declared skills. Orphan
116
- // lock entries are owned by workspace/skills-lockfile-aligned
117
- // (orphan arm); running integrity alongside it would produce
118
- // contradictory autofix Operations (install + uninstall).
119
- if (!(name in declaredSkills)) {
120
- continue;
121
- }
122
- const probe = skillSrcProbe(name, entry);
123
- const exists = yield* context.workspace.exists(probe);
124
- const finding = checkIntegrity(name, entry, exists);
125
- if (Option.isSome(finding)) {
126
- findings.push(finding.value);
127
- }
128
- }
129
- return findings;
133
+ const probes = yield* Effect.all(Object.entries(lockfile.value.skills).map(([name, entry]) => context.workspace
134
+ .exists(skillSrcProbe(name, entry))
135
+ .pipe(Effect.map((exists) => ({ name, entry, exists })))), { concurrency: "unbounded" });
136
+ const violations = collectIntegrityViolations(settings.value, lockfile.value, probes);
137
+ return violations.map((violation) => violation.finding);
130
138
  }),
131
139
  fix: (context, finding) => Effect.gen(function* () {
132
- const name = extractSkillName(finding.suggestions[0]);
133
- if (name === undefined) {
134
- return EMPTY_OPERATIONS;
135
- }
136
140
  const settingsResult = yield* Effect.result(context.workspace.settings);
137
- if (Result.isFailure(settingsResult)) {
141
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
142
+ if (Result.isFailure(settingsResult) || Result.isFailure(lockfileResult)) {
138
143
  return EMPTY_OPERATIONS;
139
144
  }
140
145
  const settings = decodeSettings(settingsResult.success);
141
146
  if (Option.isNone(settings)) {
142
147
  return EMPTY_OPERATIONS;
143
148
  }
144
- const entry = settings.value.skills?.[name];
145
- const source = entry?.source ?? name;
146
- return [installSkillOp({ name, source, force: true })];
149
+ const lockOption = lockfileResult.success;
150
+ if (Option.isNone(lockOption)) {
151
+ return EMPTY_OPERATIONS;
152
+ }
153
+ const lockfile = decodeLockfile(lockOption.value);
154
+ if (Option.isNone(lockfile)) {
155
+ return EMPTY_OPERATIONS;
156
+ }
157
+ const probes = yield* Effect.all(Object.entries(lockfile.value.skills).map(([name, entry]) => context.workspace
158
+ .exists(skillSrcProbe(name, entry))
159
+ .pipe(Effect.map((exists) => ({ name, entry, exists })))), { concurrency: "unbounded" });
160
+ const violation = collectIntegrityViolations(settings.value, lockfile.value, probes).find((candidate) => candidate.finding.kind === "autofixable" &&
161
+ candidate.operation !== undefined &&
162
+ isSameFinding(candidate.finding, finding));
163
+ return violation?.operation === undefined ? EMPTY_OPERATIONS : [violation.operation];
147
164
  }),
148
165
  };
149
166
  //# sourceMappingURL=skills-integrity-valid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills-integrity-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-integrity-valid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-integrity-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-integrity-valid.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"skills-lockfile-aligned.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-lockfile-aligned.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAsB,cAAc,EAAe,MAAM,eAAe,CAAC;AAgGrF,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,oBAAoB,CAuI1E,CAAC"}
1
+ {"version":3,"file":"skills-lockfile-aligned.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-lockfile-aligned.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAsB,cAAc,EAAe,MAAM,eAAe,CAAC;AAwHrF,eAAO,MAAM,yBAAyB,EAAE,cAAc,CAAC,oBAAoB,CAuD1E,CAAC"}
@@ -26,91 +26,98 @@
26
26
  import * as Effect from "effect/Effect";
27
27
  import * as Option from "effect/Option";
28
28
  import * as Result from "effect/Result";
29
- import * as Schema from "effect/Schema";
30
- import { LockfileSchema } from "../../../lockfile/schema.js";
31
- import { SettingsSchema } from "../../../settings/schema.js";
29
+ import {} from "../../../lockfile/schema.js";
30
+ import {} from "../../../settings/schema.js";
31
+ import { decodeLockfile, decodeSettings } from "./helpers/decode.js";
32
32
  import { installSkillOp, uninstallSkillOp } from "./helpers/install-ops.js";
33
33
  import { parseRegistrySource } from "./helpers/registry-source.js";
34
34
  import { EMPTY_LINT_FINDINGS, EMPTY_OPERATIONS } from "./helpers/empty.js";
35
+ import { isSameFinding } from "./helpers/finding.js";
36
+ import { buildRetainedSkillFqns, isRegistrySkillLockEntry, isImplicitRetainedSkill, } from "./helpers/retained-skills.js";
35
37
  const RULE_ID = "workspace/skills-lockfile-aligned";
36
38
  const LOCKFILE_REL = ".axm/axm-lock.yaml";
37
- const SUG_MISSING_PREFIX = "Install skill ";
38
- const SUG_ORPHAN_PREFIX = "Uninstall orphan skill ";
39
- const SUG_VERSION_PREFIX = "Reinstall skill ";
40
- const decodeSettings = (input) => {
41
- const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
42
- onExcessProperty: "ignore",
43
- errors: "all",
44
- });
45
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
46
- };
47
- const decodeLockfile = (input) => {
48
- const result = Schema.decodeUnknownResult(LockfileSchema)(input, {
49
- onExcessProperty: "ignore",
50
- errors: "all",
51
- });
52
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
53
- };
54
39
  const missingFinding = (name, source) => ({
55
40
  kind: "autofixable",
56
41
  ruleId: RULE_ID,
57
42
  severity: "error",
58
- message: `Skill '${name}' is declared in settings but missing from the lockfile.`,
59
- suggestions: [`${SUG_MISSING_PREFIX}'${name}' from ${source}.`],
43
+ message: `Skill '${name}' is listed in settings.skills but missing from the lockfile. ` +
44
+ `Run \`axm lint --fix\` to reinstall it from '${source}' and add the lock entry.`,
60
45
  location: { file: LOCKFILE_REL },
61
46
  });
62
47
  const orphanFinding = (name) => ({
63
48
  kind: "autofixable",
64
49
  ruleId: RULE_ID,
65
50
  severity: "error",
66
- message: `Skill '${name}' is present in the lockfile but not declared in settings.`,
67
- suggestions: [`${SUG_ORPHAN_PREFIX}'${name}' to remove it from the workspace.`],
51
+ message: `Skill '${name}' is listed in the lockfile but not in settings.skills. ` +
52
+ "Run `axm lint --fix` to remove that lockfile entry.",
68
53
  location: { file: LOCKFILE_REL },
69
54
  });
70
55
  const versionFinding = (name, details) => ({
71
56
  kind: "autofixable",
72
57
  ruleId: RULE_ID,
73
58
  severity: "error",
74
- message: `Skill '${name}' lock version does not satisfy the declared constraint: ${details}.`,
75
- suggestions: [`${SUG_VERSION_PREFIX}'${name}' at the declared version.`],
59
+ message: `Skill '${name}' is listed in settings.skills and the lockfile, but the versions do not match. ` +
60
+ `${details}. Run \`axm lint --fix\` to reinstall it at the declared version.`,
76
61
  location: { file: LOCKFILE_REL },
77
62
  });
78
63
  // -----------------------------------------------------------------------------
79
64
  // Retention helpers
80
65
  // -----------------------------------------------------------------------------
81
- const isRegistryEntry = (entry) => entry.type === "registry";
82
- const lockEntryFqn = (entry, name) => {
83
- if (isRegistryEntry(entry)) {
84
- return `${entry.owner}/skills/${entry.name}`;
66
+ const collectAlignmentViolations = (settings, lockfile) => {
67
+ const declaredSkills = settings.skills ?? {};
68
+ const lockSkills = lockfile.skills;
69
+ const retainedFqns = buildRetainedSkillFqns(settings, lockfile);
70
+ const violations = [];
71
+ const affected = new Set();
72
+ for (const [name, entry] of Object.entries(declaredSkills)) {
73
+ if (name in lockSkills) {
74
+ continue;
75
+ }
76
+ violations.push({
77
+ finding: missingFinding(name, entry.source),
78
+ operation: installSkillOp({ name, source: entry.source, force: false }),
79
+ });
80
+ affected.add(`declared:${name}`);
85
81
  }
86
- return `skills/${name}`;
87
- };
88
- /**
89
- * Build the set of FQNs retained by at least one installed declared pack.
90
- * An entry is retained only when:
91
- *
92
- * - its lockfile entry has `retainedByPack: true`, AND
93
- * - at least one pack lock entry's `resolvedSkills` map has a key matching
94
- * the entry's FQN, AND
95
- * - that pack name appears in `settings.packs`.
96
- */
97
- const buildRetainedSkillFqns = (settings, lockfile) => {
98
- const declaredPackNames = new Set(Object.keys(settings.packs ?? {}));
99
- const retained = new Set();
100
- const packLock = lockfile.packs ?? {};
101
- for (const [packName, packEntry] of Object.entries(packLock)) {
102
- if (!declaredPackNames.has(packName)) {
82
+ for (const [name, entry] of Object.entries(lockSkills)) {
83
+ if (name in declaredSkills) {
84
+ continue;
85
+ }
86
+ if (isImplicitRetainedSkill(name, entry, declaredSkills, retainedFqns)) {
87
+ continue;
88
+ }
89
+ violations.push({
90
+ finding: orphanFinding(name),
91
+ operation: uninstallSkillOp({ name }),
92
+ });
93
+ affected.add(`lock:${name}`);
94
+ }
95
+ for (const [name, entry] of Object.entries(declaredSkills)) {
96
+ if (affected.has(`declared:${name}`)) {
97
+ continue;
98
+ }
99
+ const lockEntry = lockSkills[name];
100
+ if (lockEntry === undefined || !isRegistrySkillLockEntry(lockEntry)) {
101
+ continue;
102
+ }
103
+ const parsed = parseRegistrySource(entry.source);
104
+ if (parsed === undefined) {
103
105
  continue;
104
106
  }
105
- for (const fqn of Object.keys(packEntry.resolvedSkills)) {
106
- retained.add(fqn);
107
+ const constraint = parsed.versionConstraint;
108
+ if (constraint === undefined || constraint === lockEntry.resolvedVersion) {
109
+ continue;
107
110
  }
111
+ violations.push({
112
+ finding: versionFinding(name, `Declared version: ${constraint}. Locked version: ${lockEntry.resolvedVersion}`),
113
+ operation: installSkillOp({ name, source: entry.source, force: true }),
114
+ });
108
115
  }
109
- return retained;
116
+ return violations;
110
117
  };
111
118
  export const skillsLockfileAlignedRule = {
112
119
  id: RULE_ID,
113
- description: "Skill lock entries correspond 1:1 to declared skills at satisfying versions.",
120
+ description: "Declared skills and lockfile entries stay aligned.",
114
121
  kind: "autofixing",
115
122
  severity: "error",
116
123
  check: (context) => Effect.gen(function* () {
@@ -133,110 +140,29 @@ export const skillsLockfileAlignedRule = {
133
140
  // workspace/lockfile-valid owns the schema arm.
134
141
  return EMPTY_LINT_FINDINGS;
135
142
  }
136
- const declaredSkills = settings.value.skills ?? {};
137
- const lockSkills = lockfile.value.skills;
138
- const retainedFqns = buildRetainedSkillFqns(settings.value, lockfile.value);
139
- const findings = [];
140
- const affected = new Set();
141
- // Arm 1: missing — declared but no lock entry.
142
- for (const [name, entry] of Object.entries(declaredSkills)) {
143
- if (!(name in lockSkills)) {
144
- findings.push(missingFinding(name, entry.source));
145
- affected.add(`declared:${name}`);
146
- }
147
- }
148
- // Arm 2: orphan — lock entry but no declaration, and not retained by
149
- // an installed declared pack.
150
- for (const [name, entry] of Object.entries(lockSkills)) {
151
- if (name in declaredSkills) {
152
- continue;
153
- }
154
- if (entry.retainedByPack === true && retainedFqns.has(lockEntryFqn(entry, name))) {
155
- continue;
156
- }
157
- findings.push(orphanFinding(name));
158
- affected.add(`lock:${name}`);
159
- }
160
- // Arm 3: version skew — declared AND in lock, but registry-shaped
161
- // source constraint not satisfied by resolvedVersion.
162
- for (const [name, entry] of Object.entries(declaredSkills)) {
163
- if (affected.has(`declared:${name}`)) {
164
- continue;
165
- }
166
- const lockEntry = lockSkills[name];
167
- if (lockEntry === undefined || !isRegistryEntry(lockEntry)) {
168
- continue;
169
- }
170
- const parsed = parseRegistrySource(entry.source);
171
- if (parsed === undefined) {
172
- continue;
173
- }
174
- const constraint = parsed.versionConstraint;
175
- if (constraint === undefined) {
176
- continue;
177
- }
178
- // Simple exact-match semver check: the only non-heuristic arm we
179
- // can enforce without pulling in the semver lib here. Range checks
180
- // defer to the CLI adapter (Phase 5).
181
- if (constraint !== lockEntry.resolvedVersion) {
182
- findings.push(versionFinding(name, `declared ${constraint}, locked ${lockEntry.resolvedVersion}`));
183
- }
184
- }
185
- return findings;
143
+ const violations = collectAlignmentViolations(settings.value, lockfile.value);
144
+ return violations.map((violation) => violation.finding);
186
145
  }),
187
146
  fix: (context, finding) => Effect.gen(function* () {
188
- const s0 = finding.suggestions[0];
189
- if (s0.startsWith(SUG_MISSING_PREFIX)) {
190
- const name = extractSkillName(s0);
191
- if (name === undefined) {
192
- return EMPTY_OPERATIONS;
193
- }
194
- const settingsResult = yield* Effect.result(context.workspace.settings);
195
- if (Result.isFailure(settingsResult)) {
196
- return EMPTY_OPERATIONS;
197
- }
198
- const settings = decodeSettings(settingsResult.success);
199
- if (Option.isNone(settings)) {
200
- return EMPTY_OPERATIONS;
201
- }
202
- const entry = settings.value.skills?.[name];
203
- if (entry === undefined) {
204
- return EMPTY_OPERATIONS;
205
- }
206
- return [installSkillOp({ name, source: entry.source, force: false })];
147
+ const settingsResult = yield* Effect.result(context.workspace.settings);
148
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
149
+ if (Result.isFailure(settingsResult) || Result.isFailure(lockfileResult)) {
150
+ return EMPTY_OPERATIONS;
207
151
  }
208
- if (s0.startsWith(SUG_ORPHAN_PREFIX)) {
209
- const name = extractSkillName(s0);
210
- if (name === undefined) {
211
- return EMPTY_OPERATIONS;
212
- }
213
- return [uninstallSkillOp({ name })];
152
+ const settings = decodeSettings(settingsResult.success);
153
+ if (Option.isNone(settings)) {
154
+ return EMPTY_OPERATIONS;
155
+ }
156
+ const lockOption = lockfileResult.success;
157
+ if (Option.isNone(lockOption)) {
158
+ return EMPTY_OPERATIONS;
214
159
  }
215
- if (s0.startsWith(SUG_VERSION_PREFIX)) {
216
- const name = extractSkillName(s0);
217
- if (name === undefined) {
218
- return EMPTY_OPERATIONS;
219
- }
220
- const settingsResult = yield* Effect.result(context.workspace.settings);
221
- if (Result.isFailure(settingsResult)) {
222
- return EMPTY_OPERATIONS;
223
- }
224
- const settings = decodeSettings(settingsResult.success);
225
- if (Option.isNone(settings)) {
226
- return EMPTY_OPERATIONS;
227
- }
228
- const entry = settings.value.skills?.[name];
229
- if (entry === undefined) {
230
- return EMPTY_OPERATIONS;
231
- }
232
- return [installSkillOp({ name, source: entry.source, force: true })];
160
+ const lockfile = decodeLockfile(lockOption.value);
161
+ if (Option.isNone(lockfile)) {
162
+ return EMPTY_OPERATIONS;
233
163
  }
234
- return EMPTY_OPERATIONS;
164
+ const violation = collectAlignmentViolations(settings.value, lockfile.value).find((candidate) => isSameFinding(candidate.finding, finding));
165
+ return violation === undefined ? EMPTY_OPERATIONS : [violation.operation];
235
166
  }),
236
167
  };
237
- const NAME_FROM_SUGGESTION_RE = /'([^']+)'/;
238
- const extractSkillName = (suggestion) => {
239
- const match = NAME_FROM_SUGGESTION_RE.exec(suggestion);
240
- return match?.[1];
241
- };
242
168
  //# sourceMappingURL=skills-lockfile-aligned.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills-lockfile-aligned.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-lockfile-aligned.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-lockfile-aligned.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-lockfile-aligned.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `workspace/skills-managed` — installed skill directories are managed by the
3
+ * axm workspace.
4
+ *
5
+ * A skill artifact is unmanaged iff the workspace classifier classifies the
6
+ * detected skill name as `lifecycle: "unmanaged"`. The rule emits one advisory
7
+ * finding per unmanaged artifact location reported by the classifier.
8
+ *
9
+ * @experimental This API is unstable and may change without notice.
10
+ * @packageDocumentation
11
+ */
12
+ import type { WorkspaceRuleContext } from "../../context.js";
13
+ import type { AdvisoryRule } from "../../rule.js";
14
+ export declare const skillsManagedRule: AdvisoryRule<WorkspaceRuleContext>;
15
+ //# sourceMappingURL=skills-managed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-managed.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-managed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AAoBnE,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,oBAAoB,CA6FhE,CAAC"}