@overaihq/cli 0.14.1 → 0.14.3
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
CHANGED
|
@@ -157,6 +157,10 @@ send a literal value that starts with `@`.
|
|
|
157
157
|
|
|
158
158
|
## For AI agents
|
|
159
159
|
|
|
160
|
+
To onboard an agent, point it at this README and paste:
|
|
161
|
+
|
|
162
|
+
> I use OverAI. Help me get set up with the CLI (https://www.npmjs.com/package/@overaihq/cli): install it, get me logged in, and then walk me through onboarding.
|
|
163
|
+
|
|
160
164
|
The CLI bundles its own guidance — no extra setup files needed. Point your
|
|
161
165
|
agent at a cloned workspace and have it run:
|
|
162
166
|
|
|
@@ -386,26 +386,39 @@ var injectCodeMessageSchema = external_exports.object({
|
|
|
386
386
|
// ../common/src/webPage.ts
|
|
387
387
|
var webPageLanguage = ["react"];
|
|
388
388
|
var configFlag = external_exports.union([external_exports.boolean(), external_exports.string()]).nullish().transform((value) => value === true || value === "true").catch(false);
|
|
389
|
-
var
|
|
390
|
-
language: external_exports.enum(
|
|
391
|
-
/*
|
|
392
|
-
authorizationMode: external_exports.enum(["workspace", "viewer"])
|
|
389
|
+
var webPageConfigFields = {
|
|
390
|
+
language: external_exports.enum(webPageLanguage),
|
|
391
|
+
/* Invalid modes fail closed instead of granting workspace access. */
|
|
392
|
+
authorizationMode: external_exports.enum(["workspace", "viewer"]),
|
|
393
393
|
customTitle: external_exports.string().nullish(),
|
|
394
|
-
code: external_exports.string()
|
|
394
|
+
code: external_exports.string(),
|
|
395
395
|
dataSourceUrl: external_exports.string().nullish(),
|
|
396
|
-
filter: itemFilterExpressionRootSchema.nullish()
|
|
396
|
+
filter: itemFilterExpressionRootSchema.nullish(),
|
|
397
397
|
/* Drops the iframe's sandbox attribute — needed for storage, cookies, forms. */
|
|
398
|
-
noSandbox:
|
|
398
|
+
noSandbox: external_exports.boolean().nullish(),
|
|
399
399
|
/* Renders the page fullscreen for end users by hiding the workspace top bar. */
|
|
400
|
-
hideTopBar:
|
|
400
|
+
hideTopBar: external_exports.boolean().nullish(),
|
|
401
401
|
/*
|
|
402
402
|
* Which iframe runtime renders the page. "v1" is the sandboxed srcdoc
|
|
403
403
|
* iframe; "v2" serves the page from its own origin (separate renderer
|
|
404
|
-
* process, real localStorage).
|
|
405
|
-
* config never fails to parse over the toggle.
|
|
404
|
+
* process, real localStorage).
|
|
406
405
|
*/
|
|
407
|
-
runtime: external_exports.enum(["v1", "v2"])
|
|
406
|
+
runtime: external_exports.enum(["v1", "v2"])
|
|
407
|
+
};
|
|
408
|
+
var webPageConfigSchema = external_exports.object({
|
|
409
|
+
...webPageConfigFields,
|
|
410
|
+
language: webPageConfigFields.language.catch("react"),
|
|
411
|
+
// Missing on legacy versions.
|
|
412
|
+
authorizationMode: webPageConfigFields.authorizationMode.default("workspace"),
|
|
413
|
+
code: webPageConfigFields.code.default(reactDefaultTemplate),
|
|
414
|
+
filter: webPageConfigFields.filter.catch(null),
|
|
415
|
+
noSandbox: configFlag,
|
|
416
|
+
hideTopBar: configFlag,
|
|
417
|
+
// Absent or invalid reads as "v1" so a legacy config never fails to parse
|
|
418
|
+
// over the toggle.
|
|
419
|
+
runtime: webPageConfigFields.runtime.catch("v1")
|
|
408
420
|
});
|
|
421
|
+
var webPageConfigUpdateSchema = external_exports.object(webPageConfigFields).partial();
|
|
409
422
|
var webPageConfigWriteSchema = webPageConfigSchema.extend({
|
|
410
423
|
noSandbox: external_exports.union([external_exports.boolean(), external_exports.enum(["true", "false"])]).nullish(),
|
|
411
424
|
hideTopBar: external_exports.union([external_exports.boolean(), external_exports.enum(["true", "false"])]).nullish(),
|
|
@@ -420,8 +433,10 @@ var defaultWebPageTemplate = reactDefaultTemplate.replace(
|
|
|
420
433
|
|
|
421
434
|
export {
|
|
422
435
|
itemFilterExpressionRootSchema,
|
|
436
|
+
reactDefaultTemplate,
|
|
423
437
|
webPageLanguage,
|
|
424
438
|
webPageConfigSchema,
|
|
439
|
+
webPageConfigUpdateSchema,
|
|
425
440
|
webPageConfigWriteSchema,
|
|
426
441
|
defaultWebPageTemplate
|
|
427
442
|
};
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,9 @@ import {
|
|
|
4
4
|
} from "./chunk-WGPBYGU6.js";
|
|
5
5
|
import {
|
|
6
6
|
itemFilterExpressionRootSchema,
|
|
7
|
+
reactDefaultTemplate,
|
|
7
8
|
webPageConfigSchema
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4QWKERK2.js";
|
|
9
10
|
import {
|
|
10
11
|
external_exports
|
|
11
12
|
} from "./chunk-PF6GZFT4.js";
|
|
@@ -27818,7 +27819,7 @@ var validateAutomationElements = async (elements) => {
|
|
|
27818
27819
|
return findings(automationNodesSchema.safeParse(elements));
|
|
27819
27820
|
};
|
|
27820
27821
|
var validateWebPageConfig = async (config) => {
|
|
27821
|
-
const { webPageConfigWriteSchema } = await import("./webPage-
|
|
27822
|
+
const { webPageConfigWriteSchema } = await import("./webPage-ICODVQMY.js");
|
|
27822
27823
|
return findings(webPageConfigWriteSchema.safeParse(config));
|
|
27823
27824
|
};
|
|
27824
27825
|
|
|
@@ -27874,6 +27875,7 @@ var functionFiles = (id, name2, version) => {
|
|
|
27874
27875
|
[`${stem}.ts`]: version.code,
|
|
27875
27876
|
[`${stem}.meta.json`]: metaJson({
|
|
27876
27877
|
inputSchema: version.inputSchema,
|
|
27878
|
+
callerAccess: version.callerAccess,
|
|
27877
27879
|
outputSchema: version.outputSchema,
|
|
27878
27880
|
executionTimeout: version.executionTimeout,
|
|
27879
27881
|
executionCpu: version.executionCpu,
|
|
@@ -27890,7 +27892,7 @@ var functionAdapter = {
|
|
|
27890
27892
|
nodes {
|
|
27891
27893
|
id name
|
|
27892
27894
|
functionVersions(orderBy: [VERSION_NUMBER_DESC], first: 1) {
|
|
27893
|
-
nodes { versionNumber code inputSchema outputSchema executionTimeout executionCpu executionMemory }
|
|
27895
|
+
nodes { versionNumber code inputSchema outputSchema executionTimeout executionCpu executionMemory callerAccess }
|
|
27894
27896
|
}
|
|
27895
27897
|
functionDeployedVersion { versionNumber }
|
|
27896
27898
|
}
|
|
@@ -27932,7 +27934,7 @@ var functionAdapter = {
|
|
|
27932
27934
|
const data = await gqlRequest(
|
|
27933
27935
|
`query CliFunctionVersion($functionId: String!, $versionNumber: Int!) {
|
|
27934
27936
|
functionVersion(functionId: $functionId, versionNumber: $versionNumber) {
|
|
27935
|
-
versionNumber code inputSchema outputSchema executionTimeout executionCpu executionMemory
|
|
27937
|
+
versionNumber code inputSchema outputSchema executionTimeout executionCpu executionMemory callerAccess
|
|
27936
27938
|
}
|
|
27937
27939
|
}`,
|
|
27938
27940
|
{ functionId: id, versionNumber }
|
|
@@ -27947,12 +27949,12 @@ var functionAdapter = {
|
|
|
27947
27949
|
push: async (id, files, message, expectedLatestVersion) => {
|
|
27948
27950
|
const meta = JSON.parse(fileBySuffix(files, ".meta.json"));
|
|
27949
27951
|
const data = await gqlRequest(
|
|
27950
|
-
`mutation CliCreateFunctionVersion($expectedLatestVersion: Int, $functionId: String!, $code: String!, $message: String, $inputSchema: String, $outputSchema: String, $executionTimeout: Int, $executionCpu: Int, $executionMemory: Int) {
|
|
27952
|
+
`mutation CliCreateFunctionVersion($expectedLatestVersion: Int, $functionId: String!, $code: String!, $message: String, $inputSchema: String, $outputSchema: String, $executionTimeout: Int, $executionCpu: Int, $executionMemory: Int, $callerAccess: String) {
|
|
27951
27953
|
createFunctionVersion(input: { expectedLatestVersion: $expectedLatestVersion, functionVersion: {
|
|
27952
27954
|
functionId: $functionId, code: $code, message: $message,
|
|
27953
27955
|
inputSchema: $inputSchema, outputSchema: $outputSchema,
|
|
27954
27956
|
executionTimeout: $executionTimeout, executionCpu: $executionCpu,
|
|
27955
|
-
executionMemory: $executionMemory
|
|
27957
|
+
executionMemory: $executionMemory, callerAccess: $callerAccess
|
|
27956
27958
|
}}) { functionVersion { versionNumber } }
|
|
27957
27959
|
}`,
|
|
27958
27960
|
{
|
|
@@ -27960,6 +27962,8 @@ var functionAdapter = {
|
|
|
27960
27962
|
functionId: id,
|
|
27961
27963
|
code: fileBySuffix(files, ".ts"),
|
|
27962
27964
|
message,
|
|
27965
|
+
// Omission in older clones lets the database inherit the latest policy.
|
|
27966
|
+
callerAccess: meta.callerAccess ?? null,
|
|
27963
27967
|
// Match the webapp's save defaults so a missing meta doesn't zero out
|
|
27964
27968
|
// limits, and so an explicit null doesn't hit the NOT NULL column.
|
|
27965
27969
|
inputSchema: meta.inputSchema ?? "",
|
|
@@ -33936,31 +33940,37 @@ engine.registerTag("generatePassword", GeneratePasswordTag);
|
|
|
33936
33940
|
|
|
33937
33941
|
// ../common/src/printablePage.ts
|
|
33938
33942
|
var printablePageLanguage = ["liquid", "react"];
|
|
33939
|
-
var
|
|
33940
|
-
|
|
33941
|
-
|
|
33942
|
-
|
|
33943
|
-
|
|
33944
|
-
|
|
33945
|
-
|
|
33946
|
-
}
|
|
33943
|
+
var printablePageConfigFields = {
|
|
33944
|
+
pageSize: external_exports.object({ width: external_exports.string(), height: external_exports.string() }),
|
|
33945
|
+
pageMargins: external_exports.object({
|
|
33946
|
+
top: external_exports.string(),
|
|
33947
|
+
right: external_exports.string(),
|
|
33948
|
+
bottom: external_exports.string(),
|
|
33949
|
+
left: external_exports.string()
|
|
33950
|
+
}),
|
|
33951
|
+
language: external_exports.enum(printablePageLanguage),
|
|
33952
|
+
code: external_exports.string(),
|
|
33953
|
+
dataSourceUrl: external_exports.string().nullish(),
|
|
33954
|
+
filter: itemFilterExpressionRootSchema.nullish(),
|
|
33955
|
+
customTitle: external_exports.string().nullish()
|
|
33956
|
+
};
|
|
33947
33957
|
var printablePageConfigSchema = external_exports.object({
|
|
33948
|
-
|
|
33958
|
+
...printablePageConfigFields,
|
|
33959
|
+
// Per-key defaults so a stored object missing one dimension still reads.
|
|
33960
|
+
pageSize: printablePageConfigFields.pageSize.extend({
|
|
33949
33961
|
width: external_exports.string().default("8.5in"),
|
|
33950
33962
|
height: external_exports.string().default("11in")
|
|
33951
33963
|
}).prefault({}),
|
|
33952
|
-
pageMargins:
|
|
33964
|
+
pageMargins: printablePageConfigFields.pageMargins.extend({
|
|
33953
33965
|
top: external_exports.string().default("0.5in"),
|
|
33954
33966
|
right: external_exports.string().default("0.5in"),
|
|
33955
33967
|
bottom: external_exports.string().default("0.5in"),
|
|
33956
33968
|
left: external_exports.string().default("0.5in")
|
|
33957
33969
|
}).prefault({}),
|
|
33958
|
-
language:
|
|
33959
|
-
code:
|
|
33960
|
-
dataSourceUrl: external_exports.string().nullish(),
|
|
33961
|
-
filter: itemFilterExpressionRootSchema.nullish(),
|
|
33962
|
-
customTitle: external_exports.string().nullish()
|
|
33970
|
+
language: printablePageConfigFields.language.default("react"),
|
|
33971
|
+
code: printablePageConfigFields.code.default(reactDefaultTemplate)
|
|
33963
33972
|
});
|
|
33973
|
+
var printablePageConfigUpdateSchema = external_exports.object(printablePageConfigFields).partial();
|
|
33964
33974
|
var printablePageRenderDiagnosticsSchema = external_exports.object({
|
|
33965
33975
|
/** Absent when the render itself failed before any text existed. */
|
|
33966
33976
|
renderedTextLength: external_exports.number().optional(),
|
|
@@ -35354,6 +35364,7 @@ var generateRandomVariableName = customAlphabet(
|
|
|
35354
35364
|
|
|
35355
35365
|
// ../common/src/ids.ts
|
|
35356
35366
|
var ID_PREFIXES = {
|
|
35367
|
+
action: { prefix: "act", body: 20 },
|
|
35357
35368
|
action_runner: { prefix: "ar", body: 10 },
|
|
35358
35369
|
action_runner_email_alert: { prefix: "area", body: 10 },
|
|
35359
35370
|
action_runner_email_subscription: { prefix: "ares", body: 10 },
|
|
@@ -35409,6 +35420,7 @@ var ID_PREFIXES = {
|
|
|
35409
35420
|
mailbox: { prefix: "mbx", body: 10 },
|
|
35410
35421
|
mailbox_address: { prefix: "mba", body: 10 },
|
|
35411
35422
|
mailbox_message: { prefix: "mbm", body: 10 },
|
|
35423
|
+
notification: { prefix: "ntf", body: 12 },
|
|
35412
35424
|
organization_usage_credit: { prefix: "crd", body: 12 },
|
|
35413
35425
|
organization_usage_transaction: { prefix: "utx", body: 12 },
|
|
35414
35426
|
page: { prefix: "pg", body: 10 },
|
|
@@ -36667,8 +36679,13 @@ Rules that keep graphs healthy:
|
|
|
36667
36679
|
of the same parent; never connect across loop boundaries.
|
|
36668
36680
|
- Keep TYPESCRIPT_CODE nodes small and focused \u2014 split logic across nodes and
|
|
36669
36681
|
let the graph orchestrate, rather than one big code block.
|
|
36670
|
-
-
|
|
36671
|
-
|
|
36682
|
+
- Write TYPESCRIPT_CODE as a module:
|
|
36683
|
+
\`export default async function step(state: StepState, ctx, env) { const s1 = await state.get("S1"); return s1.rows; }\`.
|
|
36684
|
+
\`state.get\` fetches one step's output on first read (cached for that node's execution),
|
|
36685
|
+
resolves undefined for a skipped step, and rejects for an id not visible
|
|
36686
|
+
from the node. Bare snippets (STATE/OUTPUT globals) are legacy, being retired.
|
|
36687
|
+
- Node inputs reference upstream state via variableIds (e.g.
|
|
36688
|
+
\`await state.get("S1")\`, Liquid {{S1.field}}). After renaming/removing a node, grep the document for its
|
|
36672
36689
|
variableId \u2014 dangling references fail at runtime, not at push.
|
|
36673
36690
|
- Bring IF_ELSE branches back together with an ALWAYS node.
|
|
36674
36691
|
- A loop (LOOP_ARRAY/LOOP_RANGE) always resolves to its success handle once all
|
|
@@ -36732,9 +36749,10 @@ language, customTitle, hideTopBar, ...). Push reassembles them.
|
|
|
36732
36749
|
- SQL from pages: env.TBSxxx.sql tagged templates only; compose dynamic SQL by
|
|
36733
36750
|
nesting sql fragments, sql([...]) for IN lists. sql.unsafe only for dynamic
|
|
36734
36751
|
identifiers.
|
|
36735
|
-
-
|
|
36736
|
-
on the workspace homepage and can only follow links
|
|
36737
|
-
an app-like experience.
|
|
36752
|
+
- End-user-facing workspaces have two modes. App (the default): end users land
|
|
36753
|
+
on the workspace homepage and can only follow links, so add page-to-page
|
|
36754
|
+
navigation; "Hide Top Bar" gives an app-like experience. Pages: the top bar
|
|
36755
|
+
lists every deployed page, so pages only need links to ones marked hidden.
|
|
36738
36756
|
- Public pages (/public/:id) have no viewer identity \u2014 useCurrentUser() is
|
|
36739
36757
|
null. Identity-scoped features degrade: useAgentChat streams but persists
|
|
36740
36758
|
nothing (conversationId stays null, useAgentConversations is empty, the
|
|
@@ -36783,8 +36801,14 @@ var functions = `# Function best practices
|
|
|
36783
36801
|
Functions are TypeScript HTTP handlers in a Deno sandbox: full env SDK,
|
|
36784
36802
|
esm.sh imports allowed. The CLI materializes <slug>.<id>.ts (code) and
|
|
36785
36803
|
<slug>.<id>.meta.json (inputSchema, outputSchema, executionTimeout ms,
|
|
36786
|
-
executionMemory MB).
|
|
36804
|
+
executionMemory MB, callerAccess).
|
|
36787
36805
|
|
|
36806
|
+
- New functions allow only callers with workspace access by default. Set
|
|
36807
|
+
callerAccess to "public" in meta.json only when an unauthenticated endpoint is
|
|
36808
|
+
intended. Existing functions retain their saved policy when older meta.json
|
|
36809
|
+
files omit this field. The policy is versioned: deploy the saved version to
|
|
36810
|
+
change who can call the live endpoint. Workspace uses Authorization for the
|
|
36811
|
+
platform bearer token; put additional application credentials in another header.
|
|
36788
36812
|
- Functions are full HTTP apps: method + sub-path are forwarded to your code,
|
|
36789
36813
|
and each execution records requestMethod/requestPath. Callers reach a route
|
|
36790
36814
|
with env.FNxxx.call({ method, path: "/features/123" }) \u2014 path defaults to the
|
|
@@ -37353,6 +37377,102 @@ var runSql = async (args) => {
|
|
|
37353
37377
|
}
|
|
37354
37378
|
};
|
|
37355
37379
|
|
|
37380
|
+
// src/commands/storage.ts
|
|
37381
|
+
import { openAsBlob, writeFileSync as writeFileSync6 } from "fs";
|
|
37382
|
+
var USAGE3 = "Usage: overai storage upload <path> [--no-random-prefix] | storage download <key> [path|-] | storage exists <key> | storage head <key> [--lines N] | storage presign <key> [--expires-in <seconds>]";
|
|
37383
|
+
var runStorage = async (args) => {
|
|
37384
|
+
const [operation, first2, second] = args;
|
|
37385
|
+
if (operation == null) throw new Error(USAGE3);
|
|
37386
|
+
const { organizationId } = await getAccessToken();
|
|
37387
|
+
const segment = (key) => encodeURIComponent(key);
|
|
37388
|
+
if (operation === "upload") {
|
|
37389
|
+
if (first2 == null || first2 === "-") {
|
|
37390
|
+
throw new Error("Upload requires a file path (stdin uploads need a filename to build the key).");
|
|
37391
|
+
}
|
|
37392
|
+
const randomPrefix = !args.includes("--no-random-prefix");
|
|
37393
|
+
const query = randomPrefix ? "" : "?disableRandomPrefix=true";
|
|
37394
|
+
const response = await v2Fetch(
|
|
37395
|
+
`/v2/storage/${organizationId}/stream${query}`,
|
|
37396
|
+
{
|
|
37397
|
+
method: "POST",
|
|
37398
|
+
headers: {
|
|
37399
|
+
"Content-Type": "application/octet-stream",
|
|
37400
|
+
"x-file-name": first2.split("/").pop() ?? first2
|
|
37401
|
+
},
|
|
37402
|
+
body: await openAsBlob(first2)
|
|
37403
|
+
}
|
|
37404
|
+
);
|
|
37405
|
+
if (!response.ok) {
|
|
37406
|
+
throw v2Error("storage upload", response, await response.text());
|
|
37407
|
+
}
|
|
37408
|
+
const { path } = await response.json();
|
|
37409
|
+
const key = path.startsWith(`${organizationId}/`) ? path.slice(organizationId.length + 1) : path;
|
|
37410
|
+
const format2 = resolveFormat(flagValue(args, "-o", "--output"));
|
|
37411
|
+
if (format2 === "json") printResult({ key, path }, format2);
|
|
37412
|
+
else process.stdout.write(`${key}
|
|
37413
|
+
`);
|
|
37414
|
+
return;
|
|
37415
|
+
}
|
|
37416
|
+
if (first2 == null) throw new Error(USAGE3);
|
|
37417
|
+
if (operation === "download") {
|
|
37418
|
+
const response = await v2Fetch(
|
|
37419
|
+
`/v2/storage/${organizationId}/${segment(first2)}`,
|
|
37420
|
+
{ redirect: "follow" }
|
|
37421
|
+
);
|
|
37422
|
+
if (!response.ok) {
|
|
37423
|
+
throw v2Error("storage download", response, await response.text());
|
|
37424
|
+
}
|
|
37425
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
37426
|
+
if (second != null && second !== "-") writeFileSync6(second, bytes);
|
|
37427
|
+
else process.stdout.write(bytes);
|
|
37428
|
+
return;
|
|
37429
|
+
}
|
|
37430
|
+
if (operation === "exists") {
|
|
37431
|
+
const response = await v2Fetch(
|
|
37432
|
+
`/v2/storage/${organizationId}/${segment(first2)}/exists`
|
|
37433
|
+
);
|
|
37434
|
+
if (response.status === 404) {
|
|
37435
|
+
if (resolveFormat(flagValue(args, "-o", "--output")) === "json") {
|
|
37436
|
+
printResult({ exists: false }, "json");
|
|
37437
|
+
}
|
|
37438
|
+
process.exitCode = 1;
|
|
37439
|
+
return;
|
|
37440
|
+
}
|
|
37441
|
+
if (!response.ok) {
|
|
37442
|
+
throw v2Error("storage exists", response, await response.text());
|
|
37443
|
+
}
|
|
37444
|
+
printResult(
|
|
37445
|
+
{ exists: true, ...await response.json() },
|
|
37446
|
+
resolveFormat(flagValue(args, "-o", "--output"))
|
|
37447
|
+
);
|
|
37448
|
+
return;
|
|
37449
|
+
}
|
|
37450
|
+
if (operation === "head") {
|
|
37451
|
+
const lines = flagValue(args, "--lines") ?? "50";
|
|
37452
|
+
const response = await v2Fetch(
|
|
37453
|
+
`/v2/storage/${organizationId}/${segment(first2)}/head?numLines=${encodeURIComponent(lines)}`
|
|
37454
|
+
);
|
|
37455
|
+
if (!response.ok) {
|
|
37456
|
+
throw v2Error("storage head", response, await response.text());
|
|
37457
|
+
}
|
|
37458
|
+
process.stdout.write(await response.text());
|
|
37459
|
+
return;
|
|
37460
|
+
}
|
|
37461
|
+
if (operation === "presign") {
|
|
37462
|
+
const expiresIn2 = flagValue(args, "--expires-in") ?? String(60 * 60 * 24 * 7);
|
|
37463
|
+
const response = await v2Fetch(
|
|
37464
|
+
`/v2/storage/${organizationId}/${segment(first2)}/presign?expiresIn=${encodeURIComponent(expiresIn2)}`
|
|
37465
|
+
);
|
|
37466
|
+
if (!response.ok) {
|
|
37467
|
+
throw v2Error("storage presign", response, await response.text());
|
|
37468
|
+
}
|
|
37469
|
+
process.stdout.write(`${(await response.text()).trim()}
|
|
37470
|
+
`);
|
|
37471
|
+
return;
|
|
37472
|
+
}
|
|
37473
|
+
throw new Error(USAGE3);
|
|
37474
|
+
};
|
|
37475
|
+
|
|
37356
37476
|
// src/commands/workspace.ts
|
|
37357
37477
|
var workspaceIdFrom = (args) => args.find(
|
|
37358
37478
|
(arg, index) => !arg.startsWith("-") && args[index - 1] !== "-o" && args[index - 1] !== "--output"
|
|
@@ -37436,7 +37556,7 @@ var listWorkspaceUsers = async (args) => {
|
|
|
37436
37556
|
resolveFormat(flagValue(args, "-o", "--output"))
|
|
37437
37557
|
);
|
|
37438
37558
|
};
|
|
37439
|
-
var
|
|
37559
|
+
var USAGE4 = `Usage:
|
|
37440
37560
|
overai workspace list [--archived] [--limit <n>]
|
|
37441
37561
|
overai workspace show [workspaceId]
|
|
37442
37562
|
overai workspace users [workspaceId]
|
|
@@ -37454,7 +37574,7 @@ var runWorkspace = async (args) => {
|
|
|
37454
37574
|
await listWorkspaceUsers(args.slice(1));
|
|
37455
37575
|
return;
|
|
37456
37576
|
}
|
|
37457
|
-
process.stderr.write(
|
|
37577
|
+
process.stderr.write(USAGE4);
|
|
37458
37578
|
process.exitCode = 1;
|
|
37459
37579
|
};
|
|
37460
37580
|
|
|
@@ -37616,6 +37736,9 @@ Other resources:
|
|
|
37616
37736
|
overai data-stream query <id> --start <date> --end <date> [--query <filter>]
|
|
37617
37737
|
overai data-file upload <id> <path> [-m <message>]
|
|
37618
37738
|
overai data-file download <id> [path|-] | data-file head <id>
|
|
37739
|
+
overai storage upload <path> [--no-random-prefix]
|
|
37740
|
+
overai storage download <key> [path|-] | storage exists <key>
|
|
37741
|
+
overai storage head <key> [--lines N] | storage presign <key> [--expires-in <seconds>]
|
|
37619
37742
|
overai knowledge-base upload <id> <file...>
|
|
37620
37743
|
overai knowledge-base search <id> <query> [--limit N]
|
|
37621
37744
|
overai integration configure <id> --config <json|@file|@->
|
|
@@ -37861,6 +37984,9 @@ var run = async () => {
|
|
|
37861
37984
|
case "data-file":
|
|
37862
37985
|
await runDataFile(rest);
|
|
37863
37986
|
return;
|
|
37987
|
+
case "storage":
|
|
37988
|
+
await runStorage(rest);
|
|
37989
|
+
return;
|
|
37864
37990
|
case "integration":
|
|
37865
37991
|
await runIntegration(rest);
|
|
37866
37992
|
return;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
defaultWebPageTemplate,
|
|
3
3
|
webPageConfigSchema,
|
|
4
|
+
webPageConfigUpdateSchema,
|
|
4
5
|
webPageConfigWriteSchema,
|
|
5
6
|
webPageLanguage
|
|
6
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-4QWKERK2.js";
|
|
7
8
|
import "./chunk-PF6GZFT4.js";
|
|
8
9
|
import "./chunk-U67V476Y.js";
|
|
9
10
|
export {
|
|
10
11
|
defaultWebPageTemplate,
|
|
11
12
|
webPageConfigSchema,
|
|
13
|
+
webPageConfigUpdateSchema,
|
|
12
14
|
webPageConfigWriteSchema,
|
|
13
15
|
webPageLanguage
|
|
14
16
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@overaihq/cli",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.3",
|
|
4
4
|
"description": "Create, edit, deploy, and run OverAI workspace resources from the command line",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://overai.com",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"@perygee/common": "0.0.0",
|
|
24
|
-
"@types/node": "^24.
|
|
24
|
+
"@types/node": "^24.19.0",
|
|
25
25
|
"@types/proper-lockfile": "^4.1.4",
|
|
26
26
|
"tsup": "^8.5.1",
|
|
27
27
|
"typescript": "^7.0.2",
|