@liquidmetal-ai/raindrop 0.3.0 → 0.3.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.
Files changed (42) hide show
  1. package/README.md +70 -39
  2. package/dist/base-command.d.ts +5 -5
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +1 -1
  5. package/dist/commands/build/branch.d.ts.map +1 -1
  6. package/dist/commands/build/branch.js +15 -2
  7. package/dist/commands/build/clone.d.ts +25 -0
  8. package/dist/commands/build/clone.d.ts.map +1 -0
  9. package/dist/commands/build/clone.js +146 -0
  10. package/dist/commands/build/delete.js +1 -1
  11. package/dist/commands/build/env/get.js +1 -1
  12. package/dist/commands/build/env/set.js +2 -2
  13. package/dist/commands/build/find.d.ts +2 -0
  14. package/dist/commands/build/find.d.ts.map +1 -1
  15. package/dist/commands/build/find.js +24 -18
  16. package/dist/commands/build/sandbox.d.ts.map +1 -1
  17. package/dist/commands/build/sandbox.js +18 -26
  18. package/dist/commands/build/start.js +1 -1
  19. package/dist/commands/build/status.js +2 -2
  20. package/dist/commands/build/stop.js +1 -1
  21. package/dist/commands/build/unsandbox.d.ts.map +1 -1
  22. package/dist/commands/build/unsandbox.js +18 -26
  23. package/dist/commands/build/upload.js +2 -2
  24. package/dist/commands/object/list.d.ts.map +1 -1
  25. package/dist/commands/object/list.js +4 -2
  26. package/dist/commands/query/chunk-search.d.ts.map +1 -1
  27. package/dist/commands/query/chunk-search.js +4 -1
  28. package/dist/commands/query/search.d.ts +1 -0
  29. package/dist/commands/query/search.d.ts.map +1 -1
  30. package/dist/commands/query/search.js +19 -3
  31. package/dist/deploy.d.ts +11 -0
  32. package/dist/deploy.d.ts.map +1 -1
  33. package/dist/deploy.js +32 -0
  34. package/dist/index.d.ts +6 -5
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -3
  37. package/dist/strict-client.d.ts +37 -0
  38. package/dist/strict-client.d.ts.map +1 -0
  39. package/dist/strict-client.js +10 -0
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/oclif.manifest.json +509 -397
  42. package/package.json +1 -1
@@ -12,6 +12,7 @@ export default class Find extends BaseCommand<typeof Find> {
12
12
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
13
  sudo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
14
  impersonate: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
17
  rainbowAuthService: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
18
  raindropCatalogService: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -25,6 +26,7 @@ export default class Find extends BaseCommand<typeof Find> {
25
26
  application?: string;
26
27
  version?: string;
27
28
  moduleType?: string;
29
+ all?: boolean;
28
30
  }): Promise<void>;
29
31
  queryResources(flags: {
30
32
  output: string;
@@ -1 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/commands/build/find.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;MA0CV;IAEI,YAAY,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAoDK,cAAc,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IA+C5G,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3B"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../src/commands/build/find.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAQpD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACxD,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAAgC;IAElD,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;MA6CV;IAEI,YAAY,CAAC,KAAK,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,GAAG,CAAC,EAAE,OAAO,CAAC;KACf;IAuDK,cAAc,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IA+C5G,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3B"}
@@ -54,36 +54,42 @@ export default class Find extends BaseCommand {
54
54
  required: false,
55
55
  hidden: true,
56
56
  }),
57
+ all: Flags.boolean({
58
+ description: 'query modules for all applications',
59
+ }),
57
60
  };
