ai-devkit 0.6.0 → 0.7.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 +248 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +77 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/lib/EnvironmentSelector.d.ts +2 -1
- package/dist/lib/EnvironmentSelector.d.ts.map +1 -1
- package/dist/lib/EnvironmentSelector.js +55 -27
- package/dist/lib/EnvironmentSelector.js.map +1 -1
- package/dist/lib/SkillManager.d.ts +33 -0
- package/dist/lib/SkillManager.d.ts.map +1 -0
- package/dist/lib/SkillManager.js +254 -0
- package/dist/lib/SkillManager.js.map +1 -0
- package/dist/templates/commands/capture-knowledge.md +0 -5
- package/dist/templates/commands/check-implementation.md +0 -5
- package/dist/templates/commands/code-review.md +0 -5
- package/dist/templates/commands/debug.md +0 -5
- package/dist/templates/commands/execute-plan.md +0 -5
- package/dist/templates/commands/new-requirement.md +0 -5
- package/dist/templates/commands/remember.md +1 -1
- package/dist/templates/commands/review-design.md +0 -5
- package/dist/templates/commands/review-requirements.md +0 -5
- package/dist/templates/commands/simplify-implementation.md +0 -5
- package/dist/templates/commands/update-planning.md +0 -5
- package/dist/templates/commands/writing-test.md +0 -5
- package/dist/templates/env/base.md +32 -0
- package/dist/templates/templates/commands/capture-knowledge.md +0 -5
- package/dist/templates/templates/commands/check-implementation.md +0 -5
- package/dist/templates/templates/commands/code-review.md +0 -5
- package/dist/templates/templates/commands/debug.md +0 -5
- package/dist/templates/templates/commands/execute-plan.md +0 -5
- package/dist/templates/templates/commands/new-requirement.md +0 -5
- package/dist/templates/templates/commands/remember.md +1 -1
- package/dist/templates/templates/commands/review-design.md +0 -5
- package/dist/templates/templates/commands/review-requirements.md +0 -5
- package/dist/templates/templates/commands/simplify-implementation.md +0 -5
- package/dist/templates/templates/commands/update-planning.md +0 -5
- package/dist/templates/templates/commands/writing-test.md +0 -5
- package/dist/templates/templates/env/base.md +32 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util/env.d.ts +2 -0
- package/dist/util/env.d.ts.map +1 -1
- package/dist/util/env.js +14 -0
- package/dist/util/env.js.map +1 -1
- package/dist/util/git.d.ts +15 -0
- package/dist/util/git.d.ts.map +1 -0
- package/dist/util/git.js +82 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/skill.d.ts +13 -0
- package/dist/util/skill.d.ts.map +1 -0
- package/dist/util/skill.js +34 -0
- package/dist/util/skill.js.map +1 -0
- package/package.json +1 -1
- package/templates/commands/capture-knowledge.md +0 -5
- package/templates/commands/check-implementation.md +0 -5
- package/templates/commands/code-review.md +0 -5
- package/templates/commands/debug.md +0 -5
- package/templates/commands/execute-plan.md +0 -5
- package/templates/commands/new-requirement.md +0 -5
- package/templates/commands/remember.md +1 -1
- package/templates/commands/review-design.md +0 -5
- package/templates/commands/review-requirements.md +0 -5
- package/templates/commands/simplify-implementation.md +0 -5
- package/templates/commands/update-planning.md +0 -5
- package/templates/commands/writing-test.md +0 -5
- package/templates/env/base.md +32 -0
|
@@ -28,6 +28,38 @@ This project uses ai-devkit for structured AI-assisted development. Phase docume
|
|
|
28
28
|
- For new features, start with requirements clarification
|
|
29
29
|
- Update phase docs when significant changes or decisions are made
|
|
30
30
|
|
|
31
|
+
## Knowledge Memory (Always Use When Helpful)
|
|
32
|
+
The AI assistant should proactively use knowledge memory throughout all interactions:
|
|
33
|
+
|
|
34
|
+
### When to Search Memory
|
|
35
|
+
- Before starting any task, search for relevant project conventions, patterns, or decisions
|
|
36
|
+
- When you need clarification on how something was done before
|
|
37
|
+
- To check for existing solutions to similar problems
|
|
38
|
+
- To understand project-specific terminology or standards
|
|
39
|
+
|
|
40
|
+
**How to search**:
|
|
41
|
+
- Use `memory.searchKnowledge` MCP tool with relevant keywords, tags, and scope
|
|
42
|
+
- If MCP tools are unavailable, use `npx ai-devkit memory search` CLI command
|
|
43
|
+
- Example: Search for "authentication patterns" when implementing auth features
|
|
44
|
+
|
|
45
|
+
### When to Store Memory
|
|
46
|
+
- After making important architectural or design decisions
|
|
47
|
+
- When discovering useful patterns or solutions worth reusing
|
|
48
|
+
- If the user explicitly asks to "remember this" or save guidance
|
|
49
|
+
- When you establish new conventions or standards for the project
|
|
50
|
+
|
|
51
|
+
**How to store**:
|
|
52
|
+
- Use `memory.storeKnowledge` MCP tool or run `/remember` command
|
|
53
|
+
- If MCP tools are unavailable, use `npx ai-devkit memory store` CLI command
|
|
54
|
+
- Include clear title, detailed content, relevant tags, and appropriate scope
|
|
55
|
+
- Make knowledge specific and actionable, not generic advice
|
|
56
|
+
|
|
57
|
+
### Memory Best Practices
|
|
58
|
+
- **Be Proactive**: Search memory before asking the user repetitive questions
|
|
59
|
+
- **Be Specific**: Store knowledge that's actionable and reusable
|
|
60
|
+
- **Use Tags**: Tag knowledge appropriately for easy discovery (e.g., "api", "testing", "architecture")
|
|
61
|
+
- **Scope Appropriately**: Use `global` for general patterns, `project:<name>` for project-specific knowledge
|
|
62
|
+
|
|
31
63
|
## Testing & Quality
|
|
32
64
|
- Write tests alongside implementation
|
|
33
65
|
- Follow the testing strategy defined in `docs/ai/testing/`
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,cAAc,GACd,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,aAAa,CAAC;AAEzJ,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,EAQnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAQrD,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GACb,cAAc,GACd,QAAQ,GACR,UAAU,GACV,gBAAgB,GAChB,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,aAAa,CAAC;AAEzJ,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,iBAAiB,EAAE,KAAK,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,EAQnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAQrD,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAqCa,QAAA,gBAAgB,GAAY;IACvC,cAAc;IACd,QAAQ;IACR,UAAU;IACV,gBAAgB;IAChB,SAAS;IACT,YAAY;IACZ,YAAY;CACb,CAAC;AAEW,QAAA,mBAAmB,GAA0B;IACxD,YAAY,EAAE,sCAAsC;IACpD,MAAM,EAAE,8BAA8B;IACtC,QAAQ,EAAE,mCAAmC;IAC7C,cAAc,EAAE,sBAAsB;IACtC,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,4BAA4B;CACzC,CAAC"}
|
package/dist/util/env.d.ts
CHANGED
|
@@ -10,4 +10,6 @@ export declare function getEnvironmentDisplayName(envCode: EnvironmentCode): str
|
|
|
10
10
|
export declare function validateEnvironmentCodes(envCodes: string[]): EnvironmentCode[];
|
|
11
11
|
export declare function getGlobalCapableEnvironments(): EnvironmentDefinition[];
|
|
12
12
|
export declare function hasGlobalSupport(envCode: EnvironmentCode): boolean;
|
|
13
|
+
export declare function getSkillPath(envCode: EnvironmentCode): string | undefined;
|
|
14
|
+
export declare function getSkillCapableEnvironments(): EnvironmentDefinition[];
|
|
13
15
|
//# sourceMappingURL=env.d.ts.map
|
package/dist/util/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAErE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CA4ElF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAAe,EAA8D,CAAC;AAElH,wBAAgB,kBAAkB,IAAI,qBAAqB,EAAE,CAE5D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS,CAE1F;AAED,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAE1D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,qBAAqB,EAAE,CAExF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,eAAe,CAE9E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAG1E;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAiB9E;AAED,wBAAgB,4BAA4B,IAAI,qBAAqB,EAAE,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAGlE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED,wBAAgB,2BAA2B,IAAI,qBAAqB,EAAE,CAErE"}
|
package/dist/util/env.js
CHANGED
|
@@ -10,18 +10,22 @@ exports.getEnvironmentDisplayName = getEnvironmentDisplayName;
|
|
|
10
10
|
exports.validateEnvironmentCodes = validateEnvironmentCodes;
|
|
11
11
|
exports.getGlobalCapableEnvironments = getGlobalCapableEnvironments;
|
|
12
12
|
exports.hasGlobalSupport = hasGlobalSupport;
|
|
13
|
+
exports.getSkillPath = getSkillPath;
|
|
14
|
+
exports.getSkillCapableEnvironments = getSkillCapableEnvironments;
|
|
13
15
|
exports.ENVIRONMENT_DEFINITIONS = {
|
|
14
16
|
cursor: {
|
|
15
17
|
code: 'cursor',
|
|
16
18
|
name: 'Cursor',
|
|
17
19
|
contextFileName: 'AGENTS.md',
|
|
18
20
|
commandPath: '.cursor/commands',
|
|
21
|
+
skillPath: '.cursor/skills',
|
|
19
22
|
},
|
|
20
23
|
claude: {
|
|
21
24
|
code: 'claude',
|
|
22
25
|
name: 'Claude Code',
|
|
23
26
|
contextFileName: 'CLAUDE.md',
|
|
24
27
|
commandPath: '.claude/commands',
|
|
28
|
+
skillPath: '.claude/skills',
|
|
25
29
|
},
|
|
26
30
|
github: {
|
|
27
31
|
code: 'github',
|
|
@@ -43,6 +47,7 @@ exports.ENVIRONMENT_DEFINITIONS = {
|
|
|
43
47
|
contextFileName: 'AGENTS.md',
|
|
44
48
|
commandPath: '.codex/commands',
|
|
45
49
|
globalCommandPath: '.codex/prompts',
|
|
50
|
+
skillPath: '.codex/skills',
|
|
46
51
|
},
|
|
47
52
|
windsurf: {
|
|
48
53
|
code: 'windsurf',
|
|
@@ -67,6 +72,7 @@ exports.ENVIRONMENT_DEFINITIONS = {
|
|
|
67
72
|
name: 'OpenCode',
|
|
68
73
|
contextFileName: 'AGENTS.md',
|
|
69
74
|
commandPath: '.opencode/commands',
|
|
75
|
+
skillPath: '.opencode/skills',
|
|
70
76
|
},
|
|
71
77
|
roo: {
|
|
72
78
|
code: 'roo',
|
|
@@ -80,6 +86,7 @@ exports.ENVIRONMENT_DEFINITIONS = {
|
|
|
80
86
|
contextFileName: 'AGENTS.md',
|
|
81
87
|
commandPath: '.agent/workflows',
|
|
82
88
|
globalCommandPath: '.gemini/antigravity/global_workflows',
|
|
89
|
+
skillPath: '.agent/skills',
|
|
83
90
|
}
|
|
84
91
|
};
|
|
85
92
|
exports.ALL_ENVIRONMENT_CODES = Object.keys(exports.ENVIRONMENT_DEFINITIONS);
|
|
@@ -125,4 +132,11 @@ function hasGlobalSupport(envCode) {
|
|
|
125
132
|
const env = getEnvironment(envCode);
|
|
126
133
|
return env !== undefined && env.globalCommandPath !== undefined;
|
|
127
134
|
}
|
|
135
|
+
function getSkillPath(envCode) {
|
|
136
|
+
const env = getEnvironment(envCode);
|
|
137
|
+
return env?.skillPath;
|
|
138
|
+
}
|
|
139
|
+
function getSkillCapableEnvironments() {
|
|
140
|
+
return getAllEnvironments().filter(env => env.skillPath !== undefined);
|
|
141
|
+
}
|
|
128
142
|
//# sourceMappingURL=env.js.map
|
package/dist/util/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/util/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if git is installed and available in PATH
|
|
3
|
+
* @throws Error if git is not installed
|
|
4
|
+
*/
|
|
5
|
+
export declare function ensureGitInstalled(): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Clones a repository to the specified directory
|
|
8
|
+
* @param targetDir - Target directory for the clone
|
|
9
|
+
* @param repoName - Name of the repository
|
|
10
|
+
* @param gitUrl - Git URL to clone from
|
|
11
|
+
* @returns Path to cloned repository
|
|
12
|
+
* @throws Error if clone fails or times out
|
|
13
|
+
*/
|
|
14
|
+
export declare function cloneRepository(targetDir: string, repoName: string, gitUrl: string): Promise<string>;
|
|
15
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/util/git.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQxD;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB1G"}
|
package/dist/util/git.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ensureGitInstalled = ensureGitInstalled;
|
|
37
|
+
exports.cloneRepository = cloneRepository;
|
|
38
|
+
const child_process_1 = require("child_process");
|
|
39
|
+
const util_1 = require("util");
|
|
40
|
+
const fs = __importStar(require("fs-extra"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
43
|
+
/**
|
|
44
|
+
* Checks if git is installed and available in PATH
|
|
45
|
+
* @throws Error if git is not installed
|
|
46
|
+
*/
|
|
47
|
+
async function ensureGitInstalled() {
|
|
48
|
+
try {
|
|
49
|
+
await execAsync('git --version');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
throw new Error('Git is not installed or not in PATH. Please install Git: https://git-scm.com/downloads');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Clones a repository to the specified directory
|
|
57
|
+
* @param targetDir - Target directory for the clone
|
|
58
|
+
* @param repoName - Name of the repository
|
|
59
|
+
* @param gitUrl - Git URL to clone from
|
|
60
|
+
* @returns Path to cloned repository
|
|
61
|
+
* @throws Error if clone fails or times out
|
|
62
|
+
*/
|
|
63
|
+
async function cloneRepository(targetDir, repoName, gitUrl) {
|
|
64
|
+
const repoPath = path.join(targetDir, repoName);
|
|
65
|
+
if (await fs.pathExists(repoPath)) {
|
|
66
|
+
console.log(` → ${targetDir}/${repoName} (already exists, skipped)`);
|
|
67
|
+
return repoPath;
|
|
68
|
+
}
|
|
69
|
+
console.log(` → Cloning ${repoName} (this may take a moment)...`);
|
|
70
|
+
await fs.ensureDir(path.dirname(repoPath));
|
|
71
|
+
try {
|
|
72
|
+
await execAsync(`git clone --depth 1 --single-branch "${gitUrl}" "${repoPath}"`, {
|
|
73
|
+
timeout: 60000,
|
|
74
|
+
});
|
|
75
|
+
console.log(' → Clone complete');
|
|
76
|
+
return repoPath;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
throw new Error(`Git clone failed: ${error.message}. Check network and git installation.`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/util/git.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,gDAQC;AAUD,0CAoBC;AAjDD,iDAAqC;AACrC,+BAAiC;AACjC,6CAA+B;AAC/B,2CAA6B;AAE7B,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAElC;;;GAGG;AACI,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,wFAAwF,CACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAc;IACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,IAAI,QAAQ,4BAA4B,CAAC,CAAC;QACtE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,8BAA8B,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,wCAAwC,MAAM,MAAM,QAAQ,GAAG,EAAE;YAC/E,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,KAAK,CAAC,OAAO,uCAAuC,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates registry ID format
|
|
3
|
+
* @param registryId - Expected format: "org/repo"
|
|
4
|
+
* @throws Error if format is invalid or contains unsafe characters
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateRegistryId(registryId: string): void;
|
|
7
|
+
/**
|
|
8
|
+
* Validates skill name according to Agent Skills specification
|
|
9
|
+
* @param skillName - Must be lowercase, alphanumeric with hyphens
|
|
10
|
+
* @throws Error if name doesn't meet requirements
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateSkillName(skillName: string): void;
|
|
13
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/util/skill.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAczD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateRegistryId = validateRegistryId;
|
|
4
|
+
exports.validateSkillName = validateSkillName;
|
|
5
|
+
/**
|
|
6
|
+
* Validates registry ID format
|
|
7
|
+
* @param registryId - Expected format: "org/repo"
|
|
8
|
+
* @throws Error if format is invalid or contains unsafe characters
|
|
9
|
+
*/
|
|
10
|
+
function validateRegistryId(registryId) {
|
|
11
|
+
if (!/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_-]+$/.test(registryId)) {
|
|
12
|
+
throw new Error(`Invalid registry ID format: "${registryId}". Expected format: "org/repo"`);
|
|
13
|
+
}
|
|
14
|
+
if (registryId.includes('..') || registryId.includes('~')) {
|
|
15
|
+
throw new Error('Invalid characters in registry ID');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates skill name according to Agent Skills specification
|
|
20
|
+
* @param skillName - Must be lowercase, alphanumeric with hyphens
|
|
21
|
+
* @throws Error if name doesn't meet requirements
|
|
22
|
+
*/
|
|
23
|
+
function validateSkillName(skillName) {
|
|
24
|
+
if (!/^[a-z0-9-]+$/.test(skillName)) {
|
|
25
|
+
throw new Error(`Invalid skill name: "${skillName}". Must contain only lowercase letters, numbers, and hyphens.`);
|
|
26
|
+
}
|
|
27
|
+
if (skillName.startsWith('-') || skillName.endsWith('-')) {
|
|
28
|
+
throw new Error('Skill name cannot start or end with a hyphen.');
|
|
29
|
+
}
|
|
30
|
+
if (skillName.includes('--')) {
|
|
31
|
+
throw new Error('Skill name cannot contain consecutive hyphens.');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/util/skill.ts"],"names":[],"mappings":";;AAKA,gDAQC;AAOD,8CAcC;AAlCD;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,UAAkB;IACnD,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,gCAAgC,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,+DAA+D,CACjG,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -6,11 +6,6 @@ description: Capture structured knowledge about a code entry point and save it t
|
|
|
6
6
|
|
|
7
7
|
Guide me through creating a structured understanding of a code entry point and saving it to the knowledge docs.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
- Entry point (file, folder, function, API)
|
|
16
11
|
- Why this entry point matters (feature, bug, investigation)
|
|
@@ -4,11 +4,6 @@ description: Compare implementation with design and requirements docs to ensure
|
|
|
4
4
|
|
|
5
5
|
Compare the current implementation with the design in docs/ai/design/ and requirements in docs/ai/requirements/. Please follow this structured review:
|
|
6
6
|
|
|
7
|
-
## Memory (use when helpful)
|
|
8
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
9
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
10
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
11
|
-
|
|
12
7
|
1. Ask me for:
|
|
13
8
|
- Feature/branch description
|
|
14
9
|
- List of modified files
|
|
@@ -6,11 +6,6 @@ description: Perform a local code review before pushing changes, ensuring alignm
|
|
|
6
6
|
|
|
7
7
|
You are helping me perform a local code review **before** I push changes. Please follow this structured workflow.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
Ask me for:
|
|
16
11
|
- Brief feature/branch description
|
|
@@ -6,11 +6,6 @@ description: Guide me through debugging a code issue by clarifying expectations,
|
|
|
6
6
|
|
|
7
7
|
Help me debug an issue by clarifying expectations, identifying gaps, and agreeing on a fix plan before changing code.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
Ask me for:
|
|
16
11
|
- Brief issue description (what is happening?)
|
|
@@ -6,11 +6,6 @@ description: Execute a feature plan interactively, guiding me through each task
|
|
|
6
6
|
|
|
7
7
|
Help me work through a feature plan one task at a time.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
Ask me for:
|
|
16
11
|
- Feature name (kebab-case, e.g., `user-authentication`)
|
|
@@ -4,11 +4,6 @@ description: Add new feature/requirement documentation and guide me through the
|
|
|
4
4
|
|
|
5
5
|
I want to add a new feature/requirement. Please guide me through the complete development workflow:
|
|
6
6
|
|
|
7
|
-
## Memory (use when helpful)
|
|
8
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
9
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
10
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
11
|
-
|
|
12
7
|
## Step 1: Capture Requirement
|
|
13
8
|
First, ask me:
|
|
14
9
|
- What is the feature name? (e.g., "user-authentication", "payment-integration")
|
|
@@ -21,7 +21,7 @@ If I'm vague, ask follow-ups to make it specific and actionable.
|
|
|
21
21
|
|
|
22
22
|
## Step 3: Store
|
|
23
23
|
Call `memory.storeKnowledge` with title, content, tags, scope.
|
|
24
|
-
If MCP tools are unavailable, use `ai-devkit memory store` instead.
|
|
24
|
+
If MCP tools are unavailable, use `npx ai-devkit memory store` instead.
|
|
25
25
|
|
|
26
26
|
## Step 4: Confirm
|
|
27
27
|
Summarize what was saved and offer to store more knowledge if needed.
|
|
@@ -4,11 +4,6 @@ description: Review the design documentation for a feature to ensure completenes
|
|
|
4
4
|
|
|
5
5
|
Review the design documentation in docs/ai/design/feature-{name}.md (and the project-level README if relevant). Summarize:
|
|
6
6
|
|
|
7
|
-
## Memory (use when helpful)
|
|
8
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
9
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
10
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
11
|
-
|
|
12
7
|
- Architecture overview (ensure mermaid diagram is present and accurate)
|
|
13
8
|
- Key components and their responsibilities
|
|
14
9
|
- Technology choices and rationale
|
|
@@ -4,11 +4,6 @@ description: Review the requirements documentation for a feature to ensure compl
|
|
|
4
4
|
|
|
5
5
|
Please review `docs/ai/requirements/feature-{name}.md` and the project-level template `docs/ai/requirements/README.md` to ensure structure and content alignment. Summarize:
|
|
6
6
|
|
|
7
|
-
## Memory (use when helpful)
|
|
8
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
9
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
10
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
11
|
-
|
|
12
7
|
- Core problem statement and affected users
|
|
13
8
|
- Goals, non-goals, and success criteria
|
|
14
9
|
- Primary user stories & critical flows
|
|
@@ -6,11 +6,6 @@ description: Analyze and simplify existing implementations to reduce complexity,
|
|
|
6
6
|
|
|
7
7
|
You are an expert engineer focused on reducing complexity and improving scalability. Help me simplify an existing implementation while maintaining or improving its functionality.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
Ask me for:
|
|
16
11
|
- Target file(s) or component(s) to simplify
|
|
@@ -6,11 +6,6 @@ description: Assist in updating planning documentation to reflect current implem
|
|
|
6
6
|
|
|
7
7
|
Please help me reconcile the current implementation progress with our planning documentation.
|
|
8
8
|
|
|
9
|
-
## Memory (use when helpful)
|
|
10
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
11
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
12
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
13
|
-
|
|
14
9
|
## Step 1: Gather Context
|
|
15
10
|
Ask me for:
|
|
16
11
|
- Feature/branch name and brief status
|
|
@@ -4,11 +4,6 @@ description: Add tests for a new feature.
|
|
|
4
4
|
|
|
5
5
|
Review `docs/ai/testing/feature-{name}.md` and ensure it mirrors the base template before writing tests.
|
|
6
6
|
|
|
7
|
-
## Memory (use when helpful)
|
|
8
|
-
- If you need clarification or project conventions, query `memory.searchKnowledge` with a brief task description, tags, and scope.
|
|
9
|
-
- If I ask to save reusable guidance, run `/remember` (or call `memory.storeKnowledge`).
|
|
10
|
-
- If MCP tools are unavailable, use `ai-devkit memory search` or `ai-devkit memory store`.
|
|
11
|
-
|
|
12
7
|
## Step 1: Gather Context
|
|
13
8
|
Ask me for:
|
|
14
9
|
- Feature name and branch
|
package/templates/env/base.md
CHANGED
|
@@ -28,6 +28,38 @@ This project uses ai-devkit for structured AI-assisted development. Phase docume
|
|
|
28
28
|
- For new features, start with requirements clarification
|
|
29
29
|
- Update phase docs when significant changes or decisions are made
|
|
30
30
|
|
|
31
|
+
## Knowledge Memory (Always Use When Helpful)
|
|
32
|
+
The AI assistant should proactively use knowledge memory throughout all interactions:
|
|
33
|
+
|
|
34
|
+
### When to Search Memory
|
|
35
|
+
- Before starting any task, search for relevant project conventions, patterns, or decisions
|
|
36
|
+
- When you need clarification on how something was done before
|
|
37
|
+
- To check for existing solutions to similar problems
|
|
38
|
+
- To understand project-specific terminology or standards
|
|
39
|
+
|
|
40
|
+
**How to search**:
|
|
41
|
+
- Use `memory.searchKnowledge` MCP tool with relevant keywords, tags, and scope
|
|
42
|
+
- If MCP tools are unavailable, use `npx ai-devkit memory search` CLI command
|
|
43
|
+
- Example: Search for "authentication patterns" when implementing auth features
|
|
44
|
+
|
|
45
|
+
### When to Store Memory
|
|
46
|
+
- After making important architectural or design decisions
|
|
47
|
+
- When discovering useful patterns or solutions worth reusing
|
|
48
|
+
- If the user explicitly asks to "remember this" or save guidance
|
|
49
|
+
- When you establish new conventions or standards for the project
|
|
50
|
+
|
|
51
|
+
**How to store**:
|
|
52
|
+
- Use `memory.storeKnowledge` MCP tool or run `/remember` command
|
|
53
|
+
- If MCP tools are unavailable, use `npx ai-devkit memory store` CLI command
|
|
54
|
+
- Include clear title, detailed content, relevant tags, and appropriate scope
|
|
55
|
+
- Make knowledge specific and actionable, not generic advice
|
|
56
|
+
|
|
57
|
+
### Memory Best Practices
|
|
58
|
+
- **Be Proactive**: Search memory before asking the user repetitive questions
|
|
59
|
+
- **Be Specific**: Store knowledge that's actionable and reusable
|
|
60
|
+
- **Use Tags**: Tag knowledge appropriately for easy discovery (e.g., "api", "testing", "architecture")
|
|
61
|
+
- **Scope Appropriately**: Use `global` for general patterns, `project:<name>` for project-specific knowledge
|
|
62
|
+
|
|
31
63
|
## Testing & Quality
|
|
32
64
|
- Write tests alongside implementation
|
|
33
65
|
- Follow the testing strategy defined in `docs/ai/testing/`
|