@liquidmetal-ai/raindrop 0.3.4 → 0.4.0

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 +99 -105
  2. package/dist/base-command.d.ts +1 -1
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +5 -2
  5. package/dist/commands/build/branch.js +1 -1
  6. package/dist/commands/build/clone.d.ts.map +1 -1
  7. package/dist/commands/build/clone.js +0 -4
  8. package/dist/commands/build/delete.js +1 -1
  9. package/dist/commands/build/deploy.js +1 -1
  10. package/dist/commands/build/env/get.js +1 -1
  11. package/dist/commands/build/env/set.js +1 -1
  12. package/dist/commands/build/find.js +1 -1
  13. package/dist/commands/build/generate.js +1 -1
  14. package/dist/commands/build/list.js +1 -1
  15. package/dist/commands/build/start.js +1 -1
  16. package/dist/commands/build/status.js +1 -1
  17. package/dist/commands/build/stop.js +1 -1
  18. package/dist/commands/build/upload.js +1 -1
  19. package/dist/commands/build/validate.js +1 -1
  20. package/dist/commands/object/delete.d.ts +2 -1
  21. package/dist/commands/object/delete.d.ts.map +1 -1
  22. package/dist/commands/object/delete.js +48 -5
  23. package/dist/commands/object/get.d.ts +2 -1
  24. package/dist/commands/object/get.d.ts.map +1 -1
  25. package/dist/commands/object/get.js +46 -5
  26. package/dist/commands/object/list.d.ts +2 -1
  27. package/dist/commands/object/list.d.ts.map +1 -1
  28. package/dist/commands/object/list.js +48 -7
  29. package/dist/commands/object/put.d.ts +2 -1
  30. package/dist/commands/object/put.d.ts.map +1 -1
  31. package/dist/commands/object/put.js +50 -6
  32. package/dist/commands/query/chunk-search.d.ts +2 -0
  33. package/dist/commands/query/chunk-search.d.ts.map +1 -1
  34. package/dist/commands/query/chunk-search.js +38 -2
  35. package/dist/commands/query/search.d.ts +1 -0
  36. package/dist/commands/query/search.d.ts.map +1 -1
  37. package/dist/commands/query/search.js +34 -9
  38. package/dist/index.d.ts +10 -3
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +24 -7
  41. package/oclif.manifest.json +366 -303
  42. package/package.json +2 -1
@@ -18,6 +18,18 @@ Run a RAG search query against a Smart Bucket.
18
18
  ];
19
19
  static flags = {
20
20
  ...BaseCommand.HIDDEN_FLAGS,
21
+ buckets: Flags.string({
22
+ char: 'b',
23
+ description: 'Bucket names to search in, version can be specified with @, e.g. my-bucket@versionId',
24
+ multiple: true,
25
+ required: false,
26
+ }),
27
+ moduleIds: Flags.string({
28
+ char: 'm',
29
+ description: 'Module IDs to search in',
30
+ multiple: true,
31
+ required: false,
32
+ }),
21
33
  output: Flags.string({
22
34
  char: 'o',
23
35
  description: 'output format',
@@ -31,7 +43,7 @@ Run a RAG search query against a Smart Bucket.
31
43
  hidden: true,
32
44
  }),
33
45
  manifest: Flags.string({
34
- char: 'm',
46
+ char: 'M',
35
47
  description: 'project manifest',
36
48
  required: false,
37
49
  default: 'raindrop.manifest',
@@ -39,12 +51,36 @@ Run a RAG search query against a Smart Bucket.
39
51
  }),
40
52
  };
41
53
  async searchAgent(query) {
54
+ // Check if both buckets and moduleIds flags are set
55
+ if (this.flags.buckets?.length && this.flags.moduleIds?.length) {
56
+ this.error('Cannot specify both --buckets and --moduleIds flags. Please use only one type of filter.');
57
+ }
42
58
  const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
43
59
  // Run the RAG search
44
60
  const response = await searchAgentService.ragSearch({
45
61
  userId,
46
62
  organizationId,
47
- bucketIds: [],
63
+ bucketLocations: [
64
+ ...(this.flags.buckets || []).map((bucket) => {
65
+ //string split on @ to get bucket name and version
66
+ const [bucketName, version] = bucket.split('@');
67
+ return {
68
+ bucketLocation: {
69
+ case: 'bucket',
70
+ value: {
71
+ name: bucketName,
72
+ version: version || '',
73
+ },
74
+ },
75
+ };
76
+ }),
77
+ ...(this.flags.moduleIds || []).map((moduleId) => ({
78
+ bucketLocation: {
79
+ case: 'moduleId',
80
+ value: moduleId,
81
+ },
82
+ })),
83
+ ],
48
84
  requestId: ulid(),
49
85
  input: query,
50
86
  });
@@ -7,6 +7,7 @@ export default class AgentSearch extends BaseCommand<typeof AgentSearch> {
7
7
  static examples: string[];
8
8
  static flags: {
9
9
  buckets: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ moduleIds: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
11
  requestId: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
12
  page: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
13
  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;;;;;;;;;;;;;MAoCV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoF3B"}
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;;;;;;;;;;;;;;MA0CV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsG3B"}
@@ -21,7 +21,13 @@ Get page 2 of previous search results.
21
21
  ...BaseCommand.HIDDEN_FLAGS,
22
22
  buckets: Flags.string({
23
23
  char: 'b',
24
- description: 'bucket IDs to search in',
24
+ description: 'Bucket names to search in, version can be specified with @, e.g. my-bucket@versionId',
25
+ multiple: true,
26
+ required: false,
27
+ }),
28
+ moduleIds: Flags.string({
29
+ char: 'm',
30
+ description: 'Module IDs to search in',
25
31
  multiple: true,
26
32
  required: false,
27
33
  }),
@@ -47,7 +53,7 @@ Get page 2 of previous search results.
47
53
  hidden: true,
48
54
  }),
49
55
  manifest: Flags.string({
50
- char: 'm',
56
+ char: 'M',
51
57
  description: 'project manifest',
52
58
  required: false,
53
59
  default: 'raindrop.manifest',
@@ -55,6 +61,10 @@ Get page 2 of previous search results.
55
61
  }),
56
62
  };