58
61
  async queryModules(flags) {
59
- if (!flags.version) {
60
- const config = await this.loadConfig();
61
- flags.version = config.versionId;
62
- }
63
- if (!flags.application) {
64
- const apps = await this.loadManifest();
65
- const app = apps[0];
66
- if (app === undefined) {
67
- this.error('No application provided or found in manifest', { exit: 1 });
62
+ let applicationName;
63
+ let applicationVersionId;
64
+ if (!flags.all) {
65
+ if (!flags.version) {
66
+ const config = await this.loadConfig();
67
+ applicationVersionId = config.versionId;
68
+ }
69
+ if (!flags.application) {
70
+ const apps = await this.loadManifest();
71
+ const app = apps[0];
72
+ if (app === undefined) {
73
+ this.error('No application provided or found in manifest', { exit: 1 });
74
+ }
75
+ applicationName = valueOf(app.name);
68
76
  }
69
- flags.application = valueOf(app.name);
70
77
  }
71
78
  const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
72
79
  const organizationId = this.flags.impersonate ?? defaultOrganizationId;
73
80
  const resp = await catalogService.queryModules({
74
81
  userId,
75
- applicationName: flags.application,
76
- applicationVersionId: flags.version,
82
+ applicationName: applicationName || '',
83
+ applicationVersionId: applicationVersionId || '',
77
84
  organizationId,
78
- moduleType: flags.moduleType,
85
+ moduleType: flags.moduleType || '',
79
86
  });
80
87
  if (flags.output === 'table') {
81
88
  console.table(resp.modules.reduce((acc, v) => {
82
89
  acc[v.name] = {
83
90
  ...v,
84
- attributes: JSON.stringify(v.attributes),
85
- createdAt: timestampDate(v.createdAt || EPOCH_TS).toISOString(),
86
- updatedAt: timestampDate(v.updatedAt || EPOCH_TS).toISOString(),
91
+ attributes: v.module.value,
92
+ convergedAt: v.convergedAt ? timestampDate(v.convergedAt).toISOString() : undefined,
87
93
  };
88
94
  return acc;
89
95
  },
@@ -95,7 +101,7 @@ export default class Find extends BaseCommand {
95
101
  }
96
102
  else {
97
103
  for (const m of resp.modules) {
98
- console.log(`${m.moduleId} ${m.name} ${m.type} ${timestampDate(m.createdAt || EPOCH_TS).toISOString()} ${timestampDate(m.updatedAt || EPOCH_TS).toISOString()} ${JSON.stringify(m.attributes)}`);
104
+ console.log(`${m.moduleId} ${m.name} ${m.type} ${m.convergedAt ? timestampDate(m.convergedAt).toISOString() : undefined} ${JSON.stringify(m.module.value)}`);
99
105
  }
100
106
  }
101
107
  }
@@ -117,7 +123,7 @@ export default class Find extends BaseCommand {
117
123
  const resp = await catalogService.queryResources({
118
124
  userId,
119
125
  applicationName: flags.application,
120
- applicationVersionId: flags.version,
126
+ applicationVersionId: flags.version || '',
121
127
  organizationId,
122
128
  });
123
129
  if (flags.output === 'table') {
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/sandbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW,CAAC,OAAO,OAAO,CAAC;IAC9D,MAAM,CAAC,IAAI,KAAM;IACjB,MAAM,CAAC,WAAW,SAAyD;IAE3E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAcV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW,CAAC,OAAO,OAAO,CAAC;IAC9D,MAAM,CAAC,IAAI,KAAM;IACjB,MAAM,CAAC,WAAW,SAAyD;IAE3E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAcV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
@@ -1,6 +1,6 @@
1
- import { valueOf } from '@liquidmetal-ai/drizzle/appify/build';
2
1
  import { Flags } from '@oclif/core';
3
2
  import { BaseCommand } from '../../base-command.js';
3
+ import { sandbox } from '../../deploy.js';
4
4
  export default class Sandbox extends BaseCommand {
5
5
  static args = {};
6
6
  static description = 'mark a version as sandboxed in the Raindrop catalog';
@@ -24,32 +24,24 @@ export default class Sandbox extends BaseCommand {
24
24
  }),
25
25
  };
26
26
  async run() {
27
- const config = await this.loadConfig();
28
- if (config.lock) {
29
- this.error('Operation not allowed: application is in a locked state');
27
+ let applications;
28
+ try {
29
+ applications = await sandbox({
30
+ command: this,
31
+ isSandboxed: true,
32
+ impersonate: this.flags.impersonate,
33
+ versionId: this.flags.version,
34
+ });
30
35
  }
31
- const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
32
- const organizationId = this.flags.impersonate ?? defaultOrganizationId;
33
- const apps = await this.loadManifest();
34
- const app = apps[0];
35
- const versionId = this.flags.version ?? config.versionId;
36
- if (!app) {
37
- this.error('No application found');
36
+ catch (error) {
37
+ if (error instanceof Error) {
38
+ this.error(error.message);
39
+ }
40
+ throw error;
41
+ }
42
+ for (const app of applications) {
43
+ const { applicationName, currentVersionId } = app;
44
+ this.log(`Set ${applicationName}@${currentVersionId} as sandboxed.`);
38
45
  }
39
- await catalogService.setSandbox({
40
- userId,
41
- organizationId,
42
- applications: [
43
- {
44
- applicationName: valueOf(app.name),
45
- currentVersionId: versionId,
46
- isSandboxed: true,
47
- },
48
- ],
49
- });
50
- // Mark application as sandboxed in config
51
- config.sandbox = true;
52
- await this.saveConfig(config);
53
- console.log(`Set ${valueOf(app.name)}@${versionId} as sandboxed.`);
54
46
  }
55
47
  }
@@ -58,7 +58,7 @@ Start a Raindrop application.
58
58
  applications: [
59
59
  {
60
60
  applicationName,
61
- currentVersionId,
61
+ currentVersionId: currentVersionId || '',
62
62
  isActive: true,
63
63
  },
64
64
  ],
@@ -81,7 +81,7 @@ export default class Status extends BaseCommand {
81
81
  userId,
82
82
  organizationId,
83
83
  applicationName: flags.application,
84
- currentVersionId: flags.version,
84
+ currentVersionId: flags.version || '',
85
85
  });
86
86
  if (applicationStatus === undefined) {
87
87
  this.error(`Application ${flags.application} not found`, { exit: 1 });
@@ -116,7 +116,7 @@ export default class Status extends BaseCommand {
116
116
  userId,
117
117
  organizationId,
118
118
  applicationName: flags.application,
119
- currentVersionId: flags.version,
119
+ currentVersionId: flags.version || '',
120
120
  });
121
121
  }
122
122
  }
@@ -59,7 +59,7 @@ Stop a Raindrop application.
59
59
  {
60
60
  applicationName,
61
61
  currentVersionId,
62
- isActive: true,
62
+ isActive: false,
63
63
  },
64
64
  ],
65
65
  });
@@ -1 +1 @@
1
- {"version":3,"file":"unsandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/unsandbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW,CAAC,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,IAAI,KAAM;IAEjB,MAAM,CAAC,WAAW,SAA2D;IAE7E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAcV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6B3B"}
1
+ {"version":3,"file":"unsandbox.d.ts","sourceRoot":"","sources":["../../../src/commands/build/unsandbox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW,CAAC,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,IAAI,KAAM;IACjB,MAAM,CAAC,WAAW,SAA2D;IAE7E,MAAM,CAAC,QAAQ,WAGb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAcV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB3B"}
@@ -1,6 +1,6 @@
1
- import { valueOf } from '@liquidmetal-ai/drizzle/appify/build';
2
1
  import { Flags } from '@oclif/core';
3
2
  import { BaseCommand } from '../../base-command.js';
3
+ import { sandbox } from '../../deploy.js';
4
4
  export default class Unsandbox extends BaseCommand {
5
5
  static args = {};
6
6
  static description = 'mark a version as unsandboxed in the Raindrop catalog';
@@ -24,32 +24,24 @@ export default class Unsandbox extends BaseCommand {
24
24
  }),
25
25
  };
26
26
  async run() {
27
- const config = await this.loadConfig();
28
- if (config.lock) {
29
- this.error('Operation not allowed: application is in a locked state');
27
+ let applications;
28
+ try {
29
+ applications = await sandbox({
30
+ command: this,
31
+ isSandboxed: false,
32
+ impersonate: this.flags.impersonate,
33
+ versionId: this.flags.version,
34
+ });
30
35
  }
31
- const { client: catalogService, userId, organizationId: defaultOrganizationId } = await this.catalogService();
32
- const organizationId = this.flags.impersonate ?? defaultOrganizationId;
33
- const apps = await this.loadManifest();
34
- const app = apps[0];
35
- const versionId = this.flags.version ?? config.versionId;
36
- if (!app) {
37
- this.error('No application found');
36
+ catch (error) {
37
+ if (error instanceof Error) {
38
+ this.error(error.message);
39
+ }
40
+ throw error;
41
+ }
42
+ for (const app of applications) {
43
+ const { applicationName, currentVersionId } = app;
44
+ this.log(`Set ${applicationName}@${currentVersionId} as unsandboxed.`);
38
45
  }
39
- await catalogService.setSandbox({
40
- userId,
41
- organizationId,
42
- applications: [
43
- {
44
- applicationName: valueOf(app.name),
45
- currentVersionId: versionId,
46
- isSandboxed: true,
47
- },
48
- ],
49
- });
50
- // Mark application as unsandboxed in config
51
- config.sandbox = false;
52
- await this.saveConfig(config);
53
- console.log(`Set ${valueOf(app.name)}@${versionId} as unsandboxed.`);
54
46
  }
55
47
  }
@@ -47,7 +47,7 @@ export default class Upload extends BaseCommand {
47
47
  userId,
48
48
  organizationId,
49
49
  applicationName: valueOf(app.name),
50
- applicationVersionId: this.flags.versionId || config.versionId,
50
+ applicationVersionId: this.flags.versionId || config.versionId || '',
51
51
  archiveType: BundleArchiveType.ZIP,
52
52
  bundleName: valueOf(handler.name),
53
53
  archive: Buffer.from(await archive(bundle)),
@@ -60,7 +60,7 @@ export default class Upload extends BaseCommand {
60
60
  userId,
61
61
  organizationId,
62
62
  applicationName: valueOf(app.name),
63
- applicationVersionId: this.flags.versionId || config.versionId,
63
+ applicationVersionId: this.flags.versionId || config.versionId || '',
64
64
  archiveType: BundleArchiveType.ZIP,
65
65
  bundleName: 'db',
66
66
  archive: Buffer.from(await archive(dbBundle)),
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/object/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACpE,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MA0BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiD3B"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/object/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACpE,MAAM,CAAC,WAAW,SAA8B;IAEhD,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MA0BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkD3B"}
@@ -1,6 +1,7 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import { BaseCommand } from '../../base-command.js';
3
3
  import { toJsonString } from '@bufbuild/protobuf';
4
+ import { timestampDate } from '@bufbuild/protobuf/wkt';
4
5
  import { ListObjectsResponseSchema } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
5
6
  export default class ObjectList extends BaseCommand {
6
7
  static description = 'List objects in a bucket';
@@ -64,16 +65,17 @@ List all objects in my-bucket
64
65
  key: obj.key,
65
66
  size: obj.size,
66
67
  contentType: obj.contentType,
67
- lastModified: obj.lastModified,
68
+ lastModified: obj.lastModified ? timestampDate(obj.lastModified).toUTCString() : 'N/A',
68
69
  })));
