@agent-native/core 0.12.11 → 0.12.13

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 (41) hide show
  1. package/dist/cli/workspace-dev.js +15 -11
  2. package/dist/cli/workspace-dev.js.map +1 -1
  3. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  4. package/dist/client/NewWorkspaceAppFlow.js +5 -2
  5. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  6. package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
  7. package/dist/client/extensions/ExtensionsListPage.js +2 -2
  8. package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
  9. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  10. package/dist/client/settings/SettingsPanel.js +20 -16
  11. package/dist/client/settings/SettingsPanel.js.map +1 -1
  12. package/dist/client/settings/useBuilderStatus.d.ts +7 -7
  13. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  14. package/dist/client/settings/useBuilderStatus.js +1 -6
  15. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  16. package/dist/client/vite-dev-recovery-script.d.ts.map +1 -1
  17. package/dist/client/vite-dev-recovery-script.js +10 -1
  18. package/dist/client/vite-dev-recovery-script.js.map +1 -1
  19. package/dist/server/builder-browser.d.ts +4 -4
  20. package/dist/server/builder-browser.d.ts.map +1 -1
  21. package/dist/server/builder-browser.js +1 -0
  22. package/dist/server/builder-browser.js.map +1 -1
  23. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  24. package/dist/server/core-routes-plugin.js +33 -59
  25. package/dist/server/core-routes-plugin.js.map +1 -1
  26. package/dist/server/credential-provider.d.ts +20 -14
  27. package/dist/server/credential-provider.d.ts.map +1 -1
  28. package/dist/server/credential-provider.js +32 -45
  29. package/dist/server/credential-provider.js.map +1 -1
  30. package/dist/templates/default/app/root.tsx +14 -1
  31. package/dist/templates/default/package.json +0 -1
  32. package/dist/transcription/builder-transcription.d.ts.map +1 -1
  33. package/dist/transcription/builder-transcription.js +10 -3
  34. package/dist/transcription/builder-transcription.js.map +1 -1
  35. package/dist/vite/client.d.ts +2 -0
  36. package/dist/vite/client.d.ts.map +1 -1
  37. package/dist/vite/client.js +2 -0
  38. package/dist/vite/client.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/templates/default/app/root.tsx +14 -1
  41. package/src/templates/default/package.json +0 -1
@@ -368,39 +368,10 @@ export function createCoreRoutesPlugin(options = {}) {
368
368
  branchProjectIdConfigured: !!projectId,
369
369
  branchProjectId: projectId || undefined,
370
370
  };