57
63
  async run() {
64
+ // Check if both buckets and moduleIds flags are set
65
+ if (this.flags.buckets?.length && this.flags.moduleIds?.length) {
66
+ this.error('Cannot specify both --buckets and --moduleIds flags. Please use only one type of filter.');
67
+ }
58
68
  const { args, flags } = await this.parse(AgentSearch);
59
69
  const { client: searchAgentService, userId, organizationId } = await this.searchAgentService();
60
70
  let response;
@@ -84,16 +94,31 @@ Get page 2 of previous search results.
84
94
  this.error('Search query is required when not using requestId');
85
95
  return;
86
96
  }
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
- }
92
97
  requestId = ulid();
93
98
  response = await searchAgentService.runSupervisorAgent({
94
99
  requestId,
95
100
  input: args.query,
96
- bucketIds: [...flags.buckets],
101
+ bucketLocations: [
102
+ ...(this.flags.buckets || []).map((bucket) => {
103
+ //string split on @ to get bucket name and version
104
+ const [bucketName, version] = bucket.split('@');
105
+ return {
106
+ bucketLocation: {
107
+ case: 'bucket',
108
+ value: {
109
+ name: bucketName,
110
+ version: version || '',
111
+ },
112
+ },
113
+ };
114
+ }),
115
+ ...(this.flags.moduleIds || []).map((moduleId) => ({
116
+ bucketLocation: {
117
+ case: 'moduleId',
118
+ value: moduleId,
119
+ },
120
+ })),
121
+ ],
97
122
  userId,
98
123
  organizationId,
99
124
  });
@@ -111,7 +136,7 @@ Get page 2 of previous search results.
111
136
  console.log('----------------------------------------');
112
137
  console.log(`Type: ${result.type || 'N/A'}`);
113
138
  console.log(`Score: ${result.score || 0}`);
114
- console.log(`Source: ${result.source ? `${result.source.bucket}/${result.source.object}` : 'N/A'}`);
139
+ console.log(`Source: ${result.source ? `${result.source.bucket?.bucketName}/${result.source.object}` : 'N/A'}`);
115
140
  console.log(`Content: ${result.text || 'N/A'}`);
116
141
  console.log('----------------------------------------\n');
117
142
  }
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import { type DescService } from '@bufbuild/protobuf';
2
2
  import { type Interceptor } from '@connectrpc/connect';
3
- import { StrictClient } from './strict-client.js';
4
3
  import { Application } from '@liquidmetal-ai/drizzle/appify/build';
