@agent-native/core 0.7.51 → 0.7.52

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 (71) hide show
  1. package/dist/a2a/artifact-response.d.ts.map +1 -1
  2. package/dist/a2a/artifact-response.js +109 -5
  3. package/dist/a2a/artifact-response.js.map +1 -1
  4. package/dist/a2a/server.d.ts.map +1 -1
  5. package/dist/a2a/server.js +11 -0
  6. package/dist/a2a/server.js.map +1 -1
  7. package/dist/deploy/workspace-deploy.js +32 -3
  8. package/dist/deploy/workspace-deploy.js.map +1 -1
  9. package/dist/integrations/plugin.d.ts.map +1 -1
  10. package/dist/integrations/plugin.js +2 -1
  11. package/dist/integrations/plugin.js.map +1 -1
  12. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  13. package/dist/integrations/webhook-handler.js +10 -0
  14. package/dist/integrations/webhook-handler.js.map +1 -1
  15. package/dist/onboarding/plugin.d.ts.map +1 -1
  16. package/dist/onboarding/plugin.js +2 -1
  17. package/dist/onboarding/plugin.js.map +1 -1
  18. package/dist/org/plugin.d.ts.map +1 -1
  19. package/dist/org/plugin.js +2 -1
  20. package/dist/org/plugin.js.map +1 -1
  21. package/dist/scripts/call-agent.js +2 -2
  22. package/dist/scripts/call-agent.js.map +1 -1
  23. package/dist/server/action-routes.d.ts.map +1 -1
  24. package/dist/server/action-routes.js +5 -11
  25. package/dist/server/action-routes.js.map +1 -1
  26. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  27. package/dist/server/agent-chat-plugin.js +2 -1
  28. package/dist/server/agent-chat-plugin.js.map +1 -1
  29. package/dist/server/auth-plugin.d.ts.map +1 -1
  30. package/dist/server/auth-plugin.js +2 -1
  31. package/dist/server/auth-plugin.js.map +1 -1
  32. package/dist/server/auth.d.ts.map +1 -1
  33. package/dist/server/auth.js +7 -12
  34. package/dist/server/auth.js.map +1 -1
  35. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  36. package/dist/server/core-routes-plugin.js +9 -29
  37. package/dist/server/core-routes-plugin.js.map +1 -1
  38. package/dist/server/cors-origins.d.ts +10 -0
  39. package/dist/server/cors-origins.d.ts.map +1 -0
  40. package/dist/server/cors-origins.js +34 -0
  41. package/dist/server/cors-origins.js.map +1 -0
  42. package/dist/server/create-server.d.ts.map +1 -1
  43. package/dist/server/create-server.js +10 -29
  44. package/dist/server/create-server.js.map +1 -1
  45. package/dist/server/framework-request-handler.d.ts +11 -0
  46. package/dist/server/framework-request-handler.d.ts.map +1 -1
  47. package/dist/server/framework-request-handler.js +24 -1
  48. package/dist/server/framework-request-handler.js.map +1 -1
  49. package/dist/server/resources-plugin.d.ts.map +1 -1
  50. package/dist/server/resources-plugin.js +2 -1
  51. package/dist/server/resources-plugin.js.map +1 -1
  52. package/dist/terminal/terminal-plugin.d.ts.map +1 -1
  53. package/dist/terminal/terminal-plugin.js +2 -1
  54. package/dist/terminal/terminal-plugin.js.map +1 -1
  55. package/docs/content/a2a-protocol.md +75 -6
  56. package/docs/content/creating-templates.md +10 -0
  57. package/docs/content/dispatch.md +94 -0
  58. package/docs/content/getting-started.md +8 -0
  59. package/docs/content/key-concepts.md +16 -0
  60. package/docs/content/messaging.md +45 -13
  61. package/docs/content/multi-app-workspace.md +10 -2
  62. package/docs/content/notifications.md +1 -1
  63. package/docs/content/observability.md +184 -0
  64. package/docs/content/onboarding.md +7 -2
  65. package/docs/content/template-dispatch.md +3 -1
  66. package/docs/content/tools.md +95 -1
  67. package/docs/content/tracking.md +1 -1
  68. package/docs/content/what-is-agent-native.md +3 -1
  69. package/docs/content/workspace-management.md +5 -5
  70. package/docs/content/workspace.md +2 -0
  71. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auth-plugin.d.ts","sourceRoot":"","sources":["../../src/server/auth-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAMtE;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAE/B,CAAC"}
