@agentuity/cli 2.0.14 → 2.0.15

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 (85) hide show
  1. package/dist/agent-detection.d.ts.map +1 -1
  2. package/dist/agent-detection.js +3 -6
  3. package/dist/agent-detection.js.map +1 -1
  4. package/dist/ai-help.js +10 -10
  5. package/dist/ai-help.js.map +1 -1
  6. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  7. package/dist/cmd/ai/capabilities/show.js +6 -0
  8. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  9. package/dist/cmd/ai/intro.d.ts.map +1 -1
  10. package/dist/cmd/ai/intro.js +1 -0
  11. package/dist/cmd/ai/intro.js.map +1 -1
  12. package/dist/cmd/cloud/aigateway/complete.d.ts +7 -0
  13. package/dist/cmd/cloud/aigateway/complete.d.ts.map +1 -0
  14. package/dist/cmd/cloud/aigateway/complete.js +386 -0
  15. package/dist/cmd/cloud/aigateway/complete.js.map +1 -0
  16. package/dist/cmd/cloud/aigateway/index.d.ts +3 -0
  17. package/dist/cmd/cloud/aigateway/index.d.ts.map +1 -0
  18. package/dist/cmd/cloud/aigateway/index.js +20 -0
  19. package/dist/cmd/cloud/aigateway/index.js.map +1 -0
  20. package/dist/cmd/cloud/aigateway/model-cache.d.ts +4 -0
  21. package/dist/cmd/cloud/aigateway/model-cache.d.ts.map +1 -0
  22. package/dist/cmd/cloud/aigateway/model-cache.js +72 -0
  23. package/dist/cmd/cloud/aigateway/model-cache.js.map +1 -0
  24. package/dist/cmd/cloud/aigateway/models.d.ts +2 -0
  25. package/dist/cmd/cloud/aigateway/models.d.ts.map +1 -0
  26. package/dist/cmd/cloud/aigateway/models.js +193 -0
  27. package/dist/cmd/cloud/aigateway/models.js.map +1 -0
  28. package/dist/cmd/cloud/aigateway/util.d.ts +20 -0
  29. package/dist/cmd/cloud/aigateway/util.d.ts.map +1 -0
  30. package/dist/cmd/cloud/aigateway/util.js +58 -0
  31. package/dist/cmd/cloud/aigateway/util.js.map +1 -0
  32. package/dist/cmd/cloud/index.d.ts.map +1 -1
  33. package/dist/cmd/cloud/index.js +2 -0
  34. package/dist/cmd/cloud/index.js.map +1 -1
  35. package/dist/cmd/coder/skill/create.d.ts +2 -0
  36. package/dist/cmd/coder/skill/create.d.ts.map +1 -0
  37. package/dist/cmd/coder/skill/create.js +104 -0
  38. package/dist/cmd/coder/skill/create.js.map +1 -0
  39. package/dist/cmd/coder/skill/index.d.ts.map +1 -1
  40. package/dist/cmd/coder/skill/index.js +12 -1
  41. package/dist/cmd/coder/skill/index.js.map +1 -1
  42. package/dist/cmd/coder/workspace/common.d.ts +22 -2
  43. package/dist/cmd/coder/workspace/common.d.ts.map +1 -1
  44. package/dist/cmd/coder/workspace/common.js +38 -2
  45. package/dist/cmd/coder/workspace/common.js.map +1 -1
  46. package/dist/cmd/coder/workspace/create.d.ts.map +1 -1
  47. package/dist/cmd/coder/workspace/create.js +34 -2
  48. package/dist/cmd/coder/workspace/create.js.map +1 -1
  49. package/dist/cmd/coder/workspace/update.d.ts.map +1 -1
  50. package/dist/cmd/coder/workspace/update.js +33 -1
  51. package/dist/cmd/coder/workspace/update.js.map +1 -1
  52. package/dist/cmd/dev/download.d.ts +8 -0
  53. package/dist/cmd/dev/download.d.ts.map +1 -1
  54. package/dist/cmd/dev/download.js +27 -1
  55. package/dist/cmd/dev/download.js.map +1 -1
  56. package/dist/cmd/dev/index.d.ts.map +1 -1
  57. package/dist/cmd/dev/index.js +18 -7
  58. package/dist/cmd/dev/index.js.map +1 -1
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +3 -0
  61. package/dist/config.js.map +1 -1
  62. package/dist/types.d.ts +3 -2
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +1 -0
  65. package/dist/types.js.map +1 -1
  66. package/package.json +7 -7
  67. package/src/agent-detection.ts +3 -6
  68. package/src/ai-help.ts +10 -10
  69. package/src/cmd/ai/capabilities/show.ts +6 -0
  70. package/src/cmd/ai/intro.ts +1 -0
  71. package/src/cmd/cloud/aigateway/complete.ts +461 -0
  72. package/src/cmd/cloud/aigateway/index.ts +21 -0
  73. package/src/cmd/cloud/aigateway/model-cache.ts +89 -0
  74. package/src/cmd/cloud/aigateway/models.ts +219 -0
  75. package/src/cmd/cloud/aigateway/util.ts +86 -0
  76. package/src/cmd/cloud/index.ts +2 -0
  77. package/src/cmd/coder/skill/create.ts +122 -0
  78. package/src/cmd/coder/skill/index.ts +14 -1
  79. package/src/cmd/coder/workspace/common.ts +46 -2
  80. package/src/cmd/coder/workspace/create.ts +34 -1
  81. package/src/cmd/coder/workspace/update.ts +33 -0
  82. package/src/cmd/dev/download.ts +32 -1
  83. package/src/cmd/dev/index.ts +24 -8
  84. package/src/config.ts +3 -0
  85. package/src/types.ts +1 -0