5
4
  import { CatalogService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
5
+ import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
6
6
  import { RainbowAuthService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/rainbow_auth_pb';
7
7
  import { type RaindropState } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/raindrop_pb';
8
- import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
9
8
  import { SearchAgentService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/search_agent_pb';
9
+ import { StrictClient } from './strict-client.js';
10
10
  export { run } from '@oclif/core';
11
11
  export declare const EPOCH_TS: import("@bufbuild/protobuf/wkt").Timestamp;
12
12
  export declare function configFromAppFile(appFile: string): Promise<Application[]>;
@@ -21,6 +21,9 @@ export declare function createAuthenticateInterceptor(configDir: string, rainbow
21
21
  authenticate: Interceptor;
22
22
  };
23
23
  export declare function createTraceInterceptor(): Interceptor;
24
+ export declare function versionInterceptor(logger?: {
25
+ warn: (input: Error | string) => void;
26
+ }): Interceptor;
24
27
  export declare function readState(configDir: string): Promise<RaindropState>;
25
28
  export declare function replaceState(configDir: string, state: RaindropState): Promise<void>;
26
29
  export declare function ensureDirectory(dir: string): Promise<void>;
@@ -35,13 +38,17 @@ export type ServiceClientOptions = {
35
38
  configDir: string;
36
39
  identity: ServiceIdentity;
37
40
  overrideAuthToken?: string;
41
+ logger?: {
42
+ warn(input: Error | string): void;
43
+ error(input: Error | string): void;
44
+ };
38
45
  };
39
46
  export type ServiceClient<T extends DescService> = {
40
47
  client: StrictClient<T>;
41
48
  userId: string;
42
49
  organizationId: string;
43
50
  };
44
- export declare function serviceClient<T extends DescService>(service: T, { rainbowAuth, configDir, identity, overrideAuthToken }: ServiceClientOptions): Promise<ServiceClient<T>>;
51
+ export declare function serviceClient<T extends DescService>(service: T, { rainbowAuth, configDir, identity, overrideAuthToken, logger }: ServiceClientOptions): Promise<ServiceClient<T>>;
45
52
  /**
46
53
  * Gets the current version of the raindrop package
47
54
  * @returns The package version string or 'unknown' if it cannot be determined
@@ -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,18 +1,20 @@
1
- import { create, toJsonString, fromJsonString } from '@bufbuild/protobuf';
1
+ import { create, fromJsonString, toJsonString } from '@bufbuild/protobuf';
2
2
  import { timestampDate, timestampFromDate } from '@bufbuild/protobuf/wkt';
3
- import { createStrictClient } from './strict-client.js';
4
3
  import { createConnectTransport } from '@connectrpc/connect-web';
5
- import { fileURLToPath } from 'node:url';
6
4
  import { mustManifestFromString } from '@liquidmetal-ai/drizzle/appify/index';
7
5
  import { CatalogService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/catalog_pb';
6
+ import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
8
7
  import { RainbowAuthService, RefreshAccessTokenRequestSchema, } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/rainbow_auth_pb';
9
8
  import { RaindropStateSchema } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/raindrop_pb';
10
- import { ObjectService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/object_pb';
11
9
  import { SearchAgentService } from '@liquidmetal-ai/drizzle/liquidmetal/v1alpha1/search_agent_pb';
10
+ import { RAINDROP_CLI_VERSION_HEADER, RAINDROP_SERVICE_VERSION_HEADER } from '@liquidmetal-ai/drizzle/raindrop/index';
12
11
  import { Mutex } from 'async-mutex';
13
- import { subSeconds, isAfter } from 'date-fns';
12
+ import { isAfter, subSeconds } from 'date-fns';
14
13
  import * as fs from 'node:fs/promises';
15
14
  import * as path from 'node:path';
15
+ import { fileURLToPath } from 'node:url';
16
+ import semver from 'semver';
17
+ import { createStrictClient } from './strict-client.js';
16
18
  import { traceStore } from './trace.js';
17
19
  export { run } from '@oclif/core';
18
20
  export const EPOCH_TS = timestampFromDate(new Date(0));
@@ -119,6 +121,21 @@ export function createTraceInterceptor() {
119
121
  });
120
122
  };
121
123
  }
124
+ // Creates an interceptor that adds the current CLI version to request headers
125
+ export function versionInterceptor(logger) {
126
+ return (next) => async (req) => {
127
+ const version = await getCurrentVersion();
128
+ req.header.set(RAINDROP_CLI_VERSION_HEADER, version);
129
+ const response = await next(req);
130
+ const raindropServiceVersion = response.header.get(RAINDROP_SERVICE_VERSION_HEADER) ?? '0.3.4';
131
+ if (semver.lt(version, raindropServiceVersion)) {
132
+ if (logger) {
133
+ logger.warn(`[WARN] A newer version of Raindrop is available. Please update raindrop with "npm install -g @liquidmetal-ai/raindrop@${raindropServiceVersion}"`);
134
+ }
135
+ }
136
+ return response;
137
+ };
138
+ }
122
139
  const configBasename = 'raindrop.json';
123
140
  export async function readState(configDir) {
124
141
  const filename = path.join(configDir, configBasename);
@@ -171,13 +188,13 @@ export async function searchAgentService(opts) {
171
188
  export async function objectService(opts) {
172
189
  return serviceClient(ObjectService, opts);
173
190
  }
174
- export async function serviceClient(service, { rainbowAuth, configDir, identity, overrideAuthToken }) {
191
+ export async function serviceClient(service, { rainbowAuth, configDir, identity, overrideAuthToken, logger }) {
175
192
  const { baseUrl, organizationId, userId } = identity;
176
193
  const { authenticate } = createAuthenticateInterceptor(configDir, rainbowAuth, overrideAuthToken);
177
194
  return {
178
195
  client: createStrictClient(service, createConnectTransport({
179
196
  baseUrl,
180
- interceptors: [authenticate, createTraceInterceptor()],
197
+ interceptors: [authenticate, versionInterceptor(logger), createTraceInterceptor()],
181
198
  })),
182
199
  userId,
183
200
  organizationId,