xo-agent 0.0.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/LICENSE +21 -0
- package/README.md +159 -0
- package/bin/cli.js +2 -0
- package/dist/commands/add-agent.d.ts +3 -0
- package/dist/commands/add-agent.d.ts.map +1 -0
- package/dist/commands/add-agent.js +114 -0
- package/dist/commands/add-agent.js.map +1 -0
- package/dist/commands/add-command.d.ts +3 -0
- package/dist/commands/add-command.d.ts.map +1 -0
- package/dist/commands/add-command.js +114 -0
- package/dist/commands/add-command.js.map +1 -0
- package/dist/commands/add-skill.d.ts +3 -0
- package/dist/commands/add-skill.d.ts.map +1 -0
- package/dist/commands/add-skill.js +108 -0
- package/dist/commands/add-skill.js.map +1 -0
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +133 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/interactive.d.ts +3 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +176 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/skills/example-skill/SKILL.md +19 -0
- package/dist/templates/agents/code-reviewer/AGENT.md +138 -0
- package/dist/templates/agents/documentation-writer/AGENT.md +179 -0
- package/dist/templates/commands/deploy.md +52 -0
- package/dist/templates/commands/test.md +49 -0
- package/dist/templates/skills/example-skill/SKILL.md +19 -0
- package/dist/templates/skills/example-skill/references/reference.md +0 -0
- package/dist/templates/skills/example-skill/scripts/script.py +0 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/constants.d.ts +13 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +16 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/copy.d.ts +55 -0
- package/dist/utils/copy.d.ts.map +1 -0
- package/dist/utils/copy.js +229 -0
- package/dist/utils/copy.js.map +1 -0
- package/dist/utils/evaluate.d.ts +10 -0
- package/dist/utils/evaluate.d.ts.map +1 -0
- package/dist/utils/evaluate.js +28 -0
- package/dist/utils/evaluate.js.map +1 -0
- package/dist/utils/file-builder.d.ts +28 -0
- package/dist/utils/file-builder.d.ts.map +1 -0
- package/dist/utils/file-builder.js +106 -0
- package/dist/utils/file-builder.js.map +1 -0
- package/dist/utils/prompts.d.ts +12 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +152 -0
- package/dist/utils/prompts.js.map +1 -0
- package/dist/utils/transform.d.ts +11 -0
- package/dist/utils/transform.d.ts.map +1 -0
- package/dist/utils/transform.js +43 -0
- package/dist/utils/transform.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluate a value with the given agent and agent directory
|
|
3
|
+
* @param agent - The agent type
|
|
4
|
+
* @param agentDir - The agent directory
|
|
5
|
+
* @param jsExecution - The JavaScript execution code
|
|
6
|
+
* @param value - The value to evaluate
|
|
7
|
+
* @returns The evaluated value
|
|
8
|
+
*/
|
|
9
|
+
export declare function evaluate(agent: string, agentDir: string, jsExecution: string, value: string): any;
|
|
10
|
+
//# sourceMappingURL=evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/utils/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,OAiB3F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.evaluate = evaluate;
|
|
4
|
+
/**
|
|
5
|
+
* Evaluate a value with the given agent and agent directory
|
|
6
|
+
* @param agent - The agent type
|
|
7
|
+
* @param agentDir - The agent directory
|
|
8
|
+
* @param jsExecution - The JavaScript execution code
|
|
9
|
+
* @param value - The value to evaluate
|
|
10
|
+
* @returns The evaluated value
|
|
11
|
+
*/
|
|
12
|
+
function evaluate(agent, agentDir, jsExecution, value) {
|
|
13
|
+
try {
|
|
14
|
+
const fns = {
|
|
15
|
+
agent,
|
|
16
|
+
agentDir,
|
|
17
|
+
};
|
|
18
|
+
const result = new Function(...Object.keys(fns), `
|
|
19
|
+
${jsExecution}
|
|
20
|
+
return \`${value}\`;
|
|
21
|
+
`)(...Object.values(fns));
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../src/utils/evaluate.ts"],"names":[],"mappings":";;AAQA,4BAiBC;AAzBD;;;;;;;GAOG;AACH,SAAgB,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE,WAAmB,EAAE,KAAa;IAC1F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG;YACV,KAAK;YACL,QAAQ;SACT,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,QAAQ,CACzB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACnB;QACE,WAAW;iBACF,KAAK;KACjB,CACA,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface FileBuilderOptions {
|
|
2
|
+
agent: string;
|
|
3
|
+
content: string;
|
|
4
|
+
agentDir: string;
|
|
5
|
+
source: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class FileBuilder {
|
|
8
|
+
private agent;
|
|
9
|
+
private content;
|
|
10
|
+
private agentDir;
|
|
11
|
+
private source;
|
|
12
|
+
constructor({ agent, content, agentDir, source }: FileBuilderOptions);
|
|
13
|
+
/**
|
|
14
|
+
* Xử lý @include
|
|
15
|
+
*/
|
|
16
|
+
private handleInclude;
|
|
17
|
+
/**
|
|
18
|
+
* Xử lý @include
|
|
19
|
+
*/
|
|
20
|
+
include(): FileBuilder;
|
|
21
|
+
/**
|
|
22
|
+
* Xử lý code
|
|
23
|
+
*/
|
|
24
|
+
code(): FileBuilder;
|
|
25
|
+
build(): string;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=file-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-builder.d.ts","sourceRoot":"","sources":["../../src/utils/file-builder.ts"],"names":[],"mappings":"AAIA,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,kBAAkB;IAOpE;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,IAAI,WAAW;IAKtB;;OAEG;IACH,IAAI,IAAI,WAAW;IAiBnB,KAAK,IAAI,MAAM;CAGhB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
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.FileBuilder = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const evaluate_1 = require("./evaluate");
|
|
40
|
+
class FileBuilder {
|
|
41
|
+
constructor({ agent, content, agentDir, source }) {
|
|
42
|
+
this.agent = agent;
|
|
43
|
+
this.content = content;
|
|
44
|
+
this.agentDir = agentDir;
|
|
45
|
+
this.source = source;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Xử lý @include
|
|
49
|
+
*/
|
|
50
|
+
handleInclude(content) {
|
|
51
|
+
if (!content.includes("@include")) {
|
|
52
|
+
return content;
|
|
53
|
+
}
|
|
54
|
+
return content.replace(/(@include\s*)(["'`])(.*)(["'`])\n/g, (_, _prefix, _quote, filePath, _suffix) => {
|
|
55
|
+
// Nếu tự include chính mình xoá luôn
|
|
56
|
+
if (filePath === this.source) {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
// Nếu include file có agent hoặc general
|
|
60
|
+
if (filePath.includes(`.md`)) {
|
|
61
|
+
const pathContent = fs.readFileSync(path.resolve(filePath), "utf-8");
|
|
62
|
+
return new FileBuilder({
|
|
63
|
+
agent: this.agent,
|
|
64
|
+
content: pathContent,
|
|
65
|
+
agentDir: this.agentDir,
|
|
66
|
+
source: filePath,
|
|
67
|
+
})
|
|
68
|
+
.include()
|
|
69
|
+
.code()
|
|
70
|
+
.build();
|
|
71
|
+
}
|
|
72
|
+
return "";
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Xử lý @include
|
|
77
|
+
*/
|
|
78
|
+
include() {
|
|
79
|
+
this.content = this.handleInclude(this.content);
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Xử lý code
|
|
84
|
+
*/
|
|
85
|
+
code() {
|
|
86
|
+
const pattern1 = /(?<=```javascript\sexecution)([\s\S]*?)(?=```)/g;
|
|
87
|
+
const pattern2 = /\n```javascript\sexecution([\s\S]*?)```\n/g;
|
|
88
|
+
const jsExecution = this.content.match(pattern1)?.[0]?.trim() ?? "";
|
|
89
|
+
this.content = this.content
|
|
90
|
+
.trimStart()
|
|
91
|
+
.replace(/^#\s.*\n\n?/g, "")
|
|
92
|
+
.replace(pattern2, "")
|
|
93
|
+
.replace(/`{1,3}([\s\S]*?)`{1,3}/g, (val) => {
|
|
94
|
+
const finalVal = `${val.replace(/^`(?!`)|(?<!`)`$/g, "\\`").replace(/^`{3}|`{3}$/g, "\\`\\`\\`")}`.trim();
|
|
95
|
+
// Fix: options.agent is not defined here, use this.agent
|
|
96
|
+
return (0, evaluate_1.evaluate)(this.agent, this.agentDir, jsExecution, finalVal);
|
|
97
|
+
})
|
|
98
|
+
.replace(/(?<![^\s])\n\n/g, "\n");
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
build() {
|
|
102
|
+
return this.content;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.FileBuilder = FileBuilder;
|
|
106
|
+
//# sourceMappingURL=file-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-builder.js","sourceRoot":"","sources":["../../src/utils/file-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,2CAA6B;AAC7B,yCAAsC;AAStC,MAAa,WAAW;IAMtB,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAsB;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAe;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,oCAAoC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YACrG,qCAAqC;YACrC,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,yCAAyC;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACrE,OAAO,IAAI,WAAW,CAAC;oBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,QAAQ;iBACjB,CAAC;qBACC,OAAO,EAAE;qBACT,IAAI,EAAE;qBACN,KAAK,EAAE,CAAC;YACb,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,MAAM,QAAQ,GAAG,iDAAiD,CAAC;QACnE,MAAM,QAAQ,GAAG,4CAA4C,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;aACxB,SAAS,EAAE;aACX,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;aACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YAC1G,yDAAyD;YACzD,OAAO,IAAA,mBAAQ,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC,CAAC;aACD,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAzED,kCAyEC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AgentType, Skill } from '../types';
|
|
2
|
+
import { Template } from './copy';
|
|
3
|
+
export type ActionType = 'skill' | 'command' | 'agent';
|
|
4
|
+
export declare function promptForActionType(): Promise<ActionType>;
|
|
5
|
+
export declare function promptForAgent(): Promise<AgentType>;
|
|
6
|
+
export declare function promptForSkill(skills: Skill[]): Promise<Skill>;
|
|
7
|
+
export declare function promptForMultipleSkills(skills: Skill[]): Promise<Skill[]>;
|
|
8
|
+
export declare function promptForName(type: string): Promise<string>;
|
|
9
|
+
export declare function confirmAction(message: string): Promise<boolean>;
|
|
10
|
+
export declare function promptForCommandTemplate(commands: Template[]): Promise<Template | null>;
|
|
11
|
+
export declare function promptForAgentTemplate(agents: Template[]): Promise<Template | null>;
|
|
12
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAiB,KAAK,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAc/D;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC,CAazD;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAepE;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAqB/E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBjE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrE;AAED,wBAAsB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsB7F;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsBzF"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.promptForActionType = promptForActionType;
|
|
7
|
+
exports.promptForAgent = promptForAgent;
|
|
8
|
+
exports.promptForSkill = promptForSkill;
|
|
9
|
+
exports.promptForMultipleSkills = promptForMultipleSkills;
|
|
10
|
+
exports.promptForName = promptForName;
|
|
11
|
+
exports.confirmAction = confirmAction;
|
|
12
|
+
exports.promptForCommandTemplate = promptForCommandTemplate;
|
|
13
|
+
exports.promptForAgentTemplate = promptForAgentTemplate;
|
|
14
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
15
|
+
async function promptForActionType() {
|
|
16
|
+
const { action } = await inquirer_1.default.prompt([
|
|
17
|
+
{
|
|
18
|
+
type: 'list',
|
|
19
|
+
name: 'action',
|
|
20
|
+
message: 'What would you like to add?',
|
|
21
|
+
choices: [
|
|
22
|
+
{ name: 'Skill - Add pre-built skills to your project', value: 'skill' },
|
|
23
|
+
{ name: 'Command - Create a new workflow command', value: 'command' },
|
|
24
|
+
{ name: 'Agent - Create a new sub-agent', value: 'agent' },
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
return action;
|
|
29
|
+
}
|
|
30
|
+
async function promptForAgent() {
|
|
31
|
+
const { agent } = await inquirer_1.default.prompt([
|
|
32
|
+
{
|
|
33
|
+
type: 'list',
|
|
34
|
+
name: 'agent',
|
|
35
|
+
message: 'Select the agent:',
|
|
36
|
+
choices: [
|
|
37
|
+
{ name: 'Antigravity', value: 'antigravity' },
|
|
38
|
+
{ name: 'Claude', value: 'claude' },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
]);
|
|
42
|
+
return agent;
|
|
43
|
+
}
|
|
44
|
+
async function promptForSkill(skills) {
|
|
45
|
+
const choices = skills.map((skill) => ({
|
|
46
|
+
name: skill.description ? `${skill.name} - ${skill.description}` : skill.name,
|
|
47
|
+
value: skill,
|
|
48
|
+
}));
|
|
49
|
+
const { skill } = await inquirer_1.default.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: 'list',
|
|
52
|
+
name: 'skill',
|
|
53
|
+
message: 'Select a skill to add:',
|
|
54
|
+
choices,
|
|
55
|
+
},
|
|
56
|
+
]);
|
|
57
|
+
return skill;
|
|
58
|
+
}
|
|
59
|
+
async function promptForMultipleSkills(skills) {
|
|
60
|
+
const choices = skills.map((skill) => ({
|
|
61
|
+
name: skill.description ? `${skill.name} - ${skill.description}` : skill.name,
|
|
62
|
+
value: skill,
|
|
63
|
+
}));
|
|
64
|
+
const { selectedSkills } = await inquirer_1.default.prompt([
|
|
65
|
+
{
|
|
66
|
+
type: 'checkbox',
|
|
67
|
+
name: 'selectedSkills',
|
|
68
|
+
message: 'Select skills to add (use space to select, enter to confirm):',
|
|
69
|
+
choices,
|
|
70
|
+
validate: (answer) => {
|
|
71
|
+
if (answer.length < 1) {
|
|
72
|
+
return 'You must choose at least one skill.';
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
]);
|
|
78
|
+
return selectedSkills;
|
|
79
|
+
}
|
|
80
|
+
async function promptForName(type) {
|
|
81
|
+
const { name } = await inquirer_1.default.prompt([
|
|
82
|
+
{
|
|
83
|
+
type: 'input',
|
|
84
|
+
name: 'name',
|
|
85
|
+
message: `Enter ${type} name:`,
|
|
86
|
+
validate: (input) => {
|
|
87
|
+
if (!input || input.trim().length === 0) {
|
|
88
|
+
return `${type} name cannot be empty`;
|
|
89
|
+
}
|
|
90
|
+
if (!/^[a-z0-9-]+$/.test(input)) {
|
|
91
|
+
return `${type} name must contain only lowercase letters, numbers, and hyphens`;
|
|
92
|
+
}
|
|
93
|
+
return true;
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
]);
|
|
97
|
+
return name.trim();
|
|
98
|
+
}
|
|
99
|
+
async function confirmAction(message) {
|
|
100
|
+
const { confirmed } = await inquirer_1.default.prompt([
|
|
101
|
+
{
|
|
102
|
+
type: 'confirm',
|
|
103
|
+
name: 'confirmed',
|
|
104
|
+
message,
|
|
105
|
+
default: true,
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
return confirmed;
|
|
109
|
+
}
|
|
110
|
+
async function promptForCommandTemplate(commands) {
|
|
111
|
+
if (commands.length === 0) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const choices = [
|
|
115
|
+
{ name: 'Create from scratch', value: null },
|
|
116
|
+
...commands.map((cmd) => ({
|
|
117
|
+
name: cmd.description ? `${cmd.name} - ${cmd.description}` : cmd.name,
|
|
118
|
+
value: cmd,
|
|
119
|
+
})),
|
|
120
|
+
];
|
|
121
|
+
const { template } = await inquirer_1.default.prompt([
|
|
122
|
+
{
|
|
123
|
+
type: 'list',
|
|
124
|
+
name: 'template',
|
|
125
|
+
message: 'Select a command template:',
|
|
126
|
+
choices,
|
|
127
|
+
},
|
|
128
|
+
]);
|
|
129
|
+
return template;
|
|
130
|
+
}
|
|
131
|
+
async function promptForAgentTemplate(agents) {
|
|
132
|
+
if (agents.length === 0) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const choices = [
|
|
136
|
+
{ name: 'Create from scratch', value: null },
|
|
137
|
+
...agents.map((agent) => ({
|
|
138
|
+
name: agent.description ? `${agent.name} - ${agent.description}` : agent.name,
|
|
139
|
+
value: agent,
|
|
140
|
+
})),
|
|
141
|
+
];
|
|
142
|
+
const { template } = await inquirer_1.default.prompt([
|
|
143
|
+
{
|
|
144
|
+
type: 'list',
|
|
145
|
+
name: 'template',
|
|
146
|
+
message: 'Select an agent template:',
|
|
147
|
+
choices,
|
|
148
|
+
},
|
|
149
|
+
]);
|
|
150
|
+
return template;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/utils/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TransformFunction } from './copy';
|
|
2
|
+
/**
|
|
3
|
+
* Default transformation function for .md files
|
|
4
|
+
* You can customize this to modify file content before copying
|
|
5
|
+
*/
|
|
6
|
+
export declare const defaultTransform: TransformFunction;
|
|
7
|
+
/**
|
|
8
|
+
* Example: Transform SKILL.md to add metadata
|
|
9
|
+
*/
|
|
10
|
+
export declare const transformSkillMd: TransformFunction;
|
|
11
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/utils/transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAe9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,iBAwB9B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformSkillMd = exports.defaultTransform = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default transformation function for .md files
|
|
6
|
+
* You can customize this to modify file content before copying
|
|
7
|
+
*/
|
|
8
|
+
const defaultTransform = async (content, filePath) => {
|
|
9
|
+
// Example transformations (customize as needed):
|
|
10
|
+
// 1. Add a comment header
|
|
11
|
+
// const header = `<!-- Copied from @xotiny/add-skill -->\n\n`;
|
|
12
|
+
// content = header + content;
|
|
13
|
+
// 2. Replace certain patterns
|
|
14
|
+
// content = content.replace(/some-pattern/g, 'replacement');
|
|
15
|
+
// 3. Update relative paths
|
|
16
|
+
// content = content.replace(/\.\/(.+\.md)/g, (match, p1) => `./${p1}`);
|
|
17
|
+
// For now, return content as-is
|
|
18
|
+
return content;
|
|
19
|
+
};
|
|
20
|
+
exports.defaultTransform = defaultTransform;
|
|
21
|
+
/**
|
|
22
|
+
* Example: Transform SKILL.md to add metadata
|
|
23
|
+
*/
|
|
24
|
+
const transformSkillMd = async (content, filePath) => {
|
|
25
|
+
if (filePath === 'SKILL.md') {
|
|
26
|
+
// Add installation timestamp to frontmatter
|
|
27
|
+
const timestamp = new Date().toISOString();
|
|
28
|
+
// Check if frontmatter exists
|
|
29
|
+
if (content.startsWith('---')) {
|
|
30
|
+
const endOfFrontmatter = content.indexOf('---', 3);
|
|
31
|
+
if (endOfFrontmatter !== -1) {
|
|
32
|
+
const frontmatter = content.slice(0, endOfFrontmatter + 3);
|
|
33
|
+
const body = content.slice(endOfFrontmatter + 3);
|
|
34
|
+
// Add installed_at field before closing ---
|
|
35
|
+
const updatedFrontmatter = frontmatter.replace(/---$/, `installed_at: ${timestamp}\n---`);
|
|
36
|
+
return updatedFrontmatter + body;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return content;
|
|
41
|
+
};
|
|
42
|
+
exports.transformSkillMd = transformSkillMd;
|
|
43
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/utils/transform.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACI,MAAM,gBAAgB,GAAsB,KAAK,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IAC7F,iDAAiD;IAEjD,0BAA0B;IAC1B,+DAA+D;IAC/D,8BAA8B;IAE9B,8BAA8B;IAC9B,6DAA6D;IAE7D,2BAA2B;IAC3B,wEAAwE;IAExE,gCAAgC;IAChC,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAfW,QAAA,gBAAgB,oBAe3B;AAEF;;GAEG;AACI,MAAM,gBAAgB,GAAsB,KAAK,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IAC7F,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,4CAA4C;QAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE3C,8BAA8B;QAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;gBAEjD,4CAA4C;gBAC5C,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAC5C,MAAM,EACN,iBAAiB,SAAS,OAAO,CAClC,CAAC;gBAEF,OAAO,kBAAkB,GAAG,IAAI,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAxBW,QAAA,gBAAgB,oBAwB3B"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "xo-agent",
|
|
3
|
+
"version": "0.0.1-0",
|
|
4
|
+
"description": "CLI tool to manage AI agent projects (skills, commands, agents) for Antigravity and Claude",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"xo-agent": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc && copyfiles -u 1 \"src/templates/**/*\" dist",
|
|
11
|
+
"dev": "tsc --watch",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"bin",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
20
|
+
],
|
|
21
|
+
"keywords": [
|
|
22
|
+
"cli",
|
|
23
|
+
"skill",
|
|
24
|
+
"agent",
|
|
25
|
+
"antigravity",
|
|
26
|
+
"claude",
|
|
27
|
+
"ai"
|
|
28
|
+
],
|
|
29
|
+
"author": "",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"type": "commonjs",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"commander": "^12.1.0",
|
|
34
|
+
"fast-glob": "^3.3.3",
|
|
35
|
+
"fs-extra": "^11.3.3",
|
|
36
|
+
"inquirer": "^8.2.7"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/fs-extra": "^11.0.4",
|
|
40
|
+
"@types/inquirer": "^8.2.10",
|
|
41
|
+
"@types/node": "^20.11.5",
|
|
42
|
+
"copyfiles": "^2.4.1",
|
|
43
|
+
"typescript": "^5.3.3"
|
|
44
|
+
}
|
|
45
|
+
}
|