mirror of
https://github.com/Kaelio/ktx.git
synced 2026-07-19 11:41:02 +02:00
feat(cli): friendly missing-project status and per-project daemon state (#87)
- Block project-aware commands when ktx.yaml is absent and render a
friendly "run ktx setup" message (plain or JSON) instead of leaking
ENOENT or "Project: ..." noise.
- Make ktx status project detect the missing config and emit the same
message via a shared renderMissingProjectMessage helper.
- Move the managed Python daemon state, stdout, and stderr files out of
the shared runtime root into {projectDir}/.ktx/runtime so multiple
projects no longer share a single daemon record.
- Simplify the runtime install root to ~/.ktx/runtime on every platform
and split the daemon-specific paths into managedPythonDaemonLayout,
threading projectDir through start, stop, and stop-all paths.
This commit is contained in:
parent
6d7d90571e
commit
e28b10454a
23 changed files with 450 additions and 248 deletions
|
|
@ -280,6 +280,50 @@ describe('runKtxDoctor', () => {
|
|||
});
|
||||
});
|
||||
|
||||
it('prints a friendly message when ktx.yaml is missing at the project dir', async () => {
|
||||
const originalEnvProjectDir = process.env.KTX_PROJECT_DIR;
|
||||
process.env.KTX_PROJECT_DIR = tempDir;
|
||||
const testIo = makeIo();
|
||||
|
||||
await expect(
|
||||
runKtxDoctor(
|
||||
{ command: 'project', projectDir: tempDir, outputMode: 'plain', inputMode: 'disabled' },
|
||||
testIo.io,
|
||||
{},
|
||||
),
|
||||
).resolves.toBe(1);
|
||||
|
||||
const out = testIo.stdout();
|
||||
expect(out).toContain('KTX status');
|
||||
expect(out).toContain('No KTX project here yet.');
|
||||
expect(out).toContain('ktx setup');
|
||||
expect(out).toContain('KTX_PROJECT_DIR');
|
||||
expect(out).not.toContain('ENOENT');
|
||||
expect(testIo.stderr()).toBe('');
|
||||
|
||||
if (originalEnvProjectDir === undefined) {
|
||||
delete process.env.KTX_PROJECT_DIR;
|
||||
} else {
|
||||
process.env.KTX_PROJECT_DIR = originalEnvProjectDir;
|
||||
}
|
||||
});
|
||||
|
||||
it('emits a structured JSON error when ktx.yaml is missing and JSON output is requested', async () => {
|
||||
const testIo = makeIo();
|
||||
|
||||
await expect(
|
||||
runKtxDoctor(
|
||||
{ command: 'project', projectDir: tempDir, outputMode: 'json', inputMode: 'disabled' },
|
||||
testIo.io,
|
||||
{},
|
||||
),
|
||||
).resolves.toBe(1);
|
||||
|
||||
const parsed = JSON.parse(testIo.stdout()) as { error: string; projectDir: string };
|
||||
expect(parsed.error).toBe('missing_project');
|
||||
expect(parsed.projectDir).toBe(tempDir);
|
||||
});
|
||||
|
||||
it('runs project checks against a valid ktx.yaml', async () => {
|
||||
process.env.ANTHROPIC_API_KEY = 'test-key'; // pragma: allowlist secret
|
||||
await writeFile(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue