@slashfi/agents-sdk 0.50.6 → 0.60.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/dist/adk.d.ts +4 -9
- package/dist/adk.d.ts.map +1 -1
- package/dist/adk.js +72 -245
- package/dist/adk.js.map +1 -1
- package/dist/cjs/init.js +175 -0
- package/dist/cjs/init.js.map +1 -0
- package/dist/cjs/materialize.js +115 -0
- package/dist/cjs/materialize.js.map +1 -0
- package/dist/init.d.ts +31 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +166 -0
- package/dist/init.js.map +1 -0
- package/dist/materialize.d.ts +17 -0
- package/dist/materialize.d.ts.map +1 -0
- package/dist/materialize.js +112 -0
- package/dist/materialize.js.map +1 -0
- package/package.json +1 -1
- package/src/adk.ts +73 -307
- package/src/init.test.ts +419 -0
- package/src/init.ts +211 -0
- package/src/materialize.ts +158 -0
- package/src/presets/claude.json +5 -0
- package/src/presets/codex.json +5 -0
- package/src/presets/copilot.json +5 -0
- package/src/presets/cursor.json +5 -0
- package/src/presets/hermes.json +5 -0
- package/src/presets/windsurf.json +5 -0
package/dist/cjs/init.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ADK Init — Setup + skill injection for coding agents.
|
|
4
|
+
*
|
|
5
|
+
* Uses a preset-based system for scalability:
|
|
6
|
+
* - Presets are JSON files in src/presets/ (one per coding agent)
|
|
7
|
+
* - All use the agentskills.io SKILL.md standard
|
|
8
|
+
* - Adding a new coding agent = adding one JSON file
|
|
9
|
+
*
|
|
10
|
+
* Non-interactive by design. The coding agent is the UX layer.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.loadPresets = loadPresets;
|
|
14
|
+
exports.getPreset = getPreset;
|
|
15
|
+
exports.listPresets = listPresets;
|
|
16
|
+
exports.renderContent = renderContent;
|
|
17
|
+
exports.parseTarget = parseTarget;
|
|
18
|
+
exports.installSkill = installSkill;
|
|
19
|
+
exports.runInit = runInit;
|
|
20
|
+
const node_fs_1 = require("node:fs");
|
|
21
|
+
const node_path_1 = require("node:path");
|
|
22
|
+
const node_os_1 = require("node:os");
|
|
23
|
+
// ============================================
|
|
24
|
+
// Preset Loading
|
|
25
|
+
// ============================================
|
|
26
|
+
// Presets are inlined to avoid import.meta/CJS compatibility issues.
|
|
27
|
+
// To add a new coding agent, add an entry here and a JSON file in src/presets/.
|
|
28
|
+
const BUILTIN_PRESETS = [
|
|
29
|
+
{ name: "claude", defaultPath: "~/.claude/skills", filename: "adk/SKILL.md" },
|
|
30
|
+
{ name: "cursor", defaultPath: ".agents/skills", filename: "adk/SKILL.md" },
|
|
31
|
+
{ name: "codex", defaultPath: ".agents/skills", filename: "adk/SKILL.md" },
|
|
32
|
+
{ name: "copilot", defaultPath: ".github/skills", filename: "adk/SKILL.md" },
|
|
33
|
+
{ name: "windsurf", defaultPath: ".windsurf/skills", filename: "adk/SKILL.md" },
|
|
34
|
+
{ name: "hermes", defaultPath: "~/.hermes/skills", filename: "adk/SKILL.md" },
|
|
35
|
+
];
|
|
36
|
+
let _presets = null;
|
|
37
|
+
function loadPresets() {
|
|
38
|
+
if (_presets)
|
|
39
|
+
return _presets;
|
|
40
|
+
_presets = new Map();
|
|
41
|
+
for (const preset of BUILTIN_PRESETS) {
|
|
42
|
+
_presets.set(preset.name, preset);
|
|
43
|
+
}
|
|
44
|
+
return _presets;
|
|
45
|
+
}
|
|
46
|
+
function getPreset(name) {
|
|
47
|
+
return loadPresets().get(name);
|
|
48
|
+
}
|
|
49
|
+
function listPresets() {
|
|
50
|
+
return Array.from(loadPresets().values());
|
|
51
|
+
}
|
|
52
|
+
// ============================================
|
|
53
|
+
// Skill Content Templates
|
|
54
|
+
// ============================================
|
|
55
|
+
const ADK_SKILL_CONTENT = `adk is the Agent Development Kit CLI.
|
|
56
|
+
|
|
57
|
+
Config location: run \`adk config-path\` to find the config directory.
|
|
58
|
+
Installed refs: run \`adk ref list\` to see configured agents.
|
|
59
|
+
|
|
60
|
+
Each installed ref has local docs at the config path under refs/<name>/:
|
|
61
|
+
- tools/*.tool.json — full tool schemas (inputSchema, description)
|
|
62
|
+
- skills/ — usage guides and patterns from the agent
|
|
63
|
+
- types/*.d.ts — TypeScript type definitions
|
|
64
|
+
|
|
65
|
+
## Commands
|
|
66
|
+
|
|
67
|
+
To call a tool: \`adk ref call <name> <tool> '{"param": "value"}'\`
|
|
68
|
+
To browse available agents: \`adk registry browse slash\`
|
|
69
|
+
To install an agent: \`adk ref add <name>\`
|
|
70
|
+
To authenticate: \`adk ref auth <name>\`
|
|
71
|
+
To check auth status: \`adk ref auth-status <name>\`
|
|
72
|
+
To inspect an agent: \`adk ref inspect <name>\`
|
|
73
|
+
To view tool schemas: \`adk ref inspect <name> --full\`
|
|
74
|
+
To list resources: \`adk ref resources <name>\`
|
|
75
|
+
To read a resource: \`adk ref read <name> <uri>\`
|
|
76
|
+
`;
|
|
77
|
+
function renderContent(content, meta) {
|
|
78
|
+
return `---
|
|
79
|
+
name: ${meta.name}
|
|
80
|
+
description: ${meta.description}
|
|
81
|
+
---
|
|
82
|
+
${content}`;
|
|
83
|
+
}
|
|
84
|
+
// ============================================
|
|
85
|
+
// Target Parsing
|
|
86
|
+
// ============================================
|
|
87
|
+
function expandHome(p) {
|
|
88
|
+
if (p.startsWith("~/"))
|
|
89
|
+
return (0, node_path_1.join)((0, node_os_1.homedir)(), p.slice(2));
|
|
90
|
+
return p;
|
|
91
|
+
}
|
|
92
|
+
function parseTarget(value) {
|
|
93
|
+
const colonIdx = value.indexOf(":");
|
|
94
|
+
if (colonIdx === -1) {
|
|
95
|
+
// Just a preset name
|
|
96
|
+
const preset = getPreset(value);
|
|
97
|
+
if (!preset) {
|
|
98
|
+
const presetNames = Array.from(loadPresets().keys()).join(", ");
|
|
99
|
+
throw new Error(`Unknown preset: ${value}. Available: ${presetNames}`);
|
|
100
|
+
}
|
|
101
|
+
return { preset, path: expandHome(preset.defaultPath) };
|
|
102
|
+
}
|
|
103
|
+
const key = value.slice(0, colonIdx);
|
|
104
|
+
const path = value.slice(colonIdx + 1);
|
|
105
|
+
// Check if key is a preset name (with custom path)
|
|
106
|
+
const preset = getPreset(key);
|
|
107
|
+
if (preset) {
|
|
108
|
+
return { preset, path: expandHome(path || preset.defaultPath) };
|
|
109
|
+
}
|
|
110
|
+
const presetNames = Array.from(loadPresets().keys()).join(", ");
|
|
111
|
+
throw new Error(`Unknown target: ${key}. Available presets: ${presetNames}`);
|
|
112
|
+
}
|
|
113
|
+
// ============================================
|
|
114
|
+
// Skill Installation
|
|
115
|
+
// ============================================
|
|
116
|
+
function ensureWrite(path, content) {
|
|
117
|
+
const dir = (0, node_path_1.dirname)(path);
|
|
118
|
+
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
119
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
(0, node_fs_1.writeFileSync)(path, content, "utf-8");
|
|
122
|
+
}
|
|
123
|
+
function installSkill(target) {
|
|
124
|
+
const outputPath = (0, node_path_1.join)((0, node_path_1.resolve)(target.path), target.preset.filename);
|
|
125
|
+
const content = renderContent(ADK_SKILL_CONTENT, {
|
|
126
|
+
name: "adk",
|
|
127
|
+
description: "When connecting to APIs, calling remote tools, managing integrations, or the user asks about adk",
|
|
128
|
+
});
|
|
129
|
+
ensureWrite(outputPath, content);
|
|
130
|
+
return outputPath;
|
|
131
|
+
}
|
|
132
|
+
// ============================================
|
|
133
|
+
// Init Command
|
|
134
|
+
// ============================================
|
|
135
|
+
const DEFAULT_REGISTRY_URL = "https://registry.slash.com";
|
|
136
|
+
const DEFAULT_REGISTRY_NAME = "public";
|
|
137
|
+
async function runInit(adk, targets) {
|
|
138
|
+
// 1. Ensure default registry
|
|
139
|
+
const registries = await adk.registry.list();
|
|
140
|
+
const hasDefault = registries.some((r) => r.url === DEFAULT_REGISTRY_URL || r.name === DEFAULT_REGISTRY_NAME);
|
|
141
|
+
if (!hasDefault) {
|
|
142
|
+
await adk.registry.add({ url: DEFAULT_REGISTRY_URL, name: DEFAULT_REGISTRY_NAME });
|
|
143
|
+
console.log(`\x1b[32m\u2713\x1b[0m Set default registry: ${DEFAULT_REGISTRY_URL}`);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log(`\x1b[32m\u2713\x1b[0m Default registry already configured: ${DEFAULT_REGISTRY_URL}`);
|
|
147
|
+
}
|
|
148
|
+
// 2. Install skills to targets
|
|
149
|
+
if (targets.length === 0) {
|
|
150
|
+
console.log(`\nTo install skills, re-run with targets:\n`);
|
|
151
|
+
const presets = listPresets();
|
|
152
|
+
for (const preset of presets) {
|
|
153
|
+
console.log(` adk init --target ${preset.name}`);
|
|
154
|
+
}
|
|
155
|
+
console.log(`\nCustom path: adk init --target <preset>:<path>`);
|
|
156
|
+
console.log(`\nAsk the user which coding agents they use,`);
|
|
157
|
+
console.log(`then run: adk init --target <preset> [--target <preset> ...]`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
for (const target of targets) {
|
|
161
|
+
const outputPath = installSkill(target);
|
|
162
|
+
console.log(`\x1b[32m\u2713\x1b[0m Installed adk skill \u2192 ${outputPath}`);
|
|
163
|
+
}
|
|
164
|
+
// 3. Save targets to config
|
|
165
|
+
const config = await adk.readConfig();
|
|
166
|
+
const targetStrings = targets.map((t) => {
|
|
167
|
+
return t.path === expandHome(t.preset.defaultPath) ? t.preset.name : `${t.preset.name}:${t.path}`;
|
|
168
|
+
});
|
|
169
|
+
config.targets = targetStrings;
|
|
170
|
+
await adk.writeConfig(config);
|
|
171
|
+
console.log(`\x1b[32m\u2713\x1b[0m Saved targets to config`);
|
|
172
|
+
console.log(`\nDone! Your coding agents now know how to use adk.`);
|
|
173
|
+
console.log(`Run \`adk init\` again anytime to refresh skills or add targets.`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ref Materialization — Download agent docs to local filesystem.
|
|
4
|
+
*
|
|
5
|
+
* When `adk ref add` succeeds, materialize the agent's tool schemas,
|
|
6
|
+
* resources (skills), and generate TypeScript type definitions locally.
|
|
7
|
+
*
|
|
8
|
+
* Files are written under the adk config dir at refs/<name>/.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.materializeRef = materializeRef;
|
|
12
|
+
const node_fs_1 = require("node:fs");
|
|
13
|
+
const node_path_1 = require("node:path");
|
|
14
|
+
// ============================================
|
|
15
|
+
// Helpers
|
|
16
|
+
// ============================================
|
|
17
|
+
function ensureWrite(path, content) {
|
|
18
|
+
const dir = (0, node_path_1.dirname)(path);
|
|
19
|
+
if (!(0, node_fs_1.existsSync)(dir)) {
|
|
20
|
+
(0, node_fs_1.mkdirSync)(dir, { recursive: true });
|
|
21
|
+
}
|
|
22
|
+
(0, node_fs_1.writeFileSync)(path, content, "utf-8");
|
|
23
|
+
}
|
|
24
|
+
/** Generate a .d.ts file from tool schemas. */
|
|
25
|
+
function generateTypes(refName, tools) {
|
|
26
|
+
const lines = [
|
|
27
|
+
`// Auto-generated by adk ref add`,
|
|
28
|
+
`// Agent: ${refName}`,
|
|
29
|
+
`// Tools: ${tools.length}`,
|
|
30
|
+
``,
|
|
31
|
+
`export interface ${pascalCase(refName)}Tools {`,
|
|
32
|
+
];
|
|
33
|
+
for (const tool of tools) {
|
|
34
|
+
lines.push(` /** ${tool.description ?? tool.name} */`);
|
|
35
|
+
lines.push(` ${JSON.stringify(tool.name)}: {`);
|
|
36
|
+
lines.push(` name: ${JSON.stringify(tool.name)};`);
|
|
37
|
+
if (tool.description) {
|
|
38
|
+
lines.push(` description: ${JSON.stringify(tool.description)};`);
|
|
39
|
+
}
|
|
40
|
+
lines.push(` params: Record<string, unknown>;`);
|
|
41
|
+
lines.push(` };`);
|
|
42
|
+
}
|
|
43
|
+
lines.push(`}`);
|
|
44
|
+
lines.push(``);
|
|
45
|
+
lines.push(`export declare const tools: (keyof ${pascalCase(refName)}Tools)[];`);
|
|
46
|
+
lines.push(``);
|
|
47
|
+
return lines.join("\n");
|
|
48
|
+
}
|
|
49
|
+
function pascalCase(s) {
|
|
50
|
+
return s
|
|
51
|
+
.replace(/[^a-zA-Z0-9]+(.)/g, (_, c) => c.toUpperCase())
|
|
52
|
+
.replace(/^./, (c) => c.toUpperCase());
|
|
53
|
+
}
|
|
54
|
+
// ============================================
|
|
55
|
+
// Materialize
|
|
56
|
+
// ============================================
|
|
57
|
+
async function materializeRef(adk, refName, configDir) {
|
|
58
|
+
const refDir = (0, node_path_1.join)(configDir, "refs", refName);
|
|
59
|
+
const toolsDir = (0, node_path_1.join)(refDir, "tools");
|
|
60
|
+
const skillsDir = (0, node_path_1.join)(refDir, "skills");
|
|
61
|
+
const typesDir = (0, node_path_1.join)(refDir, "types");
|
|
62
|
+
let toolCount = 0;
|
|
63
|
+
let skillCount = 0;
|
|
64
|
+
let typesGenerated = false;
|
|
65
|
+
// 1. Fetch and write tool schemas
|
|
66
|
+
try {
|
|
67
|
+
const info = await adk.ref.inspect(refName, { full: true });
|
|
68
|
+
if (info?.tools && info.tools.length > 0) {
|
|
69
|
+
const tools = info.tools.map((t) => ({
|
|
70
|
+
name: t.name,
|
|
71
|
+
description: t.description,
|
|
72
|
+
inputSchema: t.inputSchema,
|
|
73
|
+
outputSchema: t.outputSchema,
|
|
74
|
+
}));
|
|
75
|
+
for (const tool of tools) {
|
|
76
|
+
const safeName = tool.name.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
77
|
+
ensureWrite((0, node_path_1.join)(toolsDir, `${safeName}.tool.json`), JSON.stringify(tool, null, 2));
|
|
78
|
+
}
|
|
79
|
+
toolCount = tools.length;
|
|
80
|
+
// Write agent.json metadata
|
|
81
|
+
ensureWrite((0, node_path_1.join)(refDir, "agent.json"), JSON.stringify({
|
|
82
|
+
name: refName,
|
|
83
|
+
description: info.description,
|
|
84
|
+
toolCount: tools.length,
|
|
85
|
+
tools: tools.map((t) => t.name),
|
|
86
|
+
materializedAt: new Date().toISOString(),
|
|
87
|
+
}, null, 2));
|
|
88
|
+
// Generate .d.ts
|
|
89
|
+
ensureWrite((0, node_path_1.join)(typesDir, `${refName}.d.ts`), generateTypes(refName, tools));
|
|
90
|
+
typesGenerated = true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// inspect failed — agent might not be reachable yet (needs auth)
|
|
95
|
+
}
|
|
96
|
+
// 2. Fetch and write resources (skills)
|
|
97
|
+
try {
|
|
98
|
+
const resourcesResult = await adk.ref.resources(refName);
|
|
99
|
+
const response = resourcesResult;
|
|
100
|
+
if (response?.result?.resources) {
|
|
101
|
+
for (const resource of response.result.resources) {
|
|
102
|
+
if (resource.uri && resource.text) {
|
|
103
|
+
const filename = resource.uri.split("/").pop() ?? "resource.md";
|
|
104
|
+
ensureWrite((0, node_path_1.join)(skillsDir, filename), resource.text);
|
|
105
|
+
skillCount++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// resources fetch failed — might not be supported
|
|
112
|
+
}
|
|
113
|
+
return { toolCount, skillCount, typesGenerated };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../src/materialize.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADK Init — Setup + skill injection for coding agents.
|
|
3
|
+
*
|
|
4
|
+
* Uses a preset-based system for scalability:
|
|
5
|
+
* - Presets are JSON files in src/presets/ (one per coding agent)
|
|
6
|
+
* - All use the agentskills.io SKILL.md standard
|
|
7
|
+
* - Adding a new coding agent = adding one JSON file
|
|
8
|
+
*
|
|
9
|
+
* Non-interactive by design. The coding agent is the UX layer.
|
|
10
|
+
*/
|
|
11
|
+
import type { Adk } from "./config-store.js";
|
|
12
|
+
export interface Preset {
|
|
13
|
+
name: string;
|
|
14
|
+
defaultPath: string;
|
|
15
|
+
filename: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SkillTarget {
|
|
18
|
+
preset: Preset;
|
|
19
|
+
path: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function loadPresets(): Map<string, Preset>;
|
|
22
|
+
export declare function getPreset(name: string): Preset | undefined;
|
|
23
|
+
export declare function listPresets(): Preset[];
|
|
24
|
+
export declare function renderContent(content: string, meta: {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}): string;
|
|
28
|
+
export declare function parseTarget(value: string): SkillTarget;
|
|
29
|
+
export declare function installSkill(target: SkillTarget): string;
|
|
30
|
+
export declare function runInit(adk: Adk, targets: SkillTarget[]): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAM7C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAmBD,wBAAgB,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOjD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AA6BD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC1C,MAAM,CAMR;AAWD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAwBtD;AAcD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAQxD;AAUD,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C7E"}
|
package/dist/init.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADK Init — Setup + skill injection for coding agents.
|
|
3
|
+
*
|
|
4
|
+
* Uses a preset-based system for scalability:
|
|
5
|
+
* - Presets are JSON files in src/presets/ (one per coding agent)
|
|
6
|
+
* - All use the agentskills.io SKILL.md standard
|
|
7
|
+
* - Adding a new coding agent = adding one JSON file
|
|
8
|
+
*
|
|
9
|
+
* Non-interactive by design. The coding agent is the UX layer.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
12
|
+
import { dirname, join, resolve } from "node:path";
|
|
13
|
+
import { homedir } from "node:os";
|
|
14
|
+
// ============================================
|
|
15
|
+
// Preset Loading
|
|
16
|
+
// ============================================
|
|
17
|
+
// Presets are inlined to avoid import.meta/CJS compatibility issues.
|
|
18
|
+
// To add a new coding agent, add an entry here and a JSON file in src/presets/.
|
|
19
|
+
const BUILTIN_PRESETS = [
|
|
20
|
+
{ name: "claude", defaultPath: "~/.claude/skills", filename: "adk/SKILL.md" },
|
|
21
|
+
{ name: "cursor", defaultPath: ".agents/skills", filename: "adk/SKILL.md" },
|
|
22
|
+
{ name: "codex", defaultPath: ".agents/skills", filename: "adk/SKILL.md" },
|
|
23
|
+
{ name: "copilot", defaultPath: ".github/skills", filename: "adk/SKILL.md" },
|
|
24
|
+
{ name: "windsurf", defaultPath: ".windsurf/skills", filename: "adk/SKILL.md" },
|
|
25
|
+
{ name: "hermes", defaultPath: "~/.hermes/skills", filename: "adk/SKILL.md" },
|
|
26
|
+
];
|
|
27
|
+
let _presets = null;
|
|
28
|
+
export function loadPresets() {
|
|
29
|
+
if (_presets)
|
|
30
|
+
return _presets;
|
|
31
|
+
_presets = new Map();
|
|
32
|
+
for (const preset of BUILTIN_PRESETS) {
|
|
33
|
+
_presets.set(preset.name, preset);
|
|
34
|
+
}
|
|
35
|
+
return _presets;
|
|
36
|
+
}
|
|
37
|
+
export function getPreset(name) {
|
|
38
|
+
return loadPresets().get(name);
|
|
39
|
+
}
|
|
40
|
+
export function listPresets() {
|
|
41
|
+
return Array.from(loadPresets().values());
|
|
42
|
+
}
|
|
43
|
+
// ============================================
|
|
44
|
+
// Skill Content Templates
|
|
45
|
+
// ============================================
|
|
46
|
+
const ADK_SKILL_CONTENT = `adk is the Agent Development Kit CLI.
|
|
47
|
+
|
|
48
|
+
Config location: run \`adk config-path\` to find the config directory.
|
|
49
|
+
Installed refs: run \`adk ref list\` to see configured agents.
|
|
50
|
+
|
|
51
|
+
Each installed ref has local docs at the config path under refs/<name>/:
|
|
52
|
+
- tools/*.tool.json — full tool schemas (inputSchema, description)
|
|
53
|
+
- skills/ — usage guides and patterns from the agent
|
|
54
|
+
- types/*.d.ts — TypeScript type definitions
|
|
55
|
+
|
|
56
|
+
## Commands
|
|
57
|
+
|
|
58
|
+
To call a tool: \`adk ref call <name> <tool> '{"param": "value"}'\`
|
|
59
|
+
To browse available agents: \`adk registry browse slash\`
|
|
60
|
+
To install an agent: \`adk ref add <name>\`
|
|
61
|
+
To authenticate: \`adk ref auth <name>\`
|
|
62
|
+
To check auth status: \`adk ref auth-status <name>\`
|
|
63
|
+
To inspect an agent: \`adk ref inspect <name>\`
|
|
64
|
+
To view tool schemas: \`adk ref inspect <name> --full\`
|
|
65
|
+
To list resources: \`adk ref resources <name>\`
|
|
66
|
+
To read a resource: \`adk ref read <name> <uri>\`
|
|
67
|
+
`;
|
|
68
|
+
export function renderContent(content, meta) {
|
|
69
|
+
return `---
|
|
70
|
+
name: ${meta.name}
|
|
71
|
+
description: ${meta.description}
|
|
72
|
+
---
|
|
73
|
+
${content}`;
|
|
74
|
+
}
|
|
75
|
+
// ============================================
|
|
76
|
+
// Target Parsing
|
|
77
|
+
// ============================================
|
|
78
|
+
function expandHome(p) {
|
|
79
|
+
if (p.startsWith("~/"))
|
|
80
|
+
return join(homedir(), p.slice(2));
|
|
81
|
+
return p;
|
|
82
|
+
}
|
|
83
|
+
export function parseTarget(value) {
|
|
84
|
+
const colonIdx = value.indexOf(":");
|
|
85
|
+
if (colonIdx === -1) {
|
|
86
|
+
// Just a preset name
|
|
87
|
+
const preset = getPreset(value);
|
|
88
|
+
if (!preset) {
|
|
89
|
+
const presetNames = Array.from(loadPresets().keys()).join(", ");
|
|
90
|
+
throw new Error(`Unknown preset: ${value}. Available: ${presetNames}`);
|
|
91
|
+
}
|
|
92
|
+
return { preset, path: expandHome(preset.defaultPath) };
|
|
93
|
+
}
|
|
94
|
+
const key = value.slice(0, colonIdx);
|
|
95
|
+
const path = value.slice(colonIdx + 1);
|
|
96
|
+
// Check if key is a preset name (with custom path)
|
|
97
|
+
const preset = getPreset(key);
|
|
98
|
+
if (preset) {
|
|
99
|
+
return { preset, path: expandHome(path || preset.defaultPath) };
|
|
100
|
+
}
|
|
101
|
+
const presetNames = Array.from(loadPresets().keys()).join(", ");
|
|
102
|
+
throw new Error(`Unknown target: ${key}. Available presets: ${presetNames}`);
|
|
103
|
+
}
|
|
104
|
+
// ============================================
|
|
105
|
+
// Skill Installation
|
|
106
|
+
// ============================================
|
|
107
|
+
function ensureWrite(path, content) {
|
|
108
|
+
const dir = dirname(path);
|
|
109
|
+
if (!existsSync(dir)) {
|
|
110
|
+
mkdirSync(dir, { recursive: true });
|
|
111
|
+
}
|
|
112
|
+
writeFileSync(path, content, "utf-8");
|
|
113
|
+
}
|
|
114
|
+
export function installSkill(target) {
|
|
115
|
+
const outputPath = join(resolve(target.path), target.preset.filename);
|
|
116
|
+
const content = renderContent(ADK_SKILL_CONTENT, {
|
|
117
|
+
name: "adk",
|
|
118
|
+
description: "When connecting to APIs, calling remote tools, managing integrations, or the user asks about adk",
|
|
119
|
+
});
|
|
120
|
+
ensureWrite(outputPath, content);
|
|
121
|
+
return outputPath;
|
|
122
|
+
}
|
|
123
|
+
// ============================================
|
|
124
|
+
// Init Command
|
|
125
|
+
// ============================================
|
|
126
|
+
const DEFAULT_REGISTRY_URL = "https://registry.slash.com";
|
|
127
|
+
const DEFAULT_REGISTRY_NAME = "public";
|
|
128
|
+
export async function runInit(adk, targets) {
|
|
129
|
+
// 1. Ensure default registry
|
|
130
|
+
const registries = await adk.registry.list();
|
|
131
|
+
const hasDefault = registries.some((r) => r.url === DEFAULT_REGISTRY_URL || r.name === DEFAULT_REGISTRY_NAME);
|
|
132
|
+
if (!hasDefault) {
|
|
133
|
+
await adk.registry.add({ url: DEFAULT_REGISTRY_URL, name: DEFAULT_REGISTRY_NAME });
|
|
134
|
+
console.log(`\x1b[32m\u2713\x1b[0m Set default registry: ${DEFAULT_REGISTRY_URL}`);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.log(`\x1b[32m\u2713\x1b[0m Default registry already configured: ${DEFAULT_REGISTRY_URL}`);
|
|
138
|
+
}
|
|
139
|
+
// 2. Install skills to targets
|
|
140
|
+
if (targets.length === 0) {
|
|
141
|
+
console.log(`\nTo install skills, re-run with targets:\n`);
|
|
142
|
+
const presets = listPresets();
|
|
143
|
+
for (const preset of presets) {
|
|
144
|
+
console.log(` adk init --target ${preset.name}`);
|
|
145
|
+
}
|
|
146
|
+
console.log(`\nCustom path: adk init --target <preset>:<path>`);
|
|
147
|
+
console.log(`\nAsk the user which coding agents they use,`);
|
|
148
|
+
console.log(`then run: adk init --target <preset> [--target <preset> ...]`);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
for (const target of targets) {
|
|
152
|
+
const outputPath = installSkill(target);
|
|
153
|
+
console.log(`\x1b[32m\u2713\x1b[0m Installed adk skill \u2192 ${outputPath}`);
|
|
154
|
+
}
|
|
155
|
+
// 3. Save targets to config
|
|
156
|
+
const config = await adk.readConfig();
|
|
157
|
+
const targetStrings = targets.map((t) => {
|
|
158
|
+
return t.path === expandHome(t.preset.defaultPath) ? t.preset.name : `${t.preset.name}:${t.path}`;
|
|
159
|
+
});
|
|
160
|
+
config.targets = targetStrings;
|
|
161
|
+
await adk.writeConfig(config);
|
|
162
|
+
console.log(`\x1b[32m\u2713\x1b[0m Saved targets to config`);
|
|
163
|
+
console.log(`\nDone! Your coding agents now know how to use adk.`);
|
|
164
|
+
console.log(`Run \`adk init\` again anytime to refresh skills or add targets.`);
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ref Materialization — Download agent docs to local filesystem.
|
|
3
|
+
*
|
|
4
|
+
* When `adk ref add` succeeds, materialize the agent's tool schemas,
|
|
5
|
+
* resources (skills), and generate TypeScript type definitions locally.
|
|
6
|
+
*
|
|
7
|
+
* Files are written under the adk config dir at refs/<name>/.
|
|
8
|
+
*/
|
|
9
|
+
import type { Adk } from "./config-store.js";
|
|
10
|
+
interface MaterializeResult {
|
|
11
|
+
toolCount: number;
|
|
12
|
+
skillCount: number;
|
|
13
|
+
typesGenerated: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function materializeRef(adk: Adk, refName: string, configDir: string): Promise<MaterializeResult>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=materialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.d.ts","sourceRoot":"","sources":["../src/materialize.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAc7C,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAoDD,wBAAsB,cAAc,CAClC,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAuE5B"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ref Materialization — Download agent docs to local filesystem.
|
|
3
|
+
*
|
|
4
|
+
* When `adk ref add` succeeds, materialize the agent's tool schemas,
|
|
5
|
+
* resources (skills), and generate TypeScript type definitions locally.
|
|
6
|
+
*
|
|
7
|
+
* Files are written under the adk config dir at refs/<name>/.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { dirname, join } from "node:path";
|
|
11
|
+
// ============================================
|
|
12
|
+
// Helpers
|
|
13
|
+
// ============================================
|
|
14
|
+
function ensureWrite(path, content) {
|
|
15
|
+
const dir = dirname(path);
|
|
16
|
+
if (!existsSync(dir)) {
|
|
17
|
+
mkdirSync(dir, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
writeFileSync(path, content, "utf-8");
|
|
20
|
+
}
|
|
21
|
+
/** Generate a .d.ts file from tool schemas. */
|
|
22
|
+
function generateTypes(refName, tools) {
|
|
23
|
+
const lines = [
|
|
24
|
+
`// Auto-generated by adk ref add`,
|
|
25
|
+
`// Agent: ${refName}`,
|
|
26
|
+
`// Tools: ${tools.length}`,
|
|
27
|
+
``,
|
|
28
|
+
`export interface ${pascalCase(refName)}Tools {`,
|
|
29
|
+
];
|
|
30
|
+
for (const tool of tools) {
|
|
31
|
+
lines.push(` /** ${tool.description ?? tool.name} */`);
|
|
32
|
+
lines.push(` ${JSON.stringify(tool.name)}: {`);
|
|
33
|
+
lines.push(` name: ${JSON.stringify(tool.name)};`);
|
|
34
|
+
if (tool.description) {
|
|
35
|
+
lines.push(` description: ${JSON.stringify(tool.description)};`);
|
|
36
|
+
}
|
|
37
|
+
lines.push(` params: Record<string, unknown>;`);
|
|
38
|
+
lines.push(` };`);
|
|
39
|
+
}
|
|
40
|
+
lines.push(`}`);
|
|
41
|
+
lines.push(``);
|
|
42
|
+
lines.push(`export declare const tools: (keyof ${pascalCase(refName)}Tools)[];`);
|
|
43
|
+
lines.push(``);
|
|
44
|
+
return lines.join("\n");
|
|
45
|
+
}
|
|
46
|
+
function pascalCase(s) {
|
|
47
|
+
return s
|
|
48
|
+
.replace(/[^a-zA-Z0-9]+(.)/g, (_, c) => c.toUpperCase())
|
|
49
|
+
.replace(/^./, (c) => c.toUpperCase());
|
|
50
|
+
}
|
|
51
|
+
// ============================================
|
|
52
|
+
// Materialize
|
|
53
|
+
// ============================================
|
|
54
|
+
export async function materializeRef(adk, refName, configDir) {
|
|
55
|
+
const refDir = join(configDir, "refs", refName);
|
|
56
|
+
const toolsDir = join(refDir, "tools");
|
|
57
|
+
const skillsDir = join(refDir, "skills");
|
|
58
|
+
const typesDir = join(refDir, "types");
|
|
59
|
+
let toolCount = 0;
|
|
60
|
+
let skillCount = 0;
|
|
61
|
+
let typesGenerated = false;
|
|
62
|
+
// 1. Fetch and write tool schemas
|
|
63
|
+
try {
|
|
64
|
+
const info = await adk.ref.inspect(refName, { full: true });
|
|
65
|
+
if (info?.tools && info.tools.length > 0) {
|
|
66
|
+
const tools = info.tools.map((t) => ({
|
|
67
|
+
name: t.name,
|
|
68
|
+
description: t.description,
|
|
69
|
+
inputSchema: t.inputSchema,
|
|
70
|
+
outputSchema: t.outputSchema,
|
|
71
|
+
}));
|
|
72
|
+
for (const tool of tools) {
|
|
73
|
+
const safeName = tool.name.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
74
|
+
ensureWrite(join(toolsDir, `${safeName}.tool.json`), JSON.stringify(tool, null, 2));
|
|
75
|
+
}
|
|
76
|
+
toolCount = tools.length;
|
|
77
|
+
// Write agent.json metadata
|
|
78
|
+
ensureWrite(join(refDir, "agent.json"), JSON.stringify({
|
|
79
|
+
name: refName,
|
|
80
|
+
description: info.description,
|
|
81
|
+
toolCount: tools.length,
|
|
82
|
+
tools: tools.map((t) => t.name),
|
|
83
|
+
materializedAt: new Date().toISOString(),
|
|
84
|
+
}, null, 2));
|
|
85
|
+
// Generate .d.ts
|
|
86
|
+
ensureWrite(join(typesDir, `${refName}.d.ts`), generateTypes(refName, tools));
|
|
87
|
+
typesGenerated = true;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// inspect failed — agent might not be reachable yet (needs auth)
|
|
92
|
+
}
|
|
93
|
+
// 2. Fetch and write resources (skills)
|
|
94
|
+
try {
|
|
95
|
+
const resourcesResult = await adk.ref.resources(refName);
|
|
96
|
+
const response = resourcesResult;
|
|
97
|
+
if (response?.result?.resources) {
|
|
98
|
+
for (const resource of response.result.resources) {
|
|
99
|
+
if (resource.uri && resource.text) {
|
|
100
|
+
const filename = resource.uri.split("/").pop() ?? "resource.md";
|
|
101
|
+
ensureWrite(join(skillsDir, filename), resource.text);
|
|
102
|
+
skillCount++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// resources fetch failed — might not be supported
|
|
109
|
+
}
|
|
110
|
+
return { toolCount, skillCount, typesGenerated };
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=materialize.js.map
|