69
70
  break;
70
71
  default:
71
72
  console.log(`Objects in bucket ${flags.bucket}:`);
72
73
  for (const obj of response.objects) {
74
+ const lastModified = obj.lastModified ? timestampDate(obj.lastModified).toUTCString() : 'N/A';
73
75
  console.log(`Key: ${obj.key}`);
74
76
  console.log(` Size: ${obj.size} bytes`);
75
77
  console.log(` Content-Type: ${obj.contentType || 'N/A'}`);
76
- console.log(` Last Modified: ${obj.lastModified || 'N/A'}`);
78
+ console.log(` Last Modified: ${lastModified}`);
77
79
  console.log('---');
78
80
  }
79
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/chunk-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW,CAAC,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAoF;IAEtG,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAqBV;IAEI,WAAW,CAAC,KAAK,EAAE,MAAM;IA+BzB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3B"}
1
+ {"version":3,"file":"chunk-search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/chunk-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAAW,CAAC,OAAO,SAAS,CAAC;IAClE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAoF;IAEtG,MAAM,CAAC,QAAQ,WAIb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;MAqBV;IAEI,WAAW,CAAC,KAAK,EAAE,MAAM;IAkCzB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAI3B"}
@@ -39,9 +39,12 @@ Run a RAG search query against a Smart Bucket.
39
39
  }),
