@tanstack/intent 0.0.44 → 0.1.1

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 (54) hide show
  1. package/README.md +0 -3
  2. package/dist/artifact-coverage-BfJ7f-S9.mjs +3 -0
  3. package/dist/cli-support-BADtMg6z.mjs +6 -0
  4. package/dist/{cli-support-BNDR3l1g.mjs → cli-support-C8SKYTA4.mjs} +35 -9
  5. package/dist/cli.mjs +17 -13
  6. package/dist/{core-qlBI_aQL.mjs → core-hEMP5GMV.mjs} +33 -17
  7. package/dist/core.d.mts +4 -2
  8. package/dist/core.mjs +9 -7
  9. package/dist/{display-0FnzlKRq.mjs → display-CFnFnrtx.mjs} +2 -2
  10. package/dist/exclude-CBxkyK3Q.mjs +126 -0
  11. package/dist/excludes-DDMe-4iu.mjs +111 -0
  12. package/dist/index.d.mts +3 -30
  13. package/dist/index.mjs +13 -278
  14. package/dist/{install-D1dsnbr9.mjs → install-BE7gVoNT.mjs} +15 -11
  15. package/dist/{list-DrChOziX.mjs → list-UqYivAcV.mjs} +17 -15
  16. package/dist/{load-ll7s5E3J.mjs → load-Dgw151E3.mjs} +11 -9
  17. package/dist/{meta-BEJIfnPG.mjs → meta-BZMVgIzJ.mjs} +1 -1
  18. package/dist/{project-context-BRIMzhi4.mjs → project-context-DDCie6Ro.mjs} +1 -1
  19. package/dist/{resolver-D9cjsz11.mjs → resolver-CZXZ0rft.mjs} +3 -86
  20. package/dist/{scanner-DaG82zNc.mjs → scanner-2XDBAsbm.mjs} +7 -5
  21. package/dist/{setup-BklJkH_6.mjs → setup-CMec7fht.mjs} +2 -2
  22. package/dist/setup.d.mts +1 -1
  23. package/dist/setup.mjs +4 -4
  24. package/dist/{skill-paths-B-j0dWDA.mjs → skill-paths-Cr74uFk4.mjs} +1 -1
  25. package/dist/source-policy-D4slvwwI.mjs +9 -0
  26. package/dist/source-policy-rGOtjQSM.mjs +247 -0
  27. package/dist/{stale-C6dPKQ98.mjs → stale-DxZyYibt.mjs} +4 -2
  28. package/dist/{staleness-BGFfic-Y.mjs → staleness-B8IvDS_9.mjs} +3 -3
  29. package/dist/staleness-Ctzy2Zac.mjs +5 -0
  30. package/dist/{types-CIha6LtJ.d.mts → types-oEflMSso.d.mts} +2 -33
  31. package/dist/utils-BuNMwKct.mjs +3 -0
  32. package/dist/{utils-9fhWAVua.mjs → utils-Dj49bkF_.mjs} +14 -1
  33. package/dist/{validate-CEhp9gDs.mjs → validate-B3pkTIZl.mjs} +6 -6
  34. package/dist/{workflow-review-CrWkP7Hc.mjs → workflow-review-CtOR1bgh.mjs} +1 -1
  35. package/dist/{workspace-patterns-Bjq_cXww.mjs → workspace-patterns-BBW4c1gr.mjs} +2 -2
  36. package/dist/{workspace-patterns-BffPlZ1D.mjs → workspace-patterns-Cz_lNhwz.mjs} +1 -1
  37. package/meta/domain-discovery/SKILL.md +1 -1
  38. package/meta/generate-skill/SKILL.md +1 -8
  39. package/meta/tree-generator/SKILL.md +1 -1
  40. package/package.json +1 -1
  41. package/dist/artifact-coverage-DA26utB1.mjs +0 -3
  42. package/dist/cli-support-BtHFD7gl.mjs +0 -6
  43. package/dist/scanner-BV7X5n_z.mjs +0 -6
  44. package/dist/staleness-CB3qpVCq.mjs +0 -5
  45. package/dist/utils-CSPzvaFu.mjs +0 -3
  46. package/meta/feedback-collection/SKILL.md +0 -234
  47. /package/dist/{artifact-coverage-DgWuVqUp.mjs → artifact-coverage-nGwun1tt.mjs} +0 -0
  48. /package/dist/{command-runner-C0yCOHLi.mjs → command-runner-fstUIUhe.mjs} +0 -0
  49. /package/dist/{edit-package-json-CtuelQ_q.mjs → edit-package-json-DKyJ04t1.mjs} +0 -0
  50. /package/dist/{scaffold-CLM6bt3c.mjs → scaffold-D2vwv9ls.mjs} +0 -0
  51. /package/dist/{setup-DhMqESd3.d.mts → setup-DW3pn0QW.d.mts} +0 -0
  52. /package/dist/{setup-github-actions-CUd1oncY.mjs → setup-github-actions-emXSyGy3.mjs} +0 -0
  53. /package/dist/{skill-use-umYvZl94.mjs → skill-use-CUrNHf-u.mjs} +0 -0
  54. /package/dist/{workflow-review-D9Fg1G0P.mjs → workflow-review-wL1Iu2Sf.mjs} +0 -0
package/README.md CHANGED
@@ -117,8 +117,6 @@ npx @tanstack/intent@latest setup
117
117
 
118
118
  The real risk with any derived artifact is staleness. `npx @tanstack/intent@latest stale` flags skills whose source docs have changed, generated skills that drift from `_artifacts`, and public workspace packages missing coverage. CI templates catch drift before it ships.
119
119
 
120
- The feedback loop runs both directions. `npx @tanstack/intent@latest feedback` lets users submit structured reports when a skill produces wrong output — which skill, which version, what broke. That context flows back to the maintainer, and the fix ships to everyone on the next package update. Every support interaction produces an artifact that prevents the same class of problem for all future users — not just the one who reported it.
121
-
122
120
  ## CLI Commands
123
121
 
124
122
  | Command | Description |
@@ -131,7 +129,6 @@ The feedback loop runs both directions. `npx @tanstack/intent@latest feedback` l
131
129
  | `npx @tanstack/intent@latest validate [dir]` | Validate SKILL.md files |
132
130
  | `npx @tanstack/intent@latest setup` | Copy CI templates into your repo |
