@pleri/olam-cli 0.1.66 → 0.1.69
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/__tests__/audit-publish-deps-contract.test.d.ts +26 -0
- package/dist/__tests__/audit-publish-deps-contract.test.d.ts.map +1 -0
- package/dist/__tests__/audit-publish-deps-contract.test.js +86 -0
- package/dist/__tests__/audit-publish-deps-contract.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +95 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +53 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/repos.d.ts +11 -0
- package/dist/commands/repos.d.ts.map +1 -0
- package/dist/commands/repos.js +92 -0
- package/dist/commands/repos.js.map +1 -0
- package/dist/image-digests.json +5 -5
- package/dist/index.js +407 -118
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +453 -172
- package/host-cp/src/listening-server-poller.mjs +141 -0
- package/host-cp/src/port-bridge-manager.mjs +290 -0
- package/host-cp/src/server.mjs +48 -94
- package/package.json +4 -2
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* audit-publish-deps-contract.test.ts — contractual regression for the fix
|
|
3
|
+
* that prevents the May-2026 release-pipeline wedge.
|
|
4
|
+
*
|
|
5
|
+
* Bug history: PR #375 added `_require('json-source-map')` to
|
|
6
|
+
* src/commands/config.ts but rewrite-publish-package-json.mjs's hand-curated
|
|
7
|
+
* PUBLISH_DEPS list never picked it up. Versions 0.1.66 / 0.1.67 / 0.1.68
|
|
8
|
+
* published to npm without json-source-map declared. host-cp Dockerfile's
|
|
9
|
+
* `npm install -g @pleri/olam-cli@latest && olam --version` crashed with
|
|
10
|
+
* `Cannot find module 'json-source-map'`. Three consecutive release runs
|
|
11
|
+
* failed; pipeline wedged because the host-cp build sat upstream of the
|
|
12
|
+
* commit-and-publish-npm step that would have shipped the fix.
|
|
13
|
+
*
|
|
14
|
+
* Pin the contract:
|
|
15
|
+
* 1. PUBLISH_DEPS must contain json-source-map.
|
|
16
|
+
* 2. EXTERNAL must contain json-source-map (esbuild can't bundle dynamic
|
|
17
|
+
* _require()'d modules; without external, the require survives in the
|
|
18
|
+
* bundle and crashes if not also installed at runtime).
|
|
19
|
+
* 3. The audit-publish-deps.mjs script exists and is wired into prepublishOnly
|
|
20
|
+
* so this drift class fails fast rather than wedging the pipeline.
|
|
21
|
+
* 4. The host-cp Dockerfile installs from a local tarball (cli.tgz), not
|
|
22
|
+
* from npm @latest — eliminates the wedge class permanently.
|
|
23
|
+
* 5. The release.yml workflow stages cli.tgz before the host-cp build.
|
|
24
|
+
*/
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=audit-publish-deps-contract.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-publish-deps-contract.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-publish-deps-contract.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* audit-publish-deps-contract.test.ts — contractual regression for the fix
|
|
3
|
+
* that prevents the May-2026 release-pipeline wedge.
|
|
4
|
+
*
|
|
5
|
+
* Bug history: PR #375 added `_require('json-source-map')` to
|
|
6
|
+
* src/commands/config.ts but rewrite-publish-package-json.mjs's hand-curated
|
|
7
|
+
* PUBLISH_DEPS list never picked it up. Versions 0.1.66 / 0.1.67 / 0.1.68
|
|
8
|
+
* published to npm without json-source-map declared. host-cp Dockerfile's
|
|
9
|
+
* `npm install -g @pleri/olam-cli@latest && olam --version` crashed with
|
|
10
|
+
* `Cannot find module 'json-source-map'`. Three consecutive release runs
|
|
11
|
+
* failed; pipeline wedged because the host-cp build sat upstream of the
|
|
12
|
+
* commit-and-publish-npm step that would have shipped the fix.
|
|
13
|
+
*
|
|
14
|
+
* Pin the contract:
|
|
15
|
+
* 1. PUBLISH_DEPS must contain json-source-map.
|
|
16
|
+
* 2. EXTERNAL must contain json-source-map (esbuild can't bundle dynamic
|
|
17
|
+
* _require()'d modules; without external, the require survives in the
|
|
18
|
+
* bundle and crashes if not also installed at runtime).
|
|
19
|
+
* 3. The audit-publish-deps.mjs script exists and is wired into prepublishOnly
|
|
20
|
+
* so this drift class fails fast rather than wedging the pipeline.
|
|
21
|
+
* 4. The host-cp Dockerfile installs from a local tarball (cli.tgz), not
|
|
22
|
+
* from npm @latest — eliminates the wedge class permanently.
|
|
23
|
+
* 5. The release.yml workflow stages cli.tgz before the host-cp build.
|
|
24
|
+
*/
|
|
25
|
+
import { describe, it, expect } from 'vitest';
|
|
26
|
+
import { readFileSync } from 'node:fs';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import { fileURLToPath } from 'node:url';
|
|
29
|
+
import { dirname } from 'node:path';
|
|
30
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
31
|
+
const __dirname = dirname(__filename);
|
|
32
|
+
const CLI_ROOT = join(__dirname, '..', '..');
|
|
33
|
+
const REPO_ROOT = join(CLI_ROOT, '..', '..');
|
|
34
|
+
describe('release pipeline wedge — invariants', () => {
|
|
35
|
+
it('PUBLISH_DEPS contains json-source-map', () => {
|
|
36
|
+
const src = readFileSync(join(CLI_ROOT, 'scripts', 'rewrite-publish-package-json.mjs'), 'utf8');
|
|
37
|
+
expect(src).toMatch(/['"]json-source-map['"]\s*:\s*['"]\^?0\.6\./);
|
|
38
|
+
});
|
|
39
|
+
it('bundle-cli.mjs marks json-source-map external (dynamic _require)', () => {
|
|
40
|
+
const src = readFileSync(join(CLI_ROOT, 'scripts', 'bundle-cli.mjs'), 'utf8');
|
|
41
|
+
// Must appear inside the EXTERNAL array literal.
|
|
42
|
+
const externalBlock = src.slice(src.indexOf('const EXTERNAL = ['));
|
|
43
|
+
expect(externalBlock).toMatch(/['"]json-source-map['"]/);
|
|
44
|
+
});
|
|
45
|
+
it('audit-publish-deps.mjs exists and is wired into prepublishOnly', () => {
|
|
46
|
+
const auditScript = readFileSync(join(CLI_ROOT, 'scripts', 'audit-publish-deps.mjs'), 'utf8');
|
|
47
|
+
expect(auditScript).toMatch(/PUBLISH_DEPS/);
|
|
48
|
+
expect(auditScript).toMatch(/EXTERNAL/);
|
|
49
|
+
const pkg = JSON.parse(readFileSync(join(CLI_ROOT, 'package.json'), 'utf8'));
|
|
50
|
+
// prepublishOnly must run audit:publish-deps before rewrite-publish-package-json.
|
|
51
|
+
expect(pkg.scripts.prepublishOnly).toMatch(/audit:publish-deps/);
|
|
52
|
+
// The script itself must exist as an npm script too.
|
|
53
|
+
expect(pkg.scripts['audit:publish-deps']).toBeDefined();
|
|
54
|
+
});
|
|
55
|
+
it('host-cp Dockerfile installs from local cli.tgz, not npm @latest', () => {
|
|
56
|
+
const dockerfile = readFileSync(join(REPO_ROOT, 'packages', 'host-cp', 'Dockerfile'), 'utf8');
|
|
57
|
+
// Must NOT pull from npm @latest — that's the wedge.
|
|
58
|
+
// Match only ACTUAL run-shape lines (npm install at line start or after
|
|
59
|
+
// backslash-continuation), not the comment block that documents the
|
|
60
|
+
// historical bug.
|
|
61
|
+
const runLines = dockerfile
|
|
62
|
+
.split('\n')
|
|
63
|
+
.filter((l) => !l.trim().startsWith('#'))
|
|
64
|
+
.join('\n');
|
|
65
|
+
expect(runLines).not.toMatch(/npm install -g @pleri\/olam-cli@latest/);
|
|
66
|
+
// Must install from the staged tarball.
|
|
67
|
+
expect(dockerfile).toMatch(/COPY cli\.tgz/);
|
|
68
|
+
expect(dockerfile).toMatch(/npm install -g \/tmp\/olam-cli\.tgz/);
|
|
69
|
+
});
|
|
70
|
+
it('release.yml stages cli.tgz before host-cp docker build', () => {
|
|
71
|
+
const workflow = readFileSync(join(REPO_ROOT, '.github', 'workflows', 'release.yml'), 'utf8');
|
|
72
|
+
expect(workflow).toMatch(/scripts\/ci\/stage-host-cp-cli\.sh/);
|
|
73
|
+
// Order matters: stage-host-cp-cli.sh must appear BEFORE the
|
|
74
|
+
// docker/build-push-action@v6 invocation in publish-host-cp.
|
|
75
|
+
const publishHostCpBlock = workflow.slice(workflow.indexOf('publish-host-cp:'));
|
|
76
|
+
const stageIdx = publishHostCpBlock.indexOf('stage-host-cp-cli.sh');
|
|
77
|
+
const buildIdx = publishHostCpBlock.indexOf('docker/build-push-action');
|
|
78
|
+
expect(stageIdx).toBeGreaterThan(0);
|
|
79
|
+
expect(buildIdx).toBeGreaterThan(stageIdx);
|
|
80
|
+
});
|
|
81
|
+
it('ci.yml audit job runs audit:publish-deps', () => {
|
|
82
|
+
const ci = readFileSync(join(REPO_ROOT, '.github', 'workflows', 'ci.yml'), 'utf8');
|
|
83
|
+
expect(ci).toMatch(/audit:publish-deps/);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=audit-publish-deps-contract.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-publish-deps-contract.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-publish-deps-contract.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as os from 'node:os';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { registerConfig } from '../commands/config.js';
|
|
7
|
+
const VALID_CONFIG = JSON.stringify({
|
|
8
|
+
schemaVersion: 1,
|
|
9
|
+
repos: [
|
|
10
|
+
{
|
|
11
|
+
name: 'atlas-core',
|
|
12
|
+
path: '/home/ernest/code/atlas-core',
|
|
13
|
+
addedAt: 1715000000000,
|
|
14
|
+
updatedAt: 1715000000000,
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
runbooks: [],
|
|
18
|
+
}, null, 2);
|
|
19
|
+
const INVALID_CONFIG_BAD_VERSION = JSON.stringify({ schemaVersion: 2, repos: [], runbooks: [] }, null, 2);
|
|
20
|
+
const CORRUPT_JSON = '{ this is not valid json !!';
|
|
21
|
+
function buildProgram() {
|
|
22
|
+
const program = new Command();
|
|
23
|
+
program.name('olam').exitOverride();
|
|
24
|
+
registerConfig(program);
|
|
25
|
+
return program;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Invoke `olam config validate <path>` via the in-process commander program.
|
|
29
|
+
* Captures stderr writes and the exit code from process.exit calls.
|
|
30
|
+
*/
|
|
31
|
+
function invokeValidate(configPath) {
|
|
32
|
+
const stderrLines = [];
|
|
33
|
+
const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk) => {
|
|
34
|
+
stderrLines.push(String(chunk));
|
|
35
|
+
return true;
|
|
36
|
+
});
|
|
37
|
+
let exitCode = 0;
|
|
38
|
+
const exitSpy = vi.spyOn(process, 'exit').mockImplementation((code) => {
|
|
39
|
+
exitCode = typeof code === 'number' ? code : 0;
|
|
40
|
+
throw new Error(`process.exit(${code})`);
|
|
41
|
+
});
|
|
42
|
+
try {
|
|
43
|
+
buildProgram().parse(['node', 'olam', 'config', 'validate', configPath]);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// process.exit throws our sentinel — that's expected
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
stderrSpy.mockRestore();
|
|
50
|
+
exitSpy.mockRestore();
|
|
51
|
+
}
|
|
52
|
+
return { exitCode, stderrOutput: stderrLines.join('') };
|
|
53
|
+
}
|
|
54
|
+
describe('olam config validate', () => {
|
|
55
|
+
let tmpDir;
|
|
56
|
+
let configPath;
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'olam-config-test-'));
|
|
59
|
+
configPath = path.join(tmpDir, 'config.json');
|
|
60
|
+
});
|
|
61
|
+
afterEach(() => {
|
|
62
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
63
|
+
});
|
|
64
|
+
it('exits 0 on a valid config file', () => {
|
|
65
|
+
fs.writeFileSync(configPath, VALID_CONFIG);
|
|
66
|
+
const { exitCode } = invokeValidate(configPath);
|
|
67
|
+
expect(exitCode).toBe(0);
|
|
68
|
+
});
|
|
69
|
+
it('exits 1 when file is missing', () => {
|
|
70
|
+
const missingPath = path.join(tmpDir, 'nonexistent.json');
|
|
71
|
+
const { exitCode, stderrOutput } = invokeValidate(missingPath);
|
|
72
|
+
expect(exitCode).toBe(1);
|
|
73
|
+
expect(stderrOutput).toContain('not found');
|
|
74
|
+
});
|
|
75
|
+
it('exits 1 with Line N: prefix on an invalid config', () => {
|
|
76
|
+
fs.writeFileSync(configPath, INVALID_CONFIG_BAD_VERSION);
|
|
77
|
+
const { exitCode, stderrOutput } = invokeValidate(configPath);
|
|
78
|
+
expect(exitCode).toBe(1);
|
|
79
|
+
expect(stderrOutput).toMatch(/Line \d+:/);
|
|
80
|
+
});
|
|
81
|
+
it('exits 1 on corrupt JSON', () => {
|
|
82
|
+
fs.writeFileSync(configPath, CORRUPT_JSON);
|
|
83
|
+
const { exitCode, stderrOutput } = invokeValidate(configPath);
|
|
84
|
+
expect(exitCode).toBe(1);
|
|
85
|
+
expect(stderrOutput).toContain('invalid JSON');
|
|
86
|
+
});
|
|
87
|
+
it('attributes line numbers via json-source-map for /schemaVersion', () => {
|
|
88
|
+
fs.writeFileSync(configPath, INVALID_CONFIG_BAD_VERSION);
|
|
89
|
+
const { exitCode, stderrOutput } = invokeValidate(configPath);
|
|
90
|
+
expect(exitCode).toBe(1);
|
|
91
|
+
// schemaVersion is on line 2 in the pretty-printed JSON above
|
|
92
|
+
expect(stderrOutput).toMatch(/Line 2: \/schemaVersion:/);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiDrD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { GlobalConfigSchema } from '@olam/core/src/global-config/index.js';
|
|
4
|
+
import { globalConfigPath } from '@olam/core/src/global-config/store.js';
|
|
5
|
+
const _require = createRequire(import.meta.url);
|
|
6
|
+
const { parse: parseWithMap } = _require('json-source-map');
|
|
7
|
+
export function registerConfig(program) {
|
|
8
|
+
const config = program.command('config').description('Manage global olam configuration');
|
|
9
|
+
config
|
|
10
|
+
.command('validate [path]')
|
|
11
|
+
.description('Validate ~/.olam/config.json (or a custom path) against the schema')
|
|
12
|
+
.action((filePath) => {
|
|
13
|
+
const resolvedPath = filePath ?? globalConfigPath();
|
|
14
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
15
|
+
process.stderr.write(`config file not found: ${resolvedPath}\n`);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
let raw;
|
|
19
|
+
try {
|
|
20
|
+
raw = fs.readFileSync(resolvedPath, 'utf-8');
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
24
|
+
process.stderr.write(`cannot read ${resolvedPath}: ${msg}\n`);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
let parsed;
|
|
28
|
+
let pointers;
|
|
29
|
+
try {
|
|
30
|
+
const result = parseWithMap(raw);
|
|
31
|
+
parsed = result.data;
|
|
32
|
+
pointers = result.pointers;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
36
|
+
process.stderr.write(`${resolvedPath}: invalid JSON — ${msg}\n`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const result = GlobalConfigSchema.safeParse(parsed);
|
|
40
|
+
if (result.success) {
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
for (const issue of result.error.issues) {
|
|
44
|
+
const pointer = '/' + issue.path.join('/');
|
|
45
|
+
const entry = pointers[pointer];
|
|
46
|
+
const rawLine = entry?.value?.line ?? entry?.key?.line ?? -1;
|
|
47
|
+
const lineStr = rawLine >= 0 ? `Line ${rawLine + 1}: ` : '';
|
|
48
|
+
process.stderr.write(`${lineStr}${pointer}: ${issue.message}\n`);
|
|
49
|
+
}
|
|
50
|
+
process.exit(1);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam repos — manage the global repo registry (~/.olam/config.json).
|
|
3
|
+
*
|
|
4
|
+
* olam repos list
|
|
5
|
+
* olam repos add --name <n> --path <p> [--description <d>] [--default-branch <b>]
|
|
6
|
+
* olam repos remove <name>
|
|
7
|
+
* olam repos update <name> [--path <p>] [--description <d>] [--default-branch <b>]
|
|
8
|
+
*/
|
|
9
|
+
import type { Command } from 'commander';
|
|
10
|
+
export declare function registerRepos(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=repos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.d.ts","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+EpD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam repos — manage the global repo registry (~/.olam/config.json).
|
|
3
|
+
*
|
|
4
|
+
* olam repos list
|
|
5
|
+
* olam repos add --name <n> --path <p> [--description <d>] [--default-branch <b>]
|
|
6
|
+
* olam repos remove <name>
|
|
7
|
+
* olam repos update <name> [--path <p>] [--description <d>] [--default-branch <b>]
|
|
8
|
+
*/
|
|
9
|
+
import pc from 'picocolors';
|
|
10
|
+
import { listRepos, addRepo, removeRepo, updateRepo, } from '@olam/core/src/global-config/index.js';
|
|
11
|
+
import { printError, printSuccess, printHeader } from '../output.js';
|
|
12
|
+
function asMessage(err) {
|
|
13
|
+
return err instanceof Error ? err.message : String(err);
|
|
14
|
+
}
|
|
15
|
+
export function registerRepos(program) {
|
|
16
|
+
const repos = program
|
|
17
|
+
.command('repos')
|
|
18
|
+
.description('Manage the global repo registry');
|
|
19
|
+
repos
|
|
20
|
+
.command('list')
|
|
21
|
+
.description('List all registered repos')
|
|
22
|
+
.action(() => {
|
|
23
|
+
const all = listRepos();
|
|
24
|
+
if (all.length === 0) {
|
|
25
|
+
console.log(pc.dim('0 repo(s) registered. Add one with: olam repos add --name <n> --path <p>'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
printHeader(`${all.length} repo(s)`);
|
|
29
|
+
for (const r of all) {
|
|
30
|
+
const when = new Date(r.addedAt).toISOString().slice(0, 10);
|
|
31
|
+
console.log(` ${pc.bold(r.name.padEnd(24))} ${r.path.padEnd(48)} ${pc.dim(when)}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
repos
|
|
35
|
+
.command('add')
|
|
36
|
+
.description('Register a local repo path')
|
|
37
|
+
.requiredOption('--name <name>', 'Repo name (lowercase, digits, dash)')
|
|
38
|
+
.requiredOption('--path <path>', 'Absolute or ~/... path to the local repo')
|
|
39
|
+
.option('--description <desc>', 'Optional human-readable description')
|
|
40
|
+
.option('--default-branch <branch>', 'Default branch name (e.g. main)')
|
|
41
|
+
.action((opts) => {
|
|
42
|
+
try {
|
|
43
|
+
const entry = addRepo({
|
|
44
|
+
name: opts.name,
|
|
45
|
+
path: opts.path,
|
|
46
|
+
description: opts.description,
|
|
47
|
+
defaultBranch: opts.defaultBranch,
|
|
48
|
+
});
|
|
49
|
+
printSuccess(`registered repo "${entry.name}" at ${entry.path}`);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
printError(asMessage(err));
|
|
53
|
+
process.exitCode = 1;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
repos
|
|
57
|
+
.command('remove')
|
|
58
|
+
.description('Remove a repo from the registry')
|
|
59
|
+
.argument('<name>', 'Repo name to remove')
|
|
60
|
+
.action((name) => {
|
|
61
|
+
try {
|
|
62
|
+
removeRepo(name);
|
|
63
|
+
printSuccess(`removed repo "${name}"`);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
printError(asMessage(err));
|
|
67
|
+
process.exitCode = 1;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
repos
|
|
71
|
+
.command('update')
|
|
72
|
+
.description('Update a registered repo')
|
|
73
|
+
.argument('<name>', 'Repo name to update')
|
|
74
|
+
.option('--path <path>', 'New path')
|
|
75
|
+
.option('--description <desc>', 'New description')
|
|
76
|
+
.option('--default-branch <branch>', 'New default branch')
|
|
77
|
+
.action((name, opts) => {
|
|
78
|
+
try {
|
|
79
|
+
const entry = updateRepo(name, {
|
|
80
|
+
path: opts.path,
|
|
81
|
+
description: opts.description,
|
|
82
|
+
defaultBranch: opts.defaultBranch,
|
|
83
|
+
});
|
|
84
|
+
printSuccess(`updated repo "${entry.name}"`);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
printError(asMessage(err));
|
|
88
|
+
process.exitCode = 1;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=repos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../src/commands/repos.ts"],"names":[],"mappings":"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"}
|
package/dist/image-digests.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"auth": "sha256:
|
|
3
|
-
"devbox": "sha256:
|
|
4
|
-
"host-cp": "sha256:
|
|
5
|
-
"mcp-auth": "sha256:
|
|
2
|
+
"auth": "sha256:ab26e55f6b6835720596edcc6e969740298ee6b4f42b0a2070886527d3b8d83b",
|
|
3
|
+
"devbox": "sha256:f1b6e9b92c89bc9d76d83a718f0345e7a9a8484fb8157d2007409c413ae80b35",
|
|
4
|
+
"host-cp": "sha256:60b01e6c33251ab52be32bcfd5cd798dda7f9be5078e6a1cc104737471ed73c6",
|
|
5
|
+
"mcp-auth": "sha256:c8dcaf921b5da00474a3c9585dac9b8a095bd2da60836cbc8637995d62b83f9c",
|
|
6
6
|
"$schema_version": 1,
|
|
7
|
-
"$published_version": "0.1.
|
|
7
|
+
"$published_version": "0.1.69",
|
|
8
8
|
"$registry": "ghcr.io/pleri"
|
|
9
9
|
}
|