skill-flow 1.0.8 → 1.3.3

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 (143) hide show
  1. package/README.md +209 -131
  2. package/README.zh.md +170 -131
  3. package/dist/bridge-command.d.ts +9 -0
  4. package/dist/bridge-command.js +422 -0
  5. package/dist/bridge-command.js.map +1 -0
  6. package/dist/cli.js +68 -8
  7. package/dist/cli.js.map +1 -1
  8. package/package.json +11 -2
  9. package/dist/adapters/channel-adapters.d.ts +0 -8
  10. package/dist/adapters/channel-adapters.js +0 -64
  11. package/dist/adapters/channel-adapters.js.map +0 -1
  12. package/dist/domain/types.d.ts +0 -234
  13. package/dist/domain/types.js +0 -2
  14. package/dist/domain/types.js.map +0 -1
  15. package/dist/services/config-coordinator.d.ts +0 -38
  16. package/dist/services/config-coordinator.js +0 -83
  17. package/dist/services/config-coordinator.js.map +0 -1
  18. package/dist/services/deployment-applier.d.ts +0 -10
  19. package/dist/services/deployment-applier.js +0 -84
  20. package/dist/services/deployment-applier.js.map +0 -1
  21. package/dist/services/deployment-planner.d.ts +0 -16
  22. package/dist/services/deployment-planner.js +0 -366
  23. package/dist/services/deployment-planner.js.map +0 -1
  24. package/dist/services/doctor-service.d.ts +0 -7
  25. package/dist/services/doctor-service.js +0 -204
  26. package/dist/services/doctor-service.js.map +0 -1
  27. package/dist/services/inventory-service.d.ts +0 -17
  28. package/dist/services/inventory-service.js +0 -216
  29. package/dist/services/inventory-service.js.map +0 -1
  30. package/dist/services/skill-flow.d.ts +0 -136
  31. package/dist/services/skill-flow.js +0 -1210
  32. package/dist/services/skill-flow.js.map +0 -1
  33. package/dist/services/source-service.d.ts +0 -57
  34. package/dist/services/source-service.js +0 -809
  35. package/dist/services/source-service.js.map +0 -1
  36. package/dist/services/workflow-service.d.ts +0 -5
  37. package/dist/services/workflow-service.js +0 -45
  38. package/dist/services/workflow-service.js.map +0 -1
  39. package/dist/services/workspace-bootstrap-service.d.ts +0 -25
  40. package/dist/services/workspace-bootstrap-service.js +0 -140
  41. package/dist/services/workspace-bootstrap-service.js.map +0 -1
  42. package/dist/state/store.d.ts +0 -35
  43. package/dist/state/store.js +0 -151
  44. package/dist/state/store.js.map +0 -1
  45. package/dist/tests/add-flow-model.test.d.ts +0 -1
  46. package/dist/tests/add-flow-model.test.js +0 -108
  47. package/dist/tests/add-flow-model.test.js.map +0 -1
  48. package/dist/tests/add-flow-ui.test.d.ts +0 -1
  49. package/dist/tests/add-flow-ui.test.js +0 -16
  50. package/dist/tests/add-flow-ui.test.js.map +0 -1
  51. package/dist/tests/add-prepare-flow.test.d.ts +0 -1
  52. package/dist/tests/add-prepare-flow.test.js +0 -166
  53. package/dist/tests/add-prepare-flow.test.js.map +0 -1
  54. package/dist/tests/add-selection-and-find-command.test.d.ts +0 -1
  55. package/dist/tests/add-selection-and-find-command.test.js +0 -89
  56. package/dist/tests/add-selection-and-find-command.test.js.map +0 -1
  57. package/dist/tests/clawhub.test.d.ts +0 -1
  58. package/dist/tests/clawhub.test.js +0 -63
  59. package/dist/tests/clawhub.test.js.map +0 -1
  60. package/dist/tests/cli-utils.test.d.ts +0 -1
  61. package/dist/tests/cli-utils.test.js +0 -24
  62. package/dist/tests/cli-utils.test.js.map +0 -1
  63. package/dist/tests/config-coordinator.test.d.ts +0 -1
  64. package/dist/tests/config-coordinator.test.js +0 -219
  65. package/dist/tests/config-coordinator.test.js.map +0 -1
  66. package/dist/tests/config-integration.test.d.ts +0 -1
  67. package/dist/tests/config-integration.test.js +0 -276
  68. package/dist/tests/config-integration.test.js.map +0 -1
  69. package/dist/tests/config-ui-utils.test.d.ts +0 -1
  70. package/dist/tests/config-ui-utils.test.js +0 -523
  71. package/dist/tests/config-ui-utils.test.js.map +0 -1
  72. package/dist/tests/find-and-naming-utils.test.d.ts +0 -1
  73. package/dist/tests/find-and-naming-utils.test.js +0 -127
  74. package/dist/tests/find-and-naming-utils.test.js.map +0 -1
  75. package/dist/tests/inventory-service-precedence.test.d.ts +0 -1
  76. package/dist/tests/inventory-service-precedence.test.js +0 -42
  77. package/dist/tests/inventory-service-precedence.test.js.map +0 -1
  78. package/dist/tests/skill-flow.test.d.ts +0 -1
  79. package/dist/tests/skill-flow.test.js +0 -991
  80. package/dist/tests/skill-flow.test.js.map +0 -1
  81. package/dist/tests/source-lifecycle.test.d.ts +0 -1
  82. package/dist/tests/source-lifecycle.test.js +0 -644
  83. package/dist/tests/source-lifecycle.test.js.map +0 -1
  84. package/dist/tests/source-parsing-compatibility.test.d.ts +0 -1
  85. package/dist/tests/source-parsing-compatibility.test.js +0 -72
  86. package/dist/tests/source-parsing-compatibility.test.js.map +0 -1
  87. package/dist/tests/target-definitions.test.d.ts +0 -1
  88. package/dist/tests/target-definitions.test.js +0 -51
  89. package/dist/tests/target-definitions.test.js.map +0 -1
  90. package/dist/tests/test-helpers.d.ts +0 -18
  91. package/dist/tests/test-helpers.js +0 -123
  92. package/dist/tests/test-helpers.js.map +0 -1
  93. package/dist/tui/add-flow-model.d.ts +0 -62
  94. package/dist/tui/add-flow-model.js +0 -206
  95. package/dist/tui/add-flow-model.js.map +0 -1
  96. package/dist/tui/add-flow.d.ts +0 -25
  97. package/dist/tui/add-flow.js +0 -534
  98. package/dist/tui/add-flow.js.map +0 -1
  99. package/dist/tui/config-app.d.ts +0 -178
  100. package/dist/tui/config-app.js +0 -1551
  101. package/dist/tui/config-app.js.map +0 -1
  102. package/dist/tui/find-app.d.ts +0 -9
  103. package/dist/tui/find-app.js +0 -150
  104. package/dist/tui/find-app.js.map +0 -1
  105. package/dist/tui/selection-state.d.ts +0 -8
  106. package/dist/tui/selection-state.js +0 -32
  107. package/dist/tui/selection-state.js.map +0 -1
  108. package/dist/utils/builtin-git-sources.d.ts +0 -5
  109. package/dist/utils/builtin-git-sources.js +0 -23
  110. package/dist/utils/builtin-git-sources.js.map +0 -1
  111. package/dist/utils/clawhub.d.ts +0 -41
  112. package/dist/utils/clawhub.js +0 -94
  113. package/dist/utils/clawhub.js.map +0 -1
  114. package/dist/utils/cli.d.ts +0 -2
  115. package/dist/utils/cli.js +0 -19
  116. package/dist/utils/cli.js.map +0 -1
  117. package/dist/utils/constants.d.ts +0 -23
  118. package/dist/utils/constants.js +0 -195
  119. package/dist/utils/constants.js.map +0 -1
  120. package/dist/utils/find-command.d.ts +0 -2
  121. package/dist/utils/find-command.js +0 -29
  122. package/dist/utils/find-command.js.map +0 -1
  123. package/dist/utils/format.d.ts +0 -7
  124. package/dist/utils/format.js +0 -68
  125. package/dist/utils/format.js.map +0 -1
  126. package/dist/utils/fs.d.ts +0 -16
  127. package/dist/utils/fs.js +0 -144
  128. package/dist/utils/fs.js.map +0 -1
  129. package/dist/utils/git.d.ts +0 -3
  130. package/dist/utils/git.js +0 -12
  131. package/dist/utils/git.js.map +0 -1
  132. package/dist/utils/github-catalog.d.ts +0 -1
  133. package/dist/utils/github-catalog.js +0 -25
  134. package/dist/utils/github-catalog.js.map +0 -1
  135. package/dist/utils/naming.d.ts +0 -29
  136. package/dist/utils/naming.js +0 -115
  137. package/dist/utils/naming.js.map +0 -1
  138. package/dist/utils/result.d.ts +0 -4
  139. package/dist/utils/result.js +0 -15
  140. package/dist/utils/result.js.map +0 -1
  141. package/dist/utils/source-id.d.ts +0 -2
  142. package/dist/utils/source-id.js +0 -49
  143. package/dist/utils/source-id.js.map +0 -1
