@huynle/hub 0.9.2 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +296 -0
- package/Dockerfile +5 -1
- package/README.md +152 -77
- package/package.json +7 -4
- package/packages/claude-code/package.json +1 -1
- package/packages/cli/dist/hub-cli.js +532 -261
- package/packages/cli/package.json +1 -1
- package/packages/cli/src/cli.ts +36 -1
- package/packages/cli/src/subscriptions.ts +49 -0
- package/packages/codex/package.json +1 -1
- package/packages/codex/src/sessions.ts +10 -6
- package/packages/codex/src/spoke.ts +2 -1
- package/packages/node/package.json +1 -1
- package/packages/preset/package.json +1 -1
- package/packages/protocol/package.json +1 -1
- package/packages/protocol/schema/app-delivery/v1.schema.json +7 -5
- package/packages/protocol/schema/app-front/v1.schema.json +410 -0
- package/packages/protocol/src/app-front.ts +293 -0
- package/packages/protocol/src/concierge.ts +10 -1
- package/packages/protocol/src/context-cards.ts +59 -0
- package/packages/protocol/src/credentials.ts +39 -2
- package/packages/protocol/src/index.ts +69 -11
- package/packages/runtime-openshell/package.json +1 -1
- package/packages/runtime-sdk/package.json +1 -1
- package/packages/sdk/package.json +1 -1
- package/packages/sdk/src/app-front.ts +524 -0
- package/packages/sdk/src/client.ts +37 -4
- package/packages/sdk/src/envelope.ts +9 -2
- package/packages/sdk/src/errors.ts +1 -0
- package/packages/sdk/src/index.ts +1 -0
- package/packages/sdk/src/types.ts +39 -1
- package/packages/spoke-sdk/package.json +1 -1
- package/packages/spoke-sdk/src/delivery.ts +17 -1
- package/packages/spoke-sdk/src/harness-spoke.ts +4 -3
- package/packages/voice-client/README.md +146 -0
- package/packages/voice-client/src/vad/LICENSE +21 -0
- package/src/central/agent/acting-routes.ts +17 -3
- package/src/central/agent/acting.ts +12 -3
- package/src/central/agent/actor.ts +6 -1
- package/src/central/agent/app-decisions.ts +146 -0
- package/src/central/agent/app-tokens.ts +9 -3
- package/src/central/agent/audit.ts +3 -0
- package/src/central/agent/connect-routes.ts +64 -0
- package/src/central/agent/connect.ts +868 -0
- package/src/central/agent/conversation.ts +625 -0
- package/src/central/agent/decisions.ts +71 -6
- package/src/central/agent/delivery.ts +3 -0
- package/src/central/agent/directory.ts +5 -0
- package/src/central/agent/errors.ts +2 -0
- package/src/central/agent/grant-requests.ts +46 -9
- package/src/central/agent/grants.ts +13 -2
- package/src/central/agent/message-limits.ts +2 -2
- package/src/central/agent/message-routes.ts +13 -4
- package/src/central/agent/read-routes.ts +16 -2
- package/src/central/agent/routes.ts +108 -6
- package/src/central/agent/speech-routes.ts +316 -0
- package/src/central/agent/subscription-routes.ts +174 -0
- package/src/central/agent/subscriptions.ts +980 -0
- package/src/central/agent-data.ts +43 -1
- package/src/central/backend/memory-counters.ts +2 -2
- package/src/central/backend/types.ts +5 -2
- package/src/central/backend/valkey-counters.ts +5 -4
- package/src/central/client-address.ts +16 -0
- package/src/central/concierge/board-render.ts +52 -1
- package/src/central/concierge/board-routes.ts +25 -2
- package/src/central/concierge/board.ts +11 -1
- package/src/central/concierge/context.ts +29 -8
- package/src/central/concierge/grant-request.ts +216 -0
- package/src/central/concierge/prompt.ts +49 -2
- package/src/central/concierge/session-routes.ts +3 -0
- package/src/central/config.ts +64 -3
- package/src/central/context-cards/budget.ts +121 -0
- package/src/central/context-cards/changes.ts +29 -0
- package/src/central/context-cards/config.ts +145 -0
- package/src/central/context-cards/engine.ts +379 -0
- package/src/central/context-cards/inputs.ts +111 -0
- package/src/central/context-cards/pickup.ts +134 -0
- package/src/central/context-cards/registry.ts +89 -0
- package/src/central/context-cards/routes.ts +37 -0
- package/src/central/context-cards/service.ts +367 -0
- package/src/central/context-cards/store.ts +67 -0
- package/src/central/context-cards/types.ts +88 -0
- package/src/central/fetcher.ts +10 -2
- package/src/central/front-relays.ts +423 -0
- package/src/central/http.ts +516 -56
- package/src/central/human-activity.ts +453 -0
- package/src/central/llm/chat.ts +133 -0
- package/src/central/registry.ts +162 -9
- package/src/central/speech/service.ts +9 -0
- package/src/central/spoke-ws.ts +13 -0
- package/src/central/store.ts +9 -12
- package/src/config.ts +30 -13
- package/src/index.ts +45 -43
- package/src/rpc.ts +33 -4
- package/src/spoke/concierge-agent.ts +1 -1
- package/src/spoke/conversation.ts +6 -75
- package/src/spoke/deliver.ts +18 -8
- package/src/spoke/hub-rpc.ts +7 -2
- package/src/spoke/hub-tool-subscriptions.ts +82 -0
- package/src/spoke/hub-tool-title.ts +89 -0
- package/src/spoke/hub-tool.ts +56 -18
- package/src/spoke/session-context.ts +10 -2
- package/src/spoke/spoke.ts +209 -238
- package/src/spoke/summary.ts +36 -1
- package/src/spoke/taskboard.ts +5 -6
- package/src/spoke/voice-front.ts +323 -30
- package/src/spoke/who-teams.ts +51 -2
- package/src/tui-messaging.ts +24 -10
- package/src/tui.ts +6 -6
- package/web/dist/assets/{ArtifactPage-BKISN-Qj.js → ArtifactPage-Bz992ZX6.js} +1 -1
- package/web/dist/assets/{ArtifactPane-CKOiAUNH.js → ArtifactPane-BJZNixJC.js} +1 -1
- package/web/dist/assets/ArtifactWorkbench-Dti3VP07.js +6 -0
- package/web/dist/assets/{Diagram-vdpmp3xu.css → Diagram-7y8kg3og.css} +1 -1
- package/web/dist/assets/Diagram-B4HdUxw0.js +1 -0
- package/web/dist/assets/{Library-CcjZXsfF.js → Library-CpzD2HDW.js} +2 -2
- package/web/dist/assets/Lightbox-BlbivCkd.js +1 -0
- package/web/dist/assets/MediaImage-Ch3ryIdR.js +4 -0
- package/web/dist/assets/ProfilesDestination-DlQeogea.js +1 -0
- package/web/dist/assets/{TeamsPage-CDyjrK-I.js → TeamsPage-4xdWCaI-.js} +1 -1
- package/web/dist/assets/{Watchtower-DYwoUWME.js → Watchtower-CpQdIRns.js} +2 -2
- package/web/dist/assets/{artifacts-DU9uRgs1.js → artifacts-But87Jfo.js} +1 -1
- package/web/dist/assets/index-BC0O1gfR.css +1 -0
- package/web/dist/assets/index-BS6lA6fN.js +33 -0
- package/web/dist/assets/{live-ycZ_aQZO.js → live-CVUFIdUX.js} +2 -2
- package/web/dist/assets/{pane-layout-0RrLHGDr.js → pane-layout-BW0RdX5a.js} +1 -1
- package/web/dist/assets/{renderer2d-BIwbgRoX.js → renderer2d-IaJiloPi.js} +1 -1
- package/web/dist/assets/{renderer3d-C1a7eYGQ.js → renderer3d-ZiD1uKGW.js} +1 -1
- package/web/dist/assets/{safe-area-DHhPy61Q.js → safe-area-C7IAlkgY.js} +1 -1
- package/web/dist/assets/{source-BWlvaODa.js → source-C-De8L3s.js} +1 -1
- package/web/dist/assets/toast-CXTwTvDw.js +9 -0
- package/web/dist/assets/vad-worklet-BfxJhrXy.js +27 -0
- package/web/dist/index.html +6 -6
- package/web/dist/assets/ArtifactWorkbench-d7R1o-rs.js +0 -6
- package/web/dist/assets/Diagram-azw2B_QH.js +0 -1
- package/web/dist/assets/Lightbox-Du56MXGX.js +0 -1
- package/web/dist/assets/MediaImage-Ds_JUx3a.js +0 -4
- package/web/dist/assets/ProfilesDestination-DdzbzmeK.js +0 -1
- package/web/dist/assets/index-C3ci5UtY.css +0 -1
- package/web/dist/assets/index-LNMZCqgE.js +0 -36
- package/web/dist/assets/toast-Cuu2K0hx.js +0 -1
- /package/{web/src/voice → packages/voice-client/src}/turn/LICENSE +0 -0
package/src/spoke/who-teams.ts
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
// with its roles in that team and the caller's reach there, then the sessions in none of the listed teams ("Outside
|
|
6
6
|
// your teams" for a team member, "In no team" for the owner-wide view). Without `teams`, one untitled section: the
|
|
7
7
|
// pre-team output.
|
|
8
|
+
//
|
|
9
|
+
// Every section lists the caller (grouping.you) first, then online sessions before offline ones, named before
|
|
10
|
+
// unnamed, by name (else ID). youLine is the "You: …" header both clients put above the list.
|
|
8
11
|
|
|
9
12
|
export interface WhoReach {
|
|
10
13
|
readonly send: readonly string[]
|
|
@@ -30,6 +33,16 @@ export interface WhoTeamGroup {
|
|
|
30
33
|
export interface WhoGrouping {
|
|
31
34
|
readonly teams?: readonly WhoTeamGroup[]
|
|
32
35
|
readonly scope?: string
|
|
36
|
+
/** The caller's session ID: listed first in each section. */
|
|
37
|
+
readonly you?: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** What sorting and the header read from a row. */
|
|
41
|
+
interface WhoSortable {
|
|
42
|
+
readonly sessionID: string
|
|
43
|
+
readonly name?: string
|
|
44
|
+
readonly project?: string
|
|
45
|
+
readonly online?: boolean
|
|
33
46
|
}
|
|
34
47
|
|
|
35
48
|
export interface WhoSectionRow<T> {
|
|
@@ -55,14 +68,50 @@ export function reachText(reach: WhoReach | undefined): string {
|
|
|
55
68
|
|
|
56
69
|
export const ME_LINE = "@me · the user · always reachable"
|
|
57
70
|
|
|
71
|
+
/** Marks the caller's own row after its label. */
|
|
72
|
+
export const YOU_MARK = "(you)"
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The header naming the caller: "You: @name · project", "You: ses_… (unnamed; <hint>)", or only the ID when the
|
|
76
|
+
* caller is not in the answer (a filter left it out, so its name is unknown here).
|
|
77
|
+
*/
|
|
78
|
+
export function youLine(row: WhoSortable | undefined, sessionID: string, unnamedHint: string): string {
|
|
79
|
+
if (!row) return `You: ${sessionID}`
|
|
80
|
+
if (!row.name) return `You: ${row.sessionID} (unnamed; ${unnamedHint})`
|
|
81
|
+
return `You: ${[`@${row.name}`, row.project ?? ""].filter(Boolean).join(" · ")}`
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Longest title shown for an unnamed session. */
|
|
85
|
+
const TITLE_MAX = 48
|
|
86
|
+
|
|
87
|
+
/** An unnamed session's title, quoted and shortened by code points, never splitting a surrogate pair ("" without one). */
|
|
88
|
+
export function titleText(title: string | undefined): string {
|
|
89
|
+
if (!title) return ""
|
|
90
|
+
const points = Array.from(title)
|
|
91
|
+
return `"${points.length > TITLE_MAX ? `${points.slice(0, TITLE_MAX - 1).join("")}…` : title}"`
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Caller first, then online before offline, named before unnamed, then by name, else ID. */
|
|
95
|
+
export function compareWho(you?: string): (a: WhoSortable, b: WhoSortable) => number {
|
|
96
|
+
const key = (r: WhoSortable) => [r.sessionID === you ? 0 : 1, r.online ? 0 : 1, r.name ? 0 : 1] as const
|
|
97
|
+
return (a, b) => {
|
|
98
|
+
const [ka, kb] = [key(a), key(b)]
|
|
99
|
+
for (let i = 0; i < ka.length; i++) if (ka[i] !== kb[i]) return ka[i]! - kb[i]!
|
|
100
|
+
const [la, lb] = [a.name ?? a.sessionID, b.name ?? b.sessionID]
|
|
101
|
+
return la < lb ? -1 : la > lb ? 1 : 0
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
58
105
|
/** The sections of a who answer (see the header). */
|
|
59
|
-
export function whoSections<T extends
|
|
106
|
+
export function whoSections<T extends WhoSortable & { readonly teams?: readonly WhoTeamRef[]; readonly reach?: WhoReach }>(unsorted: readonly T[], grouping: WhoGrouping = {}): WhoSection<T>[] {
|
|
107
|
+
const rows = [...unsorted].sort(compareWho(grouping.you))
|
|
60
108
|
const groups = grouping.teams ?? []
|
|
61
109
|
if (!groups.length) return [{ rows: rows.map((row) => ({ row, ...(row.reach ? { reach: row.reach } : {}) })) }]
|
|
62
110
|
const byID = new Map(rows.map((r) => [r.sessionID, r]))
|
|
63
111
|
const grouped = new Set<string>()
|
|
64
112
|
const sections: WhoSection<T>[] = groups.map((g) => {
|
|
65
|
-
const
|
|
113
|
+
const members = new Set(g.members.map((m) => m.sessionID))
|
|
114
|
+
const ids = rows.map((r) => r.sessionID).filter((id) => members.has(id))
|
|
66
115
|
for (const id of ids) grouped.add(id)
|
|
67
116
|
const you = g.yourRoles?.length ? ` · you are ${g.yourRoles.map((r) => `@@${r}`).join(" ")}` : ""
|
|
68
117
|
return {
|
package/src/tui-messaging.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// /who and /msg in the TUI: what the user typed after the slash name, and what the TUI shows back. The server side
|
|
2
2
|
// (src/spoke/hub-rpc.ts) talks to the hub as the TUI's current session; labels arrive sanitised from there.
|
|
3
3
|
import type { WhoResult, WhoRow } from "./spoke/hub-rpc"
|
|
4
|
-
import { ME_LINE, reachText, whoSections, type WhoGrouping } from "./spoke/who-teams"
|
|
4
|
+
import { ME_LINE, reachText, titleText, whoSections, YOU_MARK, youLine, type WhoGrouping } from "./spoke/who-teams"
|
|
5
5
|
|
|
6
6
|
/** One session in /who, as the server's hubWho RPC returns it (type only: the TUI never loads the SDK). */
|
|
7
7
|
export type { WhoResult, WhoRow }
|
|
@@ -38,19 +38,28 @@ export function parseWhoInput(input?: string): { project?: string; role?: string
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
41
|
+
* How the user names the current session. No TUI command does it, and a `!` command gets no session token
|
|
42
|
+
* (src/spoke/env-inject.ts), so: the agent (hub tool, `name` verb), or the CLI with an explicit --session.
|
|
43
|
+
*/
|
|
44
|
+
const nameHint = (sessionID: string) => `ask the agent to name itself, or run \`hub name @name --session ${sessionID}\` in a logged-in terminal`
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A "You: …" header naming the current session (`grouping.you`, else the row marked self), then one line per
|
|
48
|
+
* session: name (else ID and title) · project · state · online/offline · roles, the current session marked "(you)"
|
|
49
|
+
* and listed first, then online before offline. With team groups (HWA-40): a section per team (roles there and the
|
|
50
|
+
* reach from you), the sessions outside, and @me for a team member.
|
|
43
51
|
*/
|
|
44
52
|
export function formatWho(rows: readonly WhoRow[], grouping: WhoGrouping = {}): string {
|
|
45
|
-
if (!rows.length) return "No
|
|
46
|
-
const
|
|
47
|
-
|
|
53
|
+
if (!rows.length) return "No sessions to show."
|
|
54
|
+
const you = grouping.you ?? rows.find((r) => r.self)?.sessionID
|
|
55
|
+
const lines: string[] = you ? [youLine(rows.find((r) => r.sessionID === you), you, nameHint(you))] : []
|
|
56
|
+
for (const section of whoSections(rows, { ...grouping, ...(you ? { you } : {}) })) {
|
|
48
57
|
const indent = section.title ? " " : ""
|
|
49
58
|
if (section.title) lines.push(section.title)
|
|
50
59
|
for (const { row: s, teamRoles, reach } of section.rows) {
|
|
51
60
|
const roles = (teamRoles ?? s.roles).map((r) => `@@${r}`).join(" ")
|
|
52
|
-
const
|
|
53
|
-
lines.push(indent + [s.name ?
|
|
61
|
+
const label = [s.name ? `@${s.name}` : s.sessionID, s.sessionID === you ? YOU_MARK : ""].filter(Boolean).join(" ")
|
|
62
|
+
lines.push(indent + [label, s.name ? "" : titleText(s.title), s.project ?? "", s.state ?? "", s.online ? "online" : "offline", roles, reachText(reach)].filter(Boolean).join(" · "))
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
65
|
if (grouping.scope === "team") lines.push(ME_LINE)
|
|
@@ -94,7 +103,10 @@ export async function runMsg(deps: MessagingDeps, input?: string): Promise<void>
|
|
|
94
103
|
deps.toast(formatSent(sent), "success")
|
|
95
104
|
}
|
|
96
105
|
|
|
97
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* /who [project | #team | @@role]: the sessions the hub shows the current session (online ones, and named or
|
|
108
|
+
* role-holding ones while offline) in a dialog headed by the current session, asked as it.
|
|
109
|
+
*/
|
|
98
110
|
export async function runWho(deps: MessagingDeps, input?: string): Promise<void> {
|
|
99
111
|
const sessionID = deps.sessionID()
|
|
100
112
|
if (!sessionID) return void deps.toast(NO_SESSION("/who"), "warning")
|
|
@@ -103,5 +115,7 @@ export async function runWho(deps: MessagingDeps, input?: string): Promise<void>
|
|
|
103
115
|
const { sessions } = answer
|
|
104
116
|
if (!sessions.length) return void deps.toast(formatWho(sessions), "info")
|
|
105
117
|
const scope = filter.role ? ` · @@${filter.role}` : filter.team ? ` · #${filter.team}` : filter.project ? ` · ${filter.project}` : ""
|
|
106
|
-
|
|
118
|
+
const online = sessions.filter((s) => s.online).length
|
|
119
|
+
const count = `${sessions.length} session${sessions.length === 1 ? "" : "s"}, ${online} online`
|
|
120
|
+
await deps.alert({ title: `Hub · who${scope} · ${count}`, message: formatWho(sessions, { ...answer, you: sessionID }) })
|
|
107
121
|
}
|
package/src/tui.ts
CHANGED
|
@@ -135,13 +135,13 @@ export default Plugin.define({
|
|
|
135
135
|
const toggleConversation = async (sessionID: string, s: Status) => {
|
|
136
136
|
const on = !s.conversation
|
|
137
137
|
const { agent } = await call<{ agent: string }>("conversation", { sessionID, on })
|
|
138
|
-
if (!on) return toast(
|
|
138
|
+
if (!on) return toast("Conversation mode off", "success")
|
|
139
139
|
const connected = s.connection === "connected"
|
|
140
140
|
const go = await context.ui.dialog.confirm({
|
|
141
141
|
title: "Conversation mode on",
|
|
142
142
|
message:
|
|
143
|
-
`This session
|
|
144
|
-
`
|
|
143
|
+
`This session keeps its ${agent} agent and answers in short spoken replies. ` +
|
|
144
|
+
`For the voice front, use /voice; open this session on your phone to talk${connected ? "" : " once this machine is connected"}.`,
|
|
145
145
|
label: { confirm: connected ? "Send to phone" : "OK", cancel: "Later" },
|
|
146
146
|
})
|
|
147
147
|
if (go && connected) await sendToPhone(sessionID)
|
|
@@ -356,8 +356,8 @@ export default Plugin.define({
|
|
|
356
356
|
title: `Conversation mode: ${s.conversation ? "on" : "off"}`,
|
|
357
357
|
value: "conversation",
|
|
358
358
|
description: s.conversation
|
|
359
|
-
? "
|
|
360
|
-
: "
|
|
359
|
+
? "Back to normal replies"
|
|
360
|
+
: "Short spoken replies from this session (/voice opens Voice mode with the voice front in the browser)",
|
|
361
361
|
})
|
|
362
362
|
}
|
|
363
363
|
|
|
@@ -449,7 +449,7 @@ export default Plugin.define({
|
|
|
449
449
|
[
|
|
450
450
|
{ id: "open", slash: "hub", title: "server, connection, sharing and phones", run: open },
|
|
451
451
|
{ id: "voice", slash: "voice", title: "talk to this session (Voice mode in the browser)", run: voice },
|
|
452
|
-
{ id: "who", slash: "who", title: "who is on the hub
|
|
452
|
+
{ id: "who", slash: "who", title: "who is on the hub, and which session is you", arguments: true, run: (input) => runWho(messaging, input) },
|
|
453
453
|
{ id: "msg", slash: "msg", title: "message a session as this session (/msg @name text)", arguments: true, run: (input) => runMsg(messaging, input) },
|
|
454
454
|
],
|
|
455
455
|
(cause) => toast(errorMessage(cause), "error"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,I as t,S as n,i as r,k as i,r as a}from"./ui-CFB4wQfF.js";import{o}from"./artifacts-
|
|
1
|
+
import{B as e,I as t,S as n,i as r,k as i,r as a}from"./ui-CFB4wQfF.js";import{o}from"./artifacts-But87Jfo.js";import{it as s,rt as c}from"./index-BS6lA6fN.js";import{t as l}from"./ArtifactWorkbench-Dti3VP07.js";var u=i(`<div class="feature-page av-page">`),d=i(`<a class="icon-btn av-back"href=/artifacts aria-label="All artifacts"title="All artifacts">`);function f(i){return(()=>{var f=u();return n(f,e(l,{get id(){return i.id},layout:`page`,get lead(){return[e(t,{get when(){return c()},get children(){return e(r,{icon:`menu`,label:`Open sidebar`,onClick:s})}}),(()=>{var t=d();return n(t,e(a,{name:`back`})),t})()]},get actions(){return e(r,{class:`av-wide`,icon:`split`,label:`Open in pane`,onClick:()=>o(i.id)})}})),f})()}export{f as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,G as t,S as n,T as r,k as i,r as a}from"./ui-CFB4wQfF.js";import{t as o}from"./ArtifactWorkbench-
|
|
1
|
+
import{B as e,G as t,S as n,T as r,k as i,r as a}from"./ui-CFB4wQfF.js";import{t as o}from"./ArtifactWorkbench-Dti3VP07.js";var s=i(`<a class=icon-btn aria-label="Full page"title="Open the artifact's full page">`);function c(i){return e(o,{get id(){return i.artifactID},layout:`pane`,onArtifact:e=>i.onTitle?.(e.title||`Untitled`),get actions(){return(()=>{var o=s();return n(o,e(a,{name:`expand`})),t(()=>r(o,`href`,`/artifacts/${encodeURIComponent(i.artifactID)}`)),o})()},get trailing(){return i.paneTools}})}export{c as ArtifactPane};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{$ as e,A as t,B as n,C as r,E as i,F as a,G as o,I as s,J as c,N as l,O as u,P as d,Q as f,R as p,S as m,T as h,U as g,W as _,_ as v,a as y,b,et as x,g as S,i as C,k as w,r as T,tt as E,u as D,x as O,y as k}from"./ui-CFB4wQfF.js";import{A,B as j,H as M,M as N,R as P,U as F,V as I,W as ee}from"./toast-CXTwTvDw.js";import{n as L,o as R}from"./artifacts-But87Jfo.js";import{B as te,F as z,G as ne,H as B,I as re,J as V,K as ie,L as ae,M as oe,N as se,P as ce,Q as le,R as ue,U as de,V as fe,W as pe,X as me,Y as H,Z as he,at as ge,et as _e,j as ve,q as ye,st as be,z as xe}from"./index-BS6lA6fN.js";import{c as Se,i as Ce,n as we,r as Te,t as Ee}from"./source-C-De8L3s.js";var De=`ai-actions`,Oe=16,ke=[`ask`,`propose-edit`,`run-action`],Ae=[`queued`,`running`,`succeeded`,`failed`,`cancelled`],je=[`starting`,`waiting`,`offline`,`ready`,`ended`,`failed`],Me=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/,U=e=>typeof e==`object`&&!!e&&!Array.isArray(e),W=e=>typeof e==`string`&&e.length>0,Ne=e=>typeof e==`number`&&Number.isFinite(e),Pe=(e,t)=>typeof t==`string`&&e.includes(t),Fe=e=>e.replace(/\/+$/,``).split(`/`).pop()||e;function Ie(e){if(U(e)&&Pe(je,e.status)){if(e.kind===`session`&&W(e.address))return e;if(e.kind===`launch`&&W(e.machine)&&W(e.repo))return{harness:``,mode:`checkout`,...e}}}function Le(e){if(!U(e)||!Pe([`pending`,`applied`,`conflict`],e.state)||!Array.isArray(e.files))return;let t=e.files.filter(e=>U(e)&&W(e.mediaType)&&Ne(e.bytes)&&W(e.hash));return{state:e.state,files:t,...Array.isArray(e.keep)?{keep:e.keep.filter(W)}:{},...W(e.entry)?{entry:e.entry}:{},...W(e.appliedRevisionID)?{appliedRevisionID:e.appliedRevisionID}:{}}}function Re(e){if(!U(e)||!W(e.id)||!W(e.artifactID)||!W(e.baseRevisionID)||!Ne(e.revision)||!Pe(Ae,e.state)||!Pe(ke,e.kind)||typeof e.instruction!=`string`||!W(e.by)||!Ne(e.createdAt)||!Ne(e.updatedAt))return;let t=Ie(e.handler);if(!t)return;let n=Le(e.proposal),{proposal:r,...i}=e;return{...i,handler:t,...n?{proposal:n}:{},...typeof e.answer==`string`?{answer:e.answer}:{},...typeof e.error==`string`?{error:e.error}:{}}}function ze(e){let t=U(e)?e:{};return{items:Array.isArray(t.items)?t.items.flatMap(e=>Re(e)??[]):[],...W(t.cursor)?{cursor:t.cursor}:{}}}function Be(e){let t=e?.[De];return t?t.split(`,`).map(e=>e.trim()).filter(N).slice(0,Oe):[]}var Ve=e=>e.state===`queued`||e.state===`running`;function G(e,t){return e.kind===`session`?e.address.startsWith(`@`)?e.address:t?.(e.sessionID??e.address)??(e.sessionID?t?.(e.address):void 0)??e.address:`New ${e.harness||`agent`} session on ${e.machine} · ${Fe(e.repo)}`}function He(e,t){let n=(e,t)=>({tone:e,active:!1,text:t});if(e.state===`failed`)return n(`failed`,`Failed: ${e.error||`no reason given`}`);if(e.state===`cancelled`)return n(`cancelled`,`Cancelled`);if(e.state===`succeeded`){if(e.kind!==`propose-edit`)return n(`done`,`Answered`);let t=e.proposal;return t?t.state===`applied`?n(`done`,`Edit accepted`):t.state===`conflict`?n(`failed`,`Not accepted: the artifact changed after this edit was proposed. Request it again on the latest revision.`):n(`done`,`Proposed an edit: review it below`):n(`done`,`Finished without a proposal`)}let r=e.handler,i=(e,t)=>({tone:e,active:!0,text:t});switch(r.status){case`offline`:return r.kind===`session`?i(`offline`,`Waiting: ${G(r,t)} is offline. The request is queued and is delivered when it reconnects.`):i(`offline`,`Waiting: ${r.machine} is offline. The request is queued until it's back.`);case`starting`:return i(`waiting`,r.kind===`session`?`Sending to ${G(r,t)}…`:`Starting a session on ${r.machine}…`);case`waiting`:return i(`waiting`,r.kind===`launch`?`Waiting for a session on ${r.machine}${r.reason?`: ${r.reason}`:``}`:`Waiting for ${G(r,t)}`);case`ready`:return e.state===`running`?i(`running`,`Working: ${G(r,t)} has the request.`):i(`waiting`,`Request delivered to ${G(r,t)}; waiting for it to pick it up.`);default:return i(`waiting`,`The handler ${r.status===`ended`?`ended`:`failed`}; the job finishes shortly.`)}}function Ue(e){return e===`user`?`You`:e.startsWith(`app:`)?`App ${e.slice(4)}`:`Session ${e}`}function We(e,t){let n=t.get(e);return n===void 0?`revision ${e.slice(-6)}`:`revision ${n}`}function Ge(e){let t=[],n=[];for(let r of e.sessions){if(r.archived)continue;let e=r.name?.replace(/^@+/,``)?`@${r.name.replace(/^@+/,``)}`:void 0,i=r.title||r.id,a=[r.machineName,r.harness].filter(Boolean).join(` · `),o=`${r.online?`●`:`○`} ${e?`${e} — ${i} · ${a}`:`${i} · ${a}`}${r.online?``:` (offline: queued until it reconnects)`}`,s={key:`session:${r.id}`,kind:`session`,label:o,display:e??i,online:r.online,handler:{session:r.id},search:[e,r.title,r.id,r.machineName,r.harness].filter(Boolean).join(` `).toLowerCase()};e?t.push({...s,sortName:e.toLowerCase()}):n.push(s)}t.sort((e,t)=>e.sortName<t.sortName?-1:+(e.sortName>t.sortName));let r=[...t.map(({sortName:e,...t})=>t),...n];for(let t of e.bindings){let n=e.machines.find(e=>e.id===t.machineID),i=n?.online??!1,a=`New session in ${t.label||Fe(t.repo)} on ${n?.name??t.machineID}`;r.push({key:`launch:${t.id}`,kind:`launch`,label:`${a}${i?``:` (machine offline: waits for it)`}`,display:a,online:i,handler:{launch:{machine:t.machineID,repo:t.repo}},search:[a,t.repo,t.machineID].join(` `).toLowerCase()})}return r}function Ke(e,t,n){let r=t.trim().toLowerCase();return r?e.filter(e=>e.key===n||e.search.includes(r)):[...e]}function qe(e){let t=new Map;for(let n of e)n.kind===`session`&&`session`in n.handler&&n.handler.session&&t.set(n.handler.session,n.display);return t}function Je(e){return e.kind===`session`?{session:e.sessionID??e.address}:{launch:{machine:e.machine,repo:e.repo,...e.harness?{harness:e.harness}:{},...e.model?{model:e.model}:{},...e.agent?{agent:e.agent}:{},mode:e.mode}}}function Ye(e){let t=e=>({ok:!1,problem:e});if(!e.handler)return t(`Choose who handles this request.`);let n=e.instruction.trim();if(e.kind===`run-action`){let r=e.actions??[];if(r.length===0)return t(`This artifact declares no AI actions.`);if(!e.action||!r.includes(e.action))return t(`Choose one of the artifact's actions.`);n||=`Run the ${e.action} action.`}if(!n)return t(e.kind===`ask`?`Write a question.`:`Describe the edit.`);if(n.length>L.aiInstructionChars)return t(`Keep it under ${L.aiInstructionChars.toLocaleString(`en-US`)} characters.`);if(Me.test(n))return t(`Use plain text (no control characters).`);let r={kind:e.kind,baseRevisionID:e.baseRevisionID,instruction:n,handler:e.handler};return e.kind===`run-action`?{ok:!0,request:{kind:`run-action`,action:e.action,baseRevisionID:e.baseRevisionID,instruction:n,handler:e.handler}}:{ok:!0,request:e.kind===`propose-edit`?{...r,apply:`manual`}:r}}var Xe=4e6,Ze=3,Qe=e=>{let t=e.replace(/\r\n?/g,`
|
|
2
|
+
`).split(`
|
|
3
|
+
`);return t.length>1&&t[t.length-1]===``&&t.pop(),e===``?[]:t};function $e(e,t){let n=Qe(e),r=Qe(t),i=[{type:`meta`,text:`Too large to compare line by line.`}];if(n.length+r.length>1e4)return i;let a=0;for(;a<n.length&&a<r.length&&n[a]===r[a];)a++;let o=n.length,s=r.length;for(;o>a&&s>a&&n[o-1]===r[s-1];)o--,s--;let c=o-a,l=s-a;if((c+1)*(l+1)>Xe)return i;let u=l+1,d=new Uint32Array((c+1)*u);for(let e=c-1;e>=0;e--)for(let t=l-1;t>=0;t--)d[e*u+t]=n[a+e]===r[a+t]?d[(e+1)*u+t+1]+1:Math.max(d[(e+1)*u+t],d[e*u+t+1]);let f=[];for(let e=0;e<a;e++)f.push({type:`context`,text:n[e],oldNo:e+1,newNo:e+1});let p=0,m=0,h=[],g=[],_=()=>{f.push(...h,...g),h=[],g=[]};for(;p<c||m<l;)p<c&&m<l&&n[a+p]===r[a+m]?(_(),f.push({type:`context`,text:n[a+p],oldNo:a+p+1,newNo:a+m+1}),p++,m++):m<l&&(p===c||d[p*u+m+1]>=d[(p+1)*u+m])?(g.push({type:`add`,text:r[a+m],newNo:a+m+1}),m++):(h.push({type:`del`,text:n[a+p],oldNo:a+p+1}),p++);_();for(let e=0;e<n.length-o;e++)f.push({type:`context`,text:n[o+e],oldNo:o+e+1,newNo:s+e+1});let v=new Uint8Array(f.length);f.forEach((e,t)=>{if(e.type!==`context`)for(let e=Math.max(0,t-Ze);e<=Math.min(f.length-1,t+Ze);e++)v[e]=1});let y=[],b=0;for(;b<f.length;){if(!v[b]){b++;continue}let e=b;for(;e<f.length&&v[e];)e++;let t=f.slice(b,e),n=t.find(e=>e.oldNo!==void 0)?.oldNo??0,r=t.find(e=>e.newNo!==void 0)?.newNo??0,i=t.filter(e=>e.type!==`add`).length,a=t.filter(e=>e.type!==`del`).length;y.push({type:`hunk`,text:`@@ -${n},${i} +${r},${a} @@`});for(let e of t)y.push(e);b=e}return y}function et(e,t){if(!(t.files.some(e=>e.path!==void 0)||t.keep.length>0||e.some(e=>e.path!==void 0))){let n=e[0];return t.files.map(e=>({change:n?n.hash===e.hash?`unchanged`:`changed`:`added`,mediaType:e.mediaType,bytes:e.bytes,...n?{baseBytes:n.bytes}:{}}))}let n=new Map(e.map(e=>[e.path??``,e])),r=[],i=new Set;for(let e of t.files){let t=e.path??``;i.add(t);let a=n.get(t);r.push({path:t,change:a?a.hash===e.hash?`unchanged`:`changed`:`added`,mediaType:e.mediaType,bytes:e.bytes,...a?{baseBytes:a.bytes}:{}})}for(let e of t.keep){if(i.has(e))continue;i.add(e);let t=n.get(e);r.push({path:e,change:`kept`,mediaType:t?.mediaType??``,bytes:t?.bytes??0,...t?{baseBytes:t.bytes}:{}})}for(let t of e){let e=t.path??``;i.has(e)||r.push({path:e,change:`removed`,mediaType:t.mediaType,bytes:0,baseBytes:t.bytes})}return r}function K(e){let t=U(e)||e instanceof Error?e:{},n=Ne(t.status)?t.status:0,r=typeof t.code==`string`?t.code:``,i=typeof t.message==`string`?t.message:String(e),a=U(t.details)?t.details:{};if(n===422||r===`unsupported`){let e=typeof a.feature==`string`?a.feature:``;return e===`artifactActions`?{kind:`unsupported`,text:`This artifact declares no AI actions.`}:!e||e===`artifacts`?{kind:`unsupported`,text:`AI requests aren't supported on this hub.`}:{kind:`unsupported`,text:`Not supported on this hub (${e}): ${i}`}}return n===404||r===`not_found`?{kind:`unavailable`,text:`AI requests aren't available for this artifact (it doesn't exist, or you can't see it).`}:n===401||n===403||r===`forbidden`?{kind:`forbidden`,text:`Not allowed: ${i}`}:n===409||r===`conflict`?{kind:`conflict`,text:i}:n===429||r===`rate_limited`?{kind:`rate_limited`,text:`Too many AI requests are running (on this artifact or for you). Wait for one to finish.`}:n===503||r===`offline`?{kind:`offline`,text:`Offline: ${i}`}:n===400||r===`invalid`?{kind:`invalid`,text:i}:{kind:`error`,text:i}}function tt(e){return e.proposal?.state===`conflict`?`stale-base`:`job-changed`}function nt(e){return Math.min(1e4,Math.round(1500*1.5**Math.max(0,e)))}var rt={set(e,t){let n=setTimeout(e,t);return()=>clearTimeout(n)}},it=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`,at=e=>!(e&&typeof e==`object`&&typeof e.status==`number`);function ot(e){let{source:t,artifactID:n,onState:r}=e,i=e.timers??rt,a=e.key??it,o={status:`loading`,actions:[],revisionNumbers:new Map,jobs:[],more:!1,loadingMore:!1,handlers:[],sending:!1,pending:{},notices:{},reviews:{}},s,c,l=0,u=!1,d,f=e=>{u||(o={...o,...e},r(o))},p=e=>o.jobs.find(t=>t.id===e),m=e=>f({jobs:o.jobs.some(t=>t.id===e.id)?o.jobs.map(t=>t.id===e.id?e:t):[e,...o.jobs]}),h=(e,t)=>{let{[e]:n,...r}=o.notices;f({notices:t?{...r,[e]:t}:r})},g=(e,t)=>{let{[e]:n,...r}=o.pending;f({pending:t?{...r,[e]:t}:r})};async function _(){let[e,r]=await Promise.all([t.artifact(n),t.revisionNumbers(n).catch(()=>o.revisionNumbers)]);f({artifact:e,actions:Be(e.metadata),revisionNumbers:r})}function v(){c?.(),c=void 0,u||!o.jobs.some(Ve)?l=0:c=i.set(()=>{c=void 0,x()},nt(l))}async function y(){f({status:`loading`});try{let[,e]=await Promise.all([_(),t.jobs(n)]);s=e.cursor,f({status:`ready`,jobs:e.items,more:!!e.cursor,error:void 0})}catch(e){f({status:`error`,error:K(e)});return}v(),await b()}async function b(){if(!u&&o.artifact)try{f({handlers:await t.handlers(o.artifact),handlersError:void 0})}catch(e){f({handlersError:K(e).text})}}async function x(){if(!(u||o.status!==`ready`)){try{let e=await t.jobs(n),r=new Map(o.jobs.map(e=>[e.id,e])),i=new Set(e.items.map(e=>e.id)),a=e.items.some(e=>r.get(e.id)?.revision!==e.revision),s=e.items.some(e=>!Ve(e)&&r.get(e.id)&&Ve(r.get(e.id)));f({jobs:[...e.items,...o.jobs.filter(e=>!i.has(e.id))]}),l=a?0:l+1,s&&await _().catch(()=>void 0)}catch{l++}v()}}async function S(){if(s&&!o.loadingMore){f({loadingMore:!0});try{let e=await t.jobs(n,s);s=e.cursor;let r=new Set(o.jobs.map(e=>e.id));f({jobs:[...o.jobs,...e.items.filter(e=>!r.has(e.id))],more:!!e.cursor,loadingMore:!1})}catch(e){f({loadingMore:!1,sendError:K(e)})}}}async function C(e){let r=JSON.stringify(e),i=d?.body===r?d.key:a();try{let r=await t.create(n,e,i);return d=void 0,m(r),f({sending:!1,sendError:void 0}),l=0,v(),r}catch(e){d=at(e)?{body:r,key:i}:void 0;let t=K(e);f({sending:!1,sendError:t}),t.kind===`conflict`&&await _().catch(()=>void 0);return}}async function w(e){return await T(e)!==void 0}async function T(e){if(o.sending||!o.artifact)return;if(e.baseRevisionID!==void 0&&e.baseRevisionID!==o.artifact.latestRevisionID){f({sendError:{kind:`conflict`,text:`The artifact changed since that view opened: the request was not sent.`}});return}let t=o.handlers.find(t=>t.key===e.handlerKey)?.handler,n=Ye({kind:e.kind,instruction:e.instruction,baseRevisionID:o.artifact.latestRevisionID,...t?{handler:t}:{},...e.action?{action:e.action}:{},actions:o.actions});if(!n.ok)f({sendError:{kind:`invalid`,text:n.problem}});else return f({sending:!0,sendError:void 0}),C(n.request)}async function E(e){try{let r=await t.job(n,e);return m(r),r}catch{return}}async function D(e){let r=p(e);if(!r||o.pending[e]||!Ve(r))return!1;g(e,`cancel`);try{return m(await t.cancel(n,e,r.revision)),h(e,void 0),!0}catch(t){let n=K(t),r=n.kind===`conflict`?await E(e):void 0;return h(e,{kind:n.kind===`conflict`?`conflict`:`error`,text:r&&!Ve(r)?`Not cancelled: it already ${r.state===`succeeded`?`finished`:r.state}.`:n.text}),!1}finally{g(e,void 0),v()}}async function O(e){let r=p(e);if(!r||o.pending[e]||r.kind!==`propose-edit`||r.state!==`succeeded`||r.proposal?.state!==`pending`)return!1;g(e,`apply`);try{let i=await t.apply(n,e,r.revision);m(i.job),await _().catch(()=>void 0);let a=i.revisionNumber??o.revisionNumbers.get(i.revisionID);return h(e,{kind:`info`,text:a===void 0?`Accepted as a new revision.`:`Accepted as revision ${a}.`}),!0}catch(t){let n=K(t);if(n.kind!==`conflict`)return h(e,{kind:`error`,text:n.text}),!1;let[r]=await Promise.all([E(e),_().catch(()=>void 0)]);if(r&&tt(r)===`stale-base`){let t=o.artifact?We(o.artifact.latestRevisionID,o.revisionNumbers):`a newer revision`;h(e,{kind:`conflict`,stale:!0,text:`Not accepted: the artifact changed since this edit was proposed (it is at ${t} now). Nothing was changed. Request the edit again on the latest revision.`})}else h(e,{kind:`conflict`,stale:!1,text:`This request changed since you read it. Review it again, then Accept.`});return!1}finally{g(e,void 0)}}async function k(e){let t=p(e);if(!t||o.pending[e]||o.sending||t.kind!==`propose-edit`)return!1;g(e,`rerequest`),f({sending:!0,sendError:void 0});try{await _();let n=!!await C({kind:`propose-edit`,baseRevisionID:o.artifact.latestRevisionID,instruction:t.instruction,handler:Je(t.handler),apply:`manual`});return n&&h(e,{kind:`info`,text:`Requested again on the latest revision.`}),n}catch(e){return f({sending:!1,sendError:K(e)}),!1}finally{g(e,void 0)}}async function A(e){let r=p(e);if(r?.proposal){f({reviews:{...o.reviews,[e]:{status:`loading`}}});try{let[i,a]=await Promise.all([t.proposal(n,e),t.revisionFiles(n,r.baseRevisionID)]),s=et(a,{files:i.files,keep:i.keep}),c=a.length<=1&&i.files.every(e=>e.path===void 0),l=i.files.map(e=>{let t=c?a[0]:a.find(t=>t.path===e.path),n=e.path===void 0?{}:{path:e.path};return e.omitted===`binary`?{...n,note:`Binary file: not compared.`}:e.omitted===`budget`||e.text===void 0?{...n,note:`Too large to show here.`}:t&&t.text===void 0?{...n,note:t.omitted===`binary`?`Replaces a binary file.`:`The current file is too large to compare.`}:t&&t.hash===e.hash?{...n,note:`Unchanged.`}:{...n,lines:$e(t?.text??``,e.text)}});f({reviews:{...o.reviews,[e]:{status:`ready`,changes:s,diffs:l,truncated:i.truncated}}})}catch(t){f({reviews:{...o.reviews,[e]:{status:`error`,text:K(t).text}}})}}}return{state:()=>o,load:y,refresh:x,more:S,request:w,requestJob:T,cancel:D,accept:O,rerequest:k,review:A,reloadHandlers:b,dispose(){c?.(),c=void 0,u=!0}}}var st={markdown:`Markdown`,code:`Code`,image:`Image`,table:`Table`,chart:`Chart`,dashboard:`Dashboard`,html:`HTML`,app:`App`,file:`File`};function ct(e){let t=[[]];for(let n of e)n.text.split(`
|
|
4
|
+
`).forEach((e,r)=>{r>0&&t.push([]),e&&t[t.length-1].push(n.kind?{text:e,kind:n.kind}:{text:e})});return t.length>1&&t[t.length-1].length===0&&t.pop(),t}var lt={ts:`TypeScript`,tsx:`TypeScript (TSX)`,js:`JavaScript`,jsx:`JavaScript (JSX)`,python:`Python`,go:`Go`,rust:`Rust`,bash:`Shell`,json:`JSON`,css:`CSS`,html:`HTML`,markdown:`Markdown`,yaml:`YAML`,toml:`TOML`,sql:`SQL`,java:`Java`,c:`C`,cpp:`C++`,ruby:`Ruby`,swift:`Swift`,kotlin:`Kotlin`,diff:`Diff`,csv:`CSV`};function ut(e,t){return{name:e?.path?.split(`/`).pop()||`Untitled`,language:t?lt[t]??t.toUpperCase():`Plain text`}}function dt(e,t){let n=[{label:`Type`,value:st[e.kind]??e.kind},{label:`Visibility`,value:e.visibility===`workspace`?`Workspace members`:`Private (only you)`}];e.workspaceID&&n.push({label:`Workspace`,value:t.workspaceName??e.workspaceID}),n.push({label:`Created by`,value:e.createdBySessionID?re({kind:`session`,sessionID:e.createdBySessionID}):`You`}),n.push({label:`Created`,value:t.when(e.createdAt)},{label:`Updated`,value:t.when(e.updatedAt)}),e.state===`archived`&&n.push({label:`State`,value:`Archived (read only)`}),e.tags?.length&&n.push({label:`Tags`,value:e.tags.join(`, `)});let r=Be(e.metadata);r.length&&n.push({label:`AI actions`,value:r.join(`, `)});for(let[t,r]of Object.entries(e.metadata??{}))t!==`ai-actions`&&n.push({label:t,value:r});return n}var ft={ask:`ask`,edit:`propose-edit`,action:`run-action`};function pt(e,t){let n=/^\/([a-z]+)(?:\s+([\s\S]*))?$/.exec(e),r=n?ft[n[1]]:void 0;if(!n||!r)return{text:e};let i=n[2]??``;if(r!==`run-action`)return{kind:r,text:i};let a=/^(\S+)\s*([\s\S]*)$/.exec(i);return!a||!t.includes(a[1])?{text:e}:{kind:r,action:a[1],text:a[2]}}var mt=`hub.artifactAiHandler.v1`;function ht(e,t){try{e?.setItem(mt,t)}catch{}}function gt(e,t){let n=null;try{n=e?.getItem(`hub.artifactAiHandler.v1`)??null}catch{return}return n?t.find(e=>e.key===n):void 0}function _t(e){return[...e].reverse()}var vt=`hub.artifactAiPanel.v1`,q={min:280,max:640,default:380,share:.6};function yt(e,t){if(!Number.isFinite(e))return q.default;let n=Math.max(q.min,Math.min(q.max,Math.floor(t*q.share)));return Math.min(n,Math.max(q.min,Math.round(e)))}function bt(e){try{let t=JSON.parse(e?.getItem(`hub.artifactAiPanel.v1`)??`null`);if(!t||typeof t!=`object`)return{};let{open:n,width:r}=t;return{...typeof n==`boolean`?{open:n}:{},...typeof r==`number`&&Number.isFinite(r)?{width:r}:{}}}catch{return{}}}function xt(e,t){try{e?.setItem(vt,JSON.stringify(t))}catch{}}var St=w(`<input type=search class=aai-picker-search aria-label="Search handlers"placeholder=Find… title="Find a handler by @name, title or session ID">`),Ct=w(`<optgroup label="Your sessions">`),wt=w(`<optgroup label="New session in a workspace repo">`),Tt=w(`<span><select aria-label="Handled by"title="Who handles this request"><option value>`),Et=w(`<option>`),Dt=w(`<button type=button class=aai-recent>Use `);function Ot(){try{return window.localStorage}catch{return}}function kt(e){let[t,r]=c(``),i=()=>e.value?void 0:gt(Ot(),e.handlers),a=_(()=>Ke(e.handlers,t(),e.value)),u=()=>a().filter(e=>e.kind===`session`),d=()=>a().filter(e=>e.kind===`launch`),f=()=>!!t().trim()&&!a().some(t=>t.key!==e.value);return(()=>{var a=Tt(),c=a.firstChild,p=c.firstChild;return m(a,n(s,{get when(){return e.handlers.length>1},get children(){var n=St();return n.$$input=e=>r(e.currentTarget.value),n.addEventListener(`focus`,()=>e.onPick?.()),o(()=>n.value=t()),n}}),c),c.addEventListener(`change`,t=>e.onChange(t.currentTarget.value)),c.addEventListener(`focus`,()=>e.onPick?.()),m(p,()=>f()?`No handler matches the search`:`Choose a session…`),m(c,n(s,{get when(){return u().length},get children(){var t=Ct();return m(t,n(l,{get each(){return u()},children:t=>(()=>{var n=Et();return m(n,()=>t.label),o(()=>n.selected=t.key===e.value),o(()=>n.value=t.key),n})()})),t}}),null),m(c,n(s,{get when(){return d().length},get children(){var t=wt();return m(t,n(l,{get each(){return d()},children:t=>(()=>{var n=Et();return m(n,()=>t.label),o(()=>n.selected=t.key===e.value),o(()=>n.value=t.key),n})()})),t}}),null),m(a,n(s,{get when(){return i()},children:t=>(()=>{var n=Dt();return n.firstChild,n.$$click=()=>e.onChange(t().key),m(n,()=>t().display,null),o(e=>{var r=`Last used on this device: ${t().label}`,i=`Use ${t().display} (last used)`;return r!==e.e&&h(n,`title`,e.e=r),i!==e.t&&h(n,`aria-label`,e.t=i),e},{e:void 0,t:void 0}),n})()}),null),o(()=>b(a,`aai-picker ${e.class??``}`)),o(()=>c.value=e.value),a})()}O([`input`,`click`]);var At=`/api/agent/artifacts`,jt=50,Mt=262144,Nt=e=>e.startsWith(`text/`)||e===`application/json`||e===`image/svg+xml`,J=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Pt=e=>new P(502,`The hub answered an unexpected ${e}`);function Ft(e){let t=J(e)&&J(e.artifact)?e.artifact:e;if(!J(t)||typeof t.id!=`string`||typeof t.latestRevisionID!=`string`||typeof t.revision!=`number`)throw Pt(`artifact`);return{id:t.id,title:typeof t.title==`string`?t.title:``,kind:typeof t.kind==`string`?t.kind:`file`,state:typeof t.state==`string`?t.state:`active`,latestRevisionID:t.latestRevisionID,revision:t.revision,...typeof t.workspaceID==`string`?{workspaceID:t.workspaceID}:{},...J(t.metadata)?{metadata:t.metadata}:{}}}var It=e=>{let t=Re(J(e)?e.job:void 0);if(!t)throw Pt(`job`);return t},Lt=async(e,t,n={})=>(await j(e,{method:`POST`,json:t,headers:n})).json();async function Rt(){try{let e=await F(`/api/agent/who`),t=J(e)&&Array.isArray(e.sessions)?e.sessions:[];return new Map(t.flatMap(e=>J(e)&&typeof e.sessionID==`string`&&typeof e.name==`string`&&e.name?[[e.sessionID,e.name]]:[]))}catch{return new Map}}function zt(e){let t=e=>`${At}/${I(e)}/jobs`,n=(e,n,r=``)=>`${t(e)}/${I(n)}${r}`;return{artifact:async e=>Ft(await F(`${At}/${I(e)}`)),async revisionNumbers(e){let t=await F(`${At}/${I(e)}/revisions?limit=200`),n=J(t)&&Array.isArray(t.items)?t.items:[];return new Map(n.flatMap(e=>J(e)&&typeof e.id==`string`&&typeof e.number==`number`?[[e.id,e.number]]:[]))},jobs:async(e,n)=>ze(await F(`${t(e)}?limit=${jt}${n?`&cursor=${I(n)}`:``}`)),job:async(e,t)=>It(await F(n(e,t))),create:async(e,n,r)=>It(await Lt(t(e),n,{"idempotency-key":r})),cancel:async(e,t,r)=>It(await Lt(n(e,t,`/cancel`),{expectedRevision:r})),async apply(e,t,r){let i=await Lt(n(e,t,`/apply`),{expectedRevision:r}),a=J(i)&&J(i.revision)?i.revision:{};if(typeof a.id!=`string`)throw Pt(`revision`);return{job:It(i),revisionID:a.id,...typeof a.number==`number`?{revisionNumber:a.number}:{}}},proposal:async(e,t)=>{let r=await F(n(e,t,`/proposal`));if(!J(r)||!Array.isArray(r.files))throw Pt(`proposal`);return{...r,keep:Array.isArray(r.keep)?r.keep:[],truncated:r.truncated===!0}},async revisionFiles(e,t){let n=await F(`${At}/${I(e)}/revisions/${I(t)}`),r=J(n)&&J(n.revision)&&Array.isArray(n.revision.blobs)?n.revision.blobs:[],i=Mt,a=[];for(let n of r){if(!J(n)||typeof n.hash!=`string`||typeof n.mediaType!=`string`||typeof n.bytes!=`number`)continue;let r={...typeof n.path==`string`?{path:n.path}:{},hash:n.hash,mediaType:n.mediaType,bytes:n.bytes};Nt(n.mediaType)?n.bytes>i?a.push({...r,omitted:`budget`}):(i-=n.bytes,a.push({...r,text:await(await j(`${At}/${I(e)}/revisions/${I(t)}/blobs/${I(n.hash)}`)).text()})):a.push({...r,omitted:`binary`})}return a},async handlers(t){let[n,r]=await Promise.all([(async()=>{if(!t.workspaceID)return[];try{let e=await F(`/api/agent/workspaces/${I(t.workspaceID)}/bindings`);return(J(e)&&Array.isArray(e.bindings)?e.bindings:[]).flatMap(e=>J(e)&&typeof e.id==`string`&&typeof e.machineID==`string`&&typeof e.repo==`string`?[{id:e.id,machineID:e.machineID,repo:e.repo,...typeof e.label==`string`?{label:e.label}:{}}]:[])}catch{return[]}})(),Rt()]);return Ge({sessions:e.sessions().map(e=>r.get(e.id)?{...e,name:r.get(e.id)}:e),bindings:n,machines:e.machines()})}}}var Bt=w(`<span>an unknown revision`),Vt=w(`<button type=button class=aai-link>`),Ht=w(`<span>`),Ut=w(`<strong class=aai-older>You are viewing an older revision.`),Wt=w(`<p class=aai-sub>Requests use the latest revision (<!>).`),Gt=w(`<p class=aai-note role=status>Loading AI requests…`),Kt=w(`<button type=button class="btn small aai-older-btn">Load older requests`),qt=w(`<ol class=aai-jobs aria-label="AI request history">`),Jt=w(`<p class=aai-note>Could not list handlers: `),Yt=w(`<p class=aai-note role=status>`),Xt=w(`<div class=aai-confirm role=group aria-label="Confirm action"><p>Run <strong></strong> on <!>, handled by <strong></strong>? It gets a read-only copy of this revision; its answer shows here and nothing is changed.</p><div class=aai-actions><button type=button class="btn primary small">Confirm and run</button><button type=button class="btn small">Back`),Zt=w(`<select class=aai-action aria-label="Declared action"><option value>Choose an action…`),Qt=w(`<form class=aai-composer aria-label="New AI request"><div class=aai-box><div class=aai-box-top><div class=aai-seg role=radiogroup aria-label="Request type"></div></div><textarea class=aai-input rows=2></textarea><div class=aai-box-foot><span class=aai-hint>Ctrl+Enter</span><button type=submit class=aai-send><span class=aai-send-text>`),$t=w(`<section class=aai><header class=aai-head><span class=aai-mark aria-hidden=true></span><div class=aai-head-text><h2 class=aai-title>AI requests</h2></div></header><div class=aai-scroll>`),en=w(`<button type=button class="btn small">Retry`),tn=w(`<p class=aai-note> `),nn=w(`<kbd>/action `),rn=w(`<div class=aai-empty><p><strong>Ask about this artifact, or describe an edit.</strong></p><p>The session you choose gets a read-only copy. Nothing changes until you accept an edit.</p><p class=aai-tips>Tip: start with <kbd>/ask</kbd>, <kbd>/edit</kbd>.`),an=w(`<p class="aai-note err"role=alert>`),on=w(`<label class=aai-seg-item><input type=radio>`),sn=w(`<option>`),cn=w(`<span class=aai-dot aria-hidden=true>`),ln=w(`<div class=aai-answer>`),un=w(`<p class="aai-note warn"role=status>The artifact changed since this edit was proposed: accepting it will be refused. Request it again on the latest revision.`),dn=w(`<button type=button class="btn primary small">`),fn=w(`<button type=button class="btn small">Request again on the latest revision`),pn=w(`<button type=button class="btn small">`),mn=w(`<button type=button class="btn small">Continue in side chat`),hn=w(`<li class=aai-job><div class=aai-q><div class=aai-q-meta><span class=aai-badge></span><span class=aai-meta> · </span></div><p class=aai-instruction></p></div><div class=aai-a><p class="aai-meta aai-prov">On <!> · handled by </p><p role=status aria-live=polite></p><div class=aai-actions>`),gn=w(`<div class=aai-proposal>`),_n=w(`<button type=button class="btn small">Review proposed edit (<!> file<!>)`),vn=w(`<p class=aai-note role=status>Loading the proposal…`),yn=w(`<p class="aai-note err">Could not load the proposal: `),bn=w(`<ul class=aai-files aria-label="Proposed files">`),xn=w(`<p class=aai-note>Some files are too large to show here.`),Sn=w(`<li><span class=aai-file-change></span> <code>`),Cn=w(`<p class=aai-meta><code>`),wn=w(`<table class=diff><tbody>`),Tn=w(`<div class=aai-diff>`),En=w(`<p class=aai-note>`),Dn=w(`<tr><td class=ln></td><td class=ln></td><td class=code-line><span class=sign>`),On=w(`<p>`),kn={ask:`Ask`,"propose-edit":`Edit`,"run-action":`Action`},An={ask:`Ask a question (answer only)`,"propose-edit":`Propose an edit you review before it applies`,"run-action":`Run one of the artifact's declared actions`},jn=e=>e.kind===`ask`?`Question`:e.kind===`propose-edit`?`Edit`:`Action: ${e.action??`?`}`;function Mn(){return zt({sessions:()=>{let e=new Map;for(let t of ge.machines??[])for(let n of t.processes)for(let t of n.sessions)e.set(t.id,n.harness||`opencode`);return be().filter(e=>!e.hidden&&!e.archived).map(t=>({id:t.id,title:t.title,machineName:t.machineName,online:t.machineOnline,...e.get(t.id)?{harness:e.get(t.id)}:{}}))},machines:()=>(ge.machines??[]).map(e=>({id:e.id,name:e.name,online:!!e.online}))})}function Nn(i){let[u,d]=c(),f=!i.controller,v=i.controller?.ai??ot({source:i.source??Mn(),artifactID:i.artifactID,onState:d});E(()=>f&&void v.load()),x(()=>f&&v.dispose());let y=()=>(f?u():i.controller.state())??v.state(),b=()=>y().revisionNumbers,S=()=>y().artifact?.latestRevisionID,[C,w]=c(`ask`),[D,O]=c(``),[k,A]=c(``),[j,M]=c(``),[N,P]=c(!1),F,I,ee,L=_(()=>y().handlers.find(e=>e.key===k())),R=()=>C()===`ask`?`Ask`:C()===`propose-edit`?`Propose edit`:j()?`Run ${j()}…`:`Run action…`,te=_(()=>_t(y().jobs));g(e(()=>[y().jobs.length,i.tailCount??0],()=>queueMicrotask(()=>ee&&(ee.scrollTop=ee.scrollHeight))));async function z(){let e=k(),t=await v.request({kind:C(),instruction:D(),...e?{handlerKey:e}:{},...C()===`run-action`&&j()?{action:j()}:{}});P(!1),t&&(O(``),ht(Ot(),e))}function ne(e){e?.preventDefault(),!y().sending&&(C()===`run-action`&&j()&&k()?(P(!0),queueMicrotask(()=>F?.focus())):z())}function B(e){let t=pt(e,y().actions);t.kind&&/\s$/.test(e)?(w(t.kind),t.action&&M(t.action),P(!1),O(t.text),I&&(I.value=t.text)):O(e)}async function re(e){if(await v.accept(e.id)){let e=S();e&&i.onRevised?.(e)}}let V=(e,t=``)=>n(s,{when:e,get fallback(){return(()=>{var e=Bt(),n=e.firstChild;return m(e,t,n),e})()},children:e=>n(s,{get when(){return i.onShowRevision},get fallback(){return(()=>{var n=Ht();return m(n,()=>t+We(e(),b())),n})()},get children(){var n=Vt();return n.$$click=()=>i.onShowRevision?.(e()),m(n,()=>t+We(e(),b())),n}})});return(()=>{var e=$t(),c=e.firstChild,u=c.firstChild,d=u.nextSibling,f=d.firstChild,g=c.nextSibling;m(u,n(T,{name:`spark`})),m(d,n(s,{get when(){return y().status===`ready`},get children(){var e=Wt(),t=e.firstChild.nextSibling;return t.nextSibling,m(e,()=>V(S()),t),m(e,n(s,{get when(){return r(()=>!!(i.revisionID&&S()))()&&i.revisionID!==S()},get children(){return[` `,Ut()]}}),null),e}}),null),m(c,()=>i.headerActions,null);var _=ee;return typeof _==`function`?t(_,g):ee=g,m(g,n(p,{get children(){return[n(a,{get when(){return y().status===`loading`},get children(){return Gt()}}),n(a,{get when(){return r(()=>y().status===`error`)()&&y().error},children:e=>(()=>{var t=tn(),r=t.firstChild;return m(t,()=>e().text,r),m(t,n(s,{get when(){return e().kind===`error`||e().kind===`offline`},get children(){var e=en();return e.$$click=()=>void v.load(),e}}),null),o(n=>{var r=e().kind===`error`,i=e().kind===`error`?`alert`:`status`;return r!==n.e&&t.classList.toggle(`err`,n.e=r),i!==n.t&&h(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),n(a,{get when(){return y().status===`ready`},get children(){return[n(s,{get when(){return y().more},get children(){var e=Kt();return e.$$click=()=>void v.more(),o(t=>{var n=y().loadingMore,r=y().loadingMore;return n!==t.e&&(e.disabled=t.e=n),r!==t.t&&h(e,`aria-busy`,t.t=r),t},{e:void 0,t:void 0}),e}}),n(s,{get when(){return y().jobs.length},get fallback(){return(()=>{var e=rn(),t=e.firstChild.nextSibling.nextSibling,r=t.firstChild.nextSibling.nextSibling.nextSibling.nextSibling;return m(t,n(s,{get when(){return y().actions.length},get children(){return[` `,`or `,(()=>{var e=nn();return e.firstChild,m(e,()=>y().actions[0],null),e})()]}}),r),e})()},get children(){var e=qt();return m(e,n(l,{get each(){return te()},children:e=>n(Pn,{job:e,get state(){return y()},revisionRef:V,onCancel:()=>void v.cancel(e.id),onReview:()=>void v.review(e.id),onAccept:()=>void re(e),onRerequest:()=>void v.rerequest(e.id),get onContinue(){return i.onContinueInSideChat}})})),e}})]}})]}}),null),m(g,()=>i.threadTail,null),m(e,n(s,{get when(){return y().status===`ready`},get children(){var e=Qt(),a=e.firstChild,c=a.firstChild,u=c.firstChild,d=c.nextSibling,f=d.nextSibling,p=f.firstChild,g=p.nextSibling,_=g.firstChild;e.addEventListener(`submit`,ne),m(e,n(s,{get when(){return y().sendError},children:e=>(()=>{var t=an();return m(t,()=>e().text),t})()}),a),m(e,n(s,{get when(){return y().handlersError},get children(){var e=Jt();return e.firstChild,m(e,()=>y().handlersError,null),e}}),a),m(e,n(s,{get when(){return r(()=>!!L())()&&!L().online},get children(){var e=Yt();return m(e,()=>L().kind===`session`?`That session is offline: the request is queued and delivered when it reconnects.`:`That machine is offline: the new session starts when it's back.`),e}}),a),m(e,n(s,{get when(){return N()},get children(){var e=Xt(),n=e.firstChild,r=n.firstChild.nextSibling,i=r.nextSibling.nextSibling,a=i.nextSibling.nextSibling,s=n.nextSibling.firstChild,c=s.nextSibling;e.$$keydown=e=>{e.key===`Escape`&&(e.preventDefault(),P(!1),I?.focus())},m(r,j),m(n,()=>We(S()??``,b()),i),m(a,()=>L()?.display),s.$$click=()=>void z();var l=F;return typeof l==`function`?t(l,s):F=s,c.$$click=()=>{P(!1),I?.focus()},o(()=>s.disabled=y().sending),e}}),a),m(u,n(l,{each:[`ask`,`propose-edit`,`run-action`],children:e=>{let t=()=>e===`run-action`&&y().actions.length===0;return(()=>{var n=on(),r=n.firstChild;return r.addEventListener(`change`,()=>{w(e),P(!1)}),r.value=e,m(n,()=>kn[e],null),o(a=>{var o=C()===e,s=!!t(),c=t()?`This artifact declares no AI actions`:An[e],l=`aai-mode-${i.artifactID}`,u=t();return o!==a.e&&n.classList.toggle(`on`,a.e=o),s!==a.t&&n.classList.toggle(`disabled`,a.t=s),c!==a.a&&h(n,`title`,a.a=c),l!==a.o&&h(r,`name`,a.o=l),u!==a.i&&(r.disabled=a.i=u),a},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),o(()=>r.checked=C()===e),n})()}})),m(c,n(s,{get when(){return C()===`run-action`},get children(){var e=Zt();return e.firstChild,e.addEventListener(`change`,e=>(M(e.currentTarget.value),P(!1))),m(e,n(l,{get each(){return y().actions},children:e=>(()=>{var t=sn();return t.value=e,m(t,e),t})()}),null),o(()=>e.value=j()),e}}),null),d.$$keydown=e=>{e.key===`Enter`&&(e.metaKey||e.ctrlKey)&&ne(e)},d.$$input=e=>B(e.currentTarget.value);var x=I;return typeof x==`function`?t(x,d):I=d,m(f,n(kt,{get handlers(){return y().handlers},get value(){return k()},onPick:()=>void v.reloadHandlers(),onChange:e=>(A(e),P(!1))}),p),m(g,n(T,{name:`send`}),_),m(_,(()=>{var e=r(()=>!!y().sending);return()=>e()?`Sending…`:R()})()),o(e=>{var t=C()===`ask`?`Question`:C()===`propose-edit`?`Describe the edit`:`Notes for the action (optional)`,n=C()===`ask`?`Ask about this artifact…`:C()===`propose-edit`?`Describe the edit, e.g. Add a rollback section`:`Notes for the action (optional)`,r=y().sending||N(),i=y().sending,a=y().sending?`Sending…`:R(),o=`${R()} (Ctrl+Enter)`;return t!==e.e&&h(d,`aria-label`,e.e=t),n!==e.t&&h(d,`placeholder`,e.t=n),r!==e.a&&(g.disabled=e.a=r),i!==e.o&&h(g,`aria-busy`,e.o=i),a!==e.i&&h(g,`aria-label`,e.i=a),o!==e.n&&h(g,`title`,e.n=o),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),o(()=>d.value=D()),e}}),null),o(t=>{var n=`aai-h-${i.artifactID}`,r=`aai-h-${i.artifactID}`;return n!==t.e&&h(e,`aria-labelledby`,t.e=n),r!==t.t&&h(f,`id`,t.t=r),t},{e:void 0,t:void 0}),e})()}function Pn(e){let t=()=>e.job,i=_(()=>qe(e.state.handlers)),c=e=>i().get(e)??be().find(t=>t.id===e)?.title,u=()=>He(t(),c),d=()=>e.state.pending[t().id],f=()=>e.state.notices[t().id],g=()=>e.state.reviews[t().id],v=()=>e.state.artifact?.latestRevisionID,y=()=>t().kind===`propose-edit`&&t().state===`succeeded`&&t().proposal?.state===`pending`,x=()=>y()&&v()!==void 0&&t().baseRevisionID!==v(),S=()=>t().kind===`propose-edit`&&(t().proposal?.state===`conflict`||x()||f()?.stale);return(()=>{var i=hn(),_=i.firstChild,v=_.firstChild,C=v.firstChild,w=C.nextSibling,T=w.firstChild,E=v.nextSibling,O=_.nextSibling,A=O.firstChild,j=A.firstChild.nextSibling;j.nextSibling;var M=A.nextSibling,N=M.nextSibling;return m(C,()=>jn(t())),m(w,()=>Ue(t().by),T),m(w,()=>D(t().createdAt),null),m(E,()=>t().instruction),m(A,()=>e.revisionRef(t().baseRevisionID),j),m(A,()=>G(t().handler,c),null),m(A,n(s,{get when(){return t().proposal?.appliedRevisionID},children:t=>[` · became `,r(()=>e.revisionRef(t()))]}),null),m(M,n(s,{get when(){return u().active},get children(){return cn()}}),null),m(M,()=>u().text,null),m(O,n(s,{get when(){return t().answer},get children(){var n=ln();return m(n,()=>t().answer),o(()=>h(n,`aria-label`,`Answer from ${G(t().handler,c)} on ${We(t().baseRevisionID,e.state.revisionNumbers)}`)),n}}),N),m(O,n(s,{get when(){return r(()=>!!(t().proposal&&t().proposal.state!==`applied`))()&&t().proposal},children:t=>(()=>{var i=gn();return m(i,n(s,{get when(){return g()},get fallback(){return(()=>{var n=_n(),i=n.firstChild.nextSibling,a=i.nextSibling.nextSibling;return a.nextSibling,k(n,`click`,e.onReview,!0),m(n,()=>t().files.length,i),m(n,()=>t().files.length===1?``:`s`,a),m(n,(()=>{var e=r(()=>!!t().keep?.length);return()=>e()?`, ${t().keep.length} kept`:``})(),a),n})()},children:e=>n(p,{get children(){return[n(a,{get when(){return e().status===`loading`},get children(){return vn()}}),n(a,{get when(){return r(()=>e().status===`error`)()&&e()},children:e=>(()=>{var t=yn();return t.firstChild,m(t,()=>e().text,null),t})()}),n(a,{get when(){return r(()=>e().status===`ready`)()&&e()},children:e=>{let t=()=>e();return[n(s,{get when(){return t().changes.some(e=>e.path!==void 0)},get children(){var e=bn();return m(e,n(l,{get each(){return t().changes},children:e=>(()=>{var t=Sn(),n=t.firstChild,r=n.nextSibling.nextSibling;return m(n,()=>e.change),m(r,()=>e.path),o(()=>b(t,`aai-file ${e.change}`)),t})()})),e}}),n(l,{get each(){return t().diffs},children:e=>(()=>{var t=Tn();return m(t,n(s,{get when(){return e.path},get children(){var t=Cn(),n=t.firstChild;return m(n,()=>e.path),t}}),null),m(t,n(s,{get when(){return e.lines},get fallback(){return(()=>{var t=En();return m(t,()=>e.note),t})()},get children(){var t=wn(),i=t.firstChild;return m(i,n(l,{get each(){return e.lines},children:e=>(()=>{var t=Dn(),n=t.firstChild,i=n.nextSibling,a=i.nextSibling,s=a.firstChild;return m(n,()=>e.oldNo??``),m(i,()=>e.newNo??``),m(s,(()=>{var t=r(()=>e.type===`add`);return()=>t()?`+`:e.type===`del`?`−`:` `})()),m(a,()=>e.text,null),o(()=>b(t,e.type)),t})()})),o(()=>h(t,`aria-label`,`Changes${e.path?` to ${e.path}`:``}`)),t}}),null),t})()}),n(s,{get when(){return t().truncated},get children(){return xn()}})]}})]}})})),i})()}),N),m(O,n(s,{get when(){return r(()=>!!x())()&&!f()},get children(){return un()}}),N),m(O,n(s,{get when(){return f()},children:e=>(()=>{var t=On();return m(t,()=>e().text),o(n=>{var r=`aai-note ${e().kind===`info`?`ok`:e().kind===`conflict`?`warn`:`err`}`,i=e().kind===`info`?`status`:`alert`;return r!==n.e&&b(t,n.e=r),i!==n.t&&h(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),N),m(N,n(s,{get when(){return y()},get children(){var t=dn();return k(t,`click`,e.onAccept,!0),m(t,()=>d()===`apply`?`Accepting…`:`Accept as new revision`),o(e=>{var n=!!d(),r=d()===`apply`;return n!==e.e&&(t.disabled=e.e=n),r!==e.t&&h(t,`aria-busy`,e.t=r),e},{e:void 0,t:void 0}),t}}),null),m(N,n(s,{get when(){return S()},get children(){var t=fn();return k(t,`click`,e.onRerequest,!0),o(()=>t.disabled=!!d()||e.state.sending),t}}),null),m(N,n(s,{get when(){return Ve(t())},get children(){var t=pn();return k(t,`click`,e.onCancel,!0),m(t,()=>d()===`cancel`?`Cancelling…`:`Cancel`),o(e=>{var n=!!d(),r=d()===`cancel`;return n!==e.e&&(t.disabled=e.e=n),r!==e.t&&h(t,`aria-busy`,e.t=r),e},{e:void 0,t:void 0}),t}}),null),m(N,n(s,{get when(){return r(()=>!!e.onContinue)()&&t().handler.sessionID},get children(){var n=mn();return n.$$click=()=>e.onContinue?.(t()),n}}),null),o(e=>{var n=t().id,r=t().state,a=`${jn(t())}: ${t().instruction}`,o=`aai-status ${u().tone}`;return n!==e.e&&h(i,`data-job`,e.e=n),r!==e.t&&h(i,`data-state`,e.t=r),a!==e.a&&h(i,`aria-label`,e.a=a),o!==e.o&&b(M,e.o=o),e},{e:void 0,t:void 0,a:void 0,o:void 0}),i})()}O([`click`,`keydown`,`input`]);var Y={rows:1e3,columns:50,cellChars:2e3};function Fn(e){let t=e.length>Y.columns,n=e.slice(0,Y.columns).map(e=>i(e)),r=[];function i(e){return typeof e==`string`&&e.length>Y.cellChars?(t=!0,e.slice(0,Y.cellChars)):e}return{add(e,a){return r.length>=Y.rows?(t=!0,!1):(r.push(n.map((t,n)=>i(n<e.length?e[n]:a))),!0)},done:()=>({columns:n,rows:r,truncated:t})}}function In(e){let t=[],n=[],r=``,i=!1,a=0,o=()=>{n.push(r),r=``,(n.length!==1||n[0]!==``)&&t.push(n),n=[]};for(;a<e.length&&t.length<=Y.rows+1;){let t=e[a];i?t===`"`?e[a+1]===`"`?(r+=`"`,a++):i=!1:r+=t:t===`"`&&r===``?i=!0:t===`,`?(n.push(r),r=``):t===`
|
|
5
|
+
`||t===`\r`?(t===`\r`&&e[a+1]===`
|
|
6
|
+
`&&a++,o()):r+=t,a++}(r!==``||n.length)&&o();let[s,...c]=t;if(!s)return{columns:[],rows:[],truncated:!1};let l=Fn(s);for(let e of c)if(!l.add(e,``))break;return l.done()}var Ln=e=>{if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null};function Rn(e){if(e==null)return null;if(typeof e==`string`||typeof e==`boolean`)return e;if(typeof e==`number`)return Number.isFinite(e)?e:null;try{return JSON.stringify(e)??null}catch{return null}}function zn(e){if(Ln(e)&&Array.isArray(e.columns)&&Array.isArray(e.rows)){let t=Fn(e.columns.map(String));for(let n of e.rows)if(!t.add(Array.isArray(n)?n.map(Rn):[],null))break;return t.done()}if(Array.isArray(e)){if(e.every(Ln)){let t=[],n=new Set;for(let r of e){for(let e of Object.keys(r))n.has(e)||(n.add(e),t.push(e));if(t.length>Y.columns)break}let r=Fn(t);for(let n of e)if(!r.add(t.slice(0,Y.columns).map(e=>Rn(Object.hasOwn(n,e)?n[e]:null)),null))break;return r.done()}if(e.length&&e.every(Array.isArray)){let[t,...n]=e,r=Fn(t.map(String));for(let e of n)if(!r.add(e.map(Rn),null))break;return r.done()}}}function Bn(e,t){if(t===``)return e;let n=e;for(let e of t.split(`.`))if(Array.isArray(n)){if(!/^\d{1,6}$/.test(e))return;let t=Number(e);if(t>=n.length)return;n=n[t]}else if(Ln(n)){if(e===`__proto__`||!Object.hasOwn(n,e))return;n=n[e]}else return;return n}function Vn(e){if(typeof e==`number`)return Number.isFinite(e)?e:void 0;if(typeof e!=`string`||e.trim()===``)return;let t=Number(e.trim());return Number.isFinite(t)?t:void 0}function Hn(e,t){switch(t){case`application/json`:try{return{ok:!0,format:`json`,value:JSON.parse(e)}}catch{return{ok:!1,error:`The JSON is not valid`}}case`text/csv`:return{ok:!0,format:`table`,value:In(e)};case`text/markdown`:case`text/plain`:return{ok:!0,format:`text`,value:e};default:return{ok:!1,error:`${t} isn't data`}}}function Un(e){if(e.ok){if(e.format===`table`)return e.value;if(e.format===`json`)return zn(e.value)}}var X={widgets:24,sources:8,refreshMinSeconds:30,refreshMaxSeconds:86400,defaultRefreshSeconds:300,staleFactor:2,concurrent:4,sourceBytes:524288,titleChars:120,markdownChars:2e4,chartSeries:4,chartPoints:500,tableRows:1e3,defaultTableRows:50},Wn=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Gn=(e,t,n)=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=t&&e<=n,Kn=e=>typeof e==`string`&&e.length>=1&&e.length<=120,qn=/^(?!\/)(?!.*(?:^|\/)\.\.?(?:\/|$))[A-Za-z0-9._/-]{1,200}$/,Jn=/^[A-Za-z0-9_$ -]{1,64}$/,Yn=/^[A-Za-z0-9_-]{1,40}$/,Xn={dashboard:[`v`,`title`,`refreshSeconds`,`widgets`],binding:[`artifact`,`path`,`select`],metric:[`id`,`type`,`title`,`width`,`source`,`unit`,`precision`],table:[`id`,`type`,`title`,`width`,`source`,`columns`,`limit`],chart:[`id`,`type`,`title`,`width`,`source`,`chart`,`x`,`y`],markdown:[`id`,`type`,`title`,`width`,`text`,`source`],chartSpec:[`v`,`title`,`chart`,`x`,`y`,`data`]};function Zn(e,t,n){let r=Object.keys(e).find(e=>!t.includes(e));return r===void 0?void 0:`${n} has an unknown field ${JSON.stringify(r.slice(0,40))}`}var Qn=e=>`${e.artifact}|${e.path??``}`;function $n(e,t,n,r){if(!Wn(e))return void r.push(`${t}.source must be an object`);let i=Zn(e,Xn.binding,`${t}.source`);if(i)return void r.push(i);if(!A(`artifact`,e.artifact))return void r.push(`${t}.source.artifact must be an artifact ID`);if(n!==void 0&&e.artifact===n)return void r.push(`${t}: a dashboard can't bind to itself`);if(e.path!==void 0&&(typeof e.path!=`string`||!qn.test(e.path)))return void r.push(`${t}.source.path must be a relative file path`);if(e.select!==void 0&&(typeof e.select!=`string`||e.select.length>200||!e.select.split(`.`).every(e=>Jn.test(e))))r.push(`${t}.source.select must be a dot path like "0.count"`);else return{artifact:e.artifact,...e.path===void 0?{}:{path:e.path},...e.select===void 0?{}:{select:e.select}}}function er(e,t,n,r){let i=`widget ${t+1}`;if(!Wn(e))return void r.push(`${i} must be an object`);let a=e.type;if(a!==`metric`&&a!==`table`&&a!==`chart`&&a!==`markdown`)return void r.push(`${i}: type must be metric, table, chart or markdown`);let o=Zn(e,Xn[a],i);if(o)return void r.push(o);let s=r.length;(typeof e.id!=`string`||!Yn.test(e.id))&&r.push(`${i}: id must be 1–40 letters, digits, - or _`),e.title!==void 0&&(typeof e.title!=`string`||e.title.length>X.titleChars)&&r.push(`${i}: title must be at most ${X.titleChars} characters`),e.width!==void 0&&e.width!==1&&e.width!==2&&e.width!==3&&r.push(`${i}: width must be 1, 2 or 3`);let c={id:e.id,...e.title===void 0?{}:{title:e.title},width:e.width??1};if(a===`markdown`){e.text!==void 0&&e.source!==void 0?r.push(`${i}: a markdown widget has either text or a source`):e.text===void 0&&e.source===void 0&&r.push(`${i}: a markdown widget needs text or a source`),e.text!==void 0&&(typeof e.text!=`string`||e.text.length>X.markdownChars)&&r.push(`${i}: text must be at most ${X.markdownChars} characters`);let t=e.source===void 0?void 0:$n(e.source,i,n,r);return r.length>s?void 0:{...c,type:a,...e.text===void 0?{}:{text:e.text},...t?{source:t}:{}}}let l=$n(e.source,i,n,r);if(a===`metric`)return e.unit!==void 0&&(typeof e.unit!=`string`||e.unit.length>16)&&r.push(`${i}: unit must be at most 16 characters`),e.precision!==void 0&&!Gn(e.precision,0,6)&&r.push(`${i}: precision must be 0–6`),r.length>s||!l?void 0:{...c,type:a,source:l,...e.unit===void 0?{}:{unit:e.unit},...e.precision===void 0?{}:{precision:e.precision}};if(a===`table`)return e.columns!==void 0&&(!Array.isArray(e.columns)||e.columns.length>50||!e.columns.every(Kn))&&r.push(`${i}: columns must be at most 50 column names`),e.limit!==void 0&&!Gn(e.limit,1,X.tableRows)&&r.push(`${i}: limit must be 1–${X.tableRows}`),r.length>s||!l?void 0:{...c,type:a,source:l,...e.columns===void 0?{}:{columns:e.columns},limit:e.limit??X.defaultTableRows};let u=tr(e,i,r);if(!(r.length>s||!l||!u))return{...c,type:a,source:l,...u}}function tr(e,t,n){let r=n.length;return e.chart!==`line`&&e.chart!==`bar`&&n.push(`${t}: chart must be line or bar`),Kn(e.x)||n.push(`${t}: x must be a column name`),(!Array.isArray(e.y)||e.y.length<1||e.y.length>X.chartSeries||!e.y.every(Kn))&&n.push(`${t}: y must be 1–${X.chartSeries} column names`),n.length>r?void 0:{chart:e.chart,x:e.x,y:e.y}}function nr(e,t={}){if(!Wn(e))return{ok:!1,problems:[`A dashboard must be a JSON object`]};if(e.v!==1)return{ok:!1,problems:[`v must be 1 (this console reads dashboard schema v1)`]};let n=Zn(e,Xn.dashboard,`The dashboard`);if(n)return{ok:!1,problems:[n]};let r=[];if(e.title!==void 0&&(typeof e.title!=`string`||e.title.length>X.titleChars)&&r.push(`title must be at most ${X.titleChars} characters`),e.refreshSeconds!==void 0&&!Gn(e.refreshSeconds,X.refreshMinSeconds,X.refreshMaxSeconds)&&r.push(`refreshSeconds must be ${X.refreshMinSeconds}–${X.refreshMaxSeconds}`),!Array.isArray(e.widgets))return{ok:!1,problems:[...r,`widgets must be a list`]};if(e.widgets.length>X.widgets)return{ok:!1,problems:[`A dashboard has at most ${X.widgets} widgets`,...r]};let i=e.widgets.flatMap((e,n)=>er(e,n,t.selfID,r)??[]);return new Set(i.map(e=>e.id)).size!==i.length&&r.unshift(`widget ids must be unique`),new Set(i.flatMap(e=>e.source?[Qn(e.source)]:[])).size>X.sources&&r.unshift(`A dashboard reads at most ${X.sources} data sources (artifact + file)`),r.length?{ok:!1,problems:r}:{ok:!0,spec:{v:1,...e.title===void 0?{}:{title:e.title},refreshSeconds:e.refreshSeconds??X.defaultRefreshSeconds,widgets:i}}}function rr(e,t,n){let r=e.columns.indexOf(t);if(r<0)return{ok:!1,error:`No column "${t}"`};let i=n.map(t=>e.columns.indexOf(t)),a=n.find((e,t)=>i[t]<0);if(a!==void 0)return{ok:!1,error:`No column "${a}"`};let o=e.rows.slice(0,X.chartPoints);return{ok:!0,chart:{labels:o.map(e=>String(e[r]??``)),series:n.map((e,t)=>({name:e,values:o.map(e=>Vn(e[i[t]])??null)})),truncated:e.truncated||e.rows.length>o.length}}}function ir(e){if(!Wn(e))return{ok:!1,error:`A chart must be a JSON object`};if(e.v!==1)return{ok:!1,error:`v must be 1`};let t=Zn(e,Xn.chartSpec,`The chart`);if(t)return{ok:!1,error:t};let n=[],r=tr(e,`The chart`,n);if(!r)return{ok:!1,error:n[0]};if(e.title!==void 0&&(typeof e.title!=`string`||e.title.length>X.titleChars))return{ok:!1,error:`title is too long`};let i=zn(e.data);if(!i)return{ok:!1,error:`data must be a table (a list of objects, a list of lists or {columns, rows})`};let a=rr(i,r.x,r.y);return a.ok?{ok:!0,kind:r.chart,...e.title===void 0?{}:{title:e.title},chart:a.chart}:a}function ar(e){let t=e&&typeof e==`object`?e:{},n=typeof t.status==`number`?t.status:0;return t.name===`NetworkError`||n===503||t.code===`offline`?{kind:`offline`,text:`Can't reach the hub; showing the last data loaded.`}:n===404||t.code===`not_found`?{kind:`not_found`,text:`The source artifact doesn't exist or you can't see it.`}:n===401||n===403?{kind:`forbidden`,text:`This device isn't allowed to read the source artifact.`}:n===422||t.code===`unsupported`?{kind:`unsupported`,text:`Artifacts aren't supported on this hub.`}:t.name===`TooLargeError`||t.code===`too_large`?{kind:`too_large`,text:`The source file is larger than ${X.sourceBytes/1024} KiB.`}:{kind:`error`,text:`Could not read the source: ${typeof t.message==`string`&&t.message?t.message:`HTTP ${n}`}`}}function or(e){let t=new Map;for(let n of e.widgets)n.source&&!t.has(Qn(n.source))&&t.set(Qn(n.source),{artifact:n.source.artifact,...n.source.path?{path:n.source.path}:{}});return[...t.values()]}function sr(e,t,n){let r=or(e),i=new Map(r.map(e=>[Qn(e),{status:`loading`}])),a,o=!1,s=(e,t)=>{o||(i.set(e,t),n.onChange())},c=(e,t)=>{let r=i.get(e),a=n.now();s(e,r?.status===`ready`?{...r,error:t,failedAt:a}:{status:`error`,error:t,failedAt:a})};async function l(e){let r=Qn(e);try{let{data:i,revisionNumber:a}=await t.read(e);i.ok?s(r,{status:`ready`,data:i,revisionNumber:a,loadedAt:n.now()}):c(r,{kind:`invalid`,text:i.error})}catch(e){c(r,ar(e))}}function u(){if(o)return Promise.resolve();if(a)return a;let e=[...r];return a=Promise.all(Array.from({length:Math.min(X.concurrent,e.length)},async()=>{for(let t=e.shift();t;t=e.shift())await l(t)})).then(()=>{a=void 0}),a}return{refresh:u,bindings:()=>r,state:e=>i.get(e),get refreshing(){return a!==void 0},dispose(){o=!0}}}function cr(e){if(!e.ok||e.format===`text`)return;if(e.format===`json`)return e.value;let{columns:t,rows:n}=e.value;return n.map(e=>Object.fromEntries(t.map((t,n)=>[t,e[n]??null])))}function lr(e,t){return t===void 0?Un(e):zn(Bn(cr(e),t))}function ur(e,t){let n=Vn(e);if(n!==void 0)return t===void 0?String(Math.round(n*1e6)/1e6):n.toFixed(t);if(typeof e==`string`||typeof e==`boolean`)return String(e)}function dr(e,t){switch(e.type){case`markdown`:return t.ok&&t.format===`text`?{kind:`markdown`,text:t.value.slice(0,X.markdownChars)}:`This widget needs a Markdown or text source.`;case`metric`:{if(!t.ok||t.format===`text`)return`This widget needs JSON or CSV data.`;let n=ur(Bn(cr(t),e.source.select??``),e.precision);return n===void 0?`No single value at "${e.source.select??``}".`:{kind:`metric`,text:n,...e.unit?{unit:e.unit}:{}}}case`table`:{let n=lr(t,e.source.select);if(!n)return`This widget needs table data (CSV or a JSON list).`;let r=e.columns?e.columns.map(e=>n.columns.indexOf(e)).filter(e=>e>=0):n.columns.map((e,t)=>t);if(!r.length)return`None of the widget's columns are in the data.`;let i=n.rows.slice(0,e.limit).map(e=>r.map(t=>e[t]??null));return{kind:`table`,table:{columns:r.map(e=>n.columns[e]),rows:i,truncated:n.truncated||n.rows.length>i.length}}}case`chart`:{let n=lr(t,e.source.select);if(!n)return`This widget needs table data (CSV or a JSON list).`;let r=rr(n,e.x,e.y);return r.ok?{kind:`chart`,chart:r.chart,type:e.chart}:r.error}}}function fr(e,t,n,r){if(e.type===`markdown`&&e.text!==void 0)return{status:`ready`,stale:!1,content:{kind:`markdown`,text:e.text}};if(!t||t.status===`loading`)return{status:`loading`};if(t.status===`error`)return{status:`error`,text:t.error.text};let i=dr(e,t.data);return typeof i==`string`?{status:`error`,text:i}:{status:`ready`,stale:t.error!==void 0||n-t.loadedAt>X.staleFactor*r,updatedAt:t.loadedAt,revisionNumber:t.revisionNumber,...t.error?{error:t.error.text}:{},content:i}}var pr=w(`<a class="av-download btn small"rel=noopener> <span class=faint>(<!>)`),mr=w(`<div class=cv><div class=cv-head><span class=cv-name></span><span class=cv-lang></span><span class=cv-count> line</span></div><div class=cv-scroll tabindex=0 role=region><pre class=cv-code><code>`),hr=w(`<span class=cv-line><span class=cv-ln aria-hidden=true></span><span class=cv-tx>`),gr=w(`<span>`),_r=w(`<pre class=av-text>`),vr=w(`<div class=av-image-wrap><img class=av-image decoding=async referrerpolicy=no-referrer>`),yr=w(`<p class=av-note>Only part of the data is shown (limits: rows, columns or cell length).`),br=w(`<div class=av-table-wrap><table class=av-table><thead><tr></tr></thead><tbody>`),xr=w(`<th scope=col>`),Sr=w(`<tr>`),Cr=w(`<td>`),wr=w(`<figure class=av-chart><svg viewBox="0 0 600 240"role=img preserveAspectRatio=none><line class=av-axis></line><text class=av-tick text-anchor=end></text><text class=av-tick text-anchor=end></text></svg><figcaption class=av-legend><button type=button class="btn small">`),Tr=w(`<svg><text class=av-tick y=232 text-anchor=middle></svg>`,!1,!0,!1),Er=w(`<svg><rect class=av-bar></svg>`,!1,!0,!1),Dr=w(`<svg><polyline class=av-line fill=none stroke-width=2></svg>`,!1,!0,!1),Or=w(`<span><i></i> `),kr=w(`<div class=av-isolated role=note><p>This <!> artifact opens in the isolated viewer. It isn't shown inside the console, so its scripts and styles can't reach your hub session.`);function Ar(e){return e.path??`${e.mediaType} file`}var jr=e=>e<1024?`${e} B`:`${Math.ceil(e/1024)} KiB`;function Mr(e){return(()=>{var t=pr(),n=t.firstChild,r=n.nextSibling,i=r.firstChild.nextSibling;return i.nextSibling,m(t,()=>e.label??`Download ${Ar(e.file)}`,n),m(r,()=>jr(e.file.bytes),i),o(n=>{var r=ae(e.artifactID,e.revisionID,e.file.hash),i=e.file.path?.split(`/`).pop()??``;return r!==n.e&&h(t,`href`,n.e=r),i!==n.t&&h(t,`download`,n.t=i),n},{e:void 0,t:void 0}),t})()}function Nr(e){let[t,r]=c(!1),[a,l]=c(!1),u;x(()=>clearTimeout(u));let f=_(()=>ct(se(e.lang,e.text))),p=()=>ut(e.file,e.lang),g=async()=>{await oe(e.text)&&(l(!0),clearTimeout(u),u=setTimeout(()=>l(!1),1500))};return(()=>{var c=mr(),l=c.firstChild,u=l.firstChild,_=u.nextSibling,v=_.nextSibling,y=v.firstChild,x=l.nextSibling,S=x.firstChild,w=S.firstChild;return m(l,n(T,{name:`code`}),u),m(u,()=>p().name),m(_,()=>p().language),m(v,()=>f().length,y),m(v,()=>f().length===1?``:`s`,null),m(l,n(C,{icon:`wrap`,get label(){return t()?`Scroll long lines`:`Wrap long lines`},get"aria-pressed"(){return t()},onClick:()=>r(!t())}),null),m(l,n(C,{get icon(){return a()?`check`:`copy`},get label(){return a()?`Copied`:`Copy code`},onClick:()=>void g()}),null),m(w,n(d,{get each(){return f()},children:(e,t)=>(()=>{var r=hr(),i=r.firstChild,a=i.nextSibling;return h(i,`data-n`,t+1),m(a,n(d,{get each(){return e()},children:e=>n(s,{get when(){return e().kind},get fallback(){return e().text},get children(){return(()=>{var t=gr();return m(t,()=>e().text),o(()=>b(t,`tok-${e().kind}`)),t})()}})})),r})()})),o(n=>{var r=!!t(),a=String(String(f().length).length),o=e.file?.path,s=`${p().name} source`,l=e.lang||void 0;return r!==n.e&&c.classList.toggle(`wrap`,n.e=r),a!==n.t&&i(c,`--cv-digits`,n.t=a),o!==n.a&&h(u,`title`,n.a=o),s!==n.o&&h(x,`aria-label`,n.o=s),l!==n.i&&h(S,`data-lang`,n.i=l),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c})()}function Pr(e){return(()=>{var t=_r();return m(t,()=>e.text),t})()}function Fr(e){let t=_(t=>(t&&URL.revokeObjectURL(t),URL.createObjectURL(new Blob([e.bytes],{type:e.mediaType}))));return x(()=>URL.revokeObjectURL(t())),(()=>{var n=vr(),r=n.firstChild;return o(n=>{var i=t(),a=e.alt;return i!==n.e&&h(r,`src`,n.e=i),a!==n.t&&h(r,`alt`,n.t=a),n},{e:void 0,t:void 0}),n})()}var Ir=e=>e==null?``:String(e);function Lr(e){return(()=>{var t=br(),r=t.firstChild,i=r.firstChild,a=i.firstChild,c=i.nextSibling;return m(a,n(l,{get each(){return e.table.columns},children:e=>(()=>{var t=xr();return m(t,e),t})()})),m(c,n(d,{get each(){return e.table.rows},children:e=>(()=>{var t=Sr();return m(t,n(d,{get each(){return e()},children:e=>(()=>{var t=Cr();return m(t,()=>Ir(e())),o(()=>b(t,typeof e()==`number`?`num`:void 0)),t})()})),t})()})),m(t,n(s,{get when(){return e.table.truncated},get children(){return yr()}}),null),o(()=>h(r,`aria-label`,e.label)),t})()}var Rr=600,zr=240,Z={l:44,r:8,t:10,b:28},Br=[`var(--accent)`,`#c26b1a`,`#6b5bd6`,`#2f8f4e`];function Vr(e){let t=_(()=>e.chart.series.flatMap(e=>e.values.filter(e=>e!==null))),r=_(()=>Math.min(0,...t())),a=_(()=>{let e=Math.max(0,...t());return e===r()?r()+1:e}),u=e=>Z.t+(zr-Z.t-Z.b)*(1-(e-r())/(a()-r())),f=()=>Math.max(1,e.chart.labels.length),p=()=>(Rr-Z.l-Z.r)/f(),g=e=>Z.l+p()*e+p()/2,v=()=>Math.max(1,Math.ceil(f()/10)),y=()=>`${e.type===`bar`?`Bar`:`Line`} chart${e.title?` of ${e.title}`:``}: ${e.chart.series.map(e=>e.name).join(`, `)} by ${e.chart.labels.length} points`,[b,x]=c(!1),S=()=>({columns:[``,...e.chart.series.map(e=>e.name)],rows:e.chart.labels.map((t,n)=>[t,...e.chart.series.map(e=>e.values[n]??null)]),truncated:e.chart.truncated});return(()=>{var t=wr(),c=t.firstChild,f=c.firstChild,_=f.nextSibling,C=_.nextSibling,w=c.nextSibling,T=w.firstChild;return m(_,()=>Hr(a())),m(C,()=>Hr(r())),m(c,n(d,{get each(){return e.chart.labels},children:(e,t)=>n(s,{get when(){return t%v()===0},get children(){var n=Tr();return m(n,()=>e().slice(0,12)),o(()=>h(n,`x`,g(t))),n}})}),null),m(c,n(d,{get each(){return e.chart.series},children:(t,r)=>e.type===`bar`?n(d,{get each(){return t().values},children:(t,i)=>{let a=()=>p()*.8/e.chart.series.length;return n(s,{get when(){return t()!==null},get children(){var e=Er();return o(n=>{var o=Z.l+p()*i+p()*.1+a()*r,s=Math.min(u(t()),u(0)),c=Math.max(1,a()-1),l=Math.max(1,Math.abs(u(0)-u(t()))),d=Br[r%Br.length];return o!==n.e&&h(e,`x`,n.e=o),s!==n.t&&h(e,`y`,n.t=s),c!==n.a&&h(e,`width`,n.a=c),l!==n.o&&h(e,`height`,n.o=l),d!==n.i&&h(e,`fill`,n.i=d),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),e}})}}):(()=>{var e=Dr();return o(n=>{var i=Br[r%Br.length],a=t().values.flatMap((e,t)=>e===null?[]:[`${g(t)},${u(e)}`]).join(` `);return i!==n.e&&h(e,`stroke`,n.e=i),a!==n.t&&h(e,`points`,n.t=a),n},{e:void 0,t:void 0}),e})()}),null),m(w,n(l,{get each(){return e.chart.series},children:(e,t)=>(()=>{var n=Or(),r=n.firstChild;return r.nextSibling,m(n,()=>e.name,null),o(e=>i(r,`background`,Br[t()%Br.length])),n})()}),T),T.$$click=()=>x(!b()),m(T,()=>b()?`Hide data`:`Show data`),m(t,n(s,{get when(){return b()},get children(){return n(Lr,{get table(){return S()}})}}),null),o(e=>{var t=y(),n=Z.l,i=Rr-Z.r,o=u(0),s=u(0),l=Z.l-6,d=u(a())+4,p=Z.l-6,m=u(r())+4,g=b();return t!==e.e&&h(c,`aria-label`,e.e=t),n!==e.t&&h(f,`x1`,e.t=n),i!==e.a&&h(f,`x2`,e.a=i),o!==e.o&&h(f,`y1`,e.o=o),s!==e.i&&h(f,`y2`,e.i=s),l!==e.n&&h(_,`x`,e.n=l),d!==e.s&&h(_,`y`,e.s=d),p!==e.h&&h(C,`x`,e.h=p),m!==e.r&&h(C,`y`,e.r=m),g!==e.d&&h(T,`aria-expanded`,e.d=g),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0}),t})()}function Hr(e){let t=Math.abs(e);return t>=1e6?`${Math.round(e/1e5)/10}M`:t>=1e3?`${Math.round(e/100)/10}k`:String(Math.round(e*100)/100)}function Ur(e){return(()=>{var t=kr(),n=t.firstChild,r=n.firstChild.nextSibling;return r.nextSibling,m(n,()=>e.kind===`app`?`app`:`HTML`,r),m(t,()=>e.children,null),t})()}O([`click`]);var Wr=w(`<div class="av-note err"role=alert><p>This dashboard can't be shown:</p><ul>`),Gr=w(`<li>`),Kr=w(`<h2 class=dash-title>`),qr=w(`<section class=dash><div class=dash-bar><span class=faint>Refreshes every <!> while open · <!> of at most <!> sources</span><button type=button class="btn small dash-refresh">Refresh</button></div><div class=dash-grid>`),Jr=w(`<article><header class=dash-head><h3>`),Yr=w(`<span class=dash-stale>Stale · updated `),Xr=w(`<span class="dash-rev faint">rev `),Zr=w(`<p class=faint role=status>Loading…`),Qr=w(`<p class=dash-error>`),$r=w(`<small> `),ei=w(`<p class=dash-metric><span>`);function ti(e){let t=_(()=>{try{return nr(JSON.parse(e.text),{selfID:e.artifactID})}catch{return{ok:!1,problems:[`The dashboard is not valid JSON.`]}}});return n(s,{get when(){return r(()=>!!t().ok)()&&t()},keyed:!0,get fallback(){return(()=>{var e=Wr(),r=e.firstChild.nextSibling;return m(r,n(l,{get each(){return t().problems.slice(0,8)},children:e=>(()=>{var t=Gr();return m(t,e),t})()})),e})()},children:t=>n(ni,{get spec(){return t.spec},get source(){return e.source}})})}function ni(e){let[t,i]=c(0),[a,u]=c(Date.now()),[d,f]=c(!1),p=sr(e.spec,e.source,{now:Date.now,onChange:()=>i(e=>e+1)}),g=e.spec.refreshSeconds*1e3,_=async()=>{f(!0),await p.refresh(),u(Date.now()),f(!1)},v=()=>typeof document>`u`||document.visibilityState===`visible`;E(()=>{_();let e=setInterval(()=>v()&&void _(),g),t=setInterval(()=>u(Date.now()),15e3),n=()=>v()&&void _();document.addEventListener(`visibilitychange`,n),x(()=>{clearInterval(e),clearInterval(t),document.removeEventListener(`visibilitychange`,n),p.dispose()})});let y=e=>(t(),fr(e,e.source?p.state(Qn(e.source)):void 0,a(),g));return(()=>{var t=qr(),i=t.firstChild,c=i.firstChild,u=c.firstChild.nextSibling,f=u.nextSibling.nextSibling,g=f.nextSibling.nextSibling;g.nextSibling;var v=c.nextSibling,x=i.nextSibling;return m(i,n(s,{get when(){return e.spec.title},get children(){var t=Kr();return m(t,()=>e.spec.title),t}}),c),m(c,(()=>{var t=r(()=>e.spec.refreshSeconds<120);return()=>t()?`${e.spec.refreshSeconds} s`:`${Math.round(e.spec.refreshSeconds/60)} min`})(),u),m(c,()=>p.bindings().length,f),m(c,()=>X.sources,g),v.$$click=()=>void _(),m(x,n(l,{get each(){return e.spec.widgets},children:e=>(()=>{var t=Jr(),r=t.firstChild,i=r.firstChild;return m(i,()=>e.title??``),m(r,n(ri,{get view(){return y(e)},get now(){return a()}}),null),m(t,n(ii,{get view(){return y(e)},get title(){return e.title}}),null),o(n=>{var r=`dash-widget span-${e.width}`,i=e.id,a=e.title??e.id;return r!==n.e&&b(t,n.e=r),i!==n.t&&h(t,`data-widget`,n.t=i),a!==n.a&&h(t,`aria-label`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()})),o(n=>{var r=e.spec.title??`Dashboard`,i=d(),a=d();return r!==n.e&&h(t,`aria-label`,n.e=r),i!==n.t&&h(v,`aria-busy`,n.t=i),a!==n.a&&(v.disabled=n.a=a),n},{e:void 0,t:void 0,a:void 0}),t})()}function ri(e){let t=()=>e.view.status===`ready`?e.view:void 0;return n(s,{get when(){return r(()=>t()?.updatedAt!==void 0)()&&t()},children:t=>n(s,{get when(){return t().stale},get fallback(){return(()=>{var e=Xr();return e.firstChild,m(e,()=>t().revisionNumber,null),e})()},get children(){var n=Yr();return n.firstChild,m(n,()=>D(t().updatedAt,e.now),null),o(()=>h(n,`title`,t().error??`The data is older than two refresh intervals.`)),n}})})}function ii(e){return n(p,{get children(){return[n(a,{get when(){return e.view.status===`loading`},get children(){return Zr()}}),n(a,{get when(){return r(()=>e.view.status===`error`)()&&e.view},children:e=>(()=>{var t=Qr();return m(t,()=>e().text),t})()}),n(a,{get when(){return r(()=>e.view.status===`ready`)()&&e.view},children:t=>{let i=()=>t().content;return n(p,{get children(){return[n(a,{get when(){return r(()=>i().kind===`metric`)()&&i()},children:e=>(()=>{var t=ei(),r=t.firstChild;return m(r,()=>e().text),m(t,n(s,{get when(){return e().unit},get children(){var t=$r();return t.firstChild,m(t,()=>e().unit,null),t}}),null),t})()}),n(a,{get when(){return r(()=>i().kind===`table`)()&&i()},children:t=>n(Lr,{get table(){return t().table},get label(){return e.title}})}),n(a,{get when(){return r(()=>i().kind===`chart`)()&&i()},children:t=>n(Vr,{get chart(){return t().chart},get type(){return t().type},get title(){return e.title}})}),n(a,{get when(){return r(()=>i().kind===`markdown`)()&&i()},children:e=>n(ve,{get text(){return e().text}})})]}})}})]}})}O([`click`]);var ai=()=>new P(404,`No such artifact`),oi={async artifact(e){let t=B(await F(z(e)));if(!t)throw ai();return t},async revisions(e,t){return pe(await F(ye(e,t)))},async revision(e,t){let n=de(await F(ie(e,t)));if(!n)throw ai();return n},async bytes(e,t,n,r){return ne(await j(ae(e,t,n.hash)),r)},async revise(e,t,n){let r=await j(`${z(e)}/revisions`,{method:`POST`,json:t,headers:{"idempotency-key":n}}),i=de(await r.json());if(!i)throw new P(500,`The hub answered without a revision`);return i},async archive(e,t,n){let r=await j(`${z(e)}/${n?`archive`:`unarchive`}`,{method:`POST`,json:{expectedRevision:t}}),i=B(await r.json());if(!i)throw new P(500,`The hub answered without an artifact`);return i}},si=[`application/json`,`text/csv`,`text/markdown`,`text/plain`];function ci(e,t){return t===void 0?(e.entry===void 0?void 0:e.blobs.find(t=>t.path===e.entry))??e.blobs.find(e=>si.includes(e.mediaType))??e.blobs[0]:e.blobs.find(e=>e.path===t)}function li(e=oi){return{async read(t){let n=await e.artifact(t.artifact),r=await e.revision(n.id,n.latestRevisionID),i=ci(r,t.path);if(!i)return{data:{ok:!1,error:t.path?`The source has no file "${t.path}"`:`The source has no files`},revisionNumber:r.number};if(!si.includes(i.mediaType))return{data:{ok:!1,error:`A ${i.mediaType} file isn't data`},revisionNumber:r.number};let a=await e.bytes(n.id,r.id,i,X.sourceBytes);return{data:Hn(new TextDecoder().decode(a),i.mediaType),revisionNumber:r.number}}}}var ui=w(`<p class=faint>`),di=w(`<p class=faint>Nothing else in this workspace yet.`),fi=w(`<button type=button class="btn small">Load more`),pi=w(`<aside class=av-outputs><h2>More in </h2><ul></ul><a class=av-outputs-all>All in the library`),mi=w(`<li><a></a> <button type=button class="btn small">Pane</button><span class=faint> · `);function hi(e){let[t,i]=c({status:`loading`}),a=Ce(e.source??Ee,i),u={workspace:e.workspaceID,type:``};E(()=>a.load(u));let d=()=>{let n=t();return n.status===`ready`?n.items.filter(t=>t.id!==e.excludeID):[]};return(()=>{var i=pi(),c=i.firstChild;c.firstChild;var u=c.nextSibling,f=u.nextSibling;return m(c,()=>e.workspaceName,null),m(i,n(s,{get when(){return t().status===`error`},get children(){var e=ui();return m(e,()=>t().error.text),e}}),u),m(i,n(s,{get when(){return r(()=>t().status===`ready`)()&&!d().length},get children(){return di()}}),u),m(u,n(l,{get each(){return d()},children:e=>(()=>{var t=mi(),n=t.firstChild,r=n.nextSibling.nextSibling,i=r.nextSibling,a=i.firstChild;return m(n,()=>e.title||`Untitled`),r.$$click=()=>R(e.id),m(i,()=>st[e.kind],a),m(i,()=>D(e.updatedAt),null),o(t=>{var i=Te(e.id),a=`Open ${e.title||`Untitled`} in a pane`;return i!==t.e&&h(n,`href`,t.e=i),a!==t.t&&h(r,`aria-label`,t.t=a),t},{e:void 0,t:void 0}),t})()})),m(i,n(s,{get when(){return r(()=>t().status===`ready`)()&&t().more},get children(){var e=fi();return e.$$click=()=>a.more(),e}}),f),o(t=>{var n=`More in ${e.workspaceName}`,r=`/artifacts?workspace=${encodeURIComponent(e.workspaceID)}`;return n!==t.e&&h(i,`aria-label`,t.e=n),r!==t.t&&h(f,`href`,t.t=r),t},{e:void 0,t:void 0}),i})()}O([`click`]);var gi=w(`<header class=av-bar><span class=av-bar-gap>`),_i=w(`<div><div class=av-empty><p class=muted role=status>Loading…`),vi=w(`<button type=button class="btn small">Retry`),yi=w(`<div><div class=av-empty><p class=av-note role=alert> `),bi=w(`<span class=av-chip>Archived`),xi=w(`<a class="icon-btn av-wide"rel=noopener aria-label=Download>`),Si=w(`<div class=av-old role=status><span>You're viewing revision <!>.</span><button type=button class="btn small">Back to latest`),Ci=w(`<span class=av-draft>You have an unsaved draft of this artifact<!>.`),wi=w(`<div class=av-status>`),Ti=w(`<p class=av-desc>`),Ei=w(`<div><header class=av-bar><span class=av-kind role=img></span><span class=av-bar-gap></span><div class=av-tools></div></header><div class=av-split><div class=av-stage><div class="av-card av-body">`),Di=w(`<span>`),Oi=w(`<div class=av-conflict role=alert><p>Someone changed this artifact since you opened it<!>. Your draft is kept; the latest revision is shown below. Save over it, or discard your draft.</p><button type=button class="btn small primary">Save over latest</button> <button type=button class="btn small">Discard draft`),ki=w(`<section class=av-latest aria-label="Latest revision"><p class=av-latest-head>Latest revision`),Ai=w(`<form class=av-edit><div class=av-edit-head><span class=av-edit-name>Editing </span><span class="faint av-wide">New revision on revision </span><span class=av-bar-gap></span><button type=button class="btn small"title="Close the editor; the draft stays on this device">Close</button><button type=button class="btn small">Discard</button><button type=submit class="btn small primary">Save</button></div><textarea>`),ji=w(`<p class="av-note err av-edit-err"role=alert>`),Mi=w(`<div class=av-files><h4>Files in revision </h4><ul>`),Ni=w(`<section class=av-details role=dialog aria-label=Details><div class=av-details-head><h3>Details</h3><button type=button class=icon-btn aria-label="Close details"title="Close details"></button></div><dl class=av-facts>`),Pi=w(`<dt>`),Fi=w(`<dd>`),Ii=w(`<li>`),Li=w(`<p class="av-note av-pad">This revision has no files.`),Ri=w(`<div class=av-download-card><p class=av-note>`),zi=w(`<p class="muted av-pad"role=status>Loading…`),Bi=w(`<article class=av-prose>`),Vi=w(`<div class=av-pad>`),Hi=w(`<p class="muted av-pad">Loading…`),Ui=w(`<p class="av-note av-pad"role=alert>`),Wi=w(`<p class="av-note err av-pad"role=alert>`),Gi=w(`<p class="av-note err av-pad">This file isn't a table (CSV or a JSON list).`),Ki=w(`<p class="av-note err av-pad">This chart can't be shown: `),qi=new Set([`markdown`,`text`,`code`,`table`,`chart`,`dashboard`]),Ji={markdown:`doc`,code:`code`,image:`image`,table:`table`,chart:`chart`,dashboard:`grid`,html:`app`,app:`app`,file:`file`};function Yi(){try{return window.localStorage}catch{return}}function Xi(){return`console-${[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function Zi(e){let t=e.source??oi,i=li(t),[l,u]=c(),[d,f]=c(),[g,S]=c([]),[w,D]=c(),[O,k]=c(),[A,j]=c(),[M,N]=c({status:`loading`}),[P,F]=c(),[I,ee]=c(new Map),[L,R]=c(),[z,ne]=c(0),[B,re]=c(!1),[ie,se]=c(!1),[le,de]=c(!1),pe;x(()=>clearTimeout(pe));let me=0,H=_(()=>{let e=l(),t=A();return e&&t?V(e.kind,t):void 0}),he=()=>g()[0]?.number,ge=()=>A()!==void 0&&A().id===l()?.latestRevisionID,_e=()=>re(!!Yi()?.getItem(xe(e.id))),ve=()=>{let e=M();return e.status===`ready`?e.text:void 0};async function ye(n,r){let i=++me;N({status:`loading`});try{let a=await t.revision(n.id,r);if(i!==me)return;j(a),e.onRevision?.(a);let o=V(n.kind,a);if(!o.file||!qi.has(o.mode)&&o.mode!==`image`)return void N({status:`none`});let s=await t.bytes(n.id,a.id,o.file,o.mode===`image`?ce.imageBytes:ce.textBytes);if(i!==me)return;N({status:`ready`,bytes:s,...o.mode===`image`?{}:{text:new TextDecoder().decode(s)}})}catch(e){i===me&&N({status:`error`,error:fe(e)})}}async function be(e,n){try{let r=await t.revisions(e,n);S(e=>{let t=n?[...e,...r.items]:r.items,i=new Set;return t.filter(e=>!i.has(e.id)&&i.add(e.id))}),D(r.cursor)}catch{}}async function Ce(){try{let n=await t.artifact(e.id);u(n),f(void 0),e.onArtifact?.(n),await Promise.all([be(n.id),ye(n,O()??n.latestRevisionID)])}catch(e){f(fe(e))}}E(()=>{_e(),we().then(e=>ee(new Map(e.map(e=>[e.id,e.title])))),Ce(),e.control?.({view:e=>Te(e===l()?.latestRevisionID?void 0:e),reload:()=>{k(void 0),Ce()}})});let Te=e=>{k(e),F(void 0);let t=l();t&&ye(t,e??t.latestRevisionID)};function Ee(){let e=l(),n=A(),r=H(),i=M();e&&n&&r?.file&&i.status===`ready`&&i.text!==void 0&&(F(void 0),R(ue({artifactID:e.id,baseRevisionID:n.id,file:r.file,original:i.text},{revise:t.revise,storage:Yi(),newKey:Xi,onChange:()=>ne(e=>e+1)})))}let De=()=>(z(),L()?.state());async function Oe(e=!1){let t=L();if(!t)return;if(e){let e=l()?.latestRevisionID;e&&t.rebase(e)}let n=await t.save();n?(R(void 0),k(void 0),await Ce(),F({text:`Saved revision ${n.number}.`})):t.state().status===`conflict`&&(k(void 0),await Ce()),_e()}let ke=e=>{e&&L()?.discard(),R(void 0),_e()};async function Ae(){let e=ve();e!==void 0&&await oe(e)&&(de(!0),clearTimeout(pe),pe=setTimeout(()=>de(!1),1500))}function je(){let e=l(),t=A(),n=H()?.file;if(!e||!t||!n)return;let r=document.createElement(`a`);r.href=ae(e.id,t.id,n.hash),r.download=n.path?.split(`/`).pop()??``,r.rel=`noopener`,document.body.append(r),r.click(),r.remove()}async function Me(n){let r=l();if(r&&t.archive)try{let i=await t.archive(r.id,r.revision,n);u(i),e.onArtifact?.(i),F({text:n?`Archived: read only until you unarchive it.`:`Unarchived.`})}catch(e){F({text:fe(e).text,error:!0}),Ce()}}let U=e=>e.workspaceID?I().get(e.workspaceID)??Se(e.workspaceID,I()):`Private`,W=()=>{let e=l(),t=A(),n=M();return!!e&&!!t&&ge()&&!L()&&n.status===`ready`&&n.text!==void 0&&te(e,t)},Ne=()=>{let e=l(),n=[{label:`Details`,run:()=>se(!0)}];return ve()!==void 0&&n.push({label:`Copy contents`,run:()=>void Ae()}),H()?.file&&n.push({label:`Download ${Ar(H().file)}`,run:je}),e&&t.archive&&n.push(`sep`,e.state===`archived`?{label:`Unarchive`,run:()=>void Me(!1)}:{label:`Archive`,hint:`read only, reversible`,run:()=>void Me(!0)}),n},Pe=()=>(()=>{var t=gi(),r=t.firstChild;return m(t,()=>e.lead,r),m(t,n(v,{get component(){return e.variant===`pane`?`h2`:`h1`},class:`av-title`,children:`Artifact`}),r),m(t,()=>e.trailing,null),t})();return n(p,{get children(){return[n(a,{get when(){return d()},children:t=>(()=>{var r=yi(),i=r.firstChild,a=i.firstChild,c=a.firstChild;return m(r,Pe,i),m(a,()=>t().text,c),m(a,n(s,{get when(){return t().kind===`offline`||t().kind===`error`},get children(){var e=vi();return e.$$click=()=>void Ce(),e}}),null),o(()=>b(r,`av ${e.variant??`page`}`)),r})()}),n(a,{get when(){return!l()},get children(){var t=_i(),n=t.firstChild;return m(t,Pe,n),o(()=>b(t,`av ${e.variant??`page`}`)),t}}),n(a,{get when(){return l()},children:t=>(()=>{var a=Ei(),c=a.firstChild,l=c.firstChild,u=l.nextSibling,d=u.nextSibling,f=c.nextSibling,p=f.firstChild,_=p.firstChild;return m(c,()=>e.lead,l),m(l,n(T,{get name(){return Ji[t().kind]}})),m(c,n(v,{get component(){return e.variant===`pane`?`h2`:`h1`},class:`av-title`,get title(){return t().title||`Untitled`},get children(){return t().title||`Untitled`}}),u),m(c,n(Qi,{get revs(){return g()},get current(){return A()},get latestID(){return t().latestRevisionID},get more(){return w()!==void 0},onMore:()=>void be(t().id,w()),onView:e=>Te(e===t().latestRevisionID?void 0:e)}),u),m(c,n(s,{get when(){return t().state===`archived`},get children(){return bi()}}),u),m(d,n(s,{get when(){return ve()!==void 0},get children(){return n(C,{class:`av-wide`,get icon(){return le()?`check`:`copy`},get label(){return le()?`Copied`:`Copy`},onClick:()=>void Ae()})}}),null),m(d,n(s,{get when(){return r(()=>!!A())()&&H()?.file},get children(){var e=xi();return m(e,n(T,{name:`download`})),o(n=>{var r=ae(t().id,A().id,H().file.hash),i=H().file.path?.split(`/`).pop()??``,a=`Download ${Ar(H().file)}`;return r!==n.e&&h(e,`href`,n.e=r),i!==n.t&&h(e,`download`,n.t=i),a!==n.a&&h(e,`title`,n.a=a),n},{e:void 0,t:void 0,a:void 0}),e}}),null),m(d,n(s,{get when(){return W()},get children(){return n(C,{icon:`edit`,label:`Edit`,onClick:Ee})}}),null),m(d,()=>e.actions,null),m(d,n(y,{label:`Artifact actions`,items:Ne}),null),m(d,()=>e.trailing,null),m(a,n(s,{get when(){return ie()},get children(){return n($i,{get artifact(){return t()},get revision(){return A()},get plan(){return H()},get where(){return U(t())},onClose:()=>se(!1)})}}),f),m(p,n(s,{get when(){return r(()=>!!A())()&&!ge()},get children(){var e=Si(),t=e.firstChild,i=t.firstChild.nextSibling;i.nextSibling;var a=t.nextSibling;return m(e,n(T,{name:`info`}),t),m(t,()=>A().number,i),m(t,(()=>{var e=r(()=>!!he());return()=>e()?` of ${Math.max(he(),A().number)}`:``})(),i),a.$$click=()=>Te(void 0),e}}),_),m(p,n(s,{get when(){return r(()=>!!B())()&&!L()||P()},get children(){var e=wi();return m(e,n(s,{get when(){return r(()=>!!B())()&&!L()},get children(){var e=Ci(),t=e.firstChild.nextSibling;return t.nextSibling,m(e,()=>W()?`; Edit to continue it`:``,t),e}}),null),m(e,n(s,{get when(){return P()},children:e=>(()=>{var t=Di();return m(t,()=>e().text),o(n=>{var r=e().error?`av-note err`:`av-saved`,i=e().error?`alert`:`status`;return r!==n.e&&b(t,n.e=r),i!==n.t&&h(t,`role`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),e}}),_),m(p,n(s,{get when(){return t().description},get children(){var e=Ti();return m(e,()=>t().description),e}}),_),m(_,n(s,{get when(){return r(()=>!!L())()&&De()},get fallback(){return n(ea,{get artifact(){return t()},get revision(){return A()},get plan(){return H()},get content(){return M()},get isolated(){return e.isolated},dash:i})},children:a=>(()=>{var c=Ai(),l=c.firstChild,u=l.firstChild;u.firstChild;var d=u.nextSibling;d.firstChild;var f=d.nextSibling.nextSibling,p=f.nextSibling,_=p.nextSibling,v=l.nextSibling;return c.addEventListener(`submit`,e=>{e.preventDefault(),Oe()}),m(l,n(T,{name:`edit`}),u),m(u,(()=>{var e=r(()=>!!H()?.file);return()=>e()?Ar(H().file):t().title})(),null),m(d,()=>g().find(e=>e.id===a().baseRevisionID)?.number??`?`,null),f.$$click=()=>ke(!1),p.$$click=()=>ke(!0),m(c,n(s,{get when(){return a().status===`conflict`},get children(){var e=Oi(),t=e.firstChild,n=t.firstChild.nextSibling;n.nextSibling;var r=t.nextSibling,i=r.nextSibling.nextSibling;return m(t,()=>a().restored?` (your draft was saved on an older revision)`:``,n),r.$$click=()=>void Oe(!0),i.$$click=()=>ke(!0),e}}),v),m(c,n(s,{get when(){return r(()=>a().status===`error`)()&&a().error},children:e=>(()=>{var t=ji();return m(t,()=>e().text),t})()}),v),v.$$keydown=e=>{e.key===`s`&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),Oe())},v.$$input=e=>L()?.setDraft(e.currentTarget.value),h(v,`spellcheck`,!1),m(c,n(s,{get when(){return a().status===`conflict`},get children(){var r=ki();return r.firstChild,m(r,n(ea,{get artifact(){return t()},get revision(){return A()},get plan(){return H()},get content(){return M()},get isolated(){return e.isolated},dash:i}),null),r}}),null),o(e=>{var n=a().status===`saving`||a().status===`conflict`,r=a().status===`saving`,i=`Edit ${t().title||`artifact`}`;return n!==e.e&&(_.disabled=e.e=n),r!==e.t&&h(_,`aria-busy`,e.t=r),i!==e.a&&h(v,`aria-label`,e.a=i),e},{e:void 0,t:void 0,a:void 0}),o(()=>v.value=a().draft),c})()})),m(f,()=>e.side,null),o(n=>{var r=`av ${e.variant??`page`}`,i=t().kind,o=st[t().kind],s=st[t().kind],c=L()?`edit`:H()?.mode;return r!==n.e&&b(a,n.e=r),i!==n.t&&h(a,`data-kind`,n.t=i),o!==n.a&&h(l,`aria-label`,n.a=o),s!==n.o&&h(l,`title`,n.o=s),c!==n.i&&h(_,`data-mode`,n.i=c),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),a})()})]}})}function Qi(e){let t=()=>[{section:`Versions`},...e.revs.map(t=>({label:`Revision ${t.number}${t.id===e.latestID?` (latest)`:``}`,hint:`${re(t.author)} · ${D(t.createdAt)}`,checked:t.id===e.current?.id,run:()=>e.onView(t.id)})),...e.more?[`sep`,{label:`Older revisions…`,run:()=>e.onMore()}]:[]];return n(s,{get when(){return e.current},children:i=>n(y,{get label(){return`Version: revision ${i().number}${i().id===e.latestID?` (latest)`:``}. Show versions`},get class(){return`av-ver${i().id===e.latestID?``:` old`}`},align:`left`,get text(){return[`v`,r(()=>i().number),n(T,{name:`down`})]},items:t})})}function $i(e){let i,a,o=t=>{t.key===`Escape`&&!S(i)&&(t.preventDefault(),e.onClose())},c=t=>{!i.contains(t.target)&&!t.target.closest?.(`.menu`)&&e.onClose()};E(()=>{document.addEventListener(`keydown`,o),setTimeout(()=>document.addEventListener(`mousedown`,c),0),a.focus()}),x(()=>{document.removeEventListener(`keydown`,o),document.removeEventListener(`mousedown`,c)});let u=()=>dt(e.artifact,{...e.artifact.workspaceID?{workspaceName:e.where}:{},when:D});return(()=>{var o=Ni(),c=o.firstChild,d=c.firstChild.nextSibling,f=c.nextSibling,p=i;typeof p==`function`?t(p,o):i=o,d.$$click=()=>e.onClose();var h=a;return typeof h==`function`?t(h,d):a=d,m(d,n(T,{name:`close`})),m(o,n(s,{get when(){return e.artifact.description},get children(){var t=Ti();return m(t,()=>e.artifact.description),t}}),f),m(f,n(l,{get each(){return u()},children:e=>[(()=>{var t=Pi();return m(t,()=>e.label),t})(),(()=>{var t=Fi();return m(t,()=>e.value),t})()]})),m(o,n(s,{get when(){return r(()=>!!e.revision)()&&e.plan?.files.length},get children(){var t=Mi(),r=t.firstChild;r.firstChild;var i=r.nextSibling;return m(r,()=>e.revision.number,null),m(i,n(l,{get each(){return e.plan.files},children:t=>(()=>{var r=Ii();return m(r,n(Mr,{get artifactID(){return e.artifact.id},get revisionID(){return e.revision.id},file:t,get label(){return Ar(t)}})),r})()})),t}}),null),m(o,n(s,{get when(){return e.artifact.workspaceID},children:t=>n(hi,{get workspaceID(){return t()},get workspaceName(){return e.where},get excludeID(){return e.artifact.id}})}),null),o})()}function ea(e){let t=()=>e.content.status===`ready`?e.content.text??``:``,i=_(()=>e.plan?.mode===`table`&&e.plan.file?Un(Hn(t(),e.plan.file.mediaType)):void 0),o=_(()=>{if(e.plan?.mode===`chart`)try{return ir(JSON.parse(t()))}catch{return{ok:!1,error:`The chart is not valid JSON.`}}});return n(p,{get children(){return[n(a,{get when(){return!e.plan||!e.revision},get children(){return n(s,{get when(){return r(()=>e.content.status===`error`)()&&e.content},get fallback(){return Hi()},children:e=>(()=>{var t=Ui();return m(t,()=>e().error.text),t})()})}}),n(a,{get when(){return e.plan.mode===`isolated`},get children(){return n(s,{get when(){return e.isolated},get fallback(){return n(Ur,{get kind(){return e.artifact.kind}})},children:t=>n(s,{get when(){return e.revision?.id},keyed:!0,children:n=>t()(e.artifact,e.revision)})})}}),n(a,{get when(){return e.plan.mode===`empty`},get children(){return Li()}}),n(a,{get when(){return e.plan.mode===`download`},get children(){var t=Ri(),r=t.firstChild;return m(t,n(T,{name:`file`}),r),m(r,()=>e.plan.note),m(t,n(Mr,{get artifactID(){return e.artifact.id},get revisionID(){return e.revision.id},get file(){return e.plan.file}}),null),t}}),n(a,{get when(){return e.content.status===`loading`},get children(){return zi()}}),n(a,{get when(){return r(()=>e.content.status===`error`)()&&e.content},children:e=>(()=>{var t=Wi();return m(t,()=>e().error.text),t})()}),n(a,{get when(){return e.plan.mode===`markdown`},get children(){var e=Bi();return m(e,n(ve,{get text(){return t()}})),e}}),n(a,{get when(){return e.plan.mode===`text`},get children(){var e=Bi();return m(e,n(Pr,{get text(){return t()}})),e}}),n(a,{get when(){return e.plan.mode===`code`},get children(){return n(Nr,f({get lang(){return e.plan.lang??``},get text(){return t()}},()=>e.plan.file?{file:e.plan.file}:{}))}}),n(a,{get when(){return r(()=>e.plan.mode===`image`&&e.content.status===`ready`)()&&e.content},children:t=>n(Fr,{get bytes(){return t().bytes},get mediaType(){return e.plan.file.mediaType},get alt(){return e.artifact.title}})}),n(a,{get when(){return e.plan.mode===`table`},get children(){return n(s,{get when(){return i()},get fallback(){return Gi()},children:t=>n(Lr,{get table(){return t()},get label(){return e.artifact.title}})})}}),n(a,{get when(){return r(()=>e.plan.mode===`chart`)()&&o()},children:t=>n(s,{get when(){return r(()=>!!t().ok)()&&t()},get fallback(){return(()=>{var e=Ki();return e.firstChild,m(e,()=>t().error,null),e})()},children:t=>(()=>{var r=Vi();return m(r,n(Vr,{get chart(){return t().chart},get type(){return t().kind},get title(){return t().title??e.artifact.title}})),r})()})}),n(a,{get when(){return e.plan.mode===`dashboard`},get children(){var r=Vi();return m(r,n(ti,{get artifactID(){return e.artifact.id},get text(){return t()},get source(){return e.dash}})),r}})]}})}O([`click`,`input`,`keydown`]);var ta=w(`<section class=cmp-consent aria-label="Requests from this artifact">`),na=w(`<p role=status><span><span class=cmp-quote>“<!>”</span> `),ra=w(`<p class="cmp-note err"role=status>`),ia=w(`<select class=aai-action aria-label="Declared action"><option value>Choose an action…`),aa=w(`<p class=cmp-note role=status>`),oa=w(`<p class="cmp-note err"role=alert>`),sa=w(`<form class=cmp-card role=group aria-label="AI request from the artifact"><p class=cmp-card-head><span class=cmp-card-icon aria-hidden=true></span><span><strong></strong> <span class=faint>(<!>)</span> asks for AI help</span></p><blockquote class=cmp-instruction></blockquote><p class=cmp-note>Written by the artifact, not by you. Nothing is sent unless you send it. The handler you choose gets this text and a read-only copy of <!>; the artifact gets back only the answer, or that an edit awaits your review. Edits still need your Accept under AI requests.</p><div class=cmp-row><div class=aai-seg role=radiogroup aria-label="Request type"></div></div><div class=cmp-actions><button type=button class="btn small">Decline</button><button type=submit class="btn primary small">`),ca=w(`<label class=aai-seg-item><input type=radio>`),la=w(`<option>`),ua={ask:`Ask`,"propose-edit":`Edit`,"run-action":`Action`},da={ask:`Ask (answer only)`,"propose-edit":`Propose an edit (you review it)`,"run-action":`Run a declared action`},fa={sending:`Sending…`,running:`Sent: the answer goes back to the artifact when the handler finishes (see AI requests).`,answered:`Answered: the artifact received the answer.`,proposed:`Proposed: review and Accept it under AI requests; the artifact only knows an edit awaits review.`,declined:`Declined: the artifact was told no.`,revoked:`Withdrawn: this view of the artifact ended.`,conflict:`Not sent: the artifact changed since this view opened. Reload the artifact to ask again.`,failed:`Not completed: see AI requests for why.`,cancelled:`Cancelled.`};function pa(e){let t=e.handler;return t.session?be().find(e=>e.id===t.session)?.machineOnline??!1:t.launch?.machine?(ge.machines??[]).some(e=>e.id===t.launch.machine&&e.online):e.online}function ma(e){let t=()=>e.feed.requests().filter(e=>e.status===`awaiting`),i=()=>e.feed.requests().filter(e=>e.status!==`awaiting`).slice(-3);return n(s,{get when(){return t().length||i().length},get children(){var a=ta();return m(a,n(l,{get each(){return i()},children:e=>(()=>{var t=na(),i=t.firstChild,a=i.firstChild,s=a.firstChild.nextSibling;return s.nextSibling,a.nextSibling,m(t,n(T,{name:`app`}),i),m(a,(()=>{var t=r(()=>e.instruction.length>80);return()=>t()?`${e.instruction.slice(0,80)}…`:e.instruction})(),s),m(i,()=>fa[e.status],null),o(n=>{var r=`cmp-done ${e.status}`,i=e.status;return r!==n.e&&b(t,n.e=r),i!==n.t&&h(t,`data-status`,n.t=i),n},{e:void 0,t:void 0}),t})()}),null),m(a,n(l,{get each(){return t()},children:t=>n(ha,{request:t,get title(){return e.feed.title},get revName(){return e.feed.revName()},get state(){return e.state},onPick:()=>e.feed.reloadHandlers(),onApprove:n=>e.feed.approve(t.id,n),onDecline:()=>e.feed.decline(t.id)})}),null),a}})}function ha(e){let[t,i]=c(`ask`),[a,u]=c(``),[d,f]=c(``),[p,g]=c(!1),[v,y]=c(),b=()=>e.state()?.handlers??[],x=()=>e.state()?.actions??[],S=_(()=>b().find(e=>e.key===a())),C=()=>!!a()&&(t()!==`run-action`||!!d()),w=`cmp-kind-${e.request.id}`;async function E(n){if(n.preventDefault(),!C()||p())return;g(!0),y(void 0);let r=a(),i=await e.onApprove({kind:t(),handlerKey:r,...t()===`run-action`?{action:d()}:{}});g(!1),i?ht(Ot(),r):y(e.state()?.sendError?.text??`Not sent.`)}return(()=>{var c=sa(),g=c.firstChild,_=g.firstChild,y=_.nextSibling.firstChild,D=y.nextSibling.nextSibling,O=D.firstChild.nextSibling;O.nextSibling;var k=g.nextSibling,A=k.nextSibling,j=A.firstChild.nextSibling;j.nextSibling;var M=A.nextSibling,N=M.firstChild,P=M.nextSibling,F=P.firstChild,I=F.nextSibling;return c.addEventListener(`submit`,E),m(_,n(T,{name:`app`})),m(y,()=>e.title),m(D,()=>e.revName,O),m(k,()=>e.request.instruction),m(A,()=>e.revName,j),m(c,n(s,{get when(){return e.state()?.status===`error`},get children(){var t=ra();return m(t,()=>e.state()?.error?.text??`AI requests aren't available.`),t}}),M),m(N,n(l,{each:[`ask`,`propose-edit`,`run-action`],children:e=>{let n=()=>e===`run-action`&&!x().length;return(()=>{var r=ca(),a=r.firstChild;return a.addEventListener(`change`,()=>i(e)),h(a,`name`,w),a.value=e,m(r,()=>ua[e],null),o(i=>{var o=t()===e,s=!!n(),c=da[e],l=da[e],u=n();return o!==i.e&&r.classList.toggle(`on`,i.e=o),s!==i.t&&r.classList.toggle(`disabled`,i.t=s),c!==i.a&&h(r,`title`,i.a=c),l!==i.o&&h(a,`aria-label`,i.o=l),u!==i.i&&(a.disabled=i.i=u),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),o(()=>a.checked=t()===e),r})()}})),m(M,n(s,{get when(){return t()===`run-action`},get children(){var e=ia();return e.firstChild,e.addEventListener(`change`,e=>f(e.currentTarget.value)),m(e,n(l,{get each(){return x()},children:e=>(()=>{var t=la();return t.value=e,m(t,e),t})()}),null),o(()=>e.value=d()),e}}),null),m(c,n(kt,{get handlers(){return b()},get value(){return a()},get onPick(){return e.onPick},onChange:u}),P),m(c,n(s,{get when(){return r(()=>!!S())()&&!pa(S())},get children(){var e=aa();return m(e,()=>S().kind===`session`?`That session is offline: the request is queued and delivered when it reconnects.`:`That machine is offline: the new session starts when it's back.`),e}}),P),F.$$click=()=>e.onDecline(),m(I,()=>p()?`Sending…`:`Send request`),m(c,n(s,{get when(){return v()},get children(){var e=oa();return m(e,v),e}}),null),o(t=>{var n=p(),r=!C()||p()||e.state()?.status!==`ready`,i=p();return n!==t.e&&(F.disabled=t.e=n),r!==t.t&&(I.disabled=t.t=r),i!==t.a&&h(I,`aria-busy`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),c})()}O([`click`]);var ga={waiting:2,answerChars:8e3},_a=class extends Error{code;constructor(e,t){super(t),this.code=e,this.name=`ConsentRefusal`}},va={denied:`The user declined this request`,revoked:`This view ended; the request was withdrawn`,conflict:`The artifact changed since this view opened; reload it to ask again`,cancelled:`The request was cancelled`,failed:`The AI request failed`,rate_limited:`At most ${ga.waiting} requests can wait for the user at once`},Q=e=>new _a(e,va[e]),ya=new Set([`succeeded`,`failed`,`cancelled`]);function ba(e){let t=e.now??Date.now,n=[],r=new Map,i=!1,a=0,o=()=>e.onChange(n),s=e=>n.find(t=>t.id===e),c=(e,t)=>{n=n.map(n=>n.id===e?{...n,...t}:n),o()},l=(e,t,n)=>{let i=r.get(e);r.delete(e),c(e,{status:t}),i&&(n instanceof _a?i.reject(n):i.resolve(n))},u=e=>e.status===`awaiting`||e.status===`sending`||e.status===`running`;function d(e){if(e.state===`cancelled`)return{status:`cancelled`,result:Q(`cancelled`)};if(e.state!==`succeeded`)return{status:`failed`,result:Q(`failed`)};if(e.kind===`propose-edit`)return{status:`proposed`,result:{status:`proposed`}};let t=e.answer??``,n=t.length>ga.answerChars;return{status:`answered`,result:{status:`answered`,answer:n?t.slice(0,ga.answerChars):t,...n?{truncated:!0}:{}}}}return{ask(s){if(i)return Promise.reject(Q(`revoked`));if(n.filter(e=>e.status===`awaiting`).length>=ga.waiting)return Promise.reject(Q(`rate_limited`));let c=`req_${++a}`;return new Promise((i,a)=>{r.set(c,{resolve:i,reject:a}),n=[...n,{id:c,instruction:s,revisionID:e.revisionID,status:`awaiting`,at:t()}],o()})},requests:()=>n,async approve(t,n){let r=s(t);if(i||!r||r.status!==`awaiting`||!n.handlerKey||n.kind===`run-action`&&(!n.action||!e.actions().includes(n.action))||n.kind!==`run-action`&&n.action!==void 0)return!1;if(e.latestRevisionID()!==e.revisionID)return l(t,`conflict`,Q(`conflict`)),!1;c(t,{status:`sending`,kind:n.kind});let a;try{a=await e.submit({kind:n.kind,instruction:r.instruction,handlerKey:n.handlerKey,...n.action?{action:n.action}:{},baseRevisionID:e.revisionID})}catch{a=void 0}if(s(t)?.status!==`sending`)return!1;if(!a)return l(t,`failed`,Q(`failed`)),!1;if(c(t,{status:`running`,jobID:a.id}),ya.has(a.state)){let e=d(a);l(t,e.status,e.result)}return!0},decline(e){s(e)?.status===`awaiting`&&l(e,`declined`,Q(`denied`))},jobs(e){if(!i)for(let t of n){if(t.status!==`running`||!t.jobID)continue;let n=e.find(e=>e.id===t.jobID);if(!n||!ya.has(n.state))continue;let r=d(n);l(t.id,r.status,r.result)}},revoke(){if(!i){i=!0;for(let e of n)u(e)&&l(e.id,`revoked`,Q(`revoked`))}}}}var xa=`hub.artifact-bridge`,Sa=[`resize`,`askAI`],$={messageChars:16384,instructionChars:2e3,idChars:64,ratePerSecond:10,burst:20,pendingAsks:2,minHeight:0,maxHeight:2e4,errorChars:200};function Ca(){let e=new Uint8Array(16);return globalThis.crypto.getRandomValues(e),Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}var wa=e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype,Ta=[`p`,`v`,`channel`,`type`],Ea={resize:[`height`],askAI:[`id`,`instruction`]},Da=/^[A-Za-z0-9_-]+$/,Oa=new Set([`denied`,`revoked`,`conflict`,`cancelled`,`rate_limited`,`unsupported`]);function ka(e,t){if(!wa(e))return{ok:!1,reason:`malformed`};let n;try{n=JSON.stringify(e).length}catch{return{ok:!1,reason:`malformed`}}if(n>$.messageChars)return{ok:!1,reason:`too_large`};if(e.p!==`hub.artifact-bridge`)return{ok:!1,reason:`protocol`};if(e.v!==1)return{ok:!1,reason:`version`};if(e.channel!==t)return{ok:!1,reason:`channel`};let r=e.type;if(r!==`resize`&&r!==`askAI`)return{ok:!1,reason:`type`};let i=new Set([...Ta,...Ea[r]]);if(Object.keys(e).some(e=>!i.has(e)))return{ok:!1,reason:`invalid`};if(r===`resize`){let t=e.height;return typeof t!=`number`||!Number.isFinite(t)||t<0?{ok:!1,reason:`invalid`}:{ok:!0,message:{type:r,height:t}}}let{id:a,instruction:o}=e;return typeof a!=`string`||a.length<1||a.length>$.idChars||!Da.test(a)||typeof o!=`string`||o.trim()===``||o.length>$.instructionChars?{ok:!1,reason:`invalid`}:{ok:!0,message:{type:r,id:a,instruction:o}}}function Aa(e){let t=e.now??Date.now,n=e.origins??[`null`],r=new Set,i=$.burst,a=t(),o=!0,s={p:xa,v:1,channel:e.channel},c=t=>{o&&e.post({...s,...t})},l=(e,t)=>c(t.ok?{type:`reply`,id:e,ok:!0,result:t.result}:{type:`reply`,id:e,ok:!1,error:{code:t.code,message:t.message.slice(0,$.errorChars)}}),u=t=>(e.onReject?.(t),!1),d=()=>{let e=t();return i=Math.min($.burst,i+(e-a)/1e3*$.ratePerSecond),a=e,i<1?!1:(--i,!0)},f=(t,n)=>{if(r.has(t))return l(t,{ok:!1,code:`invalid`,message:`That request ID is already in flight`});if(r.size>=$.pendingAsks)return l(t,{ok:!1,code:`rate_limited`,message:`At most ${$.pendingAsks} requests at once`});let i=e.onAskAI;if(!i)return l(t,{ok:!1,code:`unsupported`,message:`Ask AI isn't available for this artifact view`});r.add(t),Promise.resolve().then(()=>i(n)).then(e=>l(t,{ok:!0,result:e}),e=>{let n=e?.code;l(t,{ok:!1,code:typeof n==`string`&&Oa.has(n)?n:`failed`,message:e instanceof Error?e.message:`The request failed`})}).finally(()=>r.delete(t))};return{receive(t){if(!o)return!1;let r=e.source();if(r==null||t.source!==r)return u(`source`);if(!n.includes(t.origin))return u(`origin`);if(!d())return u(`rate`);let i=ka(t.data,e.channel);if(!i.ok)return u(i.reason);let a=i.message;return a.type===`resize`?e.onResize?.(Math.min($.maxHeight,Math.max($.minHeight,Math.ceil(a.height)))):f(a.id,a.instruction),!0},init(e){c({type:`init`,artifactID:e.artifactID,revisionID:e.revisionID,files:e.files.map(e=>({...e.path===void 0?{}:{path:e.path},mediaType:e.mediaType,bytes:e.bytes})),capabilities:[...Sa]})},dispose(){o=!1,r.clear()}}}var ja=`allow-scripts`,Ma=[`camera`,`microphone`,`geolocation`,`display-capture`,`clipboard-read`,`clipboard-write`,`fullscreen`,`payment`,`usb`,`serial`,`hid`,`midi`,`publickey-credentials-get`].map(e=>`${e} 'none'`).join(`; `),Na=`/artifact-host/v1/`,Pa=/^\/artifact-host\/v1\/[A-Za-z0-9._-]+\/[A-Za-z0-9._/-]*$/;function Fa(e){let t=e;if(t&&typeof t==`object`&&t.capability&&typeof t.capability.id==`string`&&typeof t.capability.expiresAt==`number`&&typeof t.base==`string`&&typeof t.url==`string`&&t.base.startsWith(Na)&&t.url.startsWith(t.base)&&Pa.test(t.url)&&Array.isArray(t.files))return{capability:t.capability,base:t.base,url:t.url,files:t.files.filter(e=>e&&typeof e.mediaType==`string`&&typeof e.bytes==`number`)}}function Ia(e,t){let n=t?.error?.message,r=typeof n==`string`?n:void 0;return e===0?{kind:`error`,message:`The hub can't be reached. Check your connection and try again.`}:e===404?{kind:`error`,message:`This artifact or revision isn't available to you.`}:e===422?{kind:`error`,message:`This hub can't run interactive artifacts.`,unsupported:!0}:e===429?{kind:`error`,message:r??`Too many artifact views are open. Close some and try again.`}:e===400?{kind:`error`,message:r??`This artifact can't run in the artifact host.`}:{kind:`error`,message:r??`The artifact view failed (${e}).`}}function La(e,t){let n=t.fetch??globalThis.fetch.bind(globalThis),r=e=>t.onState?.(e),i=encodeURIComponent,a=!1,o,s,c,l=e=>void s?.receive(e),u=()=>{let e=c;c=void 0,e&&n(`/api/agent/artifact-host/${i(e)}`,{method:`DELETE`,credentials:`same-origin`,keepalive:!0}).catch(()=>{})},d=()=>{s?.dispose(),s=void 0,window.removeEventListener(`message`,l),o?.remove(),o=void 0,u()};return r({kind:`loading`}),(async()=>{let f;try{f=await n(`/api/agent/artifacts/${i(t.artifactID)}/revisions/${i(t.revisionID)}/host`,{method:`POST`,credentials:`same-origin`,headers:{"content-type":`application/json`},body:JSON.stringify({ttlSeconds:t.ttlSeconds??1800})})}catch{a||r(Ia(0,void 0));return}let p=await f.json().catch(()=>void 0),m=f.status===201?Fa(p):void 0;if(a){m&&(c=m.capability.id,u());return}if(!m)return r(f.status===201?{kind:`error`,message:`The hub's answer wasn't an artifact view.`}:Ia(f.status,p));c=m.capability.id;let h=document.createElement(`iframe`);h.setAttribute(`sandbox`,ja),h.setAttribute(`credentialless`,``),h.setAttribute(`referrerpolicy`,`no-referrer`),h.setAttribute(`allow`,Ma),h.title=t.title,h.className=`artifact-host-frame`,o=h,s=Aa({channel:Ca(),source:()=>h.contentWindow,...t.origins?{origins:t.origins}:{},post:e=>h.contentWindow?.postMessage(e,`*`),onResize:e=>h.style.height=`${Math.max(120,Math.min($.maxHeight,e))}px`,...t.onAskAI?{onAskAI:t.onAskAI}:{},...t.onReject?{onReject:t.onReject}:{}});let g=0;h.addEventListener(`load`,()=>{g++,g===1?(s?.init({artifactID:t.artifactID,revisionID:t.revisionID,files:m.files}),r({kind:`ready`})):(d(),r({kind:`stopped`,message:`The artifact tried to navigate away, so it was stopped. Reload to run it again.`}))}),window.addEventListener(`message`,l),h.src=m.url,e.append(h)})(),{iframe:()=>o,dispose(){a=!0,d()}}}var Ra=w(`<p class=artifact-host-status role=status>Starting the artifact…`),za=w(`<section class=artifact-host><p class=artifact-host-note>Runs isolated: no access to your hub session, cookies or the network.</p><div class=artifact-host-box>`),Ba=w(`<button type=button class=artifact-host-retry>Reload`),Va=w(`<div class=artifact-host-status role=alert><p>`);function Ha(e){let[r,i]=c({kind:`loading`}),[a,l]=c(0),u,d,f=()=>{d?.dispose(),d=La(u,{artifactID:e.artifactID,revisionID:e.revisionID,title:e.title,onState:i,...e.onAskAI?{onAskAI:e.onAskAI}:{}})};E(f),x(()=>d?.dispose());let p=()=>{let e=r();return e.kind===`error`?{message:e.message,unsupported:e.unsupported===!0}:e.kind===`stopped`?{message:e.message,unsupported:!1}:void 0},g=()=>{l(a()+1),f()};return(()=>{var i=za(),c=i.firstChild.nextSibling;m(i,n(s,{get when(){return r().kind===`loading`},get children(){return Ra()}}),c),m(i,n(s,{get when(){return p()},keyed:!0,children:e=>(()=>{var t=Va(),r=t.firstChild;return m(r,()=>e.message),m(t,n(s,{get when(){return!e.unsupported},get children(){var e=Ba();return e.$$click=g,e}}),null),t})()}),c);var l=u;return typeof l==`function`?t(l,c):u=c,o(t=>{var n=`${e.title} (interactive, isolated)`,o=r().kind===`loading`,s=a();return n!==t.e&&h(i,`aria-label`,t.e=n),o!==t.t&&h(i,`aria-busy`,t.t=o),s!==t.a&&h(c,`data-attempt`,t.a=s),t},{e:void 0,t:void 0,a:void 0}),i})()}O([`click`]);var Ua=w(`<p class="cmp-disclose cmp-preview-note"><span>External resources are blocked in previews: scripts, styles, fonts and images from other sites don't load.`),Wa=w(`<div class=cmp-interactive><p class=cmp-disclose aria-label="What this artifact may do"><span><strong>Sandboxed.</strong> This artifact may: resize its frame; ask for AI help on <!> — each request waits for your consent in the AI panel, and you choose who handles it. It can't read your hub, sessions, cookies or other artifacts, or apply changes.`),Ga=w(`<li>`),Ka=w(`<details class="cmp-disclose cmp-preview-skipped"><summary></summary><ul>`),qa=()=>Object.assign(Error(`Ask AI isn't available for this artifact`),{code:`unsupported`});function Ja(e){let[t,i]=c([]),a=()=>e.state(),o=e.artifact.id,l=e.revision.id,u=ba({artifactID:o,revisionID:l,latestRevisionID:()=>a()?.artifact?.latestRevisionID,actions:()=>a()?.actions??[],submit:({kind:t,instruction:n,handlerKey:r,action:i,baseRevisionID:a})=>e.ai.requestJob({kind:t,instruction:n,handlerKey:r,...i?{action:i}:{},baseRevisionID:a}),onChange:i});g(()=>u.jobs(a()?.jobs??[]));let d=()=>We(l,a()?.revisionNumbers??new Map),f={title:e.artifact.title||`This artifact`,requests:t,revName:d,approve:(e,t)=>u.approve(e,t),decline:e=>u.decline(e),reloadHandlers:()=>void e.ai.reloadHandlers()};e.onConsent(f,!0),x(()=>{u.revoke(`closed`),e.onConsent(f,!1)});let p=e=>a()?.status===`error`?Promise.reject(qa()):u.ask(e);return(()=>{var t=Wa(),i=t.firstChild,a=i.firstChild,c=a.firstChild.nextSibling.nextSibling;return c.nextSibling,m(t,n(Ha,{artifactID:o,revisionID:l,get title(){return e.artifact.title||`Interactive artifact`},onAskAI:p}),i),m(i,n(T,{name:`lock`}),a),m(a,d,c),m(t,n(s,{get when(){return e.artifact.origin===`preview`},get children(){var e=Ua(),t=e.firstChild;return m(e,n(T,{name:`lock`}),t),e}}),null),m(t,n(s,{get when(){return r(()=>e.artifact.origin===`preview`)()&&le(me(o)?.skipped,me(o)?.more)},children:e=>(()=>{var t=Ka(),r=t.firstChild,i=r.nextSibling;return m(r,()=>e().title),m(i,()=>e().items.map(e=>(()=>{var t=Ga();return m(t,e),t})()),null),m(i,n(s,{get when(){return e().more},get children(){var t=Ga();return m(t,()=>e().more),t}}),null),t})()}),null),t})()}var Ya=w(`<div class=awb-scrim aria-hidden=true>`),Xa=w(`<div class=awb-resize role=separator aria-orientation=vertical aria-label="Resize AI panel"tabindex=0>`),Za=w(`<div class=awb-grab aria-hidden=true>`),Qa=w(`<div class=awb-side>`),$a=w(`<button type=button class=icon-btn aria-label="Close AI panel"title="Close AI panel">`),eo=w(`<div>`),to=w(`<span class=awb-keep-err role=alert>`),no=w(`<button type=button class="btn small awb-refresh"title="Read the page and its files again and show the new revision">`),ro=w(`<button type=button class="btn small awb-keep"aria-label="Keep this preview as an artifact"title="Keep it as a normal artifact (previews expire a day after you last view them)">Keep`),io=w(`<span class=awb-badge aria-hidden=true>`),ao=w(`<button type=button class=awb-ai-toggle aria-label="AI panel"><span class=awb-ai-text>AI`),oo=720;function so(i){let[a,l]=c(),d=ot({source:Mn(),artifactID:i.id,onState:l});E(()=>void d.load()),x(()=>d.dispose());let[p,_]=c(),[v,y]=c(),[S,C]=c(),[w,D]=c(!1),[O,k]=c(),A=async()=>{let e=S();if(e&&!w()){D(!0),k(void 0);try{await ee(`/api/agent/artifacts/${encodeURIComponent(e.id)}/keep`,{expectedRevision:e.revision});let{origin:t,...n}=e;C(n),L?.reload()}catch(e){k(`Could not keep it: ${M(e)}`)}finally{D(!1)}}},[j,N]=c(!1),[P,F]=c(),I=async()=>{let e=S()?.provenance;if(e?.path&&!j()){N(!0),F(void 0);try{await H({sessionID:e.sessionID,messageID:e.messageID,path:e.path}),L?.reload()}catch(e){F(he(e))}finally{N(!1)}}},L,R,te=bt(Ot()),[z,ne]=c(!1),[B,re]=c(!1),[V,ie]=c(te.width??q.default),ae=()=>!z()&&xt(Ot(),{open:B(),width:V()}),oe=(e=!B())=>{re(e),ae()};E(()=>{let e=!1,t=()=>{let t=R.clientWidth;if(!t)return;let n=z(),r=t<oo;(r!==n||!e)&&(ne(r),re(r?!1:bt(Ot()).open??!0)),e=!0,r||ie(e=>yt(e,t))};t();let n=new ResizeObserver(t);n.observe(R),x(()=>n.disconnect())});let se=()=>v()?.requests().filter(e=>e.status===`awaiting`).length??0;g(e(se,(e,t)=>e>(t??0)&&re(!0)));let ce=()=>se()+(a()?.jobs.filter(e=>Ve(e)).length??0);function le(e){if(e.button!==0)return;e.preventDefault();let t=e.currentTarget;t.setPointerCapture(e.pointerId);let n=R.getBoundingClientRect().right,r=R.clientWidth,i=e=>ie(yt(n-e.clientX,r)),a=()=>{t.removeEventListener(`pointermove`,i),t.removeEventListener(`pointerup`,a),t.removeEventListener(`pointercancel`,a),R.classList.remove(`resizing`),ae()};R.classList.add(`resizing`),t.addEventListener(`pointermove`,i),t.addEventListener(`pointerup`,a),t.addEventListener(`pointercancel`,a)}function ue(e){let t=R.clientWidth,n=e.shiftKey?64:24,r=e.key===`ArrowLeft`?V()+n:e.key===`ArrowRight`?V()-n:e.key===`Home`?q.min:e.key===`End`?q.max:void 0;r!==void 0&&(e.preventDefault(),ie(yt(r,t)),ae())}let de=[n(s,{get when(){return r(()=>!!z())()&&B()},get children(){var e=Ya();return e.$$click=()=>oe(!1),e}}),(()=>{var e=Qa();return e.$$keydown=e=>{e.key===`Escape`&&z()&&!e.defaultPrevented&&(e.preventDefault(),oe(!1))},m(e,n(s,{get when(){return!z()},get children(){var e=Xa();return e.$$keydown=ue,e.$$pointerdown=le,o(t=>{var n=q.min,r=q.max,i=V();return n!==t.e&&h(e,`aria-valuemin`,t.e=n),r!==t.t&&h(e,`aria-valuemax`,t.t=r),i!==t.a&&h(e,`aria-valuenow`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),e}}),null),m(e,n(s,{get when(){return z()},get children(){return Za()}}),null),m(e,n(Nn,{get artifactID(){return i.id},controller:{ai:d,state:a},get revisionID(){return p()},onShowRevision:e=>L?.view(e),onRevised:()=>L?.reload(),onContinueInSideChat:e=>e.handler.sessionID&&_e(e.handler.sessionID),get headerActions(){return(()=>{var e=$a();return e.$$click=()=>oe(!1),m(e,n(T,{name:`close`})),e})()},get threadTail(){return n(s,{get when(){return v()},children:e=>n(ma,{get feed(){return e()},state:a})})},get tailCount(){return v()?.requests().length??0}}),null),o(t=>{var n=!!z(),r=!B(),i=z()?void 0:{width:`${V()}px`};return n!==t.e&&e.classList.toggle(`sheet`,t.e=n),r!==t.t&&(e.hidden=t.t=r),t.a=u(e,i,t.a),t},{e:void 0,t:void 0,a:void 0}),e})()];return(()=>{var e=eo(),c=R;return typeof c==`function`?t(c,e):R=e,m(e,n(Zi,f({get id(){return i.id},get variant(){return i.layout},control:e=>L=e,onRevision:e=>_(e.id),onArtifact:e=>{C(e),i.onArtifact?.(e)},isolated:(e,t)=>n(Ja,{artifact:e,revision:t,ai:d,state:a,onConsent:(e,t)=>y(n=>t?e:n===e?void 0:n)})},()=>i.lead?{lead:i.lead}:{},{get actions(){return[n(s,{get when(){return O()},get children(){var e=to();return m(e,O),e}}),n(s,{get when(){return P()},get children(){var e=to();return m(e,P),e}}),n(s,{get when(){return r(()=>S()?.origin===`preview`)()&&S()?.provenance?.path!==void 0},get children(){var e=no();return e.$$click=()=>void I(),m(e,()=>j()?`Refreshing…`:`Refresh`),o(t=>{var n=j(),r=j();return n!==t.e&&(e.disabled=t.e=n),r!==t.t&&h(e,`aria-busy`,t.t=r),t},{e:void 0,t:void 0}),e}}),n(s,{get when(){return S()?.origin===`preview`},get children(){var e=ro();return e.$$click=()=>void A(),o(()=>e.disabled=w()),e}}),r(()=>i.actions),(()=>{var e=ao(),t=e.firstChild;return e.$$click=()=>oe(),m(e,n(T,{name:`spark`}),t),m(e,n(s,{get when(){return ce()},get children(){var e=io();return m(e,ce),e}}),null),o(t=>{var n=B(),r=B()?`Hide the AI panel`:`Ask AI about this artifact`;return n!==t.e&&h(e,`aria-pressed`,t.e=n),r!==t.t&&h(e,`title`,t.t=r),t},{e:void 0,t:void 0}),e})()]}},()=>i.trailing?{trailing:i.trailing}:{},{side:de}))),o(t=>{var n=`awb ${i.layout}`,r=!!z(),a=i.id;return n!==t.e&&b(e,t.e=n),r!==t.t&&e.classList.toggle(`narrow`,t.t=r),a!==t.a&&h(e,`data-artifact`,t.a=a),t},{e:void 0,t:void 0,a:void 0}),e})()}O([`click`,`keydown`,`pointerdown`]);export{so as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.md .diagram-block{margin:0 0 .8em}.md .diagram-block>.code-block{margin-bottom:0}.md .diagram-block>.code-block+.diagram-note{margin-top:.4em}.md .diagram-note{color:var(--muted);margin:0;font-size:.85em}.md .diagram-frame .code-btn[aria-pressed=false]{color:var(--faint)}.md .diagram-open{cursor:zoom-in;text-align:center;background:0 0;border:0;width:100%;padding:10px;display:block}.md .diagram-open img{vertical-align:top;max-width:100%;height:auto;display:inline-block}.md .diagram-loading{color:var(--faint);margin:0;padding:14px 12px;font-size:.85em}
|
|
1
|
+
.md .diagram-block{margin:0 0 .8em}.md .diagram-block>.code-block{margin-bottom:0}.md .diagram-block>.code-block+.diagram-note{margin-top:.4em}.md .diagram-note{color:var(--muted);margin:0;font-size:.85em}.md .diagram-frame .code-btn[aria-pressed=false]{color:var(--faint)}.md .diagram-open{cursor:zoom-in;text-align:center;background:0 0;border:0;width:100%;padding:10px;display:block}.md .diagram-open img{vertical-align:top;max-width:100%;height:auto;display:inline-block}.md .diagram-loading{color:var(--faint);margin:0;padding:14px 12px;font-size:.85em}.md .diagram-loading+.diagram-pending{opacity:.6;margin:0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,B as t,C as n,F as r,G as i,I as a,J as o,R as s,S as c,T as l,U as u,W as d,et as f,k as p,tt as m,x as h}from"./ui-CFB4wQfF.js";import{C as g,S as _,T as v,c as y,s as b,v as x,w as S}from"./MediaImage-Ch3ryIdR.js";import{$ as C,A as w,M as T}from"./index-BS6lA6fN.js";import E from"./Lightbox-BlbivCkd.js";var D={images:!1,links:!1,linkRel:`noopener noreferrer`,fontSize:14};function O(e){let t=e.timeoutMs??1e4,n=Math.max(1,e.concurrency??2),r=Math.max(1,e.cacheSize??64),i=e.setTimer??((e,t)=>setTimeout(e,t)),a=e.clearTimer??(e=>clearTimeout(e)),o=e.failureTtlMs??6e4,s=e.now??Date.now,c=new Map,l=new Map,u=[],d=[],f=1,p=(e,t,n)=>{for(c.delete(e),c.set(e,{result:t,expires:n});c.size>r;)c.delete(c.keys().next().value)},m=e=>{let t=c.get(e);if(t?.expires!==void 0&&s()>=t.expires)c.delete(e);else return t?.result},h=(e,t,{cacheable:n,replace:r})=>{let i=e.job;i&&(a(i.timer),e.job=void 0,r&&(e.worker.onmessage=null,e.worker.onerror=null,e.worker.terminate(),d.splice(d.indexOf(e),1)),n&&p(i.key,t,n===`briefly`?s()+o:void 0),l.delete(i.key),i.resolve(t),b())},_=(e,t)=>{if(typeof t.svg!=`string`)return{status:`error`,message:typeof t.error==`string`&&t.error?t.error:`the renderer returned no SVG`};let n=g(t.svg,e.palette);return v(n)?{status:`unsafe`}:{status:`ok`,svg:n}},y=()=>{let t={worker:e.spawn()};return t.worker.onmessage=e=>{let n=e.data,r=t.job;r&&n&&n.id===r.id&&h(t,_(r,n),{cacheable:!0,replace:!1})},t.worker.onerror=e=>h(t,{status:`error`,message:e?.message||`the diagram worker failed`},{cacheable:!1,replace:!0}),d.push(t),t};function b(){for(;u.length;){let e=d.find(e=>!e.job)??(d.length<n?y():void 0);if(!e)return;let r=u.shift(),a=f++,o=r.palette.font,s={...r,id:a,timer:void 0};e.job=s,s.timer=i(()=>h(e,{status:`error`,message:`timed out after ${t/1e3} s`},{cacheable:`briefly`,replace:!0}),t),e.worker.postMessage({id:a,source:r.source,options:o?{...D,fontFamily:o}:{...D}})}}return{render(e,t,n){let r=x(e,t),i=m(r);if(i)return p(r,i,c.get(r).expires),Promise.resolve(i);let a=l.get(r);if(a)return a;let o=new Promise(t=>u.push({key:r,source:e,palette:n,resolve:t}));return l.set(r,o),b(),o},cached(e,t){return m(x(e,t))}}}var k=p(`<p class=diagram-note>`),A=p(`<div class="code-block diagram-frame"><div class=code-head><span class=code-lang></span><button type=button class=code-btn>Diagram</button><button type=button class=code-btn>Source</button><button type=button class=code-btn>`),j=p(`<div class=diagram-block>`),M=p(`<button type=button class=code-btn>Download SVG`),N=p(`<pre class=code><code>`),P=p(`<p class=diagram-loading>Drawing diagram…`),F=p(`<pre class="code diagram-pending"><code>`),I=p(`<button type=button class=diagram-open aria-label="Open the diagram full screen"title="Open full screen"><img alt=Diagram>`),L,R=()=>L??=O({spawn:()=>new Worker(new URL(`/assets/mermaid.worker-WDVRAh32.js`,``+import.meta.url),{type:`module`})}),z=matchMedia(`(prefers-color-scheme: dark)`),[B,V]=o(z.matches);z.addEventListener(`change`,e=>V(e.matches));var H=()=>C()===`system`?B()?`dark`:`light`:C(),U={bg:`--side`,fg:`--text`,muted:`--muted`,line:`--muted`,surface:`--raise`,"surface-alt":`--raise-2`,border:`--line-2`,accent:`--accent`,font:`--sans`,"font-mono":`--mono`};function W(){let e=getComputedStyle(document.documentElement),t={};for(let[n,r]of Object.entries(U)){let i=e.getPropertyValue(r).trim();i&&(t[n]=i)}return t}function G(e){let t=URL.createObjectURL(new Blob([e],{type:`image/svg+xml`})),n=document.createElement(`a`);n.href=t,n.download=`diagram.svg`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),1e4)}function K(e){return[t(w,{get lang(){return e.lang},get text(){return e.text}}),(()=>{var t=k();return c(t,()=>e.note),t})()]}function q(p){let[h,g]=o(`diagram`),[v,x]=o(!1),[C,w]=o(),[D,O]=o(!1),[k,L]=o(!1),z=d(()=>p.text),B=d(()=>S(z())),V=d(()=>(H(),W())),U,q;f(()=>clearTimeout(q)),m(()=>{let e=new IntersectionObserver(e=>x(e.some(e=>e.isIntersecting)),{rootMargin:`200px 0px`});e.observe(U),f(()=>e.disconnect())}),u(()=>{if(B()||!v())return;let e=z(),t=V(),n=JSON.stringify(t),r=R().cached(e,n);if(r)return void w(r);let i=!0;f(()=>i=!1),R().render(e,n,t).then(e=>i&&w(e))});let J=()=>{let e=C();return e?.status===`ok`?e.svg:void 0},Y=y(),X;return m(()=>{if(!Y)return;let e=async()=>{let e=V(),t=R().cached(p.text,JSON.stringify(e))??await R().render(p.text,JSON.stringify(e),e);if(w(t),t.status!==`ok`)throw Error(`Couldn't draw this diagram`);return _(t.svg)},t=Y.register({kind:`diagram`,name:`Diagram`,mime:`image/svg+xml`,position:()=>b(U),available:()=>!B()&&(!C()||!!J()),load:async()=>J()?_(J()):e()});X=()=>Y.open(t.id),f(t.dispose)}),(()=>{var o=j(),u=U;return typeof u==`function`?e(u,o):U=o,c(o,t(s,{get children(){return[t(r,{get when(){return B()},get children(){return t(K,{get lang(){return p.lang},get text(){return p.text},note:`Diagram too large to draw`})}}),t(r,{get when(){return n(()=>C()?.status===`error`)()&&C()},children:e=>t(K,{get lang(){return p.lang},get text(){return p.text},get note(){return`Couldn't draw this diagram: ${e().message}`}})}),t(r,{get when(){return C()?.status===`unsafe`},get children(){return t(K,{get lang(){return p.lang},get text(){return p.text},note:`Diagram not shown: the drawing had active content in it.`})}}),t(r,{when:!0,get children(){return[(()=>{var e=A(),n=e.firstChild,r=n.firstChild,o=r.nextSibling,s=o.nextSibling,u=s.nextSibling;return c(r,()=>p.lang||`mermaid`),o.$$click=()=>g(`diagram`),s.$$click=()=>g(`source`),u.$$click=async()=>{await T(p.text)&&(L(!0),clearTimeout(q),q=setTimeout(()=>L(!1),1500))},c(u,()=>k()?`Copied`:`Copy`),c(n,t(a,{get when(){return J()},children:e=>(()=>{var t=M();return t.$$click=()=>G(e()),t})()}),null),c(e,t(a,{get when(){return h()===`diagram`},get fallback(){return(()=>{var e=N(),t=e.firstChild;return c(t,()=>p.text),i(()=>l(e,`data-lang`,p.lang||void 0)),e})()},get children(){return t(a,{get when(){return J()},get fallback(){return[P(),(()=>{var e=F(),t=e.firstChild;return c(t,()=>p.text),i(()=>l(e,`data-lang`,p.lang||void 0)),e})()]},children:e=>(()=>{var t=I(),n=t.firstChild;return t.$$click=()=>X?X():O(!0),i(()=>l(n,`src`,_(e()))),t})()})}}),null),i(e=>{var t=h()===`diagram`,n=h()===`source`,r=k()?`Copied`:`Copy diagram source`;return t!==e.e&&l(o,`aria-pressed`,e.e=t),n!==e.t&&l(s,`aria-pressed`,e.t=n),r!==e.a&&l(u,`aria-label`,e.a=r),e},{e:void 0,t:void 0,a:void 0}),e})(),t(E,{get open(){return n(()=>!!D())()&&!!J()},get items(){return[{key:`diagram`,name:`Diagram`,mime:`image/svg+xml`,src:_(J()??``)}]},index:0,onClose:()=>O(!1)})]}})]}})),o})()}h([`click`]);export{q as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ArtifactPage-
|
|
2
|
-
import{B as e,C as t,F as n,G as r,I as i,J as a,N as o,R as s,S as c,T as l,U as u,W as d,Z as f,k as p,tt as m,u as h,x as g,y as _}from"./ui-CFB4wQfF.js";import{o as v,s as y}from"./toast-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ArtifactPage-Bz992ZX6.js","assets/ui-CFB4wQfF.js","assets/artifacts-But87Jfo.js","assets/toast-CXTwTvDw.js","assets/pane-layout-BW0RdX5a.js","assets/index-BS6lA6fN.js","assets/plural-Bspvoqfq.js","assets/MediaImage-Ch3ryIdR.js","assets/preload-helper-BLdHbfdN.js","assets/index-BC0O1gfR.css","assets/ArtifactWorkbench-Dti3VP07.js","assets/source-C-De8L3s.js","assets/ArtifactWorkbench-9eTj1CeW.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{B as e,C as t,F as n,G as r,I as i,J as a,N as o,R as s,S as c,T as l,U as u,W as d,Z as f,k as p,tt as m,u as h,x as g,y as _}from"./ui-CFB4wQfF.js";import{o as v,s as y}from"./toast-CXTwTvDw.js";import{o as b,t as x}from"./artifacts-But87Jfo.js";import{t as S}from"./preload-helper-BLdHbfdN.js";import{nt as C,rt as w,t as T,tt as E}from"./index-BS6lA6fN.js";import{a as D,c as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./source-C-De8L3s.js";var F=p(`<p class="lib-intro muted">Everything your sessions made, across workspaces.`),I=p(`<div class=lib-filters><label><span>Workspace</span><select aria-label=Workspace><option value>All workspaces</option><option value=none>No workspace</option></select></label><label><span>Type</span><select aria-label=Type><option value>All types</option></select></label><label><span>Show</span><select aria-label=Show><option value>Artifacts</option><option value=preview>Previews`),L=p(`<p class=muted role=status>Loading artifacts…`),R=p(`<option>`),z=p(`<p class="lib-note err"role=alert> <button type=button class="btn small">Retry`),B=p(`<p class=lib-note>`),V=p(`<ul class=lib-list aria-label=Artifacts>`),H=p(`<p class="lib-note err"role=alert>`),U=p(`<button type=button class="btn lib-more">Load more`),W=p(`<button type=button class="btn small lib-keep"title="Keep it as a normal artifact (previews expire)">Keep`),G=p(`<p class=lib-desc>`),K=p(`<li class=lib-row><a class=lib-title></a><button type=button class="btn small lib-pane">Open in pane</button><span class=lib-meta><span class=lib-kind></span><span></span><span>`),q=f(()=>S(()=>import(`./ArtifactPage-Bz992ZX6.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),J={markdown:`Markdown`,code:`Code`,image:`Image`,table:`Table`,chart:`Chart`,dashboard:`Dashboard`,html:`HTML`,app:`App`,file:`File`};function Y(t){return e(i,{get when(){return t.rest[0]},keyed:!0,get fallback(){return e(Z,{})},children:t=>e(q,{id:t})})}var X=(e,t)=>e.workspace===t.workspace&&e.type===t.type&&e.origin===t.origin;function Z(){let f=d(()=>N(v().search),void 0,{equals:X}),[p,h]=a({status:`loading`}),g=k(P,h);u(()=>g.load(f()));let[_,b]=a(new Map);m(()=>void A().then(e=>b(new Map(e.map(e=>[e.id,e.title])))));let S=e=>y(`/artifacts${j({...f(),...e})}`),[C,w]=a(),E=async e=>w(await g.keep(e)),M=d(()=>{let e=new Set(_().keys()),t=p();if(t.status===`ready`)for(let n of t.items)n.workspaceID&&e.add(n.workspaceID);let n=f().workspace;return n&&n!==`none`&&e.add(n),[...e].map(e=>({id:e,label:O(e,_())}))}),W=()=>{let e=p();return e.status===`error`&&e.error.kind!==`error`};return e(T,{title:`Artifacts`,get children(){return[F(),e(i,{get when(){return!W()},get children(){var t=I(),n=t.firstChild,i=n.firstChild.nextSibling,a=i.firstChild,s=a.nextSibling,l=n.nextSibling,u=l.firstChild.nextSibling,d=u.firstChild,p=l.nextSibling.firstChild.nextSibling,m=p.firstChild,h=m.nextSibling;return i.addEventListener(`change`,e=>S({workspace:e.currentTarget.value})),c(i,e(o,{get each(){return M()},children:e=>(()=>{var t=R();return c(t,()=>e.label),r(()=>t.selected=f().workspace===e.id),r(()=>t.value=e.id),t})()}),null),u.addEventListener(`change`,e=>S({type:e.currentTarget.value})),c(u,e(o,{get each(){return[...x]},children:e=>(()=>{var t=R();return t.value=e,c(t,()=>J[e]),r(()=>t.selected=f().type===e),t})()}),null),p.addEventListener(`change`,e=>S({origin:e.currentTarget.value===`preview`?`preview`:void 0})),r(e=>{var t=f().workspace===``,n=f().workspace===`none`,r=f().type===``,i=!f().origin,o=f().origin===`preview`;return t!==e.e&&(a.selected=e.e=t),n!==e.t&&(s.selected=e.t=n),r!==e.a&&(d.selected=e.a=r),i!==e.o&&(m.selected=e.o=i),o!==e.i&&(h.selected=e.i=o),e},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),t}}),e(s,{get children(){return[e(n,{get when(){return p().status===`loading`},get children(){return L()}}),e(n,{get when(){return t(()=>p().status===`error`)()&&p()},children:t=>{let n=()=>t().error;return e(i,{get when(){return n().kind===`error`},get fallback(){return(()=>{var e=B();return c(e,()=>n().text),e})()},get children(){var e=z(),t=e.firstChild,r=t.nextSibling;return c(e,()=>n().text,t),r.$$click=()=>g.reload(),e}})}}),e(n,{get when(){return t(()=>p().status===`ready`)()&&p()},children:t=>{let n=()=>t();return[e(i,{get when(){return n().items.length},get fallback(){return(()=>{var e=B();return c(e,()=>D(f(),n().more)),e})()},get children(){var t=V();return c(t,e(o,{get each(){return n().items},children:t=>e($,{item:t,get names(){return _()},onKeep:E})})),t}}),e(i,{get when(){return C()},get children(){var e=H();return c(e,C),e}}),e(i,{get when(){return n().moreError},get children(){var e=H();return c(e,()=>n().moreError),e}}),e(i,{get when(){return n().more},get children(){var e=U();return e.$$click=()=>g.more(),r(t=>{var r=n().loadingMore,i=n().loadingMore;return r!==t.e&&(e.disabled=t.e=r),i!==t.t&&l(e,`aria-busy`,t.t=i),t},{e:void 0,t:void 0}),e}})]}})]}})]}})}function Q(e,t){return e.workspaceID?O(e.workspaceID,t):`Private`}function $(t){let n=()=>t.item;return(()=>{var a=K(),o=a.firstChild,s=o.nextSibling,u=s.nextSibling,d=u.firstChild,f=d.nextSibling,p=f.nextSibling;return _(a,`dragend`,E),a.addEventListener(`dragstart`,e=>C(e,{target:{artifactID:n().id},label:n().title||`Untitled`})),c(o,()=>n().title||`Untitled`),s.$$click=()=>b(n().id),c(a,e(i,{get when(){return n().origin===`preview`},get children(){var e=W();return e.$$click=()=>t.onKeep(n()),r(()=>l(e,`aria-label`,`Keep ${n().title||`Untitled`} as an artifact`)),e}}),u),c(d,()=>J[n().kind]),c(f,()=>Q(n(),t.names)),c(p,()=>h(n().updatedAt)),c(a,e(i,{get when(){return n().description},get children(){var e=G();return c(e,()=>n().description),e}}),null),r(e=>{var t=n().id,r=!w(),i=M(n().id),c=`Open ${n().title||`Untitled`} in a pane`;return t!==e.e&&l(a,`data-artifact`,e.e=t),r!==e.t&&l(a,`draggable`,e.t=r),i!==e.a&&l(o,`href`,e.a=i),c!==e.o&&l(s,`aria-label`,e.o=c),e},{e:void 0,t:void 0,a:void 0,o:void 0}),a})()}g([`click`]);export{Y as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,B as t,E as n,G as r,I as i,J as a,S as o,T as s,U as c,W as l,b as u,et as d,i as f,k as p,r as m,t as h,x as g}from"./ui-CFB4wQfF.js";import{i as _,l as v,u as y}from"./MediaImage-Ch3ryIdR.js";var b=p(`<div class=media-view-stage>`),x=p(`<span class="media-view-count muted small"> / `),S=p(`<div class=media-view-bar>`),C=p(`<p class=media-view-note>Couldn't load this image.`),w=p(`<p class=media-view-note>Loading…`),T=p(`<img decoding=async referrerpolicy=no-referrer>`),E=p(`<a class="btn small media-download"rel=noopener> Download`),D=50,O=6,k=e=>e instanceof HTMLElement&&(e.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName)),A=(e,t,n)=>Math.min(n,Math.max(t,e));function j(p){let g=()=>p.items[A(p.index,0,Math.max(0,p.items.length-1))],j=()=>p.items.length>1,[M,N]=a(),[P,F]=a(!1),[I,L]=a(1),[R,z]=a({x:0,y:0}),B=()=>(L(1),z({x:0,y:0})),V=l(()=>{let e=g();return e?`${e.key}\n${e.src??``}`:``}),H=()=>{let e=g();return p.title??(e?e.kind?v({kind:e.kind,name:e.name}):e.name:`Image`)};c(e([()=>p.open,V],([e])=>{B(),F(!1),N(void 0);let t=g();if(!e||!t||!t.src&&!t.load)return;let n=!0;return(t.load?t.load():_(t.src)).then(e=>n&&N(e),()=>n&&F(!0)),()=>n=!1}));let U=e=>{j()&&p.onIndex?.(y(p.index,e,p.items.length))},W=e=>j()&&e!==p.index&&p.onIndex?.(e);c(()=>{if(!p.open||!j())return;let e=e=>{if(e.defaultPrevented||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||k(e.target))return;let t={ArrowLeft:()=>U(-1),ArrowRight:()=>U(1),Home:()=>W(0),End:()=>W(p.items.length-1)}[e.key];t&&(e.preventDefault(),e.stopPropagation(),t())};window.addEventListener(`keydown`,e,!0),d(()=>window.removeEventListener(`keydown`,e,!0))});let G=new Map,K,q,J=()=>{let[e,t]=[...G.values()];return e&&t?Math.hypot(e.x-t.x,e.y-t.y):0},Y=e=>{e.currentTarget.setPointerCapture?.(e.pointerId),G.set(e.pointerId,{x:e.clientX,y:e.clientY}),q=G.size===1&&I()<=1?{id:e.pointerId,x:e.clientX,y:e.clientY}:void 0,G.size===2&&(K={distance:J(),scale:I()})},X=e=>{let t=G.get(e.pointerId);t&&(G.set(e.pointerId,{x:e.clientX,y:e.clientY}),G.size===2&&K&&K.distance>0?L(A(K.scale*J()/K.distance,1,O)):G.size===1&&I()>1&&z(n=>({x:n.x+e.clientX-t.x,y:n.y+e.clientY-t.y})))},Z=e=>{let t=q;if(t?.id===e.pointerId&&e.type===`pointerup`&&I()<=1){let n=e.clientX-t.x,r=e.clientY-t.y;Math.abs(n)>=D&&Math.abs(n)>1.5*Math.abs(r)&&U(n<0?1:-1)}q=void 0,G.delete(e.pointerId),G.size<2&&(K=void 0),I()<=1&&B()};return t(h,{get open(){return p.open},get title(){return H()},class:`media-view`,get onClose(){return p.onClose},get children(){return[(()=>{var e=b();return e.addEventListener(`wheel`,e=>{e.preventDefault(),L(t=>A(t*Math.exp(-e.deltaY/300),1,O)),I()<=1&&B()}),e.$$dblclick=()=>I()>1?B():L(2.5),e.addEventListener(`pointercancel`,Z),e.$$pointerup=Z,e.$$pointermove=X,e.$$pointerdown=Y,o(e,t(i,{get when(){return!P()},get fallback(){return C()},get children(){return t(i,{get when(){return M()},get fallback(){return w()},children:e=>(()=>{var t=T();return s(t,`draggable`,!1),r(r=>{var i=e(),a=g()?.mime===`image/svg+xml`?`fill`:void 0,o=g()?.name??`Image`,c=`translate(${R().x}px, ${R().y}px) scale(${I()})`;return i!==r.e&&s(t,`src`,r.e=i),a!==r.t&&u(t,r.t=a),o!==r.a&&s(t,`alt`,r.a=o),c!==r.o&&n(t,`transform`,r.o=c),r},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()})}})),e})(),(()=>{var e=S();return o(e,t(i,{get when(){return j()},get children(){return[t(f,{icon:`back`,label:`Previous`,onClick:()=>U(-1)}),(()=>{var e=x(),t=e.firstChild;return o(e,()=>p.index+1,t),o(e,()=>p.items.length,null),e})(),t(f,{icon:`chevron`,label:`Next`,onClick:()=>U(1)})]}}),null),o(e,t(i,{get when(){return g()?.download},children:e=>(()=>{var n=E(),i=n.firstChild;return o(n,t(m,{name:`download`}),i),r(t=>{var r=e(),i=g()?.name.split(`/`).pop()||`image`;return r!==t.e&&s(n,`href`,t.e=r),i!==t.t&&s(n,`download`,t.t=i),t},{e:void 0,t:void 0}),n})()}),null),e})()]}})}g([`pointerdown`,`pointermove`,`pointerup`,`dblclick`]);export{j as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Lightbox-BlbivCkd.js","assets/ui-CFB4wQfF.js","assets/Lightbox-C8KNKwOA.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{A as e,B as t,C as n,F as r,G as i,H as a,I as o,J as s,L as c,N as l,O as u,R as d,S as f,T as p,U as m,W as h,Z as g,b as _,et as v,k as y,r as b,rt as x,tt as ee,x as S}from"./ui-CFB4wQfF.js";import{t as C}from"./preload-helper-BLdHbfdN.js";var w=51200;function T(e){let t=e.toLowerCase();return t===`mermaid`||t===`mmd`}var E=/^(`{3,}|~{3,})\s*([^\s`]*)/,D=/^(`{3,}|~{3,})\s*$/,O=/^[\s>]*/,k=/^(?:[-*+]|\d{1,9}[.)])\s+/;function A(e){let t;for(let n of e.split(/\r\n?|\n/)){let e=n.replace(O,``);if(t){let n=D.exec(e);n&&n[1][0]===t[0]&&n[1].length>=t.length&&(t=void 0);continue}e=e.replace(k,``).replace(O,``);let r=E.exec(e);r&&(t=r[1])}return t!==void 0}function j(e){let t=[],n;for(let r of e.split(`
|
|
3
|
+
`)){if(n){let e=D.exec(r.trim()),i=!!e&&e[1][0]===n.marker[0]&&e[1].length>=n.marker.length;n.diagram||t.push(r),i&&(n=void 0);continue}let e=/^\s{0,3}(`{3,}|~{3,})\s*([^\s`]*)/.exec(r);e?(n={marker:e[1],diagram:T(e[2])},t.push(n.diagram?`a diagram`:r)):t.push(r)}return t.join(`
|
|
4
|
+
`)}function M(e){return e.length>51200||new TextEncoder().encode(e).length>w}var N=/<script|foreignObject|\son\w+=|javascript:|<a[\s>]|<image/i;function P(e){return N.test(e)}function F(e){let t=3735928559,n=1103547991;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),(4294967296*(2097151&n)+(t>>>0)).toString(36)}function I(e,t){return`${F(`${e}\u0000${t}`)}.${e.length.toString(36)}`}var te=/^[a-z][a-z0-9-]*$/,ne=/^[#\w\s,.()%'+-]*$/,re=/^(\s*<svg\b)([^>]*)>/;function ie(e,t){let n=re.exec(e);if(!n)return e;let r=``;for(let[e,n]of Object.entries(t)){let t=n.replace(/"/g,`'`).trim();te.test(e)&&t&&ne.test(t)&&!/url\(|expression\(/i.test(t)&&(r+=`--pele-${e}:${t};`)}if(!r)return e;let i=n[2],a=/\sstyle="/.exec(i);return(a?`${n[1]}${i.slice(0,a.index+a[0].length)}${r}${i.slice(a.index+a[0].length)}>`:`${n[1]} style="${r}"${i}>`)+e.slice(n[0].length)}function L(e){return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`}var R={maxBytes:8388608,maxPixels:4e7,maxSide:16384,chunkBytes:524288,perRow:8},z=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`,`image/svg+xml`],ae=/^f(0|[1-9]\d{0,2})$/,oe=/^t(0|[1-9]\d{0,3})\.(0|[1-9]\d{0,2})$/,se=/^p:([A-Za-z0-9_-]+)$/;function ce(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function le(e){if(e.length%4!=1)try{let t=atob(e.replace(/-/g,`+`).replace(/_/g,`/`));return Uint8Array.from(t,e=>e.charCodeAt(0))}catch{return}}function ue(e){return`p:${ce(new TextEncoder().encode(e))}`}function de(e){if(typeof e!=`string`||e.length>5468)return;let t=ae.exec(e);if(t)return{kind:`file`,index:Number(t[1])};let n=oe.exec(e);if(n)return{kind:`tool`,part:Number(n[1]),item:Number(n[2])};let r=se.exec(e);if(!r)return;let i=le(r[1]);if(!i||i.length===0||i.length>4096)return;let a;try{a=new TextDecoder(`utf-8`,{fatal:!0}).decode(i)}catch{return}if(!(a.includes(`\0`)||ue(a)!==e))return{kind:`path`,path:a}}function fe(e,t){return e===void 0||!Number.isFinite(e)||e<=524288?`auto`:t?.saveData===!0||t?.type===`cellular`||pe.has(t?.effectiveType??``)?`tap`:`auto`}var pe=new Set([`2g`,`slow-2g`]),me=e=>typeof e==`number`&&e>524288,B={text:`Couldn't load it: try again`,retry:!0},V={text:`Not in this session's files`,retry:!1},H={offline:{text:`The machine is offline`,retry:!0},not_found:V,path:V,hidden:V,too_large:{text:`Too large to show`,retry:!1},dimensions:{text:`Too large to show`,retry:!1},type:{text:`Not an image`,retry:!1},unsupported:{text:`This machine's harness can't share images`,retry:!1},rate_limited:B,integrity:B,bad_answer:B,timeout:B,disabled:{text:`Web images are turned off on this hub`,retry:!1},refused:{text:`The site's address is not allowed`,retry:!1},not_image:{text:`Not an image`,retry:!1},upstream:{text:`The site did not answer`,retry:!0},bad_url:{text:`Not a web address the hub can fetch`,retry:!1}},he={404:`not_found`,409:`offline`,413:`too_large`,415:`type`,422:`unsupported`};function U(e,t){let n=t?H[t]:void 0;if(n)return{...n};if(e===400)return{text:`Not an image of this session`,retry:!1};let r=he[e];return{...r?H[r]:B}}function ge(e){return e<1024?`${Math.round(e)} B`:e<1048576?`${Math.round(e/1024)} KB`:`${Number((e/1048576).toFixed(1))} MB`}function _e(e,t){return[e===`screenshot`?`Screenshot`:`Image`,...t===void 0?[]:[ge(t)],`Tap to load`].join(` · `)}function W(e,t){let n=e.href;if(n&&/^https?:/i.test(n))return{kind:`remote`,href:n};let r=e.src&&t?.length?t.find(t=>t.name===e.src):void 0;return r?{kind:`local`,image:r}:n?.startsWith(`/artifacts/`)?{kind:`artifact`,href:n}:{kind:`unsafe`}}function ve(e,t){let n=[];if(!t?.length)return n;let r=e=>{for(let i of e)if(i.type===`image`){let e=W(i,t);e.kind===`local`&&!n.includes(e.image)&&n.push(e.image)}else`children`in i&&r(i.children)},i=e=>{for(let t of e)if(t.type===`paragraph`||t.type===`heading`)r(t.children);else if(t.type===`quote`)i(t.blocks);else if(t.type===`list`)for(let e of t.items)i(e.blocks);else if(t.type===`table`)for(let e of[t.head,...t.rows])for(let t of e)r(t)};return i(e),n}function G(e){let t=0,n=[],r=()=>{t++;let e=!1;return()=>{e||(e=!0,t--,n.shift()?.grant())}};return{acquire(i){return i?.aborted?Promise.reject(Error(`aborted`)):t<e?Promise.resolve(r()):new Promise((e,t)=>{let a={grant:()=>{i?.removeEventListener(`abort`,o),e(r())}},o=()=>{let e=n.indexOf(a);e>=0&&n.splice(e,1),t(Error(`aborted`))};i?.addEventListener(`abort`,o,{once:!0}),n.push(a)})},active:()=>t}}var K=class extends Error{reason;retryAfterMs;status;code;constructor(e,t,n=0,r){super(e.text),this.reason=e,this.retryAfterMs=t,this.status=n,this.code=r}},q=(e,t,n)=>new K(U(e,t),n,e,t);function ye(e={}){let t=e.fetch??((...e)=>fetch(...e)),n=e.objectURL??(e=>URL.createObjectURL(e)),r=e.revokeURL??(e=>URL.revokeObjectURL(e)),i=e.timeoutMs??7e4,a=e.maxBytes??R.maxBytes,o=e.keep??96,s=e.keepBytes??50331648,c=e.slots??G(e.limit??3),l=new Map,u=new Map,d=new Map;async function f(e){let r=await c.acquire(),o=new AbortController,s=!1,l=setTimeout(()=>(s=!0,o.abort()),i);try{let r;try{r=await t(e,{credentials:`same-origin`,referrerPolicy:`no-referrer`,signal:o.signal})}catch{throw q(s?504:0,s?`timeout`:void 0)}if(!r.ok){let e=await r.json().catch(()=>({})),t=typeof e.code==`string`?e.code:typeof e.error?.code==`string`?e.error.code:void 0,n=Number(r.headers.get(`retry-after`));throw q(r.status,t,Number.isFinite(n)&&n>0?Math.min(n,30)*1e3:void 0)}let i=(r.headers.get(`content-type`)??``).split(`;`)[0].trim().toLowerCase();if(!z.includes(i))throw await r.body?.cancel().catch(()=>{}),q(415,`type`);let c=Number(r.headers.get(`content-length`));if(Number.isFinite(c)&&c>a)throw await r.body?.cancel().catch(()=>{}),q(413,`too_large`);let l=[],u=0,d=r.body?.getReader(),f=new Promise((e,t)=>o.signal.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0}));f.catch(()=>{});try{for(;d;){let{done:e,value:t}=await Promise.race([d.read(),f]);if(e)break;if(u+=t.byteLength,u>a)throw await d.cancel().catch(()=>{}),q(413,`too_large`);l.push(t)}}catch(e){throw d?.cancel().catch(()=>{}),e instanceof K?e:q(s?504:0,s?`timeout`:void 0)}return i===`image/svg+xml`?{url:L(new TextDecoder().decode(be(l,u))),mime:i,bytes:u}:{url:n(new Blob(l,{type:i})),mime:i,bytes:u}}finally{clearTimeout(l),r()}}let p=0;function m(e){let t=l.get(e);t&&(l.delete(e),p-=t.bytes,t.url.startsWith(`blob:`)&&r(t.url))}function h(e,t){for(l.set(e,t),p+=t.bytes;l.size>1&&(l.size>o||p>s);)m(l.keys().next().value)}return{load(e){let t=l.get(e);if(t)return Promise.resolve(t);let n=u.get(e);if(n)return Promise.reject(n);let r=d.get(e);if(r)return r;let i=f(e).then(t=>(d.delete(e),h(e,t),t),t=>{d.delete(e);let n=t instanceof K?t:q(0);throw u.set(e,n),n});return d.set(e,i),i},forget(e){u.delete(e)},drop:m,cached:e=>l.get(e)?.url,inFlight:()=>c.active()}}function be(e,t){let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.byteLength;return n}function xe(e){let t=new Map,n=new Set,r=0,i=()=>{for(let e of[...n])e()};return{register(e){let n=`m${++r}`;return t.set(n,{...e,id:n}),i(),n},unregister(e){t.delete(e)&&i()},get:e=>t.get(e),list(){let n=[];for(let e of t.values()){if(e.available&&!e.available())continue;let t=e.position();t!==void 0&&n.push({entry:e,at:t})}return n.sort((t,n)=>e(t.at,n.at)).map(e=>e.entry)},subscribe(e){return n.add(e),()=>n.delete(e)}}}function Se(e,t,n){return n<=0?0:((e+t)%n+n)%n}var Ce=4;function we(e,t){return e.node===t.node?e.sub-t.sub:e.node.compareDocumentPosition(t.node)&Ce?-1:1}function Te(e,t,n,r){for(let r=e;r>=0;r--){let i=n(t[r]);if(i)return{node:i,sub:e-r}}return{node:r,sub:e}}var Ee=e=>e.tool?`screenshot`:`image`,De={image:`Image`,screenshot:`Screenshot`,diagram:`Diagram`};function Oe(e){let t=De[e.kind];return!e.name||e.name===t?t:`${t} · ${e.name}`}var ke=g(()=>C(()=>import(`./Lightbox-BlbivCkd.js`),__vite__mapDeps([0,1,2]))),J=a(),Y=()=>x(J),Ae=(e,t=0)=>e?.isConnected?{node:e,sub:t}:void 0;function je(e){let r=xe(we),[i,a]=s(0);v(r.subscribe(()=>a(e=>e+1)));let[l,u]=s(),[d,f]=s(!1),p=h(()=>(i(),l()===void 0?[]:r.list().map(e=>({key:e.id,kind:e.kind,name:e.name,mime:e.mime,src:e.src,download:e.download,load:e.load})))),m=0,g=h(()=>{let e=p().findIndex(e=>e.key===l());return e>=0&&(m=e),Math.min(m,Math.max(0,p().length-1))}),_=()=>u(void 0);return t(J.Provider,{value:{register(e){let t=r.register(e);return{id:t,dispose:()=>r.unregister(t)}},open(e){r.get(e)&&(f(!0),u(e))}},get children(){return[n(()=>e.children),t(o,{get when(){return d()},get children(){return t(c,{get children(){return t(ke,{get open(){return n(()=>l()!==void 0)()&&p().length>0},get items(){return p()},get index(){return g()},onIndex:e=>u(p()[e]?.key),onClose:_})}})}})]}})}var Me=y(`<button type=button class=media-tap><span>`),Ne=y(`<span>`),Pe=y(`<button type=button class=media-retry>Retry`),Fe=y(`<span class="file-chip media-failed"data-media-error> <span class=media-failed-name></span><span class=media-failed-reason>· `),Ie=y(`<button type=button class=media-open><img loading=lazy decoding=async referrerpolicy=no-referrer>`,!0,!1,!1),Le=y(`<button type=button class=media-more>+`),Re=y(`<div class=media-strip role=group>`),ze=g(()=>C(()=>import(`./Lightbox-BlbivCkd.js`),__vite__mapDeps([0,1,2]))),Be=G(2),X=G(3),Z=ye({slots:X});function Ve(){let e=navigator.connection;return e?{type:e.type,effectiveType:e.effectiveType,saveData:e.saveData}:void 0}async function Q(e){return e.startsWith(`/`)?(await Z.load(e)).url:e}var $=a();function He(a){let c=()=>a.image,l=x($),h=e=>l?.(c().key,e),[g,y]=s(fe(c().bytes,Ve())===`tap`?{at:`tap`}:{at:`waiting`}),[S,C]=s(!1),w,T=[],E,D=!1,O=()=>{for(let e of T)e();T=[]};v(()=>{E?.abort(),O()}),ee(()=>{if(typeof IntersectionObserver>`u`)return void C(!0);let e=new IntersectionObserver(e=>e.some(e=>e.isIntersecting)&&C(!0),{rootMargin:`300px 0px`});e.observe(w),v(()=>e.disconnect())});let k=(e,t)=>{if(O(),y({at:`failed`,reason:e}),e.retry&&!D&&c().src){D=!0;let e=c().src,n=setTimeout(()=>g().at===`failed`&&(Z.forget(e),A()),t??1500);v(()=>clearTimeout(n))}};async function A(){let e=c().src;if(!e)return;E?.abort(),E=new AbortController;let t=E.signal;y({at:`waiting`});try{me(c().bytes)&&T.push(await Be.acquire(t))}catch{return O()}try{let n=await Q(e);if(t.aborted)return O();y({at:`loading`,src:n})}catch(e){if(t.aborted)return;if(!(e instanceof K))return k(U(0));k(a.explain?a.explain(e.status,e.code):e.reason,e.retryAfterMs)}}m(()=>{S()&&g().at===`waiting`&&!E&&A()});let j=()=>{O();let e=g();e.at===`loading`&&y({at:`shown`,src:e.src})},M=!1,N=()=>{let e=c().src,t=g();e?.startsWith(`/`)&&t.at!==`failed`&&`src`in t&&t.src.startsWith(`blob:`)&&Z.cached(e)!==t.src&&!M?(M=!0,E=void 0,A()):(e?.startsWith(`/`)&&`src`in t&&Z.cached(e)===t.src&&Z.drop(e),k(e?.startsWith(`/`)?U(415,`type`):U(0)))},P=()=>{let e=c().src;e&&Z.forget(e),E=void 0,A()},F=()=>c().width&&c().height?c().width/c().height:void 0,I=()=>{let e=F();if(e)return{"aspect-ratio":`${c().width} / ${c().height}`,width:`min(100%, ${c().width}px, calc(var(--media-max-h, 220px) * ${e.toFixed(4)}))`}};return t(d,{get children(){return[t(r,{get when(){return n(()=>g().at===`failed`)()&&g()},children:n=>(()=>{var r=Fe(),a=r.firstChild,s=a.nextSibling,l=s.nextSibling;return l.firstChild,e(h,r),f(r,t(b,{name:`file`}),a),f(s,()=>c().name),f(l,()=>n().reason.text,null),f(r,t(o,{get when(){return n().reason.retry},get children(){var e=Pe();return e.$$click=P,e}}),null),i(()=>p(r,`title`,`${c().name}: ${n().reason.text}`)),r})()}),t(r,{when:!0,get children(){var o=Ne();return e(e=>(w=e,h(e)),o),f(o,t(d,{get children(){return[t(r,{get when(){return g().at===`tap`},get children(){var e=Me(),n=e.firstChild;return e.$$click=()=>(y({at:`waiting`}),C(!0)),f(e,t(b,{name:`image`}),n),f(n,()=>_e(c().tool?`screenshot`:`image`,c().bytes)),e}}),t(r,{get when(){return n(()=>g().at===`loading`||g().at===`shown`)()&&g()},children:e=>(()=>{var t=Ie(),n=t.firstChild;return t.$$click=()=>a.onOpen?.(),n.addEventListener(`error`,N),n.addEventListener(`load`,j),p(n,`draggable`,!1),i(r=>{var i=`Open ${c().name}`,a=c().name,o=e().src,s=c().name;return i!==r.e&&p(t,`aria-label`,r.e=i),a!==r.t&&p(t,`title`,r.t=a),o!==r.a&&p(n,`src`,r.a=o),s!==r.o&&p(n,`alt`,r.o=s),r},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()})]}})),i(e=>{var t=`media-box ${a.class??``}`,n=I(),r=c().ref,i=g().at;return t!==e.e&&_(o,e.e=t),e.t=u(o,n,e.t),r!==e.a&&p(o,`data-ref`,e.a=r),i!==e.o&&p(o,`data-state`,e.o=i),e},{e:void 0,t:void 0,a:void 0,o:void 0}),o}})]}})}function Ue(e){let[n,r]=s(),[i,a]=s(!1),l=()=>e.images.filter(e=>e.src),u=Y(),d=new Map,f=(e,t)=>{let n=d.get(e)??new Set;n.add(t),d.set(e,n)},p=e=>{let t;for(let n of d.get(e)??[])n.isConnected?(!t||t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING)&&(t=n):d.get(e).delete(n);return t},h=document.createTextNode(``),g=[],_=new Map;u&&(m(()=>{let e=l();g=e.map(e=>e.key);for(let[t,n]of _){let r=e.find(e=>e.key===t);r&&r.src===n.image.src&&r.name===n.image.name&&r.download===n.image.download||(n.dispose(),_.delete(t))}for(let t of e){if(_.has(t.key))continue;let e=t.key,n=u.register({kind:Ee(t),name:t.name,mime:t.mime,src:t.src,download:t.download,position:()=>h.isConnected&&g.includes(e)?Te(g.indexOf(e),g,p,h):void 0});_.set(e,{...n,image:t})}}),v(()=>{for(let e of _.values())e.dispose();_.clear()}));let y=e=>{if(u){let t=_.get(e)?.id;t&&u.open(t);return}let t=l().findIndex(t=>t.key===e);t<0||(a(!0),r(t))};return[h,t($.Provider,{value:f,get children(){return e.children(y)}}),t(o,{get when(){return!u&&i()},get children(){return t(c,{get children(){return t(ze,{get open(){return n()!==void 0},get items(){return l()},get index(){return n()??0},onIndex:r,onClose:()=>r(void 0)})}})}})]}function We(e){let n=()=>e.max??8;return t(Ue,{get images(){return e.images},children:r=>(()=>{var a=Re();return f(a,t(l,{get each(){return e.images.slice(0,n())},children:e=>t(He,{image:e,class:`media-thumb`,onOpen:()=>r(e.key)})}),null),f(a,t(o,{get when(){return e.images.length>n()},get children(){var t=Le();return t.firstChild,t.$$click=()=>r(e.images[n()].key),f(t,()=>e.images.length-n(),null),t}}),null),i(()=>p(a,`aria-label`,e.label??`Images`)),a})()})}S([`click`]);export{ie as C,L as S,P as T,de as _,X as a,A as b,Y as c,W as d,G as f,z as g,R as h,Q as i,Oe as l,ve as m,He as n,je as o,U as p,We as r,Ae as s,Ue as t,Se as u,I as v,M as w,j as x,T as y};
|