@codata-io/cli 0.2.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/src/cli.js +411 -6
  2. package/dist/src/cli.js.map +1 -1
  3. package/dist/src/commands/api.d.ts +5 -1
  4. package/dist/src/commands/api.d.ts.map +1 -1
  5. package/dist/src/commands/api.js +153 -29
  6. package/dist/src/commands/api.js.map +1 -1
  7. package/dist/src/commands/branches.d.ts +4 -0
  8. package/dist/src/commands/branches.d.ts.map +1 -1
  9. package/dist/src/commands/branches.js +53 -1
  10. package/dist/src/commands/branches.js.map +1 -1
  11. package/dist/src/commands/chat.d.ts +9 -0
  12. package/dist/src/commands/chat.d.ts.map +1 -0
  13. package/dist/src/commands/chat.js +123 -0
  14. package/dist/src/commands/chat.js.map +1 -0
  15. package/dist/src/commands/completion.d.ts +2 -0
  16. package/dist/src/commands/completion.d.ts.map +1 -0
  17. package/dist/src/commands/completion.js +107 -0
  18. package/dist/src/commands/completion.js.map +1 -0
  19. package/dist/src/commands/conversations.d.ts +13 -0
  20. package/dist/src/commands/conversations.d.ts.map +1 -0
  21. package/dist/src/commands/conversations.js +90 -0
  22. package/dist/src/commands/conversations.js.map +1 -0
  23. package/dist/src/commands/costs.d.ts +7 -0
  24. package/dist/src/commands/costs.d.ts.map +1 -0
  25. package/dist/src/commands/costs.js +43 -0
  26. package/dist/src/commands/costs.js.map +1 -0
  27. package/dist/src/commands/doctor.d.ts +2 -0
  28. package/dist/src/commands/doctor.d.ts.map +1 -0
  29. package/dist/src/commands/doctor.js +142 -0
  30. package/dist/src/commands/doctor.js.map +1 -0
  31. package/dist/src/commands/endpoints.d.ts +10 -0
  32. package/dist/src/commands/endpoints.d.ts.map +1 -0
  33. package/dist/src/commands/endpoints.js +129 -0
  34. package/dist/src/commands/endpoints.js.map +1 -0
  35. package/dist/src/commands/files.d.ts +11 -0
  36. package/dist/src/commands/files.d.ts.map +1 -0
  37. package/dist/src/commands/files.js +84 -0
  38. package/dist/src/commands/files.js.map +1 -0
  39. package/dist/src/commands/init.d.ts +1 -0
  40. package/dist/src/commands/init.d.ts.map +1 -1
  41. package/dist/src/commands/init.js +15 -1
  42. package/dist/src/commands/init.js.map +1 -1
  43. package/dist/src/commands/integrationKit.d.ts +6 -0
  44. package/dist/src/commands/integrationKit.d.ts.map +1 -0
  45. package/dist/src/commands/integrationKit.js +71 -0
  46. package/dist/src/commands/integrationKit.js.map +1 -0
  47. package/dist/src/commands/lifecycle.d.ts +24 -0
  48. package/dist/src/commands/lifecycle.d.ts.map +1 -0
  49. package/dist/src/commands/lifecycle.js +84 -0
  50. package/dist/src/commands/lifecycle.js.map +1 -0
  51. package/dist/src/commands/scaffold.js +22 -1
  52. package/dist/src/commands/scaffold.js.map +1 -1
  53. package/dist/src/commands/tokens.d.ts +17 -0
  54. package/dist/src/commands/tokens.d.ts.map +1 -0
  55. package/dist/src/commands/tokens.js +112 -0
  56. package/dist/src/commands/tokens.js.map +1 -0
  57. package/dist/src/commands/versions.d.ts +8 -0
  58. package/dist/src/commands/versions.d.ts.map +1 -0
  59. package/dist/src/commands/versions.js +61 -0
  60. package/dist/src/commands/versions.js.map +1 -0
  61. package/dist/src/commands/workspaces.d.ts +8 -0
  62. package/dist/src/commands/workspaces.d.ts.map +1 -1
  63. package/dist/src/commands/workspaces.js +57 -1
  64. package/dist/src/commands/workspaces.js.map +1 -1
  65. package/dist/src/config.d.ts +21 -0
  66. package/dist/src/config.d.ts.map +1 -1
  67. package/dist/src/config.js +84 -4
  68. package/dist/src/config.js.map +1 -1
  69. package/dist/src/oauth.d.ts +4 -0
  70. package/dist/src/oauth.d.ts.map +1 -1
  71. package/dist/src/oauth.js +25 -14
  72. package/dist/src/oauth.js.map +1 -1
  73. package/package.json +2 -2