@@ -1,5 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { existsSync, mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs';
3
3
  import { tmpdir, platform } from 'node:os';
4
4
  import { join, dirname } from 'node:path';
5
5
  import * as tar from 'tar';
@@ -11,6 +11,37 @@ interface GravityClient {
11
11
  version: string;
12
12
  }
13
13
 
14
+ /**
15
+ * Remove previously downloaded gravity version directories after a newer
16
+ * version has started successfully.
17
+ *
18
+ * Safety guard: only removes sibling directories that contain a gravity
19
+ * binary, leaving any unrelated files/folders untouched.
20
+ */
21
+ export function sweepOldGravityVersions(gravityDir: string, currentVersion: string): string[] {
22
+ if (!existsSync(gravityDir)) {
23
+ return [];
24
+ }
25
+
26
+ const removed: string[] = [];
27
+ for (const entry of readdirSync(gravityDir, { withFileTypes: true })) {
28
+ if (!entry.isDirectory() || entry.name === currentVersion) {
29
+ continue;
30
+ }
31
+
32
+ const candidateDir = join(gravityDir, entry.name);
33
+ const candidateBinary = join(candidateDir, 'gravity');
34
+ if (!existsSync(candidateBinary)) {
35
+ continue;
36
+ }
37
+
38
+ rmSync(candidateDir, { recursive: true, force: true });
39
+ removed.push(candidateDir);
40
+ }
41
+
42
+ return removed;
43
+ }
44
+
14
45
  const GravityVersionError = StructuredError('GravityVersionError')<{
15
46
  status: number;
16
47
  statusText: string;
@@ -9,7 +9,7 @@ import * as tui from '../../tui';
9
9
  import { getCommand } from '../../command-prefix';
10
10
  import { generateEndpoint, type DevmodeResponse } from './api';
11
11
  import { APIClient, getAPIBaseURL, getAppBaseURL, getGravityDevModeURL } from '../../api';
12
- import { download } from './download';
12
+ import { download, sweepOldGravityVersions } from './download';
13
13
  import { createDevmodeSyncService } from './sync';
14
14
  import { getDevmodeDeploymentId } from '../build/ids';
15
15
  import { getDefaultConfigDir, saveConfig, loadProjectSDKKey, getAuth } from '../../config';
@@ -411,6 +411,7 @@ export const command = createCommand({
411
411
  let devmode: DevmodeResponse | undefined;
412
412
  let gravityBin: string | undefined;
413
413
  let gravityURL: string | undefined;
414
+ let gravitySweepTarget: { gravityDir: string; version: string } | null = null;
414
415
  let appURL: string | undefined;
415
416
  let savedPrivateKey: string | undefined = config?.devmode?.privateKey
416
417
  ? Buffer.from(config.devmode.privateKey, 'base64').toString('utf-8')
@@ -465,8 +466,12 @@ export const command = createCommand({
465
466
  }
466
467
 
467
468
  if (mustCheck) {
469
+ const previousGravityVersion = config?.gravity?.version;
468
470
  const res = await download(gravityDir);
469
471
  gravityBin = res.filename;
472
+ if (previousGravityVersion !== res.version) {
473
+ gravitySweepTarget = { gravityDir, version: res.version };
474
+ }
470
475
  const _config = { ...config } as Config;
471
476
  _config.gravity = {
472
477
  checked: Date.now(),
@@ -494,10 +499,6 @@ export const command = createCommand({
494
499
 
495
500
  // Calculate URLs for banner
496
501
  const padding = 12;
497
- const workbenchUrl =
498
- auth && project?.projectId
499
- ? `${getAppBaseURL(config)}/w/${project.projectId}`
500
- : `http://127.0.0.1:${opts.port}${workbench.config?.route ?? '/workbench'}`;
501
502
 
502
503
  const devmodebody =
503
504
  tui.muted(tui.padRight('Local:', padding)) +
@@ -506,9 +507,6 @@ export const command = createCommand({
506
507
  tui.muted(tui.padRight('Public:', padding)) +
507
508
  (devmode?.hostname ? tui.link(`https://${devmode.hostname}`) : tui.warn('Disabled')) +
508
509
  '\n' +
509
- tui.muted(tui.padRight('Workbench:', padding)) +
510
- (workbench.hasWorkbench ? tui.link(workbenchUrl) : tui.warn('Disabled')) +
511
- '\n' +
512
510
  tui.muted(tui.padRight('Dashboard:', padding)) +
513
511
  (appURL ? tui.link(appURL) : tui.warn('Disabled')) +
514
512
  '\n' +
@@ -1133,6 +1131,24 @@ export const command = createCommand({
1133
1131
  sendHeartbeat();
1134
1132
  gravityHeartbeatInterval = setInterval(sendHeartbeat, 5000);
1135
1133
  }
1134
+
1135
+ if (gravitySweepTarget) {
1136
+ try {
1137
+ const removed = sweepOldGravityVersions(
1138
+ gravitySweepTarget.gravityDir,
1139
+ gravitySweepTarget.version
1140
+ );
1141
+ logger.debug(
1142
+ 'Swept %d old gravity version director%s after successful startup',
1143
+ removed.length,
1144
+ removed.length === 1 ? 'y' : 'ies'
1145
+ );
1146
+ } catch (error) {
1147
+ logger.warn('Failed to sweep old gravity versions: %s', error);
1148
+ } finally {
1149
+ gravitySweepTarget = null;
1150
+ }
1151
+ }
1136
1152
  } else if (trimmed) {
1137
1153
  logger.debug('[gravity] %s', trimmed);
1138
1154
  }
package/src/config.ts CHANGED
@@ -226,6 +226,9 @@ export async function loadConfig(
226
226
  if (process.env.AGENTUITY_VECTOR_URL) {
227
227
  overrides.vector_url = process.env.AGENTUITY_VECTOR_URL;
228
228
  }
229
+ if (process.env.AGENTUITY_AIGATEWAY_URL) {
230
+ overrides.aigateway_url = process.env.AGENTUITY_AIGATEWAY_URL;
231
+ }
229
232
  if (process.env.AGENTUITY_STREAM_URL) {
230
233
  overrides.stream_url = process.env.AGENTUITY_STREAM_URL;
231
234
  }
package/src/types.ts CHANGED
@@ -41,6 +41,7 @@ export const ConfigSchema = zod.object({
41
41
  kv_url: zod.url().optional().describe('Override keyvalue URL'),
42
42
  sandbox_url: zod.url().optional().describe('Override sandbox URL'),
43
43
  vector_url: zod.url().optional().describe('Override vector store URL'),
44
+ aigateway_url: zod.url().optional().describe('Override AI Gateway URL'),
44
45
  catalyst_url: zod.url().optional().describe('Override catalyst URL'),
45
46
  ion_url: zod.url().optional().describe('Override ion URL'),
46
47
  gravity_url: zod.url().optional().describe('Override gravity URL'),