@larkup/cli 0.2.25 → 0.2.26

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 (45) hide show
  1. package/README.md +8 -0
  2. package/dist/{analytics-store-KI3NXDYV.js → analytics-store-4NYU7DMO.js} +2 -2
  3. package/dist/api-X4PHQJTH.js +6943 -0
  4. package/dist/bowser-GZLEN3PD.js +2821 -0
  5. package/dist/{chroma-BCASZNMJ.js → chroma-RJVBZZMP.js} +2 -11
  6. package/dist/chunk-3EBUYTA7.js +136 -0
  7. package/dist/chunk-4XN2IRCG.js +46 -0
  8. package/dist/{chunk-FM6HYXZ5.js → chunk-5UWKP64Q.js} +24 -72
  9. package/dist/chunk-65EVYGDT.js +2904 -0
  10. package/dist/chunk-A7HMSODH.js +126 -0
  11. package/dist/chunk-BDMLJQRN.js +534 -0
  12. package/dist/chunk-FUTLPXFR.js +921 -0
  13. package/dist/chunk-HAABLEPO.js +1570 -0
  14. package/dist/chunk-HOPZALAP.js +449 -0
  15. package/dist/{chunk-L34L3RDQ.js → chunk-JZ3UCEGF.js} +157 -197
  16. package/dist/chunk-MACWQEJS.js +2091 -0
  17. package/dist/chunk-MYOADNR2.js +515 -0
  18. package/dist/chunk-N6IF5QLH.js +1850 -0
  19. package/dist/chunk-ODWAFTDP.js +1711 -0
  20. package/dist/chunk-QGM4M3NI.js +37 -0
  21. package/dist/chunk-S5DCG3CZ.js +41 -0
  22. package/dist/{chunk-I6JJWCUQ.js → chunk-V3VNCOZ6.js} +118 -29
  23. package/dist/dist-es-5DTOPEBY.js +322 -0
  24. package/dist/dist-es-BM4STLL5.js +70 -0
  25. package/dist/dist-es-DS5SFRTK.js +377 -0
  26. package/dist/dist-es-F6WXDZQY.js +88 -0
  27. package/dist/dist-es-KMHWFNXI.js +295 -0
  28. package/dist/dist-es-LRDDK5LI.js +11761 -0
  29. package/dist/dist-es-LWW2DNRF.js +139 -0
  30. package/dist/dist-es-NEADJWQM.js +176 -0
  31. package/dist/dist-es-S5FAFKBD.js +23 -0
  32. package/dist/dist-es-YD724GH3.js +221 -0
  33. package/dist/event-streams-NPIZBVLJ.js +43 -0
  34. package/dist/index.js +2074 -1768
  35. package/dist/{lancedb-UB2EPDCN.js → lancedb-TCUZKSHN.js} +1 -1
  36. package/dist/lexer-DQCqS3nf-CGRGK47I.js +62 -0
  37. package/dist/loadSso-HXXA5UNF.js +584 -0
  38. package/dist/{pinecone-OHOY4YYM.js → pinecone-ME3YOCQJ.js} +3 -21
  39. package/dist/signin-7FUGJFG3.js +822 -0
  40. package/dist/sso-oidc-EPMF7LMF.js +838 -0
  41. package/dist/sts-RBEOIBEJ.js +1118 -0
  42. package/dist/{tool-loader-KKODIWEV.js → tool-loader-PEQZZWTB.js} +3 -3
  43. package/dist/{tool-registry-CXCFMOWA.js → tool-registry-VJYLRXKJ.js} +2 -2
  44. package/package.json +20 -16
  45. package/dist/chunk-3RG5ZIWI.js +0 -10
@@ -1,4 +1,4 @@
1
- import "./chunk-3RG5ZIWI.js";
1
+ import "./chunk-QGM4M3NI.js";
2
2
 
3
3
  // ../../packages/vector-stores/src/adapters/chroma.ts
4
4
  var RRF_K = 60;
