@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
@@ -15,7 +15,9 @@
15
15
  *
16
16
  * One finding per affected skill (per-entity cascade); the first arm that
17
17
  * fires for a skill emits its finding and the other arms for the same skill
18
- * do not.
18
+ * do not. Configured skills keep the existing autofix arms; pack-provided
19
+ * implicit skills emit advisory findings because the repair is a pack-level
20
+ * reinstall.
19
21
  *
20
22
  * @experimental This API is unstable and may change without notice.
21
23
  * @packageDocumentation
@@ -23,51 +25,109 @@
23
25
  import * as Effect from "effect/Effect";
24
26
  import * as Option from "effect/Option";
25
27
  import * as Result from "effect/Result";
26
- import * as Schema from "effect/Schema";
27
- import { SettingsSchema } from "../../../settings/schema.js";
28
+ import {} from "../../../lockfile/schema.js";
29
+ import {} from "../../../settings/schema.js";
30
+ import { decodeLockfile, decodeSettings } from "./helpers/decode.js";
31
+ import { isSameFinding } from "./helpers/finding.js";
28
32
  import { disableSkillOp, enableSkillOp } from "./helpers/install-ops.js";
29
33
  import { EMPTY_LINT_FINDINGS, EMPTY_OPERATIONS } from "./helpers/empty.js";
34
+ import { isUniversalSkillsRelativeDir, resolveUniversalDirPresence, } from "../../../extensions/universal-skills-dir.js";
35
+ import { buildRetainedSkillFqns, isImplicitRetainedSkill } from "./helpers/retained-skills.js";
30
36
  const RULE_ID = "workspace/skills-artifacts-correct";
31
37
  const SETTINGS_REL = ".axm/settings.json";
32
- const SUG_ENABLE_PREFIX = "Re-enable skill ";
33
- const SUG_DISABLE_PREFIX = "Disable skill ";
34
- const decodeSettings = (input) => {
35
- const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
36
- onExcessProperty: "ignore",
37
- errors: "all",
38
- });
39
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
40
- };
41
38
  const artifactPath = (agent, skillName) => `${agent.skills.dir}/${skillName}`;
42
39
  const enableFinding = (name, reason) => ({
43
40
  kind: "autofixable",
44
41
  ruleId: RULE_ID,
45
42
  severity: "error",
46
- message: `Skill '${name}' is enabled but missing per-agent artifacts (${reason}).`,
47
- suggestions: [`${SUG_ENABLE_PREFIX}'${name}' to recreate agent artifacts.`],
43
+ message: `Skill '${name}' is listed as enabled, but it is missing from some declared agents. Missing from agents: ${reason}. ` +
44
+ "Run `axm lint --fix` to make it present for every declared agent.",
48
45
  location: { file: SETTINGS_REL },
49
46
  });
50
47
  const disableFinding = (name, reason) => ({
51
48
  kind: "autofixable",
52
49
  ruleId: RULE_ID,
53
50
  severity: "error",
54
- message: `Skill '${name}' is disabled but still has per-agent artifacts (${reason}).`,
55
- suggestions: [`${SUG_DISABLE_PREFIX}'${name}' to clean up stale artifacts.`],
51
+ message: `Skill '${name}' is listed as disabled, but it is still present in some declared agents. Present for agents: ${reason}. ` +
52
+ "Run `axm lint --fix` to remove it from those agents.",
56
53
  location: { file: SETTINGS_REL },
57
54
  });
58
55
  const inconsistentFinding = (name, details) => ({
59
56
  kind: "autofixable",
60
57
  ruleId: RULE_ID,
61
58
  severity: "error",
62
- message: `Skill '${name}' has inconsistent artifacts across declared agents (${details}).`,
63
- suggestions: [`${SUG_ENABLE_PREFIX}'${name}' to normalize across declared agents.`],
59
+ message: `Skill '${name}' is present for some declared agents but missing from others. ${details}. ` +
60
+ "Run `axm lint --fix` to make its presence consistent across the declared agents.",
61
+ location: { file: SETTINGS_REL },
62
+ });
63
+ const implicitEnableFinding = (name, reason) => ({
64
+ kind: "advisory",
65
+ ruleId: RULE_ID,
66
+ severity: "error",
67
+ message: `Pack-provided skill '${name}' is missing from some declared agents. Missing from agents: ${reason}. ` +
68
+ "Run `axm install` to reinstall the owning pack declarations and recreate the missing artifacts.",
64
69
  location: { file: SETTINGS_REL },
65
70
  });
