@clawmasons/agent-sdk 0.1.0 → 0.1.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/dist/discovery.d.ts +134 -0
- package/dist/discovery.js +333 -0
- package/dist/discovery.js.map +1 -0
- package/dist/helpers.d.ts +58 -0
- package/dist/index.d.ts +9 -0
- package/dist/types.d.ts +112 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { AgentPackage } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Agent registry mapping agent type names (and aliases) to AgentPackage instances.
|
|
4
|
+
*/
|
|
5
|
+
export type AgentRegistry = Map<string, AgentPackage>;
|
|
6
|
+
/**
|
|
7
|
+
* VSCode-specific dev-container customizations (extensions + settings).
|
|
8
|
+
*/
|
|
9
|
+
export interface DevContainerVscodeCustomizations {
|
|
10
|
+
extensions?: string[];
|
|
11
|
+
settings?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Dev-container customizations to embed into the agent Dockerfile at build time.
|
|
15
|
+
* Follows the dev container spec customizations format.
|
|
16
|
+
*/
|
|
17
|
+
export interface DevContainerCustomizations {
|
|
18
|
+
vscode?: DevContainerVscodeCustomizations;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Default dev-container customizations applied when `dev-container-customizations`
|
|
22
|
+
* is absent from the agent config entry.
|
|
23
|
+
*/
|
|
24
|
+
export declare const DEFAULT_DEV_CONTAINER_CUSTOMIZATIONS: DevContainerCustomizations;
|
|
25
|
+
/**
|
|
26
|
+
* Per-agent registry entry declared in .mason/config.json agents section.
|
|
27
|
+
* Only `package` is the canonical field. Runtime fields are deprecated —
|
|
28
|
+
* move them to an `aliases` entry instead.
|
|
29
|
+
*/
|
|
30
|
+
export interface AgentEntryConfig {
|
|
31
|
+
/** npm package name implementing the agent SDK */
|
|
32
|
+
package: string;
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated Move to an `aliases` entry. Will be removed in a future version.
|
|
35
|
+
* Host path to bind-mount over /home/mason/ in the agent container.
|
|
36
|
+
*/
|
|
37
|
+
home?: string;
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated Move to an `aliases` entry. Will be removed in a future version.
|
|
40
|
+
* Default startup mode (overridable by CLI flags).
|
|
41
|
+
*/
|
|
42
|
+
mode?: "terminal" | "acp" | "bash";
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Move to an `aliases` entry. Will be removed in a future version.
|
|
45
|
+
* Default role name to use when --role is not supplied.
|
|
46
|
+
*/
|
|
47
|
+
role?: string;
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated Move to an `aliases` entry. Will be removed in a future version.
|
|
50
|
+
* Dev-container IDE extensions and settings to embed in the agent image at build time.
|
|
51
|
+
*/
|
|
52
|
+
devContainerCustomizations?: DevContainerCustomizations;
|
|
53
|
+
/**
|
|
54
|
+
* @deprecated Move to an `aliases` entry. Will be removed in a future version.
|
|
55
|
+
* Additional credential env var keys required by this agent in the current project.
|
|
56
|
+
*/
|
|
57
|
+
credentials?: string[];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Named runnable preset declared in .mason/config.json aliases section.
|
|
61
|
+
* An alias references an agent from the agents registry and carries all
|
|
62
|
+
* runtime configuration. Run with: mason {aliasName}
|
|
63
|
+
*/
|
|
64
|
+
export interface AliasEntryConfig {
|
|
65
|
+
/** Key in the agents registry */
|
|
66
|
+
agent: string;
|
|
67
|
+
/** Default startup mode (overridable by CLI flags) */
|
|
68
|
+
mode?: "terminal" | "acp" | "bash";
|
|
69
|
+
/** Default role name to use when --role is not supplied */
|
|
70
|
+
role?: string;
|
|
71
|
+
/** Host path to bind-mount over /home/mason/ in the agent container */
|
|
72
|
+
home?: string;
|
|
73
|
+
/** Dev-container IDE extensions and settings to embed in the agent image at build time */
|
|
74
|
+
devContainerCustomizations?: DevContainerCustomizations;
|
|
75
|
+
/** Additional credential env var keys required by this alias */
|
|
76
|
+
credentials?: string[];
|
|
77
|
+
/** Extra args appended to the agent invocation after all mason-resolved args */
|
|
78
|
+
agentArgs?: string[];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Load third-party agent packages declared in .mason/config.json.
|
|
82
|
+
*
|
|
83
|
+
* @param projectDir - Absolute path to the project root
|
|
84
|
+
* @returns Array of loaded AgentPackage objects (invalid entries are skipped with warnings)
|
|
85
|
+
*/
|
|
86
|
+
export declare function loadConfigAgents(projectDir: string): Promise<AgentPackage[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Return the raw (validated) config entry for a named agent from .mason/config.json.
|
|
89
|
+
* Synchronous — no dynamic imports. Safe to call before the async registry is initialised.
|
|
90
|
+
*
|
|
91
|
+
* @returns The AgentEntryConfig, or undefined if the file is absent or the agent is not declared.
|
|
92
|
+
*/
|
|
93
|
+
export declare function loadConfigAgentEntry(projectDir: string, agentName: string): AgentEntryConfig | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Return all agent key names declared in .mason/config.json.
|
|
96
|
+
* Synchronous — no dynamic imports. Safe to call before program.parse().
|
|
97
|
+
*
|
|
98
|
+
* @returns Array of agent key names, or empty array if the file is absent or unparseable.
|
|
99
|
+
*/
|
|
100
|
+
export declare function readConfigAgentNames(projectDir: string): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Create an agent registry from built-in and config-declared agent packages.
|
|
103
|
+
*
|
|
104
|
+
* Built-in agents are registered first. Config-declared agents can override
|
|
105
|
+
* built-in agents by name (explicit user intent).
|
|
106
|
+
*
|
|
107
|
+
* @param builtinAgents - Array of built-in AgentPackage instances
|
|
108
|
+
* @param projectDir - Optional project directory for loading .mason/config.json
|
|
109
|
+
* @returns The populated agent registry
|
|
110
|
+
*/
|
|
111
|
+
export declare function createAgentRegistry(builtinAgents: AgentPackage[], projectDir?: string): Promise<AgentRegistry>;
|
|
112
|
+
/**
|
|
113
|
+
* Get an agent from the registry by name or alias.
|
|
114
|
+
*/
|
|
115
|
+
export declare function getAgent(registry: AgentRegistry, name: string): AgentPackage | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* Get all unique agent type names (excluding aliases) from the registry.
|
|
118
|
+
*/
|
|
119
|
+
export declare function getRegisteredAgentNames(registry: AgentRegistry): string[];
|
|
120
|
+
/**
|
|
121
|
+
* Return the validated alias config entry for a named alias from .mason/config.json.
|
|
122
|
+
* Synchronous — no dynamic imports.
|
|
123
|
+
*
|
|
124
|
+
* @returns The AliasEntryConfig, or undefined if absent or invalid.
|
|
125
|
+
*/
|
|
126
|
+
export declare function loadConfigAliasEntry(projectDir: string, aliasName: string): AliasEntryConfig | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* Return all alias key names declared in .mason/config.json.
|
|
129
|
+
* Synchronous — no dynamic imports.
|
|
130
|
+
*
|
|
131
|
+
* @returns Array of alias key names, or empty array if the file is absent or unparseable.
|
|
132
|
+
*/
|
|
133
|
+
export declare function readConfigAliasNames(projectDir: string): string[];
|
|
134
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Default dev-container customizations applied when `dev-container-customizations`
|
|
5
|
+
* is absent from the agent config entry.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_DEV_CONTAINER_CUSTOMIZATIONS = {
|
|
8
|
+
vscode: {
|
|
9
|
+
extensions: [
|
|
10
|
+
"anthropic.claude-code",
|
|
11
|
+
"dbaeumer.vscode-eslint",
|
|
12
|
+
"esbenp.prettier-vscode",
|
|
13
|
+
"yoavbls.pretty-ts-errors",
|
|
14
|
+
"usernamehw.errorlens",
|
|
15
|
+
"editorconfig.editorconfig",
|
|
16
|
+
],
|
|
17
|
+
settings: {
|
|
18
|
+
"terminal.integrated.defaultProfile.linux": "bash",
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
const VALID_MODES = new Set(["terminal", "acp", "bash"]);
|
|
23
|
+
/**
|
|
24
|
+
* Parse and validate a raw config entry. Returns null if the entry is invalid (missing package).
|
|
25
|
+
* Warns and normalises invalid mode values.
|
|
26
|
+
*/
|
|
27
|
+
function parseEntryConfig(name, raw) {
|
|
28
|
+
if (!raw || typeof raw !== "object") {
|
|
29
|
+
console.warn(`[agent-sdk] Invalid agent config for "${name}": missing "package" field`);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const obj = raw;
|
|
33
|
+
if (typeof obj.package !== "string") {
|
|
34
|
+
console.warn(`[agent-sdk] Invalid agent config for "${name}": missing "package" field`);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const entry = { package: obj.package };
|
|
38
|
+
// Detect deprecated runtime fields and warn once with all offending keys
|
|
39
|
+
const runtimeFields = ["home", "mode", "role", "credentials", "dev-container-customizations"];
|
|
40
|
+
const foundDeprecated = runtimeFields.filter((f) => obj[f] !== undefined);
|
|
41
|
+
if (foundDeprecated.length > 0) {
|
|
42
|
+
console.warn(`[agent-sdk] Agent "${name}" has runtime fields (${foundDeprecated.join(", ")}) in the "agents" config. ` +
|
|
43
|
+
`Move these to an "aliases" entry. Runtime fields in "agents" will be removed in a future version.`);
|
|
44
|
+
}
|
|
45
|
+
if (obj.home !== undefined && typeof obj.home === "string") {
|
|
46
|
+
entry.home = obj.home; // deprecated field — still parsed during deprecation period
|
|
47
|
+
}
|
|
48
|
+
if (obj.mode !== undefined) {
|
|
49
|
+
if (typeof obj.mode === "string" && VALID_MODES.has(obj.mode)) {
|
|
50
|
+
entry.mode = obj.mode; // deprecated
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.warn(`[agent-sdk] Agent "${name}" has invalid mode "${String(obj.mode)}" (expected terminal, acp, or bash). Defaulting to terminal.`);
|
|
54
|
+
entry.mode = "terminal"; // deprecated
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (obj.role !== undefined && typeof obj.role === "string") {
|
|
58
|
+
entry.role = obj.role; // deprecated
|
|
59
|
+
}
|
|
60
|
+
if (obj["dev-container-customizations"] !== undefined &&
|
|
61
|
+
typeof obj["dev-container-customizations"] === "object" &&
|
|
62
|
+
obj["dev-container-customizations"] !== null) {
|
|
63
|
+
entry.devContainerCustomizations = obj["dev-container-customizations"]; // deprecated
|
|
64
|
+
}
|
|
65
|
+
if (obj.credentials !== undefined) {
|
|
66
|
+
if (!Array.isArray(obj.credentials)) {
|
|
67
|
+
console.warn(`[agent-sdk] Agent "${name}" has invalid credentials value (expected array). Ignoring.`);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const validKeys = [];
|
|
71
|
+
for (const item of obj.credentials) {
|
|
72
|
+
if (typeof item === "string") {
|
|
73
|
+
validKeys.push(item);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.warn(`[agent-sdk] Agent "${name}" credentials contains non-string entry "${String(item)}". Skipping.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
entry.credentials = validKeys; // deprecated
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return entry;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Read and parse .mason/config.json from the given project directory.
|
|
86
|
+
* Returns null if the file does not exist or cannot be parsed.
|
|
87
|
+
*/
|
|
88
|
+
function readMasonConfig(projectDir) {
|
|
89
|
+
const configPath = path.join(projectDir, ".mason", "config.json");
|
|
90
|
+
if (!fs.existsSync(configPath))
|
|
91
|
+
return null;
|
|
92
|
+
try {
|
|
93
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
94
|
+
return JSON.parse(raw);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
console.warn(`[agent-sdk] Failed to parse .mason/config.json`);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Register an agent package in the registry, including its aliases.
|
|
103
|
+
*/
|
|
104
|
+
function registerAgent(registry, agent) {
|
|
105
|
+
registry.set(agent.name, agent);
|
|
106
|
+
if (agent.aliases) {
|
|
107
|
+
for (const alias of agent.aliases) {
|
|
108
|
+
registry.set(alias, agent);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validate that a value looks like a valid AgentPackage.
|
|
114
|
+
*/
|
|
115
|
+
function isValidAgentPackage(value) {
|
|
116
|
+
if (!value || typeof value !== "object")
|
|
117
|
+
return false;
|
|
118
|
+
const obj = value;
|
|
119
|
+
return (typeof obj.name === "string" &&
|
|
120
|
+
obj.materializer !== null &&
|
|
121
|
+
typeof obj.materializer === "object" &&
|
|
122
|
+
typeof obj.materializer.name === "string" &&
|
|
123
|
+
typeof obj.materializer.materializeWorkspace === "function");
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Load third-party agent packages declared in .mason/config.json.
|
|
127
|
+
*
|
|
128
|
+
* @param projectDir - Absolute path to the project root
|
|
129
|
+
* @returns Array of loaded AgentPackage objects (invalid entries are skipped with warnings)
|
|
130
|
+
*/
|
|
131
|
+
export async function loadConfigAgents(projectDir) {
|
|
132
|
+
const config = readMasonConfig(projectDir);
|
|
133
|
+
if (!config || !config.agents || typeof config.agents !== "object") {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
const agents = [];
|
|
137
|
+
for (const [name, raw] of Object.entries(config.agents)) {
|
|
138
|
+
const entry = parseEntryConfig(name, raw);
|
|
139
|
+
if (!entry)
|
|
140
|
+
continue;
|
|
141
|
+
try {
|
|
142
|
+
const mod = await import(entry.package);
|
|
143
|
+
const agentPkg = mod.default;
|
|
144
|
+
if (!isValidAgentPackage(agentPkg)) {
|
|
145
|
+
console.warn(`[agent-sdk] Package "${entry.package}" does not export a valid AgentPackage`);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
agents.push(agentPkg);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
console.warn(`[agent-sdk] Agent package "${entry.package}" not found. Install it with: npm install ${entry.package}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return agents;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Return the raw (validated) config entry for a named agent from .mason/config.json.
|
|
158
|
+
* Synchronous — no dynamic imports. Safe to call before the async registry is initialised.
|
|
159
|
+
*
|
|
160
|
+
* @returns The AgentEntryConfig, or undefined if the file is absent or the agent is not declared.
|
|
161
|
+
*/
|
|
162
|
+
export function loadConfigAgentEntry(projectDir, agentName) {
|
|
163
|
+
const config = readMasonConfig(projectDir);
|
|
164
|
+
if (!config?.agents)
|
|
165
|
+
return undefined;
|
|
166
|
+
const raw = config.agents[agentName];
|
|
167
|
+
if (raw === undefined)
|
|
168
|
+
return undefined;
|
|
169
|
+
const entry = parseEntryConfig(agentName, raw);
|
|
170
|
+
return entry ?? undefined;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Return all agent key names declared in .mason/config.json.
|
|
174
|
+
* Synchronous — no dynamic imports. Safe to call before program.parse().
|
|
175
|
+
*
|
|
176
|
+
* @returns Array of agent key names, or empty array if the file is absent or unparseable.
|
|
177
|
+
*/
|
|
178
|
+
export function readConfigAgentNames(projectDir) {
|
|
179
|
+
const config = readMasonConfig(projectDir);
|
|
180
|
+
if (!config?.agents || typeof config.agents !== "object")
|
|
181
|
+
return [];
|
|
182
|
+
return Object.keys(config.agents);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Create an agent registry from built-in and config-declared agent packages.
|
|
186
|
+
*
|
|
187
|
+
* Built-in agents are registered first. Config-declared agents can override
|
|
188
|
+
* built-in agents by name (explicit user intent).
|
|
189
|
+
*
|
|
190
|
+
* @param builtinAgents - Array of built-in AgentPackage instances
|
|
191
|
+
* @param projectDir - Optional project directory for loading .mason/config.json
|
|
192
|
+
* @returns The populated agent registry
|
|
193
|
+
*/
|
|
194
|
+
export async function createAgentRegistry(builtinAgents, projectDir) {
|
|
195
|
+
const registry = new Map();
|
|
196
|
+
// Phase 1: Register built-in agents
|
|
197
|
+
for (const agent of builtinAgents) {
|
|
198
|
+
registerAgent(registry, agent);
|
|
199
|
+
}
|
|
200
|
+
// Phase 2: Load and register config-declared agents (can override built-ins)
|
|
201
|
+
if (projectDir) {
|
|
202
|
+
const configAgents = await loadConfigAgents(projectDir);
|
|
203
|
+
for (const agent of configAgents) {
|
|
204
|
+
registerAgent(registry, agent);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return registry;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get an agent from the registry by name or alias.
|
|
211
|
+
*/
|
|
212
|
+
export function getAgent(registry, name) {
|
|
213
|
+
return registry.get(name);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get all unique agent type names (excluding aliases) from the registry.
|
|
217
|
+
*/
|
|
218
|
+
export function getRegisteredAgentNames(registry) {
|
|
219
|
+
const names = new Set();
|
|
220
|
+
for (const agent of registry.values()) {
|
|
221
|
+
names.add(agent.name);
|
|
222
|
+
}
|
|
223
|
+
return [...names];
|
|
224
|
+
}
|
|
225
|
+
// ── Alias Config Loading ──────────────────────────────────────────────
|
|
226
|
+
/**
|
|
227
|
+
* Parse and validate a raw alias config entry.
|
|
228
|
+
* Returns null if the entry is invalid (missing or invalid agent field).
|
|
229
|
+
* @param name - The alias key name
|
|
230
|
+
* @param raw - The raw value from config.json
|
|
231
|
+
* @param knownAgentNames - Set of valid agent keys for validation
|
|
232
|
+
*/
|
|
233
|
+
function parseAliasEntryConfig(name, raw, knownAgentNames) {
|
|
234
|
+
if (!raw || typeof raw !== "object") {
|
|
235
|
+
console.warn(`[agent-sdk] Invalid alias config for "${name}": must be an object`);
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
const obj = raw;
|
|
239
|
+
if (typeof obj.agent !== "string") {
|
|
240
|
+
console.warn(`[agent-sdk] Invalid alias config for "${name}": missing "agent" field`);
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
if (!knownAgentNames.has(obj.agent)) {
|
|
244
|
+
console.error(`[agent-sdk] Alias "${name}" references unknown agent "${obj.agent}"`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
const entry = { agent: obj.agent };
|
|
248
|
+
if (obj.mode !== undefined) {
|
|
249
|
+
if (typeof obj.mode === "string" && VALID_MODES.has(obj.mode)) {
|
|
250
|
+
entry.mode = obj.mode;
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
console.warn(`[agent-sdk] Alias "${name}" has invalid mode "${String(obj.mode)}" (expected terminal, acp, or bash). Defaulting to terminal.`);
|
|
254
|
+
entry.mode = "terminal";
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (obj.role !== undefined && typeof obj.role === "string") {
|
|
258
|
+
entry.role = obj.role;
|
|
259
|
+
}
|
|
260
|
+
if (obj.home !== undefined && typeof obj.home === "string") {
|
|
261
|
+
entry.home = obj.home;
|
|
262
|
+
}
|
|
263
|
+
if (obj["dev-container-customizations"] !== undefined &&
|
|
264
|
+
typeof obj["dev-container-customizations"] === "object" &&
|
|
265
|
+
obj["dev-container-customizations"] !== null) {
|
|
266
|
+
entry.devContainerCustomizations = obj["dev-container-customizations"];
|
|
267
|
+
}
|
|
268
|
+
if (obj.credentials !== undefined) {
|
|
269
|
+
if (!Array.isArray(obj.credentials)) {
|
|
270
|
+
console.warn(`[agent-sdk] Alias "${name}" has invalid credentials value (expected array). Ignoring.`);
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
const validKeys = [];
|
|
274
|
+
for (const item of obj.credentials) {
|
|
275
|
+
if (typeof item === "string") {
|
|
276
|
+
validKeys.push(item);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
console.warn(`[agent-sdk] Alias "${name}" credentials contains non-string entry "${String(item)}". Skipping.`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
entry.credentials = validKeys;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
if (obj["agent-args"] !== undefined) {
|
|
286
|
+
if (!Array.isArray(obj["agent-args"])) {
|
|
287
|
+
console.warn(`[agent-sdk] Alias "${name}" has invalid agent-args value (expected array). Ignoring.`);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
const validArgs = [];
|
|
291
|
+
for (const item of obj["agent-args"]) {
|
|
292
|
+
if (typeof item === "string") {
|
|
293
|
+
validArgs.push(item);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
console.warn(`[agent-sdk] Alias "${name}" agent-args contains non-string entry "${String(item)}". Skipping.`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
entry.agentArgs = validArgs;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return entry;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Return the validated alias config entry for a named alias from .mason/config.json.
|
|
306
|
+
* Synchronous — no dynamic imports.
|
|
307
|
+
*
|
|
308
|
+
* @returns The AliasEntryConfig, or undefined if absent or invalid.
|
|
309
|
+
*/
|
|
310
|
+
export function loadConfigAliasEntry(projectDir, aliasName) {
|
|
311
|
+
const config = readMasonConfig(projectDir);
|
|
312
|
+
if (!config?.aliases)
|
|
313
|
+
return undefined;
|
|
314
|
+
const raw = config.aliases[aliasName];
|
|
315
|
+
if (raw === undefined)
|
|
316
|
+
return undefined;
|
|
317
|
+
const knownAgentNames = new Set(Object.keys(config.agents ?? {}));
|
|
318
|
+
const entry = parseAliasEntryConfig(aliasName, raw, knownAgentNames);
|
|
319
|
+
return entry ?? undefined;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Return all alias key names declared in .mason/config.json.
|
|
323
|
+
* Synchronous — no dynamic imports.
|
|
324
|
+
*
|
|
325
|
+
* @returns Array of alias key names, or empty array if the file is absent or unparseable.
|
|
326
|
+
*/
|
|
327
|
+
export function readConfigAliasNames(projectDir) {
|
|
328
|
+
const config = readMasonConfig(projectDir);
|
|
329
|
+
if (!config?.aliases || typeof config.aliases !== "object")
|
|
330
|
+
return [];
|
|
331
|
+
return Object.keys(config.aliases);
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ResolvedAgent, ResolvedRole, ResolvedTask, ResolvedSkill } from "@clawmasons/shared";
|
|
2
|
+
import type { AgentPackage } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Mapping from LLM provider identifiers to their environment variable names.
|
|
5
|
+
*
|
|
6
|
+
* Used by Dockerfile generators to inject the correct API key into
|
|
7
|
+
* Docker Compose services, and by env template generation to include
|
|
8
|
+
* the key in .env.example.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PROVIDER_ENV_VARS: Record<string, string>;
|
|
11
|
+
/**
|
|
12
|
+
* Format a role's permitted tools as a readable list.
|
|
13
|
+
* Each line: " - {appShortName}: tool1, tool2, tool3"
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatPermittedTools(permissions: Record<string, {
|
|
16
|
+
allow: string[];
|
|
17
|
+
deny: string[];
|
|
18
|
+
}>): string;
|
|
19
|
+
/**
|
|
20
|
+
* Find which roles contain a given task (by name).
|
|
21
|
+
*/
|
|
22
|
+
export declare function findRolesForTask(taskName: string, roles: ResolvedRole[]): ResolvedRole[];
|
|
23
|
+
/**
|
|
24
|
+
* Collect all unique skills across all roles.
|
|
25
|
+
*/
|
|
26
|
+
export declare function collectAllSkills(roles: ResolvedRole[]): Map<string, ResolvedSkill>;
|
|
27
|
+
/**
|
|
28
|
+
* Collect all unique tasks across all roles.
|
|
29
|
+
* Returns tuples of [task, owningRoles].
|
|
30
|
+
*/
|
|
31
|
+
export declare function collectAllTasks(roles: ResolvedRole[]): Array<[ResolvedTask, ResolvedRole[]]>;
|
|
32
|
+
/**
|
|
33
|
+
* Generate AGENTS.md content.
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateAgentsMd(agent: ResolvedAgent): string;
|
|
36
|
+
/** Credential configuration for agent-launch.json. */
|
|
37
|
+
export interface LaunchCredentialConfig {
|
|
38
|
+
key: string;
|
|
39
|
+
type: "env" | "file";
|
|
40
|
+
path?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Generate agent-launch.json content for the agent-entry entrypoint.
|
|
44
|
+
*
|
|
45
|
+
* Uses the AgentPackage's runtime config to determine command, args,
|
|
46
|
+
* and runtime-specific credentials. Merges with role-declared credentials.
|
|
47
|
+
*
|
|
48
|
+
* @param agentPkg - The agent package providing runtime config
|
|
49
|
+
* @param roleCredentials - Credential keys declared by the role
|
|
50
|
+
* @param acpMode - Whether to generate ACP mode config
|
|
51
|
+
* @returns JSON string of agent-launch.json
|
|
52
|
+
*/
|
|
53
|
+
export declare function generateAgentLaunchJson(agentPkg: AgentPackage, roleCredentials: string[], acpMode?: boolean, instructions?: string, agentArgs?: string[]): string;
|
|
54
|
+
/**
|
|
55
|
+
* Generate a skill README.md.
|
|
56
|
+
*/
|
|
57
|
+
export declare function generateSkillReadme(skill: ResolvedSkill): string;
|
|
58
|
+
//# sourceMappingURL=helpers.d.ts.map
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { AgentPackage, DockerfileConfig, AcpConfig, RuntimeConfig, RuntimeMaterializer, MaterializationResult, MaterializeOptions, } from "./types.js";
|
|
2
|
+
export { PROVIDER_ENV_VARS, formatPermittedTools, findRolesForTask, collectAllSkills, collectAllTasks, generateAgentsMd, generateAgentLaunchJson, generateSkillReadme, } from "./helpers.js";
|
|
3
|
+
export type { LaunchCredentialConfig } from "./helpers.js";
|
|
4
|
+
export { createAgentRegistry, loadConfigAgents, loadConfigAgentEntry, readConfigAgentNames, loadConfigAliasEntry, readConfigAliasNames, getAgent, getRegisteredAgentNames, } from "./discovery.js";
|
|
5
|
+
export type { AgentRegistry, AgentEntryConfig, AliasEntryConfig, DevContainerCustomizations, DevContainerVscodeCustomizations } from "./discovery.js";
|
|
6
|
+
export { DEFAULT_DEV_CONTAINER_CUSTOMIZATIONS } from "./discovery.js";
|
|
7
|
+
export type { ResolvedAgent, ResolvedRole, ResolvedTask, ResolvedSkill, } from "@clawmasons/shared";
|
|
8
|
+
export { getAppShortName } from "@clawmasons/shared";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import type { ResolvedAgent } from "@clawmasons/shared";
|
|
2
|
+
/**
|
|
3
|
+
* A map of relative file paths to their string content.
|
|
4
|
+
* Keys are paths relative to the workspace root (e.g., ".claude/settings.json").
|
|
5
|
+
*/
|
|
6
|
+
export type MaterializationResult = Map<string, string>;
|
|
7
|
+
/**
|
|
8
|
+
* Options for workspace materialization.
|
|
9
|
+
*/
|
|
10
|
+
export interface MaterializeOptions {
|
|
11
|
+
/** When true, generate ACP agent configuration alongside standard workspace files. */
|
|
12
|
+
acpMode?: boolean;
|
|
13
|
+
/** Additional credential env var keys from agent config (.mason/config.json). Merged into agent-launch.json credentials. */
|
|
14
|
+
agentConfigCredentials?: string[];
|
|
15
|
+
/** Extra args from alias config appended to the agent invocation after all mason-resolved args. */
|
|
16
|
+
agentArgs?: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The contract all runtime materializers implement.
|
|
20
|
+
*
|
|
21
|
+
* A materializer translates the abstract chapter dependency graph into
|
|
22
|
+
* a specific runtime's native configuration format.
|
|
23
|
+
*/
|
|
24
|
+
export interface RuntimeMaterializer {
|
|
25
|
+
/** Runtime identifier (e.g., "claude-code-agent", "mcp-agent"). */
|
|
26
|
+
name: string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate workspace file content for this runtime.
|
|
29
|
+
* Returns a map of relative paths -> file content strings.
|
|
30
|
+
* The caller handles writing files to disk.
|
|
31
|
+
*/
|
|
32
|
+
materializeWorkspace(agent: ResolvedAgent, proxyEndpoint: string, proxyToken?: string, options?: MaterializeOptions): MaterializationResult;
|
|
33
|
+
/**
|
|
34
|
+
* Materialize host configuration into the agent's home directory.
|
|
35
|
+
* Writes directly to disk (copies directory trees, binary files).
|
|
36
|
+
* Optional — agents without home materialization simply omit this method.
|
|
37
|
+
*
|
|
38
|
+
* @param projectDir - Absolute path to the project root on the host
|
|
39
|
+
* @param homePath - Absolute path to the target home directory
|
|
40
|
+
*/
|
|
41
|
+
materializeHome?(projectDir: string, homePath: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Generate home-directory file content for a supervisor role.
|
|
44
|
+
*
|
|
45
|
+
* Returns a map of home-relative paths → file content (ready to write verbatim).
|
|
46
|
+
* The caller writes every entry to the home build dir, except "agent-launch.json"
|
|
47
|
+
* which is always routed to the workspace dir.
|
|
48
|
+
*
|
|
49
|
+
* @param existingHomePath - If provided, the materializer may read existing files
|
|
50
|
+
* (e.g., host .claude.json written by materializeHome) to produce merged output.
|
|
51
|
+
*
|
|
52
|
+
* Agents that do not support supervisor roles omit this method.
|
|
53
|
+
*/
|
|
54
|
+
materializeSupervisor?(agent: ResolvedAgent, proxyEndpoint: string, proxyToken?: string, options?: MaterializeOptions, existingHomePath?: string): MaterializationResult;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Dockerfile generation hooks for an agent package.
|
|
58
|
+
*/
|
|
59
|
+
export interface DockerfileConfig {
|
|
60
|
+
/** Default base Docker image (e.g., "node:22-slim"). */
|
|
61
|
+
baseImage?: string;
|
|
62
|
+
/** Dockerfile RUN instructions to install the agent runtime (raw Dockerfile lines). */
|
|
63
|
+
installSteps?: string;
|
|
64
|
+
/** Additional apt packages required by the agent runtime. */
|
|
65
|
+
aptPackages?: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* ACP mode configuration for an agent package.
|
|
69
|
+
*/
|
|
70
|
+
export interface AcpConfig {
|
|
71
|
+
/** Command to start the agent in ACP mode (e.g., "claude-agent-acp"). */
|
|
72
|
+
command: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Runtime command configuration for agent-launch.json generation.
|
|
76
|
+
*/
|
|
77
|
+
export interface RuntimeConfig {
|
|
78
|
+
/** Default command to run the agent (e.g., "claude"). */
|
|
79
|
+
command: string;
|
|
80
|
+
/** Default command arguments (e.g., ["--effort", "max"]). */
|
|
81
|
+
args?: string[];
|
|
82
|
+
/** Additional credentials the runtime always requires. */
|
|
83
|
+
credentials?: Array<{
|
|
84
|
+
key: string;
|
|
85
|
+
type: "env" | "file";
|
|
86
|
+
path?: string;
|
|
87
|
+
}>;
|
|
88
|
+
/** When true, the runtime accepts role instructions as a trailing positional argument. */
|
|
89
|
+
supportsInitialPrompt?: boolean;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The primary contract for agent packages.
|
|
93
|
+
*
|
|
94
|
+
* Every agent package exports an `AgentPackage` object as its default export.
|
|
95
|
+
* The CLI uses this interface to discover agent capabilities, generate
|
|
96
|
+
* workspace files, Dockerfiles, and launch configurations.
|
|
97
|
+
*/
|
|
98
|
+
export interface AgentPackage {
|
|
99
|
+
/** Primary agent type identifier used in `mason run --agent <name>`. */
|
|
100
|
+
name: string;
|
|
101
|
+
/** Alternative names for this agent (e.g., "claude" for "claude-code-agent"). */
|
|
102
|
+
aliases?: string[];
|
|
103
|
+
/** The workspace materialization implementation. */
|
|
104
|
+
materializer: RuntimeMaterializer;
|
|
105
|
+
/** Dockerfile generation hooks. */
|
|
106
|
+
dockerfile?: DockerfileConfig;
|
|
107
|
+
/** ACP mode configuration. */
|
|
108
|
+
acp?: AcpConfig;
|
|
109
|
+
/** Runtime command configuration for agent-launch.json. */
|
|
110
|
+
runtime?: RuntimeConfig;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4HAA4H;IAC5H,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4HAA4H;IAC5H,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IAEb;;;;OAIG;IACH,oBAAoB,CAClB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,qBAAqB,CAAC;IAEzB;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAE7D;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,CACpB,KAAK,EAAE,aAAa,EACpB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,kBAAkB,EAC5B,gBAAgB,CAAC,EAAE,MAAM,GACxB,qBAAqB,CAAC;CAC1B;AAID;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uFAAuF;IACvF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,0FAA0F;IAC1F,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IAEb,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB,oDAAoD;IACpD,YAAY,EAAE,mBAAmB,CAAC;IAElC,mCAAmC;IACnC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B,8BAA8B;IAC9B,GAAG,CAAC,EAAE,SAAS,CAAC;IAEhB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clawmasons/agent-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "SDK for building Mason Chapter agent packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,6 +20,6 @@
|
|
|
20
20
|
],
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@clawmasons/shared": "0.1.
|
|
23
|
+
"@clawmasons/shared": "^0.1.1"
|
|
24
24
|
}
|
|
25
25
|
}
|