@@ -10,11 +10,7 @@ var ChromaAdapter = class {
10
10
  client = null;
11
11
  collection = null;
12
12
  collectionName;
13
- /**
14
- * Lazily connect to the Chroma server or cloud.
15
- * The `chromadb` package is dynamically imported to avoid module-eval
16
- * failures when the package isn't installed.
17
- */
13
+ /** Lazily load the optional Chroma client. */
18
14
  async getClient() {
19
15
  if (this.client) return this.client;
20
16
  let chromadb;
@@ -64,7 +60,6 @@ var ChromaAdapter = class {
64
60
  });
65
61
  return this.collection;
66
62
  }
67
- // ── Lifecycle ──────────────────────────────────────────────────────────────
68
63
  async init(_dimensions) {
69
64
  await this.getCollection();
70
65
  }
@@ -85,7 +80,6 @@ var ChromaAdapter = class {
85
80
  console.error("Failed to delete vectors by documentIds in Chroma:", err);
86
81
  }
87
82
  }
88
- // ── Upsert ─────────────────────────────────────────────────────────────────
89
83
  async upsert(records) {
90
84
  if (records.length === 0) return;
91
85
  const collection = await this.getCollection();
@@ -129,7 +123,6 @@ var ChromaAdapter = class {
129
123
  }
130
124
  return meta;
131
125
  }
132
- // ── Count ──────────────────────────────────────────────────────────────────
133
126
  async count() {
134
127
  try {
135
128
  const collection = await this.getCollection();
@@ -138,7 +131,6 @@ var ChromaAdapter = class {
138
131
  return null;
139
132
  }
140
133
  }
141
- // ── Query ──────────────────────────────────────────────────────────────────
142
134
  async query(vector, topK, queryText) {
143
135
  const collection = await this.getCollection();
144
136
  const isSemantic = this.config.indexType === "semantic";
@@ -217,7 +209,6 @@ var ChromaAdapter = class {
217
209
  };
218
210
  });
219
211
  }
