@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.
- package/README.md +8 -0
- package/dist/{analytics-store-KI3NXDYV.js → analytics-store-4NYU7DMO.js} +2 -2
- package/dist/api-X4PHQJTH.js +6943 -0
- package/dist/bowser-GZLEN3PD.js +2821 -0
- package/dist/{chroma-BCASZNMJ.js → chroma-RJVBZZMP.js} +2 -11
- package/dist/chunk-3EBUYTA7.js +136 -0
- package/dist/chunk-4XN2IRCG.js +46 -0
- package/dist/{chunk-FM6HYXZ5.js → chunk-5UWKP64Q.js} +24 -72
- package/dist/chunk-65EVYGDT.js +2904 -0
- package/dist/chunk-A7HMSODH.js +126 -0
- package/dist/chunk-BDMLJQRN.js +534 -0
- package/dist/chunk-FUTLPXFR.js +921 -0
- package/dist/chunk-HAABLEPO.js +1570 -0
- package/dist/chunk-HOPZALAP.js +449 -0
- package/dist/{chunk-L34L3RDQ.js → chunk-JZ3UCEGF.js} +157 -197
- package/dist/chunk-MACWQEJS.js +2091 -0
- package/dist/chunk-MYOADNR2.js +515 -0
- package/dist/chunk-N6IF5QLH.js +1850 -0
- package/dist/chunk-ODWAFTDP.js +1711 -0
- package/dist/chunk-QGM4M3NI.js +37 -0
- package/dist/chunk-S5DCG3CZ.js +41 -0
- package/dist/{chunk-I6JJWCUQ.js → chunk-V3VNCOZ6.js} +118 -29
- package/dist/dist-es-5DTOPEBY.js +322 -0
- package/dist/dist-es-BM4STLL5.js +70 -0
- package/dist/dist-es-DS5SFRTK.js +377 -0
- package/dist/dist-es-F6WXDZQY.js +88 -0
- package/dist/dist-es-KMHWFNXI.js +295 -0
- package/dist/dist-es-LRDDK5LI.js +11761 -0
- package/dist/dist-es-LWW2DNRF.js +139 -0
- package/dist/dist-es-NEADJWQM.js +176 -0
- package/dist/dist-es-S5FAFKBD.js +23 -0
- package/dist/dist-es-YD724GH3.js +221 -0
- package/dist/event-streams-NPIZBVLJ.js +43 -0
- package/dist/index.js +2074 -1768
- package/dist/{lancedb-UB2EPDCN.js → lancedb-TCUZKSHN.js} +1 -1
- package/dist/lexer-DQCqS3nf-CGRGK47I.js +62 -0
- package/dist/loadSso-HXXA5UNF.js +584 -0
- package/dist/{pinecone-OHOY4YYM.js → pinecone-ME3YOCQJ.js} +3 -21
- package/dist/signin-7FUGJFG3.js +822 -0
- package/dist/sso-oidc-EPMF7LMF.js +838 -0
- package/dist/sts-RBEOIBEJ.js +1118 -0
- package/dist/{tool-loader-KKODIWEV.js → tool-loader-PEQZZWTB.js} +3 -3
- package/dist/{tool-registry-CXCFMOWA.js → tool-registry-VJYLRXKJ.js} +2 -2
- package/package.json +20 -16
- package/dist/chunk-3RG5ZIWI.js +0 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./chunk-
|
|
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
|
|
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
|
-
|
|
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
|
}
|