syncorejs 0.2.3 → 0.2.5

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 (94) hide show
  1. package/dist/_dashboard/assets/ConfirmActionDialog-Db4VzVp6.js +1 -0
  2. package/dist/_dashboard/assets/circle-x-VsB4Z8W4.js +1 -0
  3. package/dist/_dashboard/assets/data.lazy-DjdU9CzX.js +18 -0
  4. package/dist/_dashboard/assets/file-code-BrOKjG4n.js +1 -0
  5. package/dist/_dashboard/assets/functions.lazy-DvDwAGHq.js +1 -0
  6. package/dist/_dashboard/assets/funnel-BH8EMMJI.js +1 -0
  7. package/dist/_dashboard/assets/index-DT9ZEELb.css +1 -0
  8. package/dist/_dashboard/assets/index-DrSG4qZZ.js +54 -0
  9. package/dist/_dashboard/assets/loader-circle-CmJFSYga.js +1 -0
  10. package/dist/_dashboard/assets/logs.lazy-50KTk5yd.js +1 -0
  11. package/dist/_dashboard/assets/play-DS52VsLN.js +1 -0
  12. package/dist/_dashboard/assets/queries.lazy-CfysRWkz.js +1 -0
  13. package/dist/_dashboard/assets/scheduler.lazy-BB88mZk-.js +1 -0
  14. package/dist/_dashboard/assets/select-THYcR8Wt.js +1 -0
  15. package/dist/_dashboard/assets/separator-BU7xg615.js +1 -0
  16. package/dist/_dashboard/assets/shared-Bh0wwC2k.js +1 -0
  17. package/dist/_dashboard/assets/sql.lazy-CHtU9Qnt.js +13 -0
  18. package/dist/_dashboard/assets/storage.lazy-CneN7wVU.js +1 -0
  19. package/dist/_dashboard/assets/table-2-CH8JoMXf.js +1 -0
  20. package/dist/_dashboard/index.html +18 -0
  21. package/dist/_vendor/cli/app.d.mts.map +1 -1
  22. package/dist/_vendor/cli/app.mjs +16 -5
  23. package/dist/_vendor/cli/app.mjs.map +1 -1
  24. package/dist/_vendor/core/cli.d.mts.map +1 -1
  25. package/dist/_vendor/core/cli.mjs +358 -16
  26. package/dist/_vendor/core/cli.mjs.map +1 -1
  27. package/dist/_vendor/core/index.d.mts +3 -3
  28. package/dist/_vendor/core/runtime/devtools.d.mts.map +1 -1
  29. package/dist/_vendor/core/runtime/devtools.mjs +131 -0
  30. package/dist/_vendor/core/runtime/devtools.mjs.map +1 -1
  31. package/dist/_vendor/core/runtime/functions.d.mts +3 -3
  32. package/dist/_vendor/core/runtime/functions.mjs.map +1 -1
  33. package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs +1 -1
  34. package/dist/_vendor/core/runtime/internal/engines/devtoolsEngine.mjs.map +1 -1
  35. package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs +4 -1
  36. package/dist/_vendor/core/runtime/internal/engines/executionEngine.mjs.map +1 -1
  37. package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs +6 -3
  38. package/dist/_vendor/core/runtime/internal/engines/reactivityEngine.mjs.map +1 -1
  39. package/dist/_vendor/core/runtime/internal/engines/shared.mjs +5 -1
  40. package/dist/_vendor/core/runtime/internal/engines/shared.mjs.map +1 -1
  41. package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs +99 -13
  42. package/dist/_vendor/core/runtime/internal/engines/storageEngine.mjs.map +1 -1
  43. package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs +38 -4
  44. package/dist/_vendor/core/runtime/internal/runtimeKernel.mjs.map +1 -1
  45. package/dist/_vendor/core/runtime/runtime.d.mts +65 -8
  46. package/dist/_vendor/core/runtime/runtime.d.mts.map +1 -1
  47. package/dist/_vendor/core/runtime/runtime.mjs.map +1 -1
  48. package/dist/_vendor/core/transport.d.mts.map +1 -1
  49. package/dist/_vendor/core/transport.mjs +30 -5
  50. package/dist/_vendor/core/transport.mjs.map +1 -1
  51. package/dist/_vendor/devtools-protocol/index.d.ts +75 -1
  52. package/dist/_vendor/devtools-protocol/index.d.ts.map +1 -1
  53. package/dist/_vendor/devtools-protocol/index.js.map +1 -1
  54. package/dist/_vendor/next/index.js +9 -1
  55. package/dist/_vendor/next/index.js.map +1 -1
  56. package/dist/_vendor/platform-expo/index.d.ts +1 -1
  57. package/dist/_vendor/platform-expo/index.d.ts.map +1 -1
  58. package/dist/_vendor/platform-expo/index.js +6 -1
  59. package/dist/_vendor/platform-expo/index.js.map +1 -1
  60. package/dist/_vendor/platform-node/index.d.mts +2 -1
  61. package/dist/_vendor/platform-node/index.d.mts.map +1 -1
  62. package/dist/_vendor/platform-node/index.mjs +27 -2
  63. package/dist/_vendor/platform-node/index.mjs.map +1 -1
  64. package/dist/_vendor/platform-node/ipc-react.mjs +4 -0
  65. package/dist/_vendor/platform-node/ipc-react.mjs.map +1 -1
  66. package/dist/_vendor/platform-web/external-change.d.ts +2 -2
  67. package/dist/_vendor/platform-web/external-change.js +2 -2
  68. package/dist/_vendor/platform-web/external-change.js.map +1 -1
  69. package/dist/_vendor/platform-web/index.d.ts +13 -10
  70. package/dist/_vendor/platform-web/index.d.ts.map +1 -1
  71. package/dist/_vendor/platform-web/index.js +66 -10
  72. package/dist/_vendor/platform-web/index.js.map +1 -1
  73. package/dist/_vendor/platform-web/indexeddb.d.ts +3 -3
  74. package/dist/_vendor/platform-web/indexeddb.js +3 -3
  75. package/dist/_vendor/platform-web/indexeddb.js.map +1 -1
  76. package/dist/_vendor/platform-web/opfs.d.ts +3 -1
  77. package/dist/_vendor/platform-web/opfs.d.ts.map +1 -1
  78. package/dist/_vendor/platform-web/opfs.js +29 -3
  79. package/dist/_vendor/platform-web/opfs.js.map +1 -1
  80. package/dist/_vendor/platform-web/persistence.d.ts +31 -1
  81. package/dist/_vendor/platform-web/persistence.d.ts.map +1 -1
  82. package/dist/_vendor/platform-web/persistence.js.map +1 -1
  83. package/dist/_vendor/platform-web/react.d.ts.map +1 -1
  84. package/dist/_vendor/platform-web/react.js +9 -1
  85. package/dist/_vendor/platform-web/react.js.map +1 -1
  86. package/dist/_vendor/react/index.d.ts +6 -5
  87. package/dist/_vendor/react/index.d.ts.map +1 -1
  88. package/dist/_vendor/react/index.js +6 -5
  89. package/dist/_vendor/react/index.js.map +1 -1
  90. package/dist/_vendor/svelte/index.d.ts +8 -6
  91. package/dist/_vendor/svelte/index.d.ts.map +1 -1
  92. package/dist/_vendor/svelte/index.js +7 -5
  93. package/dist/_vendor/svelte/index.js.map +1 -1
  94. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ import{n as e,r as t}from"./shared-Bh0wwC2k.js";import{n,t as r}from"./ConfirmActionDialog-Db4VzVp6.js";import{A as i,C as a,Ft as o,Mt as s,Ot as c,Pt as l,_t as u,ct as d,ht as f,it as p,j as m,kt as h,m as g,nt as _,t as v,yt as y}from"./index-DrSG4qZZ.js";var b=c(`file-archive`,[[`path`,{d:`M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5`,key:`4pqfef`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M8 12v-1`,key:`1ej8lb`}],[`path`,{d:`M8 18v-2`,key:`qcmpov`}],[`path`,{d:`M8 7V6`,key:`1nbb54`}],[`circle`,{cx:`8`,cy:`20`,r:`2`,key:`ckkr5m`}]]),x=c(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),S=c(`image`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,ry:`2`,key:`1m3agn`}],[`circle`,{cx:`9`,cy:`9`,r:`2`,key:`af1f0g`}],[`path`,{d:`m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21`,key:`1xmnt7`}]]),C=c(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),w=o(l(),1),T=s(),E=h(`/storage`)({component:O}),D=100;function O(){let{pushToast:o}=v(),s=p()?.capabilities?.storage,c=s?.browse!==!1,[l,h]=(0,w.useState)(``),[b,x]=(0,w.useState)(null),[S,E]=(0,w.useState)(null),O=(0,w.useMemo)(()=>({kind:`storage.list`,limit:D,offset:0,...l.trim()?{search:l.trim()}:{}}),[l]),j=g(c?O:null,{enabled:c}),M=j.data?.entries??[],F=M.find(e=>e.id===b)??M[0]??null,I=(0,w.useCallback)(e=>{x(e.id)},[]),L=(0,w.useCallback)(async e=>{try{let t=await P(e,`download`),n=document.createElement(`a`);n.href=t.url,n.download=t.entry.fileName??`${t.entry.id}.bin`,document.body.append(n),n.click(),n.remove()}catch(e){o({tone:`error`,title:`Download failed`,description:e instanceof Error?e.message:String(e)})}},[o]),R=(0,w.useCallback)(async e=>{try{let t=await _({kind:`storage.delete`,id:e.id});if(!t.success)throw Error(t.error??`Storage object could not be deleted.`);b===e.id&&x(null),o({tone:`success`,title:t.deleted?`Storage object deleted`:`Storage object not found`,description:t.deleted?`${e.fileName??e.id} was removed.`:`The object was already absent.`})}catch(e){o({tone:`error`,title:`Delete failed`,description:e instanceof Error?e.message:String(e)})}},[o,b]);return c?(0,T.jsxs)(`div`,{className:`flex h-full min-h-[620px] flex-col gap-4`,children:[(0,T.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-center md:justify-between`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h2`,{className:`text-[14px] font-bold text-text-primary`,children:`Storage`}),(0,T.jsx)(`p`,{className:`mt-1 text-[12px] text-text-tertiary`,children:j.data?`${j.data.totalCount} object${j.data.totalCount===1?``:`s`}`:`Storage objects saved through ctx.storage`})]}),(0,T.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,T.jsxs)(`div`,{className:`relative w-full md:w-72`,children:[(0,T.jsx)(u,{size:14,className:`pointer-events-none absolute left-2.5 top-1/2 -translate-y-1/2 text-text-tertiary`}),(0,T.jsx)(a,{value:l,onChange:e=>h(e.target.value),placeholder:`Search id, filename, type...`,className:`h-8 pl-8 text-[12px]`})]})})]}),(0,T.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-cols-1 gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,T.jsx)(`section`,{className:`min-h-0 overflow-hidden rounded-lg border border-border bg-bg-surface`,children:j.loading?(0,T.jsx)(t,{icon:C,title:`Loading storage`,description:`Reading storage metadata from the selected runtime.`}):j.error?(0,T.jsx)(t,{icon:y,title:`Storage failed to load`,description:j.error}):M.length===0?(0,T.jsx)(t,{icon:y,title:`No storage objects`,description:`Files written with ctx.storage.put will appear here.`}):(0,T.jsx)(`div`,{className:`h-full overflow-auto`,children:(0,T.jsxs)(`table`,{className:`w-full min-w-[760px] border-separate border-spacing-0`,children:[(0,T.jsx)(`thead`,{className:`sticky top-0 z-10 bg-bg-surface`,children:(0,T.jsxs)(`tr`,{className:`border-b border-border text-left text-[11px] uppercase tracking-wide text-text-tertiary`,children:[(0,T.jsx)(`th`,{className:`border-b border-border px-3 py-2 font-medium`,children:`Object`}),(0,T.jsx)(`th`,{className:`border-b border-border px-3 py-2 font-medium`,children:`Type`}),(0,T.jsx)(`th`,{className:`border-b border-border px-3 py-2 text-right font-medium`,children:`Size`}),(0,T.jsx)(`th`,{className:`border-b border-border px-3 py-2 font-medium`,children:`Created`}),(0,T.jsx)(`th`,{className:`border-b border-border px-3 py-2 text-right font-medium`,children:`Actions`})]})}),(0,T.jsx)(`tbody`,{children:M.map(t=>(0,T.jsxs)(`tr`,{className:d(`cursor-pointer border-b border-border/60 text-[12px] hover:bg-bg-elevated/60`,F?.id===t.id&&`bg-bg-elevated`),onClick:()=>I(t),children:[(0,T.jsx)(`td`,{className:`border-b border-border/60 px-3 py-2`,children:(0,T.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,T.jsx)(A,{entry:t}),(0,T.jsxs)(`div`,{className:`min-w-0`,children:[(0,T.jsx)(`div`,{className:`truncate text-text-primary`,children:t.fileName??t.id}),(0,T.jsx)(`div`,{className:`truncate font-mono text-[11px] text-text-tertiary`,children:t.id})]})]})}),(0,T.jsx)(`td`,{className:`border-b border-border/60 px-3 py-2`,children:(0,T.jsx)(m,{variant:`secondary`,className:`max-w-[180px] truncate`,children:t.contentType??`application/octet-stream`})}),(0,T.jsx)(`td`,{className:`border-b border-border/60 px-3 py-2 text-right font-mono text-[11px] text-text-secondary`,children:N(t.size)}),(0,T.jsx)(`td`,{className:`border-b border-border/60 px-3 py-2`,children:(0,T.jsx)(e,{timestamp:t.createdAt})}),(0,T.jsx)(`td`,{className:`border-b border-border/60 px-3 py-2`,children:(0,T.jsxs)(`div`,{className:`flex justify-end gap-1`,children:[(0,T.jsx)(i,{variant:`ghost`,size:`icon-xs`,onClick:e=>{e.stopPropagation(),L(t)},"aria-label":`Download storage object`,children:(0,T.jsx)(n,{size:13})}),(0,T.jsx)(i,{variant:`ghost`,size:`icon-xs`,onClick:e=>{e.stopPropagation(),E(t)},"aria-label":`Delete storage object`,children:(0,T.jsx)(f,{size:13})})]})})]},t.id))})]})})}),(0,T.jsx)(k,{entry:F,onDownload:L,onDelete:e=>E(e)})]}),(0,T.jsx)(r,{open:!!S,onOpenChange:e=>{e||E(null)},title:`Delete storage object`,description:S?`Delete ${S.fileName??S.id}? This removes the stored bytes and metadata.`:`Delete this storage object?`,confirmLabel:`Delete`,onConfirm:()=>{S&&R(S)}})]}):(0,T.jsx)(t,{icon:y,title:`Storage unavailable`,description:s?.reason??`The selected runtime does not expose storage browsing.`})}function k({entry:e,onDownload:r,onDelete:a}){return e?(0,T.jsxs)(`aside`,{className:`flex min-h-0 flex-col rounded-lg border border-border bg-bg-surface`,children:[(0,T.jsxs)(`div`,{className:`border-b border-border p-4`,children:[(0,T.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,T.jsxs)(`div`,{className:`min-w-0`,children:[(0,T.jsx)(`div`,{className:`truncate text-[13px] font-semibold text-text-primary`,children:e.fileName??e.id}),(0,T.jsx)(`div`,{className:`mt-1 truncate font-mono text-[11px] text-text-tertiary`,children:e.id})]}),(0,T.jsx)(A,{entry:e})]}),(0,T.jsxs)(`div`,{className:`mt-4 grid grid-cols-2 gap-2 text-[12px]`,children:[(0,T.jsx)(j,{label:`Size`,value:N(e.size)}),(0,T.jsx)(j,{label:`Type`,value:e.contentType??`unknown`}),(0,T.jsx)(j,{label:`Created`,value:new Date(e.createdAt).toLocaleString()}),(0,T.jsx)(j,{label:`Path`,value:e.path,mono:!0})]}),(0,T.jsxs)(`div`,{className:`mt-4 flex flex-wrap gap-2`,children:[(0,T.jsxs)(i,{size:`sm`,onClick:()=>void r(e),children:[(0,T.jsx)(n,{size:13}),`Download`]}),(0,T.jsxs)(i,{variant:`destructive`,size:`sm`,onClick:()=>a(e),children:[(0,T.jsx)(f,{size:13}),`Delete`]})]})]}),(0,T.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-4`,children:(0,T.jsx)(t,{icon:b,title:`Preview temporarily disabled`,description:`Use Download to inspect this storage object outside the dashboard.`,className:`py-10`})})]}):(0,T.jsx)(`aside`,{className:`rounded-lg border border-border bg-bg-surface`,children:(0,T.jsx)(t,{icon:b,title:`Select a storage object`,description:`Choose an object to inspect metadata and manage it.`})})}function A({entry:e}){return(0,T.jsx)(`div`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border bg-bg-base text-text-tertiary`,children:(0,T.jsx)((e.contentType??``).startsWith(`image/`)?S:M(e)?x:b,{size:15})})}function j({label:e,value:t,mono:n}){return(0,T.jsxs)(`div`,{className:`min-w-0 rounded-md border border-border bg-bg-base p-2`,children:[(0,T.jsx)(`div`,{className:`text-[10px] uppercase tracking-wide text-text-tertiary`,children:e}),(0,T.jsx)(`div`,{className:d(`mt-1 truncate text-[12px] text-text-secondary`,n&&`font-mono text-[11px]`),title:t,children:t})]})}function M(e){let t=e.contentType??``;return t.startsWith(`text/`)||t===`application/json`||t===`application/xml`||t.endsWith(`+json`)}function N(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024;for(let e of t){if(n<1024)return`${n.toFixed(n>=10?1:2)} ${e}`;n/=1024}return`${n.toFixed(1)} PB`}async function P(e,t){let n=await _({kind:`storage.access.create`,id:e.id,purpose:t});if(n.error||!n.entry||!n.url)throw Error(n.error??`Storage object could not be accessed.`);return{entry:n.entry,url:n.url,supportsRange:n.supportsRange===!0,...n.maxPreviewBytes?{maxPreviewBytes:n.maxPreviewBytes}:{}}}export{E as Route};
@@ -0,0 +1 @@
1
+ import{Ot as e}from"./index-DrSG4qZZ.js";var t=e(`table-2`,[[`path`,{d:`M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18`,key:`gugj83`}]]);export{t};
@@ -0,0 +1,18 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Syncore Dev Dashboard</title>
7
+ <link
8
+ rel="icon"
9
+ type="image/svg+xml"
10
+ href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='8' fill='%23d4a853'/%3E%3Ctext x='16' y='22' font-size='18' font-weight='bold' text-anchor='middle' fill='%23141210'%3ES%3C/text%3E%3C/svg%3E"
11
+ />
12
+ <script type="module" crossorigin src="/assets/index-DrSG4qZZ.js"></script>
13
+ <link rel="stylesheet" crossorigin href="/assets/index-DT9ZEELb.css">
14
+ </head>
15
+ <body>
16
+ <div id="root"></div>
17
+ </body>
18
+ </html>
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.mts","names":[],"sources":["../src/app.ts"],"mappings":";;;iBAgJsB,aAAA,CAAc,IAAA,cAAsB,OAAO"}
1
+ {"version":3,"file":"app.d.mts","names":[],"sources":["../src/app.ts"],"mappings":";;;iBA+IsB,aAAA,CAAc,IAAA,cAAsB,OAAO"}
@@ -133,7 +133,7 @@ function addDoctorCommand(program) {
133
133
  });
134
134
  }
135
135
  function addTargetsCommand(program) {
136
- program.command("targets").summary("List available Syncore targets").description("Inspect project and connected client targets for run, data, import, export, and logs.").option("--online-only", "Only show online targets").option("--capability <capability>", "Filter targets by capability: run, readData, writeData, exportData, streamLogs").addHelpText("after", [
136
+ program.command("targets").summary("List available Syncore targets").description("Inspect project and connected client targets for run, data, import, export, and logs.").option("--capability <capability>", "Filter targets by capability: run, readData, writeData, exportData, streamLogs").addHelpText("after", [
137
137
  "",
138
138
  "Examples:",
139
139
  " npx syncorejs targets",
@@ -144,7 +144,6 @@ function addTargetsCommand(program) {
144
144
  await executeCommand(ctx, async () => {
145
145
  if (options.capability && !isTargetCapability(options.capability)) ctx.fail(`Unknown capability ${JSON.stringify(options.capability)}. Expected run, readData, writeData, exportData, or streamLogs.`);
146
146
  const filtered = (await listAvailableTargets(ctx.cwd)).filter((target) => {
147
- if (options.onlineOnly && !target.online) return false;
148
147
  if (options.capability && !targetSupportsCapability(target, options.capability)) return false;
149
148
  return true;
150
149
  });
@@ -224,7 +223,7 @@ async function maybeOpenDashboard(context, shouldOpenDashboard, hubSession) {
224
223
  if (!shouldOpenDashboard) return;
225
224
  const targetUrl = hubSession?.authenticatedDashboardUrl ?? await resolveActiveDashboardUrl(context.cwd);
226
225
  if (!await waitForDashboardReady(targetUrl)) {
227
- context.warn("Dashboard did not become ready in time, so it was not opened.");
226
+ context.warn(`Dashboard did not become ready in time, so it was not opened. Open manually: ${targetUrl}`);
228
227
  return;
229
228
  }
230
229
  if (await openTarget(targetUrl)) {
@@ -639,7 +638,19 @@ async function startManagedDevHub(context, template) {
639
638
  context.info(message.replaceAll("127.0.0.1", "localhost"));
640
639
  return;
641
640
  }
642
- if (/Dashboard shell:/i.test(message) || /devtools hub:/i.test(message)) return;
641
+ if (/Dashboard shell:/i.test(message)) {
642
+ context.info(message);
643
+ return;
644
+ }
645
+ if (/Dashboard (?:source|static shell) not started automatically:/i.test(message) || /Dashboard shell not available/i.test(message)) {
646
+ context.warn(message);
647
+ return;
648
+ }
649
+ if (/Devtools dashboard token:/i.test(message)) {
650
+ context.info(message);
651
+ return;
652
+ }
653
+ if (/devtools hub:/i.test(message)) return;
643
654
  if (/Watching syncore\//i.test(message)) {
644
655
  context.info("Watching syncore/ for changes.");
645
656
  return;
@@ -659,7 +670,7 @@ async function startManagedDevHub(context, template) {
659
670
  }));
660
671
  }
661
672
  async function waitForDashboardReady(url, options = {}) {
662
- const timeoutMs = options.timeoutMs ?? 15e3;
673
+ const timeoutMs = options.timeoutMs ?? 45e3;
663
674
  const intervalMs = options.intervalMs ?? 250;
664
675
  const deadline = Date.now() + timeoutMs;
665
676
  while (Date.now() < deadline) {