40
40
  };
41
41
  async searchAgent(query) {
42
- const { client: searchAgentService } = await this.searchAgentService();
42
+ const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
43
43
  // Run the RAG search
44
44
  const response = await searchAgentService.ragSearch({
45
+ userId,
46
+ organizationId,
47
+ bucketIds: [],
45
48
  requestId: ulid(),
46
49
  input: query,
47
50
  });
@@ -6,6 +6,7 @@ export default class AgentSearch extends BaseCommand<typeof AgentSearch> {
6
6
  static description: string;
7
7
  static examples: string[];
8
8
  static flags: {
9
+ buckets: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
10
  requestId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
11
  page: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
12
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW,CAAC,OAAO,WAAW,CAAC;IACtE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAsE;IAExF,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;MA8BV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyE3B"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/commands/query/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,WAAW,CAAC,OAAO,WAAW,CAAC;IACtE,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,WAAW,SAAsE;IAExF,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;;MAoCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoF3B"}
@@ -10,8 +10,8 @@ export default class AgentSearch extends BaseCommand {
10
10
  };
11
11
  static description = 'Run a search query against a smart bucket using natural language';
12
12
  static examples = [
13
- `<%= config.bin %> query search "What is LiquidMetal?"
14
- Run a new supervisor agent search query.
13
+ `<%= config.bin %> query search "What is LiquidMetal?" --buckets my-bucket-1 my-bucket-2
14
+ Run a new supervisor agent search query across multiple buckets.
15
15
  `,
16
16
  `<%= config.bin %> query search --requestId 01HNG4V2RJXS5T --page 2
17
17
  Get page 2 of previous search results.
@@ -19,6 +19,12 @@ Get page 2 of previous search results.
19
19
  ];
20
20
  static flags = {
21
21
  ...BaseCommand.HIDDEN_FLAGS,
22
+ buckets: Flags.string({
23
+ char: 'b',
24
+ description: 'bucket IDs to search in',
25
+ multiple: true,
26
+ required: false,
27
+ }),
22
28
  requestId: Flags.string({
23
29
  description: 'request ID for pagination',
24
30
  required: false,
@@ -50,7 +56,7 @@ Get page 2 of previous search results.
50
56
  };
51
57
  async run() {
52
58
  const { args, flags } = await this.parse(AgentSearch);
53
- const { client: searchAgentService } = await this.searchAgentService();
59
+ const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
54
60
  let response;
55
61
  let requestId;
56
62
  // If requestId is provided, we're doing pagination
@@ -63,6 +69,8 @@ Get page 2 of previous search results.
63
69
  requestId: flags.requestId,
64
70
  page: flags.page,
65
71
  pageSize: 15,
72
+ userId,
73
+ organizationId,
66
74
  });
67
75
  if (!response?.results?.length) {
68
76
  this.error(`No results found for request ID: ${flags.requestId}. The search session might have expired.`);
@@ -76,10 +84,18 @@ Get page 2 of previous search results.
76
84
  this.error('Search query is required when not using requestId');
77
85
  return;
78
86
  }
87
+ // Check if buckets were provided
88
+ if (!flags.buckets || flags.buckets.length === 0) {
89
+ this.error('At least one bucket ID must be specified using --buckets');
90
+ return;
91
+ }
79
92
  requestId = ulid();
80
93
  response = await searchAgentService.runSupervisorAgent({
81
94
  requestId,
82
95
  input: args.query,
96
+ bucketIds: [...flags.buckets],
97
+ userId,
98
+ organizationId,
83
99
  });
84
100
  }
85
101
  // Output results
package/dist/deploy.d.ts CHANGED
@@ -14,4 +14,15 @@ export interface DeployOptions<T extends typeof BaseCommand> {
14
14
  impersonate?: string;
15
15
  }
16
16
  export declare function deploy<T extends typeof BaseCommand>(options: DeployOptions<T>): Promise<string>;
17
+ export interface SandboxOptions<T extends typeof BaseCommand> {
18
+ command: BaseCommand<T>;
19
+ isSandboxed: boolean;
20
+ versionId?: string;
21
+ impersonate?: string;
22
+ }
23
+ export declare function sandbox<T extends typeof BaseCommand>(options: SandboxOptions<T>): Promise<{
24
+ applicationName: string;
25
+ currentVersionId: string;
26
+ isSandboxed: boolean;
27
+ }[]>;
17
28
  //# sourceMappingURL=deploy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,OAAO,WAAW;IAEzD,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAGxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAkHrG"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,OAAO,WAAW;IAEzD,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAGxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IAGf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,OAAO,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAmHrG;AAkID,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,WAAW;IAE1D,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAExB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,OAAO,CAAC,CAAC,SAAS,OAAO,WAAW,EACxD,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,GACzB,OAAO,CACR;IACE,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB,EAAE,CACJ,CAgCA"}
package/dist/deploy.js CHANGED
@@ -47,6 +47,7 @@ export async function deploy(options) {
47
47
  },
48
48
  manifest: manifestContents,
49
49
  lock: options.lock,
50
+ suite: '',
50
51
  },
51
52
  ],
