@archznn/crewloop-skills 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +16 -3
- package/packages/cli/README.md +55 -0
- package/packages/cli/bin/crewloop.js +6 -0
- package/packages/cli/dist/agents.d.ts +7 -0
- package/packages/cli/dist/agents.d.ts.map +1 -0
- package/packages/cli/dist/agents.js +31 -0
- package/packages/cli/dist/agents.js.map +1 -0
- package/packages/cli/dist/cli.d.ts +14 -0
- package/packages/cli/dist/cli.d.ts.map +1 -0
- package/packages/cli/dist/cli.js +255 -0
- package/packages/cli/dist/cli.js.map +1 -0
- package/packages/cli/dist/installer.d.ts +19 -0
- package/packages/cli/dist/installer.d.ts.map +1 -0
- package/packages/cli/dist/installer.js +89 -0
- package/packages/cli/dist/installer.js.map +1 -0
- package/packages/cli/dist/mcp.d.ts +20 -0
- package/packages/cli/dist/mcp.d.ts.map +1 -0
- package/packages/cli/dist/mcp.js +130 -0
- package/packages/cli/dist/mcp.js.map +1 -0
- package/packages/cli/dist/resolver.d.ts +7 -0
- package/packages/cli/dist/resolver.d.ts.map +1 -0
- package/packages/cli/dist/resolver.js +57 -0
- package/packages/cli/dist/resolver.js.map +1 -0
- package/packages/cli/dist/tests/agents.test.d.ts +2 -0
- package/packages/cli/dist/tests/agents.test.d.ts.map +1 -0
- package/packages/cli/dist/tests/agents.test.js +27 -0
- package/packages/cli/dist/tests/agents.test.js.map +1 -0
- package/packages/cli/dist/tests/cli.test.d.ts +2 -0
- package/packages/cli/dist/tests/cli.test.d.ts.map +1 -0
- package/packages/cli/dist/tests/cli.test.js +103 -0
- package/packages/cli/dist/tests/cli.test.js.map +1 -0
- package/packages/cli/dist/tests/installer.test.d.ts +2 -0
- package/packages/cli/dist/tests/installer.test.d.ts.map +1 -0
- package/packages/cli/dist/tests/installer.test.js +129 -0
- package/packages/cli/dist/tests/installer.test.js.map +1 -0
- package/packages/cli/dist/tests/mcp.test.d.ts +2 -0
- package/packages/cli/dist/tests/mcp.test.d.ts.map +1 -0
- package/packages/cli/dist/tests/mcp.test.js +153 -0
- package/packages/cli/dist/tests/mcp.test.js.map +1 -0
- package/packages/cli/dist/tests/resolver.test.d.ts +2 -0
- package/packages/cli/dist/tests/resolver.test.d.ts.map +1 -0
- package/packages/cli/dist/tests/resolver.test.js +41 -0
- package/packages/cli/dist/tests/resolver.test.js.map +1 -0
- package/servers/dashboard/README.md +87 -0
- package/servers/dashboard/bin/crewloop-dashboard.js +5 -0
- package/servers/dashboard/config-examples/codex-hooks.json +14 -0
- package/servers/dashboard/config-examples/kimi-code-config.toml +6 -0
- package/servers/dashboard/config-examples/opencode-plugin/crewloop-dashboard.js +64 -0
- package/servers/dashboard/dist/adapters/codex.d.ts +23 -0
- package/servers/dashboard/dist/adapters/codex.d.ts.map +1 -0
- package/servers/dashboard/dist/adapters/codex.js +28 -0
- package/servers/dashboard/dist/adapters/codex.js.map +1 -0
- package/servers/dashboard/dist/adapters/kimi.d.ts +13 -0
- package/servers/dashboard/dist/adapters/kimi.d.ts.map +1 -0
- package/servers/dashboard/dist/adapters/kimi.js +28 -0
- package/servers/dashboard/dist/adapters/kimi.js.map +1 -0
- package/servers/dashboard/dist/adapters/opencode.d.ts +9 -0
- package/servers/dashboard/dist/adapters/opencode.d.ts.map +1 -0
- package/servers/dashboard/dist/adapters/opencode.js +26 -0
- package/servers/dashboard/dist/adapters/opencode.js.map +1 -0
- package/servers/dashboard/dist/adapters/shim.d.ts +7 -0
- package/servers/dashboard/dist/adapters/shim.d.ts.map +1 -0
- package/servers/dashboard/dist/adapters/shim.js +107 -0
- package/servers/dashboard/dist/adapters/shim.js.map +1 -0
- package/servers/dashboard/dist/adapters/shim.test.d.ts +2 -0
- package/servers/dashboard/dist/adapters/shim.test.d.ts.map +1 -0
- package/servers/dashboard/dist/adapters/shim.test.js +72 -0
- package/servers/dashboard/dist/adapters/shim.test.js.map +1 -0
- package/servers/dashboard/dist/api/event.d.ts +13 -0
- package/servers/dashboard/dist/api/event.d.ts.map +1 -0
- package/servers/dashboard/dist/api/event.js +52 -0
- package/servers/dashboard/dist/api/event.js.map +1 -0
- package/servers/dashboard/dist/api/skills.d.ts +4 -0
- package/servers/dashboard/dist/api/skills.d.ts.map +1 -0
- package/servers/dashboard/dist/api/skills.js +12 -0
- package/servers/dashboard/dist/api/skills.js.map +1 -0
- package/servers/dashboard/dist/config.d.ts +11 -0
- package/servers/dashboard/dist/config.d.ts.map +1 -0
- package/servers/dashboard/dist/config.js +65 -0
- package/servers/dashboard/dist/config.js.map +1 -0
- package/servers/dashboard/dist/filters/sanitize.d.ts +14 -0
- package/servers/dashboard/dist/filters/sanitize.d.ts.map +1 -0
- package/servers/dashboard/dist/filters/sanitize.js +64 -0
- package/servers/dashboard/dist/filters/sanitize.js.map +1 -0
- package/servers/dashboard/dist/filters/sanitize.test.d.ts +2 -0
- package/servers/dashboard/dist/filters/sanitize.test.d.ts.map +1 -0
- package/servers/dashboard/dist/filters/sanitize.test.js +71 -0
- package/servers/dashboard/dist/filters/sanitize.test.js.map +1 -0
- package/servers/dashboard/dist/index.d.ts +2 -0
- package/servers/dashboard/dist/index.d.ts.map +1 -0
- package/servers/dashboard/dist/index.js +22 -0
- package/servers/dashboard/dist/index.js.map +1 -0
- package/servers/dashboard/dist/presenter.d.ts +7 -0
- package/servers/dashboard/dist/presenter.d.ts.map +1 -0
- package/servers/dashboard/dist/presenter.js +54 -0
- package/servers/dashboard/dist/presenter.js.map +1 -0
- package/servers/dashboard/dist/presenter.test.d.ts +2 -0
- package/servers/dashboard/dist/presenter.test.d.ts.map +1 -0
- package/servers/dashboard/dist/presenter.test.js +66 -0
- package/servers/dashboard/dist/presenter.test.js.map +1 -0
- package/servers/dashboard/dist/server.d.ts +13 -0
- package/servers/dashboard/dist/server.d.ts.map +1 -0
- package/servers/dashboard/dist/server.js +162 -0
- package/servers/dashboard/dist/server.js.map +1 -0
- package/servers/dashboard/dist/server.test.d.ts +2 -0
- package/servers/dashboard/dist/server.test.d.ts.map +1 -0
- package/servers/dashboard/dist/server.test.js +113 -0
- package/servers/dashboard/dist/server.test.js.map +1 -0
- package/servers/dashboard/dist/skills/infer.d.ts +8 -0
- package/servers/dashboard/dist/skills/infer.d.ts.map +1 -0
- package/servers/dashboard/dist/skills/infer.js +48 -0
- package/servers/dashboard/dist/skills/infer.js.map +1 -0
- package/servers/dashboard/dist/skills/infer.test.d.ts +2 -0
- package/servers/dashboard/dist/skills/infer.test.d.ts.map +1 -0
- package/servers/dashboard/dist/skills/infer.test.js +82 -0
- package/servers/dashboard/dist/skills/infer.test.js.map +1 -0
- package/servers/dashboard/dist/skills/mapping.d.ts +5 -0
- package/servers/dashboard/dist/skills/mapping.d.ts.map +1 -0
- package/servers/dashboard/dist/skills/mapping.js +28 -0
- package/servers/dashboard/dist/skills/mapping.js.map +1 -0
- package/servers/dashboard/dist/skills/registry.d.ts +11 -0
- package/servers/dashboard/dist/skills/registry.d.ts.map +1 -0
- package/servers/dashboard/dist/skills/registry.js +59 -0
- package/servers/dashboard/dist/skills/registry.js.map +1 -0
- package/servers/dashboard/dist/state.d.ts +18 -0
- package/servers/dashboard/dist/state.d.ts.map +1 -0
- package/servers/dashboard/dist/state.js +91 -0
- package/servers/dashboard/dist/state.js.map +1 -0
- package/servers/dashboard/dist/state.test.d.ts +2 -0
- package/servers/dashboard/dist/state.test.d.ts.map +1 -0
- package/servers/dashboard/dist/state.test.js +83 -0
- package/servers/dashboard/dist/state.test.js.map +1 -0
- package/servers/dashboard/dist/types.d.ts +86 -0
- package/servers/dashboard/dist/types.d.ts.map +1 -0
- package/servers/dashboard/dist/types.js +3 -0
- package/servers/dashboard/dist/types.js.map +1 -0
- package/servers/dashboard/package.json +46 -0
- package/servers/dashboard/public/app.js +447 -0
- package/servers/dashboard/public/index.html +96 -0
- package/servers/dashboard/public/styles.css +664 -0
- package/servers/dashboard/src/adapters/codex.ts +50 -0
- package/servers/dashboard/src/adapters/kimi.ts +40 -0
- package/servers/dashboard/src/adapters/opencode.ts +36 -0
- package/servers/dashboard/src/adapters/shim.test.ts +74 -0
- package/servers/dashboard/src/adapters/shim.ts +120 -0
- package/servers/dashboard/src/api/event.ts +70 -0
- package/servers/dashboard/src/api/skills.ts +11 -0
- package/servers/dashboard/src/config.ts +66 -0
- package/servers/dashboard/src/filters/sanitize.test.ts +94 -0
- package/servers/dashboard/src/filters/sanitize.ts +78 -0
- package/servers/dashboard/src/index.ts +24 -0
- package/servers/dashboard/src/presenter.test.ts +69 -0
- package/servers/dashboard/src/presenter.ts +56 -0
- package/servers/dashboard/src/server.test.ts +123 -0
- package/servers/dashboard/src/server.ts +191 -0
- package/servers/dashboard/src/skills/infer.test.ts +86 -0
- package/servers/dashboard/src/skills/infer.ts +53 -0
- package/servers/dashboard/src/skills/mapping.ts +26 -0
- package/servers/dashboard/src/skills/registry.ts +60 -0
- package/servers/dashboard/src/state.test.ts +88 -0
- package/servers/dashboard/src/state.ts +115 -0
- package/servers/dashboard/src/types.ts +110 -0
- package/servers/dashboard/tsconfig.json +19 -0
- package/skills/orchestrator/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@archznn/crewloop-skills",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "CrewLoop AI agent skills bundle",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "CrewLoop AI agent skills bundle and CLI",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "leorsousa05",
|
|
7
7
|
"repository": {
|
|
@@ -9,16 +9,29 @@
|
|
|
9
9
|
"url": "https://github.com/leorsousa05/CrewLoop.git"
|
|
10
10
|
},
|
|
11
11
|
"homepage": "https://leorsousa05.github.io/CrewLoop/",
|
|
12
|
+
"bin": {
|
|
13
|
+
"crewloop": "packages/cli/bin/crewloop.js"
|
|
14
|
+
},
|
|
12
15
|
"files": [
|
|
13
16
|
"skills/",
|
|
14
17
|
"references/",
|
|
15
18
|
"assets/",
|
|
16
19
|
"servers/obsidian-mcp/",
|
|
20
|
+
"servers/dashboard/",
|
|
21
|
+
"packages/cli/bin/",
|
|
22
|
+
"packages/cli/dist/",
|
|
23
|
+
"packages/cli/README.md",
|
|
17
24
|
"README.md",
|
|
18
25
|
"LICENSE.md"
|
|
19
26
|
],
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "npm run build --workspaces",
|
|
29
|
+
"test": "npm test --workspaces",
|
|
30
|
+
"prepublishOnly": "npm run build --workspaces"
|
|
31
|
+
},
|
|
20
32
|
"workspaces": [
|
|
21
|
-
"packages/cli"
|
|
33
|
+
"packages/cli",
|
|
34
|
+
"servers/dashboard"
|
|
22
35
|
],
|
|
23
36
|
"keywords": [
|
|
24
37
|
"ai-agent",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# @archznn/crewloop-cli
|
|
2
|
+
|
|
3
|
+
CLI for installing [CrewLoop](https://leorsousa05.github.io/CrewLoop/) skills into your agent's skills directory.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @archznn/crewloop-cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
Install all skills:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
crewloop install
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Install specific skills:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
crewloop install --skill architect --skill engineer
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Install to a custom directory:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
crewloop install --target /path/to/skills
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Install for a specific agent:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
crewloop install --agent claude
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
List available skills:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
crewloop list
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Options
|
|
44
|
+
|
|
45
|
+
- `--target <dir>` — custom target directory
|
|
46
|
+
- `--skill <name>` — install only a specific skill (repeatable)
|
|
47
|
+
- `--agent <agent>` — target agent convention (`kimi`, `claude`, `codex`, `cursor`, `windsurf`)
|
|
48
|
+
- `--symlink` — create symlinks instead of copying
|
|
49
|
+
- `--force` — overwrite existing skills
|
|
50
|
+
- `--dry-run` — preview actions without installing
|
|
51
|
+
- `-h, --help` — show help
|
|
52
|
+
|
|
53
|
+
## Publishing
|
|
54
|
+
|
|
55
|
+
`@archznn/crewloop-cli` is published automatically by the GitHub Actions workflow in `.github/workflows/publish-npm.yml` whenever a `v*.*.*` tag is pushed. The `@archznn/crewloop-skills` package is published first, then the CLI.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD,wBAAgB,mBAAmB,IAAI,WAAW,EAAE,CAEnD;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAYxD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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.listSupportedAgents = listSupportedAgents;
|
|
7
|
+
exports.resolveAgentDir = resolveAgentDir;
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const SUPPORTED_AGENTS = [
|
|
11
|
+
{ id: 'kimi', skillsDir: node_path_1.default.join(node_os_1.default.homedir(), '.agents', 'skills') },
|
|
12
|
+
{ id: 'claude', skillsDir: node_path_1.default.join(node_os_1.default.homedir(), '.claude', 'skills') },
|
|
13
|
+
{ id: 'codex', skillsDir: node_path_1.default.join(node_os_1.default.homedir(), '.codex', 'skills') },
|
|
14
|
+
{ id: 'cursor', skillsDir: node_path_1.default.join(node_os_1.default.homedir(), '.cursor', 'rules') },
|
|
15
|
+
{ id: 'windsurf', skillsDir: node_path_1.default.join(node_os_1.default.homedir(), '.windsurf', 'rules') },
|
|
16
|
+
];
|
|
17
|
+
function listSupportedAgents() {
|
|
18
|
+
return SUPPORTED_AGENTS.map((a) => ({ ...a }));
|
|
19
|
+
}
|
|
20
|
+
function resolveAgentDir(agentId) {
|
|
21
|
+
if (!agentId) {
|
|
22
|
+
return SUPPORTED_AGENTS[0].skillsDir;
|
|
23
|
+
}
|
|
24
|
+
const agent = SUPPORTED_AGENTS.find((a) => a.id === agentId);
|
|
25
|
+
if (!agent) {
|
|
26
|
+
const known = SUPPORTED_AGENTS.map((a) => a.id).join(', ');
|
|
27
|
+
throw new Error(`Unknown agent "${agentId}". Supported agents: ${known}`);
|
|
28
|
+
}
|
|
29
|
+
return agent.skillsDir;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":";;;;;AAgBA,kDAEC;AAED,0CAYC;AAhCD,0DAA6B;AAC7B,sDAAyB;AAOzB,MAAM,gBAAgB,GAAkB;IACtC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;IACvE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;IACzE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACvE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;CAC7E,CAAC;AAEF,SAAgB,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,kBAAkB,OAAO,wBAAwB,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC,SAAS,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function parseArgs(argv: string[]): {
|
|
2
|
+
command: string;
|
|
3
|
+
target?: string;
|
|
4
|
+
skills?: string[];
|
|
5
|
+
agent?: string;
|
|
6
|
+
symlink?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
port?: number;
|
|
10
|
+
host?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function printHelp(): string;
|
|
13
|
+
export declare function run(argv: string[]): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAeA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CA2DA;AAED,wBAAgB,SAAS,IAAI,MAAM,CAsBlC;AAsKD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBzD"}
|
|
@@ -0,0 +1,255 @@
|
|
|
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.parseArgs = parseArgs;
|
|
7
|
+
exports.printHelp = printHelp;
|
|
8
|
+
exports.run = run;
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const node_child_process_1 = require("node:child_process");
|
|
12
|
+
const resolver_1 = require("./resolver");
|
|
13
|
+
const agents_1 = require("./agents");
|
|
14
|
+
const installer_1 = require("./installer");
|
|
15
|
+
const mcp_1 = require("./mcp");
|
|
16
|
+
function requireValue(arg, next) {
|
|
17
|
+
if (next === undefined || next.startsWith('-')) {
|
|
18
|
+
throw new Error(`Flag ${arg} requires a value`);
|
|
19
|
+
}
|
|
20
|
+
return next;
|
|
21
|
+
}
|
|
22
|
+
function parseArgs(argv) {
|
|
23
|
+
const args = argv.slice(2);
|
|
24
|
+
let command = args[0];
|
|
25
|
+
if (command === '--version' || command === '-v') {
|
|
26
|
+
command = 'version';
|
|
27
|
+
}
|
|
28
|
+
else if (command === '--help' || command === '-h') {
|
|
29
|
+
command = 'help';
|
|
30
|
+
}
|
|
31
|
+
const result = { command };
|
|
32
|
+
for (let i = 1; i < args.length; i++) {
|
|
33
|
+
const arg = args[i];
|
|
34
|
+
const next = args[i + 1];
|
|
35
|
+
switch (arg) {
|
|
36
|
+
case '--target':
|
|
37
|
+
result.target = requireValue(arg, next);
|
|
38
|
+
i++;
|
|
39
|
+
break;
|
|
40
|
+
case '--skill':
|
|
41
|
+
if (!result.skills)
|
|
42
|
+
result.skills = [];
|
|
43
|
+
result.skills.push(requireValue(arg, next));
|
|
44
|
+
i++;
|
|
45
|
+
break;
|
|
46
|
+
case '--agent':
|
|
47
|
+
result.agent = requireValue(arg, next);
|
|
48
|
+
i++;
|
|
49
|
+
break;
|
|
50
|
+
case '--port':
|
|
51
|
+
result.port = parseInt(requireValue(arg, next), 10);
|
|
52
|
+
i++;
|
|
53
|
+
break;
|
|
54
|
+
case '--host':
|
|
55
|
+
result.host = requireValue(arg, next);
|
|
56
|
+
i++;
|
|
57
|
+
break;
|
|
58
|
+
case '--symlink':
|
|
59
|
+
result.symlink = true;
|
|
60
|
+
break;
|
|
61
|
+
case '--force':
|
|
62
|
+
result.force = true;
|
|
63
|
+
break;
|
|
64
|
+
case '--dry-run':
|
|
65
|
+
result.dryRun = true;
|
|
66
|
+
break;
|
|
67
|
+
case '--version':
|
|
68
|
+
case '-v':
|
|
69
|
+
result.command = 'version';
|
|
70
|
+
break;
|
|
71
|
+
case '--help':
|
|
72
|
+
case '-h':
|
|
73
|
+
result.command = 'help';
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
function printHelp() {
|
|
80
|
+
return `crewloop <command> [options]
|
|
81
|
+
|
|
82
|
+
Commands:
|
|
83
|
+
install Install CrewLoop skills
|
|
84
|
+
list List available skills
|
|
85
|
+
dashboard Start the real-time skill dashboard
|
|
86
|
+
version Show version
|
|
87
|
+
help Show this help message
|
|
88
|
+
|
|
89
|
+
Options:
|
|
90
|
+
--target <dir> Install to a custom directory
|
|
91
|
+
--skill <name> Install only a specific skill (repeatable)
|
|
92
|
+
--agent <agent> Target agent convention (kimi, claude, codex, cursor, windsurf)
|
|
93
|
+
--port <number> Dashboard port (default: 7890)
|
|
94
|
+
--host <address> Dashboard host (default: 127.0.0.1)
|
|
95
|
+
--symlink Create symlinks instead of copying
|
|
96
|
+
--force Overwrite existing skills
|
|
97
|
+
--dry-run Print actions without installing
|
|
98
|
+
-v, --version Show version
|
|
99
|
+
-h, --help Show help
|
|
100
|
+
`;
|
|
101
|
+
}
|
|
102
|
+
function resolvePackageRoot() {
|
|
103
|
+
try {
|
|
104
|
+
const skillsPackageJson = require.resolve('@archznn/crewloop-skills/package.json');
|
|
105
|
+
return node_path_1.default.dirname(skillsPackageJson);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Fallback for when the CLI is bundled inside the skills package itself.
|
|
109
|
+
const bundledRoot = node_path_1.default.resolve(__dirname, '..', '..');
|
|
110
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(bundledRoot, 'skills', 'orchestrator', 'SKILL.md'))) {
|
|
111
|
+
return bundledRoot;
|
|
112
|
+
}
|
|
113
|
+
const cwdNodeModules = node_path_1.default.join(process.cwd(), 'node_modules', '@archznn', 'crewloop-skills');
|
|
114
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(cwdNodeModules, 'package.json'))) {
|
|
115
|
+
return cwdNodeModules;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
throw new Error('Could not find CrewLoop package root. Reinstall with: npm install -g @archznn/crewloop-cli');
|
|
119
|
+
}
|
|
120
|
+
function getVersion() {
|
|
121
|
+
try {
|
|
122
|
+
const packageRoot = resolvePackageRoot();
|
|
123
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(packageRoot, 'package.json'), 'utf8'));
|
|
124
|
+
return pkg.version;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
const fallback = node_path_1.default.resolve(__dirname, '..', '..', '..');
|
|
128
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(fallback, 'package.json'), 'utf8'));
|
|
129
|
+
return pkg.version;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async function handleVersion() {
|
|
133
|
+
console.log(getVersion());
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
async function handleList() {
|
|
137
|
+
const packageRoot = resolvePackageRoot();
|
|
138
|
+
const skills = (0, resolver_1.resolveSkills)(packageRoot);
|
|
139
|
+
if (skills.length === 0) {
|
|
140
|
+
console.log('No skills found.');
|
|
141
|
+
return 0;
|
|
142
|
+
}
|
|
143
|
+
console.log('Available CrewLoop skills:\n');
|
|
144
|
+
for (const skill of skills) {
|
|
145
|
+
console.log(` ${skill.name}`);
|
|
146
|
+
if (skill.description) {
|
|
147
|
+
console.log(` ${skill.description}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
async function handleInstall(args) {
|
|
153
|
+
const packageRoot = resolvePackageRoot();
|
|
154
|
+
const skills = (0, resolver_1.resolveSkills)(packageRoot, args.skills);
|
|
155
|
+
if (skills.length === 0) {
|
|
156
|
+
console.error('No matching skills found.');
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
const targetDir = args.target || (0, agents_1.resolveAgentDir)(args.agent);
|
|
160
|
+
if (args.dryRun) {
|
|
161
|
+
console.log(`Would install ${skills.length} skill(s) to ${targetDir}:`);
|
|
162
|
+
for (const skill of skills) {
|
|
163
|
+
console.log(` - ${skill.name}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const result = (0, installer_1.installSkills)(skills, targetDir, {
|
|
167
|
+
target: args.target,
|
|
168
|
+
skills: args.skills,
|
|
169
|
+
agent: args.agent,
|
|
170
|
+
symlink: args.symlink,
|
|
171
|
+
force: args.force,
|
|
172
|
+
dryRun: args.dryRun,
|
|
173
|
+
}, packageRoot);
|
|
174
|
+
if (!args.dryRun) {
|
|
175
|
+
console.log(`Installed ${result.installed.length} skill(s) to ${targetDir}`);
|
|
176
|
+
for (const name of result.installed) {
|
|
177
|
+
console.log(` + ${name}`);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (result.skipped.length > 0) {
|
|
181
|
+
console.log(`Skipped ${result.skipped.length} existing skill(s) (use --force to overwrite):`);
|
|
182
|
+
for (const name of result.skipped) {
|
|
183
|
+
console.log(` - ${name}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (result.errors.length > 0) {
|
|
187
|
+
console.error(`Encountered ${result.errors.length} error(s):`);
|
|
188
|
+
for (const error of result.errors) {
|
|
189
|
+
console.error(` ! ${error.message}`);
|
|
190
|
+
}
|
|
191
|
+
return 1;
|
|
192
|
+
}
|
|
193
|
+
const mcpDir = node_path_1.default.join(packageRoot, 'servers', 'obsidian-mcp');
|
|
194
|
+
let mcpResult;
|
|
195
|
+
if (node_fs_1.default.existsSync(mcpDir)) {
|
|
196
|
+
mcpResult = (0, mcp_1.installMcpServer)(mcpDir, {
|
|
197
|
+
dryRun: args.dryRun,
|
|
198
|
+
force: args.force,
|
|
199
|
+
});
|
|
200
|
+
if (mcpResult.error) {
|
|
201
|
+
console.error(`MCP install warning: ${mcpResult.error.message}`);
|
|
202
|
+
}
|
|
203
|
+
else if (mcpResult.installed) {
|
|
204
|
+
console.log(`Installed Obsidian MCP server at ${mcpResult.binaryPath}`);
|
|
205
|
+
}
|
|
206
|
+
else if (mcpResult.skipped) {
|
|
207
|
+
console.log(`Obsidian MCP server already installed at ${mcpResult.binaryPath}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
async function handleDashboard(args) {
|
|
213
|
+
const packageRoot = resolvePackageRoot();
|
|
214
|
+
const dashboardBin = node_path_1.default.join(packageRoot, 'servers', 'dashboard', 'bin', 'crewloop-dashboard.js');
|
|
215
|
+
if (!node_fs_1.default.existsSync(dashboardBin)) {
|
|
216
|
+
console.error('Dashboard server not found. Build the dashboard package first:');
|
|
217
|
+
console.error(' cd servers/dashboard && npm install && npm run build');
|
|
218
|
+
return 1;
|
|
219
|
+
}
|
|
220
|
+
const env = { ...process.env };
|
|
221
|
+
if (args.port !== undefined) {
|
|
222
|
+
env.CREWLOOP_DASHBOARD_PORT = String(args.port);
|
|
223
|
+
}
|
|
224
|
+
if (args.host !== undefined) {
|
|
225
|
+
env.CREWLOOP_DASHBOARD_HOST = args.host;
|
|
226
|
+
}
|
|
227
|
+
console.log(`Starting CrewLoop dashboard from ${dashboardBin}`);
|
|
228
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [dashboardBin], {
|
|
229
|
+
env,
|
|
230
|
+
stdio: 'inherit',
|
|
231
|
+
});
|
|
232
|
+
return new Promise((resolve) => {
|
|
233
|
+
child.on('close', (code) => {
|
|
234
|
+
resolve(code ?? 0);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
async function run(argv) {
|
|
239
|
+
const args = parseArgs(['node', 'crewloop', ...argv]);
|
|
240
|
+
switch (args.command) {
|
|
241
|
+
case 'install':
|
|
242
|
+
return handleInstall(args);
|
|
243
|
+
case 'list':
|
|
244
|
+
return handleList();
|
|
245
|
+
case 'dashboard':
|
|
246
|
+
return handleDashboard(args);
|
|
247
|
+
case 'version':
|
|
248
|
+
return handleVersion();
|
|
249
|
+
case 'help':
|
|
250
|
+
default:
|
|
251
|
+
console.log(printHelp());
|
|
252
|
+
return args.command === 'help' ? 0 : 1;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SkillManifest } from './resolver';
|
|
2
|
+
export interface InstallOptions {
|
|
3
|
+
target?: string;
|
|
4
|
+
skills?: string[];
|
|
5
|
+
agent?: string;
|
|
6
|
+
symlink?: boolean;
|
|
7
|
+
force?: boolean;
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface InstallResult {
|
|
11
|
+
installed: string[];
|
|
12
|
+
skipped: string[];
|
|
13
|
+
errors: Error[];
|
|
14
|
+
}
|
|
15
|
+
export declare function mergeSharedDirs(targetSkillPath: string, sharedRoot: string, options: {
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}): void;
|
|
18
|
+
export declare function installSkills(skills: SkillManifest[], targetDir: string, options: InstallOptions, sharedRoot?: string): InstallResult;
|
|
19
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+BD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,IAAI,CAiBN;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,aAAa,CA+Cf"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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.mergeSharedDirs = mergeSharedDirs;
|
|
7
|
+
exports.installSkills = installSkills;
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
11
|
+
function ensureDir(dir) {
|
|
12
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
function removeDir(dir) {
|
|
15
|
+
node_fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
16
|
+
}
|
|
17
|
+
function copyDir(source, target) {
|
|
18
|
+
ensureDir(target);
|
|
19
|
+
const entries = node_fs_1.default.readdirSync(source, { withFileTypes: true });
|
|
20
|
+
for (const entry of entries) {
|
|
21
|
+
const sourcePath = node_path_1.default.join(source, entry.name);
|
|
22
|
+
const targetPath = node_path_1.default.join(target, entry.name);
|
|
23
|
+
if (entry.isDirectory()) {
|
|
24
|
+
copyDir(sourcePath, targetPath);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
node_fs_1.default.copyFileSync(sourcePath, targetPath);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function createSymlink(source, target) {
|
|
32
|
+
const type = node_os_1.default.platform() === 'win32' ? 'junction' : 'dir';
|
|
33
|
+
node_fs_1.default.symlinkSync(source, target, type);
|
|
34
|
+
}
|
|
35
|
+
function mergeSharedDirs(targetSkillPath, sharedRoot, options) {
|
|
36
|
+
const sharedDirs = ['references', 'assets'];
|
|
37
|
+
for (const dir of sharedDirs) {
|
|
38
|
+
const sourceDir = node_path_1.default.join(sharedRoot, dir);
|
|
39
|
+
if (!node_fs_1.default.existsSync(sourceDir)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const targetDir = node_path_1.default.join(targetSkillPath, dir);
|
|
43
|
+
if (options.dryRun) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
copyDir(sourceDir, targetDir);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function installSkills(skills, targetDir, options, sharedRoot) {
|
|
50
|
+
const result = { installed: [], skipped: [], errors: [] };
|
|
51
|
+
if (skills.length === 0) {
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
if (!options.dryRun) {
|
|
55
|
+
ensureDir(targetDir);
|
|
56
|
+
}
|
|
57
|
+
for (const skill of skills) {
|
|
58
|
+
const targetPath = node_path_1.default.join(targetDir, skill.name);
|
|
59
|
+
const exists = node_fs_1.default.existsSync(targetPath);
|
|
60
|
+
if (exists && !options.force) {
|
|
61
|
+
result.skipped.push(skill.name);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (options.dryRun) {
|
|
65
|
+
result.installed.push(skill.name);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
if (exists && options.force) {
|
|
70
|
+
removeDir(targetPath);
|
|
71
|
+
}
|
|
72
|
+
if (options.symlink) {
|
|
73
|
+
createSymlink(skill.sourcePath, targetPath);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
copyDir(skill.sourcePath, targetPath);
|
|
77
|
+
}
|
|
78
|
+
if (sharedRoot && !options.symlink) {
|
|
79
|
+
mergeSharedDirs(targetPath, sharedRoot, { dryRun: options.dryRun });
|
|
80
|
+
}
|
|
81
|
+
result.installed.push(skill.name);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
result.errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface McpInstallOptions {
|
|
2
|
+
dryRun?: boolean;
|
|
3
|
+
force?: boolean;
|
|
4
|
+
/** Python executable name/path. Default: "python3" on Unix, "python" on Windows. */
|
|
5
|
+
pythonCmd?: string;
|
|
6
|
+
/** Directory where the obsidian-mcp wrapper/symlink is placed. Default: <homedir>/.local/bin */
|
|
7
|
+
localBinDir?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface McpInstallResult {
|
|
10
|
+
/** True if a new install or re-install happened. */
|
|
11
|
+
installed: boolean;
|
|
12
|
+
/** True if the binary was already present and force was false. */
|
|
13
|
+
skipped: boolean;
|
|
14
|
+
/** Absolute path to the exposed binary or wrapper. */
|
|
15
|
+
binaryPath?: string;
|
|
16
|
+
/** Error that did not block skill installation. */
|
|
17
|
+
error?: Error;
|
|
18
|
+
}
|
|
19
|
+
export declare function installMcpServer(mcpSourceDir: string, options?: McpInstallOptions): McpInstallResult;
|
|
20
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAgHD,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CAwClB"}
|