@kindgi/cli 0.1.4-rc.2 → 0.1.4-rc.3
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/README.md +5 -2
- package/dist/build/defaults.d.ts.map +1 -1
- package/dist/build/defaults.js +2 -1
- package/dist/build/defaults.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +10 -2
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +7 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts +54 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +471 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.js +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/providers.d.ts.map +1 -1
- package/dist/commands/providers.js +1 -1
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/run-waits.d.ts +106 -0
- package/dist/commands/run-waits.d.ts.map +1 -0
- package/dist/commands/run-waits.js +233 -0
- package/dist/commands/run-waits.js.map +1 -0
- package/dist/commands/runs.d.ts.map +1 -1
- package/dist/commands/runs.js +37 -16
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/unwired.d.ts.map +1 -1
- package/dist/commands/unwired.js +0 -5
- package/dist/commands/unwired.js.map +1 -1
- package/dist/context.d.ts +10 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -1
- package/dist/dev/bundler.d.ts.map +1 -1
- package/dist/dev/bundler.js +3 -2
- package/dist/dev/bundler.js.map +1 -1
- package/dist/dev/runtime-container.d.ts.map +1 -1
- package/dist/dev/runtime-container.js +7 -4
- package/dist/dev/runtime-container.js.map +1 -1
- package/dist/dev/runtime-image.d.ts +1 -1
- package/dist/dev/runtime-image.js +1 -1
- package/dist/dev/runtime-registry.d.ts +23 -1
- package/dist/dev/runtime-registry.d.ts.map +1 -1
- package/dist/dev/runtime-registry.js +38 -4
- package/dist/dev/runtime-registry.js.map +1 -1
- package/dist/esbuild-loader.d.ts +3 -0
- package/dist/esbuild-loader.d.ts.map +1 -0
- package/dist/esbuild-loader.js +21 -0
- package/dist/esbuild-loader.js.map +1 -0
- package/dist/init/augment-scaffolder.d.ts.map +1 -1
- package/dist/init/augment-scaffolder.js +40 -8
- package/dist/init/augment-scaffolder.js.map +1 -1
- package/dist/init/dependency-specs.d.ts +6 -0
- package/dist/init/dependency-specs.d.ts.map +1 -1
- package/dist/init/dependency-specs.js +8 -0
- package/dist/init/dependency-specs.js.map +1 -1
- package/dist/init/package-json-patcher.d.ts +24 -0
- package/dist/init/package-json-patcher.d.ts.map +1 -1
- package/dist/init/package-json-patcher.js +58 -19
- package/dist/init/package-json-patcher.js.map +1 -1
- package/dist/init/pyproject-patcher.d.ts +6 -0
- package/dist/init/pyproject-patcher.d.ts.map +1 -1
- package/dist/init/pyproject-patcher.js +15 -0
- package/dist/init/pyproject-patcher.js.map +1 -1
- package/dist/init/python-augment.d.ts +5 -1
- package/dist/init/python-augment.d.ts.map +1 -1
- package/dist/init/python-augment.js +28 -6
- package/dist/init/python-augment.js.map +1 -1
- package/dist/init/template-files.d.ts +2 -0
- package/dist/init/template-files.d.ts.map +1 -1
- package/dist/init/template-files.js +2 -1
- package/dist/init/template-files.js.map +1 -1
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +18 -2
- package/dist/main.js.map +1 -1
- package/dist/package-manager.d.ts +34 -3
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +83 -4
- package/dist/package-manager.js.map +1 -1
- package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-getting-started/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +1 -1
- package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +1 -1
- package/dist/templates/minimal/package.json.tmpl +3 -0
- package/dist/templates/minimal/pnpm-workspace.yaml +2 -1
- package/dist/templates/python/pyproject.toml.tmpl +1 -1
- package/dist/templates/sample/package.json.tmpl +3 -0
- package/dist/templates/sample/pnpm-workspace.yaml +2 -1
- package/package.json +11 -11
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
/**
|
|
4
|
+
* `kindgi doctor`: whether this machine and this folder are ready to run
|
|
5
|
+
* Kindgi, each check with what it found and, when it fails, the exact fix
|
|
6
|
+
* (T130). A coding agent reads `--json` and fixes what fails; a person
|
|
7
|
+
* reads the ✓/✗ lines. Any failed check exits 1.
|
|
8
|
+
*
|
|
9
|
+
* The checks, in order: Node, npm, Python and uv (a Python project's),
|
|
10
|
+
* Docker, pull access to the pinned runtime image, the project, its
|
|
11
|
+
* dependencies, a model key in its env files (never its value), the
|
|
12
|
+
* runtime `kindgi dev` runs, and a provider registered there. Outside a
|
|
13
|
+
* project the project's checks are skipped, saying why; a check that
|
|
14
|
+
* needs another (the registry needs Docker) is skipped when that one
|
|
15
|
+
* fails. `skip` is never a failure.
|
|
16
|
+
*
|
|
17
|
+
* Under `kindgi-cli` (the PyPI build, `KINDGI_CLI_INSTALL=pypi`), Node is
|
|
18
|
+
* the one the wheel brings and npm isn't needed, so neither is a failure,
|
|
19
|
+
* and the fixes say `uv run kindgi …` (or `uvx --from kindgi-cli kindgi …`
|
|
20
|
+
* outside a project), not npx.
|
|
21
|
+
*/
|
|
22
|
+
import { spawn } from 'node:child_process';
|
|
23
|
+
import { readFile, readdir, stat } from 'node:fs/promises';
|
|
24
|
+
import { dirname, join, resolve } from 'node:path';
|
|
25
|
+
import { findKindgiConfig } from '@kindgi/handler-runtime';
|
|
26
|
+
import { LOCAL_ENV_NAME, displayEnvPath, readPackEnv } from '@kindgi/secrets-dotenv';
|
|
27
|
+
import { docker } from '../dev/runtime-container.js';
|
|
28
|
+
import { DEFAULT_RUNTIME_IMAGE, registryOf } from '../dev/runtime-image.js';
|
|
29
|
+
import { checkDocker, checkImageAccess, credentialHelperHint } from '../dev/runtime-registry.js';
|
|
30
|
+
import { renderJson } from '../output.js';
|
|
31
|
+
import { binCommand, cliInstall, defaultDetectIo, publishedCliSpec, pythonBinRunner, usablePackageManager, } from '../package-manager.js';
|
|
32
|
+
import { loadProviderPresets } from '../providers/preset-loader.js';
|
|
33
|
+
import { CLI_VERSION } from '../version-info.js';
|
|
34
|
+
/**
|
|
35
|
+
* The provider `kindgi dev` falls back to, with canned replies
|
|
36
|
+
* (`DEV_ECHO_PROVIDER_ID` in `@kindgi/dev-echo-provider`): not a model.
|
|
37
|
+
*/
|
|
38
|
+
const DEV_ECHO_PROVIDER_ID = 'dev-echo';
|
|
39
|
+
/** The Node the CLI needs (`engines.node` in its package.json). */
|
|
40
|
+
export const MIN_NODE = '22.12.0';
|
|
41
|
+
/** The Python a Python project needs (`requires-python` in its pyproject.toml). */
|
|
42
|
+
export const MIN_PYTHON = '3.11.0';
|
|
43
|
+
const TITLES = {
|
|
44
|
+
node: 'Node.js',
|
|
45
|
+
npm: 'npm',
|
|
46
|
+
python: 'Python',
|
|
47
|
+
uv: 'uv',
|
|
48
|
+
docker: 'Docker',
|
|
49
|
+
registry: 'Runtime image',
|
|
50
|
+
project: 'Project',
|
|
51
|
+
dependencies: 'Dependencies',
|
|
52
|
+
'model-key': 'Model key',
|
|
53
|
+
runtime: 'Runtime',
|
|
54
|
+
provider: 'Provider',
|
|
55
|
+
};
|
|
56
|
+
export const doctorCommand = {
|
|
57
|
+
kind: 'leaf',
|
|
58
|
+
name: 'doctor',
|
|
59
|
+
description: 'Check this machine and folder are ready to run Kindgi: Node, Docker, access to the runtime image, the project, its model key, the runtime and a provider. Each check says what it found and, when it fails, the exact fix. Exits 1 when any check fails; --json for a coding agent.',
|
|
60
|
+
usage: 'kindgi doctor [--path=<dir>] [--json]',
|
|
61
|
+
optionSpec: {
|
|
62
|
+
path: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'The folder to check. Default: the current directory.',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
run: async (ctx) => {
|
|
68
|
+
const dir = resolve(ctx.cwd, typeof ctx.options.path === 'string' ? ctx.options.path : '.');
|
|
69
|
+
const report = await runDoctor(ctx, dir);
|
|
70
|
+
const exitCode = report.ok ? 0 : 1;
|
|
71
|
+
if (ctx.globals.formatRequested) {
|
|
72
|
+
return { kind: 'ok', rendered: renderJson(report, ctx.globals.format), exitCode };
|
|
73
|
+
}
|
|
74
|
+
return { kind: 'ok', rendered: { stdout: doctorText(report), stderr: '' }, exitCode };
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
/** Every check, in order. */
|
|
78
|
+
export async function runDoctor(ctx, dir) {
|
|
79
|
+
const seam = ctx.doctorSeam ?? {};
|
|
80
|
+
const tool = seam.tool ?? runTool;
|
|
81
|
+
const run = seam.docker ?? docker;
|
|
82
|
+
const checks = [];
|
|
83
|
+
const config = await findKindgiConfig(dir);
|
|
84
|
+
const language = config === undefined ? undefined : config.format === 'pyproject' ? 'python' : 'node';
|
|
85
|
+
const pypi = cliInstall(ctx.env) === 'pypi';
|
|
86
|
+
const kindgi = await kindgiCommand(dir, language, pypi, tool);
|
|
87
|
+
checks.push(...(await nodeChecks(seam.nodeVersion ?? process.versions.node, tool, pypi)));
|
|
88
|
+
checks.push(...(await pythonChecks(tool, language)));
|
|
89
|
+
const dockerCheck = await checkDockerRunning(run);
|
|
90
|
+
checks.push(dockerCheck);
|
|
91
|
+
checks.push(dockerCheck.status === 'pass'
|
|
92
|
+
? await registryCheck(run, seam.image ?? DEFAULT_RUNTIME_IMAGE, kindgi)
|
|
93
|
+
: skip('registry', 'Not checked: it needs Docker running.'));
|
|
94
|
+
if (config === undefined || language === undefined) {
|
|
95
|
+
checks.push({
|
|
96
|
+
id: 'project',
|
|
97
|
+
status: 'skip',
|
|
98
|
+
message: `No Kindgi project in ${dir}: no kindgi.config.ts, and no pyproject.toml with [tool.kindgi].`,
|
|
99
|
+
fix: createProjectFix(kindgi, pypi),
|
|
100
|
+
});
|
|
101
|
+
for (const id of ['dependencies', 'model-key', 'runtime', 'provider']) {
|
|
102
|
+
checks.push(skip(id, 'Not checked: it needs a project.'));
|
|
103
|
+
}
|
|
104
|
+
return report(checks, null);
|
|
105
|
+
}
|
|
106
|
+
const rc = await readKindgirc(dir);
|
|
107
|
+
checks.push(projectCheck(dir, language, rc));
|
|
108
|
+
checks.push(await dependenciesCheck(dir, language, tool));
|
|
109
|
+
checks.push(await modelKeyCheck(dir, seam, ctx.env, kindgi));
|
|
110
|
+
const runtime = await runtimeCheck(ctx, rc, kindgi);
|
|
111
|
+
checks.push(runtime.check);
|
|
112
|
+
checks.push(runtime.check.status === 'pass' && runtime.url !== undefined && rc.token !== undefined
|
|
113
|
+
? await providerCheck(ctx, runtime.url, rc.token, kindgi)
|
|
114
|
+
: skip('provider', `Not checked: it needs the runtime running (${kindgi('dev')}).`));
|
|
115
|
+
return report(checks, { dir, language });
|
|
116
|
+
}
|
|
117
|
+
/** The report as ✓/✗ lines, each failure with its fix. */
|
|
118
|
+
export function doctorText(report) {
|
|
119
|
+
const lines = [`kindgi doctor (CLI ${report.cliVersion})`];
|
|
120
|
+
for (const check of report.checks) {
|
|
121
|
+
const mark = check.status === 'pass' ? '✓' : check.status === 'fail' ? '✗' : '–';
|
|
122
|
+
lines.push(` ${mark} ${TITLES[check.id]}: ${check.message}`);
|
|
123
|
+
if (check.fix !== undefined && check.status !== 'pass')
|
|
124
|
+
lines.push(` Fix: ${check.fix}`);
|
|
125
|
+
}
|
|
126
|
+
const failed = report.checks.filter((c) => c.status === 'fail').length;
|
|
127
|
+
lines.push(failed === 0
|
|
128
|
+
? 'Everything checked is ready.'
|
|
129
|
+
: `${failed} ${failed === 1 ? 'problem' : 'problems'} to fix.`);
|
|
130
|
+
return `${lines.join('\n')}\n`;
|
|
131
|
+
}
|
|
132
|
+
function report(checks, project) {
|
|
133
|
+
return {
|
|
134
|
+
ok: checks.every((c) => c.status !== 'fail'),
|
|
135
|
+
cliVersion: CLI_VERSION,
|
|
136
|
+
project,
|
|
137
|
+
checks,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
const pass = (id, message) => ({ id, status: 'pass', message });
|
|
141
|
+
const fail = (id, message, fix) => ({
|
|
142
|
+
id,
|
|
143
|
+
status: 'fail',
|
|
144
|
+
message,
|
|
145
|
+
fix,
|
|
146
|
+
});
|
|
147
|
+
const skip = (id, message, fix) => ({
|
|
148
|
+
id,
|
|
149
|
+
status: 'skip',
|
|
150
|
+
message,
|
|
151
|
+
...(fix !== undefined && { fix }),
|
|
152
|
+
});
|
|
153
|
+
// ---------- tools ----------
|
|
154
|
+
/** Node and npm. Under kindgi-cli, Node is the one the wheel brings and npm isn't needed. */
|
|
155
|
+
async function nodeChecks(version, tool, pypi) {
|
|
156
|
+
if (!pypi)
|
|
157
|
+
return [nodeCheck(version, false), await npmCheck(tool)];
|
|
158
|
+
return [
|
|
159
|
+
nodeCheck(version, true),
|
|
160
|
+
skip('npm', 'Not needed: this kindgi is kindgi-cli (from PyPI), for Python projects, and it brings its own Node.'),
|
|
161
|
+
];
|
|
162
|
+
}
|
|
163
|
+
/** How to start a project here: kindgi-cli makes Python packs only. */
|
|
164
|
+
function createProjectFix(kindgi, pypi) {
|
|
165
|
+
return pypi
|
|
166
|
+
? `Create one: ${kindgi('init', '<name>', '--template=python')}, then run doctor in its folder.`
|
|
167
|
+
: `Create one: ${kindgi('init', '<name>')} (TypeScript; add --template=python for Python), then run doctor in its folder.`;
|
|
168
|
+
}
|
|
169
|
+
function nodeCheck(version, pypi) {
|
|
170
|
+
return atLeast(version, MIN_NODE)
|
|
171
|
+
? pass('node', pypi ? `Node ${version}, bundled with kindgi-cli.` : `Node ${version}.`)
|
|
172
|
+
: fail('node', `Node ${version}; Kindgi needs ${MIN_NODE} or later.`, `Install Node ${MIN_NODE} or later from https://nodejs.org (or: nvm install 22).`);
|
|
173
|
+
}
|
|
174
|
+
async function npmCheck(tool) {
|
|
175
|
+
const npm = await tool('npm', ['--version']);
|
|
176
|
+
return npm.code === 0
|
|
177
|
+
? pass('npm', `npm ${npm.stdout.trim()}.`)
|
|
178
|
+
: fail('npm', "npm isn't on your PATH.", `npm comes with Node: reinstall Node ${MIN_NODE} or later from https://nodejs.org.`);
|
|
179
|
+
}
|
|
180
|
+
/** Python and uv: needed by a Python project; elsewhere, what's installed (for choosing a template). */
|
|
181
|
+
async function pythonChecks(tool, language) {
|
|
182
|
+
const python = await pythonVersion(tool);
|
|
183
|
+
const uv = await tool('uv', ['--version']);
|
|
184
|
+
const uvVersion = uv.code === 0
|
|
185
|
+
? uv.stdout
|
|
186
|
+
.trim()
|
|
187
|
+
.replace(/^uv\s+/, '')
|
|
188
|
+
.split(/\s/)[0]
|
|
189
|
+
: undefined;
|
|
190
|
+
const pythonFix = `Install Python ${MIN_PYTHON.replace(/\.0$/, '')} or later (https://www.python.org/downloads, or: uv python install 3.12).`;
|
|
191
|
+
const uvFix = 'Install uv: curl -LsSf https://astral.sh/uv/install.sh | sh (or: brew install uv).';
|
|
192
|
+
if (language !== 'python') {
|
|
193
|
+
const why = language === 'node' ? 'a TypeScript project' : 'no project yet';
|
|
194
|
+
return [
|
|
195
|
+
skip('python', `Not needed (${why}); ${python !== undefined ? `Python ${python} is installed` : "Python isn't installed"}, for a Python project (kindgi init --template=python).`),
|
|
196
|
+
skip('uv', `Not needed (${why}); ${uvVersion !== undefined ? `uv ${uvVersion} is installed` : "uv isn't installed"}, for a Python project.`),
|
|
197
|
+
];
|
|
198
|
+
}
|
|
199
|
+
return [
|
|
200
|
+
python === undefined
|
|
201
|
+
? fail('python', "Python isn't installed (python3 isn't on your PATH).", pythonFix)
|
|
202
|
+
: atLeast(python, MIN_PYTHON)
|
|
203
|
+
? pass('python', `Python ${python}.`)
|
|
204
|
+
: fail('python', `Python ${python}; a Kindgi Python project needs 3.11 or later.`, pythonFix),
|
|
205
|
+
uvVersion !== undefined
|
|
206
|
+
? pass('uv', `uv ${uvVersion}.`)
|
|
207
|
+
: fail('uv', "uv isn't installed: a Kindgi Python project installs and runs with it.", uvFix),
|
|
208
|
+
];
|
|
209
|
+
}
|
|
210
|
+
async function pythonVersion(tool) {
|
|
211
|
+
for (const command of ['python3', 'python']) {
|
|
212
|
+
const got = await tool(command, ['--version']);
|
|
213
|
+
const version = /Python\s+(\d+\.\d+\.\d+)/.exec(`${got.stdout} ${got.stderr}`)?.[1];
|
|
214
|
+
if (got.code === 0 && version !== undefined)
|
|
215
|
+
return version;
|
|
216
|
+
}
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
// ---------- Docker and the runtime image ----------
|
|
220
|
+
async function checkDockerRunning(run) {
|
|
221
|
+
const ready = await checkDocker(run);
|
|
222
|
+
if (ready.kind === 'ok')
|
|
223
|
+
return pass('docker', 'Docker is running.');
|
|
224
|
+
const [message = ready.message, ...rest] = ready.message.split('\n');
|
|
225
|
+
return fail('docker', message, rest.map((l) => l.trim()).join(' '));
|
|
226
|
+
}
|
|
227
|
+
async function registryCheck(run, image, kindgi) {
|
|
228
|
+
const access = await checkImageAccess(run, image);
|
|
229
|
+
const host = registryOf(image);
|
|
230
|
+
const login = `${kindgi('auth', 'registry', '--username', '<robot name>', '--password-stdin')} (the robot name and token come from access.kindgi.com; pipe the token in, never paste it into a chat)`;
|
|
231
|
+
switch (access.kind) {
|
|
232
|
+
case 'ok':
|
|
233
|
+
return pass('registry', `Docker can pull the runtime image (${image}).`);
|
|
234
|
+
case 'no-access':
|
|
235
|
+
return fail('registry', `Docker can't pull the runtime image from ${host}: ${firstLine(access.detail)}`, `Log Docker in with your pull token: ${login}. Then run doctor again.`);
|
|
236
|
+
case 'not-found':
|
|
237
|
+
return access.maybeNoAccess === true
|
|
238
|
+
? fail('registry', `Docker has no access to the runtime image on ${host}, or it isn't there: docker manifest inspect can't tell them apart (${firstLine(access.detail)}).`, `If you haven't logged Docker in yet: ${login}. Otherwise check this machine can reach ${host}, then run doctor again.`)
|
|
239
|
+
: fail('registry', `Couldn't find the runtime image on ${host}: ${firstLine(access.detail)}`, `Check this machine can reach ${host} (the network, a proxy or a firewall), then run doctor again.`);
|
|
240
|
+
case 'credential-helper':
|
|
241
|
+
return fail('registry', `Docker couldn't run its credential helper${access.helper !== undefined ? ` (docker-credential-${access.helper})` : ''}: ${firstLine(access.detail)}`, credentialHelperHint(access.helper));
|
|
242
|
+
case 'no-tool':
|
|
243
|
+
return fail('registry', "Couldn't check the runtime image: neither docker buildx nor docker manifest is available.", 'Docker Desktop includes buildx; on Linux, install the docker-buildx-plugin package.');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/** `.kindgirc.json`, which `kindgi dev` writes: the runtime's URL and token. */
|
|
247
|
+
async function readKindgirc(dir) {
|
|
248
|
+
let raw;
|
|
249
|
+
try {
|
|
250
|
+
raw = await readFile(join(dir, '.kindgirc.json'), 'utf8');
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
return { exists: false };
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
const parsed = JSON.parse(raw);
|
|
257
|
+
return {
|
|
258
|
+
exists: true,
|
|
259
|
+
...(typeof parsed.apiUrl === 'string' && parsed.apiUrl !== '' && { apiUrl: parsed.apiUrl }),
|
|
260
|
+
...(typeof parsed.token === 'string' && parsed.token !== '' && { token: parsed.token }),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
return { exists: true, malformed: err.message };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
function projectCheck(dir, language, rc) {
|
|
268
|
+
const kind = language === 'python'
|
|
269
|
+
? 'A Python project (pyproject.toml)'
|
|
270
|
+
: 'A TypeScript project (kindgi.config.ts)';
|
|
271
|
+
if (rc.malformed !== undefined) {
|
|
272
|
+
return fail('project', `${kind} in ${dir}, but its .kindgirc.json isn't valid JSON (${rc.malformed}).`, 'Delete .kindgirc.json: kindgi dev writes a new one on its next start.');
|
|
273
|
+
}
|
|
274
|
+
return pass('project', `${kind} in ${dir}; ${rc.exists ? 'kindgi dev has run here (.kindgirc.json)' : "kindgi dev hasn't run here yet"}.`);
|
|
275
|
+
}
|
|
276
|
+
async function dependenciesCheck(dir, language, tool) {
|
|
277
|
+
if (language === 'python') {
|
|
278
|
+
return (await pythonPackageInstalled(dir))
|
|
279
|
+
? pass('dependencies', 'The kindgi package is installed in .venv.')
|
|
280
|
+
: fail('dependencies', "The kindgi package isn't installed in this project's .venv.", 'Install the dependencies: uv sync');
|
|
281
|
+
}
|
|
282
|
+
if (await nodePackageInstalled(dir, '@kindgi/sdk')) {
|
|
283
|
+
return pass('dependencies', '@kindgi/sdk is installed.');
|
|
284
|
+
}
|
|
285
|
+
const { pm, declared } = await installedPackageManager(dir, tool);
|
|
286
|
+
return fail('dependencies', "@kindgi/sdk isn't installed: the project's dependencies aren't.", `Install them: ${pm} install${declared !== undefined ? ` (the project names ${declared}, which isn't installed here)` : ''}`);
|
|
287
|
+
}
|
|
288
|
+
/** `node_modules/<name>` here or in a folder above (a workspace hoists it). */
|
|
289
|
+
async function nodePackageInstalled(dir, name) {
|
|
290
|
+
let current = dir;
|
|
291
|
+
for (;;) {
|
|
292
|
+
if (await isDirectory(join(current, 'node_modules', name)))
|
|
293
|
+
return true;
|
|
294
|
+
const parent = dirname(current);
|
|
295
|
+
if (parent === current)
|
|
296
|
+
return false;
|
|
297
|
+
current = parent;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/** `kindgi` in `.venv`'s site-packages (`lib/python3.x/` on macOS and Linux, `Lib/` on Windows). */
|
|
301
|
+
async function pythonPackageInstalled(dir) {
|
|
302
|
+
const venv = join(dir, '.venv');
|
|
303
|
+
if (await isDirectory(join(venv, 'Lib', 'site-packages', 'kindgi')))
|
|
304
|
+
return true;
|
|
305
|
+
let versions;
|
|
306
|
+
try {
|
|
307
|
+
versions = (await readdir(join(venv, 'lib'))).filter((n) => n.startsWith('python'));
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
for (const version of versions) {
|
|
313
|
+
if (await isDirectory(join(venv, 'lib', version, 'site-packages', 'kindgi')))
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
/** A model key the presets name, set in the project's env files. Its value is never read out. */
|
|
319
|
+
async function modelKeyCheck(dir, seam, hostEnv, kindgi) {
|
|
320
|
+
const presets = await (seam.presets ?? (() => loadProviderPresets()))();
|
|
321
|
+
const names = [
|
|
322
|
+
...new Set(Object.values(presets).flatMap((p) => (p.secret !== undefined ? [p.secret] : []))),
|
|
323
|
+
];
|
|
324
|
+
const env = await readPackEnv({ packDir: dir, envName: LOCAL_ENV_NAME });
|
|
325
|
+
const files = env.files.read.map((f) => displayEnvPath(dir, f)).join(' or ');
|
|
326
|
+
const found = names.find((name) => (env.values[name] ?? '').trim() !== '');
|
|
327
|
+
if (found !== undefined) {
|
|
328
|
+
const origin = env.origin[found];
|
|
329
|
+
return pass('model-key', `${found} is set${origin !== undefined ? ` in ${displayEnvPath(dir, origin)}` : ''}.`);
|
|
330
|
+
}
|
|
331
|
+
const inShell = names.find((name) => (hostEnv[name] ?? '').trim() !== '');
|
|
332
|
+
const want = names[0] ?? 'ANTHROPIC_API_KEY';
|
|
333
|
+
return fail('model-key', `No model key in ${files} (looked for ${names.join(', ')})${inShell !== undefined ? `; ${inShell} is set in your shell, but kindgi dev reads keys from the project's env files` : ''}.`, `With kindgi dev running: ${kindgi('secrets', 'set', want, '--env=local', '--scope=tenant')} (it prompts without echoing; or pipe it in with --from-stdin). Never paste a key into a chat.`);
|
|
334
|
+
}
|
|
335
|
+
// ---------- the runtime ----------
|
|
336
|
+
async function runtimeCheck(ctx, rc, kindgi) {
|
|
337
|
+
const start = `Start it: ${kindgi('dev')} (it keeps running; stop it with Ctrl+C).`;
|
|
338
|
+
const restart = `Restart kindgi dev (Ctrl+C, then ${kindgi('dev')})`;
|
|
339
|
+
if (rc.apiUrl === undefined) {
|
|
340
|
+
return {
|
|
341
|
+
check: skip('runtime', "Not running: kindgi dev hasn't run here yet.", start),
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
const url = `${rc.apiUrl.replace(/\/+$/, '')}/health`;
|
|
345
|
+
try {
|
|
346
|
+
const res = await ctx.fetch(url, { method: 'GET', signal: AbortSignal.timeout(5000) });
|
|
347
|
+
if (res.ok)
|
|
348
|
+
return { check: pass('runtime', `The runtime answers at ${rc.apiUrl}.`), url: rc.apiUrl };
|
|
349
|
+
return {
|
|
350
|
+
check: fail('runtime', `Something answers at ${rc.apiUrl}, but not as a healthy Kindgi runtime (HTTP ${res.status}).`, `${restart}; if another program holds that port, kindgi dev picks a free one.`),
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
if (isTimeout(err)) {
|
|
355
|
+
return {
|
|
356
|
+
check: fail('runtime', `Something holds ${rc.apiUrl} but didn't answer within 5 s.`, `${restart}.`),
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
check: skip('runtime', `Not running: nothing answers at ${rc.apiUrl}.`, start),
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
async function providerCheck(ctx, apiUrl, token, kindgi) {
|
|
365
|
+
try {
|
|
366
|
+
const page = await ctx.clientFor(apiUrl, token).providers.list();
|
|
367
|
+
const ids = page.data.map((p) => p.id ?? '?');
|
|
368
|
+
const models = ids.filter((id) => id !== DEV_ECHO_PROVIDER_ID);
|
|
369
|
+
const register = `Register one: ${kindgi('providers', 'register', '--preset=anthropic')} (its key must be set first; see Model key).`;
|
|
370
|
+
if (models.length > 0) {
|
|
371
|
+
return pass('provider', `${models.length === 1 ? 'A provider is' : `${models.length} providers are`} registered: ${models.join(', ')}.`);
|
|
372
|
+
}
|
|
373
|
+
return ids.length > 0
|
|
374
|
+
? fail('provider', `Only ${DEV_ECHO_PROVIDER_ID} is registered: agents get its canned replies, not a model's.`, register)
|
|
375
|
+
: fail('provider', 'No provider is registered, so an agent has no model to call.', register);
|
|
376
|
+
}
|
|
377
|
+
catch (err) {
|
|
378
|
+
return fail('provider', `Couldn't list the providers: ${err.message}`, 'Run doctor again once kindgi dev has finished starting; if it persists, restart kindgi dev.');
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* In a TypeScript project, its own CLI (`pnpm exec kindgi …`,
|
|
383
|
+
* `npx --no kindgi …`); in a Python project or outside one, the
|
|
384
|
+
* published CLI of this version through npx.
|
|
385
|
+
*/
|
|
386
|
+
async function kindgiCommand(dir, language, pypi, tool) {
|
|
387
|
+
if (pypi) {
|
|
388
|
+
// The PyPI build runs from the project's own environment; outside one, uvx.
|
|
389
|
+
if (language === undefined) {
|
|
390
|
+
return (...args) => ['uvx', '--from', 'kindgi-cli', 'kindgi', ...args].join(' ');
|
|
391
|
+
}
|
|
392
|
+
const runner = await pythonBinRunner(dir, { KINDGI_CLI_INSTALL: 'pypi' });
|
|
393
|
+
return (...args) => {
|
|
394
|
+
const c = binCommand(runner, 'kindgi', args);
|
|
395
|
+
return [c.command, ...c.args].join(' ');
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
if (language === 'node') {
|
|
399
|
+
const runner = (await installedPackageManager(dir, tool)).pm;
|
|
400
|
+
return (...args) => {
|
|
401
|
+
const c = binCommand(runner, 'kindgi', args);
|
|
402
|
+
return [c.command, ...c.args].join(' ');
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
const spec = publishedCliSpec(CLI_VERSION);
|
|
406
|
+
return (...args) => ['npx', spec, ...args].join(' ');
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* The package manager that runs here (`usablePackageManager`), asking
|
|
410
|
+
* through doctor's tool seam whether a declared one is installed.
|
|
411
|
+
*/
|
|
412
|
+
function installedPackageManager(dir, tool) {
|
|
413
|
+
return usablePackageManager(dir, {
|
|
414
|
+
...defaultDetectIo,
|
|
415
|
+
runs: async (pm) => (await tool(pm, ['--version'])).code === 0,
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/** Run a tool to completion; `code: null` when it isn't installed. Gives up after 15 s. */
|
|
419
|
+
function runTool(command, args) {
|
|
420
|
+
return new Promise((done) => {
|
|
421
|
+
let stdout = '';
|
|
422
|
+
let stderr = '';
|
|
423
|
+
const child = spawn(command, [...args], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
424
|
+
const timer = setTimeout(() => child.kill(), 15_000);
|
|
425
|
+
child.stdout?.on('data', (c) => {
|
|
426
|
+
stdout += c.toString('utf8');
|
|
427
|
+
});
|
|
428
|
+
child.stderr?.on('data', (c) => {
|
|
429
|
+
stderr += c.toString('utf8');
|
|
430
|
+
});
|
|
431
|
+
child.on('error', (err) => {
|
|
432
|
+
clearTimeout(timer);
|
|
433
|
+
done({ code: null, stdout, stderr: err.message });
|
|
434
|
+
});
|
|
435
|
+
child.on('close', (code) => {
|
|
436
|
+
clearTimeout(timer);
|
|
437
|
+
done({ code: code ?? 1, stdout, stderr });
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
/** `a` ≥ `b`, comparing `major.minor.patch`. */
|
|
442
|
+
export function atLeast(a, b) {
|
|
443
|
+
const parse = (v) => v
|
|
444
|
+
.replace(/^v/, '')
|
|
445
|
+
.split(/[.-]/)
|
|
446
|
+
.slice(0, 3)
|
|
447
|
+
.map((n) => Number.parseInt(n, 10) || 0);
|
|
448
|
+
const [x, y] = [parse(a), parse(b)];
|
|
449
|
+
for (let i = 0; i < 3; i += 1) {
|
|
450
|
+
const d = (x[i] ?? 0) - (y[i] ?? 0);
|
|
451
|
+
if (d !== 0)
|
|
452
|
+
return d > 0;
|
|
453
|
+
}
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
456
|
+
async function isDirectory(path) {
|
|
457
|
+
try {
|
|
458
|
+
return (await stat(path)).isDirectory();
|
|
459
|
+
}
|
|
460
|
+
catch {
|
|
461
|
+
return false;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
function firstLine(text) {
|
|
465
|
+
return text.trim().split('\n')[0] ?? '';
|
|
466
|
+
}
|
|
467
|
+
function isTimeout(err) {
|
|
468
|
+
const name = err?.name;
|
|
469
|
+
return name === 'TimeoutError' || name === 'AbortError';
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAyCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,eAAO,MAAM,aAAa,EAAE,SAAS,OAAO,EAyC3C,CAAC;AAEF,wBAAgB,WAAW,CACzB,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO/C"}
|
package/dist/commands/index.js
CHANGED
|
@@ -11,6 +11,7 @@ import { capabilitiesCommand } from './capabilities.js';
|
|
|
11
11
|
import { conversationsCommand } from './conversations.js';
|
|
12
12
|
import { deployCommand } from './deploy.js';
|
|
13
13
|
import { devCommand } from './dev.js';
|
|
14
|
+
import { doctorCommand } from './doctor.js';
|
|
14
15
|
import { envCommand } from './env.js';
|
|
15
16
|
import { evalRunsCommand } from './eval-runs.js';
|
|
16
17
|
import { evalSuitesCommand } from './eval-suites.js';
|
|
@@ -77,6 +78,7 @@ export const ROOT_COMMANDS = [
|
|
|
77
78
|
skillsCommand,
|
|
78
79
|
feedbackCommand,
|
|
79
80
|
healthCommand,
|
|
81
|
+
doctorCommand,
|
|
80
82
|
versionCommand,
|
|
81
83
|
];
|
|
82
84
|
export function findCommand(tokens) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgCpD,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,EAAE,WAgDzB,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,aAAa,QAA0C,CAAC;AAErE,eAAO,MAAM,mBAAmB,0CAA2C,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAoBhE;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC,CAkDxB;AA2XD,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAMzD"}
|
package/dist/commands/init.js
CHANGED
|
@@ -6,13 +6,14 @@ import { dirname, join, relative } from 'node:path';
|
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
import { PACK_UV_REQUIRED_VERSION } from '../build/python-image.js';
|
|
8
8
|
import { runInitAugment } from '../init/augment-scaffolder.js';
|
|
9
|
-
import { kindgiRequirementFor, resolveKindgiDependencySpecs, resolveKindgiPythonSource, } from '../init/dependency-specs.js';
|
|
9
|
+
import { kindgiCliRequirement, kindgiRequirementFor, resolveKindgiDependencySpecs, resolveKindgiPythonSource, } from '../init/dependency-specs.js';
|
|
10
10
|
import { detectInitMode } from '../init/mode-detect.js';
|
|
11
11
|
import { runInitPythonAugment } from '../init/python-augment.js';
|
|
12
12
|
import { collectTemplateFiles, substitute, templateTarget, } from '../init/template-files.js';
|
|
13
13
|
import { renderJson } from '../output.js';
|
|
14
|
-
import { binDisplay, declaredPackageManager,
|
|
14
|
+
import { binDisplay, cliInstall, declaredPackageManager, defaultDetectIo, installCommand, isPackageVersion, readPnpmVersion, usablePackageManager, } from '../package-manager.js';
|
|
15
15
|
import { resolveSdkPackageRoot } from '../sdk-package.js';
|
|
16
|
+
import { CLI_VERSION } from '../version-info.js';
|
|
16
17
|
import { syncSkills } from './skills.js';
|
|
17
18
|
/**
|
|
18
19
|
* `kindgi init <pack-name>` — scaffolds a fresh pack repo.
|
|
@@ -108,6 +109,7 @@ export async function runInit(ctx, templatesRoot, skillsRoot) {
|
|
|
108
109
|
...(skillsRoot !== undefined && { skillsRoot }),
|
|
109
110
|
...(typeof packIdRaw === 'string' && packIdRaw !== '' && { packIdOverride: packIdRaw }),
|
|
110
111
|
force: ctx.options.force === true,
|
|
112
|
+
pypi: cliInstall(ctx.env) === 'pypi',
|
|
111
113
|
});
|
|
112
114
|
}
|
|
113
115
|
if (detected.mode === 'augment') {
|
|
@@ -198,13 +200,17 @@ async function runInitFresh(ctx, templatesRoot, skillsRoot, packName, targetDir)
|
|
|
198
200
|
filesWritten.push(s);
|
|
199
201
|
// A standalone pack pins the pnpm that will install it, so the image
|
|
200
202
|
// (`kindgi build`), CI and a teammate all use that one (T196).
|
|
201
|
-
const
|
|
203
|
+
const runs = ctx.initSeam?.packageManagerRuns;
|
|
204
|
+
const detectIo = { ...defaultDetectIo, ...(runs !== undefined && { runs }) };
|
|
205
|
+
const pnpmPin = await pinStandalonePnpm(ctx, args.targetDir, detectIo);
|
|
202
206
|
// The template pins `@kindgi/sdk` + `@kindgi/cli` as `workspace:*`.
|
|
203
207
|
// Rewrite both to what resolves from here — see `dependency-specs.ts`
|
|
204
208
|
// (workspace inside the Kindgi checkout, `link:` to the checkout from
|
|
205
209
|
// anywhere else or with --link-local, the running CLI's versions once
|
|
206
210
|
// published). The pack then runs its own pinned `kindgi`.
|
|
207
|
-
|
|
211
|
+
// The manager that will install it here: the template declares pnpm,
|
|
212
|
+
// but on a machine without pnpm the project installs and runs with npm.
|
|
213
|
+
const packageManager = (await usablePackageManager(args.targetDir, detectIo)).pm;
|
|
208
214
|
const resolvedSpecs = await resolveKindgiDependencySpecs({
|
|
209
215
|
targetDir: args.targetDir,
|
|
210
216
|
packageManager,
|
|
@@ -265,9 +271,11 @@ async function runInitFresh(ctx, templatesRoot, skillsRoot, packName, targetDir)
|
|
|
265
271
|
* the pnpm `pnpm --version` gives in the new pack's folder. Inside an
|
|
266
272
|
* existing project, the project's own setup governs: nothing is written.
|
|
267
273
|
*/
|
|
268
|
-
async function pinStandalonePnpm(ctx, packDir) {
|
|
274
|
+
async function pinStandalonePnpm(ctx, packDir, io) {
|
|
269
275
|
if ((await declaredPackageManager(dirname(packDir))) !== undefined)
|
|
270
276
|
return { kind: 'inside' };
|
|
277
|
+
if (io.runs !== undefined && !(await io.runs('pnpm')))
|
|
278
|
+
return { kind: 'not-installed' };
|
|
271
279
|
let version;
|
|
272
280
|
try {
|
|
273
281
|
version = await (ctx.initSeam?.pnpmVersion ?? readPnpmVersion)(packDir);
|
|
@@ -294,6 +302,7 @@ async function runInitPython(ctx, args, templateDir, skillsRoot) {
|
|
|
294
302
|
const source = await resolveKindgiPythonSource();
|
|
295
303
|
if (source.kind === 'error')
|
|
296
304
|
return { kind: 'error', stderr: `${source.message}\n`, exitCode: 1 };
|
|
305
|
+
const pypi = cliInstall(ctx.env) === 'pypi';
|
|
297
306
|
const block = source.kind === 'local-checkout'
|
|
298
307
|
? [
|
|
299
308
|
'',
|
|
@@ -313,6 +322,11 @@ async function runInitPython(ctx, args, templateDir, skillsRoot) {
|
|
|
313
322
|
KINDGI_REQUIREMENT: JSON.stringify(kindgiRequirementFor(source)),
|
|
314
323
|
KINDGI_PYTHON_SOURCE: block,
|
|
315
324
|
UV_REQUIRED_VERSION: PACK_UV_REQUIRED_VERSION,
|
|
325
|
+
// From the PyPI CLI, the pack lists it too: `uv run kindgi`, no Node.
|
|
326
|
+
DEV_DEPENDENCIES: [
|
|
327
|
+
'"pytest>=8"',
|
|
328
|
+
...(pypi ? [JSON.stringify(kindgiCliRequirement(CLI_VERSION))] : []),
|
|
329
|
+
].join(', '),
|
|
316
330
|
},
|
|
317
331
|
});
|
|
318
332
|
const skillsWritten = await copyClaudeSkills({
|
|
@@ -325,9 +339,9 @@ async function runInitPython(ctx, args, templateDir, skillsRoot) {
|
|
|
325
339
|
const displayPath = relative(ctx.cwd, args.targetDir) || '.';
|
|
326
340
|
const nextSteps = [
|
|
327
341
|
`cd ${displayPath}`,
|
|
328
|
-
|
|
342
|
+
`uv sync # .venv with kindgi${pypi ? ' and the kindgi CLI' : ''}`,
|
|
329
343
|
'uv run pytest',
|
|
330
|
-
`${binDisplay('path', 'kindgi', ['dev'])} # boots Kindgi locally + runs this pack with its .venv, reloading on save`,
|
|
344
|
+
`${binDisplay(pypi ? 'uv' : 'path', 'kindgi', ['dev'])} # boots Kindgi locally + runs this pack with its .venv, reloading on save`,
|
|
331
345
|
];
|
|
332
346
|
const stderr = [
|
|
333
347
|
`✓ Python pack scaffolded at ${args.targetDir}/`,
|