52
53
  });
@@ -199,3 +200,34 @@ async function uploadDbBundle(command, root, catalogService, userId, organizatio
199
200
  }
200
201
  }
201
202
  }
203
+ export async function sandbox(options) {
204
+ const { command, versionId: versionIdRaw, impersonate, isSandboxed } = options;
205
+ const config = await command.loadConfig();
206
+ if (config.lock) {
207
+ throw new Error('Operation not allowed: application is in a locked state');
208
+ }
209
+ const { client: catalogService, userId, organizationId: defaultOrganizationId } = await command.catalogService();
210
+ const organizationId = impersonate ?? defaultOrganizationId;
211
+ const apps = await command.loadManifest();
212
+ const app = apps[0];
213
+ const versionId = versionIdRaw ?? config.versionId;
214
+ if (!app) {
215
+ throw new Error('No application found');
216
+ }
217
+ const applications = [
218
+ {
219
+ applicationName: valueOf(app.name),
220
+ currentVersionId: versionId,
221
+ isSandboxed,
222
+ },
223
+ ];
224
+ await catalogService.setSandbox({
225
+ userId,
226
+ organizationId,
227
+ applications,
228
+ });
229
+ // Mark application (un)sandboxed state in config
230
+ config.sandbox = isSandboxed;
231
+ await command.saveConfig(config);
232
+ return applications;
233
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type DescService } from '@bufbuild/protobuf';
2
- import { type Client, Interceptor } from '@connectrpc/connect';
2
+ import { type Interceptor } from '@connectrpc/connect';
3
+ import { StrictClient } from './strict-client.js';
3
4
  import { Application } from '@liquidmetal-ai/drizzle/appify/build';