133
131
  | `npx @tanstack/intent@latest stale [dir] [--json]` | Check skills for version drift |
134
- | `npx @tanstack/intent@latest feedback` | Submit skill feedback |
135
132
 
136
133
  ## License
137
134
 
@@ -0,0 +1,3 @@
1
+ import { t as readIntentArtifacts } from "./artifact-coverage-nGwun1tt.mjs";
2
+
3
+ export { readIntentArtifacts };
@@ -0,0 +1,6 @@
1
+ import "./utils-Dj49bkF_.mjs";
2
+ import "./workspace-patterns-Cz_lNhwz.mjs";
3
+ import "./project-context-DDCie6Ro.mjs";
4
+ import { a as noticeOptionsFromGlobalFlags, c as scanIntentsOrFail, i as getMetaDir, l as printNotices, n as coreOptionsFromGlobalFlags, o as printDebugInfo, r as getCheckSkillsWorkflowAdvisories, s as resolveStaleTargets, t as INTENT_CHECK_SKILLS_WORKFLOW_VERSION, u as printWarnings } from "./cli-support-C8SKYTA4.mjs";
5
+
6
+ export { INTENT_CHECK_SKILLS_WORKFLOW_VERSION, coreOptionsFromGlobalFlags, getCheckSkillsWorkflowAdvisories, getMetaDir, noticeOptionsFromGlobalFlags, printDebugInfo, printNotices, printWarnings, resolveStaleTargets, scanIntentsOrFail };
@@ -1,4 +1,4 @@
1
- import { t as resolveProjectContext } from "./project-context-BRIMzhi4.mjs";
1
+ import { t as resolveProjectContext } from "./project-context-DDCie6Ro.mjs";
2
2
  import { t as fail } from "./cli-error-BrMXlbtx.mjs";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { dirname, join, relative, resolve } from "node:path";
@@ -10,6 +10,25 @@ function printWarnings(warnings) {
10
10
  console.log("Warnings:");
11
11
  for (const warning of warnings) console.log(` ⚠ ${warning}`);
12
12
  }
13
+ const TRUE_LIKE_VALUES = new Set([
14
+ "1",
15
+ "true",
16
+ "yes",
17
+ "on"
18
+ ]);
19
+ function envSuppressesNotices() {
20
+ const value = process.env.INTENT_NO_NOTICES?.trim().toLowerCase();
21
+ return value ? TRUE_LIKE_VALUES.has(value) : false;
22
+ }
23
+ function shouldSuppressNotices(options = {}) {
24
+ return options.noNotices === true || envSuppressesNotices();
25
+ }
26
+ function printNotices(notices, options = {}) {
27
+ if (notices.length === 0) return;
28
+ if (shouldSuppressNotices(options)) return;
29
+ console.error("Notices:");
30
+ for (const notice of notices) console.error(` ℹ ${notice}`);
31
+ }
13
32
 
14
33
  //#endregion
15
34
  //#region src/cli-support.ts
@@ -30,10 +49,15 @@ function getCheckSkillsWorkflowAdvisories(root) {
30
49
  if ((versionMatch ? Number(versionMatch[1]) : 0) >= INTENT_CHECK_SKILLS_WORKFLOW_VERSION) return [];
31
50
  return [`Intent workflow update available: run \`npx @tanstack/intent@latest setup\` to refresh ${relative(process.cwd(), workflowPath) || workflowPath}.`];
32
51
  }
33
- async function scanIntentsOrFail(options) {
34
- const { scanForIntents } = await import("./scanner-BV7X5n_z.mjs");
52
+ async function scanIntentsOrFail(coreOptions = {}) {
53
+ const { scanForPolicedIntents } = await import("./source-policy-D4slvwwI.mjs");
35
54
  try {
36
- return scanForIntents(void 0, options);
55
+ const { scan } = scanForPolicedIntents({
56
+ cwd: process.cwd(),
57
+ scanOptions: scanOptionsFromGlobalFlags(coreOptions),
58
+ coreOptions
59
+ });
60
+ return scan;
37
61
  } catch (err) {
38
62
  fail(err instanceof Error ? err.message : String(err));
39
63
  }
@@ -48,11 +72,13 @@ function coreOptionsFromGlobalFlags(options) {
48
72
  if (options.global && options.globalOnly) fail("Use either --global or --global-only, not both.");
49
73
  return {
50
74
  debug: options.debug,
51
- exclude: Array.isArray(options.exclude) ? options.exclude : options.exclude ? [options.exclude] : void 0,
52
75
  global: options.global,
53
76
  globalOnly: options.globalOnly
54
77
  };
55
78
  }
79
+ function noticeOptionsFromGlobalFlags(options) {
80
+ return { noNotices: options.noNotices || options.notices === false };
81
+ }
56
82
  function formatDebugValue(value) {
57
83
  if (Array.isArray(value)) return value.length > 0 ? value.join(", ") : "(none)";
58
84
  return String(value);
@@ -68,18 +94,18 @@ async function resolveStaleTargets(targetDir) {
68
94
  targetPath: targetDir
69
95
  });
70
96
  const workflowAdvisories = getCheckSkillsWorkflowAdvisories(context.workspaceRoot ?? context.packageRoot ?? resolvedRoot);
71
- const { buildWorkspaceCoverageSignals, checkStaleness, readPackageName } = await import("./staleness-CB3qpVCq.mjs");
97
+ const { buildWorkspaceCoverageSignals, checkStaleness, readPackageName } = await import("./staleness-Ctzy2Zac.mjs");
72
98
  const isWorkspaceRootTarget = context.workspaceRoot !== null && resolvedRoot === context.workspaceRoot;
73
99
  if (context.packageRoot && !isWorkspaceRootTarget && (context.targetSkillsDir !== null || context.workspaceRoot === null)) return {
74
100
  reports: [await checkStaleness(context.packageRoot, readPackageName(context.packageRoot), context.workspaceRoot ?? context.packageRoot)],
75
101
  workflowAdvisories
76
102
  };
77
- const { findWorkspaceRoot, getWorkspaceInfo } = await import("./workspace-patterns-Bjq_cXww.mjs");
103
+ const { findWorkspaceRoot, getWorkspaceInfo } = await import("./workspace-patterns-BBW4c1gr.mjs");
78
104
  const workspaceRoot = findWorkspaceRoot(resolvedRoot);
79
105
  const workspaceInfo = workspaceRoot ? getWorkspaceInfo(workspaceRoot) : null;
80
106
  if (workspaceInfo) {
81
107
  const reports = await Promise.all(workspaceInfo.packageDirsWithSkills.map((packageDir) => checkStaleness(packageDir, readPackageName(packageDir), workspaceInfo.root)));
82
- const { readIntentArtifacts } = await import("./artifact-coverage-DA26utB1.mjs");
108
+ const { readIntentArtifacts } = await import("./artifact-coverage-BfJ7f-S9.mjs");
83
109
  const artifacts = existsSync(join(workspaceInfo.root, "_artifacts")) ? readIntentArtifacts(workspaceInfo.root) : null;
84
110
  const coverageSignals = buildWorkspaceCoverageSignals({
85
111
  artifactRoot: workspaceInfo.root,
@@ -111,4 +137,4 @@ async function resolveStaleTargets(targetDir) {
111
137
  }
112
138
 
113
139
  //#endregion
114
- export { printDebugInfo as a, scanOptionsFromGlobalFlags as c, getMetaDir as i, printWarnings as l, coreOptionsFromGlobalFlags as n, resolveStaleTargets as o, getCheckSkillsWorkflowAdvisories as r, scanIntentsOrFail as s, INTENT_CHECK_SKILLS_WORKFLOW_VERSION as t };
140
+ export { noticeOptionsFromGlobalFlags as a, scanIntentsOrFail as c, getMetaDir as i, printNotices as l, coreOptionsFromGlobalFlags as n, printDebugInfo as o, getCheckSkillsWorkflowAdvisories as r, resolveStaleTargets as s, INTENT_CHECK_SKILLS_WORKFLOW_VERSION as t, printWarnings as u };
package/dist/cli.mjs CHANGED
@@ -8,44 +8,48 @@ import { cac } from "cac";
8
8
  function createCli() {
9
9
  const cli = cac("intent");
10
10
  cli.usage("<command> [options]");
11
- cli.command("list", "Discover intent-enabled packages from the project or workspace").usage("list [--json] [--debug] [--exclude <pattern>] [--global] [--global-only]").option("--json", "Output JSON").option("--debug", "Print discovery debug details to stderr").option("--exclude <pattern>", "Exclude package name glob").option("--global", "Include global packages after project packages").option("--global-only", "List global packages only").example("list").example("list --json").example("list --global").action(async (options) => {
12
- const { runListCommand } = await import("./list-DrChOziX.mjs");
11
+ cli.command("list", "Discover intent-enabled packages from the project or workspace").usage("list [--json] [--debug] [--global] [--global-only] [--no-notices]").option("--json", "Output JSON").option("--debug", "Print discovery debug details to stderr").option("--global", "Include global packages after project packages").option("--global-only", "List global packages only").option("--no-notices", "Suppress non-critical notices on stderr").example("list").example("list --json").example("list --global").action(async (options) => {
12
+ const { runListCommand } = await import("./list-UqYivAcV.mjs");
13
13
  await runListCommand(options);
14
14
  });
15
- cli.command("load [use]", "Load a compact skill use and print its SKILL.md").usage("load <use> [--path] [--json] [--debug] [--exclude <pattern>] [--global] [--global-only]").option("--path", "Print the resolved skill path instead of file content").option("--json", "Output JSON").option("--debug", "Print resolution debug details to stderr").option("--exclude <pattern>", "Exclude package name glob").option("--global", "Load from project packages, then global packages").option("--global-only", "Load from global packages only").example("load @tanstack/query#core").example("load @tanstack/query#core --path").action(async (use, options) => {
16
- const { runLoadCommand } = await import("./load-ll7s5E3J.mjs");
15
+ cli.command("exclude [action] [pattern]", "Manage package.json intent.exclude entries").usage("exclude [list|add|remove] [pattern] [--json]").option("--json", "Output JSON list of configured exclude patterns").example("exclude").example("exclude list --json").example("exclude add @tanstack/router#experimental-*").example("exclude remove @tanstack/router#experimental-*").action(async (action, pattern, options) => {
16
+ const { runExcludeCommand } = await import("./exclude-CBxkyK3Q.mjs");
17
+ await runExcludeCommand(action, pattern, options);
18
+ });
19
+ cli.command("load [use]", "Load a compact skill use and print its SKILL.md").usage("load <use> [--path] [--json] [--debug] [--global] [--global-only]").option("--path", "Print the resolved skill path instead of file content").option("--json", "Output JSON").option("--debug", "Print resolution debug details to stderr").option("--global", "Load from project packages, then global packages").option("--global-only", "Load from global packages only").example("load @tanstack/query#core").example("load @tanstack/query#core --path").action(async (use, options) => {
20
+ const { runLoadCommand } = await import("./load-Dgw151E3.mjs");
17
21
  await runLoadCommand(use, options);
18
22
  });
19
23
  cli.command("meta [name]", "List meta-skills, or print one by name").usage("meta [name]").example("meta").example("meta domain-discovery").action(async (name) => {
20
- const [{ getMetaDir }, { runMetaCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./meta-BEJIfnPG.mjs")]);
24
+ const [{ getMetaDir }, { runMetaCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./meta-BZMVgIzJ.mjs")]);
21
25
  await runMetaCommand(name, getMetaDir());
22
26
  });
23
27
  cli.command("validate [dir]", "Validate skill files").usage("validate [dir] [--github-summary]").option("--github-summary", "Write a GitHub Actions step summary").example("validate").example("validate packages/query/skills").action(async (dir, options) => {
24
- const { runValidateCommand } = await import("./validate-CEhp9gDs.mjs");
28
+ const { runValidateCommand } = await import("./validate-B3pkTIZl.mjs");
25
29
  await runValidateCommand(dir, options);
26
30
  });
27
- cli.command("install", "Create or update skill loading guidance in an agent config file").usage("install [--map] [--dry-run] [--print-prompt] [--global] [--global-only]").option("--map", "Write explicit skill-to-task mappings").option("--dry-run", "Print the generated block without writing").option("--print-prompt", "Print the legacy agent setup prompt instead of writing").option("--global", "Include global packages after project packages").option("--global-only", "Install mappings from global packages only").example("install").example("install --map").example("install --dry-run").example("install --print-prompt").example("install --global").action(async (options) => {
28
- const [{ scanIntentsOrFail }, { runInstallCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./install-D1dsnbr9.mjs")]);
31
+ cli.command("install", "Create or update skill loading guidance in an agent config file").usage("install [--map] [--dry-run] [--print-prompt] [--global] [--global-only] [--no-notices]").option("--map", "Write explicit skill-to-task mappings").option("--dry-run", "Print the generated block without writing").option("--print-prompt", "Print the legacy agent setup prompt instead of writing").option("--global", "Include global packages after project packages").option("--global-only", "Install mappings from global packages only").option("--no-notices", "Suppress non-critical notices on stderr").example("install").example("install --map").example("install --dry-run").example("install --print-prompt").example("install --global").action(async (options) => {
32
+ const [{ scanIntentsOrFail }, { runInstallCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./install-BE7gVoNT.mjs")]);
29
33
  await runInstallCommand(options, scanIntentsOrFail);
30
34
  });
31
35
  cli.command("scaffold", "Print maintainer scaffold prompt").usage("scaffold").action(async () => {
32
- const [{ getMetaDir }, { runScaffoldCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./scaffold-CLM6bt3c.mjs")]);
36
+ const [{ getMetaDir }, { runScaffoldCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./scaffold-D2vwv9ls.mjs")]);
33
37
  runScaffoldCommand(getMetaDir());
34
38
  });
35
39
  cli.command("stale [dir]", "Check skills for staleness in the current package or workspace").usage("stale [dir] [--json] [--github-review]").option("--json", "Output JSON").option("--github-review", "Write GitHub Actions review PR files").option("--package-label <label>", "Fallback package label for review PRs").example("stale").example("stale packages/query").example("stale --json").action(async (targetDir, options) => {
36
- const [{ resolveStaleTargets }, { runStaleCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./stale-C6dPKQ98.mjs")]);
40
+ const [{ resolveStaleTargets }, { runStaleCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./stale-DxZyYibt.mjs")]);
37
41
  await runStaleCommand(targetDir, options, resolveStaleTargets);
38
42
  });
39
43
  cli.command("edit-package-json", "Update package.json files so skills are published").usage("edit-package-json").action(async () => {
40
- const { runEditPackageJsonCommand } = await import("./edit-package-json-CtuelQ_q.mjs");
44
+ const { runEditPackageJsonCommand } = await import("./edit-package-json-DKyJ04t1.mjs");
41
45
  await runEditPackageJsonCommand(process.cwd());
42
46
  });
43
47
  cli.command("setup", "Copy Intent CI workflow templates into .github/workflows/").usage("setup").action(async () => {
44
- const [{ getMetaDir }, { runSetupGithubActionsCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./setup-github-actions-CUd1oncY.mjs")]);
48
+ const [{ getMetaDir }, { runSetupGithubActionsCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./setup-github-actions-emXSyGy3.mjs")]);
45
49
  await runSetupGithubActionsCommand(process.cwd(), getMetaDir());
46
50
  });
47
51
  cli.command("setup-github-actions", "Copy Intent CI workflow templates into .github/workflows/").usage("setup-github-actions").action(async () => {
48
- const [{ getMetaDir }, { runSetupGithubActionsCommand }] = await Promise.all([import("./cli-support-BtHFD7gl.mjs"), import("./setup-github-actions-CUd1oncY.mjs")]);
52
+ const [{ getMetaDir }, { runSetupGithubActionsCommand }] = await Promise.all([import("./cli-support-BADtMg6z.mjs"), import("./setup-github-actions-emXSyGy3.mjs")]);
49
53
  await runSetupGithubActionsCommand(process.cwd(), getMetaDir());
50
54
  });
51
55
  cli.command("help [command]", "Display help for a command").action((commandName) => {
@@ -1,9 +1,11 @@
1
- import { i as getDeps, l as resolveDepDir, u as toPosixPath } from "./utils-9fhWAVua.mjs";
2
- import { n as scanIntentPackageAtRoot, r as createIntentFsCache, t as scanForIntents } from "./scanner-DaG82zNc.mjs";
3
- import { n as findWorkspacePackages } from "./workspace-patterns-BffPlZ1D.mjs";
4
- import { i as parseSkillUse, n as formatSkillUse } from "./skill-use-umYvZl94.mjs";
5
- import { t as resolveProjectContext } from "./project-context-BRIMzhi4.mjs";
6
- import { a as compileExcludePatterns, c as warningMentionsPackage, i as resolveSkillUse, o as getEffectiveExcludePatterns, r as resolveSkillEntry, s as isPackageExcluded, t as ResolveSkillUseError } from "./resolver-D9cjsz11.mjs";
1
+ import { d as toPosixPath, i as getDeps, u as resolveDepDir } from "./utils-Dj49bkF_.mjs";
2
+ import { n as scanIntentPackageAtRoot, r as createIntentFsCache } from "./scanner-2XDBAsbm.mjs";
3
+ import { n as findWorkspacePackages } from "./workspace-patterns-Cz_lNhwz.mjs";
4
+ import { i as parseSkillUse, n as formatSkillUse } from "./skill-use-CUrNHf-u.mjs";
5
+ import { t as resolveProjectContext } from "./project-context-DDCie6Ro.mjs";
6
+ import { o as warningMentionsPackage, r as getEffectiveExcludePatterns, t as compileExcludePatterns } from "./excludes-DDMe-4iu.mjs";
7
+ import { i as resolveSkillUse, r as resolveSkillEntry, t as ResolveSkillUseError } from "./resolver-CZXZ0rft.mjs";
8
+ import { a as checkLoadAllowed, o as readSkillSourcesConfig, s as scanForPolicedIntents } from "./source-policy-rGOtjQSM.mjs";
7
9
  import { existsSync } from "node:fs";
8
10
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
9
11
 
@@ -361,11 +363,13 @@ function listIntentSkills(options = {}) {
361
363
  const scanOptions = toScanOptions(options);
362
364
  const fsCache = createIntentFsCache();
363
365
  const projectContext = resolveProjectContext({ cwd });
364
- const scanResult = scanForIntents(cwd, withFsCache(scanOptions, fsCache));
365
- const excludePatterns = getEffectiveExcludePatterns(options, projectContext);
366
- const excludeMatchers = compileExcludePatterns(excludePatterns);
367
- const excludedPackages = scanResult.packages.filter((pkg) => isPackageExcluded(pkg.name, excludeMatchers)).map((pkg) => pkg.name);
368
- const packages = scanResult.packages.filter((pkg) => !isPackageExcluded(pkg.name, excludeMatchers));
366
+ const { scan, excludePatterns } = scanForPolicedIntents({
367
+ cwd,
368
+ scanOptions: withFsCache(scanOptions, fsCache),
369
+ coreOptions: options,
370
+ context: projectContext
371
+ });
372
+ const packages = scan.packages;
369
373
  const skills = packages.flatMap((pkg) => pkg.skills.map((skill) => {
370
374
  return {
371
375
  use: formatSkillUse(pkg.name, skill.name),
@@ -380,7 +384,7 @@ function listIntentSkills(options = {}) {
380
384
  };
381
385
  }));
382
386
  const result = {
383
- packageManager: scanResult.packageManager,
387
+ packageManager: scan.packageManager,
384
388
  skills,
385
389
  packages: packages.map((pkg) => ({
386
390
  name: pkg.name,
@@ -389,8 +393,9 @@ function listIntentSkills(options = {}) {
389
393
  packageRoot: pkg.packageRoot,
390
394
  skillCount: pkg.skills.length
391
395
  })),
392
- warnings: scanResult.warnings.filter((warning) => !excludedPackages.some((packageName) => warningMentionsPackage(warning, packageName))),
393
- conflicts: scanResult.conflicts.filter((conflict) => !isPackageExcluded(conflict.packageName, excludeMatchers))
396
+ warnings: scan.warnings,
397
+ notices: scan.notices,
398
+ conflicts: scan.conflicts
394
399
  };
395
400
  if (options.debug) result.debug = {
396
401
  cwd,
@@ -399,8 +404,9 @@ function listIntentSkills(options = {}) {
399
404
  packageCount: result.packages.length,
400
405
  skillCount: result.skills.length,
401
406
  warningCount: result.warnings.length,
407
+ noticeCount: result.notices.length,
402
408
  conflictCount: result.conflicts.length,
403
- scan: scanResult.stats ?? fsCache.getStats()
409
+ scan: scan.stats ?? fsCache.getStats()
404
410
  };
405
411
  return result;
406
412
  }
@@ -464,7 +470,12 @@ function resolveIntentSkillInCwd(cwd, use, options = {}) {
464
470
  const projectContext = resolveProjectContext({ cwd });
465
471
  const excludePatterns = getEffectiveExcludePatterns(options, projectContext);
466
472
  const excludeMatchers = compileExcludePatterns(excludePatterns);
467
- if (isPackageExcluded(parsedUse.packageName, excludeMatchers)) throw new IntentCoreError("package-excluded", `Cannot load skill use "${use}": package "${parsedUse.packageName}" is excluded by Intent configuration.`);
473
+ const config = readSkillSourcesConfig(cwd, projectContext);
474
+ const refusal = checkLoadAllowed(use, parsedUse, {
475
+ config,
476
+ excludeMatchers
477
+ });
478
+ if (refusal) throw new IntentCoreError(refusal.code, refusal.message);
468
479
  const scanOptions = toScanOptions(options);
469
480
  const scope = getScanScope(scanOptions);
470
481
  const fastPathResolved = resolveSkillUseFastPath(parsedUse, options, projectContext, cwd, fsCache);
@@ -476,7 +487,12 @@ function resolveIntentSkillInCwd(cwd, use, options = {}) {
476
487
  scan: fsCache.getStats(),
477
488
  scope
478
489
  }) : void 0);
479
- const scanResult = scanForIntents(cwd, withFsCache(scanOptions, fsCache));
490
+ const { scan: scanResult } = scanForPolicedIntents({
491
+ cwd,
492
+ scanOptions: withFsCache(scanOptions, fsCache),
493
+ coreOptions: options,
494
+ context: projectContext
495
+ });
480
496
  let resolved;
481
497
  try {
482
498
  resolved = resolveSkillUse(use, scanResult);
package/dist/core.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { S as VersionConflict, _ as ScanStats, g as ScanScope, l as IntentPackage, p as PackageManager } from "./types-CIha6LtJ.mjs";
1
+ import { _ as VersionConflict, c as PackageManager, d as ScanScope, f as ScanStats, s as IntentPackage } from "./types-oEflMSso.mjs";
2
2
 
3
3
  //#region src/core/types.d.ts
4
4
  interface IntentCoreOptions {
@@ -31,6 +31,7 @@ interface IntentSkillList {
31
31
  skills: Array<IntentSkillSummary>;
32
32
  packages: Array<IntentPackageSummary>;
33
33
  warnings: Array<string>;
34
+ notices: Array<string>;
34
35
  conflicts: Array<VersionConflict>;
35
36
  debug?: IntentSkillListDebug;
36
37
  }
@@ -55,6 +56,7 @@ interface IntentSkillListDebug {
55
56
  packageCount: number;
56
57
  skillCount: number;
57
58
  warningCount: number;
59
+ noticeCount: number;
58
60
  conflictCount: number;
59
61
  scan: IntentScanDebugStats;
60
62
  }
@@ -72,7 +74,7 @@ interface LoadedIntentSkillDebug {
72
74
  scan: IntentScanDebugStats;
73
75
  }
74
76
  interface IntentScanDebugStats extends ScanStats {}
75
- type IntentCoreErrorCode = 'invalid-options' | 'invalid-skill-use' | 'package-not-found' | 'package-excluded' | 'skill-not-found' | 'skill-path-outside-package' | 'skill-file-not-found';
77
+ type IntentCoreErrorCode = 'invalid-options' | 'invalid-skill-use' | 'package-not-found' | 'package-excluded' | 'package-not-listed' | 'skill-excluded' | 'skill-not-found' | 'skill-path-outside-package' | 'skill-file-not-found';
76
78
  //#endregion
77
79
  //#region src/core.d.ts
78
80
  declare class IntentCoreError extends Error {
package/dist/core.mjs CHANGED
@@ -1,9 +1,11 @@
1
- import "./utils-9fhWAVua.mjs";
2
- import "./skill-paths-B-j0dWDA.mjs";
3
- import "./scanner-DaG82zNc.mjs";
4
- import "./workspace-patterns-BffPlZ1D.mjs";
5
- import "./project-context-BRIMzhi4.mjs";
6
- import "./resolver-D9cjsz11.mjs";
7
- import { i as resolveIntentSkill, n as listIntentSkills, r as loadIntentSkill, t as IntentCoreError } from "./core-qlBI_aQL.mjs";
1
+ import "./utils-Dj49bkF_.mjs";
2
+ import "./skill-paths-Cr74uFk4.mjs";
3
+ import "./scanner-2XDBAsbm.mjs";
4
+ import "./workspace-patterns-Cz_lNhwz.mjs";
5
+ import "./project-context-DDCie6Ro.mjs";
6
+ import "./excludes-DDMe-4iu.mjs";
7
+ import "./resolver-CZXZ0rft.mjs";
8
+ import { i as resolveIntentSkill, n as listIntentSkills, r as loadIntentSkill, t as IntentCoreError } from "./core-hEMP5GMV.mjs";
9
+ import "./source-policy-rGOtjQSM.mjs";
8
10
 
9
11
  export { IntentCoreError, listIntentSkills, loadIntentSkill, resolveIntentSkill };
@@ -1,5 +1,5 @@
1
- import "./utils-9fhWAVua.mjs";
2
- import { n as isStableLoadPath, t as formatRuntimeSkillLookupHint } from "./skill-paths-B-j0dWDA.mjs";
1
+ import "./utils-Dj49bkF_.mjs";
2
+ import { n as isStableLoadPath, t as formatRuntimeSkillLookupHint } from "./skill-paths-Cr74uFk4.mjs";
3
3
 
4
4
  //#region src/display.ts
5
5
  function padColumn(text, width) {
@@ -0,0 +1,126 @@
1
+ import "./utils-Dj49bkF_.mjs";
2
+ import "./workspace-patterns-Cz_lNhwz.mjs";
3
+ import "./project-context-DDCie6Ro.mjs";
4
+ import { t as compileExcludePatterns } from "./excludes-DDMe-4iu.mjs";
5
+ import { t as fail } from "./cli-error-BrMXlbtx.mjs";
6
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { join } from "node:path";
8
+
9
+ //#region src/commands/exclude.ts
10
+ function normalizeAction(action) {
11
+ if (!action) return "list";
12
+ if (action === "list" || action === "add" || action === "remove") return action;
13
+ fail(`Unknown exclude action: ${action}. Expected list, add, or remove.`);
14
+ }
15
+ function getPackageJsonPath(cwd) {
16
+ return join(cwd, "package.json");
17
+ }
18
+ function readPackageJson(cwd) {
19
+ const packageJsonPath = getPackageJsonPath(cwd);
20
+ if (!existsSync(packageJsonPath)) fail(`No package.json found in ${cwd}`);
21
+ try {
22
+ return JSON.parse(readFileSync(packageJsonPath, "utf8"));
23
+ } catch (err) {
24
+ fail(`Failed to parse ${packageJsonPath}: ${err instanceof Error ? err.message : String(err)}`);
25
+ }
26
+ }
27
+ function readConfiguredExcludes(pkg) {
28
+ const intent = pkg.intent;
29
+ if (intent === void 0) return [];
30
+ if (!intent || typeof intent !== "object") fail("Invalid package.json: intent must be an object when present.");
31
+ const raw = intent.exclude;
32
+ if (raw === void 0) return [];
33
+ if (!Array.isArray(raw)) fail("Invalid package.json: intent.exclude must be an array of strings.");
34
+ const excludes = [];
35
+ for (const entry of raw) {
36
+ if (typeof entry !== "string") fail("Invalid package.json: intent.exclude must contain only strings.");
37
+ const trimmed = entry.trim();
38
+ if (trimmed.length === 0) continue;
39
+ excludes.push(trimmed);
40
+ }
41
+ return excludes;
42
+ }
43
+ function setConfiguredExcludes(pkg, excludes) {
44
+ const intent = pkg.intent && typeof pkg.intent === "object" ? pkg.intent : {};
45
+ intent.exclude = excludes;
46
+ pkg.intent = intent;
47
+ }
48
+ function writePackageJson(cwd, pkg) {
49
+ writeFileSync(getPackageJsonPath(cwd), `${JSON.stringify(pkg, null, 2)}\n`, "utf8");
50
+ }
51
+ function normalizePattern(pattern, action) {
52
+ if (!pattern) fail(`Missing exclude pattern. Expected: intent exclude ${action} <pattern>`);
53
+ const trimmed = pattern.trim();
54
+ if (trimmed.length === 0) fail(`Missing exclude pattern. Expected: intent exclude ${action} <pattern>`);
55
+ return trimmed;
56
+ }
57
+ function validatePattern(pattern) {
58
+ try {
59
+ compileExcludePatterns([pattern]);
60
+ } catch (err) {
61
+ fail(`Invalid exclude pattern "${pattern}": ${err instanceof Error ? err.message : String(err)}`);
62
+ }
63
+ }
64
+ function printExcludes(excludes, json) {
65
+ if (json) {
66
+ console.log(JSON.stringify(excludes, null, 2));
67
+ return;
68
+ }
69
+ if (excludes.length === 0) {
70
+ console.log("No excludes configured.");
71
+ return;
72
+ }
73
+ console.log("Configured excludes:");
74
+ for (const pattern of excludes) console.log(`- ${pattern}`);
75
+ }
76
+ async function runExcludeCommand(actionArg, patternArg, options) {
77
+ const action = normalizeAction(actionArg);
78
+ const cwd = process.cwd();
79
+ const pkg = readPackageJson(cwd);
80
+ const currentExcludes = readConfiguredExcludes(pkg);
81
+ if (action === "list") {
82
+ if (patternArg) fail("Unexpected pattern for list. Use: intent exclude list [--json]");
83
+ printExcludes(currentExcludes, options.json);
84
+ return;
85
+ }
86
+ const pattern = normalizePattern(patternArg, action);
87
+ validatePattern(pattern);
88
+ if (action === "add") {
89
+ if (currentExcludes.includes(pattern)) {
90
+ if (options.json) {
91
+ printExcludes(currentExcludes, true);
92
+ return;
93
+ }
94
+ console.log(`Exclude pattern "${pattern}" is already configured.`);
95
+ return;
96
+ }
97
+ const updated$1 = [...currentExcludes, pattern];
98
+ setConfiguredExcludes(pkg, updated$1);
99
+ writePackageJson(cwd, pkg);
100
+ if (options.json) {
101
+ printExcludes(updated$1, true);
102
+ return;
103
+ }
104
+ console.log(`Added exclude pattern "${pattern}" to package.json intent.exclude.`);
105
+ return;
106
+ }
107
+ const updated = currentExcludes.filter((value) => value !== pattern);
108
+ if (updated.length === currentExcludes.length) {
109
+ if (options.json) {
110
+ printExcludes(currentExcludes, true);
111
+ return;
112
+ }
113
+ console.log(`Exclude pattern "${pattern}" is not configured.`);
114
+ return;
115
+ }
116
+ setConfiguredExcludes(pkg, updated);
117
+ writePackageJson(cwd, pkg);
118
+ if (options.json) {
119
+ printExcludes(updated, true);
120
+ return;
121
+ }
122
+ console.log(`Removed exclude pattern "${pattern}" from package.json intent.exclude.`);
123
+ }
124
+
125
+ //#endregion
126
+ export { runExcludeCommand };
@@ -0,0 +1,111 @@
1
+ import { t as resolveProjectContext } from "./project-context-DDCie6Ro.mjs";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, isAbsolute, join, relative, resolve } from "node:path";
4
+
5
+ //#region src/core/package-json.ts
6
+ function readPackageJson(dir) {
7
+ try {
8
+ return JSON.parse(readFileSync(join(dir, "package.json"), "utf8"));
9
+ } catch {
10
+ return null;
11
+ }
12
+ }
13
+
14
+ //#endregion
15
+ //#region src/core/excludes.ts
16
+ const MAX_EXCLUDE_PATTERN_LENGTH = 200;
17
+ const PACKAGE_NAME_BOUNDARY = /[^a-zA-Z0-9_.-]/;
18
+ function normalizeExcludePatterns(value) {
19
+ if (!Array.isArray(value)) return [];
20
+ return value.filter((pattern) => typeof pattern === "string").map((pattern) => pattern.trim()).filter(Boolean);
21
+ }
22
+ function isWithinOrEqual(path, parentDir) {
23
+ const rel = relative(parentDir, path);
24
+ return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
25
+ }
26
+ function readPackageExcludes(dir) {
27
+ const intent = readPackageJson(dir)?.intent;
28
+ if (!intent || typeof intent !== "object") return [];
29
+ return normalizeExcludePatterns(intent.exclude);
30
+ }
31
+ function getConfigDirs(cwd, context = resolveProjectContext({ cwd })) {
32
+ const root = context.workspaceRoot ?? context.packageRoot ?? cwd;
33
+ const dirs = [];
34
+ let dir = cwd;
35
+ while (isWithinOrEqual(dir, root)) {
36
+ dirs.push(dir);
37
+ if (dir === root) break;
38
+ const next = dirname(dir);
39
+ if (next === dir) break;
40
+ dir = next;
41
+ }
42
+ return dirs;
43
+ }
44
+ function getConfigExcludePatterns(cwd, context = resolveProjectContext({ cwd })) {
45
+ return [...getConfigDirs(cwd, context)].reverse().flatMap(readPackageExcludes);
46
+ }
47
+ function getEffectiveExcludePatterns(options = {}, context) {
48
+ return [...getConfigExcludePatterns(context?.cwd ?? resolve(process.cwd(), options.cwd ?? process.cwd()), context), ...normalizeExcludePatterns(options.exclude)];
49
+ }
50
+ function assertPatternLength(pattern) {
51
+ if (pattern.length > MAX_EXCLUDE_PATTERN_LENGTH) throw new Error(`Intent exclude pattern is too long: ${pattern.length} characters. Maximum is ${MAX_EXCLUDE_PATTERN_LENGTH}.`);
52
+ }
53
+ function globToRegExp(pattern) {
54
+ const source = pattern.replace(/\*+/g, "*").split("*").map((part) => part.replace(/[\\^$+?.()|[\]{}]/g, "\\$&")).join(".*");
55
+ return /* @__PURE__ */ new RegExp(`^${source}$`);
56
+ }
57
+ function compileSegment(segment) {
58
+ if (!segment.includes("*")) return (value) => value === segment;
59
+ const regex = globToRegExp(segment);
60
+ return (value) => regex.test(value);
61
+ }
62
+ function compileExcludePatterns(patterns) {
63
+ return patterns.map((pattern) => {
64
+ assertPatternLength(pattern);
65
+ const hashIndex = pattern.indexOf("#");
66
+ if (hashIndex === -1) return {
67
+ pattern,
68
+ matchesPackage: compileSegment(pattern)
69
+ };
70
+ const packageSegment = pattern.slice(0, hashIndex);
71
+ const skillSegment = pattern.slice(hashIndex + 1);
72
+ if (skillSegment.replace(/\*+/g, "*") === "*") return {
73
+ pattern,
74
+ matchesPackage: compileSegment(packageSegment)
75
+ };
76
+ return {
77
+ pattern,
78
+ matchesPackage: compileSegment(packageSegment),
79
+ matchesSkill: compileSegment(skillSegment)
80
+ };
81
+ });
82
+ }
83
+ function isPackageExcluded(packageName, matchers) {
84
+ return matchers.some((matcher) => matcher.matchesSkill === void 0 && matcher.matchesPackage(packageName));
85
+ }
86
+ function skillNameVariants(packageName, skillName) {
87
+ const prefix = `${packageName.split("/").pop() ?? packageName}/`;
88
+ if (skillName.startsWith(prefix)) return [skillName, skillName.slice(prefix.length)];
89
+ return [skillName, `${prefix}${skillName}`];
90
+ }
91
+ function isSkillExcluded(packageName, skillName, matchers) {
92
+ const variants = skillNameVariants(packageName, skillName);
93
+ return matchers.some((matcher) => {
94
+ if (!matcher.matchesPackage(packageName)) return false;
95
+ if (matcher.matchesSkill === void 0) return true;
96
+ return variants.some((variant) => matcher.matchesSkill(variant));
97
+ });
98
+ }
99
+ function warningMentionsPackage(warning, packageName) {
100
+ let idx = warning.indexOf(packageName);
101
+ while (idx !== -1) {
102
+ const before = warning[idx - 1];
103
+ const after = warning[idx + packageName.length];
104
+ if ((before === void 0 || PACKAGE_NAME_BOUNDARY.test(before)) && (after === void 0 || PACKAGE_NAME_BOUNDARY.test(after))) return true;
105
+ idx = warning.indexOf(packageName, idx + packageName.length);
106
+ }
107
+ return false;
108
+ }
109
+
110
+ //#endregion
111
+ export { isSkillExcluded as a, isPackageExcluded as i, getConfigDirs as n, warningMentionsPackage as o, getEffectiveExcludePatterns as r, readPackageJson as s, compileExcludePatterns as t };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as VersionConflict, a as IntentArtifactSet, b as StalenessReport, c as IntentConfig, d as MetaFeedbackPayload, f as MetaSkillName, h as ScanResult, i as IntentArtifactFile, l as IntentPackage, m as ScanOptions, n as FeedbackPayload, o as IntentArtifactSkill, r as IntentArtifactCoverageIgnore, s as IntentArtifactWarning, t as AgentName, u as IntentProjectConfig, v as SkillEntry, x as StalenessSignal, y as SkillStaleness } from "./types-CIha6LtJ.mjs";
2
- import { i as runEditPackageJson, o as runSetupGithubActions, r as SetupGithubActionsResult, t as EditPackageJsonResult } from "./setup-DhMqESd3.mjs";
1
+ import { _ as VersionConflict, a as IntentArtifactWarning, g as StalenessSignal, h as StalenessReport, i as IntentArtifactSkill, l as ScanOptions, m as SkillStaleness, n as IntentArtifactFile, o as IntentConfig, p as SkillEntry, r as IntentArtifactSet, s as IntentPackage, t as IntentArtifactCoverageIgnore, u as ScanResult } from "./types-oEflMSso.mjs";
2
+ import { i as runEditPackageJson, o as runSetupGithubActions, r as SetupGithubActionsResult, t as EditPackageJsonResult } from "./setup-DW3pn0QW.mjs";
3
3
  import { closeSync, existsSync, lstatSync, openSync, readFileSync, readSync, readdirSync, realpathSync } from "node:fs";
4
4
 
5
5
  //#region src/utils.d.ts
@@ -65,33 +65,6 @@ declare function collectStaleReviewItems(reports: Array<StalenessReport>): Array
65
65
  declare function createFailedStaleReviewItem(library: string): StaleReviewItem;
66
66
  declare function buildStaleReviewBody(items: Array<StaleReviewItem>): string;
67
67
  //#endregion
68
- //#region src/feedback.d.ts
69
- declare function containsSecrets(text: string): boolean;
70
- declare function hasGhCli(): boolean;
71
- declare function resolveFrequency(root: string): string;
72
- declare function validatePayload(payload: unknown): {
73
- valid: boolean;
74
- errors: Array<string>;
75
- };
76
- declare function validateMetaPayload(payload: unknown): {
77
- valid: boolean;
78
- errors: Array<string>;
79
- };
80
- declare function metaToMarkdown(payload: MetaFeedbackPayload): string;
81
- declare function toMarkdown(payload: FeedbackPayload): string;
82
- interface SubmitResult {
83
- method: 'gh' | 'file' | 'stdout';
84
- detail: string;
85
- }
86
- declare function submitFeedback(payload: FeedbackPayload, repo: string, opts: {
87
- ghAvailable: boolean;
88
- outputPath?: string;
89
- }): SubmitResult;
90
- declare function submitMetaFeedback(payload: MetaFeedbackPayload, opts: {
91
- ghAvailable: boolean;
92
- outputPath?: string;
93
- }): SubmitResult;
94
- //#endregion
95
68
  //#region src/skill-use.d.ts
96
69
  interface SkillUse {
97
70
  packageName: string;
@@ -148,4 +121,4 @@ declare class ResolveSkillUseError extends Error {
148
121
  declare function isResolveSkillUseError(error: unknown): error is ResolveSkillUseError;
149
122
  declare function resolveSkillUse(use: string, scanResult: ScanResult): ResolveSkillResult;
150
123
  //#endregion
151
- export { type AgentName, type EditPackageJsonResult, type FeedbackPayload, type IntentArtifactCoverageIgnore, type IntentArtifactFile, type IntentArtifactSet, type IntentArtifactSkill, type IntentArtifactWarning, type IntentConfig, type IntentPackage, type IntentProjectConfig, type MetaFeedbackPayload, type MetaSkillName, type ResolveSkillResult, ResolveSkillUseError, type ResolveSkillUseErrorCode, type ScanOptions, type ScanResult, type SetupGithubActionsResult, type SkillEntry, type SkillStaleness, type SkillUse, SkillUseParseError, type SkillUseParseErrorCode, type StaleReviewItem, type StalenessReport, type StalenessSignal, buildStaleReviewBody, checkStaleness, collectStaleReviewItems, containsSecrets, createFailedStaleReviewItem, findSkillFiles, formatSkillUse, getDeps, hasGhCli, isResolveSkillUseError, isSkillUseParseError, metaToMarkdown, parseFrontmatter, parseSkillUse, readIntentArtifacts, resolveDepDir, resolveFrequency, resolveSkillUse, runEditPackageJson, runSetupGithubActions, scanForIntents, submitFeedback, submitMetaFeedback, toMarkdown, validateMetaPayload, validatePayload };
124
+ export { type EditPackageJsonResult, type IntentArtifactCoverageIgnore, type IntentArtifactFile, type IntentArtifactSet, type IntentArtifactSkill, type IntentArtifactWarning, type IntentConfig, type IntentPackage, type ResolveSkillResult, ResolveSkillUseError, type ResolveSkillUseErrorCode, type ScanOptions, type ScanResult, type SetupGithubActionsResult, type SkillEntry, type SkillStaleness, type SkillUse, SkillUseParseError, type SkillUseParseErrorCode, type StaleReviewItem, type StalenessReport, type StalenessSignal, buildStaleReviewBody, checkStaleness, collectStaleReviewItems, createFailedStaleReviewItem, findSkillFiles, formatSkillUse, getDeps, isResolveSkillUseError, isSkillUseParseError, parseFrontmatter, parseSkillUse, readIntentArtifacts, resolveDepDir, resolveSkillUse, runEditPackageJson, runSetupGithubActions, scanForIntents };