@@ -1,195 +0,0 @@
1
- import os from "node:os";
2
- import path from "node:path";
3
- export const SCHEMA_VERSION = 1;
4
- export function getStateRoot() {
5
- return process.env.SKILL_FLOW_STATE_ROOT
6
- ? path.resolve(process.env.SKILL_FLOW_STATE_ROOT)
7
- : path.join(os.homedir(), ".skillflow");
8
- }
9
- export const TARGET_ORDER = [
10
- "claude-code",
11
- "codex",
12
- "cursor",
13
- "github-copilot",
14
- "gemini-cli",
15
- "opencode",
16
- "openclaw",
17
- "pi",
18
- "windsurf",
19
- "roo-code",
20
- "cline",
21
- "amp",
22
- "kiro",
23
- ];
24
- export const TARGET_DEFINITIONS = {
25
- "claude-code": {
26
- label: "Claude Code",
27
- strategy: "symlink",
28
- envVar: "SKILL_FLOW_TARGET_CLAUDE_CODE",
29
- writerKey: "claude-home",
30
- writeRootCandidates: [path.join(os.homedir(), ".claude", "skills")],
31
- compatReadRootCandidates: [],
32
- },
33
- codex: {
34
- label: "Codex",
35
- strategy: "symlink",
36
- envVar: "SKILL_FLOW_TARGET_CODEX",
37
- writerKey: "agents-skills",
38
- writeRootCandidates: [
39
- path.join(os.homedir(), ".agents", "skills"),
40
- path.join(os.homedir(), ".codex", ".agents", "skills"),
41
- ],
42
- compatReadRootCandidates: [path.join("/etc", "codex", "skills")],
43
- },
44
- cursor: {
45
- label: "Cursor",
46
- strategy: "symlink",
47
- envVar: "SKILL_FLOW_TARGET_CURSOR",
48
- writerKey: "cursor-home",
49
- writeRootCandidates: [path.join(os.homedir(), ".cursor", "skills")],
50
- compatReadRootCandidates: [
51
- path.join(os.homedir(), ".agents", "skills"),
52
- path.join(os.homedir(), ".claude", "skills"),
53
- path.join(os.homedir(), ".codex", "skills"),
54
- ],
55
- },
56
- "github-copilot": {
57
- label: "GitHub Copilot",
58
- strategy: "symlink",
59
- envVar: "SKILL_FLOW_TARGET_GITHUB_COPILOT",
60
- writerKey: "copilot-home",
61
- writeRootCandidates: [path.join(os.homedir(), ".copilot", "skills")],
62
- compatReadRootCandidates: [
63
- path.join(os.homedir(), ".claude", "skills"),
64
- path.join(os.homedir(), ".agents", "skills"),
65
- ],
66
- },
67
- "gemini-cli": {
68
- label: "Gemini CLI",
69
- strategy: "symlink",
70
- envVar: "SKILL_FLOW_TARGET_GEMINI_CLI",
71
- writerKey: "gemini-home",
72
- writeRootCandidates: [path.join(os.homedir(), ".gemini", "skills")],
73
- compatReadRootCandidates: [path.join(os.homedir(), ".agents", "skills")],
74
- },
75
- opencode: {
76
- label: "OpenCode",
77
- strategy: "symlink",
78
- envVar: "SKILL_FLOW_TARGET_OPENCODE",
79
- writerKey: "opencode-home",
80
- writeRootCandidates: [
81
- path.join(os.homedir(), ".config", "opencode", "skills"),
82
- path.join(os.homedir(), ".opencode", "skills"),
83
- ],
84
- compatReadRootCandidates: [
85
- path.join(os.homedir(), ".claude", "skills"),
86
- path.join(os.homedir(), ".agents", "skills"),
87
- ],
88
- },
89
- openclaw: {
90
- label: "OpenClaw",
91
- strategy: "copy",
92
- envVar: "SKILL_FLOW_TARGET_OPENCLAW",
93
- writerKey: "openclaw-home",
94
- writeRootCandidates: [path.join(os.homedir(), ".openclaw", "skills")],
95
- compatReadRootCandidates: [],
96
- },
97
- pi: {
98
- label: "Pi",
99
- strategy: "symlink",
100
- envVar: "SKILL_FLOW_TARGET_PI",
101
- writerKey: "pi-home",
102
- writeRootCandidates: [path.join(os.homedir(), ".pi", "agent", "skills")],
103
- compatReadRootCandidates: [
104
- path.join(os.homedir(), ".agents", "skills"),
105
- path.join(os.homedir(), ".claude", "skills"),
106
- path.join(os.homedir(), ".codex", "skills"),
107
- ],
108
- },
109
- windsurf: {
110
- label: "Windsurf",
111
- strategy: "symlink",
112
- envVar: "SKILL_FLOW_TARGET_WINDSURF",
113
- writerKey: "windsurf-home",
114
- writeRootCandidates: [path.join(os.homedir(), ".codeium", "windsurf", "skills")],
115
- compatReadRootCandidates: [
116
- path.join("/Library", "Application Support", "Windsurf", "skills"),
117
- ],
118
- },
119
- "roo-code": {
120
- label: "Roo Code",
121
- strategy: "symlink",
122
- envVar: "SKILL_FLOW_TARGET_ROO_CODE",
123
- writerKey: "roo-home",
124
- writeRootCandidates: [path.join(os.homedir(), ".roo", "skills")],
125
- compatReadRootCandidates: [],
126
- },
127
- cline: {
128
- label: "Cline",
129
- strategy: "symlink",
130
- envVar: "SKILL_FLOW_TARGET_CLINE",
131
- writerKey: "cline-home",
132
- writeRootCandidates: [path.join(os.homedir(), ".cline", "skills")],
133
- compatReadRootCandidates: [path.join(os.homedir(), ".claude", "skills")],
134
- },
135
- amp: {
136
- label: "Amp",
137
- strategy: "symlink",
138
- envVar: "SKILL_FLOW_TARGET_AMP",
139
- writerKey: "amp-home",
140
- writeRootCandidates: [
141
- path.join(os.homedir(), ".config", "agents", "skills"),
142
- path.join(os.homedir(), ".config", "amp", "skills"),
143
- ],
144
- compatReadRootCandidates: [path.join(os.homedir(), ".claude", "skills")],
145
- },
146
- kiro: {
147
- label: "Kiro",
148
- strategy: "symlink",
149
- envVar: "SKILL_FLOW_TARGET_KIRO",
150
- writerKey: "kiro-home",
151
- writeRootCandidates: [path.join(os.homedir(), ".kiro", "skills")],
152
- compatReadRootCandidates: [],
153
- },
154
- };
155
- export const TARGET_LABELS = Object.fromEntries(TARGET_ORDER.map((target) => [target, TARGET_DEFINITIONS[target].label]));
156
- export const TARGET_STRATEGIES = Object.fromEntries(TARGET_ORDER.map((target) => [target, TARGET_DEFINITIONS[target].strategy]));
157
- export const TARGET_ENV_VARS = Object.fromEntries(TARGET_ORDER.map((target) => [target, TARGET_DEFINITIONS[target].envVar]));
158
- export const TARGET_WRITER_KEYS = Object.fromEntries(TARGET_ORDER.map((target) => [target, TARGET_DEFINITIONS[target].writerKey]));
159
- export const TARGET_PATH_CANDIDATES = Object.fromEntries(TARGET_ORDER.map((target) => [target, TARGET_DEFINITIONS[target].writeRootCandidates]));
160
- export const TARGET_COMPAT_READ_CANDIDATES = Object.fromEntries(TARGET_ORDER.map((target) => [
161
- target,
162
- TARGET_DEFINITIONS[target].compatReadRootCandidates,
163
- ]));
164
- export function getExplicitTargetNames() {
165
- return TARGET_ORDER.filter((target) => {
166
- const value = process.env[TARGET_DEFINITIONS[target].envVar]?.trim();
167
- return Boolean(value);
168
- });
169
- }
170
- export function isExplicitTargetMode() {
171
- return getExplicitTargetNames().length > 0;
172
- }
173
- export function getTargetDetectionCandidates(target) {
174
- const definition = TARGET_DEFINITIONS[target];
175
- const override = process.env[definition.envVar]?.trim();
176
- if (isExplicitTargetMode()) {
177
- return override ? [override] : [];
178
- }
179
- return override ? [override] : definition.writeRootCandidates;
180
- }
181
- export function getTargetScanRoots(target) {
182
- const definition = TARGET_DEFINITIONS[target];
183
- const override = process.env[definition.envVar]?.trim();
184
- if (isExplicitTargetMode()) {
185
- return override ? [override] : [];
186
- }
187
- return [
188
- ...new Set([
189
- ...(override ? [override] : []),
190
- ...definition.writeRootCandidates,
191
- ...definition.compatReadRootCandidates,
192
- ]),
193
- ];
194
- }
195
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { SkillCandidate } from "../domain/types.js";
2
- export declare function buildFindCommand(candidate: SkillCandidate): string | null;
@@ -1,29 +0,0 @@
1
- export function buildFindCommand(candidate) {
2
- if (candidate.action.type === "none") {
3
- return null;
4
- }
5
- if (candidate.action.type === "add-clawhub") {
6
- const suffix = candidate.action.version ? `@${candidate.action.version}` : "";
7
- return `skill-flow add clawhub:${candidate.action.slug}${suffix}`;
8
- }
9
- const parts = ["skill-flow", "add", shellQuote(candidate.action.locator)];
10
- const requestedPath = normalizeRequestedPath(candidate.action.requestedPath);
11
- if (requestedPath) {
12
- parts.push("--path", shellQuote(requestedPath));
13
- }
14
- return parts.join(" ");
15
- }
16
- function normalizeRequestedPath(requestedPath) {
17
- if (!requestedPath) {
18
- return undefined;
19
- }
20
- const normalized = requestedPath.trim().replace(/^\.\/+/, "").replace(/\/+$/, "");
21
- return normalized.length > 0 && normalized !== "." ? normalized : undefined;
22
- }
23
- function shellQuote(value) {
24
- if (/^[A-Za-z0-9_./:@-]+$/.test(value)) {
25
- return value;
26
- }
27
- return `'${value.replace(/'/g, `'\"'\"'`)}'`;
28
- }
29
- //# sourceMappingURL=find-command.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-command.js","sourceRoot":"","sources":["../../src/utils/find-command.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gBAAgB,CAAC,SAAyB;IACxD,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,0BAA0B,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,sBAAsB,CAAC,aAAsB;IACpD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC;AAC/C,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { DeploymentAction, DeploymentTargetName, DoctorIssue, SkillCandidate, WorkflowSummary } from "../domain/types.js";
2
- export declare function formatWorkflowList(summaries: WorkflowSummary[]): string;
3
- export declare function countActions(actions: DeploymentAction[]): Record<string, number>;
4
- export declare function formatActionSummary(actions: DeploymentAction[]): string;
5
- export declare function formatTargetName(target: DeploymentTargetName): string;
6
- export declare function formatDoctorIssue(issue: DoctorIssue): string;
7
- export declare function formatSkillCandidates(candidates: SkillCandidate[]): string;
@@ -1,68 +0,0 @@
1
- import { TARGET_LABELS } from "./constants.js";
2
- import { buildFindCommand } from "./find-command.js";
3
- import { formatGroupLabel } from "./naming.js";
4
- export function formatWorkflowList(summaries) {
5
- if (summaries.length === 0) {
6
- return [
7
- "No skills groups yet",
8
- "Add a source to discover a grouped set of related skills.",
9
- ].join("\n");
10
- }
11
- return summaries
12
- .map((summary) => {
13
- const invalidCount = summary.lock?.invalidLeafs.length ?? 0;
14
- const warningCount = summary.leafs.reduce((count, leaf) => count + leaf.metadataWarnings.length, 0);
15
- const suffixParts = [];
16
- if (warningCount > 0) {
17
- suffixParts.push(`${warningCount} warnings`);
18
- }
19
- if (invalidCount > 0) {
20
- suffixParts.push(`${invalidCount} skipped`);
21
- }
22
- const suffix = suffixParts.length > 0 ? `, ${suffixParts.join(", ")}` : "";
23
- return `${formatGroupLabel(summary.source)} ${summary.health} ${summary.leafs.length} skills ${summary.activeTargetCount} targets${suffix}`;
24
- })
25
- .join("\n");
26
- }
27
- export function countActions(actions) {
28
- return actions.reduce((acc, action) => {
29
- acc[action.kind] = (acc[action.kind] ?? 0) + 1;
30
- return acc;
31
- }, {});
32
- }
33
- export function formatActionSummary(actions) {
34
- const counts = countActions(actions);
35
- return ["create", "update", "remove", "noop", "blocked"]
36
- .map((kind) => `${kind}:${counts[kind] ?? 0}`)
37
- .join(" ");
38
- }
39
- export function formatTargetName(target) {
40
- return TARGET_LABELS[target];
41
- }
42
- export function formatDoctorIssue(issue) {
43
- const target = issue.target ? ` ${formatTargetName(issue.target)}` : "";
44
- const leaf = issue.leafLabel
45
- ? ` skill:${issue.leafLabel}`
46
- : issue.leafId
47
- ? ` skill:${issue.leafId}`
48
- : "";
49
- return `[${issue.severity.toUpperCase()}] ${issue.sourceLabel ?? issue.sourceId}${target}${leaf} ${issue.message}`;
50
- }
51
- export function formatSkillCandidates(candidates) {
52
- if (candidates.length === 0) {
53
- return "No matching skills found.";
54
- }
55
- return candidates
56
- .map((candidate, index) => {
57
- const location = candidate.relativePath ? ` · ${candidate.relativePath}` : "";
58
- const next = buildFindCommand(candidate);
59
- return [
60
- `${index + 1}. ${candidate.title} ${candidate.source}${candidate.installed ? " installed" : ""}`,
61
- candidate.description,
62
- `${candidate.sourceLabel}${location}`,
63
- next ? `next: ${next}` : "next: already installed",
64
- ].join("\n");
65
- })
66
- .join("\n\n");
67
- }
68
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/utils/format.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export declare function pathExists(targetPath: string): Promise<boolean>;
2
- export declare function ensureDir(targetPath: string): Promise<void>;
3
- export declare function readJsonFile<T>(filePath: string, fallback: T): Promise<T>;
4
- export declare function writeJsonFile(filePath: string, value: unknown): Promise<void>;
5
- export declare function withFileLock<T>(lockPath: string, task: () => Promise<T>, options?: {
6
- pollMs?: number;
7
- staleMs?: number;
8
- timeoutMs?: number;
9
- }): Promise<T>;
10
- export declare function removePath(targetPath: string): Promise<void>;
11
- export declare function isPathInside(rootPath: string, targetPath: string): boolean;
12
- export declare function copyDirectory(sourcePath: string, targetPath: string): Promise<void>;
13
- export declare function createSymlink(sourcePath: string, targetPath: string): Promise<void>;
14
- export declare function isBrokenSymlink(targetPath: string): Promise<boolean>;
15
- export declare function hashDirectory(rootPath: string): Promise<string>;
16
- export declare function slugify(value: string): string;
package/dist/utils/fs.js DELETED
@@ -1,144 +0,0 @@
1
- import crypto from "node:crypto";
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- export async function pathExists(targetPath) {
5
- try {
6
- await fs.lstat(targetPath);
7
- return true;
8
- }
9
- catch {
10
- return false;
11
- }
12
- }
13
- export async function ensureDir(targetPath) {
14
- await fs.mkdir(targetPath, { recursive: true });
15
- }
16
- export async function readJsonFile(filePath, fallback) {
17
- try {
18
- const raw = await fs.readFile(filePath, "utf8");
19
- return JSON.parse(raw);
20
- }
21
- catch {
22
- return fallback;
23
- }
24
- }
25
- export async function writeJsonFile(filePath, value) {
26
- await ensureDir(path.dirname(filePath));
27
- const tempPath = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
28
- await fs.writeFile(tempPath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
29
- await fs.rename(tempPath, filePath);
30
- }
31
- export async function withFileLock(lockPath, task, options = {}) {
32
- const pollMs = options.pollMs ?? 25;
33
- const staleMs = options.staleMs ?? 5 * 60_000;
34
- const timeoutMs = options.timeoutMs ?? 120_000;
35
- const start = Date.now();
36
- while (true) {
37
- try {
38
- await fs.mkdir(lockPath);
39
- break;
40
- }
41
- catch (error) {
42
- if (!isAlreadyExistsError(error)) {
43
- throw error;
44
- }
45
- const stale = await isLockStale(lockPath, staleMs);
46
- if (stale) {
47
- await fs.rm(lockPath, { recursive: true, force: true });
48
- continue;
49
- }
50
- if (Date.now() - start >= timeoutMs) {
51
- throw new Error(`Timed out waiting for state lock at ${lockPath}`);
52
- }
53
- await sleep(pollMs);
54
- }
55
- }
56
- try {
57
- await fs.writeFile(path.join(lockPath, "owner.json"), `${JSON.stringify({ pid: process.pid, acquiredAt: new Date().toISOString() }, null, 2)}\n`, "utf8");
58
- return await task();
59
- }
60
- finally {
61
- await fs.rm(lockPath, { recursive: true, force: true });
62
- }
63
- }
64
- export async function removePath(targetPath) {
65
- await fs.rm(targetPath, { recursive: true, force: true });
66
- }
67
- export function isPathInside(rootPath, targetPath) {
68
- const relative = path.relative(path.resolve(rootPath), path.resolve(targetPath));
69
- return relative.length > 0 && !relative.startsWith("..") && !path.isAbsolute(relative);
70
- }
71
- export async function copyDirectory(sourcePath, targetPath) {
72
- await removePath(targetPath);
73
- await fs.cp(sourcePath, targetPath, { recursive: true, dereference: false });
74
- }
75
- export async function createSymlink(sourcePath, targetPath) {
76
- await removePath(targetPath);
77
- await ensureDir(path.dirname(targetPath));
78
- await fs.symlink(sourcePath, targetPath, "junction");
79
- }
80
- export async function isBrokenSymlink(targetPath) {
81
- try {
82
- const stats = await fs.lstat(targetPath);
83
- if (!stats.isSymbolicLink()) {
84
- return false;
85
- }
86
- const resolved = await fs.readlink(targetPath);
87
- const absolute = path.resolve(path.dirname(targetPath), resolved);
88
- return !(await pathExists(absolute));
89
- }
90
- catch {
91
- return false;
92
- }
93
- }
94
- export async function hashDirectory(rootPath) {
95
- const hash = crypto.createHash("sha256");
96
- async function walk(currentPath) {
97
- const entries = await fs.readdir(currentPath, { withFileTypes: true });
98
- entries.sort((left, right) => left.name.localeCompare(right.name));
99
- for (const entry of entries) {
100
- if (entry.name === ".git" || entry.name === "node_modules") {
101
- continue;
102
- }
103
- const entryPath = path.join(currentPath, entry.name);
104
- const relativePath = path.relative(rootPath, entryPath);
105
- hash.update(relativePath);
106
- if (entry.isDirectory()) {
107
- hash.update("dir");
108
- await walk(entryPath);
109
- }
110
- else if (entry.isFile()) {
111
- hash.update("file");
112
- hash.update(await fs.readFile(entryPath));
113
- }
114
- }
115
- }
116
- await walk(rootPath);
117
- return hash.digest("hex");
118
- }
119
- export function slugify(value) {
120
- return value
121
- .toLowerCase()
122
- .replace(/[^a-z0-9]+/g, "-")
123
- .replace(/^-+|-+$/g, "")
124
- .slice(0, 80);
125
- }
126
- async function isLockStale(lockPath, staleMs) {
127
- try {
128
- const stats = await fs.stat(lockPath);
129
- return Date.now() - stats.mtimeMs > staleMs;
130
- }
131
- catch {
132
- return false;
133
- }
134
- }
135
- function isAlreadyExistsError(error) {
136
- return (typeof error === "object" &&
137
- error !== null &&
138
- "code" in error &&
139
- error.code === "EEXIST");
140
- }
141
- function sleep(ms) {
142
- return new Promise((resolve) => setTimeout(resolve, ms));
143
- }
144
- //# sourceMappingURL=fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare function git(args: string[], options?: {
2
- cwd?: string;
3
- }): Promise<string>;
package/dist/utils/git.js DELETED
@@ -1,12 +0,0 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- const execFileAsync = promisify(execFile);
4
- export async function git(args, options = {}) {
5
- const { stdout } = await execFileAsync("git", args, {
6
- cwd: options.cwd,
7
- encoding: "utf8",
8
- env: process.env,
9
- });
10
- return stdout.trim();
11
- }
12
- //# sourceMappingURL=git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,IAAc,EACd,UAA4B,EAAE;IAE9B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE;QAClD,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,MAAM;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
@@ -1 +0,0 @@
1
- export declare function fetchGitHubSkillPaths(locator: string, branch: string): Promise<string[]>;
@@ -1,25 +0,0 @@
1
- import { parseGitHubRepo } from "./naming.js";
2
- export async function fetchGitHubSkillPaths(locator, branch) {
3
- const repo = parseGitHubRepo(locator);
4
- if (!repo) {
5
- throw new Error(`Unsupported GitHub locator '${locator}'.`);
6
- }
7
- const response = await fetch(`https://api.github.com/repos/${repo.owner}/${repo.repo}/git/trees/${branch}?recursive=1`, { headers: buildGitHubHeaders() });
8
- if (!response.ok) {
9
- throw new Error(`GitHub tree request failed with ${response.status}.`);
10
- }
11
- const payload = await response.json();
12
- return (payload.tree ?? [])
13
- .filter((entry) => entry.type === "blob" && entry.path?.endsWith("SKILL.md"))
14
- .map((entry) => entry.path)
15
- .sort((left, right) => left.localeCompare(right));
16
- }
17
- function buildGitHubHeaders() {
18
- return {
19
- Accept: "application/vnd.github+json",
20
- ...(process.env.GITHUB_TOKEN
21
- ? { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` }
22
- : {}),
23
- };
24
- }
25
- //# sourceMappingURL=github-catalog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-catalog.js","sourceRoot":"","sources":["../../src/utils/github-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS9C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,MAAc;IAEd,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,gCAAgC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,cAAc,MAAM,cAAc,EACzF,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAClC,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwB,CAAC;IAC5D,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAK,CAAC;SAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,MAAM,EAAE,6BAA6B;QACrC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY;YAC1B,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;YACzD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
@@ -1,29 +0,0 @@
1
- type SourceLike = {
2
- id: string;
3
- locator: string;
4
- displayName: string;
5
- kind?: "local" | "git" | "clawhub";
6
- };
7
- type ProjectedSkillInput = {
8
- leafId: string;
9
- groupId: string;
10
- groupName: string;
11
- groupAuthor?: string | undefined;
12
- skillName: string;
13
- };
14
- export declare function parseGitHubRepo(locator: string): {
15
- owner: string;
16
- repo: string;
17
- } | null;
18
- export declare function formatGroupLabel(source: SourceLike): string;
19
- export declare function formatGroupRef(source: SourceLike): string;
20
- export declare function buildProjectedSkillName(groupName: string, skillName: string, groupAuthor?: string): string;
21
- export declare function buildProjectedSkillNameCandidates({ preferredName, groupId, groupName, groupAuthor, skillName, }: {
22
- preferredName: string;
23
- groupId: string;
24
- groupName: string;
25
- groupAuthor?: string | undefined;
26
- skillName: string;
27
- }): string[];
28
- export declare function resolveProjectedSkillNames(items: ProjectedSkillInput[]): Map<string, string>;
29
- export {};