@@ -3,26 +3,56 @@
3
3
  // ────────────────────────────────────────────────────────────────────────────
4
4
  //
5
5
  // Usage:
6
+ // codata api <workspace> # List available endpoints
7
+ // codata api <workspace> <METHOD> # List endpoints for that METHOD
6
8
  // codata api <workspace> <METHOD> <path> [--data '{}'] [--query key=val] [--key wsk_...]
7
9
  //
8
10
  // Examples:
11
+ // codata api my-api # Show all endpoints
12
+ // codata api my-api GET # Show all GET endpoints
9
13
  // codata api my-api GET /users
10
14
  // codata api my-api POST /users --data '{"name":"Alice"}'
11
15
  // codata api my-api GET /users --query limit=10
12
16
  // codata api my-api GET /users --key wsk_live_abc123
13
17
  //
18
+ import fs from 'fs';
14
19
  import { createCliClient } from '../config.js';
15
- import { methodColor, printJson, error as printError, info } from '../output.js';
20
+ import { methodColor, printJson, printTable, heading, info, warn, error as printError, } from '../output.js';
21
+ const SUPPORTED_METHODS = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
16
22
  export async function apiCommand(nameOrId, method, apiPath, options) {
23
+ // ── Listing mode: no method, or method given but no path ────────────────
24
+ if (!method || !apiPath) {
25
+ await listEndpoints(nameOrId, method, options);
26
+ return;
27
+ }
17
28
  method = method.toUpperCase();
18
- // Parse --data (JSON body)
29
+ // Parse --data (JSON body). Supports:
30
+ // --data '{"name":"Alice"}' inline JSON
31
+ // --data @path/to/body.json file reference
32
+ // --data - read from stdin
19
33
  let body = undefined;
20
- if (options.data) {
34
+ if (options.data !== undefined) {
35
+ let raw;
36
+ try {
37
+ if (options.data === '-') {
38
+ raw = fs.readFileSync(0, 'utf8');
39
+ }
40
+ else if (options.data.startsWith('@')) {
41
+ raw = fs.readFileSync(options.data.slice(1), 'utf8');
42
+ }
43
+ else {
44
+ raw = options.data;
45
+ }
46
+ }
47
+ catch (err) {
48
+ printError(`Failed to read --data: ${err.message ?? err}`);
49
+ process.exit(1);
50
+ }
21
51
  try {
22
- body = JSON.parse(options.data);
52
+ body = JSON.parse(raw);
23
53
  }
24
54
  catch {
25
- printError('Invalid JSON in --data. Use: --data \'{"key":"value"}\'');
55
+ printError('Invalid JSON in --data. Use inline JSON, @file.json, or - for stdin.');
26
56
  process.exit(1);
27
57
  }
28
58
  }
@@ -34,7 +64,28 @@ export async function apiCommand(nameOrId, method, apiPath, options) {
34
64
  queryParams[key] = rest.join('=');
35
65
  }
36
66
  }
37
- info(`${methodColor(method)} ${apiPath}`);
67
+ // Parse --header (key=value or key:value pairs)
68
+ const headers = {};
69
+ if (options.header) {
70
+ for (const h of options.header) {
71
+ const sep = h.indexOf('=') >= 0 ? '=' : h.indexOf(':') >= 0 ? ':' : null;
72
+ if (!sep) {
73
+ printError(`Invalid --header: "${h}". Use key=value or key:value.`);
74
+ process.exit(1);
75
+ }
76
+ const idx = h.indexOf(sep);
77
+ const k = h.slice(0, idx).trim();
78
+ const v = h.slice(idx + 1).trim();
79
+ if (!k) {
80
+ printError(`Invalid --header: "${h}". Empty key.`);
81
+ process.exit(1);
82
+ }
83
+ headers[k] = v;
84
+ }
85
+ }
86
+ if (!options.raw) {
87
+ info(`${methodColor(method)} ${apiPath}`);
88
+ }
38
89
  try {
39
90
  // Create client with optional explicit key
40
91
  const client = createCliClient({
@@ -43,33 +94,106 @@ export async function apiCommand(nameOrId, method, apiPath, options) {
43
94
  });
44
95
  // Find workspace
45
96
  const ws = await client.findWorkspace(nameOrId);
46
- // If no explicit key, try to get a client with stored key for this workspace
97
+ // If no explicit key, try to get a client with stored key for this workspace.
98
+ // Always route through the branch (default 'main') so we hit the modern
99
+ // Gater path (/v0/workspace/<id>/branch/<branch>/api/...).
100
+ const branch = options.branch ?? 'main';
101
+ const wsClient = options.key
102
+ ? client.workspace(ws.id, { branch })
103
+ : createCliClient({ workspaceId: ws.id }).workspace(ws.id, { branch });
104
+ if (!SUPPORTED_METHODS.includes(method)) {
105
+ printError(`Unsupported method: ${method}. Supported: ${SUPPORTED_METHODS.join(', ')}`);
106
+ process.exit(1);
107
+ }
108
+ // Route through the Gater via the generic request() — supports headers
109
+ // for all methods uniformly.
110
+ const result = await wsClient.request(method, apiPath, {
111
+ body,
112
+ query: Object.keys(queryParams).length ? queryParams : undefined,
113
+ headers: Object.keys(headers).length ? headers : undefined,
114
+ });
115
+ if (options.raw) {
116
+ // Print body as-is. For JSON, pretty-print; for everything else, raw text.
117
+ if (typeof result === 'string') {
118
+ process.stdout.write(result);
119
+ }
120
+ else if (result === null || result === undefined) {
121
+ // nothing to print
122
+ }
123
+ else {
124
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
125
+ }
126
+ }
127
+ else {
128
+ printJson(result);
129
+ }
130
+ }
131
+ catch (err) {
132
+ printError(err.message);
133
+ process.exit(1);
134
+ }
135
+ }
136
+ // ────────────────────────────────────────────────────────────────────────────
137
+ // Endpoint listing
138
+ // ────────────────────────────────────────────────────────────────────────────
139
+ async function listEndpoints(nameOrId, methodFilter, options) {
140
+ const filter = methodFilter?.toUpperCase();
141
+ if (filter && !SUPPORTED_METHODS.includes(filter)) {
142
+ printError(`Unsupported method: ${filter}. Supported: ${SUPPORTED_METHODS.join(', ')}`);
143
+ process.exit(1);
144
+ }
145
+ try {
146
+ const client = createCliClient({ apiKey: options.key });
147
+ const ws = await client.findWorkspace(nameOrId);
47
148
  const wsClient = options.key
48
149
  ? client.workspace(ws.id)
49
150
  : createCliClient({ workspaceId: ws.id }).workspace(ws.id);
50
- // Route through the Gater
51
- let result;
52
- switch (method) {
53
- case 'GET':
54
- result = await wsClient.get(apiPath, Object.keys(queryParams).length ? queryParams : undefined);
55
- break;
56
- case 'POST':
57
- result = await wsClient.post(apiPath, body);
58
- break;
59
- case 'PUT':
60
- result = await wsClient.put(apiPath, body);
61
- break;
62
- case 'PATCH':
63
- result = await wsClient.patch(apiPath, body);
64
- break;
65
- case 'DELETE':
66
- result = await wsClient.delete(apiPath);
67
- break;
68
- default:
69
- printError(`Unsupported method: ${method}`);
70
- process.exit(1);
151
+ const spec = await wsClient.getSpec();
152
+ const allEndpoints = spec?.endpoints ?? [];
153
+ if (allEndpoints.length === 0) {
154
+ warn(`No endpoints found for workspace "${ws.name ?? ws.id}". ` +
155
+ 'Has this workspace been generated yet?');
156
+ return;
157
+ }
158
+ const endpoints = filter
159
+ ? allEndpoints.filter((e) => e.method?.toUpperCase() === filter)
160
+ : allEndpoints;
161
+ if (endpoints.length === 0) {
162
+ warn(`No ${filter} endpoints found for workspace "${ws.name ?? ws.id}".`);
163
+ info(`Available methods: ${[
164
+ ...new Set(allEndpoints.map((e) => e.method?.toUpperCase()).filter(Boolean)),
165
+ ].join(', ')}`);
166
+ return;
167
+ }
168
+ if (options.json) {
169
+ printJson(endpoints.map((e) => ({
170
+ method: e.method?.toUpperCase(),
171
+ path: e.path,
172
+ operationId: e.operationId,
173
+ summary: e.summary,
174
+ description: e.description,
175
+ })));
176
+ return;
71
177
  }
72
- printJson(result);
178
+ heading(filter
179
+ ? `Available ${filter} endpoints for ${ws.name ?? ws.id}`
180
+ : `Available endpoints for ${ws.name ?? ws.id}`);
181
+ const rows = endpoints
182
+ .slice()
183
+ .sort((a, b) => {
184
+ const p = (a.path ?? '').localeCompare(b.path ?? '');
185
+ return p !== 0 ? p : (a.method ?? '').localeCompare(b.method ?? '');
186
+ })
187
+ .map((e) => [
188
+ methodColor((e.method ?? '').toUpperCase()),
189
+ e.path ?? '',
190
+ e.summary ?? e.description ?? e.operationId ?? '',
191
+ ]);
192
+ printTable(['METHOD', 'PATH', 'DESCRIPTION'], rows);
193
+ console.log('');
194
+ info('Run an endpoint:');
195
+ const example = endpoints[0];
196
+ info(` codata api ${nameOrId} ${(example.method ?? 'GET').toUpperCase()} ${example.path ?? '/'}`);
73
197
  }
74
198
  catch (err) {
75
199
  printError(err.message);
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/commands/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/commands/api.ts"],"names":[],"mappings":"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"}
@@ -11,4 +11,8 @@ export declare function branchesShowCommand(nameOrId: string, branchName: string
11
11
  export declare function branchesDeleteCommand(nameOrId: string, branchName: string, options: {
12
12
  force?: boolean;
13
13
  }): Promise<void>;
14
+ export declare function branchesMergeCommand(nameOrId: string, branchName: string, options: {
15
+ target?: string;
16
+ json?: boolean;
17
+ }): Promise<void>;
14
18
  //# sourceMappingURL=branches.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branches.d.ts","sourceRoot":"","sources":["../../../src/commands/branches.ts"],"names":[],"mappings":"AAiBA,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf"}
1
+ {"version":3,"file":"branches.d.ts","sourceRoot":"","sources":["../../../src/commands/branches.ts"],"names":[],"mappings":"AAiBA,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAkEf"}
@@ -2,7 +2,7 @@
2
2
  // Codata CLI — Branch Commands (list, create, show, delete)
3
3
  // ────────────────────────────────────────────────────────────────────────────
4
4
  import { createCliClient } from '../config.js';
5
- import { printTable, statusColor, heading, success, info, printJson, } from '../output.js';
5
+ import { printTable, statusColor, heading, success, info, warn, printJson, error as printError, } from '../output.js';
6
6
  import chalk from 'chalk';
7
7
  export async function branchesListCommand(nameOrId, options) {
8
8
  const client = createCliClient();
@@ -83,4 +83,56 @@ export async function branchesDeleteCommand(nameOrId, branchName, options) {
83
83
  await client.deleteBranch(ws.id, branchName);
84
84
  success(`Branch "${branchName}" deleted from workspace "${ws.name}".`);
85
85
  }
86
+ export async function branchesMergeCommand(nameOrId, branchName, options) {
87
+ const client = createCliClient();
88
+ const ws = await client.findWorkspace(nameOrId);
89
+ const targetBranch = options.target || 'main';
90
+ // Step 1: Preview the merge
91
+ info(`Previewing merge of "${branchName}" into "${targetBranch}"…`);
92
+ const preview = await client.mergePreview(ws.id, branchName, targetBranch);
93
+ const autoMergedRaw = preview.autoMerged ?? { assets: [], endpoints: [], relationships: [] };
94
+ const autoMerged = [
95
+ ...(autoMergedRaw.assets ?? []),
96
+ ...(autoMergedRaw.endpoints ?? []),
97
+ ...(autoMergedRaw.relationships ?? []),
98
+ ];
99
+ const conflicts = preview.conflicts ?? [];
100
+ if (options.json && conflicts.length > 0) {
101
+ printJson({ autoMerged: autoMergedRaw, conflicts, merged: false });
102
+ return;
103
+ }
104
+ // Step 2: Display preview
105
+ heading(`Merge Preview: ${branchName} → ${targetBranch}`);
106
+ console.log(` Workspace: ${ws.name}`);
107
+ console.log(` Auto-merged changes: ${autoMerged.length}`);
108
+ console.log(` Conflicts: ${conflicts.length}`);
109
+ if (autoMerged.length > 0) {
110
+ console.log();
111
+ printTable(['Type', 'Name', 'Source'], autoMerged.map((c) => [
112
+ c.action || '',
113
+ c.key || '',
114
+ c.from || '',
115
+ ]));
116
+ }
117
+ // Step 3: Handle conflicts
118
+ if (conflicts.length > 0) {
119
+ console.log();
120
+ warn(`${conflicts.length} conflict(s) found:`);
121
+ printTable(['Category', 'Key'], conflicts.map((c) => [c.category || '', c.key || '']));
122
+ printError('Resolve conflicts in the Codata UI, then re-run this command.');
123
+ process.exitCode = 1;
124
+ return;
125
+ }
126
+ // Step 4: No conflicts — merge
127
+ info('No conflicts — merging…');
128
+ const result = await client.mergeBranch(ws.id, branchName, targetBranch, []);
129
+ if (options.json) {
130
+ printJson(result);
131
+ return;
132
+ }
133
+ success(`Branch "${branchName}" merged into "${targetBranch}" in workspace "${ws.name}".`);
134
+ if (result.message) {
135
+ console.log(` ${result.message}`);
136
+ }
137
+ }
86
138
  //# sourceMappingURL=branches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/commands/branches.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4DAA4D;AAC5D,+EAA+E;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,IAAI,EAEJ,SAAS,GAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,OAA2B;IAE3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAElD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,8BAA8B,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;IACrC,UAAU,CACR,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,EACtE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACzC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;QACxB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;QACnC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;QACtD,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;QAClD,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE;KAC3C,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,UAAkB,EAClB,OAA4C;IAE5C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,WAAW,MAAM,CAAC,UAAU,2BAA2B,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,UAAkB,EAClB,OAA2B;IAE3B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAEzD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,sBAAsB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,UAAkB,EAClB,OAA4B;IAE5B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEhD,yBAAyB;IACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;YACjD,EAAE,CAAC,QAAQ,CACT,KAAK,CAAC,MAAM,CAAC,oBAAoB,UAAU,WAAW,EAAE,CAAC,IAAI,WAAW,CAAC,EACzE,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,KAAK,EAAE,CAAC;QAEX,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,CAAC,WAAW,UAAU,6BAA6B,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"branches.js","sourceRoot":"","sources":["../../../src/commands/branches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function chatCommand(workspace: string, message: string, options: {
2
+ key?: string;
3
+ branch?: string;
4
+ mode?: 'agent' | 'ask';
5
+ conversation?: string;
6
+ timeout?: string;
7
+ json?: boolean;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../src/commands/chat.ts"],"names":[],"mappings":"AAiDA,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAsGf"}
@@ -0,0 +1,123 @@
1
+ // ────────────────────────────────────────────────────────────────────────────
2
+ // Codata CLI — Chat (drive the workspace conversation agent)
3
+ // ────────────────────────────────────────────────────────────────────────────
4
+ //
5
+ // One-shot, blocking chat:
6
+ // codata chat <workspace> "Add an asset called Task with title and dueDate"
7
+ //
8
+ // Backend routes (combinedAuth → wsk_* keys accepted):
9
+ // POST /api/workspaces/:workspaceId/conversations
10
+ // POST /api/workspaces/:workspaceId/conversations/:conversationId/messages
11
+ // GET /api/workspaces/:workspaceId/conversations/:conversationId
12
+ //
13
+ // The backend processes messages asynchronously, so we poll the conversation
14
+ // every second until `pendingMessage.status` clears or we time out.
15
+ //
16
+ import { createCliClient } from '../config.js';
17
+ import { heading, info, warn, success, error as printError, printJson, } from '../output.js';
18
+ export async function chatCommand(workspace, message, options) {
19
+ const timeoutMs = (Number(options.timeout) || 120) * 1000;
20
+ const mode = options.mode ?? 'agent';
21
+ if (!['agent', 'ask'].includes(mode)) {
22
+ printError('--mode must be "agent" or "ask"');
23
+ process.exit(1);
24
+ }
25
+ try {
26
+ const client = createCliClient({ apiKey: options.key });
27
+ const ws = await client.findWorkspace(workspace);
28
+ const authedClient = options.key ? client : createCliClient({ workspaceId: ws.id });
29
+ let conversationId = options.conversation;
30
+ let trackingMessageId;
31
+ if (!conversationId) {
32
+ // Start a new conversation with the initial message.
33
+ const started = await authedClient.request('POST', `/api/workspaces/${ws.id}/conversations`, {
34
+ body: { agentType: 'human', mode, initialMessage: message },
35
+ query: options.branch ? { branch: options.branch } : undefined,
36
+ });
37
+ conversationId = started.conversationId;
38
+ trackingMessageId = started.messageId;
39
+ if (!options.json) {
40
+ info(`Conversation: ${conversationId}`);
41
+ }
42
+ }
43
+ else {
44
+ // Send a message into an existing conversation.
45
+ const sent = await authedClient.request('POST', `/api/workspaces/${ws.id}/conversations/${conversationId}/messages`, {
46
+ body: { agentType: 'human', mode, message },
47
+ query: options.branch ? { branch: options.branch } : undefined,
48
+ });
49
+ trackingMessageId = sent.messageId;
50
+ }
51
+ if (!options.json) {
52
+ heading(`> ${message}`);
53
+ info(`(waiting for reply, timeout ${Math.round(timeoutMs / 1000)}s)`);
54
+ }
55
+ // Poll for completion. Backend sets pendingMessage.status to 'processing'
56
+ // while the agent runs; when done it's cleared (or set to 'error').
57
+ const start = Date.now();
58
+ let lastSeenAssistantId;
59
+ while (Date.now() - start < timeoutMs) {
60
+ await sleep(1000);
61
+ const conv = await authedClient.request('GET', `/api/workspaces/${ws.id}/conversations/${conversationId}`);
62
+ const pending = conv.pendingMessage?.status;
63
+ if (pending === 'error') {
64
+ printError(`Agent error: ${conv.pendingMessage?.error ?? 'unknown'}`);
65
+ process.exit(1);
66
+ }
67
+ if (!pending || pending !== 'processing') {
68
+ // Done. Pick the most recent assistant message after our user msg.
69
+ const messages = conv.messages ?? [];
70
+ const reply = findAssistantReply(messages, trackingMessageId);
71
+ if (options.json) {
72
+ printJson({
73
+ conversationId,
74
+ messageId: trackingMessageId,
75
+ reply: reply ? extractText(reply) : null,
76
+ messages,
77
+ });
78
+ return;
79
+ }
80
+ if (!reply) {
81
+ warn('Agent finished but produced no assistant message.');
82
+ return;
83
+ }
84
+ console.log('');
85
+ success('Agent reply:');
86
+ const text = extractText(reply);
87
+ console.log(text ?? '(empty)');
88
+ info('');
89
+ info(`Continue: codata chat ${workspace} "<next msg>" --conversation ${conversationId}`);
90
+ return;
91
+ }
92
+ lastSeenAssistantId = pending;
93
+ }
94
+ warn(`Timed out after ${Math.round(timeoutMs / 1000)}s. Conversation ID: ${conversationId}`);
95
+ void lastSeenAssistantId;
96
+ process.exit(2);
97
+ }
98
+ catch (err) {
99
+ printError(err.message ?? String(err));
100
+ process.exit(1);
101
+ }
102
+ }
103
+ function findAssistantReply(messages, afterMessageId) {
104
+ // Walk from the end and return the latest non-user message whose
105
+ // createdAt is after the user message (best effort).
106
+ let userIndex = -1;
107
+ if (afterMessageId) {
108
+ userIndex = messages.findIndex((m) => m.messageId === afterMessageId);
109
+ }
110
+ for (let i = messages.length - 1; i > userIndex; i--) {
111
+ const m = messages[i];
112
+ if (m.role && m.role !== 'user')
113
+ return m;
114
+ }
115
+ return null;
116
+ }
117
+ function extractText(m) {
118
+ return m.text ?? m.content ?? m.message ?? null;
119
+ }
120
+ function sleep(ms) {
121
+ return new Promise((r) => setTimeout(r, ms));
122
+ }
123
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function completionCommand(shell: string): void;
2
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/commands/completion.ts"],"names":[],"mappings":"AAiCA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAiBrD"}
@@ -0,0 +1,107 @@
1
+ // ────────────────────────────────────────────────────────────────────────────
2
+ // Codata CLI — Shell Completion
3
+ // ────────────────────────────────────────────────────────────────────────────
4
+ //
5
+ // Emits a shell completion script for bash | zsh | fish. The user installs it
6
+ // by sourcing the output, e.g.:
7
+ //
8
+ // bash: source <(codata completion bash)
9
+ // zsh: source <(codata completion zsh)
10
+ // fish: codata completion fish | source
11
+ //
12
+ // Completion is purely static (top-level commands + common subcommands).
13
+ // We deliberately don't enumerate workspaces/keys at completion time — that
14
+ // would require a network call on every TAB press.
15
+ //
16
+ const TOP = [
17
+ 'login', 'logout', 'whoami', 'init',
18
+ 'workspaces', 'ws', 'show', 'create',
19
+ 'keys', 'api', 'branches', 'br',
20
+ 'scaffold', 'export', 'config',
21
+ 'doctor', 'tokens', 'integration-kit', 'endpoints', 'completion',
22
+ ];
23
+ const SUB = {
24
+ keys: ['create', 'list', 'ls', 'revoke', 'rotate', 'current', 'stored'],
25
+ branches: ['list', 'ls', 'create', 'show', 'delete', 'rm', 'merge'],
26
+ br: ['list', 'ls', 'create', 'show', 'delete', 'rm', 'merge'],
27
+ config: ['set', 'get'],
28
+ tokens: ['mint', 'list', 'ls', 'revoke'],
29
+ endpoints: ['list', 'ls', 'show'],
30
+ };
31
+ export function completionCommand(shell) {
32
+ switch (shell) {
33
+ case 'bash':
34
+ process.stdout.write(bashScript());
35
+ return;
36
+ case 'zsh':
37
+ process.stdout.write(zshScript());
38
+ return;
39
+ case 'fish':
40
+ process.stdout.write(fishScript());
41
+ return;
42
+ default:
43
+ process.stderr.write(`Unsupported shell: ${shell}. Use one of: bash, zsh, fish\n`);
44
+ process.exit(1);
45
+ }
46
+ }
47
+ function bashScript() {
48
+ const top = TOP.join(' ');
49
+ const subCases = Object.entries(SUB)
50
+ .map(([cmd, subs]) => ` ${cmd}) COMPREPLY=( $(compgen -W "${subs.join(' ')}" -- "$cur") ); return 0 ;;`)
51
+ .join('\n');
52
+ return `# codata bash completion
53
+ _codata_complete() {
54
+ local cur prev cmd
55
+ COMPREPLY=()
56
+ cur="\${COMP_WORDS[COMP_CWORD]}"
57
+ prev="\${COMP_WORDS[COMP_CWORD-1]}"
58
+ cmd="\${COMP_WORDS[1]}"
59
+
60
+ if [[ $COMP_CWORD -eq 1 ]]; then
61
+ COMPREPLY=( $(compgen -W "${top}" -- "$cur") )
62
+ return 0
63
+ fi
64
+
65
+ if [[ $COMP_CWORD -eq 2 ]]; then
66
+ case "$cmd" in
67
+ ${subCases}
68
+ esac
69
+ fi
70
+ }
71
+ complete -F _codata_complete codata
72
+ `;
73
+ }
74
+ function zshScript() {
75
+ const top = TOP.join(' ');
76
+ const subCases = Object.entries(SUB)
77
+ .map(([cmd, subs]) => ` ${cmd}) compadd ${subs.join(' ')} ;;`)
78
+ .join('\n');
79
+ return `# codata zsh completion
80
+ _codata() {
81
+ local context state line
82
+ if (( CURRENT == 2 )); then
83
+ compadd ${top}
84
+ return
85
+ fi
86
+ if (( CURRENT == 3 )); then
87
+ case "\${words[2]}" in
88
+ ${subCases}
89
+ esac
90
+ fi
91
+ }
92
+ compdef _codata codata
93
+ `;
94
+ }
95
+ function fishScript() {
96
+ const lines = ['# codata fish completion'];
97
+ for (const c of TOP) {
98
+ lines.push(`complete -c codata -n "__fish_use_subcommand" -a "${c}"`);
99
+ }
100
+ for (const [cmd, subs] of Object.entries(SUB)) {
101
+ for (const s of subs) {
102
+ lines.push(`complete -c codata -n "__fish_seen_subcommand_from ${cmd}" -a "${s}"`);
103
+ }
104
+ }
105
+ return lines.join('\n') + '\n';
106
+ }
107
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/commands/completion.ts"],"names":[],"mappings":"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"}