1
+ {"version":3,"file":"auth-plugin.d.ts","sourceRoot":"","sources":["../../src/server/auth-plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAOtE;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAE/B,CAAC"}
@@ -1,7 +1,8 @@
1
- import { getH3App, awaitBootstrap } from "./framework-request-handler.js";
1
+ import { getH3App, awaitBootstrap, markDefaultPluginProvided, } from "./framework-request-handler.js";
2
2
  import { autoMountAuth } from "./auth.js";
3
3
  export function createAuthPlugin(options) {
4
4
  return async (nitroApp) => {
5
+ markDefaultPluginProvided(nitroApp, "auth");
5
6
  // Wait for any other default plugins to finish mounting first.
6
7
  await awaitBootstrap(nitroApp);
7
8
  await autoMountAuth(getH3App(nitroApp), options);
@@ -1 +1 @@
1
- {"version":3,"file":"auth-plugin.js","sourceRoot":"","sources":["../../src/server/auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAK1C,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,OAAO,KAAK,EAAE,QAAa,EAAE,EAAE;QAC7B,+DAA+D;QAC/D,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB,KAAK,EAAE,QAAa,EAAE,EAAE;IACvE,OAAO,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import { getH3App, awaitBootstrap } from \"./framework-request-handler.js\";\nimport { autoMountAuth } from \"./auth.js\";\nimport type { AuthOptions } from \"./auth.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport function createAuthPlugin(options?: AuthOptions): NitroPluginDef {\n return async (nitroApp: any) => {\n // Wait for any other default plugins to finish mounting first.\n await awaitBootstrap(nitroApp);\n await autoMountAuth(getH3App(nitroApp), options);\n };\n}\n\n/**\n * Default auth plugin — email/password auth with optional Google OAuth.\n * Google sign-in button appears automatically on the login page when\n * GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET env vars are set.\n */\nexport const defaultAuthPlugin: NitroPluginDef = async (nitroApp: any) => {\n return createAuthPlugin()(nitroApp);\n};\n"]}
1
+ {"version":3,"file":"auth-plugin.js","sourceRoot":"","sources":["../../src/server/auth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,cAAc,EACd,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAK1C,MAAM,UAAU,gBAAgB,CAAC,OAAqB;IACpD,OAAO,KAAK,EAAE,QAAa,EAAE,EAAE;QAC7B,yBAAyB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,+DAA+D;QAC/D,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAmB,KAAK,EAAE,QAAa,EAAE,EAAE;IACvE,OAAO,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC","sourcesContent":["import {\n getH3App,\n awaitBootstrap,\n markDefaultPluginProvided,\n} from \"./framework-request-handler.js\";\nimport { autoMountAuth } from \"./auth.js\";\nimport type { AuthOptions } from \"./auth.js\";\n\ntype NitroPluginDef = (nitroApp: any) => void | Promise<void>;\n\nexport function createAuthPlugin(options?: AuthOptions): NitroPluginDef {\n return async (nitroApp: any) => {\n markDefaultPluginProvided(nitroApp, \"auth\");\n // Wait for any other default plugins to finish mounting first.\n await awaitBootstrap(nitroApp);\n await autoMountAuth(getH3App(nitroApp), options);\n };\n}\n\n/**\n * Default auth plugin — email/password auth with optional Google OAuth.\n * Google sign-in button appears automatically on the login page when\n * GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET env vars are set.\n */\nexport const defaultAuthPlugin: NitroPluginDef = async (nitroApp: any) => {\n return createAuthPlugin()(nitroApp);\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/server/auth.ts"],"names":[],"mappings":"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"}
@@ -36,6 +36,7 @@ function toWebRequest(event) {
36
36
  }
37
37
  import { getDbExec, isPostgres, intType, isLocalDatabase, retryOnDdlRace, } from "../db/client.js";
38
38
  import { getBetterAuth, getBetterAuthSync } from "./better-auth-instance.js";
39
+ import { getAllowedCorsOrigin, readCorsAllowedOrigins, } from "./cors-origins.js";
39
40
  import { getOnboardingHtml, getResetPasswordHtml } from "./onboarding-html.js";
40
41
  import { migrateLocalUserData } from "./local-migration.js";
41
42
  import { readBody } from "../server/h3-helpers.js";
@@ -510,19 +511,13 @@ function applyCorsHeaders(event) {
510
511
  const origin = Array.isArray(originRaw) ? originRaw[0] : originRaw;
511
512
  if (!origin)
512
513
  return { hasOrigin: false, allowed: true };
513
- // Dev convenience: always allow localhost origins across ports (Tauri
514
- // tray apps, the frame, docs). In prod, the CORS_ALLOWED_ORIGINS env
515
- // var is the safe-list.
516
- const allowlist = (process.env.CORS_ALLOWED_ORIGINS ?? "")
517
- .split(",")
518
- .map((s) => s.trim())
519
- .filter(Boolean);
520
- const allowed = allowlist.length === 0
521
- ? /^(https?|tauri):\/\/(localhost|127\.0\.0\.1|tauri\.localhost)(:\d+)?$/.test(origin)
522
- : allowlist.includes(origin);
523
- if (!allowed)
514
+ const allowedOrigin = getAllowedCorsOrigin(origin, {
515
+ allowedOrigins: readCorsAllowedOrigins(),
516
+ allowLocalhostWhenNoAllowlist: true,
517
+ });
518
+ if (!allowedOrigin)
524
519
  return { hasOrigin: true, allowed: false };
525
- setResponseHeader(event, "Access-Control-Allow-Origin", origin);
520
+ setResponseHeader(event, "Access-Control-Allow-Origin", allowedOrigin);
526
521
  setResponseHeader(event, "Vary", "Origin");
527
522
  setResponseHeader(event, "Access-Control-Allow-Credentials", "true");
528
523
  setResponseHeader(event, "Access-Control-Allow-Methods", "GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS");