@openhands/agent-canvas 1.0.0-beta.7 → 1.0.0-beta.8

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 (101) hide show
  1. package/README.md +2 -2
  2. package/build/assets/{acp-providers-CPdgcp13.js → acp-providers-BAX8OU5C.js} +1 -1
  3. package/build/assets/{acp-route-guard-BoVmCn0e.js → acp-route-guard-HPk6TV-L.js} +1 -1
  4. package/build/assets/{active-backend-context-Beu-LZL-.js → active-backend-context-BSPE-W72.js} +1 -1
  5. package/build/assets/{add-backend-modal-BheqYXHK.js → add-backend-modal-mXKmfMI2.js} +1 -1
  6. package/build/assets/agent-server-client-options-9agOSarV.js +1 -0
  7. package/build/assets/{agent-server-compatibility-CdI3N7dr.js → agent-server-compatibility-B7QStIcH.js} +1 -1
  8. package/build/assets/{agent-server-conversation-service.api-CORdqJZg.js → agent-server-conversation-service.api-B9TUYJon.js} +3 -3
  9. package/build/assets/{agent-settings-UFvcGjoI.js → agent-settings-g3F623RJ.js} +1 -1
  10. package/build/assets/{analytics-consent-form-modal-CVNugqzu.js → analytics-consent-form-modal-BQCNeNVt.js} +1 -1
  11. package/build/assets/{api-key-entry-screen-M6su2VSf.js → api-key-entry-screen-myuWMqzW.js} +1 -1
  12. package/build/assets/{app-settings-BlvBhBdc.js → app-settings-CCcX8ZEH.js} +1 -1
  13. package/build/assets/{automation-detail-BWrQk4Oa.js → automation-detail-BDHLHSJd.js} +1 -1
  14. package/build/assets/{automations-list-ux9KvYsU.js → automations-list-CiNtQhq_.js} +1 -1
  15. package/build/assets/{backend-form-modal-CDnEYjaU.js → backend-form-modal-D3bDMO3C.js} +1 -1
  16. package/build/assets/{backend-synced-settings-badge-BTIj-Ffq.js → backend-synced-settings-badge-BkW5evM0.js} +1 -1
  17. package/build/assets/{condenser-settings-BolbDvm5.js → condenser-settings-DCTulgLO.js} +1 -1
  18. package/build/assets/conversation-BKhikfYl.js +1 -0
  19. package/build/assets/{conversation-D0N4dw_p.js → conversation-DTn8jN8L.js} +3 -3
  20. package/build/assets/conversation-panel-DfHR42mG.js +1 -0
  21. package/build/assets/{conversation-service.api-BsJy6uuL.js → conversation-service.api-B6CkzaKD.js} +1 -1
  22. package/build/assets/{conversation-websocket-context-DvHgx_FE.js → conversation-websocket-context-DShEuLjh.js} +1 -1
  23. package/build/assets/{edit-automation-modal-BpX-t-HD.js → edit-automation-modal-DamwL0s0.js} +1 -1
  24. package/build/assets/{entry.client-Ck9rQCg-.js → entry.client-Cn71WM8q.js} +1 -1
  25. package/build/assets/{extensions-hub-CE9QOb5n.js → extensions-hub-CUEmfvGy.js} +1 -1
  26. package/build/assets/{extensions-navigation-DSLGNGbS.js → extensions-navigation-VQ-3umJ7.js} +1 -1
  27. package/build/assets/{files-tab-cL668j1I.js → files-tab-C47fQEeL.js} +1 -1
  28. package/build/assets/{git-control-bar-branch-button-DtIrOrie.js → git-control-bar-branch-button-BT0aWH-o.js} +1 -1
  29. package/build/assets/{git-provider-icon-CHdGBdU2.js → git-provider-icon-Pi-Cxpgv.js} +1 -1
  30. package/build/assets/{home-Cz2Veg56.js → home-C3k6sFvB.js} +1 -1
  31. package/build/assets/{install-server-modal-B9nXCS3u.js → install-server-modal-6fuq-TU6.js} +1 -1
  32. package/build/assets/{launch-CWz0dm4o.js → launch-DGghLfGx.js} +1 -1
  33. package/build/assets/{llm-client-CYEaUjGx.js → llm-client-BqyLKgUN.js} +1 -1
  34. package/build/assets/{llm-settings-DFkXHuvT.js → llm-settings-BKraGtOu.js} +1 -1
  35. package/build/assets/llm-settings-DRQTgOF1.js +1 -0
  36. package/build/assets/{manage-backends-modal-DpBD_vR9.js → manage-backends-modal-CRMwyU0t.js} +1 -1
  37. package/build/assets/{manage-workspaces-modal-CtRbxREx.js → manage-workspaces-modal-BYmGD1W7.js} +1 -1
  38. package/build/assets/{manifest-eed90ff5.js → manifest-99b06a11.js} +1 -1
  39. package/build/assets/{mcp-BUe7kiYM.js → mcp-CfDRAmPn.js} +1 -1
  40. package/build/assets/{messages-dqp_KYyl.js → messages-Ba1vaw6t.js} +1 -1
  41. package/build/assets/{model-selector-BvSTrkhT.js → model-selector-DcztJSxT.js} +1 -1
  42. package/build/assets/{option-service.api-DmNVxAvS.js → option-service.api-CGNANEcT.js} +1 -1
  43. package/build/assets/{organization-service.api-DbnougaQ.js → organization-service.api-BeuMC9QL.js} +1 -1
  44. package/build/assets/{path-utils-onx24uF5.js → path-utils-z12iCrQO.js} +1 -1
  45. package/build/assets/{planner-tab-CmIjLz7q.js → planner-tab-Dte6Vzza.js} +1 -1
  46. package/build/assets/{profiles-client-fEmgWkCW.js → profiles-client-BrqNmaDV.js} +1 -1
  47. package/build/assets/{providers-CbD7fiic.js → providers-eUyo6pgr.js} +1 -1
  48. package/build/assets/{proxy-BAdHH8QB.js → proxy-BqDMnUY-.js} +1 -1
  49. package/build/assets/{recommended-automations-launcher-uTyODuzB.js → recommended-automations-launcher-D5ADbXao.js} +1 -1
  50. package/build/assets/{root-DmjpFpTu.js → root-BmhaEJJ8.js} +2 -2
  51. package/build/assets/{root-layout-DejMsKhy.js → root-layout-CNggm0d8.js} +2 -2
  52. package/build/assets/{sdk-section-page-BgDlMhcq.js → sdk-section-page-CRCRY3PG.js} +1 -1
  53. package/build/assets/{secrets-service-B7CxNinp.js → secrets-service-B9AFn9OE.js} +1 -1
  54. package/build/assets/{secrets-settings-yK7CqIpm.js → secrets-settings-0UrKMS60.js} +1 -1
  55. package/build/assets/{server-client-Kh4QSwDJ.js → server-client-DYv_GHPl.js} +1 -1
  56. package/build/assets/{settings-DN5PpgRD.js → settings-6t6LGW04.js} +1 -1
  57. package/build/assets/{settings-index-DKC8IY1P.js → settings-index-CR6Ou73o.js} +1 -1
  58. package/build/assets/{settings-modal-DJ4kGzUx.js → settings-modal-T_Yk1Zfo.js} +1 -1
  59. package/build/assets/{settings-service.api-C3rxTtPj.js → settings-service.api-DwtyDeGh.js} +1 -1
  60. package/build/assets/{shared-conversation-h9YnBtCU.js → shared-conversation-BzccsVej.js} +1 -1
  61. package/build/assets/{sidebar-mobile-menu-toggle-D0-AvsnT.js → sidebar-mobile-menu-toggle-DGlRg6jG.js} +1 -1
  62. package/build/assets/{sidebar-nav-link-OhIeFyna.js → sidebar-nav-link-dgVb8Fpy.js} +1 -1
  63. package/build/assets/{skills-plugins-DNcsNF88.js → skills-plugins-DctDrZ8Y.js} +1 -1
  64. package/build/assets/{skills-settings-7liFiSY6.js → skills-settings-rvxImDj_.js} +1 -1
  65. package/build/assets/{terminal-CDhQGDua.js → terminal-KldRPIRT.js} +1 -1
  66. package/build/assets/{use-active-conversation-DHGcmjCK.js → use-active-conversation-sPgfSkql.js} +1 -1
  67. package/build/assets/{use-agent-settings-schema-CLoTOSJI.js → use-agent-settings-schema-B66kGIi_.js} +1 -1
  68. package/build/assets/{use-agent-state-PKrUPMJ3.js → use-agent-state-Dp3pD1h3.js} +1 -1
  69. package/build/assets/{use-cloud-current-user-id-Ddr75hEz.js → use-cloud-current-user-id-ClKFPjFz.js} +1 -1
  70. package/build/assets/{use-config-OIMQLQ2s.js → use-config-C9pvb0Sm.js} +1 -1
  71. package/build/assets/{use-create-conversation-Bszyp13O.js → use-create-conversation-B-lwTnfE.js} +1 -1
  72. package/build/assets/{use-get-secrets-8Jby8ele.js → use-get-secrets-oyC7PFRz.js} +1 -1
  73. package/build/assets/{use-handle-plan-click-CohJPvvW.js → use-handle-plan-click-DP6Rs-YP.js} +1 -1
  74. package/build/assets/{use-llm-profiles-C861aFAq.js → use-llm-profiles-Bh5JqZUZ.js} +1 -1
  75. package/build/assets/use-runtime-is-ready-BakOUVU-.js +1 -0
  76. package/build/assets/{use-save-settings-DkAOEfD9.js → use-save-settings-uXXkqvD7.js} +1 -1
  77. package/build/assets/{use-settings-D5hbTS9t.js → use-settings-DeO7nvpM.js} +1 -1
  78. package/build/assets/{use-settings-nav-items-BcSbo02d.js → use-settings-nav-items-BGMFn25b.js} +1 -1
  79. package/build/assets/{use-skills-D7PS0fH0.js → use-skills-DWIK3l3a.js} +1 -1
  80. package/build/assets/{use-unified-vscode-url-DEoe-NRI.js → use-unified-vscode-url-DXPtB317.js} +1 -1
  81. package/build/assets/{use-user-conversation-Cs5H1pUF.js → use-user-conversation-DJen4YIP.js} +1 -1
  82. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-hTzSytKK.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-D8soyAAx.js} +1 -1
  83. package/build/assets/{verification-settings-Dlt8pINd.js → verification-settings-C_zHuDx9.js} +1 -1
  84. package/build/assets/{vscode-tab-DgepcYtF.js → vscode-tab-DH9x7xXS.js} +1 -1
  85. package/build/index.html +4 -4
  86. package/dist/api/agent-server-config.cjs +1 -1
  87. package/dist/api/agent-server-config.cjs.map +1 -1
  88. package/dist/api/agent-server-config.d.ts +17 -0
  89. package/dist/api/agent-server-config.js +7 -1
  90. package/dist/api/agent-server-config.js.map +1 -1
  91. package/dist/package.cjs +1 -1
  92. package/dist/package.cjs.map +1 -1
  93. package/dist/package.js +1 -1
  94. package/dist/package.js.map +1 -1
  95. package/package.json +1 -1
  96. package/scripts/static-server.mjs +15 -3
  97. package/build/assets/agent-server-client-options-HEOwGVIU.js +0 -1
  98. package/build/assets/conversation-DhRJuZLG.js +0 -1
  99. package/build/assets/conversation-panel-CNqHbS_Z.js +0 -1
  100. package/build/assets/llm-settings-DhrdCXqX.js +0 -1
  101. package/build/assets/use-runtime-is-ready-Do2h_hRl.js +0 -1
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);var e=`workspace/project`;function t(e){return e?.trim()||null}function n(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function r(){return n(void 0)}function i(){return t(void 0)}function a(){return r()||(typeof window<`u`?window.location.origin:null)}function o(){return i()}function s(){return(void 0)?.trim()||e}function c(e){return`${s().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function l(){let e=o();return e?{"X-Session-API-Key":e}:{}}function u(){return!0}function d(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}exports.DEFAULT_WORKING_DIR=e,exports.buildConversationWorkingDir=c,exports.getAgentServerBaseUrl=a,exports.getAgentServerHeaders=l,exports.getAgentServerSessionApiKey=o,exports.getAgentServerWorkingDir=s,exports.isAuthRequired=d,exports.shouldLoadPublicSkills=u;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);var e=`workspace/project`;function t(e){return e?.trim()||null}function n(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function r(){return n(void 0)}function i(){let e=t(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return t(e)}return null}function a(){return r()||(typeof window<`u`?window.location.origin:null)}function o(){return i()}function s(){return(void 0)?.trim()||e}function c(e){return`${s().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function l(){let e=o();return e?{"X-Session-API-Key":e}:{}}function u(){return!0}function d(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}exports.DEFAULT_WORKING_DIR=e,exports.buildConversationWorkingDir=c,exports.getAgentServerBaseUrl=a,exports.getAgentServerHeaders=l,exports.getAgentServerSessionApiKey=o,exports.getAgentServerWorkingDir=s,exports.isAuthRequired=d,exports.shouldLoadPublicSkills=u;
2
2
  //# sourceMappingURL=agent-server-config.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-server-config.cjs","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\nexport function getBakedSessionApiKey(): string | null {\n return trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getConfiguredWorkerUrls(): string[] {\n const raw = import.meta.env.VITE_WORKER_URLS?.trim();\n if (!raw) return [];\n\n return raw\n .split(\",\")\n .map((url: string) => normalizeBaseUrl(url))\n .filter((url: string | null): url is string => Boolean(url));\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function shouldLoadPublicSkills(): boolean {\n return import.meta.env.VITE_LOAD_PUBLIC_SKILLS !== \"false\";\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":"6CAAA,IAAa,EAAsB,oBAOnC,SAAS,EAAW,EAAsC,CACxD,OAAO,GAAO,MAAM,EAAI,KAG1B,SAAS,EAAiB,EAAsC,CAC9D,GAAI,CAAC,EAAO,OAAO,KAEnB,IAAM,EAAU,EAAM,MAAM,CAAC,QAAQ,MAAO,GAAG,CAW/C,OAVK,EAED,gBAAgB,KAAK,EAAQ,CACxB,EAGL,OAAO,OAAW,IACb,GAAG,OAAO,SAAS,SAAS,IAAI,IAGlC,UAAU,IAVI,KAavB,SAAS,GAAsC,CAC7C,OAAO,EAAA,IAAA,GAAuD,CAGhE,SAAgB,GAAuC,CACrD,OAAO,EAAA,IAAA,GAAgD,CAUzD,SAAgB,GAAuC,CAQrD,OAPsB,GAClB,GAEA,OAAO,OAAW,IACb,OAAO,SAAS,OAGlB,MAGT,SAAgB,GAA6C,CAC3D,OAAO,GAAuB,CAGhC,SAAgB,GAAmC,CAIjD,OAHM,IAAA,KAA2C,MAAM,EAGhD,EAGT,SAAgB,EAA4B,EAAgC,CAG1E,MAAO,GAFM,GAA0B,CAAC,QAAQ,OAAQ,GAE9C,CAAK,GADH,EAAe,QAAQ,KAAM,GACvB,GAapB,SAAgB,GAAgD,CAC9D,IAAM,EAAgB,GAA6B,CACnD,OAAO,EAAgB,CAAE,oBAAqB,EAAe,CAAG,EAAE,CAGpE,SAAgB,GAAkC,CAChD,MAAO,GAGT,SAAgB,GAA0B,CACxC,OAEG,OAAO,OAAW,KAChB,OACE,iCAAmC"}
1
+ {"version":3,"file":"agent-server-config.cjs","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getConfiguredWorkerUrls(): string[] {\n const raw = import.meta.env.VITE_WORKER_URLS?.trim();\n if (!raw) return [];\n\n return raw\n .split(\",\")\n .map((url: string) => normalizeBaseUrl(url))\n .filter((url: string | null): url is string => Boolean(url));\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function shouldLoadPublicSkills(): boolean {\n return import.meta.env.VITE_LOAD_PUBLIC_SKILLS !== \"false\";\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":"6CAAA,IAAa,EAAsB,oBAOnC,SAAS,EAAW,EAAsC,CACxD,OAAO,GAAO,MAAM,EAAI,KAG1B,SAAS,EAAiB,EAAsC,CAC9D,GAAI,CAAC,EAAO,OAAO,KAEnB,IAAM,EAAU,EAAM,MAAM,CAAC,QAAQ,MAAO,GAAG,CAW/C,OAVK,EAED,gBAAgB,KAAK,EAAQ,CACxB,EAGL,OAAO,OAAW,IACb,GAAG,OAAO,SAAS,SAAS,IAAI,IAGlC,UAAU,IAVI,KAavB,SAAS,GAAsC,CAC7C,OAAO,EAAA,IAAA,GAAuD,CAoBhE,SAAgB,GAAuC,CACrD,IAAM,EAAS,EAAA,IAAA,GAAgD,CAC/D,GAAI,EAAQ,OAAO,EAEnB,GAAI,OAAO,OAAW,IAAa,CACjC,IAAM,EAAY,OACf,iCACH,GAAI,OAAO,GAAa,SACtB,OAAO,EAAW,EAAS,CAI/B,OAAO,KAUT,SAAgB,GAAuC,CAQrD,OAPsB,GAClB,GAEA,OAAO,OAAW,IACb,OAAO,SAAS,OAGlB,MAGT,SAAgB,GAA6C,CAC3D,OAAO,GAAuB,CAGhC,SAAgB,GAAmC,CAIjD,OAHM,IAAA,KAA2C,MAAM,EAGhD,EAGT,SAAgB,EAA4B,EAAgC,CAG1E,MAAO,GAFM,GAA0B,CAAC,QAAQ,OAAQ,GAE9C,CAAK,GADH,EAAe,QAAQ,KAAM,GACvB,GAapB,SAAgB,GAAgD,CAC9D,IAAM,EAAgB,GAA6B,CACnD,OAAO,EAAgB,CAAE,oBAAqB,EAAe,CAAG,EAAE,CAGpE,SAAgB,GAAkC,CAChD,MAAO,GAGT,SAAgB,GAA0B,CACxC,OAEG,OAAO,OAAW,KAChB,OACE,iCAAmC"}
@@ -3,6 +3,23 @@ export interface AgentServerFormDefaults {
3
3
  baseUrl: string;
4
4
  sessionApiKey: string;
5
5
  }
6
+ /**
7
+ * Return the session API key supplied by the deployment host.
8
+ *
9
+ * Two sources are consulted, in order:
10
+ * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by
11
+ * `npm run dev` so the dev server has the key without a round-trip).
12
+ * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`
13
+ * at serve time by `scripts/static-server.mjs --session-api-key <key>`.
14
+ * This is the path used by the published `agent-canvas` binary, where
15
+ * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the
16
+ * runtime key is generated when the user launches the CLI.
17
+ *
18
+ * Without the window-global fallback, the published binary cannot construct a
19
+ * default local backend (`makeDefaultLocalBackend()` returns null), the
20
+ * registry is left empty, and the user sees the Manage Backends modal
21
+ * instead of the onboarding flow.
22
+ */
6
23
  export declare function getBakedSessionApiKey(): string | null;
7
24
  export declare function getAgentServerFormDefaults(): AgentServerFormDefaults;
8
25
  export declare function getAgentServerBaseUrl(): string | null;
@@ -12,7 +12,13 @@ function r() {
12
12
  return n(void 0);
13
13
  }
14
14
  function i() {
15
- return t(void 0);
15
+ let e = t(void 0);
16
+ if (e) return e;
17
+ if (typeof window < "u") {
18
+ let e = window.__AGENT_CANVAS_SESSION_API_KEY__;
19
+ if (typeof e == "string") return t(e);
20
+ }
21
+ return null;
16
22
  }
17
23
  function a() {
18
24
  return r() || (typeof window < "u" ? window.location.origin : null);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-server-config.js","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\nexport function getBakedSessionApiKey(): string | null {\n return trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getConfiguredWorkerUrls(): string[] {\n const raw = import.meta.env.VITE_WORKER_URLS?.trim();\n if (!raw) return [];\n\n return raw\n .split(\",\")\n .map((url: string) => normalizeBaseUrl(url))\n .filter((url: string | null): url is string => Boolean(url));\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function shouldLoadPublicSkills(): boolean {\n return import.meta.env.VITE_LOAD_PUBLIC_SKILLS !== \"false\";\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":";AAAA,IAAa,IAAsB;AAOnC,SAAS,EAAW,GAAsC;AACxD,QAAO,GAAO,MAAM,IAAI;;AAG1B,SAAS,EAAiB,GAAsC;AAC9D,KAAI,CAAC,EAAO,QAAO;CAEnB,IAAM,IAAU,EAAM,MAAM,CAAC,QAAQ,OAAO,GAAG;AAW/C,QAVK,IAED,gBAAgB,KAAK,EAAQ,GACxB,IAGL,OAAO,SAAW,MACb,GAAG,OAAO,SAAS,SAAS,IAAI,MAGlC,UAAU,MAVI;;AAavB,SAAS,IAAsC;AAC7C,QAAO,EAAA,KAAA,EAAuD;;AAGhE,SAAgB,IAAuC;AACrD,QAAO,EAAA,KAAA,EAAgD;;AAUzD,SAAgB,IAAuC;AAQrD,QAPsB,GAClB,KAEA,OAAO,SAAW,MACb,OAAO,SAAS,SAGlB;;AAGT,SAAgB,IAA6C;AAC3D,QAAO,GAAuB;;AAGhC,SAAgB,IAAmC;AAIjD,SAHM,KAAA,IAA2C,MAAM,IAGhD;;AAGT,SAAgB,EAA4B,GAAgC;AAG1E,QAAO,GAFM,GAA0B,CAAC,QAAQ,QAAQ,GAE9C,CAAK,GADH,EAAe,QAAQ,MAAM,GACvB;;AAapB,SAAgB,IAAgD;CAC9D,IAAM,IAAgB,GAA6B;AACnD,QAAO,IAAgB,EAAE,qBAAqB,GAAe,GAAG,EAAE;;AAGpE,SAAgB,IAAkC;AAChD,QAAO;;AAGT,SAAgB,IAA0B;AACxC,QAEG,OAAO,SAAW,OAChB,OACE,mCAAmC"}
1
+ {"version":3,"file":"agent-server-config.js","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getConfiguredWorkerUrls(): string[] {\n const raw = import.meta.env.VITE_WORKER_URLS?.trim();\n if (!raw) return [];\n\n return raw\n .split(\",\")\n .map((url: string) => normalizeBaseUrl(url))\n .filter((url: string | null): url is string => Boolean(url));\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function shouldLoadPublicSkills(): boolean {\n return import.meta.env.VITE_LOAD_PUBLIC_SKILLS !== \"false\";\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":";AAAA,IAAa,IAAsB;AAOnC,SAAS,EAAW,GAAsC;AACxD,QAAO,GAAO,MAAM,IAAI;;AAG1B,SAAS,EAAiB,GAAsC;AAC9D,KAAI,CAAC,EAAO,QAAO;CAEnB,IAAM,IAAU,EAAM,MAAM,CAAC,QAAQ,OAAO,GAAG;AAW/C,QAVK,IAED,gBAAgB,KAAK,EAAQ,GACxB,IAGL,OAAO,SAAW,MACb,GAAG,OAAO,SAAS,SAAS,IAAI,MAGlC,UAAU,MAVI;;AAavB,SAAS,IAAsC;AAC7C,QAAO,EAAA,KAAA,EAAuD;;AAoBhE,SAAgB,IAAuC;CACrD,IAAM,IAAS,EAAA,KAAA,EAAgD;AAC/D,KAAI,EAAQ,QAAO;AAEnB,KAAI,OAAO,SAAW,KAAa;EACjC,IAAM,IAAY,OACf;AACH,MAAI,OAAO,KAAa,SACtB,QAAO,EAAW,EAAS;;AAI/B,QAAO;;AAUT,SAAgB,IAAuC;AAQrD,QAPsB,GAClB,KAEA,OAAO,SAAW,MACb,OAAO,SAAS,SAGlB;;AAGT,SAAgB,IAA6C;AAC3D,QAAO,GAAuB;;AAGhC,SAAgB,IAAmC;AAIjD,SAHM,KAAA,IAA2C,MAAM,IAGhD;;AAGT,SAAgB,EAA4B,GAAgC;AAG1E,QAAO,GAFM,GAA0B,CAAC,QAAQ,QAAQ,GAE9C,CAAK,GADH,EAAe,QAAQ,MAAM,GACvB;;AAapB,SAAgB,IAAgD;CAC9D,IAAM,IAAgB,GAA6B;AACnD,QAAO,IAAgB,EAAE,qBAAqB,GAAe,GAAG,EAAE;;AAGpE,SAAgB,IAAkC;AAChD,QAAO;;AAGT,SAAgB,IAA0B;AACxC,QAEG,OAAO,SAAW,OAChB,OACE,mCAAmC"}
package/dist/package.cjs CHANGED
@@ -1,2 +1,2 @@
1
- require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.0.0-beta.7`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c`,"@openhands/typescript-client":`1.24.3`,"@react-router/node":`7.14.2`,"@react-router/serve":`7.14.2`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`^1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.14.2`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`^1.8.3`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:e2e:snapshots":`playwright test tests/e2e/snapshots --project=chromium --retries=0`,"test:e2e:snapshots:update":`playwright test tests/e2e/snapshots --project=chromium --update-snapshots`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`bash -c 'npm run typecheck:staged'`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.14.2`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{dompurify:`3.3.2`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.14.2`}};exports.default=e;
1
+ require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.0.0-beta.8`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c`,"@openhands/typescript-client":`1.24.3`,"@react-router/node":`7.14.2`,"@react-router/serve":`7.14.2`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`^1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.14.2`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`^1.8.3`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:e2e:snapshots":`playwright test tests/e2e/snapshots --project=chromium --retries=0`,"test:e2e:snapshots:update":`playwright test tests/e2e/snapshots --project=chromium --update-snapshots`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`bash -c 'npm run typecheck:staged'`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.14.2`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{dompurify:`3.3.2`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.14.2`}};exports.default=e;
2
2
  //# sourceMappingURL=package.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-beta.7\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.14.2\",\n \"@react-router/serve\": \"7.14.2\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.14.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.14.2\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"dompurify\": \"3.3.2\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.14.2\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-beta.8\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.14.2\",\n \"@react-router/serve\": \"7.14.2\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.14.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.14.2\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"dompurify\": \"3.3.2\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.14.2\"\n }\n}\n"],"mappings":""}
package/dist/package.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@openhands/agent-canvas",
3
- version: "1.0.0-beta.7",
3
+ version: "1.0.0-beta.8",
4
4
  description: "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
5
5
  license: "MIT",
6
6
  private: !1,
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-beta.7\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.14.2\",\n \"@react-router/serve\": \"7.14.2\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.14.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.14.2\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"dompurify\": \"3.3.2\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.14.2\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-beta.8\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"git+https://github.com/OpenHands/extensions.git#62594156a187722344736bc2ff5edfb12c0cc75c\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.14.2\",\n \"@react-router/serve\": \"7.14.2\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.14.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.14.2\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"dompurify\": \"3.3.2\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.14.2\"\n }\n}\n"],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openhands/agent-canvas",
3
- "version": "1.0.0-beta.7",
3
+ "version": "1.0.0-beta.8",
4
4
  "description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -192,9 +192,18 @@ ROUTING:
192
192
  /**
193
193
  * Build a tiny inline script that seeds runtime config into the page.
194
194
  *
195
- * - `sessionApiKey`: written to `openhands-agent-server-config` in localStorage
196
- * so the pre-built frontend authenticates without VITE_SESSION_API_KEY baked in.
197
- * Only writes if no key is already stored — explicit user overrides are preserved.
195
+ * - `sessionApiKey`: exposed to the app two ways so a fresh-localStorage
196
+ * browser can authenticate even though the published bundle has no
197
+ * VITE_SESSION_API_KEY baked in:
198
+ * 1. `window.__AGENT_CANVAS_SESSION_API_KEY__` — read by
199
+ * `getBakedSessionApiKey()` in `agent-server-config.ts` as a fallback
200
+ * when the env var is empty. This is symmetric with how
201
+ * `__AGENT_CANVAS_AUTH_REQUIRED__` works for the auth-required flag.
202
+ * 2. Written to `openhands-agent-server-config.sessionApiKey` in
203
+ * localStorage for compatibility with the legacy storage key. Useful
204
+ * for any code path that still reads it (e.g. e2e test fixtures).
205
+ * Always overwrites when the stored value differs so a rotated key
206
+ * is not shadowed by a stale one.
198
207
  *
199
208
  * - `authRequired`: sets `window.__AGENT_CANVAS_AUTH_REQUIRED__ = true` so the
200
209
  * pre-built frontend shows the API key entry screen (public mode) without
@@ -205,6 +214,9 @@ function makeConfigInjectionScript(sessionApiKey, authRequired) {
205
214
 
206
215
  if (sessionApiKey) {
207
216
  const keyLiteral = JSON.stringify(sessionApiKey);
217
+ // Window global — read at module init by getBakedSessionApiKey().
218
+ // Set first so it's available even if the localStorage write throws.
219
+ parts.push(`window.__AGENT_CANVAS_SESSION_API_KEY__=${keyLiteral};`);
208
220
  // Always overwrite when the stored key differs from the runtime key.
209
221
  // A previous session may have persisted a now-stale key; the runtime
210
222
  // value (from --session-api-key) is the server's truth.
@@ -1 +0,0 @@
1
- var e=`workspace/project`;function t(e){return e?.trim()||null}function n(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function r(){return n(void 0)}function i(){return t(void 0)}function a(){return{baseUrl:o()??``,sessionApiKey:s()??``}}function o(){return r()||(typeof window<`u`?window.location.origin:null)}function s(){return i()}function c(){return(void 0)?.trim()||e}function ee(e){return`${c().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function l(){let e=s();return e?{"X-Session-API-Key":e}:{}}function te(){return!0}function u(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}function ne(){return u()?!s():!1}var d=`default-local`,f=`Local`;function p(){let e=o(),t=s();return!e||!t?null:{id:d,name:f,host:e,apiKey:t,kind:`local`}}var m=`openhands-backends`,h=`openhands-active-backend`,g=`openhands-agent-server-config`;function _(e){return e===`local`||e===`cloud`}function v(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.name==`string`&&typeof t.host==`string`&&typeof t.apiKey==`string`&&_(t.kind)}function re(e){if(typeof e!=`string`)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`http://${t}`:null}function y(){let e=window.localStorage.getItem(g);if(!e)return null;try{let t=JSON.parse(e),n=re(t.baseUrl),r=typeof t.sessionApiKey==`string`?t.sessionApiKey.trim():``;return!n||!r?null:{id:d,name:f,host:n,apiKey:r,kind:`local`}}catch{return null}}function b(){window.localStorage.removeItem(g)}function x(e){return T(e),b(),e}function S(e){try{let{hostname:t}=new URL(e);return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function C(e,t){return e.id!==`default-local`||e.kind!==`local`?!1:e.host===t.host||S(e.host)&&S(t.host)}function w(e){let t=p();if(!t)return e;let n=!1,r=e.map(e=>!C(e,t)||e.apiKey===t.apiKey?e:(n=!0,{...e,apiKey:t.apiKey}));return n?(T(r),r):e}function T(e){if(!(typeof window>`u`))try{window.localStorage.setItem(m,JSON.stringify(e))}catch{}}function E(){if(typeof window>`u`)return[];try{let e=window.localStorage.getItem(m);if(e===null){let e=y();if(e)return x([e]);let t=p();return t?x([t]):[]}let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(v);if(n.length===0){let e=p();return e?x([e]):[]}let r=w(n);return b(),r}catch{return[]}}function D(){if(typeof window>`u`)return null;try{let e=window.localStorage.getItem(h);if(!e)return null;let t=JSON.parse(e);if(typeof t!=`object`||!t||typeof t.backendId!=`string`)return null;let n=t.orgId;return{backendId:t.backendId,orgId:typeof n==`string`&&n.length>0?n:null}}catch{return null}}function O(e){if(!(typeof window>`u`))try{if(!e){window.localStorage.removeItem(h);return}window.localStorage.setItem(h,JSON.stringify({backendId:e.backendId,orgId:e.orgId??null}))}catch{}}var k=`no-backend`,A={id:k,name:`No Backend Available`,host:``,apiKey:``,kind:`local`};function j(e){return e.id===k}function ie(e){return e[0]??A}function M(e,t){let n=null,r=null;if(t){let i=e.find(e=>e.id===t.backendId);i&&(n=i,r=t.orgId??null)}return n||(n=ie(e),r=null),{backends:e,selection:t,active:{backend:n,orgId:r}}}var N=M(E(),D()),P=new Set;function F(){P.forEach(e=>e())}function I(){return N.active}function L(){let e=N.active.backend;return e.kind===`local`&&!j(e)?e:null}function R(){return N.backends}function z(){return N.selection}function B(){return N}function V(e){O(e),N=M(N.backends,e),F()}function H(e){T(e);let t=N.selection;t&&!e.some(e=>e.id===t.backendId)&&(t=null,O(null)),N=M(e,t),F()}function U(e){return P.add(e),()=>{P.delete(e)}}var W=class extends Error{constructor(e,t,n,r){super(r||`HTTP ${e}: ${t}`),this.status=e,this.statusText=t,this.response=n,this.name=`HttpError`}},G=class{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,``),this.apiKey=e.apiKey,this.timeout=e.timeout||6e4}async request(e){let t=e.url.startsWith(`/`)?e.url.slice(1):e.url,n=new URL(t,this.baseUrl+`/`);e.params&&Object.entries(e.params).forEach(([e,t])=>{t!=null&&(Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,String(t))):n.searchParams.append(e,String(t)))});let r={"Content-Type":`application/json`,...e.headers};this.apiKey&&(r[`X-Session-API-Key`]=this.apiKey);let i={method:e.method,headers:r,signal:AbortSignal.timeout(e.timeout||this.timeout)};e.credentials&&(i.credentials=e.credentials),e.data&&e.method!==`GET`&&(e.data instanceof FormData?(delete r[`Content-Type`],i.body=e.data):i.body=JSON.stringify(e.data));try{let t=await fetch(n.toString(),i);if(!(e.acceptableStatusCodes?.has(t.status)||!e.acceptableStatusCodes&&t.ok)){let e;try{e=t.headers.get(`content-type`)?.includes(`application/json`)?await t.json():await t.text()}catch{e=null}throw new W(t.status,t.statusText,e,`HTTP request failed (${t.status} ${t.statusText}): ${JSON.stringify(e)}`)}let r=await this.parseResponse(t,e.responseType||`auto`),a={};return t.headers.forEach((e,t)=>{a[t]=e}),{data:r,status:t.status,statusText:t.statusText,headers:a}}catch(t){throw t instanceof W?t:t instanceof Error?t.name===`AbortError`?Error(`Request timeout after ${e.timeout||this.timeout}ms`,{cause:t}):Error(`Request failed: ${t.message}`,{cause:t}):Error(`Unknown request error`,{cause:t})}}async parseResponse(e,t){return t===`json`?await e.json():t===`text`?await e.text():t===`blob`?await e.blob():t===`arrayBuffer`?await e.arrayBuffer():e.headers.get(`content-type`)?.includes(`application/json`)?await e.json():await e.text()}async get(e,t){return this.request({method:`GET`,url:e,...t})}async post(e,t,n){return this.request({method:`POST`,url:e,data:t,...n})}async put(e,t,n){return this.request({method:`PUT`,url:e,data:t,...n})}async patch(e,t,n){return this.request({method:`PATCH`,url:e,data:t,...n})}async delete(e,t){return this.request({method:`DELETE`,url:e,...t})}close(){}},K=class{constructor(e){this.host=e.host.replace(/\/$/,``),this.apiKey=e.apiKey,this.client=new G({baseUrl:this.host,apiKey:this.apiKey,timeout:e.timeout||6e4})}async getAgentSchema(){return(await this.client.get(`/api/settings/agent-schema`)).data}async getSettings(e={}){return(await this.client.get(`/api/settings`,{headers:e.exposeSecrets?{"X-Expose-Secrets":e.exposeSecrets}:void 0})).data}async updateSettings(e){return(await this.client.patch(`/api/settings`,e)).data}async listSecrets(){return(await this.client.get(`/api/settings/secrets`)).data}async upsertSecret(e){return(await this.client.put(`/api/settings/secrets`,e)).data}async getSecret(e){return(await this.client.get(`/api/settings/secrets/${encodeURIComponent(e)}`,{responseType:`text`})).data}async deleteSecret(e){return(await this.client.delete(`/api/settings/secrets/${encodeURIComponent(e)}`)).data}async getConversationSchema(){return(await this.client.get(`/api/settings/conversation-schema`)).data}async listProfiles(){return(await this.client.get(`/api/profiles`)).data}async getProfile(e,t={}){return(await this.client.get(`/api/profiles/${encodeURIComponent(e)}`,{headers:t.exposeSecrets?{"X-Expose-Secrets":t.exposeSecrets}:void 0})).data}async saveProfile(e,t){return(await this.client.post(`/api/profiles/${encodeURIComponent(e)}`,t)).data}async deleteProfile(e){return(await this.client.delete(`/api/profiles/${encodeURIComponent(e)}`)).data}async renameProfile(e,t){return(await this.client.post(`/api/profiles/${encodeURIComponent(e)}/rename`,{new_name:t})).data}close(){this.client.close()}};function q(e){if(e&&!e.startsWith(`/`))try{let t=new URL(e),n=t.hostname,r=window.location.hostname??window.location.host?.split(`:`)[0];return r&&(n===`localhost`||n===`127.0.0.1`)&&r!==`localhost`&&r!==`127.0.0.1`?`${r}:${t.port}`:t.host}catch{return window.location.host}return window.location.host}function J(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function Y(e){let t=q(e),n=J(e);return`${window.location.protocol===`https:`?`https:`:`http:`}//${t}${n}`}function X(e){if(!e||e.startsWith(`/`))return null;try{return new URL(e).protocol}catch{return null}}function ae(e,t){let n=q(e),r=J(e),i=window.location.protocol===`https:`,a=X(e)===`https:`,o=`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/bash-events`;return t?`${o}?session_api_key=${encodeURIComponent(t)}`:o}function oe(e,t){if(!e)return null;let n=q(t),r=J(t),i=window.location.protocol===`https:`,a=X(t)===`https:`;return`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/events/${e}`}var Z=class extends Error{constructor(){super(`No backend is configured.`),this.name=`NoBackendAvailableError`}};function Q(e){return e.replace(/\/+$/,``)}function se(e,t){return e.host?Q(e.host):e.conversationUrl?Q(Y(e.conversationUrl)):Q(t?.host??``)}function $(e={}){let t=L();if(!t&&!e.host&&!e.conversationUrl)throw new Z;let n=e.sessionApiKey??e.apiKey??t?.apiKey??void 0;return{host:se(e,t),...n?{apiKey:n}:{},workingDir:e.workingDir??c(),...e.timeout===void 0?{}:{timeout:e.timeout}}}function ce(e){let{host:t,apiKey:n,timeout:r}=$(e);return{baseUrl:t,...n?{apiKey:n}:{},timeout:r??6e4}}export{te as A,ee as C,c as D,l as E,u as O,e as S,a as T,V as _,Y as a,f as b,G as c,I as d,z as f,j as g,B as h,ae as i,ne as k,W as l,R as m,$ as n,oe as o,L as p,ce as r,K as s,Z as t,A as u,H as v,o as w,p as x,U as y};
@@ -1 +0,0 @@
1
- import{t as e}from"./conversation-D0N4dw_p.js";export{e as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./conversation-D0N4dw_p.js";export{e as default};
@@ -1 +0,0 @@
1
- import{n as e}from"./llm-settings-DFkXHuvT.js";export{e as default};
@@ -1 +0,0 @@
1
- import{C as e,w as t,y as n}from"./utils-DCVfKFRt.js";import{t as r}from"./use-active-conversation-DHGcmjCK.js";import{t as i}from"./use-agent-state-PKrUPMJ3.js";var a=({allowAgentError:a=!1}={})=>{let{data:o}=r(),{curAgentState:s}=i(),c=a?t:e;return n(o?.execution_status)&&!c.includes(s)};export{a as t};