220
- // ── Connection test ────────────────────────────────────────────────────────
221
212
  async testConnection(_dimensions) {
222
213
  let client;
223
214
  try {
@@ -0,0 +1,136 @@
1
+ import {
2
+ SignatureV4,
3
+ signatureV4aContainer
4
+ } from "./chunk-BDMLJQRN.js";
5
+
6
+ // ../../node_modules/.pnpm/@aws-sdk+signature-v4-multi-region@3.996.46/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/signature-v4-crt-container.js
7
+ var signatureV4CrtContainer = {
8
+ CrtSignerV4: null
9
+ };
10
+
11
+ // ../../node_modules/.pnpm/@aws-sdk+signature-v4-multi-region@3.996.46/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/SignatureV4SignWithCredentials.js
12
+ var SESSION_TOKEN_QUERY_PARAM = "X-Amz-S3session-Token";
13
+ var SESSION_TOKEN_HEADER = SESSION_TOKEN_QUERY_PARAM.toLowerCase();
14
+ var SignatureV4SignWithCredentials = class extends SignatureV4 {
15
+ async signWithCredentials(requestToSign, credentials, options) {
16
+ const credentialsWithoutSessionToken = getCredentialsWithoutSessionToken(credentials);
17
+ requestToSign.headers[SESSION_TOKEN_HEADER] = credentials.sessionToken;
18
+ const privateAccess = this;
19
+ setSingleOverride(privateAccess, credentialsWithoutSessionToken);
20
+ return privateAccess.signRequest(requestToSign, options ?? {});
21
+ }
22
+ async presignWithCredentials(requestToSign, credentials, options) {
23
+ const credentialsWithoutSessionToken = getCredentialsWithoutSessionToken(credentials);
24
+ delete requestToSign.headers[SESSION_TOKEN_HEADER];
25
+ requestToSign.headers[SESSION_TOKEN_QUERY_PARAM] = credentials.sessionToken;
26
+ requestToSign.query = requestToSign.query ?? {};
27
+ requestToSign.query[SESSION_TOKEN_QUERY_PARAM] = credentials.sessionToken;
28
+ const privateAccess = this;
29
+ setSingleOverride(privateAccess, credentialsWithoutSessionToken);
30
+ return this.presign(requestToSign, options);
31
+ }
32
+ };
33
+ function getCredentialsWithoutSessionToken(credentials) {
34
+ return {
35
+ accessKeyId: credentials.accessKeyId,
36
+ secretAccessKey: credentials.secretAccessKey,
37
+ expiration: credentials.expiration
38
+ };
39
+ }
40
+ function setSingleOverride(privateAccess, credentialsWithoutSessionToken) {
41
+ const currentCredentialProvider = privateAccess.credentialProvider;
42
+ privateAccess.credentialProvider = () => {
43
+ privateAccess.credentialProvider = currentCredentialProvider;
44
+ return Promise.resolve(credentialsWithoutSessionToken);
45
+ };
46
+ }
47
+
48
+ // ../../node_modules/.pnpm/@aws-sdk+signature-v4-multi-region@3.996.46/node_modules/@aws-sdk/signature-v4-multi-region/dist-es/SignatureV4MultiRegion.js
49
+ var SignatureV4MultiRegion = class {
50
+ sigv4aSigner;
51
+ sigv4Signer;
52
+ signerOptions;
53
+ static sigv4aDependency() {
54
+ if (typeof signatureV4CrtContainer.CrtSignerV4 === "function") {
55
+ return "crt";
56
+ } else if (typeof signatureV4aContainer.SignatureV4a === "function") {
57
+ return "js";
58
+ }
59
+ return "none";
60
+ }
61
+ constructor(options) {
62
+ this.sigv4Signer = new SignatureV4SignWithCredentials(options);
63
+ this.signerOptions = options;
64
+ }
65
+ async sign(requestToSign, options = {}) {
66
+ if (options.signingRegion === "*") {
67
+ return this.getSigv4aSigner().sign(requestToSign, options);
68
+ }
69
+ return this.sigv4Signer.sign(requestToSign, options);
70
+ }
71
+ async signWithCredentials(requestToSign, credentials, options = {}) {
72
+ if (options.signingRegion === "*") {
73
+ const signer = this.getSigv4aSigner();
74
+ const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;
75
+ if (CrtSignerV4 && signer instanceof CrtSignerV4) {
76
+ return signer.signWithCredentials(requestToSign, credentials, options);
77
+ } else {
78
+ throw new Error(`signWithCredentials with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);
79
+ }
80
+ }
81
+ return this.sigv4Signer.signWithCredentials(requestToSign, credentials, options);
82
+ }
83
+ async presign(originalRequest, options = {}) {
84
+ if (options.signingRegion === "*") {
85
+ const signer = this.getSigv4aSigner();
86
+ const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;
87
+ if (CrtSignerV4 && signer instanceof CrtSignerV4) {
88
+ return signer.presign(originalRequest, options);
89
+ } else {
90
+ throw new Error(`presign with signingRegion '*' is only supported when using the CRT dependency @aws-sdk/signature-v4-crt. Please check whether you have installed the "@aws-sdk/signature-v4-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/signature-v4-crt");] or an ESM equivalent such as [import "@aws-sdk/signature-v4-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt`);
91
+ }
92
+ }
93
+ return this.sigv4Signer.presign(originalRequest, options);
94
+ }
95
+ async presignWithCredentials(originalRequest, credentials, options = {}) {
96
+ if (options.signingRegion === "*") {
97
+ throw new Error("Method presignWithCredentials is not supported for [signingRegion=*].");
98
+ }
99
+ return this.sigv4Signer.presignWithCredentials(originalRequest, credentials, options);
100
+ }
101
+ getSigv4aSigner() {
102
+ if (!this.sigv4aSigner) {
103
+ const CrtSignerV4 = signatureV4CrtContainer.CrtSignerV4;
104
+ const JsSigV4aSigner = signatureV4aContainer.SignatureV4a;
105
+ if (this.signerOptions.runtime === "node") {
106
+ if (!CrtSignerV4 && !JsSigV4aSigner) {
107
+ throw new Error("Neither CRT nor JS SigV4a implementation is available. Please load either @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");
108
+ }
109
+ if (CrtSignerV4 && typeof CrtSignerV4 === "function") {
110
+ this.sigv4aSigner = new CrtSignerV4({
111
+ ...this.signerOptions,
112
+ signingAlgorithm: 1
113
+ });
114
+ } else if (JsSigV4aSigner && typeof JsSigV4aSigner === "function") {
115
+ this.sigv4aSigner = new JsSigV4aSigner({
116
+ ...this.signerOptions
117
+ });
118
+ } else {
119
+ throw new Error("Available SigV4a implementation is not a valid constructor. Please ensure you've properly imported @aws-sdk/signature-v4-crt or @aws-sdk/signature-v4a.For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt");
120
+ }
121
+ } else {
122
+ if (!JsSigV4aSigner || typeof JsSigV4aSigner !== "function") {
123
+ throw new Error("JS SigV4a implementation is not available or not a valid constructor. Please check whether you have installed the @aws-sdk/signature-v4a package explicitly. The CRT implementation is not available for browsers. You must also register the package by calling [require('@aws-sdk/signature-v4a');] or an ESM equivalent such as [import '@aws-sdk/signature-v4a';]. For more information please go to https://github.com/aws/aws-sdk-js-v3#using-javascript-non-crt-implementation-of-sigv4a");
124
+ }
125
+ this.sigv4aSigner = new JsSigV4aSigner({
126
+ ...this.signerOptions
127
+ });
128
+ }
129
+ }
130
+ return this.sigv4aSigner;
131
+ }
132
+ };
133
+
134
+ export {
135
+ SignatureV4MultiRegion
136
+ };
@@ -0,0 +1,46 @@
1
+ import {
2
+ setCredentialFeature
3
+ } from "./chunk-N6IF5QLH.js";
4
+ import {
5
+ CredentialsProviderError
6
+ } from "./chunk-HAABLEPO.js";
7
+
8
+ // ../../node_modules/.pnpm/@aws-sdk+credential-provider-env@3.972.70/node_modules/@aws-sdk/credential-provider-env/dist-es/fromEnv.js
9
+ var ENV_KEY = "AWS_ACCESS_KEY_ID";
10
+ var ENV_SECRET = "AWS_SECRET_ACCESS_KEY";
11
+ var ENV_SESSION = "AWS_SESSION_TOKEN";
12
+ var ENV_EXPIRATION = "AWS_CREDENTIAL_EXPIRATION";
13
+ var ENV_CREDENTIAL_SCOPE = "AWS_CREDENTIAL_SCOPE";
14
+ var ENV_ACCOUNT_ID = "AWS_ACCOUNT_ID";
15
+ var fromEnv = (init) => async () => {
16
+ init?.logger?.debug("@aws-sdk/credential-provider-env - fromEnv");
17
+ const accessKeyId = process.env[ENV_KEY];
18
+ const secretAccessKey = process.env[ENV_SECRET];
19
+ const sessionToken = process.env[ENV_SESSION];
20
+ const expiry = process.env[ENV_EXPIRATION];
21
+ const credentialScope = process.env[ENV_CREDENTIAL_SCOPE];
22
+ const accountId = process.env[ENV_ACCOUNT_ID];
23
+ if (accessKeyId && secretAccessKey) {
24
+ const credentials = {
25
+ accessKeyId,
26
+ secretAccessKey,
27
+ ...sessionToken && { sessionToken },
28
+ ...expiry && { expiration: new Date(expiry) },
29
+ ...credentialScope && { credentialScope },
30
+ ...accountId && { accountId }
31
+ };
32
+ setCredentialFeature(credentials, "CREDENTIALS_ENV_VARS", "g");
33
+ return credentials;
34
+ }
35
+ throw new CredentialsProviderError("Unable to find environment variable credentials.", { logger: init?.logger });
36
+ };
37
+
38
+ export {
39
+ ENV_KEY,
40
+ ENV_SECRET,
41
+ ENV_SESSION,
42
+ ENV_EXPIRATION,
43
+ ENV_CREDENTIAL_SCOPE,
44
+ ENV_ACCOUNT_ID,
45
+ fromEnv
46
+ };
@@ -15,6 +15,10 @@ var STORAGE_WARNING_THRESHOLDS = [
15
15
 
16
16
  // ../../packages/marketplace/src/tool-registry.ts
17
17
  var cachedRegistry = null;
18
+ var RETIRED_CATALOG_TOOL_IDS = /* @__PURE__ */ new Set(["video-audio"]);
19
+ function normalizeToolDescriptor(descriptor) {
20
+ return { ...descriptor, requiresSandbox: descriptor.requiresSandbox !== false };
21
+ }
18
22
  function compareToolVersions(left, right) {
19
23
  const parse = (version) => {
20
24
  const [core, suffix = ""] = version.split("-", 2);
@@ -44,10 +48,10 @@ function mergeToolDescriptors(current, incoming) {
44
48
  async function discoverLocalManifests() {
45
49
  const registry = {};
46
50
  const searchPaths = [
47
- // Monorepo development: packages/tools/*
48
- path.resolve(process.cwd(), "packages", "tools"),
51
+ // Monorepo development: packages/marketplace-tools/*
52
+ path.resolve(process.cwd(), "packages", "marketplace-tools"),
49
53
  // Next.js dev server runs in apps/web
50
- path.resolve(process.cwd(), "..", "..", "packages", "tools"),
54
+ path.resolve(process.cwd(), "..", "..", "packages", "marketplace-tools"),
51
55
  // Installed tools: .larkup/tools/node_modules/@larkup
52
56
  path.resolve(process.cwd(), ".larkup", "tools", "node_modules", "@larkup"),
53
57
  path.resolve(process.cwd(), "..", "..", ".larkup", "tools", "node_modules", "@larkup")
@@ -60,8 +64,8 @@ async function discoverLocalManifests() {
60
64
  const manifestPath = path.join(searchPath, entry.name, "tool.manifest.json");
61
65
  try {
62
66
  const raw = await fs.readFile(manifestPath, "utf8");
63
- const manifest = JSON.parse(raw);
64
- if (manifest.id) {
67
+ const manifest = normalizeToolDescriptor(JSON.parse(raw));
68
+ if (manifest.id && !RETIRED_CATALOG_TOOL_IDS.has(manifest.id)) {
65
69
  registry[manifest.id] = manifest;
66
70
  }
67
71
  } catch {
@@ -86,7 +90,9 @@ async function fetchHubCatalog(hubUrl) {
86
90
  const data = await res.json();
87
91
  const registry = {};
88
92
  for (const tool of data.tools ?? []) {
89
- if (tool.id) registry[tool.id] = tool;
93
+ if (tool.id && !RETIRED_CATALOG_TOOL_IDS.has(tool.id)) {
94
+ registry[tool.id] = normalizeToolDescriptor(tool);
95
+ }
90
96
  }
91
97
  return registry;
92
98
  } catch {
@@ -94,6 +100,7 @@ async function fetchHubCatalog(hubUrl) {
94
100
  }
95
101
  }
96
102
  async function fetchToolFromHub(toolId, hubUrl) {
103
+ if (RETIRED_CATALOG_TOOL_IDS.has(toolId)) return null;
97
104
  const baseUrl = hubUrl ?? DEFAULT_HUB_URL;
98
105
  try {
99
106
  const controller = new AbortController();
@@ -111,69 +118,6 @@ async function fetchToolFromHub(toolId, hubUrl) {
111
118
  }
112
119
  }
113
120
  var FALLBACK_REGISTRY = {
114
- "video-audio": {
115
- id: "video-audio",
116
- name: "Video Intelligence",
117
- description: "Build evidence-backed video timelines with adaptive attention and bounded source rewind.",
118
- category: "media",
119
- version: "0.3.6",
120
- pricing: "free",
121
- emoji: "\u{1F3AC}",
122
- icon: "Film",
123
- packageName: "@larkup/tool-video-audio",
124
- installSize: "~15 MB",
125
- author: "Larkup",
126
- capabilities: [
127
- "video-indexing",
128
- "audio-indexing",
129
- "transcription",
130
- "frame-extraction",
131
- "youtube-import",
132
- "attention-driven-analysis",
133
- "temporal-evidence",
134
- "bounded-source-rewind"
135
- ],
136
- tags: ["video intelligence", "temporal reasoning", "transcription", "ffmpeg", "video", "audio"],
137
- downloads: 0,
138
- repositoryUrl: "https://github.com/Larkup-AI/larkup",
139
- license: "Apache-2.0",
140
- updatedAt: "2026-07-20",
141
- configSchema: [
142
- {
143
- key: "frameInterval",
144
- label: "Baseline coverage interval (seconds)",
145
- type: "text",
146
- defaultValue: "10",
147
- help: "Baseline cadence for duration-aware coverage frames; scene changes and a reserved ending pass are added separately."
148
- },
149
- {
150
- key: "audioProvider",
151
- label: "Audio Provider",
152
- type: "select",
153
- help: "Choose the provider used only for audio and video transcription.",
154
- options: [
155
- { label: "OpenAI", value: "openai" },
156
- { label: "Groq", value: "groq" },
157
- { label: "Deepgram", value: "deepgram" },
158
- { label: "ElevenLabs", value: "elevenlabs" },
159
- { label: "Local Whisper", value: "local" }
160
- ]
161
- },
162
- {
163
- key: "audioLanguage",
164
- label: "Transcription language",
165
- type: "text",
166
- defaultValue: "auto",
167
- help: "Use auto for provider language detection, or enter a language code such as ar, ar-EG, en, or de to override it."
168
- },
169
- {
170
- key: "audioApiKey",
171
- label: "Audio API Key",
172
- type: "password",
173
- help: "Required for the selected audio provider and kept separate from the chat model key."
174
- }
175
- ]
176
- },
177
121
  "clip-embeddings": {
178
122
  id: "clip-embeddings",
179
123
  name: "CLIP Image Search",
@@ -185,6 +129,7 @@ var FALLBACK_REGISTRY = {
185
129
  icon: "ScanEye",
186
130
  packageName: "@larkup/tool-clip-embeddings",
187
131
  installSize: "~200 MB",
132
+ requiresSandbox: true,
188
133
  author: "Larkup",
189
134
  capabilities: ["clip-embeddings", "image-similarity"],
190
135
  tags: ["clip", "siglip", "image-search", "visual-similarity"],
@@ -206,6 +151,7 @@ var FALLBACK_REGISTRY = {
206
151
  packageName: "@larkup/tool-doc-editor",
207
152
  installSize: "~5 MB",
208
153
  systemDeps: ["docker"],
154
+ requiresSandbox: true,
209
155
  author: "Larkup",
210
156
  capabilities: ["document-editing", "form-filling", "document-preview"],
211
157
  tags: ["pdf", "docx", "pptx", "form", "canvas", "editor", "fill"],
@@ -218,12 +164,18 @@ var FALLBACK_REGISTRY = {
218
164
  async function buildRegistry(opts) {
219
165
  if (cachedRegistry) return cachedRegistry;
220
166
  let registry = { ...FALLBACK_REGISTRY };
167
+ let hubAvailable = false;
221
168
  if (!opts?.skipHub) {
222
169
  const hubCatalog = await fetchHubCatalog(opts?.hubUrl);
223
- registry = mergeToolDescriptors(registry, hubCatalog);
170
+ if (Object.keys(hubCatalog).length > 0) {
171
+ registry = mergeToolDescriptors(registry, hubCatalog);
172
+ hubAvailable = true;
173
+ }
174
+ }
175
+ if (!hubAvailable || opts?.preferLocal) {
176
+ const localManifests = await discoverLocalManifests();
177
+ registry = mergeToolDescriptors(registry, localManifests);
224
178
  }
225
- const localManifests = await discoverLocalManifests();
226
- registry = mergeToolDescriptors(registry, localManifests);
227
179
  cachedRegistry = registry;
228
180
  return registry;
229
181
  }