compact-agent 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +394 -0
- package/bin/anycode.js +2 -0
- package/bin/crowcoder.js +19 -0
- package/bin/ecc-hooks.cjs +138 -0
- package/dist/agents.d.ts +17 -0
- package/dist/agents.js +1603 -0
- package/dist/agents.js.map +1 -0
- package/dist/api.d.ts +16 -0
- package/dist/api.js +115 -0
- package/dist/api.js.map +1 -0
- package/dist/autonomous-loops.d.ts +108 -0
- package/dist/autonomous-loops.js +526 -0
- package/dist/autonomous-loops.js.map +1 -0
- package/dist/codemaps.d.ts +53 -0
- package/dist/codemaps.js +325 -0
- package/dist/codemaps.js.map +1 -0
- package/dist/compaction.d.ts +30 -0
- package/dist/compaction.js +125 -0
- package/dist/compaction.js.map +1 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -0
- package/dist/content-engine.d.ts +97 -0
- package/dist/content-engine.js +721 -0
- package/dist/content-engine.js.map +1 -0
- package/dist/cost-tracker.d.ts +49 -0
- package/dist/cost-tracker.js +150 -0
- package/dist/cost-tracker.js.map +1 -0
- package/dist/counter-button.d.ts +35 -0
- package/dist/counter-button.js +48 -0
- package/dist/counter-button.js.map +1 -0
- package/dist/counter.d.ts +21 -0
- package/dist/counter.js +31 -0
- package/dist/counter.js.map +1 -0
- package/dist/coverage.d.ts +23 -0
- package/dist/coverage.js +215 -0
- package/dist/coverage.js.map +1 -0
- package/dist/docs-sync.d.ts +23 -0
- package/dist/docs-sync.js +266 -0
- package/dist/docs-sync.js.map +1 -0
- package/dist/ecc.d.ts +41 -0
- package/dist/ecc.js +644 -0
- package/dist/ecc.js.map +1 -0
- package/dist/evaluation.d.ts +24 -0
- package/dist/evaluation.js +412 -0
- package/dist/evaluation.js.map +1 -0
- package/dist/export.d.ts +22 -0
- package/dist/export.js +109 -0
- package/dist/export.js.map +1 -0
- package/dist/git-workflow.d.ts +22 -0
- package/dist/git-workflow.js +197 -0
- package/dist/git-workflow.js.map +1 -0
- package/dist/hook-controls.d.ts +34 -0
- package/dist/hook-controls.js +90 -0
- package/dist/hook-controls.js.map +1 -0
- package/dist/hooks.d.ts +30 -0
- package/dist/hooks.js +130 -0
- package/dist/hooks.js.map +1 -0
- package/dist/html-parser.d.ts +18 -0
- package/dist/html-parser.js +101 -0
- package/dist/html-parser.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1230 -0
- package/dist/index.js.map +1 -0
- package/dist/learning.d.ts +35 -0
- package/dist/learning.js +238 -0
- package/dist/learning.js.map +1 -0
- package/dist/login.d.ts +37 -0
- package/dist/login.js +191 -0
- package/dist/login.js.map +1 -0
- package/dist/memory.d.ts +39 -0
- package/dist/memory.js +183 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +23 -0
- package/dist/model-router.js +145 -0
- package/dist/model-router.js.map +1 -0
- package/dist/modes.d.ts +17 -0
- package/dist/modes.js +217 -0
- package/dist/modes.js.map +1 -0
- package/dist/orchestration.d.ts +37 -0
- package/dist/orchestration.js +139 -0
- package/dist/orchestration.js.map +1 -0
- package/dist/package-detect.d.ts +36 -0
- package/dist/package-detect.js +529 -0
- package/dist/package-detect.js.map +1 -0
- package/dist/permissions.d.ts +25 -0
- package/dist/permissions.js +50 -0
- package/dist/permissions.js.map +1 -0
- package/dist/pm2-manager.d.ts +40 -0
- package/dist/pm2-manager.js +127 -0
- package/dist/pm2-manager.js.map +1 -0
- package/dist/query.d.ts +15 -0
- package/dist/query.js +278 -0
- package/dist/query.js.map +1 -0
- package/dist/refactor.d.ts +22 -0
- package/dist/refactor.js +226 -0
- package/dist/refactor.js.map +1 -0
- package/dist/retry.d.ts +20 -0
- package/dist/retry.js +88 -0
- package/dist/retry.js.map +1 -0
- package/dist/rules.d.ts +34 -0
- package/dist/rules.js +942 -0
- package/dist/rules.js.map +1 -0
- package/dist/schema.d.ts +23 -0
- package/dist/schema.js +12 -0
- package/dist/schema.js.map +1 -0
- package/dist/search-first.d.ts +17 -0
- package/dist/search-first.js +301 -0
- package/dist/search-first.js.map +1 -0
- package/dist/security.d.ts +10 -0
- package/dist/security.js +145 -0
- package/dist/security.js.map +1 -0
- package/dist/sessions.d.ts +21 -0
- package/dist/sessions.js +112 -0
- package/dist/sessions.js.map +1 -0
- package/dist/skill-create.d.ts +38 -0
- package/dist/skill-create.js +389 -0
- package/dist/skill-create.js.map +1 -0
- package/dist/skills.d.ts +34 -0
- package/dist/skills.js +161 -0
- package/dist/skills.js.map +1 -0
- package/dist/strategic-compaction.d.ts +24 -0
- package/dist/strategic-compaction.js +144 -0
- package/dist/strategic-compaction.js.map +1 -0
- package/dist/system-prompt.d.ts +3 -0
- package/dist/system-prompt.js +101 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/theme.d.ts +60 -0
- package/dist/theme.js +220 -0
- package/dist/theme.js.map +1 -0
- package/dist/tools/bash.d.ts +2 -0
- package/dist/tools/bash.js +49 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.js +76 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +2 -0
- package/dist/tools/glob.js +54 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +2 -0
- package/dist/tools/grep.js +64 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-dir.d.ts +2 -0
- package/dist/tools/list-dir.js +51 -0
- package/dist/tools/list-dir.js.map +1 -0
- package/dist/tools/read.d.ts +2 -0
- package/dist/tools/read.js +56 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/types.d.ts +45 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +2 -0
- package/dist/tools/web-fetch.js +41 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +27 -0
- package/dist/tools/web-search.js +139 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +2 -0
- package/dist/tools/write.js +36 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.js +57 -0
- package/dist/types.js.map +1 -0
- package/dist/users.d.ts +51 -0
- package/dist/users.js +193 -0
- package/dist/users.js.map +1 -0
- package/dist/verification.d.ts +73 -0
- package/dist/verification.js +269 -0
- package/dist/verification.js.map +1 -0
- package/dist/walkthrough.d.ts +10 -0
- package/dist/walkthrough.js +121 -0
- package/dist/walkthrough.js.map +1 -0
- package/package.json +58 -0
- package/resources/ecc/agents/architect.json +16 -0
- package/resources/ecc/agents/architect.md +212 -0
- package/resources/ecc/agents/build-error-resolver.json +17 -0
- package/resources/ecc/agents/build-error-resolver.md +116 -0
- package/resources/ecc/agents/chief-of-staff.json +17 -0
- package/resources/ecc/agents/chief-of-staff.md +153 -0
- package/resources/ecc/agents/code-reviewer.json +16 -0
- package/resources/ecc/agents/code-reviewer.md +238 -0
- package/resources/ecc/agents/database-reviewer.json +16 -0
- package/resources/ecc/agents/database-reviewer.md +92 -0
- package/resources/ecc/agents/doc-updater.json +16 -0
- package/resources/ecc/agents/doc-updater.md +108 -0
- package/resources/ecc/agents/e2e-runner.json +17 -0
- package/resources/ecc/agents/e2e-runner.md +109 -0
- package/resources/ecc/agents/go-build-resolver.json +17 -0
- package/resources/ecc/agents/go-build-resolver.md +96 -0
- package/resources/ecc/agents/go-reviewer.json +16 -0
- package/resources/ecc/agents/go-reviewer.md +77 -0
- package/resources/ecc/agents/harness-optimizer.json +15 -0
- package/resources/ecc/agents/harness-optimizer.md +34 -0
- package/resources/ecc/agents/loop-operator.json +16 -0
- package/resources/ecc/agents/loop-operator.md +36 -0
- package/resources/ecc/agents/planner.json +15 -0
- package/resources/ecc/agents/planner.md +212 -0
- package/resources/ecc/agents/python-reviewer.json +16 -0
- package/resources/ecc/agents/python-reviewer.md +99 -0
- package/resources/ecc/agents/refactor-cleaner.json +17 -0
- package/resources/ecc/agents/refactor-cleaner.md +87 -0
- package/resources/ecc/agents/security-reviewer.json +16 -0
- package/resources/ecc/agents/security-reviewer.md +109 -0
- package/resources/ecc/agents/tdd-guide.json +17 -0
- package/resources/ecc/agents/tdd-guide.md +93 -0
- package/resources/ecc/commands/add-language-rules.md +39 -0
- package/resources/ecc/commands/database-migration.md +36 -0
- package/resources/ecc/commands/feature-development.md +38 -0
- package/resources/ecc/prompts/build-fix.prompt.md +47 -0
- package/resources/ecc/prompts/code-review.prompt.md +56 -0
- package/resources/ecc/prompts/plan.prompt.md +52 -0
- package/resources/ecc/prompts/refactor.prompt.md +50 -0
- package/resources/ecc/prompts/security-review.prompt.md +70 -0
- package/resources/ecc/prompts/tdd.prompt.md +47 -0
- package/resources/ecc/rules/common-agents.md +53 -0
- package/resources/ecc/rules/common-coding-style.md +52 -0
- package/resources/ecc/rules/common-development-workflow.md +33 -0
- package/resources/ecc/rules/common-git-workflow.md +28 -0
- package/resources/ecc/rules/common-hooks.md +34 -0
- package/resources/ecc/rules/common-patterns.md +35 -0
- package/resources/ecc/rules/common-performance.md +59 -0
- package/resources/ecc/rules/common-security.md +33 -0
- package/resources/ecc/rules/common-testing.md +33 -0
- package/resources/ecc/rules/golang-coding-style.md +31 -0
- package/resources/ecc/rules/golang-hooks.md +16 -0
- package/resources/ecc/rules/golang-patterns.md +44 -0
- package/resources/ecc/rules/golang-security.md +33 -0
- package/resources/ecc/rules/golang-testing.md +30 -0
- package/resources/ecc/rules/kotlin-coding-style.md +39 -0
- package/resources/ecc/rules/kotlin-hooks.md +16 -0
- package/resources/ecc/rules/kotlin-patterns.md +50 -0
- package/resources/ecc/rules/kotlin-security.md +58 -0
- package/resources/ecc/rules/kotlin-testing.md +38 -0
- package/resources/ecc/rules/php-coding-style.md +25 -0
- package/resources/ecc/rules/php-hooks.md +21 -0
- package/resources/ecc/rules/php-patterns.md +23 -0
- package/resources/ecc/rules/php-security.md +24 -0
- package/resources/ecc/rules/php-testing.md +26 -0
- package/resources/ecc/rules/python-coding-style.md +42 -0
- package/resources/ecc/rules/python-hooks.md +19 -0
- package/resources/ecc/rules/python-patterns.md +39 -0
- package/resources/ecc/rules/python-security.md +30 -0
- package/resources/ecc/rules/python-testing.md +38 -0
- package/resources/ecc/rules/swift-coding-style.md +47 -0
- package/resources/ecc/rules/swift-hooks.md +20 -0
- package/resources/ecc/rules/swift-patterns.md +66 -0
- package/resources/ecc/rules/swift-security.md +33 -0
- package/resources/ecc/rules/swift-testing.md +45 -0
- package/resources/ecc/rules/typescript-coding-style.md +63 -0
- package/resources/ecc/rules/typescript-hooks.md +20 -0
- package/resources/ecc/rules/typescript-patterns.md +50 -0
- package/resources/ecc/rules/typescript-security.md +26 -0
- package/resources/ecc/rules/typescript-testing.md +16 -0
- package/resources/ecc/skills/agent-introspection-debugging/SKILL.md +152 -0
- package/resources/ecc/skills/agent-introspection-debugging/agents/openai.yaml +7 -0
- package/resources/ecc/skills/agent-sort/SKILL.md +214 -0
- package/resources/ecc/skills/agent-sort/agents/openai.yaml +7 -0
- package/resources/ecc/skills/api-design/SKILL.md +522 -0
- package/resources/ecc/skills/api-design/agents/openai.yaml +7 -0
- package/resources/ecc/skills/article-writing/SKILL.md +78 -0
- package/resources/ecc/skills/article-writing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/backend-patterns/SKILL.md +597 -0
- package/resources/ecc/skills/backend-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/brand-voice/SKILL.md +96 -0
- package/resources/ecc/skills/brand-voice/agents/openai.yaml +7 -0
- package/resources/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/resources/ecc/skills/bun-runtime/SKILL.md +83 -0
- package/resources/ecc/skills/bun-runtime/agents/openai.yaml +7 -0
- package/resources/ecc/skills/coding-standards/SKILL.md +548 -0
- package/resources/ecc/skills/coding-standards/agents/openai.yaml +7 -0
- package/resources/ecc/skills/content-engine/SKILL.md +130 -0
- package/resources/ecc/skills/content-engine/agents/openai.yaml +7 -0
- package/resources/ecc/skills/crosspost/SKILL.md +110 -0
- package/resources/ecc/skills/crosspost/agents/openai.yaml +7 -0
- package/resources/ecc/skills/deep-research/SKILL.md +154 -0
- package/resources/ecc/skills/deep-research/agents/openai.yaml +7 -0
- package/resources/ecc/skills/dmux-workflows/SKILL.md +143 -0
- package/resources/ecc/skills/dmux-workflows/agents/openai.yaml +7 -0
- package/resources/ecc/skills/documentation-lookup/SKILL.md +89 -0
- package/resources/ecc/skills/documentation-lookup/agents/openai.yaml +7 -0
- package/resources/ecc/skills/e2e-testing/SKILL.md +325 -0
- package/resources/ecc/skills/e2e-testing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/eval-harness/SKILL.md +235 -0
- package/resources/ecc/skills/eval-harness/agents/openai.yaml +7 -0
- package/resources/ecc/skills/everything-claude-code/SKILL.md +442 -0
- package/resources/ecc/skills/everything-claude-code/agents/openai.yaml +7 -0
- package/resources/ecc/skills/exa-search/SKILL.md +169 -0
- package/resources/ecc/skills/exa-search/agents/openai.yaml +7 -0
- package/resources/ecc/skills/fal-ai-media/SKILL.md +276 -0
- package/resources/ecc/skills/fal-ai-media/agents/openai.yaml +7 -0
- package/resources/ecc/skills/frontend-patterns/SKILL.md +647 -0
- package/resources/ecc/skills/frontend-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/frontend-slides/SKILL.md +183 -0
- package/resources/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/resources/ecc/skills/frontend-slides/agents/openai.yaml +7 -0
- package/resources/ecc/skills/investor-materials/SKILL.md +95 -0
- package/resources/ecc/skills/investor-materials/agents/openai.yaml +7 -0
- package/resources/ecc/skills/investor-outreach/SKILL.md +90 -0
- package/resources/ecc/skills/investor-outreach/agents/openai.yaml +7 -0
- package/resources/ecc/skills/market-research/SKILL.md +74 -0
- package/resources/ecc/skills/market-research/agents/openai.yaml +7 -0
- package/resources/ecc/skills/mcp-server-patterns/SKILL.md +66 -0
- package/resources/ecc/skills/mcp-server-patterns/agents/openai.yaml +7 -0
- package/resources/ecc/skills/mle-workflow/SKILL.md +346 -0
- package/resources/ecc/skills/mle-workflow/agents/openai.yaml +7 -0
- package/resources/ecc/skills/nextjs-turbopack/SKILL.md +43 -0
- package/resources/ecc/skills/nextjs-turbopack/agents/openai.yaml +7 -0
- package/resources/ecc/skills/product-capability/SKILL.md +140 -0
- package/resources/ecc/skills/product-capability/agents/openai.yaml +7 -0
- package/resources/ecc/skills/security-review/SKILL.md +494 -0
- package/resources/ecc/skills/security-review/agents/openai.yaml +7 -0
- package/resources/ecc/skills/strategic-compact/SKILL.md +102 -0
- package/resources/ecc/skills/strategic-compact/agents/openai.yaml +7 -0
- package/resources/ecc/skills/tdd-workflow/SKILL.md +409 -0
- package/resources/ecc/skills/tdd-workflow/agents/openai.yaml +7 -0
- package/resources/ecc/skills/verification-loop/SKILL.md +125 -0
- package/resources/ecc/skills/verification-loop/agents/openai.yaml +7 -0
- package/resources/ecc/skills/video-editing/SKILL.md +307 -0
- package/resources/ecc/skills/video-editing/agents/openai.yaml +7 -0
- package/resources/ecc/skills/x-api/SKILL.md +229 -0
- package/resources/ecc/skills/x-api/agents/openai.yaml +7 -0
package/dist/sessions.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session persistence ā save, resume, list, delete conversations.
|
|
3
|
+
* Stores sessions as JSON files in ~/.crowcoder/sessions/
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, readdirSync, unlinkSync, mkdirSync, existsSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { getConfigDir } from './config.js';
|
|
8
|
+
const SESSIONS_DIR = join(getConfigDir(), 'sessions');
|
|
9
|
+
// Simple write lock to prevent concurrent writes
|
|
10
|
+
let isWriting = false;
|
|
11
|
+
const writeQueue = [];
|
|
12
|
+
async function acquireWriteLock(fn) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const task = async () => {
|
|
15
|
+
fn();
|
|
16
|
+
resolve();
|
|
17
|
+
};
|
|
18
|
+
if (!isWriting) {
|
|
19
|
+
isWriting = true;
|
|
20
|
+
task().finally(() => {
|
|
21
|
+
isWriting = false;
|
|
22
|
+
const next = writeQueue.shift();
|
|
23
|
+
if (next)
|
|
24
|
+
next();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
writeQueue.push(task);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function ensureDir() {
|
|
33
|
+
mkdirSync(SESSIONS_DIR, { recursive: true });
|
|
34
|
+
}
|
|
35
|
+
function sessionPath(id) {
|
|
36
|
+
return join(SESSIONS_DIR, `${id}.json`);
|
|
37
|
+
}
|
|
38
|
+
export function generateSessionId() {
|
|
39
|
+
const ts = Date.now().toString(36);
|
|
40
|
+
const rand = Math.random().toString(36).slice(2, 8);
|
|
41
|
+
return `${ts}-${rand}`;
|
|
42
|
+
}
|
|
43
|
+
export function saveSession(session) {
|
|
44
|
+
return acquireWriteLock(() => {
|
|
45
|
+
ensureDir();
|
|
46
|
+
session.updatedAt = new Date().toISOString();
|
|
47
|
+
session.turnCount = session.messages.filter((m) => m.role === 'user').length;
|
|
48
|
+
writeFileSync(sessionPath(session.id), JSON.stringify(session, null, 2), 'utf-8');
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function loadSession(id) {
|
|
52
|
+
const p = sessionPath(id);
|
|
53
|
+
if (!existsSync(p))
|
|
54
|
+
return null;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.parse(readFileSync(p, 'utf-8'));
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function listSessions() {
|
|
63
|
+
ensureDir();
|
|
64
|
+
const files = readdirSync(SESSIONS_DIR).filter((f) => f.endsWith('.json'));
|
|
65
|
+
const sessions = [];
|
|
66
|
+
for (const file of files) {
|
|
67
|
+
try {
|
|
68
|
+
const raw = readFileSync(join(SESSIONS_DIR, file), 'utf-8');
|
|
69
|
+
const s = JSON.parse(raw);
|
|
70
|
+
sessions.push({
|
|
71
|
+
id: s.id,
|
|
72
|
+
name: s.name,
|
|
73
|
+
cwd: s.cwd,
|
|
74
|
+
model: s.model,
|
|
75
|
+
createdAt: s.createdAt,
|
|
76
|
+
updatedAt: s.updatedAt,
|
|
77
|
+
turnCount: s.turnCount,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// skip corrupt files
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return sessions.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
85
|
+
}
|
|
86
|
+
export function deleteSession(id) {
|
|
87
|
+
const p = sessionPath(id);
|
|
88
|
+
if (!existsSync(p))
|
|
89
|
+
return false;
|
|
90
|
+
unlinkSync(p);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
export function createSession(cwd, model, provider, mode) {
|
|
94
|
+
return {
|
|
95
|
+
id: generateSessionId(),
|
|
96
|
+
name: `Session ${new Date().toLocaleString()}`,
|
|
97
|
+
cwd,
|
|
98
|
+
model,
|
|
99
|
+
provider,
|
|
100
|
+
messages: [],
|
|
101
|
+
createdAt: new Date().toISOString(),
|
|
102
|
+
updatedAt: new Date().toISOString(),
|
|
103
|
+
tokenCount: 0,
|
|
104
|
+
turnCount: 0,
|
|
105
|
+
mode,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export async function autoSave(session, messages) {
|
|
109
|
+
session.messages = messages;
|
|
110
|
+
await saveSession(session);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=sessions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Creation from Git History ā Generate reusable skills by analyzing patterns.
|
|
3
|
+
* Extracts workflows from commit history and converts them to skill templates.
|
|
4
|
+
*/
|
|
5
|
+
export interface GitPattern {
|
|
6
|
+
pattern: string;
|
|
7
|
+
frequency: number;
|
|
8
|
+
files: string[];
|
|
9
|
+
description: string;
|
|
10
|
+
example?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Analyze git patterns from recent commits
|
|
14
|
+
*/
|
|
15
|
+
export declare function analyzeGitPatterns(cwd: string, limit?: number): GitPattern[];
|
|
16
|
+
/**
|
|
17
|
+
* Build a prompt for the AI to generate skills from git patterns
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildSkillCreatePrompt(cwd: string, pattern?: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Pretty-print git patterns
|
|
22
|
+
*/
|
|
23
|
+
export declare function printGitPatterns(patterns: GitPattern[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* Export patterns to a JSON file for reference
|
|
26
|
+
*/
|
|
27
|
+
export declare function exportPatternsToJSON(patterns: GitPattern[], outputPath: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Generate a skill file from a git pattern
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateSkillFromPattern(pattern: GitPattern, cwd: string): {
|
|
32
|
+
name: string;
|
|
33
|
+
content: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Analyze and print git workflow summary
|
|
37
|
+
*/
|
|
38
|
+
export declare function printGitWorkflowSummary(cwd: string): void;
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Creation from Git History ā Generate reusable skills by analyzing patterns.
|
|
3
|
+
* Extracts workflows from commit history and converts them to skill templates.
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
|
+
import { existsSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
/**
|
|
10
|
+
* Parse git log and extract commit information
|
|
11
|
+
*/
|
|
12
|
+
function parseGitLog(cwd, limit = 50) {
|
|
13
|
+
try {
|
|
14
|
+
// Get recent commits with modified files
|
|
15
|
+
const logFormat = '%H|%s|%b';
|
|
16
|
+
const result = execSync(`git log --pretty=format:"${logFormat}" --numstat -${limit} 2>/dev/null`, {
|
|
17
|
+
cwd,
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
timeout: 10_000,
|
|
20
|
+
});
|
|
21
|
+
const commits = [];
|
|
22
|
+
const lines = result.split('\n');
|
|
23
|
+
let currentCommit = null;
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
if (line.includes('|')) {
|
|
26
|
+
// Commit header line
|
|
27
|
+
const [hash, message] = line.split('|');
|
|
28
|
+
if (currentCommit && currentCommit.files.length > 0) {
|
|
29
|
+
commits.push(currentCommit);
|
|
30
|
+
}
|
|
31
|
+
currentCommit = { hash: hash.trim(), message: message.trim(), files: [] };
|
|
32
|
+
}
|
|
33
|
+
else if (line.match(/^\d+\s+\d+\s+/)) {
|
|
34
|
+
// File change line (additions\tdeletions\tfilename)
|
|
35
|
+
const parts = line.trim().split(/\s+/);
|
|
36
|
+
if (parts.length >= 3) {
|
|
37
|
+
const fileName = parts.slice(2).join(' ');
|
|
38
|
+
if (currentCommit) {
|
|
39
|
+
currentCommit.files.push(fileName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (currentCommit && currentCommit.files.length > 0) {
|
|
45
|
+
commits.push(currentCommit);
|
|
46
|
+
}
|
|
47
|
+
return commits;
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
console.warn(chalk.yellow(`Warning: Could not parse git log: ${err}`));
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Analyze file change patterns (which files change together)
|
|
56
|
+
*/
|
|
57
|
+
function analyzeFilePatterns(commits) {
|
|
58
|
+
const patterns = new Map();
|
|
59
|
+
for (const commit of commits) {
|
|
60
|
+
if (commit.files.length <= 1)
|
|
61
|
+
continue;
|
|
62
|
+
// Create signature from file extensions/patterns
|
|
63
|
+
const exts = commit.files
|
|
64
|
+
.map((f) => f.split('.').pop())
|
|
65
|
+
.filter(Boolean)
|
|
66
|
+
.sort();
|
|
67
|
+
const signature = exts.join('-');
|
|
68
|
+
if (signature) {
|
|
69
|
+
patterns.set(signature, (patterns.get(signature) || 0) + 1);
|
|
70
|
+
}
|
|
71
|
+
// Also track file path patterns
|
|
72
|
+
const pathPattern = commit.files
|
|
73
|
+
.map((f) => f.split('/')[0])
|
|
74
|
+
.filter(Boolean)
|
|
75
|
+
.sort()
|
|
76
|
+
.join('-');
|
|
77
|
+
if (pathPattern && pathPattern !== signature) {
|
|
78
|
+
patterns.set(`path:${pathPattern}`, (patterns.get(`path:${pathPattern}`) || 0) + 1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return patterns;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Analyze commit message patterns
|
|
85
|
+
*/
|
|
86
|
+
function analyzeCommitPatterns(commits) {
|
|
87
|
+
const patterns = new Map();
|
|
88
|
+
// Common commit patterns
|
|
89
|
+
const patterns_to_check = [
|
|
90
|
+
{ regex: /^feat:/i, label: 'feature' },
|
|
91
|
+
{ regex: /^fix:/i, label: 'bugfix' },
|
|
92
|
+
{ regex: /^test:/i, label: 'test' },
|
|
93
|
+
{ regex: /^refactor:/i, label: 'refactor' },
|
|
94
|
+
{ regex: /^docs?:/i, label: 'documentation' },
|
|
95
|
+
{ regex: /^chore:/i, label: 'chore' },
|
|
96
|
+
{ regex: /^perf:/i, label: 'performance' },
|
|
97
|
+
{ regex: /^style:/i, label: 'style' },
|
|
98
|
+
];
|
|
99
|
+
for (const commit of commits) {
|
|
100
|
+
const msg = commit.message.toLowerCase();
|
|
101
|
+
for (const { regex, label } of patterns_to_check) {
|
|
102
|
+
if (regex.test(msg)) {
|
|
103
|
+
patterns.set(label, (patterns.get(label) || 0) + 1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Keywords
|
|
107
|
+
const keywords = ['fix', 'add', 'update', 'remove', 'improve', 'cleanup'];
|
|
108
|
+
for (const keyword of keywords) {
|
|
109
|
+
if (msg.includes(keyword)) {
|
|
110
|
+
patterns.set(`keyword:${keyword}`, (patterns.get(`keyword:${keyword}`) || 0) + 1);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return patterns;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Find sequences of related commits (workflows)
|
|
118
|
+
*/
|
|
119
|
+
function findWorkflowSequences(commits) {
|
|
120
|
+
const sequences = [];
|
|
121
|
+
// Look for common workflow sequences
|
|
122
|
+
const messages = commits.map((c) => c.message.toLowerCase());
|
|
123
|
+
// test ā fix ā commit pattern
|
|
124
|
+
for (let i = 0; i < messages.length - 2; i++) {
|
|
125
|
+
const m1 = messages[i];
|
|
126
|
+
const m2 = messages[i + 1];
|
|
127
|
+
const m3 = messages[i + 2];
|
|
128
|
+
if (m1.includes('test') && m2.includes('fix') && m3.includes('fix')) {
|
|
129
|
+
sequences.push('test-then-fix-then-verify');
|
|
130
|
+
}
|
|
131
|
+
if (m1.includes('refactor') && m2.includes('test')) {
|
|
132
|
+
sequences.push('refactor-then-test');
|
|
133
|
+
}
|
|
134
|
+
if (m1.includes('feature') && m2.includes('docs')) {
|
|
135
|
+
sequences.push('feature-then-document');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return Array.from(new Set(sequences)); // Deduplicate
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Analyze git patterns from recent commits
|
|
142
|
+
*/
|
|
143
|
+
export function analyzeGitPatterns(cwd, limit = 50) {
|
|
144
|
+
if (!existsSync(join(cwd, '.git'))) {
|
|
145
|
+
console.warn(chalk.yellow('Warning: Not a git repository'));
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
const commits = parseGitLog(cwd, limit);
|
|
149
|
+
if (commits.length === 0) {
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
const filePatterns = analyzeFilePatterns(commits);
|
|
153
|
+
const commitPatterns = analyzeCommitPatterns(commits);
|
|
154
|
+
const workflows = findWorkflowSequences(commits);
|
|
155
|
+
const patterns = [];
|
|
156
|
+
// Convert file patterns to GitPattern
|
|
157
|
+
for (const [pattern, frequency] of Array.from(filePatterns.entries())) {
|
|
158
|
+
if (frequency >= 2) {
|
|
159
|
+
// Only patterns that appear 2+ times
|
|
160
|
+
patterns.push({
|
|
161
|
+
pattern: `file-changes:${pattern}`,
|
|
162
|
+
frequency,
|
|
163
|
+
files: commits
|
|
164
|
+
.filter((c) => {
|
|
165
|
+
const exts = c.files.map((f) => f.split('.').pop()).sort().join('-');
|
|
166
|
+
return exts === pattern;
|
|
167
|
+
})
|
|
168
|
+
.flatMap((c) => c.files)
|
|
169
|
+
.slice(0, 5),
|
|
170
|
+
description: `Files with pattern ${pattern} frequently change together`,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Convert commit patterns to GitPattern
|
|
175
|
+
for (const [pattern, frequency] of Array.from(commitPatterns.entries())) {
|
|
176
|
+
if (frequency >= 3) {
|
|
177
|
+
// Only patterns that appear 3+ times
|
|
178
|
+
patterns.push({
|
|
179
|
+
pattern,
|
|
180
|
+
frequency,
|
|
181
|
+
files: commits
|
|
182
|
+
.filter((c) => c.message.toLowerCase().includes(pattern.split(':')[1] || pattern))
|
|
183
|
+
.flatMap((c) => c.files)
|
|
184
|
+
.slice(0, 5),
|
|
185
|
+
description: `Commits with pattern "${pattern}" appear ${frequency} times`,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Add workflow sequences
|
|
190
|
+
for (const workflow of workflows) {
|
|
191
|
+
patterns.push({
|
|
192
|
+
pattern: `workflow:${workflow}`,
|
|
193
|
+
frequency: 1,
|
|
194
|
+
files: [],
|
|
195
|
+
description: `Identified workflow: ${workflow}`,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
return patterns.sort((a, b) => b.frequency - a.frequency).slice(0, 20);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Build a prompt for the AI to generate skills from git patterns
|
|
202
|
+
*/
|
|
203
|
+
export function buildSkillCreatePrompt(cwd, pattern) {
|
|
204
|
+
const patterns = analyzeGitPatterns(cwd);
|
|
205
|
+
if (patterns.length === 0) {
|
|
206
|
+
return `# Skill Creation from Git History
|
|
207
|
+
|
|
208
|
+
The repository has no clear git history patterns to extract skills from.
|
|
209
|
+
|
|
210
|
+
Please help generate reusable skill templates for common development workflows in this project.
|
|
211
|
+
|
|
212
|
+
Consider:
|
|
213
|
+
1. What repetitive tasks appear in the commit history?
|
|
214
|
+
2. What are the standard steps for common operations?
|
|
215
|
+
3. What conventions does the team follow?
|
|
216
|
+
4. What could be automated with skills/workflows?
|
|
217
|
+
|
|
218
|
+
For each skill, provide:
|
|
219
|
+
- **Name**: Concise skill identifier
|
|
220
|
+
- **Description**: What it does
|
|
221
|
+
- **Steps**: Numbered workflow steps with {{placeholders}}
|
|
222
|
+
- **Commands**: Specific tool calls or scripts
|
|
223
|
+
- **Validation**: How to verify success`;
|
|
224
|
+
}
|
|
225
|
+
// Filter patterns if requested
|
|
226
|
+
let filteredPatterns = patterns;
|
|
227
|
+
if (pattern) {
|
|
228
|
+
filteredPatterns = patterns.filter((p) => p.pattern.toLowerCase().includes(pattern.toLowerCase()) ||
|
|
229
|
+
p.description.toLowerCase().includes(pattern.toLowerCase()));
|
|
230
|
+
}
|
|
231
|
+
let patternsSummary = '';
|
|
232
|
+
for (const p of filteredPatterns.slice(0, 10)) {
|
|
233
|
+
patternsSummary += `\n- **${p.pattern}** (${p.frequency}x)\n ${p.description}\n`;
|
|
234
|
+
if (p.files.length > 0) {
|
|
235
|
+
patternsSummary += ` Files: ${p.files.slice(0, 3).join(', ')}\n`;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return `# Skill Creation from Git History
|
|
239
|
+
|
|
240
|
+
## Discovered Patterns
|
|
241
|
+
|
|
242
|
+
Based on analyzing the last 50 commits, these patterns emerged:
|
|
243
|
+
${patternsSummary}
|
|
244
|
+
|
|
245
|
+
## Workflow
|
|
246
|
+
|
|
247
|
+
1. **Analyze Patterns** ā I've identified ${patterns.length} patterns from git history
|
|
248
|
+
2. **Extract Skills** ā Convert recurring patterns into reusable skills
|
|
249
|
+
3. **Create Templates** ā Generate skill templates with {{placeholders}}
|
|
250
|
+
4. **Validate** ā Ensure each skill solves a real workflow
|
|
251
|
+
|
|
252
|
+
## Skill Template Format
|
|
253
|
+
|
|
254
|
+
For each skill, create a file with:
|
|
255
|
+
\`\`\`
|
|
256
|
+
# {{SKILL_NAME}}
|
|
257
|
+
|
|
258
|
+
## Description
|
|
259
|
+
{{What this skill does}}
|
|
260
|
+
|
|
261
|
+
## Trigger Pattern
|
|
262
|
+
{{When to use this skill}}
|
|
263
|
+
|
|
264
|
+
## Steps
|
|
265
|
+
1. {{Step 1 with {{placeholders}}}}
|
|
266
|
+
2. {{Step 2}}
|
|
267
|
+
...
|
|
268
|
+
|
|
269
|
+
## Validation
|
|
270
|
+
{{How to verify success}}
|
|
271
|
+
|
|
272
|
+
## Example Usage
|
|
273
|
+
\`\`\`bash
|
|
274
|
+
{{Example command}}
|
|
275
|
+
\`\`\`
|
|
276
|
+
\`\`\`
|
|
277
|
+
|
|
278
|
+
## Task
|
|
279
|
+
|
|
280
|
+
Based on the patterns above, please:
|
|
281
|
+
|
|
282
|
+
1. **Identify** the top 3 most valuable skills to create
|
|
283
|
+
2. **Design** skill workflows with clear steps and placeholders
|
|
284
|
+
3. **Include** validation checks for each skill
|
|
285
|
+
4. **Provide** example invocations
|
|
286
|
+
5. **Export** as reusable templates
|
|
287
|
+
|
|
288
|
+
Focus on the most frequent patterns ({{${filteredPatterns[0]?.pattern || 'feature development'}}})`;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Pretty-print git patterns
|
|
292
|
+
*/
|
|
293
|
+
export function printGitPatterns(patterns) {
|
|
294
|
+
console.log(chalk.cyan('\nš Git Patterns Analysis'));
|
|
295
|
+
console.log(chalk.gray(`Found ${patterns.length} patterns\n`));
|
|
296
|
+
console.log(chalk.blue('Top Patterns:'));
|
|
297
|
+
for (const p of patterns.slice(0, 15)) {
|
|
298
|
+
const freqColor = p.frequency >= 5 ? chalk.green : chalk.yellow;
|
|
299
|
+
console.log(chalk.gray(` ${p.pattern}`));
|
|
300
|
+
console.log(chalk.gray(` ${p.description}`));
|
|
301
|
+
console.log(freqColor(` Frequency: ${p.frequency}x`));
|
|
302
|
+
if (p.files.length > 0) {
|
|
303
|
+
console.log(chalk.gray(` Files: ${p.files.slice(0, 3).join(', ')}`));
|
|
304
|
+
}
|
|
305
|
+
console.log();
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Export patterns to a JSON file for reference
|
|
310
|
+
*/
|
|
311
|
+
export function exportPatternsToJSON(patterns, outputPath) {
|
|
312
|
+
const dir = outputPath.substring(0, outputPath.lastIndexOf('/'));
|
|
313
|
+
if (!existsSync(dir)) {
|
|
314
|
+
mkdirSync(dir, { recursive: true });
|
|
315
|
+
}
|
|
316
|
+
writeFileSync(outputPath, JSON.stringify(patterns, null, 2), 'utf-8');
|
|
317
|
+
console.log(chalk.green(`ā Exported ${patterns.length} patterns to ${outputPath}`));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Generate a skill file from a git pattern
|
|
321
|
+
*/
|
|
322
|
+
export function generateSkillFromPattern(pattern, cwd) {
|
|
323
|
+
const skillName = pattern.pattern.replace(/[^a-z0-9-]/gi, '-').toLowerCase();
|
|
324
|
+
const content = `# ${pattern.pattern}
|
|
325
|
+
|
|
326
|
+
${pattern.description}
|
|
327
|
+
|
|
328
|
+
Frequency in recent history: ${pattern.frequency} occurrences
|
|
329
|
+
|
|
330
|
+
## When to Use
|
|
331
|
+
|
|
332
|
+
This pattern appears in commits that:
|
|
333
|
+
- Modify: ${pattern.files.slice(0, 3).join(', ') || 'multiple files'}
|
|
334
|
+
- Pattern: ${pattern.pattern}
|
|
335
|
+
|
|
336
|
+
## Workflow Steps
|
|
337
|
+
|
|
338
|
+
1. {{TODO: Define workflow step 1}}
|
|
339
|
+
2. {{TODO: Define workflow step 2}}
|
|
340
|
+
3. {{TODO: Define validation}}
|
|
341
|
+
|
|
342
|
+
## Files Involved
|
|
343
|
+
|
|
344
|
+
${pattern.files.map((f) => `- \`${f}\``).join('\n')}
|
|
345
|
+
|
|
346
|
+
## Example
|
|
347
|
+
|
|
348
|
+
\`\`\`bash
|
|
349
|
+
# {{Example command}}
|
|
350
|
+
\`\`\`
|
|
351
|
+
|
|
352
|
+
## Notes
|
|
353
|
+
|
|
354
|
+
- Generated from git history analysis
|
|
355
|
+
- ${pattern.frequency} instances found in recent commits
|
|
356
|
+
- Suggested for automation/skill creation
|
|
357
|
+
`;
|
|
358
|
+
return { name: skillName, content };
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Analyze and print git workflow summary
|
|
362
|
+
*/
|
|
363
|
+
export function printGitWorkflowSummary(cwd) {
|
|
364
|
+
const patterns = analyzeGitPatterns(cwd);
|
|
365
|
+
if (patterns.length === 0) {
|
|
366
|
+
console.log(chalk.yellow('No clear patterns found in git history'));
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
console.log(chalk.cyan('\nš Git Workflow Summary'));
|
|
370
|
+
console.log(chalk.gray(`Analyzed repository: ${cwd}\n`));
|
|
371
|
+
// Group by pattern type
|
|
372
|
+
const byType = new Map();
|
|
373
|
+
for (const p of patterns) {
|
|
374
|
+
const type = p.pattern.split(':')[0];
|
|
375
|
+
if (!byType.has(type)) {
|
|
376
|
+
byType.set(type, []);
|
|
377
|
+
}
|
|
378
|
+
byType.get(type).push(p);
|
|
379
|
+
}
|
|
380
|
+
for (const [type, pats] of Array.from(byType.entries())) {
|
|
381
|
+
console.log(chalk.blue(`${type.charAt(0).toUpperCase() + type.slice(1)}:`));
|
|
382
|
+
for (const p of pats.slice(0, 3)) {
|
|
383
|
+
console.log(chalk.gray(` - ${p.pattern} (${p.frequency}x)`));
|
|
384
|
+
}
|
|
385
|
+
console.log();
|
|
386
|
+
}
|
|
387
|
+
console.log(chalk.gray('Run: buildSkillCreatePrompt(cwd) to generate skills'));
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=skill-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-create.js","sourceRoot":"","sources":["../src/skill-create.ts"],"names":[],"mappings":"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"}
|
package/dist/skills.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Instinct } from './learning.js';
|
|
2
|
+
export interface Skill {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
prompt: string;
|
|
7
|
+
triggers: string[];
|
|
8
|
+
category: string;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
useCount: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function createSkill(name: string, description: string, prompt: string, triggers: string[], category?: string): Skill;
|
|
13
|
+
export declare function saveSkill(skill: Skill): void;
|
|
14
|
+
export declare function loadSkill(id: string): Skill | null;
|
|
15
|
+
export declare function listSkills(): Skill[];
|
|
16
|
+
export declare function deleteSkill(id: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Fuzzy match by trigger keywords. Returns the first matching skill.
|
|
19
|
+
*/
|
|
20
|
+
export declare function findSkill(query: string): Skill | null;
|
|
21
|
+
/**
|
|
22
|
+
* Apply skill by replacing {{placeholders}} with variables.
|
|
23
|
+
*/
|
|
24
|
+
export declare function applySkill(skill: Skill, variables: Record<string, string>): string;
|
|
25
|
+
/**
|
|
26
|
+
* Cluster high-confidence instincts into reusable skills.
|
|
27
|
+
* Groups by category, merges similar patterns.
|
|
28
|
+
*/
|
|
29
|
+
export declare function evolveInstinctsToSkills(instincts: Instinct[]): Skill[];
|
|
30
|
+
/**
|
|
31
|
+
* Increment useCount when a skill is applied.
|
|
32
|
+
*/
|
|
33
|
+
export declare function recordSkillUsage(id: string): void;
|
|
34
|
+
export declare function printSkillList(): void;
|