deepspace 0.33.1 → 0.35.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.
- package/CHANGELOG.md +46 -0
- package/README.md +5 -1
- package/dist/{chunk-PZDVKSLI.js → chunk-ESEI3MMY.js} +2 -2
- package/dist/{chunk-PZDVKSLI.js.map → chunk-ESEI3MMY.js.map} +1 -1
- package/dist/chunk-ESYXTIV2.js +1957 -0
- package/dist/chunk-ESYXTIV2.js.map +1 -0
- package/dist/cli.js +151 -53
- package/dist/cli.js.map +1 -1
- package/dist/documentation-client-core.js +1 -1
- package/dist/documentation-default-renderer.cjs +1 -1
- package/dist/documentation-react.js +1 -1
- package/dist/documentation-runtime.js +10 -10
- package/dist/documentation-server-core.js +1 -1
- package/dist/documentation.js +47 -22
- package/dist/documentation.js.map +1 -1
- package/dist/expo.d.ts +83 -0
- package/dist/expo.js +242 -0
- package/dist/expo.js.map +1 -0
- package/dist/index.d.ts +110 -23
- package/dist/index.js +134 -53
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +205 -37
- package/dist/server.js +290 -97
- package/dist/server.js.map +1 -1
- package/dist/testing.js +45 -3
- package/dist/testing.js.map +1 -1
- package/dist/worker.d.ts +348 -48
- package/dist/worker.js +547 -110
- package/dist/worker.js.map +1 -1
- package/features/documents/feature.json +15 -0
- package/features/documents/src/DocumentsListPage.tsx +22 -8
- package/features/documents/src/InviteDialog.tsx +63 -42
- package/features/documents/src/__tests__/documents-find-invitee-action.test.ts +131 -0
- package/features/documents/src/__tests__/documents-invitee-lookup.test.ts +67 -0
- package/features/documents/src/documents-find-invitee-action.ts +56 -0
- package/features/documents/src/documents-invitee-lookup.ts +38 -0
- package/features/documents/src/documents-ui.css +10 -0
- package/package.json +29 -9
package/dist/cli.js
CHANGED
|
@@ -676,27 +676,62 @@ function findUnknownCommand(argv, rootCommands) {
|
|
|
676
676
|
return null;
|
|
677
677
|
}
|
|
678
678
|
|
|
679
|
+
// src/shared/planes.ts
|
|
680
|
+
var PLANES = {
|
|
681
|
+
production: {
|
|
682
|
+
auth: "https://auth.deep.space",
|
|
683
|
+
api: "https://api-worker.deep.space",
|
|
684
|
+
platform: "https://platform-worker.deep.space",
|
|
685
|
+
deploy: "https://deploy-worker.deep.space",
|
|
686
|
+
appDomain: "app.space",
|
|
687
|
+
platformDomain: "deep.space",
|
|
688
|
+
home: "https://deep.space",
|
|
689
|
+
dashboard: "https://dashboard.deep.space",
|
|
690
|
+
privacyPolicy: "https://deep.space/privacy"
|
|
691
|
+
},
|
|
692
|
+
// Services on deepspacesites.com, apps on spacestest.com: production's
|
|
693
|
+
// two-zone split, because a Worker cannot fetch one in its own zone.
|
|
694
|
+
staging: {
|
|
695
|
+
auth: "https://auth.deepspacesites.com",
|
|
696
|
+
api: "https://api.deepspacesites.com",
|
|
697
|
+
platform: "https://platform.deepspacesites.com",
|
|
698
|
+
deploy: "https://deploy.deepspacesites.com",
|
|
699
|
+
appDomain: "spacestest.com",
|
|
700
|
+
platformDomain: "deepspacesites.com",
|
|
701
|
+
home: "https://spacestest.com",
|
|
702
|
+
dashboard: "https://dashboard.deepspacesites.com",
|
|
703
|
+
privacyPolicy: "https://deep.space/privacy"
|
|
704
|
+
},
|
|
705
|
+
// Services on deepspacemedical.com, apps on deepspacemedical.app: two zones
|
|
706
|
+
// in the medical Cloudflare account. The plane has no dashboard.
|
|
707
|
+
medical: {
|
|
708
|
+
auth: "https://auth.deepspacemedical.com",
|
|
709
|
+
api: "https://api.deepspacemedical.com",
|
|
710
|
+
platform: "https://platform.deepspacemedical.com",
|
|
711
|
+
deploy: "https://deploy.deepspacemedical.com",
|
|
712
|
+
appDomain: "deepspacemedical.app",
|
|
713
|
+
platformDomain: "deepspacemedical.com",
|
|
714
|
+
home: "https://deepspacemedical.com",
|
|
715
|
+
dashboard: null,
|
|
716
|
+
privacyPolicy: "https://deepspacemedical.com/privacy"
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
|
|
679
720
|
// src/cli/env.ts
|
|
680
721
|
function resolveDeepSpaceEnvironment(value) {
|
|
681
722
|
if (value === void 0 || value === "production") return "production";
|
|
682
723
|
if (value === "staging") return "staging";
|
|
724
|
+
if (value === "medical") return "medical";
|
|
683
725
|
return "invalid";
|
|
684
726
|
}
|
|
685
727
|
var DEEPSPACE_ENV = resolveDeepSpaceEnvironment(process.env.DEEPSPACE_ENV);
|
|
686
|
-
var
|
|
687
|
-
auth:
|
|
688
|
-
api:
|
|
689
|
-
platform: "https://platform-worker.deep.space",
|
|
690
|
-
deploy: "https://deploy-worker.deep.space"
|
|
691
|
-
};
|
|
692
|
-
var STAGING_URLS = {
|
|
693
|
-
// Services live on deepspacesites.com, apps on spacestest.com. This mirrors
|
|
694
|
-
// prod's two-zone split because a Worker cannot fetch one in its own zone.
|
|
695
|
-
auth: "https://auth.deepspacesites.com",
|
|
696
|
-
api: "https://api.deepspacesites.com",
|
|
697
|
-
platform: "https://platform.deepspacesites.com",
|
|
698
|
-
deploy: "https://deploy.deepspacesites.com"
|
|
728
|
+
var serviceUrls = (plane) => {
|
|
729
|
+
const { auth: auth2, api: api4, platform, deploy } = PLANES[plane];
|
|
730
|
+
return { auth: auth2, api: api4, platform, deploy };
|
|
699
731
|
};
|
|
732
|
+
var PROD_URLS = serviceUrls("production");
|
|
733
|
+
var STAGING_URLS = serviceUrls("staging");
|
|
734
|
+
var MEDICAL_URLS = serviceUrls("medical");
|
|
700
735
|
var INVALID_URLS = {
|
|
701
736
|
auth: "http://127.0.0.1:9",
|
|
702
737
|
api: "http://127.0.0.1:9",
|
|
@@ -704,19 +739,21 @@ var INVALID_URLS = {
|
|
|
704
739
|
deploy: "http://127.0.0.1:9"
|
|
705
740
|
};
|
|
706
741
|
function appDomainForEnv(env) {
|
|
707
|
-
return env === "
|
|
742
|
+
return env === "invalid" ? null : PLANES[env].appDomain;
|
|
708
743
|
}
|
|
709
744
|
function platformDomainForEnv(env) {
|
|
710
|
-
return env === "
|
|
745
|
+
return env === "invalid" ? null : PLANES[env].platformDomain;
|
|
711
746
|
}
|
|
712
|
-
var PLATFORM_URLS = DEEPSPACE_ENV === "production" ? PROD_URLS : DEEPSPACE_ENV === "staging" ? STAGING_URLS : INVALID_URLS;
|
|
747
|
+
var PLATFORM_URLS = DEEPSPACE_ENV === "production" ? PROD_URLS : DEEPSPACE_ENV === "staging" ? STAGING_URLS : DEEPSPACE_ENV === "medical" ? MEDICAL_URLS : INVALID_URLS;
|
|
713
748
|
var PLANE_URLS = {
|
|
714
749
|
production: PROD_URLS,
|
|
715
|
-
staging: STAGING_URLS
|
|
750
|
+
staging: STAGING_URLS,
|
|
751
|
+
medical: MEDICAL_URLS
|
|
716
752
|
};
|
|
717
753
|
var PLANE_AUTH_URLS = {
|
|
718
754
|
production: PLANE_URLS.production.auth,
|
|
719
|
-
staging: PLANE_URLS.staging.auth
|
|
755
|
+
staging: PLANE_URLS.staging.auth,
|
|
756
|
+
medical: PLANE_URLS.medical.auth
|
|
720
757
|
};
|
|
721
758
|
function effectivePlatformUrls(env = process.env) {
|
|
722
759
|
return {
|
|
@@ -732,7 +769,7 @@ var {
|
|
|
732
769
|
platform: PLATFORM_URL,
|
|
733
770
|
deploy: DEPLOY_URL
|
|
734
771
|
} = effectivePlatformUrls();
|
|
735
|
-
var DASHBOARD_URL = DEEPSPACE_ENV === "
|
|
772
|
+
var DASHBOARD_URL = DEEPSPACE_ENV === "invalid" ? "http://127.0.0.1:9" : PLANES[DEEPSPACE_ENV].dashboard;
|
|
736
773
|
|
|
737
774
|
// src/cli/auth.ts
|
|
738
775
|
import { readFileSync as readFileSync2, existsSync, mkdirSync } from "fs";
|
|
@@ -1014,7 +1051,7 @@ var login_default = defineDeepspaceCommand({
|
|
|
1014
1051
|
const who = await doEmailLogin(email, password);
|
|
1015
1052
|
if (!json) {
|
|
1016
1053
|
console.log(`Logged in as ${who.email} (${who.userId})`);
|
|
1017
|
-
console.log(`Dashboard: ${DASHBOARD_URL}`);
|
|
1054
|
+
if (DASHBOARD_URL) console.log(`Dashboard: ${DASHBOARD_URL}`);
|
|
1018
1055
|
}
|
|
1019
1056
|
return { data: { email: who.email, userId: who.userId } };
|
|
1020
1057
|
}
|
|
@@ -1057,13 +1094,15 @@ var login_default = defineDeepspaceCommand({
|
|
|
1057
1094
|
if (!json) {
|
|
1058
1095
|
s.stop("Authenticated");
|
|
1059
1096
|
p4.log.success(`Logged in as ${result.name ?? result.email}`);
|
|
1060
|
-
|
|
1061
|
-
|
|
1097
|
+
if (DASHBOARD_URL) {
|
|
1098
|
+
p4.note(
|
|
1099
|
+
`Manage your account, deployed apps, billing, and subscription
|
|
1062
1100
|
plans on the web dashboard:
|
|
1063
1101
|
|
|
1064
1102
|
${DASHBOARD_URL}`,
|
|
1065
|
-
|
|
1066
|
-
|
|
1103
|
+
"Dashboard"
|
|
1104
|
+
);
|
|
1105
|
+
}
|
|
1067
1106
|
p4.outro("Done");
|
|
1068
1107
|
}
|
|
1069
1108
|
return { data: { email: result.email, userId } };
|
|
@@ -1686,9 +1725,8 @@ import { existsSync as existsSync6 } from "fs";
|
|
|
1686
1725
|
import { tmpdir } from "os";
|
|
1687
1726
|
import { isAbsolute as isAbsolute2, relative, resolve as resolve3 } from "path";
|
|
1688
1727
|
function spaceRemoteName(environment = DEEPSPACE_ENV) {
|
|
1689
|
-
if (environment === "staging") return "space-staging";
|
|
1690
1728
|
if (environment === "production") return "space";
|
|
1691
|
-
return
|
|
1729
|
+
return `space-${environment}`;
|
|
1692
1730
|
}
|
|
1693
1731
|
var SPACE_REMOTE = spaceRemoteName();
|
|
1694
1732
|
function spaceTrackingRef(branch, remote = SPACE_REMOTE) {
|
|
@@ -1724,7 +1762,7 @@ function entryIsTransient(cwd) {
|
|
|
1724
1762
|
return rel === "" || !rel.startsWith("..") && !isAbsolute2(rel);
|
|
1725
1763
|
}
|
|
1726
1764
|
function helperEntryUsable(command) {
|
|
1727
|
-
const match = /^!(?:DEEPSPACE_ENV=(production|staging) )?'([^']*)' '([^']*)' git-credential$/.exec(command);
|
|
1765
|
+
const match = /^!(?:DEEPSPACE_ENV=(production|staging|medical) )?'([^']*)' '([^']*)' git-credential$/.exec(command);
|
|
1728
1766
|
const expectedEnvironment = DEEPSPACE_ENV === "production" ? void 0 : DEEPSPACE_ENV;
|
|
1729
1767
|
if (!match || match[1] !== expectedEnvironment) return false;
|
|
1730
1768
|
return existsSync6(match[2]) && existsSync6(match[3]);
|
|
@@ -1732,7 +1770,7 @@ function helperEntryUsable(command) {
|
|
|
1732
1770
|
function credentialHelperCommand(environment = DEEPSPACE_ENV) {
|
|
1733
1771
|
const entry = process.argv[1];
|
|
1734
1772
|
if (!entry) throw new Error("CLI entry path is unavailable");
|
|
1735
|
-
const environmentPrefix = environment === "staging" ?
|
|
1773
|
+
const environmentPrefix = environment === "staging" || environment === "medical" ? `DEEPSPACE_ENV=${environment} ` : "";
|
|
1736
1774
|
return `!${environmentPrefix}${shQuote(process.execPath)} ${shQuote(entry)} git-credential`;
|
|
1737
1775
|
}
|
|
1738
1776
|
function installCredentialHelper(cwd, url) {
|
|
@@ -4482,10 +4520,9 @@ import { existsSync as existsSync15, mkdirSync as mkdirSync7, readFileSync as re
|
|
|
4482
4520
|
import { homedir as homedir2 } from "os";
|
|
4483
4521
|
import { join as join13 } from "path";
|
|
4484
4522
|
var TEST_ACCOUNTS_PATH = join13(homedir2(), ".deepspace", "test-accounts.json");
|
|
4485
|
-
var PRODUCTION_AUTH_ORIGIN = "https://auth.deep.space";
|
|
4486
|
-
var STAGING_AUTH_ORIGIN = "https://auth.deepspacesites.com";
|
|
4487
4523
|
function currentTestAccountScope(env = process.env) {
|
|
4488
|
-
const
|
|
4524
|
+
const plane = env.DEEPSPACE_ENV;
|
|
4525
|
+
const selected = env.DEEPSPACE_AUTH_URL ?? (plane === "staging" || plane === "medical" ? PLANES[plane].auth : PLANES.production.auth);
|
|
4489
4526
|
return normalizeTestAccountScope(selected);
|
|
4490
4527
|
}
|
|
4491
4528
|
function normalizeTestAccountScope(value) {
|
|
@@ -5753,6 +5790,7 @@ var ACTION_TOOLS_DELETE_WHERE_MIGRATION_ID = "2026-08-action-tools-delete-where"
|
|
|
5753
5790
|
var BUILD_INJECTED_APP_ID_MIGRATION_ID = "2026-08-build-injected-app-id";
|
|
5754
5791
|
var ACTION_ROUTES_BEARER_GUARD_MIGRATION_ID = "2026-08-action-routes-bearer-guard";
|
|
5755
5792
|
var FILES_SESSION_COOKIE_READS_MIGRATION_ID = "2026-09-files-session-cookie-reads";
|
|
5793
|
+
var AI_SDK_7_MIGRATION_ID = "2026-09-ai-sdk-7";
|
|
5756
5794
|
function validateAppMigrationIds(value) {
|
|
5757
5795
|
if (!Array.isArray(value)) {
|
|
5758
5796
|
return { valid: false, reason: "app migrations must be a JSON string array" };
|
|
@@ -5816,6 +5854,12 @@ var APP_MIGRATION_GUIDANCE = [
|
|
|
5816
5854
|
description: "Let private file URLs render in <img>/<audio>/<video> for the signed-in user",
|
|
5817
5855
|
files: ["the app-owned HTTP route file that proxies /api/files/*"],
|
|
5818
5856
|
guidance: "In the /api/files/* proxy only, replace `const auth = await resolveAuth(c.req.raw, c.env)` with `const auth = (await resolveAuth(c.req.raw, c.env)) ?? (await resolveSessionReadAuth(c.req.raw, c.env))`, importing resolveSessionReadAuth from 'deepspace/worker'. It identifies same-origin GET/HEAD by the app-origin session cookie and returns null for everything else. Do not add it to resolveAuth, which also gates writes. In the same route, skip the JSON URL rewrite for HEAD: change `if (contentType.includes('application/json'))` to `if (contentType.includes('application/json') && c.req.method !== 'HEAD')`, because a HEAD answer carries the content-type but no body and parsing it would turn every failed media probe into a 500."
|
|
5857
|
+
},
|
|
5858
|
+
{
|
|
5859
|
+
id: AI_SDK_7_MIGRATION_ID,
|
|
5860
|
+
description: "Move the app's own AI code to AI SDK 7",
|
|
5861
|
+
files: ["src/ai/chat-routes.ts", 'every other file importing from "ai"'],
|
|
5862
|
+
guidance: "Run `npx @ai-sdk/codemod v7 src` and review its diff: it renames `system` to `instructions` in ANY object, including non-AI-SDK request bodies, so revert those. Then by hand: in the chat route's `onEnd` (formerly `onFinish`), persist `responseMessages` \u2014 `response.messages` now holds only the final step, which drops earlier tool calls \u2014 and since `onEnd` no longer runs after an abort, also persist in `onAbort({ steps })` from the completed steps' `response.messages`. Replace `result.toUIMessageStreamResponse(options)` with `createUIMessageStreamResponse({ headers, stream: toUIMessageStream({ stream: result.stream, ...options }) })` imported from 'ai'. A tool's `execute` options now include `context`. `role: 'system'` messages inside `messages` are rejected unless the call sets `allowSystemInMessages: true`."
|
|
5819
5863
|
}
|
|
5820
5864
|
];
|
|
5821
5865
|
var APP_MIGRATION_DEFINITIONS = APP_MIGRATION_GUIDANCE.map(({ id, description }) => ({
|
|
@@ -5867,14 +5911,18 @@ async function buildDeployBundle(options) {
|
|
|
5867
5911
|
let preparedWranglerConfig;
|
|
5868
5912
|
try {
|
|
5869
5913
|
preparedWranglerConfig = prepareWranglerEnvConfig(appDir, envName);
|
|
5870
|
-
const appDomain = DEEPSPACE_ENV
|
|
5914
|
+
const appDomain = appDomainForEnv(DEEPSPACE_ENV) ?? "app.space";
|
|
5871
5915
|
execSync2("npx vite build", {
|
|
5872
5916
|
cwd: appDir,
|
|
5873
5917
|
stdio: "pipe",
|
|
5874
5918
|
env: {
|
|
5875
5919
|
...wranglerViteEnv(process.env, preparedWranglerConfig),
|
|
5876
5920
|
// The Vite plugin's one documentation compile stamps release URLs.
|
|
5877
|
-
DEEPSPACE_DOCUMENTATION_BASE_URL: `https://${appName}.${appDomain}/docs
|
|
5921
|
+
DEEPSPACE_DOCUMENTATION_BASE_URL: `https://${appName}.${appDomain}/docs`,
|
|
5922
|
+
// The scaffold's build-time prerender (prerender.ts) builds canonical
|
|
5923
|
+
// URLs and the sitemap on this, so a staging deploy resolves to
|
|
5924
|
+
// spacestest.com instead of the wrangler name on app.space.
|
|
5925
|
+
DEEPSPACE_SITE_ORIGIN: `https://${appName}.${appDomain}`
|
|
5878
5926
|
}
|
|
5879
5927
|
});
|
|
5880
5928
|
} catch (error) {
|
|
@@ -8256,7 +8304,7 @@ var whoami_default = defineDeepspaceCommand({
|
|
|
8256
8304
|
if (payload.exp) {
|
|
8257
8305
|
console.log(`Expires: ${new Date(payload.exp * 1e3).toISOString()} (renews on use)`);
|
|
8258
8306
|
}
|
|
8259
|
-
console.log(`Dashboard: ${DASHBOARD_URL}`);
|
|
8307
|
+
if (DASHBOARD_URL) console.log(`Dashboard: ${DASHBOARD_URL}`);
|
|
8260
8308
|
if (isTestAccount) {
|
|
8261
8309
|
console.log("");
|
|
8262
8310
|
console.log("Note: this is a test account, not a real OAuth developer.");
|
|
@@ -8733,8 +8781,10 @@ function renderSummary(summary) {
|
|
|
8733
8781
|
);
|
|
8734
8782
|
}
|
|
8735
8783
|
}
|
|
8736
|
-
|
|
8737
|
-
|
|
8784
|
+
if (DASHBOARD_URL) {
|
|
8785
|
+
lines.push("");
|
|
8786
|
+
lines.push(`Dashboard: ${DASHBOARD_URL}`);
|
|
8787
|
+
}
|
|
8738
8788
|
return lines.join("\n");
|
|
8739
8789
|
}
|
|
8740
8790
|
var usage_default = defineDeepspaceCommand({
|
|
@@ -10993,9 +11043,19 @@ function formatCurrency(value, currency) {
|
|
|
10993
11043
|
return `${value} ${currency}`;
|
|
10994
11044
|
}
|
|
10995
11045
|
function priceLabel(billing) {
|
|
10996
|
-
if (billing.baseCost === null)
|
|
10997
|
-
|
|
10998
|
-
|
|
11046
|
+
if (billing.baseCost === null) {
|
|
11047
|
+
const price2 = "metered at the provider's actual cost plus platform markup";
|
|
11048
|
+
return billing.freeTierPriceDiffers ? `${price2}; free-tier pricing differs` : price2;
|
|
11049
|
+
}
|
|
11050
|
+
const tokenScale = billing.model === "per_token" ? 1e6 : 1;
|
|
11051
|
+
const unit = billing.model === "per_token" ? "per 1M tokens" : billingUnit(billing.model);
|
|
11052
|
+
const paidCost = (billing.paidBaseCost ?? billing.baseCost) * tokenScale;
|
|
11053
|
+
const figure = `${formatCurrency(paidCost, billing.currency)} ${unit}`;
|
|
11054
|
+
const price = billing.variesWithInput ? `base ${figure} (some inputs cost less or more)` : figure;
|
|
11055
|
+
if (!billing.freeTierPriceDiffers) return price;
|
|
11056
|
+
const freeFigure = `${formatCurrency(billing.baseCost * tokenScale, billing.currency)} ${unit}`;
|
|
11057
|
+
const freePrice = billing.variesWithInput ? `base ${freeFigure} (some inputs cost less or more)` : freeFigure;
|
|
11058
|
+
return `paid tier: ${price}; free tier: ${freePrice}`;
|
|
10999
11059
|
}
|
|
11000
11060
|
function billingUnit(model) {
|
|
11001
11061
|
if (model === "per_token") return "per token";
|
|
@@ -11561,14 +11621,31 @@ async function requestJson(url, init, token, timeout) {
|
|
|
11561
11621
|
clearTimeout(timer);
|
|
11562
11622
|
}
|
|
11563
11623
|
}
|
|
11624
|
+
var MAX_DETAIL_TEXT = 2e3;
|
|
11625
|
+
var DETAIL_PROSE_KEYS = /* @__PURE__ */ new Set(["error", "detail", "guidance", "message"]);
|
|
11626
|
+
function describeDetail(detail) {
|
|
11627
|
+
const parts = [];
|
|
11628
|
+
for (const [key, value] of Object.entries(detail)) {
|
|
11629
|
+
if (value === void 0 || value === null || value === "") continue;
|
|
11630
|
+
const prose = typeof value === "string" && DETAIL_PROSE_KEYS.has(key);
|
|
11631
|
+
parts.push(prose ? value : `${key}: ${JSON.stringify(value)}`);
|
|
11632
|
+
}
|
|
11633
|
+
const text2 = parts.join(" ");
|
|
11634
|
+
return text2.length > MAX_DETAIL_TEXT ? `${text2.slice(0, MAX_DETAIL_TEXT)}\u2026` : text2;
|
|
11635
|
+
}
|
|
11564
11636
|
function httpRefusal(response, tokens) {
|
|
11565
11637
|
const server = isRecord(response.body) ? response.body : void 0;
|
|
11566
11638
|
const code = safeServerCode(server?.code);
|
|
11567
|
-
const
|
|
11639
|
+
const baseMessage = typeof server?.error === "string" ? redact(server.error, tokens).slice(0, 500) : "";
|
|
11640
|
+
const redactedDetail = isRecord(server?.detail) ? redactValue(server.detail, tokens) : void 0;
|
|
11641
|
+
const detail = isRecord(redactedDetail) ? { extra: { detail: redactedDetail } } : {};
|
|
11642
|
+
const detailText = isRecord(redactedDetail) ? describeDetail(redactedDetail) : "";
|
|
11643
|
+
const message = detailText ? `${baseMessage} ${detailText}`.trim() : baseMessage;
|
|
11568
11644
|
if (response.status === 403) {
|
|
11569
11645
|
return new Refusal(
|
|
11570
11646
|
message || "You are not allowed to use this app agent.",
|
|
11571
|
-
code ?? "agent_forbidden"
|
|
11647
|
+
code ?? "agent_forbidden",
|
|
11648
|
+
detail
|
|
11572
11649
|
);
|
|
11573
11650
|
}
|
|
11574
11651
|
if (response.status === 404 && !server) {
|
|
@@ -11579,7 +11656,8 @@ function httpRefusal(response, tokens) {
|
|
|
11579
11656
|
}
|
|
11580
11657
|
return new Refusal(
|
|
11581
11658
|
message || `App agent request failed (${response.status}).`,
|
|
11582
|
-
code ?? (response.status === 404 ? "agent_endpoint_not_found" : "agent_request_failed")
|
|
11659
|
+
code ?? (response.status === 404 ? "agent_endpoint_not_found" : "agent_request_failed"),
|
|
11660
|
+
detail
|
|
11583
11661
|
);
|
|
11584
11662
|
}
|
|
11585
11663
|
async function callAgent(target2, path, init, timeout) {
|
|
@@ -11899,7 +11977,7 @@ Context: deepspace ${payload.cliVersion} \xB7 ${payload.nodeVersion} \xB7 ${payl
|
|
|
11899
11977
|
} else {
|
|
11900
11978
|
console.log(`Submitted feedback ${result.report.id} (${result.report.type}).`);
|
|
11901
11979
|
}
|
|
11902
|
-
console.log(`Track triage status at ${DASHBOARD_URL}.`);
|
|
11980
|
+
if (DASHBOARD_URL) console.log(`Track triage status at ${DASHBOARD_URL}.`);
|
|
11903
11981
|
}
|
|
11904
11982
|
return { data: { report: result.report } };
|
|
11905
11983
|
}
|
|
@@ -16045,7 +16123,7 @@ import { join as join28, resolve as resolve22 } from "path";
|
|
|
16045
16123
|
// package.json
|
|
16046
16124
|
var package_default = {
|
|
16047
16125
|
name: "deepspace",
|
|
16048
|
-
version: "0.
|
|
16126
|
+
version: "0.35.0",
|
|
16049
16127
|
engines: {
|
|
16050
16128
|
node: ">=22.15.0 <23 || >=24 <25 || >=26 <27"
|
|
16051
16129
|
},
|
|
@@ -16086,6 +16164,10 @@ var package_default = {
|
|
|
16086
16164
|
types: "./dist/build.d.ts",
|
|
16087
16165
|
import: "./dist/build.js"
|
|
16088
16166
|
},
|
|
16167
|
+
"./expo": {
|
|
16168
|
+
types: "./dist/expo.d.ts",
|
|
16169
|
+
import: "./dist/expo.js"
|
|
16170
|
+
},
|
|
16089
16171
|
"./documentation": {
|
|
16090
16172
|
types: "./dist/documentation.d.ts",
|
|
16091
16173
|
import: "./dist/documentation.js"
|
|
@@ -16102,26 +16184,26 @@ var package_default = {
|
|
|
16102
16184
|
],
|
|
16103
16185
|
scripts: {
|
|
16104
16186
|
build: "node ../../scripts/clean-artifacts.mjs dist --tsbuildinfo && tsup",
|
|
16105
|
-
"type-check": "tsc --noEmit",
|
|
16187
|
+
"type-check": "tsc --noEmit && tsc --noEmit -p tsconfig.expo.json",
|
|
16106
16188
|
test: "vitest run",
|
|
16107
16189
|
"test:documentation-browser": "playwright test --config src/documentation/runtime/__browser__/playwright.config.ts",
|
|
16108
16190
|
clean: "node ../../scripts/clean-artifacts.mjs dist --tsbuildinfo",
|
|
16109
16191
|
prepublishOnly: "pnpm build"
|
|
16110
16192
|
},
|
|
16111
16193
|
dependencies: {
|
|
16112
|
-
"@ai-sdk/anthropic": "
|
|
16113
|
-
"@ai-sdk/openai": "
|
|
16114
|
-
"@ai-sdk/openai-compatible": "
|
|
16194
|
+
"@ai-sdk/anthropic": "4.0.58",
|
|
16195
|
+
"@ai-sdk/openai": "4.0.71",
|
|
16196
|
+
"@ai-sdk/openai-compatible": "3.0.53",
|
|
16115
16197
|
"@clack/prompts": "^1.2.0",
|
|
16116
16198
|
"@mdx-js/mdx": "^3.1.1",
|
|
16117
16199
|
acorn: "^8.16.0",
|
|
16118
|
-
ai: "
|
|
16200
|
+
ai: "7.0.107",
|
|
16119
16201
|
"better-auth": "1.6.23",
|
|
16120
16202
|
citty: "^0.2.0",
|
|
16121
16203
|
"cross-spawn": "^7.0.6",
|
|
16122
16204
|
esbuild: "^0.27.0",
|
|
16123
16205
|
"highlight.js": "^11.11.1",
|
|
16124
|
-
hono: "^4.
|
|
16206
|
+
hono: "^4.13.7",
|
|
16125
16207
|
jose: "^6.1.0",
|
|
16126
16208
|
marked: "^18.0.7",
|
|
16127
16209
|
"mdast-util-gfm": "^3.1.0",
|
|
@@ -16130,7 +16212,7 @@ var package_default = {
|
|
|
16130
16212
|
"remark-frontmatter": "^5.0.0",
|
|
16131
16213
|
"remark-gfm": "^4.0.1",
|
|
16132
16214
|
"sanitize-html": "^2.17.7",
|
|
16133
|
-
"smol-toml": "^1.
|
|
16215
|
+
"smol-toml": "^1.7.1",
|
|
16134
16216
|
yaml: "^2.9.0",
|
|
16135
16217
|
yjs: "^13.6.0",
|
|
16136
16218
|
zod: "^4.3.6"
|
|
@@ -16141,7 +16223,11 @@ var package_default = {
|
|
|
16141
16223
|
"lucide-react": ">=0.400.0",
|
|
16142
16224
|
react: "^18.0.0 || ^19.0.0",
|
|
16143
16225
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
16144
|
-
"tailwind-merge": ">=2.0.0"
|
|
16226
|
+
"tailwind-merge": ">=2.0.0",
|
|
16227
|
+
"expo-crypto": "~57.0.0",
|
|
16228
|
+
"expo-linking": "~57.0.0",
|
|
16229
|
+
"expo-secure-store": "~57.0.0",
|
|
16230
|
+
"expo-web-browser": "~57.0.0"
|
|
16145
16231
|
},
|
|
16146
16232
|
peerDependenciesMeta: {
|
|
16147
16233
|
"@playwright/test": {
|
|
@@ -16161,6 +16247,18 @@ var package_default = {
|
|
|
16161
16247
|
},
|
|
16162
16248
|
"lucide-react": {
|
|
16163
16249
|
optional: true
|
|
16250
|
+
},
|
|
16251
|
+
"expo-crypto": {
|
|
16252
|
+
optional: true
|
|
16253
|
+
},
|
|
16254
|
+
"expo-linking": {
|
|
16255
|
+
optional: true
|
|
16256
|
+
},
|
|
16257
|
+
"expo-secure-store": {
|
|
16258
|
+
optional: true
|
|
16259
|
+
},
|
|
16260
|
+
"expo-web-browser": {
|
|
16261
|
+
optional: true
|
|
16164
16262
|
}
|
|
16165
16263
|
},
|
|
16166
16264
|
devDependencies: {
|
|
@@ -16554,7 +16652,7 @@ function assertKnownOptions(argv) {
|
|
|
16554
16652
|
var rawArgs = process.argv.slice(2);
|
|
16555
16653
|
var wantsHelp = rawArgs.some((arg) => arg === "--help" || arg === "-h");
|
|
16556
16654
|
if (DEEPSPACE_ENV === "invalid") {
|
|
16557
|
-
const error = `Invalid DEEPSPACE_ENV=${JSON.stringify(process.env.DEEPSPACE_ENV)}. Use \`staging\`, \`
|
|
16655
|
+
const error = `Invalid DEEPSPACE_ENV=${JSON.stringify(process.env.DEEPSPACE_ENV)}. Use \`production\`, \`staging\`, \`medical\`, or unset it; refusing to default to production.`;
|
|
16558
16656
|
if (rawArgs.includes("--json") && !wantsHelp) {
|
|
16559
16657
|
console.log(JSON.stringify({ ok: false, code: "invalid_environment", error }));
|
|
16560
16658
|
} else {
|