@openweave/weave-skills 1.0.0 → 1.0.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 (82) hide show
  1. package/dist/cjs/config-loader.d.ts +52 -0
  2. package/dist/cjs/config-loader.d.ts.map +1 -0
  3. package/dist/cjs/config-loader.js +132 -0
  4. package/dist/cjs/config-loader.js.map +1 -0
  5. package/dist/cjs/index.d.ts +12 -0
  6. package/dist/cjs/index.d.ts.map +1 -0
  7. package/dist/cjs/index.js +44 -0
  8. package/dist/cjs/index.js.map +1 -0
  9. package/dist/cjs/package.json +1 -0
  10. package/dist/cjs/skill-registry.d.ts +96 -0
  11. package/dist/cjs/skill-registry.d.ts.map +1 -0
  12. package/dist/cjs/skill-registry.js +222 -0
  13. package/dist/cjs/skill-registry.js.map +1 -0
  14. package/dist/cjs/skills/auto-fix.d.ts +35 -0
  15. package/dist/cjs/skills/auto-fix.d.ts.map +1 -0
  16. package/dist/cjs/skills/auto-fix.js +125 -0
  17. package/dist/cjs/skills/auto-fix.js.map +1 -0
  18. package/dist/cjs/skills/cli-interactive.d.ts +60 -0
  19. package/dist/cjs/skills/cli-interactive.d.ts.map +1 -0
  20. package/dist/cjs/skills/cli-interactive.js +271 -0
  21. package/dist/cjs/skills/cli-interactive.js.map +1 -0
  22. package/dist/cjs/skills/code-review.d.ts +39 -0
  23. package/dist/cjs/skills/code-review.d.ts.map +1 -0
  24. package/dist/cjs/skills/code-review.js +208 -0
  25. package/dist/cjs/skills/code-review.js.map +1 -0
  26. package/dist/cjs/skills/commit-composer.d.ts +51 -0
  27. package/dist/cjs/skills/commit-composer.d.ts.map +1 -0
  28. package/dist/cjs/skills/commit-composer.js +231 -0
  29. package/dist/cjs/skills/commit-composer.js.map +1 -0
  30. package/dist/cjs/skills/container-advisor.d.ts +43 -0
  31. package/dist/cjs/skills/container-advisor.d.ts.map +1 -0
  32. package/dist/cjs/skills/container-advisor.js +278 -0
  33. package/dist/cjs/skills/container-advisor.js.map +1 -0
  34. package/dist/cjs/skills/context-memory.d.ts +44 -0
  35. package/dist/cjs/skills/context-memory.d.ts.map +1 -0
  36. package/dist/cjs/skills/context-memory.js +167 -0
  37. package/dist/cjs/skills/context-memory.js.map +1 -0
  38. package/dist/cjs/skills/dep-audit.d.ts +55 -0
  39. package/dist/cjs/skills/dep-audit.d.ts.map +1 -0
  40. package/dist/cjs/skills/dep-audit.js +255 -0
  41. package/dist/cjs/skills/dep-audit.js.map +1 -0
  42. package/dist/cjs/skills/deploy-provision.d.ts +47 -0
  43. package/dist/cjs/skills/deploy-provision.d.ts.map +1 -0
  44. package/dist/cjs/skills/deploy-provision.js +273 -0
  45. package/dist/cjs/skills/deploy-provision.js.map +1 -0
  46. package/dist/cjs/skills/docs-gen.d.ts +36 -0
  47. package/dist/cjs/skills/docs-gen.d.ts.map +1 -0
  48. package/dist/cjs/skills/docs-gen.js +193 -0
  49. package/dist/cjs/skills/docs-gen.js.map +1 -0
  50. package/dist/cjs/skills/index.d.ts +19 -0
  51. package/dist/cjs/skills/index.d.ts.map +1 -0
  52. package/dist/cjs/skills/index.js +73 -0
  53. package/dist/cjs/skills/index.js.map +1 -0
  54. package/dist/cjs/skills/multi-repo.d.ts +50 -0
  55. package/dist/cjs/skills/multi-repo.d.ts.map +1 -0
  56. package/dist/cjs/skills/multi-repo.js +181 -0
  57. package/dist/cjs/skills/multi-repo.js.map +1 -0
  58. package/dist/cjs/skills/onboarding.d.ts +48 -0
  59. package/dist/cjs/skills/onboarding.d.ts.map +1 -0
  60. package/dist/cjs/skills/onboarding.js +253 -0
  61. package/dist/cjs/skills/onboarding.js.map +1 -0
  62. package/dist/cjs/skills/perf-profile.d.ts +36 -0
  63. package/dist/cjs/skills/perf-profile.d.ts.map +1 -0
  64. package/dist/cjs/skills/perf-profile.js +184 -0
  65. package/dist/cjs/skills/perf-profile.js.map +1 -0
  66. package/dist/cjs/skills/pipeline-aware.d.ts +33 -0
  67. package/dist/cjs/skills/pipeline-aware.d.ts.map +1 -0
  68. package/dist/cjs/skills/pipeline-aware.js +231 -0
  69. package/dist/cjs/skills/pipeline-aware.js.map +1 -0
  70. package/dist/cjs/skills/refactor.d.ts +33 -0
  71. package/dist/cjs/skills/refactor.d.ts.map +1 -0
  72. package/dist/cjs/skills/refactor.js +214 -0
  73. package/dist/cjs/skills/refactor.js.map +1 -0
  74. package/dist/cjs/skills/test-gen.d.ts +36 -0
  75. package/dist/cjs/skills/test-gen.d.ts.map +1 -0
  76. package/dist/cjs/skills/test-gen.js +159 -0
  77. package/dist/cjs/skills/test-gen.js.map +1 -0
  78. package/dist/cjs/types.d.ts +133 -0
  79. package/dist/cjs/types.d.ts.map +1 -0
  80. package/dist/cjs/types.js +9 -0
  81. package/dist/cjs/types.js.map +1 -0
  82. package/package.json +5 -3
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * Skill: docs-gen
4
+ *
5
+ * Generates documentation stubs for exported TypeScript entities that lack JSDoc,
6
+ * and produces a CHANGELOG draft from conventional commits.
7
+ *
8
+ * Two modes (controlled via ctx.graph options):
9
+ * - `mode: 'jsdoc'` — scan for undocumented exports → generate JSDoc stubs
10
+ * - `mode: 'changelog'` — parse git log → draft CHANGELOG.md section
11
+ * - `mode: 'both'` — run both (default)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.docsGenSkill = void 0;
15
+ exports.findUndocumentedExports = findUndocumentedExports;
16
+ exports.parseConventionalCommits = parseConventionalCommits;
17
+ exports.renderChangelogSection = renderChangelogSection;
18
+ const node_fs_1 = require("node:fs");
19
+ const node_path_1 = require("node:path");
20
+ const node_child_process_1 = require("node:child_process");
21
+ // ---------------------------------------------------------------------------
22
+ // JSDoc analysis
23
+ // ---------------------------------------------------------------------------
24
+ const EXPORTED_SYMBOL_RE = /^(export\s+(?:async\s+)?function|export\s+(?:abstract\s+)?class|export\s+(?:const|let|var)\s+\w+|export\s+interface\s+\w+|export\s+type\s+\w+)/;
25
+ const NAME_RE = /(?:function|class|interface|type|const|let|var)\s+(\w+)/;
26
+ function findUndocumentedExports(source, filePath) {
27
+ const lines = source.split('\n');
28
+ const results = [];
29
+ for (let i = 0; i < lines.length; i++) {
30
+ const line = lines[i];
31
+ if (!EXPORTED_SYMBOL_RE.test(line))
32
+ continue;
33
+ // Check previous lines for a JSDoc block
34
+ const prevLine = lines[i - 1]?.trimEnd() ?? '';
35
+ const hasDocs = prevLine.trimEnd().endsWith('*/') || prevLine.trimStart().startsWith('* ') || prevLine.trimStart().startsWith('/**');
36
+ if (hasDocs)
37
+ continue;
38
+ const nameMatch = NAME_RE.exec(line);
39
+ if (!nameMatch)
40
+ continue;
41
+ const name = nameMatch[1];
42
+ let kind = 'const';
43
+ if (/export\s+(?:async\s+)?function/.test(line))
44
+ kind = 'function';
45
+ else if (/export\s+(?:abstract\s+)?class/.test(line))
46
+ kind = 'class';
47
+ else if (/export\s+interface/.test(line))
48
+ kind = 'interface';
49
+ else if (/export\s+type/.test(line))
50
+ kind = 'type';
51
+ const stub = generateJsDoc(name, kind);
52
+ results.push({ file: filePath, line: i + 1, name, kind, stub });
53
+ }
54
+ return results;
55
+ }
56
+ function generateJsDoc(name, kind) {
57
+ const lines = ['/**'];
58
+ lines.push(` * ${name}`);
59
+ if (kind === 'function') {
60
+ lines.push(` *`);
61
+ lines.push(` * @param args - TODO: document parameters`);
62
+ lines.push(` * @returns TODO: describe return value`);
63
+ }
64
+ else if (kind === 'class') {
65
+ lines.push(` *`);
66
+ lines.push(` * @example`);
67
+ lines.push(` * \`\`\`typescript`);
68
+ lines.push(` * const instance = new ${name}();`);
69
+ lines.push(` * \`\`\``);
70
+ }
71
+ lines.push(` */`);
72
+ return lines.join('\n');
73
+ }
74
+ // ---------------------------------------------------------------------------
75
+ // Changelog from git log
76
+ // ---------------------------------------------------------------------------
77
+ const CONVENTIONAL_RE = /^([a-z]+)(?:\(([^)]+)\))?!?:\s+(.+)$/;
78
+ function parseConventionalCommits(gitLog) {
79
+ return gitLog
80
+ .split('\n')
81
+ .filter(Boolean)
82
+ .map((line) => {
83
+ const [hash, ...rest] = line.split(' ');
84
+ const msg = rest.join(' ');
85
+ const m = CONVENTIONAL_RE.exec(msg);
86
+ if (!m)
87
+ return null;
88
+ return { hash: hash.slice(0, 7), type: m[1], scope: m[2] ?? '', message: m[3] };
89
+ })
90
+ .filter((e) => e !== null);
91
+ }
92
+ function renderChangelogSection(entries, version = 'Unreleased') {
93
+ if (entries.length === 0)
94
+ return `## [${version}]\n\n_No conventional commits found._\n`;
95
+ const groups = {};
96
+ for (const e of entries) {
97
+ (groups[e.type] ??= []).push(e);
98
+ }
99
+ const ORDER = ['feat', 'fix', 'perf', 'refactor', 'docs', 'test', 'chore', 'ci'];
100
+ const LABELS = {
101
+ feat: '✨ Features', fix: '🐛 Bug Fixes', perf: '⚡ Performance',
102
+ refactor: '♻️ Refactoring', docs: '📚 Documentation', test: '🧪 Tests',
103
+ chore: '🔧 Chores', ci: '⚙️ CI',
104
+ };
105
+ const lines = [`## [${version}] — ${new Date().toISOString().slice(0, 10)}`, ''];
106
+ for (const type of [...ORDER, ...Object.keys(groups).filter((t) => !ORDER.includes(t))]) {
107
+ if (!groups[type])
108
+ continue;
109
+ lines.push(`### ${LABELS[type] ?? type}`);
110
+ for (const e of groups[type]) {
111
+ const scope = e.scope ? ` **${e.scope}:**` : '';
112
+ lines.push(`- \`${e.hash}\`${scope} ${e.message}`);
113
+ }
114
+ lines.push('');
115
+ }
116
+ return lines.join('\n');
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // Skill
120
+ // ---------------------------------------------------------------------------
121
+ exports.docsGenSkill = {
122
+ id: 'docs-gen',
123
+ name: 'Docs Generator',
124
+ description: 'Generates JSDoc stubs for undocumented exports and drafts CHANGELOG from conventional commits',
125
+ version: '1.0.0',
126
+ enabled: false,
127
+ tags: ['dev', 'docs'],
128
+ async execute(ctx) {
129
+ const opts = ctx.graph ?? {};
130
+ const mode = String(opts['mode'] ?? 'both');
131
+ const version = String(opts['version'] ?? 'Unreleased');
132
+ const undocumented = [];
133
+ const changelog = [];
134
+ let jsDocStubs = '';
135
+ let changelogSection = '';
136
+ // --- JSDoc mode ---
137
+ if (mode === 'jsdoc' || mode === 'both') {
138
+ const tsFiles = ctx.files.filter((f) => f.endsWith('.ts') && !f.endsWith('.test.ts') && !f.endsWith('.d.ts') && !f.includes('/dist/'));
139
+ for (const relPath of tsFiles) {
140
+ const absPath = (0, node_path_1.join)(ctx.projectRoot, relPath);
141
+ if (!(0, node_fs_1.existsSync)(absPath))
142
+ continue;
143
+ try {
144
+ const content = (0, node_fs_1.readFileSync)(absPath, 'utf-8');
145
+ undocumented.push(...findUndocumentedExports(content, relPath));
146
+ }
147
+ catch { /* skip unreadable */ }
148
+ }
149
+ if (undocumented.length > 0) {
150
+ jsDocStubs = undocumented
151
+ .map((u) => `// ${u.file}:${u.line} — ${u.name}\n${u.stub}`)
152
+ .join('\n\n');
153
+ }
154
+ }
155
+ // --- Changelog mode ---
156
+ if (mode === 'changelog' || mode === 'both') {
157
+ try {
158
+ const gitLog = (0, node_child_process_1.execSync)('git log --oneline --no-merges -50', {
159
+ cwd: ctx.projectRoot,
160
+ stdio: 'pipe',
161
+ encoding: 'utf-8',
162
+ });
163
+ const entries = parseConventionalCommits(gitLog);
164
+ changelog.push(...entries);
165
+ changelogSection = renderChangelogSection(entries, version);
166
+ }
167
+ catch {
168
+ changelogSection = '_(git log unavailable)_';
169
+ }
170
+ }
171
+ const lines = [`📚 Docs Generator`, ''];
172
+ if (mode !== 'changelog') {
173
+ lines.push(` JSDoc gaps: ${undocumented.length} undocumented exports`);
174
+ if (undocumented.length > 0) {
175
+ for (const u of undocumented.slice(0, 10)) {
176
+ lines.push(` ⬜ ${u.file}:${u.line} — ${u.kind} ${u.name}`);
177
+ }
178
+ if (undocumented.length > 10)
179
+ lines.push(` … and ${undocumented.length - 10} more`);
180
+ }
181
+ }
182
+ if (mode !== 'jsdoc') {
183
+ lines.push('');
184
+ lines.push(` CHANGELOG: ${changelog.length} conventional commit(s) parsed`);
185
+ }
186
+ return {
187
+ success: true,
188
+ output: lines.join('\n'),
189
+ data: { undocumented, changelog, jsDocStubs, changelogSection },
190
+ };
191
+ },
192
+ };
193
+ //# sourceMappingURL=docs-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-gen.js","sourceRoot":"","sources":["../../../src/skills/docs-gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export { autoFixSkill } from './auto-fix.js';
2
+ export { codeReviewSkill } from './code-review.js';
3
+ export { testGenSkill } from './test-gen.js';
4
+ export { docsGenSkill } from './docs-gen.js';
5
+ export { refactorSkill } from './refactor.js';
6
+ export { pipelineAwareSkill } from './pipeline-aware.js';
7
+ export { depAuditSkill } from './dep-audit.js';
8
+ export { perfProfileSkill } from './perf-profile.js';
9
+ export { containerAdvisorSkill } from './container-advisor.js';
10
+ export { deployProvisionSkill } from './deploy-provision.js';
11
+ export { onboardingSkill } from './onboarding.js';
12
+ export { commitComposerSkill } from './commit-composer.js';
13
+ export { contextMemorySkill } from './context-memory.js';
14
+ export { multiRepoSkill } from './multi-repo.js';
15
+ export { cliInteractiveSkill } from './cli-interactive.js';
16
+ export declare const CORE_DEV_SKILLS: import("../types.js").SkillModule[];
17
+ export declare const DEVOPS_SKILLS: import("../types.js").SkillModule[];
18
+ export declare const DEV_EXPERIENCE_SKILLS: import("../types.js").SkillModule[];
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAQ7D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAa3D,eAAO,MAAM,eAAe,qCAM3B,CAAC;AAEF,eAAO,MAAM,aAAa,qCAMzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,qCAMjC,CAAC"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEV_EXPERIENCE_SKILLS = exports.DEVOPS_SKILLS = exports.CORE_DEV_SKILLS = exports.cliInteractiveSkill = exports.multiRepoSkill = exports.contextMemorySkill = exports.commitComposerSkill = exports.onboardingSkill = exports.deployProvisionSkill = exports.containerAdvisorSkill = exports.perfProfileSkill = exports.depAuditSkill = exports.pipelineAwareSkill = exports.refactorSkill = exports.docsGenSkill = exports.testGenSkill = exports.codeReviewSkill = exports.autoFixSkill = void 0;
4
+ // M20 — Core Dev Skills
5
+ var auto_fix_js_1 = require("./auto-fix.js");
6
+ Object.defineProperty(exports, "autoFixSkill", { enumerable: true, get: function () { return auto_fix_js_1.autoFixSkill; } });
7
+ var code_review_js_1 = require("./code-review.js");
8
+ Object.defineProperty(exports, "codeReviewSkill", { enumerable: true, get: function () { return code_review_js_1.codeReviewSkill; } });
9
+ var test_gen_js_1 = require("./test-gen.js");
10
+ Object.defineProperty(exports, "testGenSkill", { enumerable: true, get: function () { return test_gen_js_1.testGenSkill; } });
11
+ var docs_gen_js_1 = require("./docs-gen.js");
12
+ Object.defineProperty(exports, "docsGenSkill", { enumerable: true, get: function () { return docs_gen_js_1.docsGenSkill; } });
13
+ var refactor_js_1 = require("./refactor.js");
14
+ Object.defineProperty(exports, "refactorSkill", { enumerable: true, get: function () { return refactor_js_1.refactorSkill; } });
15
+ // M21 — DevOps Skills
16
+ var pipeline_aware_js_1 = require("./pipeline-aware.js");
17
+ Object.defineProperty(exports, "pipelineAwareSkill", { enumerable: true, get: function () { return pipeline_aware_js_1.pipelineAwareSkill; } });
18
+ var dep_audit_js_1 = require("./dep-audit.js");
19
+ Object.defineProperty(exports, "depAuditSkill", { enumerable: true, get: function () { return dep_audit_js_1.depAuditSkill; } });
20
+ var perf_profile_js_1 = require("./perf-profile.js");
21
+ Object.defineProperty(exports, "perfProfileSkill", { enumerable: true, get: function () { return perf_profile_js_1.perfProfileSkill; } });
22
+ var container_advisor_js_1 = require("./container-advisor.js");
23
+ Object.defineProperty(exports, "containerAdvisorSkill", { enumerable: true, get: function () { return container_advisor_js_1.containerAdvisorSkill; } });
24
+ var deploy_provision_js_1 = require("./deploy-provision.js");
25
+ Object.defineProperty(exports, "deployProvisionSkill", { enumerable: true, get: function () { return deploy_provision_js_1.deployProvisionSkill; } });
26
+ const auto_fix_js_2 = require("./auto-fix.js");
27
+ const code_review_js_2 = require("./code-review.js");
28
+ const test_gen_js_2 = require("./test-gen.js");
29
+ const docs_gen_js_2 = require("./docs-gen.js");
30
+ const refactor_js_2 = require("./refactor.js");
31
+ // M22 — Developer Experience Skills
32
+ var onboarding_js_1 = require("./onboarding.js");
33
+ Object.defineProperty(exports, "onboardingSkill", { enumerable: true, get: function () { return onboarding_js_1.onboardingSkill; } });
34
+ var commit_composer_js_1 = require("./commit-composer.js");
35
+ Object.defineProperty(exports, "commitComposerSkill", { enumerable: true, get: function () { return commit_composer_js_1.commitComposerSkill; } });
36
+ var context_memory_js_1 = require("./context-memory.js");
37
+ Object.defineProperty(exports, "contextMemorySkill", { enumerable: true, get: function () { return context_memory_js_1.contextMemorySkill; } });
38
+ var multi_repo_js_1 = require("./multi-repo.js");
39
+ Object.defineProperty(exports, "multiRepoSkill", { enumerable: true, get: function () { return multi_repo_js_1.multiRepoSkill; } });
40
+ var cli_interactive_js_1 = require("./cli-interactive.js");
41
+ Object.defineProperty(exports, "cliInteractiveSkill", { enumerable: true, get: function () { return cli_interactive_js_1.cliInteractiveSkill; } });
42
+ const pipeline_aware_js_2 = require("./pipeline-aware.js");
43
+ const dep_audit_js_2 = require("./dep-audit.js");
44
+ const perf_profile_js_2 = require("./perf-profile.js");
45
+ const container_advisor_js_2 = require("./container-advisor.js");
46
+ const deploy_provision_js_2 = require("./deploy-provision.js");
47
+ const onboarding_js_2 = require("./onboarding.js");
48
+ const commit_composer_js_2 = require("./commit-composer.js");
49
+ const context_memory_js_2 = require("./context-memory.js");
50
+ const multi_repo_js_2 = require("./multi-repo.js");
51
+ const cli_interactive_js_2 = require("./cli-interactive.js");
52
+ exports.CORE_DEV_SKILLS = [
53
+ auto_fix_js_2.autoFixSkill,
54
+ code_review_js_2.codeReviewSkill,
55
+ test_gen_js_2.testGenSkill,
56
+ docs_gen_js_2.docsGenSkill,
57
+ refactor_js_2.refactorSkill,
58
+ ];
59
+ exports.DEVOPS_SKILLS = [
60
+ pipeline_aware_js_2.pipelineAwareSkill,
61
+ dep_audit_js_2.depAuditSkill,
62
+ perf_profile_js_2.perfProfileSkill,
63
+ container_advisor_js_2.containerAdvisorSkill,
64
+ deploy_provision_js_2.deployProvisionSkill,
65
+ ];
66
+ exports.DEV_EXPERIENCE_SKILLS = [
67
+ onboarding_js_2.onboardingSkill,
68
+ commit_composer_js_2.commitComposerSkill,
69
+ context_memory_js_2.contextMemorySkill,
70
+ multi_repo_js_2.multiRepoSkill,
71
+ cli_interactive_js_2.cliInteractiveSkill,
72
+ ];
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/index.ts"],"names":[],"mappings":";;;AAAA,wBAAwB;AACxB,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AACxB,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6CAA6C;AAApC,2GAAA,YAAY,OAAA;AACrB,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AAEtB,sBAAsB;AACtB,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,+CAA+C;AAAtC,6GAAA,aAAa,OAAA;AACtB,qDAAqD;AAA5C,mHAAA,gBAAgB,OAAA;AACzB,+DAA+D;AAAtD,6HAAA,qBAAqB,OAAA;AAC9B,6DAA6D;AAApD,2HAAA,oBAAoB,OAAA;AAE7B,+CAA6C;AAC7C,qDAAmD;AACnD,+CAA6C;AAC7C,+CAA6C;AAC7C,+CAA8C;AAC9C,oCAAoC;AACpC,iDAAkD;AAAzC,gHAAA,eAAe,OAAA;AACxB,2DAA2D;AAAlD,yHAAA,mBAAmB,OAAA;AAC5B,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AACvB,2DAA2D;AAAlD,yHAAA,mBAAmB,OAAA;AAE5B,2DAAyD;AACzD,iDAA+C;AAC/C,uDAAqD;AACrD,iEAA+D;AAC/D,+DAA6D;AAC7D,mDAAkD;AAClD,6DAA2D;AAC3D,2DAAyD;AACzD,mDAAiD;AACjD,6DAA2D;AAE9C,QAAA,eAAe,GAAG;IAC7B,0BAAY;IACZ,gCAAe;IACf,0BAAY;IACZ,0BAAY;IACZ,2BAAa;CACd,CAAC;AAEW,QAAA,aAAa,GAAG;IAC3B,sCAAkB;IAClB,4BAAa;IACb,kCAAgB;IAChB,4CAAqB;IACrB,0CAAoB;CACrB,CAAC;AAEW,QAAA,qBAAqB,GAAG;IACnC,+BAAe;IACf,wCAAmB;IACnB,sCAAkB;IAClB,8BAAc;IACd,wCAAmB;CACpB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Skill: multi-repo
3
+ *
4
+ * Allows reasoning across multiple repositories simultaneously.
5
+ * Aggregates file lists, package manifests and git status from each configured
6
+ * repo root and produces a unified cross-repo analysis report.
7
+ *
8
+ * Input (via SkillContext.graph):
9
+ * - `ctx.graph['repos']` — string[] — absolute paths to additional repo roots
10
+ * - `ctx.graph['repoData']` — RepoInfo[] — injectable repo snapshots for tests (bypasses FS)
11
+ * - `ctx.graph['mode']` — 'summary' | 'deps' | 'files' (default: 'summary')
12
+ *
13
+ * Output data:
14
+ * - MultiRepoResult
15
+ */
16
+ import type { SkillModule } from '../types.js';
17
+ export interface RepoDependency {
18
+ name: string;
19
+ version: string;
20
+ kind: 'dep' | 'devDep' | 'peer';
21
+ }
22
+ export interface RepoInfo {
23
+ root: string;
24
+ name: string;
25
+ description: string;
26
+ version: string;
27
+ dependencies: RepoDependency[];
28
+ fileCount: number;
29
+ topLevelEntries: string[];
30
+ hasTypeScript: boolean;
31
+ hasTests: boolean;
32
+ branch?: string;
33
+ }
34
+ export interface CrossRepoDependency {
35
+ dep: string;
36
+ repos: string[];
37
+ versions: string[];
38
+ versionConflict: boolean;
39
+ }
40
+ export interface MultiRepoResult {
41
+ mode: 'summary' | 'deps' | 'files';
42
+ repos: RepoInfo[];
43
+ crossDeps: CrossRepoDependency[];
44
+ summary: string;
45
+ }
46
+ export declare function scanRepoRoot(root: string): RepoInfo;
47
+ export declare function findCrossRepoDeps(repos: RepoInfo[]): CrossRepoDependency[];
48
+ export declare function buildSummary(repos: RepoInfo[], crossDeps: CrossRepoDependency[]): string;
49
+ export declare const multiRepoSkill: SkillModule;
50
+ //# sourceMappingURL=multi-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo.d.ts","sourceRoot":"","sources":["../../../src/skills/multi-repo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AAM1E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CA0DnD;AAqBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,mBAAmB,EAAE,CA8B1E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAQxF;AAMD,eAAO,MAAM,cAAc,EAAE,WAyC5B,CAAC"}
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ /**
3
+ * Skill: multi-repo
4
+ *
5
+ * Allows reasoning across multiple repositories simultaneously.
6
+ * Aggregates file lists, package manifests and git status from each configured
7
+ * repo root and produces a unified cross-repo analysis report.
8
+ *
9
+ * Input (via SkillContext.graph):
10
+ * - `ctx.graph['repos']` — string[] — absolute paths to additional repo roots
11
+ * - `ctx.graph['repoData']` — RepoInfo[] — injectable repo snapshots for tests (bypasses FS)
12
+ * - `ctx.graph['mode']` — 'summary' | 'deps' | 'files' (default: 'summary')
13
+ *
14
+ * Output data:
15
+ * - MultiRepoResult
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.multiRepoSkill = void 0;
19
+ exports.scanRepoRoot = scanRepoRoot;
20
+ exports.findCrossRepoDeps = findCrossRepoDeps;
21
+ exports.buildSummary = buildSummary;
22
+ const node_fs_1 = require("node:fs");
23
+ const node_path_1 = require("node:path");
24
+ // ---------------------------------------------------------------------------
25
+ // Helpers
26
+ // ---------------------------------------------------------------------------
27
+ function scanRepoRoot(root) {
28
+ const name = (0, node_path_1.basename)(root);
29
+ let description = '';
30
+ let version = '0.0.0';
31
+ const dependencies = [];
32
+ // Read package.json
33
+ const pkgPath = (0, node_path_1.join)(root, 'package.json');
34
+ if ((0, node_fs_1.existsSync)(pkgPath)) {
35
+ try {
36
+ const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf8'));
37
+ description = pkg['description'] ?? '';
38
+ version = pkg['version'] ?? '0.0.0';
39
+ const addDeps = (obj, kind) => {
40
+ if (!obj)
41
+ return;
42
+ for (const [dep, ver] of Object.entries(obj)) {
43
+ dependencies.push({ name: dep, version: ver, kind });
44
+ }
45
+ };
46
+ addDeps(pkg['dependencies'], 'dep');
47
+ addDeps(pkg['devDependencies'], 'devDep');
48
+ addDeps(pkg['peerDependencies'], 'peer');
49
+ }
50
+ catch {
51
+ // ignore
52
+ }
53
+ }
54
+ // Top-level entries
55
+ let topLevelEntries = [];
56
+ let fileCount = 0;
57
+ try {
58
+ topLevelEntries = (0, node_fs_1.readdirSync)(root).filter((e) => !e.startsWith('.') && e !== 'node_modules');
59
+ // Count files recursively (limited scan)
60
+ fileCount = countFiles(root, 0, 3);
61
+ }
62
+ catch {
63
+ // ignore FS errors
64
+ }
65
+ const hasTypeScript = (0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'tsconfig.json'));
66
+ const hasTests = (0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'tests')) ||
67
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(root, '__tests__')) ||
68
+ topLevelEntries.some((e) => e.endsWith('.test.ts') || e.endsWith('.spec.ts'));
69
+ return {
70
+ root,
71
+ name,
72
+ description,
73
+ version,
74
+ dependencies,
75
+ fileCount,
76
+ topLevelEntries,
77
+ hasTypeScript,
78
+ hasTests,
79
+ };
80
+ }
81
+ function countFiles(dir, depth, maxDepth) {
82
+ if (depth > maxDepth)
83
+ return 0;
84
+ let count = 0;
85
+ try {
86
+ const entries = (0, node_fs_1.readdirSync)(dir, { withFileTypes: true });
87
+ for (const e of entries) {
88
+ if (e.name.startsWith('.') || e.name === 'node_modules' || e.name === 'dist')
89
+ continue;
90
+ if (e.isDirectory()) {
91
+ count += countFiles((0, node_path_1.join)(dir, e.name), depth + 1, maxDepth);
92
+ }
93
+ else {
94
+ count++;
95
+ }
96
+ }
97
+ }
98
+ catch {
99
+ // ignore
100
+ }
101
+ return count;
102
+ }
103
+ function findCrossRepoDeps(repos) {
104
+ // Map dep → { repo, version }[]
105
+ const map = new Map();
106
+ for (const repo of repos) {
107
+ for (const dep of repo.dependencies) {
108
+ const arr = map.get(dep.name) ?? [];
109
+ arr.push({ repo: repo.name, version: dep.version });
110
+ map.set(dep.name, arr);
111
+ }
112
+ }
113
+ // Only return deps that appear in ≥2 repos
114
+ const crossDeps = [];
115
+ for (const [dep, entries] of map) {
116
+ if (entries.length < 2)
117
+ continue;
118
+ const repos = entries.map((e) => e.repo);
119
+ const versions = [...new Set(entries.map((e) => e.version))];
120
+ crossDeps.push({
121
+ dep,
122
+ repos,
123
+ versions,
124
+ versionConflict: versions.length > 1,
125
+ });
126
+ }
127
+ return crossDeps.sort((a, b) => {
128
+ if (a.versionConflict !== b.versionConflict)
129
+ return a.versionConflict ? -1 : 1;
130
+ return b.repos.length - a.repos.length;
131
+ });
132
+ }
133
+ function buildSummary(repos, crossDeps) {
134
+ const conflicts = crossDeps.filter((d) => d.versionConflict).length;
135
+ const lines = [
136
+ `${repos.length} repositor${repos.length === 1 ? 'y' : 'ies'} analysed`,
137
+ `${crossDeps.length} shared dependencies (${conflicts} version conflict${conflicts === 1 ? '' : 's'})`,
138
+ ...repos.map((r) => ` • ${r.name} v${r.version} — ${r.fileCount} files`),
139
+ ];
140
+ return lines.join('\n');
141
+ }
142
+ // ---------------------------------------------------------------------------
143
+ // Skill
144
+ // ---------------------------------------------------------------------------
145
+ exports.multiRepoSkill = {
146
+ id: 'multi-repo',
147
+ name: 'Multi-Repo Analyser',
148
+ description: 'Aggregates file lists, package manifests and dependency graphs across multiple repositories for cross-repo analysis.',
149
+ version: '1.0.0',
150
+ enabled: true,
151
+ tags: ['monorepo', 'dx', 'dependencies', 'analysis'],
152
+ async execute(ctx) {
153
+ const opts = (ctx.graph ?? {});
154
+ const mode = opts['mode'] ?? 'summary';
155
+ // --- Repo list ---
156
+ let repos;
157
+ if (Array.isArray(opts['repoData'])) {
158
+ // Injectable for tests
159
+ repos = opts['repoData'];
160
+ }
161
+ else {
162
+ const extraRoots = Array.isArray(opts['repos']) ? opts['repos'] : [];
163
+ const allRoots = [ctx.projectRoot, ...extraRoots].filter(Boolean);
164
+ repos = allRoots.map(scanRepoRoot);
165
+ }
166
+ const crossDeps = findCrossRepoDeps(repos);
167
+ const summary = buildSummary(repos, crossDeps);
168
+ const result = {
169
+ mode,
170
+ repos,
171
+ crossDeps: mode === 'files' ? [] : crossDeps,
172
+ summary,
173
+ };
174
+ return {
175
+ success: true,
176
+ output: summary,
177
+ data: result,
178
+ };
179
+ },
180
+ };
181
+ //# sourceMappingURL=multi-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-repo.js","sourceRoot":"","sources":["../../../src/skills/multi-repo.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AA+CH,oCA0DC;AAqBD,8CA8BC;AAED,oCAQC;AApKD,qCAAgE;AAChE,yCAA2C;AAwC3C,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,MAAM,YAAY,GAAqB,EAAE,CAAC;IAE1C,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAC3C,IAAI,IAAA,oBAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAA4B,CAAC;YACjF,WAAW,GAAI,GAAG,CAAC,aAAa,CAAY,IAAI,EAAE,CAAC;YACnD,OAAO,GAAI,GAAG,CAAC,SAAS,CAAY,IAAI,OAAO,CAAC;YAEhD,MAAM,OAAO,GAAG,CAAC,GAAuC,EAAE,IAA4B,EAAE,EAAE;gBACxF,IAAI,CAAC,GAAG;oBAAE,OAAO;gBACjB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7C,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,cAAc,CAA2B,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAA2B,EAAE,QAAQ,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAA2B,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,eAAe,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,cAAc,CAClD,CAAC;QACF,yCAAyC;QACzC,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,mBAAmB;IACrB,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GACZ,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAA,oBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACnC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAEhF,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,WAAW;QACX,OAAO;QACP,YAAY;QACZ,SAAS;QACT,eAAe;QACf,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAa,EAAE,QAAgB;IAC9D,IAAI,KAAK,GAAG,QAAQ;QAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YACvF,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,KAAK,IAAI,UAAU,CAAC,IAAA,gBAAI,EAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAAiB;IACjD,gCAAgC;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoD,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,SAAS,CAAC,IAAI,CAAC;YACb,GAAG;YACH,KAAK;YACL,QAAQ;YACR,eAAe,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7B,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,eAAe;YAAE,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,YAAY,CAAC,KAAiB,EAAE,SAAgC;IAC9E,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,KAAK,GAAG;QACZ,GAAG,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW;QACvE,GAAG,SAAS,CAAC,MAAM,yBAAyB,SAAS,oBAAoB,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QACtG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,QAAQ,CAAC;KAC1E,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAEjE,QAAA,cAAc,GAAgB;IACzC,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,sHAAsH;IACxH,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC;IAEpD,KAAK,CAAC,OAAO,CAAC,GAAiB;QAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC1D,MAAM,IAAI,GAAI,IAAI,CAAC,MAAM,CAAkC,IAAI,SAAS,CAAC;QAEzE,oBAAoB;QACpB,IAAI,KAAiB,CAAC;QAEtB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACpC,uBAAuB;YACvB,KAAK,GAAG,IAAI,CAAC,UAAU,CAAe,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,OAAO,CAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAClE,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAoB;YAC9B,IAAI;YACJ,KAAK;YACL,SAAS,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAC5C,OAAO;SACR,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,MAAM;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Skill: onboarding
3
+ *
4
+ * Generates an interactive onboarding tour for new developers:
5
+ * - Annotated project tree
6
+ * - Primary data-flow description
7
+ * - Startup commands (from package.json scripts)
8
+ * - Basic FAQ
9
+ *
10
+ * Input (via SkillContext.graph or ctx.files):
11
+ * - `ctx.graph['format']` — 'markdown' | 'text' (default: 'markdown')
12
+ * - `ctx.graph['pkgJson']` — parsed package.json object (injectable for tests)
13
+ * - `ctx.graph['readmeText']` — README.md content (injectable for tests)
14
+ * - `ctx.graph['fileTree']` — string[] of relative file paths (overrides ctx.files)
15
+ *
16
+ * Output data:
17
+ * - OnboardingReport
18
+ */
19
+ import type { SkillModule } from '../types.js';
20
+ export interface TreeNode {
21
+ name: string;
22
+ isDir: boolean;
23
+ annotation?: string;
24
+ }
25
+ export interface StartupCommand {
26
+ name: string;
27
+ command: string;
28
+ description: string;
29
+ }
30
+ export interface OnboardingReport {
31
+ projectName: string;
32
+ description: string;
33
+ tree: TreeNode[];
34
+ dataFlow: string[];
35
+ startupCommands: StartupCommand[];
36
+ faq: Array<{
37
+ q: string;
38
+ a: string;
39
+ }>;
40
+ format: 'markdown' | 'text';
41
+ }
42
+ export declare function buildTreeNodes(files: string[]): TreeNode[];
43
+ export declare function extractStartupCommands(scripts: Record<string, string>): StartupCommand[];
44
+ export declare function buildDataFlow(files: string[]): string[];
45
+ export declare function renderMarkdown(report: OnboardingReport): string;
46
+ export declare function renderText(report: OnboardingReport): string;
47
+ export declare const onboardingSkill: SkillModule;
48
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/skills/onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AAM1E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,GAAG,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;CAC7B;AAiCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAuB1D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,cAAc,EAAE,CAkBlB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAevD;AAqBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA4B/D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CA0B3D;AAMD,eAAO,MAAM,eAAe,EAAE,WAuE7B,CAAC"}