66
- const NAME_FROM_SUGGESTION_RE = /'([^']+)'/;
67
- const extractSkillName = (suggestion) => NAME_FROM_SUGGESTION_RE.exec(suggestion)?.[1];
71
+ const collectArtifactViolations = (existenceBySkill) => {
72
+ const violations = [];
73
+ for (const { name, enabled, presentAgents, missingAgents, implicit } of existenceBySkill) {
74
+ if (enabled) {
75
+ if (missingAgents.length === 0) {
76
+ continue;
77
+ }
78
+ if (implicit) {
79
+ violations.push({
80
+ finding: implicitEnableFinding(name, missingAgents.join(", ")),
81
+ });
82
+ continue;
83
+ }
84
+ if (presentAgents.length === 0) {
85
+ violations.push({
86
+ finding: enableFinding(name, missingAgents.join(", ")),
87
+ operation: enableSkillOp({ name }),
88
+ });
89
+ continue;
90
+ }
91
+ violations.push({
92
+ finding: inconsistentFinding(name, `Present for agents: ${presentAgents.join(", ")}. Missing from agents: ${missingAgents.join(", ")}`),
93
+ operation: enableSkillOp({ name }),
94
+ });
95
+ continue;
96
+ }
97
+ if (presentAgents.length > 0) {
98
+ violations.push({
99
+ finding: disableFinding(name, presentAgents.join(", ")),
100
+ operation: disableSkillOp({ name }),
101
+ });
102
+ }
103
+ }
104
+ return violations;
105
+ };
106
+ const collectImplicitSkillNames = (settings, lockfile) => {
107
+ const declaredSkills = settings.skills ?? {};
108
+ const retainedFqns = buildRetainedSkillFqns(settings, lockfile);
109
+ return Object.entries(lockfile.skills)
110
+ .filter(([name, entry]) => isImplicitRetainedSkill(name, entry, declaredSkills, retainedFqns))
111
+ .map(([name]) => name)
112
+ .sort((left, right) => left.localeCompare(right));
113
+ };
114
+ const collectImplicitSkillNamesFromLockfile = (settings, lockfileResult) => {
115
+ if (Result.isFailure(lockfileResult)) {
116
+ return [];
117
+ }
118
+ const lockOption = lockfileResult.success;
119
+ if (Option.isNone(lockOption)) {
120
+ return [];
121
+ }
122
+ const lockfile = decodeLockfile(lockOption.value);
123
+ if (Option.isNone(lockfile)) {
124
+ return [];
125
+ }
126
+ return collectImplicitSkillNames(settings, lockfile.value);
127
+ };
68
128
  export const skillsArtifactsCorrectRule = {
69
129
  id: RULE_ID,
70
- description: "Enabled skills have artifacts in every declared agent; disabled skills have none.",
130
+ description: "Skill directories match each skill's enabled state across declared agents.",
71
131
  kind: "autofixing",
72
132
  severity: "error",
73
133
  check: (context) => Effect.gen(function* () {
@@ -79,51 +139,78 @@ export const skillsArtifactsCorrectRule = {
79
139
  if (Option.isNone(settings)) {
80
140
  return EMPTY_LINT_FINDINGS;
81
141
  }
142
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
143
+ const implicitSkillNames = collectImplicitSkillNamesFromLockfile(settings.value, lockfileResult);
82
144
  const declaredAgentIds = new Set(settings.value.agents ?? []);
83
145
  if (declaredAgentIds.size === 0) {
84
146
  return EMPTY_LINT_FINDINGS;
85
147
  }
86
148
  const knownAgents = yield* context.workspace.knownAgents;
87
149
  const declaredAgents = knownAgents.filter((a) => declaredAgentIds.has(a.id));
88
- const declaredSkills = settings.value.skills ?? {};
89
- const findings = [];
90
- for (const [name, entry] of Object.entries(declaredSkills)) {
91
- const perAgentExists = yield* Effect.all(declaredAgents.map((agent) => context.workspace
92
- .exists(artifactPath(agent, name))
93
- .pipe(Effect.map((exists) => ({ agentId: agent.id, exists })))), { concurrency: "unbounded" });
94
- const missingAgents = perAgentExists.filter((p) => !p.exists).map((p) => p.agentId);
95
- const presentAgents = perAgentExists.filter((p) => p.exists).map((p) => p.agentId);
96
- if (entry.enabled) {
97
- if (missingAgents.length === 0) {
98
- continue;
99
- }
100
- if (presentAgents.length === 0) {
101
- findings.push(enableFinding(name, `missing in: ${missingAgents.join(", ")}`));
102
- }
103
- else {
104
- findings.push(inconsistentFinding(name, `present in ${presentAgents.join(", ")}, missing in ${missingAgents.join(", ")}`));
105
- }
106
- continue;
107
- }
108
- // Disabled skill: flag if any artifact is still present.
109
- if (presentAgents.length > 0) {
110
- findings.push(disableFinding(name, `present in: ${presentAgents.join(", ")}`));
111
- }
112
- }
113
- return findings;
150
+ const universalAgentIds = new Set(declaredAgents.filter((a) => isUniversalSkillsRelativeDir(a.skills.dir)).map((a) => a.id));
151
+ const existenceBySkill = yield* Effect.all([
152
+ ...Object.entries(settings.value.skills ?? {}).map(([name, entry]) => ({
153
+ name,
154
+ enabled: entry.enabled,
155
+ implicit: false,
156
+ })),
157
+ ...implicitSkillNames.map((name) => ({ name, enabled: true, implicit: true })),
158
+ ].map(({ name, enabled, implicit }) => Effect.all(declaredAgents.map((agent) => context.workspace
159
+ .exists(artifactPath(agent, name))
160
+ .pipe(Effect.map((exists) => ({ agentId: agent.id, exists })))), { concurrency: "unbounded" }).pipe(Effect.map((perAgentExists) => {
161
+ const collapsed = resolveUniversalDirPresence(perAgentExists, universalAgentIds);
162
+ return {
163
+ name,
164
+ enabled,
165
+ presentAgents: collapsed.filter((p) => p.exists).map((p) => p.agentId),
166
+ missingAgents: collapsed.filter((p) => !p.exists).map((p) => p.agentId),
167
+ implicit,
168
+ };
169
+ }))), { concurrency: "unbounded" });
170
+ const violations = collectArtifactViolations(existenceBySkill);
171
+ return violations.map((violation) => violation.finding);
114
172
  }),
115
- fix: (_context, finding) => Effect.sync(() => {
116
- const name = extractSkillName(finding.suggestions[0]);
117
- if (name === undefined) {
173
+ fix: (context, finding) => Effect.gen(function* () {
174
+ const settingsResult = yield* Effect.result(context.workspace.settings);
175
+ if (Result.isFailure(settingsResult)) {
118
176
  return EMPTY_OPERATIONS;
119
177
  }
120
- if (finding.suggestions[0].startsWith(SUG_ENABLE_PREFIX)) {
121
- return [enableSkillOp({ name })];
178
+ const settings = decodeSettings(settingsResult.success);
179
+ if (Option.isNone(settings)) {
180
+ return EMPTY_OPERATIONS;
122
181
  }
123
- if (finding.suggestions[0].startsWith(SUG_DISABLE_PREFIX)) {
124
- return [disableSkillOp({ name })];
182
+ const lockfileResult = yield* Effect.result(context.workspace.lockfile);
183
+ const implicitSkillNames = collectImplicitSkillNamesFromLockfile(settings.value, lockfileResult);
184
+ const declaredAgentIds = new Set(settings.value.agents ?? []);
185
+ if (declaredAgentIds.size === 0) {
186
+ return EMPTY_OPERATIONS;
125
187
  }
126
- return EMPTY_OPERATIONS;
188
+ const knownAgents = yield* context.workspace.knownAgents;
189
+ const declaredAgents = knownAgents.filter((a) => declaredAgentIds.has(a.id));
190
+ const universalAgentIds = new Set(declaredAgents.filter((a) => isUniversalSkillsRelativeDir(a.skills.dir)).map((a) => a.id));
191
+ const existenceBySkill = yield* Effect.all([
192
+ ...Object.entries(settings.value.skills ?? {}).map(([name, entry]) => ({
193
+ name,
194
+ enabled: entry.enabled,
195
+ implicit: false,
196
+ })),
197
+ ...implicitSkillNames.map((name) => ({ name, enabled: true, implicit: true })),
198
+ ].map(({ name, enabled, implicit }) => Effect.all(declaredAgents.map((agent) => context.workspace
199
+ .exists(artifactPath(agent, name))
200
+ .pipe(Effect.map((exists) => ({ agentId: agent.id, exists })))), { concurrency: "unbounded" }).pipe(Effect.map((perAgentExists) => {
201
+ const collapsed = resolveUniversalDirPresence(perAgentExists, universalAgentIds);
202
+ return {
203
+ name,
204
+ enabled,
205
+ presentAgents: collapsed.filter((p) => p.exists).map((p) => p.agentId),
206
+ missingAgents: collapsed.filter((p) => !p.exists).map((p) => p.agentId),
207
+ implicit,
208
+ };
209
+ }))), { concurrency: "unbounded" });
210
+ const violation = collectArtifactViolations(existenceBySkill).find((candidate) => candidate.finding.kind === "autofixable" &&
211
+ candidate.operation !== undefined &&
212
+ isSameFinding(candidate.finding, finding));
213
+ return violation?.operation === undefined ? EMPTY_OPERATIONS : [violation.operation];
127
214
  }),
128
215
  };
129
216
  //# sourceMappingURL=skills-artifacts-correct.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills-artifacts-correct.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-correct.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-artifacts-correct.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-artifacts-correct.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,9 @@
14
14
  * 3. Duplicate FQNs — when two settings entries normalize to the same
15
15
  * owner/type/name FQN, both entries emit a finding.
16
16
  *
17
- * One finding per affected entity (per-entity cascade). Advisory — fixing
18
- * requires a settings edit.
17
+ * One finding per affected entity (per-entity cascade). Advisory — no lint
18
+ * autofix; resolve invalid or duplicate declarations with install/uninstall
19
+ * commands.
19
20
  *
20
21
  * @experimental This API is unstable and may change without notice.
21
22
  * @packageDocumentation
@@ -1 +1 @@
1
- {"version":3,"file":"skills-declarations-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AA+FnE,eAAO,MAAM,2BAA2B,EAAE,YAAY,CAAC,oBAAoB,CAuD1E,CAAC"}
1
+ {"version":3,"file":"skills-declarations-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,eAAe,CAAC;AA0CnE,eAAO,MAAM,2BAA2B,EAAE,YAAY,CAAC,oBAAoB,CAuD1E,CAAC"}
@@ -14,8 +14,9 @@
14
14
  * 3. Duplicate FQNs — when two settings entries normalize to the same
15
15
  * owner/type/name FQN, both entries emit a finding.
16
16
  *
17
- * One finding per affected entity (per-entity cascade). Advisory — fixing
18
- * requires a settings edit.
17
+ * One finding per affected entity (per-entity cascade). Advisory — no lint
18
+ * autofix; resolve invalid or duplicate declarations with install/uninstall
19
+ * commands.
19
20
  *
20
21
  * @experimental This API is unstable and may change without notice.
21
22
  * @packageDocumentation
@@ -23,83 +24,39 @@
23
24
  import * as Effect from "effect/Effect";
24
25
  import * as Option from "effect/Option";
25
26
  import * as Result from "effect/Result";
26
- import * as Schema from "effect/Schema";
27
- import { SettingsSchema } from "../../../settings/schema.js";
28
- import { parseRegistrySource } from "./helpers/registry-source.js";
27
+ import { decodeSettings } from "./helpers/decode.js";
29
28
  import { EMPTY_ADVISORY_FINDINGS } from "./helpers/empty.js";
29
+ import { categorizeEntry } from "./helpers/source-categorize.js";
30
30
  const RULE_ID = "workspace/skills-declarations-valid";
31
31
  const SETTINGS_REL = ".axm/settings.json";
32
- const decodeSettings = (input) => {
33
- const result = Schema.decodeUnknownResult(SettingsSchema)(input, {
34
- onExcessProperty: "ignore",
35
- errors: "all",
36
- });
37
- return Result.isSuccess(result) ? Option.some(result.success) : Option.none();
38
- };
39
- // Pattern definitions — follow the existing doctor check's logic (see
40
- // `workspace/doctor/checks/extensions-installed.ts`).
41
- const BARE_NAME_RE = /^[a-z0-9][a-z0-9-]*(?:@[^\s/:]+)?$/i;
42
- const NON_REGISTRY_MARKERS = [
43
- /^\.\//,
44
- /^\.\.\//,
45
- /^\//,
46
- /^file:\/\//,
47
- /:\/\//,
48
- /^[a-z][a-z0-9+.-]*:/i,
49
- ];
50
- const isClearlyNonRegistrySource = (source) => NON_REGISTRY_MARKERS.some((pattern) => pattern.test(source));
51
- const categorizeEntry = (name, source) => {
52
- // Delegate to the canonical parser — it handles `@owner/type/name@version`.
53
- const parsed = parseRegistrySource(source);
54
- if (parsed !== undefined) {
55
- return {
56
- name,
57
- source,
58
- kind: "registry",
59
- registryFqn: `${parsed.owner}/${parsed.type}/${parsed.name}`,
60
- };
61
- }
62
- if (isClearlyNonRegistrySource(source)) {
63
- return { name, source, kind: "non-registry" };
64
- }
65
- if (BARE_NAME_RE.test(source)) {
66
- return { name, source, kind: "bare" };
67
- }
68
- return { name, source, kind: "registry-no-owner" };
69
- };
70
32
  const findingForBareName = (entry) => ({
71
33
  kind: "advisory",
72
34
  ruleId: RULE_ID,
73
35
  severity: "error",
74
- message: `Skill '${entry.name}' has a bare-name source '${entry.source}'; declare a host or use @owner/skills/name.`,
75
- suggestions: [
76
- `Prefix the source with @owner/ to resolve via the default registry.`,
77
- `Declare the source host explicitly in settings.sources[].`,
78
- ],
36
+ message: `Skill '${entry.name}' uses bare source '${entry.source}', so axm cannot tell which registry skill you mean. ` +
37
+ "Run `axm skills install @owner/skills/<name>` with the owner-qualified source you intend.",
79
38
  location: { file: SETTINGS_REL },
80
39
  });
81
40
  const findingForMissingOwner = (entry) => ({
82
41
  kind: "advisory",
83
42
  ruleId: RULE_ID,
84
43
  severity: "error",
85
- message: `Skill '${entry.name}' has a registry-shaped source '${entry.source}' missing the @owner prefix.`,
86
- suggestions: [`Rewrite the source as @owner/skills/${entry.name}.`],
44
+ message: `Skill '${entry.name}' source '${entry.source}' looks like a registry skill reference but is missing the \`@owner\` prefix. ` +
45
+ "Run `axm skills install @owner/skills/<name>` with the owner-qualified source you intend.",
87
46
  location: { file: SETTINGS_REL },
88
47
  });
89
48
  const findingForDuplicate = (entry, duplicates) => ({
90
49
  kind: "advisory",
91
50
  ruleId: RULE_ID,
92
51
  severity: "error",
93
- message: `Skill '${entry.name}' resolves to a registry FQN declared more than once: ${duplicates.join(", ")}.`,
94
- suggestions: [
95
- `Remove duplicate entries and keep one per FQN.`,
96
- `Rename conflicting entries to distinct keys.`,
97
- ],
52
+ message: `Skill '${entry.name}' points to the same registry skill as these entries: ${duplicates.join(", ")}. ` +
53
+ "Run `axm skills uninstall <name>` for each duplicate entry you do not want to keep. " +
54
+ "If needed, run `axm skills install <source>` for the declaration you do want to keep.",
98
55
  location: { file: SETTINGS_REL },
99
56
  });
100
57
  export const skillsDeclarationsValidRule = {
101
58
  id: RULE_ID,
102
- description: "Declared skills name a resolvable, owner-qualified, unique source.",
59
+ description: "Declared skills use unique, resolvable sources.",
103
60
  kind: "advisory",
104
61
  severity: "error",
105
62
  check: (context) => Effect.gen(function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"skills-declarations-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-declarations-valid.js","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-declarations-valid.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"skills-integrity-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-integrity-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAsB,cAAc,EAAe,MAAM,eAAe,CAAC;AAyErF,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,oBAAoB,CA+DzE,CAAC"}
1
+ {"version":3,"file":"skills-integrity-valid.d.ts","sourceRoot":"","sources":["../../../../../../src/unstable/lint/catalog/workspace/skills-integrity-valid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAGV,cAAc,EAEf,MAAM,eAAe,CAAC;AA6GvB,eAAO,MAAM,wBAAwB,EAAE,cAAc,CAAC,oBAAoB,CAwEzE,CAAC"}