@nichollasf/ai-kit 1.0.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/.agents/archetypes/implementer-senior.md +46 -0
- package/.agents/archetypes/implementer.md +46 -0
- package/.agents/archetypes/orchestrator.md +54 -0
- package/.agents/archetypes/planner.md +54 -0
- package/.agents/archetypes/quick.md +46 -0
- package/.agents/archetypes/researcher.md +46 -0
- package/.agents/archetypes/reviewer.md +46 -0
- package/.agents/catalog/catalog-v2.schema.json +1641 -0
- package/.agents/catalog/personal.json +370 -0
- package/.agents/skills/ai-kit-model-calibration/SKILL.md +57 -0
- package/.agents/skills/ai-kit-model-calibration/assets/scorecard.md +61 -0
- package/.agents/skills/ai-kit-model-calibration/references/rubric.md +41 -0
- package/.agents/skills/ai-kit-task-routing/SKILL.md +44 -0
- package/.agents/skills/ai-kit-task-routing/references/handoff.md +29 -0
- package/LICENSE +21 -0
- package/README.md +151 -0
- package/dist/catalog.d.ts +99 -0
- package/dist/catalog.js +590 -0
- package/dist/catalog.js.map +1 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.js +201 -0
- package/dist/cli.js.map +1 -0
- package/dist/diagnostics.d.ts +2 -0
- package/dist/diagnostics.js +301 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/installer.d.ts +18 -0
- package/dist/installer.js +303 -0
- package/dist/installer.js.map +1 -0
- package/dist/legacy.d.ts +7 -0
- package/dist/legacy.js +69 -0
- package/dist/legacy.js.map +1 -0
- package/dist/manifest.d.ts +50 -0
- package/dist/manifest.js +223 -0
- package/dist/manifest.js.map +1 -0
- package/dist/transaction.d.ts +10 -0
- package/dist/transaction.js +187 -0
- package/dist/transaction.js.map +1 -0
- package/docs/architecture.md +61 -0
- package/package.json +62 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
import { realpathSync } from "node:fs";
|
|
4
|
+
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { pathToFileURL } from "node:url";
|
|
6
|
+
import { HARNESS_NAMES, ROLE_NAMES, normalizeSelection, } from "./catalog.js";
|
|
7
|
+
import { AiKitError, runCommand, } from "./installer.js";
|
|
8
|
+
const HELP = `Usage: ai-kit [command] [options]
|
|
9
|
+
|
|
10
|
+
No command opens the interactive project installer.
|
|
11
|
+
add, init Install packaged archetypes (init is an alias)
|
|
12
|
+
list List archetypes, pinned bindings and harness presets
|
|
13
|
+
update Update intact owned artifacts; migrate v1/v2
|
|
14
|
+
check Check structural integrity and local readiness
|
|
15
|
+
uninstall Remove intact owned artifacts only
|
|
16
|
+
|
|
17
|
+
--harnesses <list> codex,claude-code,opencode; required non-interactively
|
|
18
|
+
--archetypes <list> Individual roles (see list)
|
|
19
|
+
--primary <role> Select the standalone main role in an incomplete team
|
|
20
|
+
--team Select the complete seven-role team (default)
|
|
21
|
+
--target <path> Existing project directory (default: cwd)
|
|
22
|
+
--method <method> symlink (default) or copy; no silent fallback
|
|
23
|
+
--route <route> check only: gpt (default) or claude in OpenCode
|
|
24
|
+
-y, --yes Use explicit selections without prompting
|
|
25
|
+
--dry-run Validate and describe changes; zero writes
|
|
26
|
+
-h, --help Show help
|
|
27
|
+
|
|
28
|
+
update retains the installed selection unless flags replace it.
|
|
29
|
+
No global installation, arbitrary models, harness installation or credentials.
|
|
30
|
+
`;
|
|
31
|
+
export function parseArguments(args, cwd = process.cwd()) {
|
|
32
|
+
let command = "add";
|
|
33
|
+
let seen = false;
|
|
34
|
+
let help = false;
|
|
35
|
+
let yes = false;
|
|
36
|
+
let team = false;
|
|
37
|
+
const options = { target: cwd };
|
|
38
|
+
const selections = new Set();
|
|
39
|
+
const commands = ["add", "init", "list", "update", "check", "uninstall"];
|
|
40
|
+
for (let index = 0; index < args.length; index++) {
|
|
41
|
+
const arg = args[index];
|
|
42
|
+
if (commands.includes(arg)) {
|
|
43
|
+
if (seen)
|
|
44
|
+
throw new AiKitError("Only one command may be specified.", 2);
|
|
45
|
+
command = arg;
|
|
46
|
+
seen = true;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (arg === "-h" || arg === "--help") {
|
|
50
|
+
help = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (arg === "-y" || arg === "--yes") {
|
|
54
|
+
yes = true;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (arg === "--dry-run") {
|
|
58
|
+
options.dryRun = true;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (arg === "--team") {
|
|
62
|
+
team = true;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if ([
|
|
66
|
+
"--harnesses",
|
|
67
|
+
"--archetypes",
|
|
68
|
+
"--target",
|
|
69
|
+
"--method",
|
|
70
|
+
"--route",
|
|
71
|
+
"--primary",
|
|
72
|
+
].includes(arg)) {
|
|
73
|
+
if (selections.has(arg))
|
|
74
|
+
throw new AiKitError(`Repeated option: ${arg}`, 2);
|
|
75
|
+
selections.add(arg);
|
|
76
|
+
const value = args[++index];
|
|
77
|
+
if (!value || value.startsWith("-"))
|
|
78
|
+
throw new AiKitError(`${arg} requires a value.`, 2);
|
|
79
|
+
if (arg === "--target")
|
|
80
|
+
options.target = value;
|
|
81
|
+
if (arg === "--harnesses")
|
|
82
|
+
options.harnesses = value.split(",");
|
|
83
|
+
if (arg === "--archetypes")
|
|
84
|
+
options.archetypes = value.split(",");
|
|
85
|
+
if (arg === "--primary") {
|
|
86
|
+
if (!ROLE_NAMES.includes(value))
|
|
87
|
+
throw new AiKitError("Unknown primary archetype.", 2);
|
|
88
|
+
options.primary = value;
|
|
89
|
+
}
|
|
90
|
+
if (arg === "--method") {
|
|
91
|
+
if (value !== "symlink" && value !== "copy")
|
|
92
|
+
throw new AiKitError("--method must be symlink or copy.", 2);
|
|
93
|
+
options.method = value;
|
|
94
|
+
}
|
|
95
|
+
if (arg === "--route") {
|
|
96
|
+
if (value !== "gpt" && value !== "claude")
|
|
97
|
+
throw new AiKitError("--route must be gpt or claude.", 2);
|
|
98
|
+
options.route = value;
|
|
99
|
+
}
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
throw new AiKitError(`Unknown argument: ${arg}`, 2);
|
|
103
|
+
}
|
|
104
|
+
if (team && options.archetypes)
|
|
105
|
+
throw new AiKitError("Choose --team or --archetypes.", 2);
|
|
106
|
+
if (team)
|
|
107
|
+
options.archetypes = [...ROLE_NAMES];
|
|
108
|
+
if (options.harnesses?.some((h) => !HARNESS_NAMES.includes(h)) ||
|
|
109
|
+
options.harnesses?.length === 0)
|
|
110
|
+
throw new AiKitError("Unknown harness; use codex,claude-code,opencode.", 2);
|
|
111
|
+
if (options.archetypes?.some((r) => !ROLE_NAMES.includes(r)))
|
|
112
|
+
throw new AiKitError("Unknown archetype; run list.", 2);
|
|
113
|
+
if (options.route && command !== "check")
|
|
114
|
+
throw new AiKitError("--route is supported only by check.", 2);
|
|
115
|
+
if (!["add", "init", "update"].includes(command) &&
|
|
116
|
+
(options.harnesses ||
|
|
117
|
+
options.archetypes ||
|
|
118
|
+
options.method ||
|
|
119
|
+
options.primary))
|
|
120
|
+
throw new AiKitError("Selection flags apply only to add/init/update.", 2);
|
|
121
|
+
return { command, options, yes, help };
|
|
122
|
+
}
|
|
123
|
+
export async function wizard(options, question, log) {
|
|
124
|
+
log("ai-kit — project archetype catalog");
|
|
125
|
+
const harnessText = options.harnesses?.join(",") ??
|
|
126
|
+
(await question("Harnesses: codex,claude-code,opencode [codex]: "));
|
|
127
|
+
const rolesText = options.archetypes?.join(",") ??
|
|
128
|
+
(await question(`Archetypes: team or comma-separated names (${ROLE_NAMES.join(",")}) [team]: `));
|
|
129
|
+
const method = options.method ??
|
|
130
|
+
((await question("Method: symlink or copy [symlink]: ")).trim() ||
|
|
131
|
+
"symlink");
|
|
132
|
+
const selection = normalizeSelection({
|
|
133
|
+
...(options.primary ? { primary: options.primary } : {}),
|
|
134
|
+
harnesses: (harnessText.trim() || "codex")
|
|
135
|
+
.split(",")
|
|
136
|
+
.map((x) => x.trim()),
|
|
137
|
+
archetypes: !rolesText.trim() || rolesText.trim() === "team"
|
|
138
|
+
? [...ROLE_NAMES]
|
|
139
|
+
: rolesText.split(",").map((x) => x.trim()),
|
|
140
|
+
method: method,
|
|
141
|
+
});
|
|
142
|
+
log(`Target: ${options.target}\nHarnesses: ${selection.harnesses.join(", ")}\nArchetypes: ${selection.archetypes.join(", ")}\nMethod: ${selection.method}`);
|
|
143
|
+
if (selection.archetypes.length !== ROLE_NAMES.length) {
|
|
144
|
+
log("Individual selection: orchestration is disabled.");
|
|
145
|
+
if (!selection.primary && selection.archetypes.length > 1) {
|
|
146
|
+
const primary = (await question(`Standalone main role [${selection.archetypes[0]}]: `)).trim() || selection.archetypes[0];
|
|
147
|
+
selection.primary = primary;
|
|
148
|
+
normalizeSelection(selection);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (selection.archetypes.length !== ROLE_NAMES.length)
|
|
152
|
+
log(`Primary: ${selection.primary ?? selection.archetypes[0]}`);
|
|
153
|
+
const answer = (await question(options.dryRun
|
|
154
|
+
? "Preview this installation? [Y/n]: "
|
|
155
|
+
: "Install this selection? [Y/n]: "))
|
|
156
|
+
.trim()
|
|
157
|
+
.toLowerCase();
|
|
158
|
+
if (answer && !["y", "yes"].includes(answer)) {
|
|
159
|
+
log("Cancelled; no changes made.");
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
return { ...options, ...selection };
|
|
163
|
+
}
|
|
164
|
+
async function main() {
|
|
165
|
+
if (Number(process.versions.node.split(".")[0]) < 20)
|
|
166
|
+
throw new AiKitError("ai-kit requires Node.js 20 or newer.", 2);
|
|
167
|
+
const parsed = parseArguments(process.argv.slice(2));
|
|
168
|
+
if (parsed.help) {
|
|
169
|
+
process.stdout.write(HELP);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
let options = parsed.options;
|
|
173
|
+
if (["add", "init"].includes(parsed.command) &&
|
|
174
|
+
!options.harnesses &&
|
|
175
|
+
!parsed.yes &&
|
|
176
|
+
process.stdin.isTTY &&
|
|
177
|
+
process.stdout.isTTY) {
|
|
178
|
+
const reader = createInterface({
|
|
179
|
+
input: process.stdin,
|
|
180
|
+
output: process.stdout,
|
|
181
|
+
});
|
|
182
|
+
try {
|
|
183
|
+
const selected = await wizard(options, (prompt) => reader.question(prompt), (line) => process.stdout.write(`${line}\n`));
|
|
184
|
+
if (!selected)
|
|
185
|
+
return;
|
|
186
|
+
options = selected;
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
reader.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
process.exitCode = await runCommand(parsed.command, options);
|
|
193
|
+
}
|
|
194
|
+
if (process.argv[1] &&
|
|
195
|
+
import.meta.url === pathToFileURL(realpathSync(process.argv[1])).href) {
|
|
196
|
+
main().catch((error) => {
|
|
197
|
+
process.stderr.write(`ERROR: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
198
|
+
process.exitCode = error instanceof AiKitError ? error.exitCode : 1;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { spawnSync, spawn } from "node:child_process";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { getBinding, materialize, } from "./catalog.js";
|
|
4
|
+
function external(binary, target, args) {
|
|
5
|
+
const result = spawnSync(binary, args, {
|
|
6
|
+
cwd: target,
|
|
7
|
+
encoding: "utf8",
|
|
8
|
+
timeout: 20_000,
|
|
9
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
ok: result.status === 0 && !result.error,
|
|
13
|
+
output: (result.stdout ?? "").replace(/\u001B\[[0-?]*[ -/]*[@-~]/g, ""),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function json(text) {
|
|
17
|
+
const offsets = [text.indexOf("{"), text.indexOf("[")].filter((n) => n >= 0);
|
|
18
|
+
if (!offsets.length)
|
|
19
|
+
throw new Error("No JSON response.");
|
|
20
|
+
return JSON.parse(text.slice(Math.min(...offsets)));
|
|
21
|
+
}
|
|
22
|
+
// Initialize the CLI's official SDK transport, then request local-only context
|
|
23
|
+
// estimates. No user message, model invocation, auth request or tool call is sent.
|
|
24
|
+
// Do not request get_settings: real personal settings may contain secret env vars.
|
|
25
|
+
function claudeProbe(binary, target) {
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
const child = spawn(binary, [
|
|
28
|
+
"--setting-sources",
|
|
29
|
+
"project",
|
|
30
|
+
"--strict-mcp-config",
|
|
31
|
+
"--settings",
|
|
32
|
+
'{"disableAllHooks":true}',
|
|
33
|
+
"--print",
|
|
34
|
+
"--input-format",
|
|
35
|
+
"stream-json",
|
|
36
|
+
"--output-format",
|
|
37
|
+
"stream-json",
|
|
38
|
+
"--verbose",
|
|
39
|
+
"--no-session-persistence",
|
|
40
|
+
], {
|
|
41
|
+
cwd: target,
|
|
42
|
+
env: {
|
|
43
|
+
...process.env,
|
|
44
|
+
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: "1",
|
|
45
|
+
DISABLE_AUTOUPDATER: "1",
|
|
46
|
+
},
|
|
47
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
48
|
+
});
|
|
49
|
+
let settled = false, buffer = "";
|
|
50
|
+
let initialized;
|
|
51
|
+
const timer = setTimeout(() => finish(), 20_000);
|
|
52
|
+
const finish = (result) => {
|
|
53
|
+
if (settled)
|
|
54
|
+
return;
|
|
55
|
+
settled = true;
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
child.kill();
|
|
58
|
+
if (result)
|
|
59
|
+
resolve(result);
|
|
60
|
+
else
|
|
61
|
+
reject(new Error("Claude project discovery unavailable."));
|
|
62
|
+
};
|
|
63
|
+
const send = (request_id, request) => child.stdin.write(`${JSON.stringify({ type: "control_request", request_id, request })}\n`);
|
|
64
|
+
child.on("error", () => finish());
|
|
65
|
+
child.on("exit", () => finish());
|
|
66
|
+
child.stdin.on("error", () => finish());
|
|
67
|
+
child.stdout.setEncoding("utf8");
|
|
68
|
+
child.stdout.on("data", (chunk) => {
|
|
69
|
+
buffer += chunk;
|
|
70
|
+
if (buffer.length > 8 * 1024 * 1024) {
|
|
71
|
+
finish();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
let newline;
|
|
75
|
+
while ((newline = buffer.indexOf("\n")) >= 0) {
|
|
76
|
+
const line = buffer.slice(0, newline);
|
|
77
|
+
buffer = buffer.slice(newline + 1);
|
|
78
|
+
if (!line.trim())
|
|
79
|
+
continue;
|
|
80
|
+
try {
|
|
81
|
+
const message = JSON.parse(line);
|
|
82
|
+
if (message.type !== "control_response")
|
|
83
|
+
continue;
|
|
84
|
+
const reply = message.response;
|
|
85
|
+
if (reply?.subtype !== "success" || !reply.response) {
|
|
86
|
+
finish();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (reply.request_id === "initialize") {
|
|
90
|
+
// Account/auth data is deliberately neither inspected nor retained.
|
|
91
|
+
initialized = {
|
|
92
|
+
agents: reply.response.agents,
|
|
93
|
+
commands: reply.response.commands,
|
|
94
|
+
models: reply.response.models,
|
|
95
|
+
};
|
|
96
|
+
send("context", {
|
|
97
|
+
subtype: "get_context_usage",
|
|
98
|
+
detail: "summary",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else if (reply.request_id === "context") {
|
|
102
|
+
finish({
|
|
103
|
+
...initialized,
|
|
104
|
+
...(typeof reply.response.model === "string"
|
|
105
|
+
? { model: reply.response.model }
|
|
106
|
+
: {}),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
finish();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
send("initialize", { subtype: "initialize", hooks: null });
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function taskPermission(agent, name) {
|
|
120
|
+
return agent.permission
|
|
121
|
+
?.filter((rule) => (rule.permission === "task" || rule.permission === "*") &&
|
|
122
|
+
(rule.pattern === "*" || rule.pattern === name))
|
|
123
|
+
.at(-1)?.action;
|
|
124
|
+
}
|
|
125
|
+
export async function diagnose(target, loaded, selection, route, log) {
|
|
126
|
+
let ready = true;
|
|
127
|
+
const report = (ok, message) => {
|
|
128
|
+
if (!ok)
|
|
129
|
+
ready = false;
|
|
130
|
+
log(`[${ok ? "OK" : "WARN"}] Availability: ${message}`);
|
|
131
|
+
};
|
|
132
|
+
const binaries = {
|
|
133
|
+
codex: process.env.AI_KIT_CODEX_BIN ?? "codex",
|
|
134
|
+
"claude-code": process.env.AI_KIT_CLAUDE_BIN ?? "claude",
|
|
135
|
+
opencode: process.env.AI_KIT_OPENCODE_BIN ?? "opencode",
|
|
136
|
+
};
|
|
137
|
+
for (const harness of selection.harnesses) {
|
|
138
|
+
const binary = binaries[harness];
|
|
139
|
+
const version = external(binary, target, ["--version"]);
|
|
140
|
+
if (!version.ok) {
|
|
141
|
+
report(false, `${harness} CLI unavailable; installation remains usable after installing that harness.`);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const versionNumber = version.output.match(/\d+\.\d+\.\d+/)?.[0] ?? "unknown";
|
|
145
|
+
report(true, `${harness} CLI ${versionNumber}.`);
|
|
146
|
+
if (harness === "codex") {
|
|
147
|
+
report(versionNumber === "0.154.0", "Codex adapter capability baseline is 0.154.0.");
|
|
148
|
+
const models = external(binary, target, ["debug", "models", "--bundled"]);
|
|
149
|
+
try {
|
|
150
|
+
const entries = json(models.output).models;
|
|
151
|
+
for (const role of selection.archetypes) {
|
|
152
|
+
const binding = getBinding(loaded.catalog, role, "codex");
|
|
153
|
+
const id = loaded.catalog.models[binding.model].harnesses.codex;
|
|
154
|
+
const entry = entries.find((e) => e.slug === id);
|
|
155
|
+
report(Boolean(entry &&
|
|
156
|
+
binding.supportedEfforts.every((e) => entry.supported_reasoning_levels.some((v) => v.effort === e))), `Codex ${role}: ${id} and catalog efforts ${binding.supportedEfforts.join(", ")}.`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
report(false, "Codex bundled model/effort capabilities could not be verified.");
|
|
161
|
+
}
|
|
162
|
+
// doctor --json is explicitly redacted. config/read is intentionally not
|
|
163
|
+
// used: 0.154.0 includes unredacted MCP env/header values in that response.
|
|
164
|
+
const doctor = external(binary, target, ["doctor", "--json"]);
|
|
165
|
+
try {
|
|
166
|
+
const checks = json(doctor.output).checks;
|
|
167
|
+
const health = checks["config.load"];
|
|
168
|
+
const source = materialize(loaded, selection).find((asset) => asset.path === ".agents/generated/codex/config.toml");
|
|
169
|
+
const expectedModel = /^model = "([^"]+)"/m.exec(source?.content.toString("utf8") ?? "")?.[1];
|
|
170
|
+
report(Boolean(health &&
|
|
171
|
+
health.status !== "fail" &&
|
|
172
|
+
health.details?.model === expectedModel), "Codex redacted doctor reports a parsed configuration and the expected main model.");
|
|
173
|
+
report(health?.details?.["startup warnings"] === undefined ||
|
|
174
|
+
health.details["startup warnings"] === "0", "Codex has no configuration startup warnings.");
|
|
175
|
+
report(checks["auth.credentials"]?.status === "ok", "Codex local authentication entry reported by redacted doctor; remote acceptance is not tested.");
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
report(false, "Codex redacted configuration/authentication health could not be verified.");
|
|
179
|
+
}
|
|
180
|
+
report(false, "Codex effective project trust, per-agent effort and personal overrides remain unverified: this CLI has no validated narrow configuration API. Raw config/read is skipped to avoid reading secret-bearing settings.");
|
|
181
|
+
}
|
|
182
|
+
else if (harness === "opencode") {
|
|
183
|
+
const models = external(binary, target, ["models"]);
|
|
184
|
+
const available = new Set(models.output.split(/\r?\n/).map((s) => s.trim()));
|
|
185
|
+
for (const candidate of ["gpt", "claude"]) {
|
|
186
|
+
const required = [
|
|
187
|
+
...new Set(selection.archetypes.map((role) => {
|
|
188
|
+
const binding = getBinding(loaded.catalog, role, "opencode", candidate);
|
|
189
|
+
return loaded.catalog.models[binding.model].harnesses.opencode;
|
|
190
|
+
})),
|
|
191
|
+
];
|
|
192
|
+
const missing = required.filter((id) => !available.has(id));
|
|
193
|
+
if (candidate !== route) {
|
|
194
|
+
log(missing.length
|
|
195
|
+
? `[WARN] Availability: optional OpenCode ${candidate} route unavailable: ${missing.join(", ")}; selected ${route} route unchanged.`
|
|
196
|
+
: `[INFO] Availability: optional OpenCode ${candidate} route models listed; selected ${route} route unchanged.`);
|
|
197
|
+
}
|
|
198
|
+
else
|
|
199
|
+
report(models.ok && !missing.length, `OpenCode selected ${candidate} route ${missing.length ? `unavailable: ${missing.join(", ")}` : "models listed"}; no fallback.`);
|
|
200
|
+
}
|
|
201
|
+
report(versionNumber === "1.18.30", "OpenCode adapter capability baseline is 1.18.30.");
|
|
202
|
+
const profiles = materialize(loaded, selection).filter((asset) => asset.path.startsWith(".agents/generated/opencode/agents/") &&
|
|
203
|
+
asset.path.endsWith(".md"));
|
|
204
|
+
const profileNames = profiles.map((asset) => path.posix.basename(asset.path, ".md"));
|
|
205
|
+
const routed = profiles.filter((asset) => asset.content
|
|
206
|
+
.toString("utf8")
|
|
207
|
+
.includes(`model: "${route === "gpt" ? "openai" : "anthropic"}/`));
|
|
208
|
+
for (const profile of routed) {
|
|
209
|
+
const name = path.posix.basename(profile.path, ".md");
|
|
210
|
+
const role = [...selection.archetypes]
|
|
211
|
+
.sort((a, b) => b.length - a.length)
|
|
212
|
+
.find((candidate) => name === candidate || name.startsWith(`${candidate}-`));
|
|
213
|
+
const content = profile.content.toString("utf8");
|
|
214
|
+
const model = /^model: "([^"]+)"/m.exec(content)?.[1];
|
|
215
|
+
try {
|
|
216
|
+
const result = external(binary, target, ["debug", "agent", name]);
|
|
217
|
+
const agent = json(result.output);
|
|
218
|
+
const expectedEffort = /^(?:reasoningEffort|effort): ([a-z]+)$/m.exec(content)?.[1];
|
|
219
|
+
const resolvedEffort = agent.options?.[route === "gpt" ? "reasoningEffort" : "effort"];
|
|
220
|
+
const isMain = role === "orchestrator" && selection.archetypes.length === 7;
|
|
221
|
+
const delegation = isMain
|
|
222
|
+
? agent.mode === "primary" &&
|
|
223
|
+
agent.tools?.task === true &&
|
|
224
|
+
taskPermission(agent, "unmanaged-worker") === "deny" &&
|
|
225
|
+
profileNames
|
|
226
|
+
.filter((profile) => !profile.startsWith("orchestrator"))
|
|
227
|
+
.every((profile) => taskPermission(agent, profile) === "allow")
|
|
228
|
+
: taskPermission(agent, "unmanaged-worker") === "deny" &&
|
|
229
|
+
agent.tools?.task === false;
|
|
230
|
+
const readOnly = !["researcher", "reviewer", "orchestrator"].includes(role) ||
|
|
231
|
+
(agent.tools?.write !== true &&
|
|
232
|
+
agent.tools?.edit !== true &&
|
|
233
|
+
agent.tools?.bash === false &&
|
|
234
|
+
agent.permission
|
|
235
|
+
?.filter((rule) => (rule.permission === "edit" || rule.permission === "*") &&
|
|
236
|
+
rule.pattern === "*")
|
|
237
|
+
.at(-1)?.action === "deny");
|
|
238
|
+
report(Boolean(result.ok &&
|
|
239
|
+
`${agent.model?.providerID}/${agent.model?.modelID}` ===
|
|
240
|
+
model &&
|
|
241
|
+
resolvedEffort === expectedEffort &&
|
|
242
|
+
delegation &&
|
|
243
|
+
readOnly), `OpenCode ${name}: native model, effort and delegation/write tools resolved.`);
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
report(false, `OpenCode ${name}: native discovery/capabilities could not be verified.`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
const auth = external(binary, target, ["auth", "list"]);
|
|
250
|
+
// The native auth list exposes provider names and counts, never key values.
|
|
251
|
+
const provider = route === "gpt"
|
|
252
|
+
? /\bOpenAI\b|\bOPENAI_API_KEY\b/i
|
|
253
|
+
: /\bAnthropic\b|\bANTHROPIC_API_KEY\b/i;
|
|
254
|
+
report(auth.ok && provider.test(auth.output), `OpenCode ${route} provider has a local authentication entry (remote acceptance is not tested).`);
|
|
255
|
+
log("[INFO] Behavioral: OpenCode task scopes, at most four workers, plan approval and independent review remain instructions; model and tool execution were not exercised.");
|
|
256
|
+
log(`[INFO] Scope: OpenCode readiness applies to explicit --agent ${selection.archetypes.length === 7 ? (route === "gpt" ? "orchestrator" : "orchestrator-claude") : (selection.primary ?? selection.archetypes[0]) + (route === "claude" ? "-claude" : "")}; ambient default_agent overrides are not inspected because raw configuration can contain credentials.`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
const auth = external(binary, target, ["auth", "status", "--json"]);
|
|
260
|
+
try {
|
|
261
|
+
const status = json(auth.output);
|
|
262
|
+
report(auth.ok && status.loggedIn === true, "Claude Code authentication status; no credential contents are displayed.");
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
report(false, "Claude Code authentication status is unverified; run claude auth status.");
|
|
266
|
+
}
|
|
267
|
+
report(versionNumber === "2.1.265", "Claude Code adapter capability baseline is 2.1.265.");
|
|
268
|
+
try {
|
|
269
|
+
const probe = await claudeProbe(binary, target);
|
|
270
|
+
for (const role of selection.archetypes) {
|
|
271
|
+
const binding = getBinding(loaded.catalog, role, "claude-code");
|
|
272
|
+
const id = loaded.catalog.models[binding.model].harnesses["claude-code"];
|
|
273
|
+
const agent = probe.agents.find((candidate) => candidate.name === role);
|
|
274
|
+
report(agent?.model === id, `Claude Code ${role}: project profile discovered on ${id}.`);
|
|
275
|
+
const capability = probe.models.find((model) => model.resolvedModel?.replace(/\[1m\]$/, "") === id);
|
|
276
|
+
report(Boolean(capability &&
|
|
277
|
+
(binding.effortSupport === "unsupported"
|
|
278
|
+
? !capability.supportsEffort
|
|
279
|
+
: binding.supportedEfforts.every((effort) => capability.supportedEffortLevels?.includes(effort)))), `Claude Code ${id}: account model/effort capability reported by the CLI.`);
|
|
280
|
+
}
|
|
281
|
+
const mainRole = selection.archetypes.length === 7
|
|
282
|
+
? "orchestrator"
|
|
283
|
+
: (selection.primary ?? selection.archetypes[0]);
|
|
284
|
+
const main = getBinding(loaded.catalog, mainRole, "claude-code");
|
|
285
|
+
report(probe.model?.replace(/\[1m\]$/, "") ===
|
|
286
|
+
loaded.catalog.models[main.model].harnesses["claude-code"], `Claude Code main ${mainRole} model resolved in project-only settings mode.`);
|
|
287
|
+
for (const name of ["ai-kit-task-routing", "ai-kit-model-calibration"])
|
|
288
|
+
report(probe.commands.some((command) => command.name === name), `Claude Code native skill ${name} discovered.`);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
report(false, "Claude Code native project discovery/capabilities could not be verified without a model call.");
|
|
292
|
+
}
|
|
293
|
+
log("[INFO] Behavioral: Claude verification uses project settings with hooks/MCP disabled; actual tool execution, personal overrides, plan approval and independent review are not exercised. Run with --setting-sources project to use the verified settings scope.");
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
log(ready
|
|
297
|
+
? "[OK] Environment ready for the selected routes."
|
|
298
|
+
: "[WARN] Environment readiness is not established; see availability diagnostics above.");
|
|
299
|
+
return ready ? 0 : 4;
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type HarnessName, type RoleName, type Method } from "./catalog.js";
|
|
2
|
+
export type CommandName = "add" | "init" | "list" | "update" | "check" | "uninstall";
|
|
3
|
+
export interface RunOptions {
|
|
4
|
+
target: string;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
packageRoot?: string;
|
|
7
|
+
log?: (message: string) => void;
|
|
8
|
+
harnesses?: HarnessName[];
|
|
9
|
+
archetypes?: RoleName[];
|
|
10
|
+
method?: Method;
|
|
11
|
+
primary?: RoleName;
|
|
12
|
+
route?: "gpt" | "claude";
|
|
13
|
+
}
|
|
14
|
+
export declare class AiKitError extends Error {
|
|
15
|
+
readonly exitCode: number;
|
|
16
|
+
constructor(message: string, exitCode?: number);
|
|
17
|
+
}
|
|
18
|
+
export declare function runCommand(command: CommandName, options: RunOptions): Promise<number>;
|