@codata-io/cli 0.3.2 → 0.4.2
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/src/cli.js +360 -5
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/api.d.ts +5 -1
- package/dist/src/commands/api.d.ts.map +1 -1
- package/dist/src/commands/api.js +153 -29
- package/dist/src/commands/api.js.map +1 -1
- package/dist/src/commands/chat.d.ts +9 -0
- package/dist/src/commands/chat.d.ts.map +1 -0
- package/dist/src/commands/chat.js +123 -0
- package/dist/src/commands/chat.js.map +1 -0
- package/dist/src/commands/completion.d.ts +2 -0
- package/dist/src/commands/completion.d.ts.map +1 -0
- package/dist/src/commands/completion.js +107 -0
- package/dist/src/commands/completion.js.map +1 -0
- package/dist/src/commands/conversations.d.ts +13 -0
- package/dist/src/commands/conversations.d.ts.map +1 -0
- package/dist/src/commands/conversations.js +90 -0
- package/dist/src/commands/conversations.js.map +1 -0
- package/dist/src/commands/costs.d.ts +7 -0
- package/dist/src/commands/costs.d.ts.map +1 -0
- package/dist/src/commands/costs.js +43 -0
- package/dist/src/commands/costs.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +2 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +142 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/endpoints.d.ts +10 -0
- package/dist/src/commands/endpoints.d.ts.map +1 -0
- package/dist/src/commands/endpoints.js +129 -0
- package/dist/src/commands/endpoints.js.map +1 -0
- package/dist/src/commands/files.d.ts +11 -0
- package/dist/src/commands/files.d.ts.map +1 -0
- package/dist/src/commands/files.js +84 -0
- package/dist/src/commands/files.js.map +1 -0
- package/dist/src/commands/integrationKit.d.ts +6 -0
- package/dist/src/commands/integrationKit.d.ts.map +1 -0
- package/dist/src/commands/integrationKit.js +71 -0
- package/dist/src/commands/integrationKit.js.map +1 -0
- package/dist/src/commands/lifecycle.d.ts +24 -0
- package/dist/src/commands/lifecycle.d.ts.map +1 -0
- package/dist/src/commands/lifecycle.js +84 -0
- package/dist/src/commands/lifecycle.js.map +1 -0
- package/dist/src/commands/tokens.d.ts +17 -0
- package/dist/src/commands/tokens.d.ts.map +1 -0
- package/dist/src/commands/tokens.js +112 -0
- package/dist/src/commands/tokens.js.map +1 -0
- package/dist/src/commands/versions.d.ts +8 -0
- package/dist/src/commands/versions.d.ts.map +1 -0
- package/dist/src/commands/versions.js +61 -0
- package/dist/src/commands/versions.js.map +1 -0
- package/dist/src/commands/workspaces.d.ts +8 -0
- package/dist/src/commands/workspaces.d.ts.map +1 -1
- package/dist/src/commands/workspaces.js +44 -1
- package/dist/src/commands/workspaces.js.map +1 -1
- package/dist/src/config.d.ts +11 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +72 -3
- package/dist/src/config.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Codata CLI — Workspace Lifecycle
|
|
3
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
//
|
|
5
|
+
// All of these routes are jwtAuth-only on the backend, so they require an
|
|
6
|
+
// active user login (`codata login`). Workspace API keys (`wsk_*`) are not
|
|
7
|
+
// accepted.
|
|
8
|
+
//
|
|
9
|
+
// codata generate <ws> # POST /:id/generate
|
|
10
|
+
// codata activate <ws> # POST /:id/activate
|
|
11
|
+
// codata deactivate <ws> # POST /:id/deactivate
|
|
12
|
+
// codata rollback <ws> <version> # POST /:id/rollback
|
|
13
|
+
// codata discard-changes <ws> # POST /:id/discard-changes
|
|
14
|
+
//
|
|
15
|
+
import { createCliClient } from '../config.js';
|
|
16
|
+
import { success, info, error as printError, printJson } from '../output.js';
|
|
17
|
+
export async function generateCommand(workspace, options) {
|
|
18
|
+
await postLifecycle(workspace, 'generate', {
|
|
19
|
+
body: undefined,
|
|
20
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
21
|
+
json: options.json,
|
|
22
|
+
success: 'Generation started',
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export async function activateCommand(workspace, options) {
|
|
26
|
+
await postLifecycle(workspace, 'activate', {
|
|
27
|
+
body: undefined,
|
|
28
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
29
|
+
json: options.json,
|
|
30
|
+
success: 'Workspace activated',
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export async function deactivateCommand(workspace, options) {
|
|
34
|
+
await postLifecycle(workspace, 'deactivate', {
|
|
35
|
+
body: undefined,
|
|
36
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
37
|
+
json: options.json,
|
|
38
|
+
success: 'Workspace deactivated',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
export async function rollbackCommand(workspace, version, options) {
|
|
42
|
+
const v = Number(version);
|
|
43
|
+
if (!Number.isFinite(v) || v < 1) {
|
|
44
|
+
printError('Version must be a positive integer');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
await postLifecycle(workspace, 'rollback', {
|
|
48
|
+
body: { version: v },
|
|
49
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
50
|
+
json: options.json,
|
|
51
|
+
success: `Rolled back to version ${v}`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export async function discardChangesCommand(workspace, options) {
|
|
55
|
+
if (!options.force) {
|
|
56
|
+
printError('Refusing to discard without --force.');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
await postLifecycle(workspace, 'discard-changes', {
|
|
60
|
+
body: undefined,
|
|
61
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
62
|
+
json: options.json,
|
|
63
|
+
success: 'Pending changes discarded',
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async function postLifecycle(workspace, action, opts) {
|
|
67
|
+
try {
|
|
68
|
+
const client = createCliClient();
|
|
69
|
+
const ws = await client.findWorkspace(workspace);
|
|
70
|
+
const result = await client.request('POST', `/api/workspaces/${ws.id}/${action}`, { body: opts.body, query: opts.query });
|
|
71
|
+
if (opts.json) {
|
|
72
|
+
printJson(result);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
success(opts.success);
|
|
76
|
+
info(`Workspace: ${ws.name ?? ws.id}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
printError(err.message ?? String(err));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/commands/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function tokensMintCommand(workspace: string, options: {
|
|
2
|
+
target: string;
|
|
3
|
+
branch?: string;
|
|
4
|
+
ttl?: string;
|
|
5
|
+
json?: boolean;
|
|
6
|
+
key?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function tokensListCommand(workspace: string, options: {
|
|
9
|
+
branch?: string;
|
|
10
|
+
includeRevoked?: boolean;
|
|
11
|
+
json?: boolean;
|
|
12
|
+
key?: string;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
export declare function tokensRevokeCommand(workspace: string, tokenId: string, options: {
|
|
15
|
+
key?: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/commands/tokens.ts"],"names":[],"mappings":"AAgDA,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACvF,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACnF,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Codata CLI — Handoff Tokens
|
|
3
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
//
|
|
5
|
+
// Manages workspace handoff tokens used to share a scoped, time-limited
|
|
6
|
+
// snapshot of a workspace with an IDE / agent (claude-code, cursor, copilot).
|
|
7
|
+
//
|
|
8
|
+
// Backend routes (combinedAuth → wsk_* keys accepted):
|
|
9
|
+
// POST /api/workspaces/:id/handoff-tokens
|
|
10
|
+
// GET /api/workspaces/:id/handoff-tokens
|
|
11
|
+
// DELETE /api/workspaces/:id/handoff-tokens/:tokenId
|
|
12
|
+
//
|
|
13
|
+
import { createCliClient } from '../config.js';
|
|
14
|
+
import { heading, printTable, printJson, success, info, warn, error as printError, } from '../output.js';
|
|
15
|
+
const ALLOWED_TARGETS = ['claude-code', 'cursor', 'copilot'];
|
|
16
|
+
export async function tokensMintCommand(workspace, options) {
|
|
17
|
+
if (!ALLOWED_TARGETS.includes(options.target)) {
|
|
18
|
+
printError(`--target must be one of: ${ALLOWED_TARGETS.join(', ')} (got "${options.target}")`);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const ttlDays = options.ttl ? Number(options.ttl) : undefined;
|
|
22
|
+
if (options.ttl && (Number.isNaN(ttlDays) || ttlDays <= 0)) {
|
|
23
|
+
printError('--ttl must be a positive integer (days)');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const client = createCliClient({ apiKey: options.key });
|
|
28
|
+
const ws = await client.findWorkspace(workspace);
|
|
29
|
+
const authedClient = options.key ? client : createCliClient({ workspaceId: ws.id });
|
|
30
|
+
const body = { agentTarget: options.target };
|
|
31
|
+
if (options.branch)
|
|
32
|
+
body.branchName = options.branch;
|
|
33
|
+
if (ttlDays !== undefined)
|
|
34
|
+
body.ttlDays = ttlDays;
|
|
35
|
+
const result = await callApi(authedClient, 'POST', `/api/workspaces/${ws.id}/handoff-tokens`, { body });
|
|
36
|
+
if (options.json) {
|
|
37
|
+
printJson(result);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
heading(`Handoff token created for ${ws.name ?? ws.id}`);
|
|
41
|
+
printTable(['FIELD', 'VALUE'], [
|
|
42
|
+
['ID', result.id],
|
|
43
|
+
['Target', result.agentTarget],
|
|
44
|
+
['Branch', result.branchName ?? '(workspace default)'],
|
|
45
|
+
['Expires', result.expiresAt ?? '(no expiry)'],
|
|
46
|
+
['URL', result.url],
|
|
47
|
+
]);
|
|
48
|
+
console.log('');
|
|
49
|
+
warn('Copy the token now — it will not be shown again:');
|
|
50
|
+
console.log(' ' + result.plainToken);
|
|
51
|
+
info('');
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
printError(err.message ?? String(err));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function tokensListCommand(workspace, options) {
|
|
59
|
+
try {
|
|
60
|
+
const client = createCliClient({ apiKey: options.key });
|
|
61
|
+
const ws = await client.findWorkspace(workspace);
|
|
62
|
+
const authedClient = options.key ? client : createCliClient({ workspaceId: ws.id });
|
|
63
|
+
const query = {};
|
|
64
|
+
if (options.branch)
|
|
65
|
+
query.branchName = options.branch;
|
|
66
|
+
if (options.includeRevoked === false)
|
|
67
|
+
query.includeRevoked = 'false';
|
|
68
|
+
const result = await callApi(authedClient, 'GET', `/api/workspaces/${ws.id}/handoff-tokens`, Object.keys(query).length ? { query } : {});
|
|
69
|
+
const tokens = result.tokens ?? [];
|
|
70
|
+
if (options.json) {
|
|
71
|
+
printJson(tokens);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
heading(`Handoff tokens for ${ws.name ?? ws.id} (${tokens.length})`);
|
|
75
|
+
if (tokens.length === 0) {
|
|
76
|
+
info('No tokens. Mint one with `codata tokens mint <workspace>`.');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
printTable(['ID', 'TARGET', 'BRANCH', 'PREFIX', 'STATE', 'EXPIRES'], tokens.map((t) => [
|
|
80
|
+
t.id,
|
|
81
|
+
t.agentTarget,
|
|
82
|
+
t.branchName ?? '-',
|
|
83
|
+
t.tokenPrefix,
|
|
84
|
+
t.revokedAt ? 'revoked' : t.isActive ? 'active' : 'expired',
|
|
85
|
+
t.expiresAt ?? '-',
|
|
86
|
+
]));
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
printError(err.message ?? String(err));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function tokensRevokeCommand(workspace, tokenId, options) {
|
|
94
|
+
try {
|
|
95
|
+
const client = createCliClient({ apiKey: options.key });
|
|
96
|
+
const ws = await client.findWorkspace(workspace);
|
|
97
|
+
const authedClient = options.key ? client : createCliClient({ workspaceId: ws.id });
|
|
98
|
+
await callApi(authedClient, 'DELETE', `/api/workspaces/${ws.id}/handoff-tokens/${tokenId}`);
|
|
99
|
+
success(`Token ${tokenId} revoked.`);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
printError(err.message ?? String(err));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Thin helper — the SDK exposes a public `request()` method that handles
|
|
107
|
+
// auth, retries, envelope unwrapping. We use it directly here because the
|
|
108
|
+
// SDK doesn't expose dedicated handoff-token wrappers.
|
|
109
|
+
function callApi(client, method, path, opts = {}) {
|
|
110
|
+
return client.request(method, path, opts);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function versionsListCommand(workspace: string, options: {
|
|
2
|
+
branch?: string;
|
|
3
|
+
json?: boolean;
|
|
4
|
+
}): Promise<void>;
|
|
5
|
+
export declare function versionsCommentCommand(workspace: string, version: string, comment: string, options: {
|
|
6
|
+
branch?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../../src/commands/versions.ts"],"names":[],"mappings":"AAqBA,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Codata CLI — Workspace Versions (history / comments)
|
|
3
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
//
|
|
5
|
+
// Both routes are jwtAuth — require `codata login`.
|
|
6
|
+
//
|
|
7
|
+
// codata versions list <ws> # GET /:id/versions
|
|
8
|
+
// codata versions comment <ws> <v> "<text>" # PATCH /:id/versions/:v
|
|
9
|
+
//
|
|
10
|
+
import { createCliClient } from '../config.js';
|
|
11
|
+
import { heading, info, success, error as printError, printJson } from '../output.js';
|
|
12
|
+
export async function versionsListCommand(workspace, options) {
|
|
13
|
+
try {
|
|
14
|
+
const client = createCliClient();
|
|
15
|
+
const ws = await client.findWorkspace(workspace);
|
|
16
|
+
const list = await client.request('GET', `/api/workspaces/${ws.id}/versions`, { query: options.branch ? { branch: options.branch } : undefined });
|
|
17
|
+
const items = Array.isArray(list) ? list : list?.versions ?? [];
|
|
18
|
+
if (options.json) {
|
|
19
|
+
printJson(items);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
heading(`Versions for ${ws.name ?? ws.id}`);
|
|
23
|
+
if (items.length === 0) {
|
|
24
|
+
info('(no versions)');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
info(' V STATUS CREATED COMMENT');
|
|
28
|
+
for (const v of items) {
|
|
29
|
+
const ver = String(v.version).padEnd(4);
|
|
30
|
+
const status = (v.status ?? '?').padEnd(10);
|
|
31
|
+
const created = (v.createdAt ?? '').padEnd(26);
|
|
32
|
+
const comment = v.comment ?? '';
|
|
33
|
+
console.log(` ${ver} ${status} ${created} ${comment}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
printError(err.message ?? String(err));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export async function versionsCommentCommand(workspace, version, comment, options) {
|
|
42
|
+
try {
|
|
43
|
+
const v = Number(version);
|
|
44
|
+
if (!Number.isFinite(v) || v < 1) {
|
|
45
|
+
printError('Version must be a positive integer');
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const client = createCliClient();
|
|
49
|
+
const ws = await client.findWorkspace(workspace);
|
|
50
|
+
await client.request('PATCH', `/api/workspaces/${ws.id}/versions/${v}`, {
|
|
51
|
+
body: { comment },
|
|
52
|
+
query: options.branch ? { branch: options.branch } : undefined,
|
|
53
|
+
});
|
|
54
|
+
success(`Comment updated on v${v}`);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
printError(err.message ?? String(err));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/commands/versions.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,12 @@ export declare function showCommand(nameOrId: string, options: {
|
|
|
7
7
|
export declare function createCommand(name: string, options: {
|
|
8
8
|
description?: string;
|
|
9
9
|
}): Promise<void>;
|
|
10
|
+
export declare function updateCommand(nameOrId: string, options: {
|
|
11
|
+
name?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
export declare function deleteCommand(nameOrId: string, options: {
|
|
16
|
+
force?: boolean;
|
|
17
|
+
}): Promise<void>;
|
|
10
18
|
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/commands/workspaces.ts"],"names":[],"mappings":"AAgBA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E9F;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/commands/workspaces.ts"],"names":[],"mappings":"AAgBA,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E9F;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,OAAO,CAAC,IAAI,CAAC,CAIf;AAID,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/D,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Codata CLI — Workspace Commands (list, show, create)
|
|
3
3
|
// ────────────────────────────────────────────────────────────────────────────
|
|
4
4
|
import { createCliClient } from '../config.js';
|
|
5
|
-
import { printTable, statusColor, methodColor, heading, success, info, printJson, } from '../output.js';
|
|
5
|
+
import { printTable, statusColor, methodColor, heading, success, info, printJson, error as printError, } from '../output.js';
|
|
6
6
|
export async function listCommand(options) {
|
|
7
7
|
const client = createCliClient();
|
|
8
8
|
const workspaces = await client.listWorkspaces();
|
|
@@ -90,4 +90,47 @@ export async function createCommand(name, options) {
|
|
|
90
90
|
const ws = await client.createWorkspace(name, options.description);
|
|
91
91
|
success(`Workspace "${ws.name}" created (id: ${ws.id})`);
|
|
92
92
|
}
|
|
93
|
+
// ─── update / delete (jwtAuth) ────────────────────────────────────────────
|
|
94
|
+
export async function updateCommand(nameOrId, options) {
|
|
95
|
+
try {
|
|
96
|
+
if (!options.name && !options.description) {
|
|
97
|
+
printError('Provide at least --name or --description.');
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const client = createCliClient();
|
|
101
|
+
const ws = await client.findWorkspace(nameOrId);
|
|
102
|
+
const body = {};
|
|
103
|
+
if (options.name)
|
|
104
|
+
body.name = options.name;
|
|
105
|
+
if (options.description)
|
|
106
|
+
body.description = options.description;
|
|
107
|
+
const updated = await client.request('PATCH', `/api/workspaces/${ws.id}`, { body });
|
|
108
|
+
if (options.json) {
|
|
109
|
+
printJson(updated);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
success(`Workspace ${ws.id} updated`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
printError(err.message ?? String(err));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export async function deleteCommand(nameOrId, options) {
|
|
121
|
+
try {
|
|
122
|
+
if (!options.force) {
|
|
123
|
+
printError('Refusing to delete without --force.');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const client = createCliClient();
|
|
127
|
+
const ws = await client.findWorkspace(nameOrId);
|
|
128
|
+
await client.request('DELETE', `/api/workspaces/${ws.id}`);
|
|
129
|
+
success(`Workspace ${ws.id} deleted`);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
printError(err.message ?? String(err));
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
93
136
|
//# sourceMappingURL=workspaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/commands/workspaces.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,OAAO,EACP,OAAO,EACP,IAAI,EACJ,SAAS,
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/commands/workspaces.ts"],"names":[],"mappings":"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"}
|
package/dist/src/config.d.ts
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { AuthTokens, CodataConfig } from 'codata-io';
|
|
2
2
|
export declare const CODATA_DIR: string;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the active profile name (if any). Priority:
|
|
5
|
+
* 1. `CODATA_PROFILE` env var
|
|
6
|
+
* 2. `~/.codata/active-profile` (single line, profile name)
|
|
7
|
+
* Returns null when no profile is active (use default config.json).
|
|
8
|
+
*/
|
|
9
|
+
export declare function getActiveProfile(): string | null;
|
|
10
|
+
export declare function listProfiles(): string[];
|
|
11
|
+
export declare function setActiveProfile(name: string | null): void;
|
|
12
|
+
export declare function createProfile(name: string, cfg: Partial<CodataConfig>): void;
|
|
3
13
|
/**
|
|
4
14
|
* Production server URL. `codata init` always writes this into IDE configs
|
|
5
15
|
* regardless of any local dev override in ~/.codata/config.json — the user's
|
|
6
16
|
* IDE needs to talk to the deployed MCP server, not their localhost backend.
|
|
7
17
|
*/
|
|
8
|
-
export declare const PRODUCTION_SERVER_URL = "https://codata.io";
|
|
18
|
+
export declare const PRODUCTION_SERVER_URL = "https://api.codata.io";
|
|
9
19
|
export declare function getConfig(): CodataConfig;
|
|
10
20
|
export declare function setConfig(updates: Partial<CodataConfig>): void;
|
|
11
21
|
export declare function getServerUrl(): string;
|
package/dist/src/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE1D,eAAO,MAAM,UAAU,QAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE1D,eAAO,MAAM,UAAU,QAAqC,CAAC;AAO7D;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAShD;AAQD,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAUvC;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAQ5E;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAU7D,wBAAgB,SAAS,IAAI,YAAY,CASxC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAQ9D;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAG/C;AAID,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAUjD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGvD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAG9C;AAID,UAAU,UAAU;IAClB,CAAC,WAAW,EAAE,MAAM,GAAG;QACrB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,wBAAgB,aAAa,IAAI,UAAU,CAO1C;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAK7E;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAKzD;AAID,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,YAAY,CAqCf"}
|
package/dist/src/config.js
CHANGED
|
@@ -12,12 +12,70 @@ export const CODATA_DIR = path.join(os.homedir(), '.codata');
|
|
|
12
12
|
const CONFIG_FILE = path.join(CODATA_DIR, 'config.json');
|
|
13
13
|
const AUTH_FILE = path.join(CODATA_DIR, 'auth.json');
|
|
14
14
|
const KEYS_FILE = path.join(CODATA_DIR, 'keys.json');
|
|
15
|
+
const ACTIVE_PROFILE_FILE = path.join(CODATA_DIR, 'active-profile');
|
|
16
|
+
const PROFILES_DIR = path.join(CODATA_DIR, 'profiles');
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the active profile name (if any). Priority:
|
|
19
|
+
* 1. `CODATA_PROFILE` env var
|
|
20
|
+
* 2. `~/.codata/active-profile` (single line, profile name)
|
|
21
|
+
* Returns null when no profile is active (use default config.json).
|
|
22
|
+
*/
|
|
23
|
+
export function getActiveProfile() {
|
|
24
|
+
const fromEnv = process.env.CODATA_PROFILE?.trim();
|
|
25
|
+
if (fromEnv)
|
|
26
|
+
return fromEnv;
|
|
27
|
+
try {
|
|
28
|
+
const raw = fs.readFileSync(ACTIVE_PROFILE_FILE, 'utf8').trim();
|
|
29
|
+
return raw || null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function getActiveConfigPath() {
|
|
36
|
+
const profile = getActiveProfile();
|
|
37
|
+
if (!profile)
|
|
38
|
+
return CONFIG_FILE;
|
|
39
|
+
return path.join(PROFILES_DIR, `${profile}.json`);
|
|
40
|
+
}
|
|
41
|
+
export function listProfiles() {
|
|
42
|
+
try {
|
|
43
|
+
return fs
|
|
44
|
+
.readdirSync(PROFILES_DIR)
|
|
45
|
+
.filter((f) => f.endsWith('.json'))
|
|
46
|
+
.map((f) => f.slice(0, -'.json'.length))
|
|
47
|
+
.sort();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function setActiveProfile(name) {
|
|
54
|
+
ensureDir();
|
|
55
|
+
if (name === null) {
|
|
56
|
+
try {
|
|
57
|
+
fs.unlinkSync(ACTIVE_PROFILE_FILE);
|
|
58
|
+
}
|
|
59
|
+
catch { /* ignore */ }
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
fs.writeFileSync(ACTIVE_PROFILE_FILE, name + '\n');
|
|
63
|
+
}
|
|
64
|
+
export function createProfile(name, cfg) {
|
|
65
|
+
if (!name || /[\/\\\s]/.test(name)) {
|
|
66
|
+
throw new Error('Profile name must be non-empty and contain no spaces or slashes');
|
|
67
|
+
}
|
|
68
|
+
ensureProfilesDir();
|
|
69
|
+
const target = path.join(PROFILES_DIR, `${name}.json`);
|
|
70
|
+
const merged = { ...DEFAULT_CONFIG, ...cfg };
|
|
71
|
+
fs.writeFileSync(target, JSON.stringify(merged, null, 2) + '\n');
|
|
72
|
+
}
|
|
15
73
|
/**
|
|
16
74
|
* Production server URL. `codata init` always writes this into IDE configs
|
|
17
75
|
* regardless of any local dev override in ~/.codata/config.json — the user's
|
|
18
76
|
* IDE needs to talk to the deployed MCP server, not their localhost backend.
|
|
19
77
|
*/
|
|
20
|
-
export const PRODUCTION_SERVER_URL = 'https://codata.io';
|
|
78
|
+
export const PRODUCTION_SERVER_URL = 'https://api.codata.io';
|
|
21
79
|
const DEFAULT_CONFIG = {
|
|
22
80
|
serverUrl: PRODUCTION_SERVER_URL,
|
|
23
81
|
defaultLanguage: 'typescript',
|
|
@@ -26,8 +84,9 @@ const DEFAULT_CONFIG = {
|
|
|
26
84
|
// ── Config ────────────────────────────────────────────────────────────────
|
|
27
85
|
export function getConfig() {
|
|
28
86
|
ensureDir();
|
|
87
|
+
const target = getActiveConfigPath();
|
|
29
88
|
try {
|
|
30
|
-
const raw = fs.readFileSync(
|
|
89
|
+
const raw = fs.readFileSync(target, 'utf8');
|
|
31
90
|
return { ...DEFAULT_CONFIG, ...JSON.parse(raw) };
|
|
32
91
|
}
|
|
33
92
|
catch {
|
|
@@ -36,9 +95,13 @@ export function getConfig() {
|
|
|
36
95
|
}
|
|
37
96
|
export function setConfig(updates) {
|
|
38
97
|
ensureDir();
|
|
98
|
+
const target = getActiveConfigPath();
|
|
99
|
+
// Profile file may not exist yet
|
|
100
|
+
if (target !== CONFIG_FILE)
|
|
101
|
+
ensureProfilesDir();
|
|
39
102
|
const current = getConfig();
|
|
40
103
|
const merged = { ...current, ...updates };
|
|
41
|
-
fs.writeFileSync(
|
|
104
|
+
fs.writeFileSync(target, JSON.stringify(merged, null, 2) + '\n');
|
|
42
105
|
}
|
|
43
106
|
export function getServerUrl() {
|
|
44
107
|
return getConfig().serverUrl;
|
|
@@ -167,4 +230,10 @@ function ensureDir() {
|
|
|
167
230
|
fs.mkdirSync(CODATA_DIR, { recursive: true });
|
|
168
231
|
}
|
|
169
232
|
}
|
|
233
|
+
function ensureProfilesDir() {
|
|
234
|
+
ensureDir();
|
|
235
|
+
if (!fs.existsSync(PROFILES_DIR)) {
|
|
236
|
+
fs.mkdirSync(PROFILES_DIR, { recursive: true });
|
|
237
|
+
}
|
|
238
|
+
}
|
|
170
239
|
//# sourceMappingURL=config.js.map
|
package/dist/src/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAC/E,EAAE;AACF,8CAA8C;AAC9C,kDAAkD;AAClD,EAAE;AAEF,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACrD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codata-io/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"description": "Codata CLI — manage workspaces, API keys, and more from the terminal",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"node": ">=18.0.0"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"codata-io": "
|
|
24
|
+
"codata-io": "^0.7.0",
|
|
25
25
|
"commander": "^12.0.0",
|
|
26
26
|
"chalk": "^5.3.0",
|
|
27
27
|
"ora": "^8.0.0",
|