4
5
  import { CatalogService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
5
6
  import { RainbowAuthService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/rainbow_auth_pb';
@@ -16,7 +17,7 @@ export type ServiceIdentity = {
16
17
  userId: string;
17
18
  };
18
19
  export declare function selectedOrganization(configDir: string): Promise<ServiceIdentity>;
19
- export declare function createAuthenticateInterceptor(configDir: string, rainbowAuth: Client<typeof RainbowAuthService>, overrideAuthToken?: string): {
20
+ export declare function createAuthenticateInterceptor(configDir: string, rainbowAuth: StrictClient<typeof RainbowAuthService>, overrideAuthToken?: string): {
20
21
  authenticate: Interceptor;
21
22
  };
22
23
  export declare function createTraceInterceptor(): Interceptor;
@@ -24,19 +25,19 @@ export declare function readState(configDir: string): Promise<RaindropState>;
24
25
  export declare function replaceState(configDir: string, state: RaindropState): Promise<void>;
25
26
  export declare function ensureDirectory(dir: string): Promise<void>;
26
27
  export declare function rainbowAuthService(baseUrl: string): Promise<{
27
- client: Client<typeof RainbowAuthService>;
28
+ client: StrictClient<typeof RainbowAuthService>;
28
29
  }>;
29
30
  export declare function catalogService(opts: ServiceClientOptions): Promise<ServiceClient<typeof CatalogService>>;
30
31
  export declare function searchAgentService(opts: ServiceClientOptions): Promise<ServiceClient<typeof SearchAgentService>>;
31
32
  export declare function objectService(opts: ServiceClientOptions): Promise<ServiceClient<typeof ObjectService>>;
32
33
  export type ServiceClientOptions = {
33
- rainbowAuth: Client<typeof RainbowAuthService>;
34
+ rainbowAuth: StrictClient<typeof RainbowAuthService>;
34
35
  configDir: string;
35
36
  identity: ServiceIdentity;
36
37
  overrideAuthToken?: string;
37
38
  };
38
39
  export type ServiceClient<T extends DescService> = {
39
- client: Client<T>;
40
+ client: StrictClient<T>;
40
41
  userId: string;
41
42
  organizationId: string;
42
43
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { create, toJsonString, fromJsonString } from '@bufbuild/protobuf';
2
2
  import { timestampDate, timestampFromDate } from '@bufbuild/protobuf/wkt';
3
- import { createClient } from '@connectrpc/connect';
3
+ import { createStrictClient } from './strict-client.js';
4
4
  import { createConnectTransport } from '@connectrpc/connect-web';
5
5
  import { fileURLToPath } from 'node:url';
6
6
  import { mustManifestFromString } from '@liquidmetal-ai/drizzle/appify/index';
@@ -156,7 +156,7 @@ export async function ensureDirectory(dir) {
156
156
  }
157
157
  export async function rainbowAuthService(baseUrl) {
158
158
  return {
159
- client: createClient(RainbowAuthService, createConnectTransport({
159
+ client: createStrictClient(RainbowAuthService, createConnectTransport({
160
160
  baseUrl,
161
161
  interceptors: [createTraceInterceptor()],
162
162
  })),
@@ -175,7 +175,7 @@ export async function serviceClient(service, { rainbowAuth, configDir, identity,
175
175
  const { baseUrl, organizationId, userId } = identity;
176
176
  const { authenticate } = createAuthenticateInterceptor(configDir, rainbowAuth, overrideAuthToken);
177
177
  return {
178
- client: createClient(service, createConnectTransport({
178
+ client: createStrictClient(service, createConnectTransport({
179
179
  baseUrl,
180
180
  interceptors: [authenticate, createTraceInterceptor()],
181
181
  })),
@@ -0,0 +1,37 @@
1
+ import { CallOptions, type Transport } from '@connectrpc/connect';
2
+ import { DescMessage, DescService, Message, MessageShape } from '@bufbuild/protobuf';
3
+ import { DescMethodUnary, DescMethodServerStreaming, DescMethodClientStreaming, DescMethodBiDiStreaming } from '@bufbuild/protobuf';
4
+ /**
5
+ * Removes the $typeName and $unknown properties from a message.
6
+ */
7
+ export type OmitTypeName<T extends Message> = {
8
+ [P in keyof T as P extends '$typeName' | '$unknown' ? never : P]: Recurse<T[P]>;
9
+ };
10
+ type Recurse<F> = F extends Array<infer U> ? Array<Recurse<U>> : F extends Message ? OmitTypeName<F> : F extends {
11
+ case: infer C extends string;
12
+ value: infer V extends Message;
13
+ } ? {
14
+ case: C;
15
+ value: OmitTypeName<V>;
16
+ } : F extends {
17
+ [key: string]: infer V extends Message;
18
+ } ? {
19
+ [key: string]: OmitTypeName<V>;
20
+ } : F extends {
21
+ [key: number]: infer V extends Message;
22
+ } ? {
23
+ [key: number]: OmitTypeName<V>;
24
+ } : F;
25
+ type Request<I extends DescMessage> = OmitTypeName<MessageShape<I>>;
26
+ export type StrictClient<T extends DescService> = {
27
+ [P in keyof T["method"]]: T["method"][P] extends DescMethodUnary<infer I, infer O> ? <R extends Request<I>>(request: R, options?: CallOptions) => Promise<MessageShape<O>> : T["method"][P] extends DescMethodServerStreaming<infer I, infer O> ? <R extends Request<I>>(request: R, options?: CallOptions) => AsyncIterable<MessageShape<O>> : T["method"][P] extends DescMethodClientStreaming<infer I, infer O> ? <R extends Request<I>>(request: AsyncIterable<R>, options?: CallOptions) => Promise<MessageShape<O>> : T["method"][P] extends DescMethodBiDiStreaming<infer I, infer O> ? <R extends Request<I>>(request: AsyncIterable<R>, options?: CallOptions) => AsyncIterable<MessageShape<O>> : never;
28
+ };
29
+ /**
30
+ * Create a strict client from a service definition and a transport.
31
+ *
32
+ * With a strict client, all non-optional properties of the request message must
33
+ * be specified.
34
+ */
35
+ export declare function createStrictClient<S extends DescService>(service: S, transport: Transport): StrictClient<S>;
36
+ export {};
37
+ //# sourceMappingURL=strict-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strict-client.d.ts","sourceRoot":"","sources":["../src/strict-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { createClient } from '@connectrpc/connect';
2
+ /**
3
+ * Create a strict client from a service definition and a transport.
4
+ *
5
+ * With a strict client, all non-optional properties of the request message must
6
+ * be specified.
7
+ */
8
+ export function createStrictClient(service, transport) {
9
+ return createClient(service, transport);
10
+ }