371
- // Env-managed mode: BUILDER_PRIVATE_KEY is set at the deployment
372
- // level, so every user shares the operator's Builder identity.
373
- // Skip per-user credential lookups entirely the env key is
374
- // authoritative and the UI must hide connect/disconnect controls.
375
- // Branch project IDs are still request-scoped above so a Builder.io
376
- // org secret can enable branches without a deploy env var.
377
- if (envStatus.envManaged) {
378
- return withConnectToken(requestStatus);
379
- }
380
- // Per-user OAuth mode: read the user's app_secrets-stored creds.
381
- try {
382
- const { resolveBuilderCredentials } = await import("./credential-provider.js");
383
- const creds = await resolveBuilderCredentials();
384
- if (creds.privateKey) {
385
- return withConnectToken({
386
- ...requestStatus,
387
- configured: true,
388
- privateKeyConfigured: true,
389
- publicKeyConfigured: !!creds.publicKey,
390
- userId: creds.userId || envStatus.userId,
391
- orgName: creds.orgName || envStatus.orgName,
392
- orgKind: creds.orgKind || envStatus.orgKind,
393
- });
394
- }
395
- }
396
- catch {
397
- // Secrets table not ready — fall through to env status
398
- }
399
- // Surface a recent OAuth callback failure so the parent's polling
400
- // stops with a clear message instead of timing out at 5min. The
401
- // callback handler writes a `builder-connect-error:<email>` row
402
- // when `writeBuilderCredentials` throws; this read self-clears so
403
- // the message only fires once.
371
+ // Surface a recent OAuth callback failure before reporting a
372
+ // deployment fallback as "connected"; otherwise a failed personal
373
+ // connect attempt on a deploy that also has BUILDER_PRIVATE_KEY set
374
+ // looks successful even though the user's credentials were not saved.
404
375
  try {
405
376
  if (userEmail) {
406
377
  const errKey = `builder-connect-error:${userEmail}`;
@@ -428,6 +399,31 @@ export function createCoreRoutesPlugin(options = {}) {
428
399
  catch {
429
400
  // settings store unavailable — fall through
430
401
  }
402
+ // Read request-scoped Builder credentials first; deploy env is only
403
+ // the fallback. This keeps a root/local BUILDER_PRIVATE_KEY from
404
+ // blocking a user from connecting their own Builder account.
405
+ try {
406
+ const { resolveBuilderCredentials, resolveBuilderCredentialSource, } = await import("./credential-provider.js");
407
+ const [creds, credentialSource] = await Promise.all([
408
+ resolveBuilderCredentials(),
409
+ resolveBuilderCredentialSource(),
410
+ ]);
411
+ if (creds.privateKey) {
412
+ return withConnectToken({
413
+ ...requestStatus,
414
+ configured: true,
415
+ privateKeyConfigured: true,
416
+ publicKeyConfigured: !!creds.publicKey,
417
+ userId: creds.userId || envStatus.userId,
418
+ orgName: creds.orgName || envStatus.orgName,
419
+ orgKind: creds.orgKind || envStatus.orgKind,
420
+ credentialSource: credentialSource ?? undefined,
421
+ });
422
+ }
423
+ }
424
+ catch {
425
+ // Secrets table not ready — fall through to env status
426
+ }
431
427
  // Honor legacy disconnect flag for existing deployments.
432
428
  try {
433
429
  const disconnected = await getSetting("builder-disconnected");
@@ -529,19 +525,6 @@ export function createCoreRoutesPlugin(options = {}) {
529
525
  setResponseStatus(event, 401);
530
526
  return { error: "Authentication required" };
531
527
  }
532
- // Env-managed mode: per-user OAuth is disabled because the operator
533
- // already provided a deploy-level Builder identity. Reject the
534
- // connect attempt — any per-user keys we wrote would be ignored
535
- // by the resolver, so completing the OAuth flow would be a no-op
536
- // that misleads the user about the resulting connection state.
537
- const { isBuilderEnvManaged } = await import("./credential-provider.js");
538
- if (isBuilderEnvManaged()) {
539
- setResponseStatus(event, 409);
540
- return {
541
- error: "Builder is managed by the deployment (BUILDER_PRIVATE_KEY is set). Per-user connect is disabled.",
542
- envManaged: true,
543
- };
544
- }
545
528
  const requestUrl = new URL(`${event.url?.pathname || "/"}${event.url?.search || ""}`, getOrigin(event));
546
529
  const connectToken = requestUrl.searchParams.get(BUILDER_CONNECT_PARAM);
547
530
  const hasValidConnectToken = verifyBuilderConnectToken(connectToken, ownerEmail);
@@ -878,10 +861,9 @@ export function createCoreRoutesPlugin(options = {}) {
878
861
  return createBuilderBrowserCallbackPage(previewUrl);
879
862
  }));
880
863
  // POST /_agent-native/builder/disconnect — revoke the user's per-user
881
- // Builder credentials in app_secrets. In env-managed mode (deploy-level
882
- // BUILDER_PRIVATE_KEY set) disconnection is operator-controlled this
883
- // endpoint refuses with 409 so a stale UI button can't pretend to
884
- // disconnect a deploy-level identity it doesn't own.
864
+ // or org-scoped Builder credentials in app_secrets. Deploy-level env
865
+ // credentials are never mutated here; if env is configured it remains as
866
+ // the fallback after request-scoped credentials are removed.
885
867
  getH3App(nitroApp).use(`${P}/builder/disconnect`, defineEventHandler(async (event) => {
886
868
  if (getMethod(event) !== "POST") {
887
869
  setResponseStatus(event, 405);
@@ -892,15 +874,7 @@ export function createCoreRoutesPlugin(options = {}) {
892
874
  setResponseStatus(event, 401);
893
875
  return { error: "unauthorized" };
894
876
  }
895
- const { isBuilderEnvManaged, deleteBuilderCredentials } = await import("./credential-provider.js");
896
- if (isBuilderEnvManaged()) {
897
- setResponseStatus(event, 409);
898
- return {
899
- ok: false,
900
- error: "Builder is managed by deploy-level BUILDER_PRIVATE_KEY. To disconnect, the operator must remove the env var.",
901
- envManaged: true,
902
- };
903
- }
877
+ const { deleteBuilderCredentials } = await import("./credential-provider.js");
904
878
  // Mirror the connect-side scope decision so disconnect undoes
905
879
  // exactly what connect wrote: owner/admin connections land at
906
880
  // org scope and tear down at org scope; member or no-org