@huynle/hub 0.10.1 → 0.11.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +17 -3
  3. package/package.json +1 -1
  4. package/packages/claude-code/package.json +1 -1
  5. package/packages/cli/dist/hub-cli.js +622 -394
  6. package/packages/cli/package.json +1 -1
  7. package/packages/cli/src/grants-mcp.ts +65 -0
  8. package/packages/cli/src/mcp-operations.ts +49 -0
  9. package/packages/cli/src/mcp.ts +6 -0
  10. package/packages/cli/src/subscriptions-mcp.ts +76 -0
  11. package/packages/cli/src/teams-mcp.ts +5 -3
  12. package/packages/codex/package.json +1 -1
  13. package/packages/node/package.json +1 -1
  14. package/packages/preset/package.json +1 -1
  15. package/packages/protocol/package.json +1 -1
  16. package/packages/protocol/src/teams.ts +4 -0
  17. package/packages/protocol/src/voice-recording.ts +39 -2
  18. package/packages/runtime-openshell/image/entry.sh +3 -1
  19. package/packages/runtime-openshell/image/start.sh +3 -1
  20. package/packages/runtime-openshell/package.json +1 -1
  21. package/packages/runtime-sdk/package.json +1 -1
  22. package/packages/sdk/package.json +1 -1
  23. package/packages/sdk/src/client.ts +13 -0
  24. package/packages/sdk/src/teams.ts +2 -0
  25. package/packages/spoke-sdk/package.json +1 -1
  26. package/src/central/agent/decisions.ts +7 -1
  27. package/src/central/agent/delivery.ts +39 -9
  28. package/src/central/agent/grant-routes.ts +14 -1
  29. package/src/central/agent/grants.ts +23 -0
  30. package/src/central/agent/launch-engine.ts +3 -3
  31. package/src/central/agent/message-limits.ts +3 -0
  32. package/src/central/agent/routes.ts +11 -0
  33. package/src/central/agent/subscriptions.ts +3 -1
  34. package/src/central/config.ts +9 -2
  35. package/src/central/http.ts +102 -20
  36. package/src/central/recording/export.ts +57 -3
  37. package/src/central/recording/index.ts +234 -16
  38. package/src/central/recording/ingest.ts +11 -2
  39. package/src/central/recording/routes.ts +61 -7
  40. package/src/central/recording/schema.ts +66 -2
  41. package/src/central/recording/settings.ts +19 -5
  42. package/src/central/recording/store.ts +19 -0
  43. package/src/central/recording/taps.ts +45 -1
  44. package/src/central/speech/openai.ts +4 -4
  45. package/src/central/speech/openrouter.ts +4 -4
  46. package/src/central/speech/provider.ts +32 -1
  47. package/src/central/speech/service.ts +6 -5
  48. package/src/central/teams/hop-stalls.ts +72 -0
  49. package/src/central/teams/policy.ts +10 -0
  50. package/src/central/teams/routes.ts +2 -0
  51. package/src/central/teams/seats.ts +3 -3
  52. package/src/central/teams/staffing.ts +5 -0
  53. package/src/central/teams/store.ts +5 -2
  54. package/src/central/teams/validation.ts +8 -5
  55. package/web/dist/assets/{ArtifactPage-CsPjam8D.js → ArtifactPage-C5MMqXLN.js} +1 -1
  56. package/web/dist/assets/{ArtifactPane-B9weO8L6.js → ArtifactPane-CXSCmhyJ.js} +1 -1
  57. package/web/dist/assets/{ArtifactWorkbench-DzKhMs3l.js → ArtifactWorkbench-S0RxNGWy.js} +1 -1
  58. package/web/dist/assets/{Diagram-CuRIffka.js → Diagram-BGmyRb-R.js} +1 -1
  59. package/web/dist/assets/{Library-rv5DGtrm.js → Library-CFmMbXEa.js} +2 -2
  60. package/web/dist/assets/{ProfilesDestination-DUuQ9jmd.js → ProfilesDestination-7jpOc2HM.js} +1 -1
  61. package/web/dist/assets/{TeamsPage-D_17MkvN.js → TeamsPage-C1NGrUR-.js} +1 -1
  62. package/web/dist/assets/{Watchtower-DlrNOJ7X.js → Watchtower-DnvlJaU0.js} +2 -2
  63. package/web/dist/assets/{artifacts-But87Jfo.js → artifacts-DlQEYmDl.js} +1 -1
  64. package/web/dist/assets/index-Da8SKXMw.js +33 -0
  65. package/web/dist/assets/{index-rW6LKQj1.css → index-Dyq-jBeE.css} +1 -1
  66. package/web/dist/assets/live-BmqLASSo.js +5 -0
  67. package/web/dist/assets/{pane-layout-BW0RdX5a.js → pane-layout-BAuu_pA3.js} +1 -1
  68. package/web/dist/assets/{renderer2d-DyANQ1WS.js → renderer2d-B2Nh39UN.js} +1 -1
  69. package/web/dist/assets/{renderer3d-vYYKFAJq.js → renderer3d-CTYbljHH.js} +1 -1
  70. package/web/dist/assets/{safe-area-B2Bk__FK.js → safe-area-CkhEclGo.js} +1 -1
  71. package/web/dist/assets/{silero-worker-e802lB5T.js → silero-worker-CC2etKS3.js} +1 -1
  72. package/web/dist/assets/{source-C-De8L3s.js → source-GYayxUxS.js} +1 -1
  73. package/web/dist/assets/{toast-CXTwTvDw.js → toast-q818mjUF.js} +1 -1
  74. package/web/dist/index.html +5 -5
  75. package/web/dist/assets/index-bX8B6NLo.js +0 -33
  76. package/web/dist/assets/live-BGLA-peO.js +0 -5
@@ -249,6 +249,7 @@ export function teamRoutes(deps: TeamRoutesDeps): AgentRoute[] {
249
249
  allow: MANAGE,
250
250
  async handle(context) {
251
251
  const body = await bodyOf(context.request)
252
+ if (body.hopLimit !== undefined && context.actor.kind !== "user") throw new AgentError("forbidden", "Only the user may set a team's hop limit")
252
253
  const key = idempotencyKeyOf(context.request)
253
254
  const { team, created } = await teams.create(context.user.id, body, key === undefined ? {} : { idempotencyKey: key })
254
255
  if (created) await changed(context, "team.create", team.id, teamCreatedEvent(team))
@@ -292,6 +293,7 @@ export function teamRoutes(deps: TeamRoutesDeps): AgentRoute[] {
292
293
  allow: MANAGE,
293
294
  async handle(context) {
294
295
  const { expectedRevision, publish, ...patch } = await bodyOf(context.request)
296
+ if (patch.hopLimit !== undefined && context.actor.kind !== "user") throw new AgentError("forbidden", "Only the user may set a team's hop limit")
295
297
  if (publish !== undefined && typeof publish !== "boolean") throw new AgentError("invalid", "publish must be true or false")
296
298
  const revision = expected(expectedRevision)
297
299
  const { id } = await managed(context)
@@ -47,7 +47,7 @@ export interface TeamSeatRecord extends TeamStaffing {
47
47
  readonly teamVersion: number
48
48
  }
49
49
 
50
- export type DeliveryTeams = ReadonlyMap<string, Pick<TeamDefinition, "mode" | "edges" | "roles" | "state">>
50
+ export type DeliveryTeams = ReadonlyMap<string, Pick<TeamDefinition, "mode" | "edges" | "roles" | "state" | "hopLimit">>
51
51
 
52
52
  export interface DeliveryContext {
53
53
  /** Each asked session's current seats (empty when it holds none). */
@@ -199,11 +199,11 @@ export class TeamSeatStore {
199
199
  /** Seats of several sessions and the teams they are in: teamDeliveryVerdict's inputs (HWA-34). */
200
200
  async deliveryContext(userID: string, sessionIDs: readonly string[]): Promise<DeliveryContext> {
201
201
  const seats = await this.seatsBySession(userID, sessionIDs)
202
- const teams = new Map<string, Pick<TeamDefinition, "mode" | "edges" | "roles" | "state">>()
202
+ const teams = new Map<string, Pick<TeamDefinition, "mode" | "edges" | "roles" | "state" | "hopLimit">>()
203
203
  for (const teamID of new Set([...seats.values()].flat().map((s) => s.teamID))) {
204
204
  try {
205
205
  const team = await this.teams.get(userID, teamID)
206
- if (team) teams.set(teamID, { mode: team.mode, edges: team.edges, roles: team.roles, state: team.state })
206
+ if (team) teams.set(teamID, { mode: team.mode, edges: team.edges, roles: team.roles, state: team.state, ...(team.hopLimit !== undefined ? { hopLimit: team.hopLimit } : {}) })
207
207
  } catch {
208
208
  // A team this build cannot read takes no part in delivery (its seats are then ignored by the verdict).
209
209
  }
@@ -75,6 +75,7 @@ import { readSeatsDoc, type SeatsDoc, TEAM_SEATS } from "./collections"
75
75
  import { teamStaffedEvent, teamUnstaffedEvent } from "./events"
76
76
  import type { TeamSeatRecord, TeamSeatStore } from "./seats"
77
77
  import type { Team, TeamStore } from "./store"
78
+ import type { TeamHopStalls } from "./hop-stalls"
78
79
  import { TEAM_STORE_LIMITS, type TeamRoleSpec } from "./validation"
79
80
 
80
81
  /** One aggregate per team (key: team ID): workspace link, managed members, launch requests, Idempotency-Keys. */
@@ -144,6 +145,8 @@ export interface SeatProfileStatus {
144
145
  export interface RosterSeat {
145
146
  readonly staffing: TeamSeatRecord
146
147
  readonly presence: SessionPresence
148
+ /** An agent-only message to this seat hit the team's hop limit; only the user may renew. */
149
+ readonly stalled?: "hop cap"
147
150
  readonly memberID?: string
148
151
  readonly supervisorMemberID?: string
149
152
  readonly profile?: SeatProfileStatus
@@ -208,6 +211,7 @@ export interface TeamStaffingDeps {
208
211
  readonly members: MembershipStore
209
212
  readonly supervision: SupervisionStore
210
213
  readonly presence: SessionPresenceLookup
214
+ readonly hopStalls?: Pick<TeamHopStalls, "stalled">
211
215
  /** The session's project directory now (grant scope); undefined when no spoke reports it. */
212
216
  readonly sessionDirectory: (userID: string, sessionID: string) => string | undefined
213
217
  readonly launches: Pick<LaunchEngine, "accept" | "view">
@@ -454,6 +458,7 @@ export class TeamStaffingService {
454
458
  seats.push({
455
459
  staffing,
456
460
  presence: presence.get(staffing.sessionID)!,
461
+ ...(await this.deps.hopStalls?.stalled(userID, teamID, staffing.sessionID) ? { stalled: "hop cap" as const } : {}),
457
462
  ...(memberID !== undefined ? { memberID } : {}),
458
463
  ...(supervisorMemberID !== undefined ? { supervisorMemberID } : {}),
459
464
  ...(profile ? { profile } : {}),
@@ -132,6 +132,7 @@ export type PinnedVersions = (userID: string, teamID: string) => Promise<Readonl
132
132
 
133
133
  export interface TeamStoreDeps {
134
134
  readonly state: StateStore
135
+ readonly globalHopLimit?: number
135
136
  readonly now?: Clock
136
137
  readonly newID?: (kind: IdKind) => string
137
138
  readonly limits?: Partial<TeamStoreLimits>
@@ -256,12 +257,14 @@ export class TeamStore {
256
257
  private readonly now: Clock
257
258
  private readonly newID: (kind: IdKind) => string
258
259
  private readonly pinned?: PinnedVersions
260
+ private readonly globalHopLimit: number
259
261
 
260
262
  constructor(deps: TeamStoreDeps) {
261
263
  this.state = deps.state
262
264
  this.now = deps.now ?? Date.now
263
265
  this.newID = deps.newID ?? ((kind) => `${ID_PREFIXES[kind]}_${randomBytes(12).toString("hex")}`)
264
266
  this.pinned = deps.pinnedVersions
267
+ this.globalHopLimit = deps.globalHopLimit ?? 8
265
268
  this.limits = {
266
269
  teamsPerUser: deps.limits?.teamsPerUser ?? TEAM_LIMITS.teamsPerUser,
267
270
  versionsRetained: deps.limits?.versionsRetained ?? TEAM_STORE_LIMITS.versionsRetained,
@@ -277,7 +280,7 @@ export class TeamStore {
277
280
  * another body is a conflict.
278
281
  */
279
282
  async create(userID: string, input: unknown, options: { readonly idempotencyKey?: string } = {}): Promise<{ team: Team; created: boolean }> {
280
- const spec = teamSpecOf(input)
283
+ const spec = teamSpecOf(input, this.globalHopLimit)
281
284
  const key = options.idempotencyKey
282
285
  if (key === undefined) return { team: await this.insert(userID, this.newID("team"), spec), created: true }
283
286
  if (!IDEMPOTENCY_KEY.test(key)) throw new AgentError("invalid", "Idempotency-Key must be 1–200 of A-Z a-z 0-9 _ . : -")
@@ -365,7 +368,7 @@ export class TeamStore {
365
368
  const expected = checkExpected(expectedRevision)
366
369
  return this.mutate(userID, id, expected, (record) => {
367
370
  this.active(record)
368
- const spec = teamPatchOf(record.draft?.spec ?? record.spec, patch)
371
+ const spec = teamPatchOf(record.draft?.spec ?? record.spec, patch, this.globalHopLimit)
369
372
  return { ...record, draft: { baseVersion: record.version, spec, digest: specDigest(spec), savedAt: this.now() } }
370
373
  })
371
374
  }
@@ -63,6 +63,7 @@ export interface TeamSpec {
63
63
  readonly title: string
64
64
  readonly description?: string
65
65
  readonly mode: TeamMode
66
+ readonly hopLimit?: number
66
67
  readonly roles: readonly TeamRoleSpec[]
67
68
  readonly entryRole: string
68
69
  readonly edges: readonly TeamEdge[]
@@ -82,13 +83,13 @@ export interface TeamDiff {
82
83
  readonly projects: { readonly added: readonly string[]; readonly removed: readonly string[] }
83
84
  }
84
85
 
85
- export const SPEC_FIELDS: ReadonlySet<string> = new Set(["name", "title", "description", "mode", "roles", "entryRole", "edges", "tags", "metadata", "projects"])
86
+ export const SPEC_FIELDS: ReadonlySet<string> = new Set(["name", "title", "description", "mode", "hopLimit", "roles", "entryRole", "edges", "tags", "metadata", "projects"])
86
87
  const ROLE_FIELDS = new Set(["name", "label", "description", "externalContact", "responsibilities", "profile", "prefs", "minMembers", "maxMembers"])
87
88
  const EDGE_FIELDS = new Set(["from", "to", "kinds", "direction"])
88
89
  const PROFILE_FIELDS = new Set(["profileID", "version"])
89
90
  const PREFS_FIELDS = new Set(["harness", "model", "machineID"])
90
91
  const REQUIRED = new Set(["title", "mode", "roles", "entryRole"])
91
- const SCALARS = ["title", "description", "mode", "entryRole"] as const
92
+ const SCALARS = ["title", "description", "mode", "entryRole", "hopLimit"] as const
92
93
 
93
94
  const isObj = (v: unknown): v is Record<string, unknown> => typeof v === "object" && v !== null && !Array.isArray(v)
94
95
  const fail = (message: string): never => {
@@ -157,13 +158,14 @@ function normalizedRole(r: Record<string, unknown>): TeamRoleSpec {
157
158
  }
158
159
 
159
160
  /** A validated, normalized team spec; throws AgentError invalid. */
160
- export function teamSpecOf(input: unknown): TeamSpec {
161
+ export function teamSpecOf(input: unknown, globalHopLimit = 8): TeamSpec {
161
162
  if (!isObj(input)) return fail("body must be an object")
162
163
  onlyFields(input, SPEC_FIELDS, "")
163
164
  if (Array.isArray(input.roles)) for (const role of input.roles) if (isObj(role)) onlyFields(role, ROLE_FIELDS, `role ${printable(String(role.name))}: `)
164
165
  if (Array.isArray(input.edges)) for (const edge of input.edges) if (isObj(edge)) onlyFields(edge, EDGE_FIELDS, "edge: ")
165
166
  const problem = teamInputProblem(input)
166
167
  if (problem) fail(problem)
168
+ if (input.hopLimit !== undefined && (input.hopLimit as number) > globalHopLimit) fail(`hopLimit must not exceed the global agents.hopLimit (${globalHopLimit})`)
167
169
  const roles = input.roles as Record<string, unknown>[]
168
170
  for (const role of roles) {
169
171
  const p = roleProblem(role)
@@ -193,6 +195,7 @@ export function teamSpecOf(input: unknown): TeamSpec {
193
195
  title: input.title as string,
194
196
  ...(input.description !== undefined ? { description: input.description as string } : {}),
195
197
  mode: input.mode as TeamMode,
198
+ ...(input.hopLimit !== undefined ? { hopLimit: input.hopLimit as number } : {}),
196
199
  roles: roles.map(normalizedRole),
197
200
  entryRole: input.entryRole as string,
198
201
  edges,
@@ -206,7 +209,7 @@ export function teamSpecOf(input: unknown): TeamSpec {
206
209
  * The spec after a patch: fields replace the base's (roles and edges wholesale), null clears an optional one, the
207
210
  * name never changes (it is the `#team` address), and the result is validated as a whole.
208
211
  */
209
- export function teamPatchOf(base: TeamSpec, patch: unknown): TeamSpec {
212
+ export function teamPatchOf(base: TeamSpec, patch: unknown, globalHopLimit = 8): TeamSpec {
210
213
  if (!isObj(patch)) return fail("body must be an object")
211
214
  onlyFields(patch, SPEC_FIELDS, "")
212
215
  const keys = Object.keys(patch)
@@ -221,7 +224,7 @@ export function teamPatchOf(base: TeamSpec, patch: unknown): TeamSpec {
221
224
  else delete next[key]
222
225
  } else if (value !== undefined) next[key] = value
223
226
  }
224
- return teamSpecOf(next)
227
+ return teamSpecOf(next, globalHopLimit)
225
228
  }
226
229
 
227
230
  /** sha256 of the spec's canonical JSON (key order never matters). */
@@ -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-But87Jfo.js";import{it as s,rt as c}from"./index-bX8B6NLo.js";import{t as l}from"./ArtifactWorkbench-DzKhMs3l.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
+ 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-DlQEYmDl.js";import{it as s,rt as c}from"./index-Da8SKXMw.js";import{t as l}from"./ArtifactWorkbench-S0RxNGWy.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-DzKhMs3l.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};
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-S0RxNGWy.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};
@@ -1,4 +1,4 @@
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-bX8B6NLo.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,`
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-q818mjUF.js";import{n as L,o as R}from"./artifacts-DlQEYmDl.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-Da8SKXMw.js";import{c as Se,i as Ce,n as we,r as Te,t as Ee}from"./source-GYayxUxS.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
2
  `).split(`
3
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
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===`
@@ -1 +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-bX8B6NLo.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
+ 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-Da8SKXMw.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-CsPjam8D.js","assets/ui-CFB4wQfF.js","assets/artifacts-But87Jfo.js","assets/toast-CXTwTvDw.js","assets/pane-layout-BW0RdX5a.js","assets/index-bX8B6NLo.js","assets/plural-Bspvoqfq.js","assets/MediaImage-Ch3ryIdR.js","assets/preload-helper-BLdHbfdN.js","assets/index-rW6LKQj1.css","assets/ArtifactWorkbench-DzKhMs3l.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-bX8B6NLo.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-CsPjam8D.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};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ArtifactPage-C5MMqXLN.js","assets/ui-CFB4wQfF.js","assets/artifacts-DlQEYmDl.js","assets/toast-q818mjUF.js","assets/pane-layout-BAuu_pA3.js","assets/index-Da8SKXMw.js","assets/plural-Bspvoqfq.js","assets/MediaImage-Ch3ryIdR.js","assets/preload-helper-BLdHbfdN.js","assets/index-Dyq-jBeE.css","assets/ArtifactWorkbench-S0RxNGWy.js","assets/source-GYayxUxS.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-q818mjUF.js";import{o as b,t as x}from"./artifacts-DlQEYmDl.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-Da8SKXMw.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-GYayxUxS.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-C5MMqXLN.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};
@@ -1 +1 @@
1
- import{$ as e,B as t,C as n,G as r,I as i,J as a,K as o,N as s,P as c,S as l,T as u,U as d,W as f,b as p,i as m,k as h,t as g,u as _,x as v,y}from"./ui-CFB4wQfF.js";import{T as b,o as x,r as S,s as C,z as w}from"./toast-CXTwTvDw.js";import{t as T}from"./plural-Bspvoqfq.js";import{C as E,D,E as O,S as k,T as A,_ as j,a as M,b as N,c as P,d as F,f as I,g as L,h as R,i as z,it as B,l as V,m as H,n as U,o as W,p as G,r as K,rt as q,s as J,u as ee,v as Y,w as X,x as te,y as Z}from"./index-bX8B6NLo.js";var ne=h(`<fieldset class="prof-editor prof-fieldset"><label>Instructions<textarea rows=6 placeholder="Added after the session's own instructions; local instructions win where they conflict."></textarea></label><label>Preferred model (optional, provider/model)<input type=text placeholder=anthropic/claude-sonnet-4></label><h3>Skills (<!>/<!>)</h3><div><button type=button class="btn small">Add skill</button></div><h3>Commands (<!>/<!>)</h3><p class=prof-note>Templates use <code>{{param}}</code>, <code>{{arguments}}</code> and <code>{{secret:NAME}}</code> (write <code>\\{{</code> for a literal). Secrets are never entered here: the session's machine resolves them.</p><div><button type=button class="btn small">Add command`),re=h(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Body<textarea rows=4>`),ie=h(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Template<textarea rows=3>`),ae=h(`<p class="prof-preview bad">`),oe=h(`<p class=prof-preview>`);function se(e){let a=t=>e.onChange({...e.draft,...t}),o=(t,n)=>a({skills:e.draft.skills.map((e,r)=>r===t?{...e,...n}:e)}),s=(t,n)=>a({commands:e.draft.commands.map((e,r)=>r===t?{...e,...n}:e)});return(()=>{var d=ne(),f=d.firstChild,p=f.firstChild.nextSibling,m=f.nextSibling,h=m.firstChild.nextSibling,g=m.nextSibling,_=g.firstChild.nextSibling,v=_.nextSibling.nextSibling;v.nextSibling;var y=g.nextSibling,b=y.firstChild,x=y.nextSibling,S=x.firstChild.nextSibling,C=S.nextSibling.nextSibling;C.nextSibling;var w=x.nextSibling.nextSibling,T=w.firstChild;return p.$$input=e=>a({instructions:e.currentTarget.value}),h.$$input=e=>a({model:e.currentTarget.value}),l(g,()=>e.draft.skills.length,_),l(g,()=>D.skillsPerProfile,v),l(d,t(c,{get each(){return e.draft.skills},children:(t,n)=>(()=>{var i=re(),s=i.firstChild,c=s.firstChild,l=c.firstChild.nextSibling,d=c.nextSibling,f=d.firstChild.nextSibling,p=d.nextSibling,m=s.nextSibling.firstChild.nextSibling;return u(i,`aria-label`,`Skill ${n+1}`),l.$$input=e=>o(n,{name:e.currentTarget.value}),f.$$input=e=>o(n,{description:e.currentTarget.value}),p.$$click=()=>a({skills:e.draft.skills.filter((e,t)=>t!==n)}),m.$$input=e=>o(n,{body:e.currentTarget.value}),r(e=>{var r=`Remove skill ${t().name||n+1}`,i=D.skillChars;return r!==e.e&&u(p,`aria-label`,e.e=r),i!==e.t&&u(m,`maxlength`,e.t=i),e},{e:void 0,t:void 0}),r(()=>l.value=t().name),r(()=>f.value=t().description),r(()=>m.value=t().body),i})()}),y),b.$$click=()=>a({skills:[...e.draft.skills,{name:``,description:``,body:``}]}),l(x,()=>e.draft.commands.length,S),l(x,()=>D.commandsPerProfile,C),l(d,t(c,{get each(){return e.draft.commands},children:(o,c)=>{let d=()=>H(o().template);return(()=>{var f=ie(),p=f.firstChild,m=p.firstChild,h=m.firstChild.nextSibling,g=m.nextSibling,_=g.firstChild.nextSibling,v=g.nextSibling,y=p.nextSibling.firstChild.nextSibling;return u(f,`aria-label`,`Command ${c+1}`),h.$$input=e=>s(c,{name:e.currentTarget.value}),_.$$input=e=>s(c,{description:e.currentTarget.value}),v.$$click=()=>a({commands:e.draft.commands.filter((e,t)=>t!==c)}),y.$$input=e=>s(c,{template:e.currentTarget.value}),l(f,t(i,{get when(){return o().template.trim()},get children(){return(()=>{let e=d();return`error`in e?(()=>{var t=ae();return l(t,()=>e.error),t})():(()=>{var t=oe();return l(t,(()=>{var t=n(()=>!!e.params.length);return()=>t()?`Asks for: ${e.params.join(`, `)}`:`No parameters`})(),null),l(t,(()=>{var t=n(()=>!!e.secrets.length);return()=>t()?` · Secrets (names only): ${e.secrets.join(`, `)}`:``})(),null),t})()})()}}),null),r(e=>{var t=`Remove command ${o().name||c+1}`,n=D.commandChars;return t!==e.e&&u(v,`aria-label`,e.e=t),n!==e.t&&u(y,`maxlength`,e.t=n),e},{e:void 0,t:void 0}),r(()=>h.value=o().name),r(()=>_.value=o().description),r(()=>y.value=o().template),f})()}}),w),T.$$click=()=>a({commands:[...e.draft.commands,{name:``,description:``,template:``}]}),r(t=>{var n=e.disabled,r=D.instructionsChars,i=e.draft.skills.length>=D.skillsPerProfile,a=e.draft.commands.length>=D.commandsPerProfile;return n!==t.e&&(d.disabled=t.e=n),r!==t.t&&u(p,`maxlength`,t.t=r),i!==t.a&&(b.disabled=t.a=i),a!==t.o&&(T.disabled=t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),r(()=>p.value=e.draft.instructions),r(()=>h.value=e.draft.model),d})()}v([`input`,`click`]);var ce=h(`<select aria-label=Tag><option value>Any tag`),le=h(`<select aria-label=Project><option value>Any project`),ue=h(`<select aria-label=Team><option value>Any team`),de=h(`<select aria-label=Harness><option value>Any harness`),fe=h(`<ul class=prof-items>`),pe=h(`<div class=prof-page><header class=topbar><h1 class=title>Agent profiles</h1><span class=grow></span><button type=button class="btn small primary">New profile</button></header><div><nav class=prof-list aria-label=Profiles><div class=prof-filter role=group aria-label=Show><button type=button class="btn small">Active</button><button type=button class="btn small">Archived</button></div><div class=prof-filters role=group aria-label="Filter and sort"><select aria-label=Usage><option value>Used or not</option><option value=used>Used</option><option value=unused>Unused</option></select><select aria-label=Sort><option value=name>Sort: name</option><option value=updated>Sort: recently updated</option><option value=usage>Sort: most used</option></select></div></nav><section class=prof-detail aria-label=Profile>`),Q=h(`<option>`),$=h(`<p class="error small"role=alert>`),me=h(`<p class="muted small">Loading…`),he=h(`<p class="muted small">`),ge=h(`<p class="muted small">No profile matches these filters.`),_e=h(`<div class=prof-intro><h2>Shared agent profiles</h2><p class=prof-note>Versioned instructions, skills and commands you can pin to any session from its top bar. Saving creates a new version; running sessions keep the version they are pinned to until you upgrade each one.`),ve=h(`<span class=prof-desc>`),ye=h(`<span class=prof-chips>`),be=h(`<li><a class=prof-item><strong></strong><span class=prof-sub> · v`),xe=h(`<span class=prof-tag>`),Se=h(`<span>`),Ce=h(`<form class=prof-editor novalidate><label>Name (2–40 lowercase letters, digits or dashes; can't change later)<input type=text autofocus></label><label>Title<input type=text></label><label>Description (optional)<input type=text></label><label>Tags (comma separated, optional)<input type=text></label><div class=row><button type=submit class="btn small primary">Create v1</button><button type=button class="btn small">Cancel`),we=h(`<div><a class="btn small prof-back"href=/profiles>← Profiles`),Te=h(`<p class=error role=alert>`),Ee=h(`<p class=muted>Loading…`),De=h(`<span class="prof-tag archived">archived`),Oe=h(`<div class=prof-head><h2></h2><span class=prof-tag></span><span class=prof-tag>v</span><span class=grow></span><button type=button class="btn small">`),ke=h(`<p class=prof-note>`),Ae=h(`<div class=prof-tabs role=tablist aria-label="Profile views"><button type=button role=tab class="btn small">Edit</button><button type=button role=tab class="btn small">History</button><button type=button role=tab class="btn small">Used by`),je=h(`<div class="row prof-row-gap"><button type=button class="btn small primary">Save as v</button><button type=button class="btn small">Discard changes`),Me=h(`<p class=prof-note>Versions are immutable. Restoring copies an old version into a new one; nothing is rewritten.`),Ne=h(`<ul class=prof-history aria-label=Versions>`),Pe=h(`<span class=prof-tag>latest`),Fe=h(`<button type=button class="btn small">Restore as v`),Ie=h(`<pre>`),Le=h(`<li><strong>v</strong><span class="muted small"></span><span class=mono></span><span class=grow></span><button type=button class="btn small">View`),Re=h(`<form class=prof-editor aria-label="Edit details"novalidate><p class=prof-note>Optional details for people browsing the library (no secrets): up to 32 keys (lowercase letters, digits, dashes) and 16 projects. Versions don't change.</p><div class=row><button type=button class="btn small">Add detail</button></div><label>Projects (comma separated)<input type=text></label><div class=row><button type=submit class="btn small primary">Save details</button><button type=button class="btn small">Cancel`),ze=h(`<section class=prof-details aria-label=Details>`),Be=h(`<dt>Tags`),Ve=h(`<dd>`),He=h(`<dl class=prof-facts><dt>Latest</dt><dd>v</dd><dt>Updated</dt><dd></dd><dt>Projects</dt><dd>`),Ue=h(`<button type=button class="btn small">Edit details`),We=h(`<span class=muted>none`),Ge=h(`<dt>`),Ke=h(`<div class=prof-meta-row role=group><input type=text aria-label=Key placeholder="key (e.g. owner)"><input type=text aria-label=Value placeholder=value>`),qe=h(`<section class=prof-usage aria-label="Used by">`),Je=h(`<p class=prof-note> Upgrading a session is always explicit; a new version never reaches a running session by itself.`),Ye=h(`<h3>Sessions`),Xe=h(`<ul class=prof-uses aria-label="Pinned sessions">`),Ze=h(`<button type=button class="btn small">More sessions`),Qe=h(`<h3>Team roles`),$e=h(`<ul class=prof-uses aria-label="Team roles">`),et=h(`<h3>Launches`),tt=h(`<ul class=prof-uses aria-label=Launches>`),nt=h(`<h3>Workspaces and projects`),rt=h(`<ul class=prof-uses aria-label=Workspaces>`),it=h(`<p class=prof-note>Projects: `),at=h(`<p class=prof-note>Hidden for this sign-in: <!>.`),ot=h(`<p class=prof-note>Only part of the <!> is listed; the counts are complete.`),st=h(`<p class="muted small">No session pins this profile.`),ct=h(`<span class=prof-tag>running v`),lt=h(`<span class="prof-use older">older`),ut=h(`<a class="btn small">Open session`),dt=h(`<button type=button class="btn small primary">Upgrade to v`),ft=h(`<li><span></span><strong></strong><span class=prof-tag>v</span><span class="muted small"></span><span class=grow>`),pt=h(`<p class="muted small">No team role names this profile.`),mt=h(`<span class="muted small">`),ht=h(`<li><a></a><span>role <strong></strong></span><span class=prof-tag>`),gt=h(`<p class="muted small">No retained launch named this profile.`),_t=h(`<li><span class=mono></span><span class=prof-tag></span><span class=prof-tag>v</span><span class="muted small">`),vt=h(`<p class="muted small">The pinned sessions are in no workspace or project.`),yt=h(`<li><strong></strong><span class="muted small">`),bt=e=>e?`/profiles?id=${encodeURIComponent(e)}`:`/profiles`,xt=()=>b.some(e=>e.route===`/teams`);function St(e){let[n,c]=a(`active`),[d,h]=a(!1),[g,{refetch:_}]=o(n,e=>W(e).then(e=>e.items)),[v,b]=a({}),[x,S]=a(`name`),w=f(()=>te(g()??[])),T=f(()=>X(N(g()??[],v()),x())),D=e=>t=>b({...v(),[e]:t.currentTarget.value||void 0});return(()=>{var a=pe(),o=a.firstChild,f=o.firstChild,b=f.nextSibling.nextSibling,O=o.nextSibling,k=O.firstChild,A=k.firstChild,j=A.firstChild,M=j.nextSibling,N=A.nextSibling,P=N.firstChild,F=P.nextSibling,I=k.nextSibling;return l(o,t(i,{get when(){return q()},get children(){return t(m,{icon:`menu`,label:`Open sidebar`,onClick:B})}}),f),b.$$click=()=>h(!0),j.$$click=()=>c(`active`),M.$$click=()=>c(`archived`),l(N,t(i,{get when(){return w().tags.length},get children(){var e=ce();return e.firstChild,y(e,`change`,D(`tag`)),l(e,t(s,{get each(){return w().tags},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().tag??``),e}}),P),l(N,t(i,{get when(){return w().projects.length},get children(){var e=le();return e.firstChild,y(e,`change`,D(`project`)),l(e,t(s,{get each(){return w().projects},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().project??``),e}}),P),l(N,t(i,{get when(){return w().teams.length},get children(){var e=ue();return e.firstChild,y(e,`change`,D(`team`)),l(e,t(s,{get each(){return w().teams},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().team??``),e}}),P),l(N,t(i,{get when(){return w().harnesses.length},get children(){var e=de();return e.firstChild,y(e,`change`,D(`harness`)),l(e,t(s,{get each(){return w().harnesses},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().harness??``),e}}),P),y(P,`change`,D(`used`)),F.addEventListener(`change`,e=>S(e.currentTarget.value)),l(k,t(i,{get when(){return!g.error},get fallback(){return(()=>{var e=$();return l(e,()=>E(g.error)),e})()},get children(){return t(i,{get when(){return g()},get fallback(){return me()},get children(){return t(i,{get when(){return g().length},get fallback(){return(()=>{var e=he();return l(e,()=>n()===`active`?`No profiles yet. Create one to share instructions, skills and commands across sessions.`:`No archived profiles.`),e})()},get children(){return t(i,{get when(){return T().length},get fallback(){return ge()},get children(){var n=fe();return l(n,t(s,{get each(){return T()},children:n=>t(Ct,{entry:n,get current(){return n.profile.id===e.id}})})),n}})}})}})}}),null),l(I,t(i,{get when(){return e.id},keyed:!0,get fallback(){return _e()},children:e=>t(Tt,{id:e,onChanged:()=>void _()})})),l(a,t(i,{get when(){return d()},get children(){return t(wt,{onClose:()=>h(!1),onCreated:e=>{h(!1),c(`active`),_(),C(bt(e.id))}})}}),null),r(t=>{var r=`prof-body${e.id?` has-detail`:``}`,i=n()===`active`,a=n()===`archived`;return r!==t.e&&p(O,t.e=r),i!==t.t&&u(j,`aria-pressed`,t.t=i),a!==t.a&&u(M,`aria-pressed`,t.a=a),t},{e:void 0,t:void 0,a:void 0}),r(()=>P.value=v().used??``),r(()=>F.value=x()),a})()}function Ct(e){let a=()=>e.entry.profile,o=()=>e.entry.summary,c=()=>O(e.entry.usage);return(()=>{var d=be(),f=d.firstChild,m=f.firstChild,h=m.nextSibling,g=h.firstChild;return l(m,()=>a().title),l(f,t(i,{get when(){return a().description},get children(){var e=ve();return l(e,()=>a().description),e}}),h),l(h,()=>a().name,g),l(h,()=>a().latestVersion,null),l(h,t(i,{get when(){return o()},children:e=>` · ${T(e().skills,`skill`)} · ${T(e().commands,`command`)}`}),null),l(h,(()=>{var e=n(()=>!!a().updatedAt);return()=>e()?` · updated ${_(a().updatedAt)}`:``})(),null),l(f,t(i,{get when(){return a().tags.length||c().length},get children(){var e=ye();return l(e,t(s,{get each(){return a().tags},children:e=>(()=>{var t=xe();return l(t,e),t})()}),null),l(e,t(s,{get each(){return c()},children:e=>(()=>{var t=Se();return l(t,e),r(()=>p(t,`prof-use${e===`Unused`?` unused`:/older/.test(e)?` older`:``}`)),t})()}),null),e}}),null),r(t=>{var n=bt(a().id),r=e.current?`page`:void 0,i=`${a().title} (${a().name})`;return n!==t.e&&u(f,`href`,t.e=n),r!==t.t&&u(f,`aria-current`,t.t=r),i!==t.a&&u(f,`aria-label`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),d})()}function wt(e){let[n,o]=a({name:``,title:``,description:``,tags:``}),[s,c]=a(Z()),[u,d]=a(``),[f,p]=a(!1),m=J(),h=async t=>{t.preventDefault();let r=R(n(),s());if(!r.ok)return d(r.error);p(!0),d(``);try{let t=await K(r.body,m);S(`Created ${t.name} v1`),e.onCreated(t)}catch(e){e instanceof w||(m=J()),d(E(e))}finally{p(!1)}},_=e=>t=>o({...n(),[e]:t.currentTarget.value});return t(g,{open:!0,wide:!0,title:`New agent profile`,get onClose(){return e.onClose},class:`prof-dialog`,get children(){var a=Ce(),o=a.firstChild,d=o.firstChild.nextSibling,p=o.nextSibling,m=p.firstChild.nextSibling,g=p.nextSibling,v=g.firstChild.nextSibling,b=g.nextSibling,x=b.firstChild.nextSibling,S=b.nextSibling,C=S.firstChild,w=C.nextSibling;return a.addEventListener(`submit`,e=>void h(e)),y(d,`input`,_(`name`),!0),y(m,`input`,_(`title`),!0),y(v,`input`,_(`description`),!0),y(x,`input`,_(`tags`),!0),l(a,t(se,{get draft(){return s()},onChange:c}),S),l(a,t(i,{get when(){return u()},get children(){var e=$();return l(e,u),e}}),S),y(w,`click`,e.onClose,!0),r(()=>C.disabled=f()),r(()=>d.value=n().name),r(()=>m.value=n().title),r(()=>v.value=n().description),r(()=>x.value=n().tags),a}})}function Tt(c){let[f,p]=a(),[m,h]=a(),[g,v]=a(Z()),[y,b]=a(``),[x,C]=a(``),[T,D]=a(!1),[O,k]=a(`edit`),A=J(),N=async(e=!1)=>{b(``);try{let{profile:t}=await M(c.id),n=await z(t.id,t.latestVersion);p(t),h(n),e||v(Y(n.content))}catch(e){b(E(e))}};d(e(()=>c.id,()=>void N()));let[P,{refetch:F}]=o(()=>O()===`history`?`${c.id}#${f()?.latestVersion??0}`:void 0,()=>I(c.id).then(e=>e.items)),R=()=>!!m()&&L(g(),m().content),B=async(e,t)=>{A=J(),S(t),c.onChanged(),p(e),await N(),F()},V=async e=>{e instanceof w||(A=J()),C(E(e)),e.code===`conflict`&&(await N(!0),c.onChanged())},H=async()=>{let e=f(),t=m();if(!e||!t)return;let n=j(g());if(!n.ok)return C(n.error);if(!L(g(),t.content))return C(`Nothing changed since v${e.latestVersion}.`);D(!0),C(``);try{let t=await U(e.id,{expectedRevision:e.revision,content:n.content},A);await B(t,`Saved ${t.name} v${t.latestVersion}. Pinned sessions keep their version until you upgrade them.`)}catch(e){await V(e)}finally{D(!1)}},W=async e=>{let t=f();if(t){D(!0),C(``);try{let n=await U(t.id,{expectedRevision:t.revision,fromVersion:e},A);await B(n,`Restored v${e} as v${n.latestVersion}`)}catch(e){await V(e)}finally{D(!1)}}},G=async e=>{let t=f();if(t){D(!0),C(``);try{let n=await ee(t,e);p(n),c.onChanged(),S(e?`Archived ${n.name}. Pinned sessions keep their version; it can't be pinned again until unarchived.`:`Unarchived ${n.name}`)}catch(e){await V(e)}finally{D(!1)}}},[K,q]=a(),X=async e=>{try{let t=await z(c.id,e);q({version:e,text:JSON.stringify(t.content,null,2)})}catch(e){C(E(e))}};return(()=>{var e=we();return e.firstChild,l(e,t(i,{get when(){return!y()},get fallback(){return(()=>{var e=Te();return l(e,y),e})()},get children(){return t(i,{get when(){return f()},get fallback(){return Ee()},children:e=>[(()=>{var n=Oe(),a=n.firstChild,o=a.nextSibling,s=o.nextSibling;s.firstChild;var c=s.nextSibling,u=c.nextSibling;return l(a,()=>e().title),l(o,()=>e().name),l(s,()=>e().latestVersion,null),l(n,t(i,{get when(){return e().state===`archived`},get children(){return De()}}),c),u.$$click=()=>void G(e().state!==`archived`),l(u,()=>e().state===`archived`?`Unarchive`:`Archive`),r(()=>u.disabled=T()),n})(),t(i,{get when(){return e().description},get children(){var t=ke();return l(t,()=>e().description),t}}),t(Et,{get profile(){return e()},get latest(){return m()},onSaved:e=>{p(e),c.onChanged()},onConflict:async()=>{await N(!0),c.onChanged()}}),(()=>{var e=Ae(),t=e.firstChild,n=t.nextSibling,i=n.nextSibling;return t.$$click=()=>k(`edit`),n.$$click=()=>k(`history`),i.$$click=()=>k(`usage`),r(e=>{var r=O()===`edit`,a=O()===`history`,o=O()===`usage`;return r!==e.e&&u(t,`aria-selected`,e.e=r),a!==e.t&&u(n,`aria-selected`,e.t=a),o!==e.a&&u(i,`aria-selected`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),e})(),t(i,{get when(){return x()},get children(){var e=$();return l(e,x),e}}),t(i,{get when(){return O()===`edit`},get children(){return[(()=>{var t=ke();return l(t,(()=>{var t=n(()=>e().state===`archived`);return()=>t()?`Unarchive to edit or pin this profile.`:`Saving creates v${e().latestVersion+1}. Sessions pinned to an earlier version keep it until you upgrade each one.`})()),t})(),t(se,{get draft(){return g()},onChange:v,get disabled(){return e().state===`archived`||T()}}),(()=>{var t=je(),n=t.firstChild;n.firstChild;var i=n.nextSibling;return n.$$click=()=>void H(),l(n,()=>e().latestVersion+1,null),i.$$click=()=>(v(Y(m().content)),C(``)),r(t=>{var r=T()||e().state===`archived`||!R(),a=T()||!R();return r!==t.e&&(n.disabled=t.e=r),a!==t.t&&(i.disabled=t.t=a),t},{e:void 0,t:void 0}),t})()]}}),t(i,{get when(){return O()===`usage`},get children(){return t(Ot,{get profile(){return e()},get onChanged(){return c.onChanged}})}}),t(i,{get when(){return O()===`history`},get children(){return[Me(),t(i,{get when(){return n(()=>!P.error)()&&P()},get fallback(){return(()=>{var e=he();return l(e,(()=>{var e=n(()=>!!P.error);return()=>e()?E(P.error):`Loading…`})()),e})()},get children(){var a=Ne();return l(a,t(s,{get each(){return P()},children:a=>(()=>{var o=Le(),s=o.firstChild;s.firstChild;var c=s.nextSibling,d=c.nextSibling,f=d.nextSibling.nextSibling;return l(s,()=>a.version,null),l(o,t(i,{get when(){return a.version===e().latestVersion},get children(){return Pe()}}),c),l(c,()=>_(a.createdAt)),l(d,()=>a.digest.slice(0,12)),f.$$click=()=>void X(a.version),l(o,t(i,{get when(){return n(()=>a.version!==e().latestVersion)()&&e().state!==`archived`},get children(){var t=Fe();return t.firstChild,t.$$click=()=>void W(a.version),l(t,()=>e().latestVersion+1,null),r(()=>t.disabled=T()),t}}),null),l(o,t(i,{get when(){return K()?.version===a.version},get children(){var e=Ie();return l(e,()=>K().text),r(()=>u(e,`aria-label`,`Version ${a.version} content`)),e}}),null),r(()=>u(d,`title`,a.digest)),o})()})),a}})]}})]})}}),null),e})()}function Et(e){let[o,c]=a(!1),[d,f]=a([]),[p,h]=a(``),[g,v]=a(``),[y,b]=a(!1),x=()=>Object.entries(e.profile.metadata),C=()=>{f([...x().map(([e,t])=>({key:e,value:t})),{key:``,value:``}]),h(e.profile.projects.join(`, `)),v(``),c(!0)},w=(e,t,n)=>f(d().map((r,i)=>i===e?{...r,[t]:n}:r)),D=async t=>{t.preventDefault();let n=k(d(),p());if(!n.ok)return v(n.error);b(!0),v(``);try{let t=await F(e.profile,n.patch);c(!1),S(`Saved the details of ${t.name}`),e.onSaved(t)}catch(t){v(E(t)),t.code===`conflict`&&await e.onConflict()}finally{b(!1)}},O=()=>e.latest?.content;return(()=>{var a=ze();return l(a,t(i,{get when(){return o()},get fallback(){return[(()=>{var r=He(),a=r.firstChild.nextSibling;a.firstChild;var o=a.nextSibling.nextSibling,c=o.nextSibling,u=c.nextSibling;return l(a,()=>e.profile.latestVersion,null),l(a,t(i,{get when(){return O()},children:e=>` · ${e().instructions?`instructions · `:``}${T(e().skills.length,`skill`)} · ${T(e().commands.length,`command`)}${e().model?` · ${e().model}`:``}`}),null),l(o,(()=>{var t=n(()=>!!e.profile.updatedAt);return()=>t()?_(e.profile.updatedAt):`—`})()),l(r,t(i,{get when(){return e.profile.tags.length},get children(){return[Be(),(()=>{var t=Ve();return l(t,()=>e.profile.tags.join(`, `)),t})()]}}),c),l(u,(()=>{var t=n(()=>!!e.profile.projects.length);return()=>t()?e.profile.projects.join(`, `):We()})()),l(r,t(s,{get each(){return x()},children:([e,t])=>[(()=>{var t=Ge();return l(t,e),t})(),(()=>{var e=Ve();return l(e,t),e})()]}),null),r})(),(()=>{var e=Ue();return e.$$click=C,e})()]},get children(){var e=Re(),n=e.firstChild.nextSibling,a=n.firstChild,o=n.nextSibling,_=o.firstChild.nextSibling,v=o.nextSibling,b=v.firstChild,x=b.nextSibling;return e.addEventListener(`submit`,e=>void D(e)),l(e,t(s,{get each(){return d()},children:(e,n)=>(()=>{var i=Ke(),a=i.firstChild,o=a.nextSibling;return a.$$input=e=>w(n(),`key`,e.currentTarget.value),o.$$input=e=>w(n(),`value`,e.currentTarget.value),l(i,t(m,{icon:`close`,get label(){return`Remove detail ${n()+1}`},type:`button`,onClick:()=>f(d().filter((e,t)=>t!==n()))}),null),r(()=>u(i,`aria-label`,`Detail ${n()+1}`)),r(()=>a.value=e.key),r(()=>o.value=e.value),i})()}),n),a.$$click=()=>f([...d(),{key:``,value:``}]),_.$$input=e=>h(e.currentTarget.value),l(e,t(i,{get when(){return g()},get children(){var e=$();return l(e,g),e}}),v),x.$$click=()=>c(!1),r(()=>b.disabled=y()),r(()=>_.value=p()),e}})),a})()}var Dt={sessions:`sessions (needs sessions:read)`,teams:`team roles (needs teams:read)`,launches:`launches (needs sessions:launch)`,workspaces:`workspaces (needs workspaces:read)`};function Ot(c){let[f,{refetch:m}]=o(()=>c.profile.id+`#`+c.profile.latestVersion,()=>V(c.profile.id)),[h,g]=a([]),[v,y]=a(),[b,x]=a();d(e(f,e=>(g([]),y(e?.cursor))));let C=()=>[...f()?.sessions??[],...h()],w=async()=>{let e=v();if(e)try{let t=await V(c.profile.id,e);g([...h(),...t.sessions]),y(t.cursor)}catch(e){S(E(e))}},D=async(e,t)=>{x(e);try{await P(e,{profileID:c.profile.id,version:c.profile.latestVersion,expectedRevision:t}),S(`Asked ${e} to run v${c.profile.latestVersion}; it confirms on its next turn.`),c.onChanged(),m()}catch(e){S(E(e)),m()}finally{x(void 0)}},O=()=>{let e=f()?.counts;return e?[e.sessions===void 0?``:`${T(e.sessions,`session`)}${e.olderVersion?` (${e.olderVersion} on older versions)`:``}`,e.teamRoles===void 0?``:T(e.teamRoles,`team role`),e.launches===void 0?``:T(e.launches,`launch`),e.workspaces===void 0?``:T(e.workspaces,`workspace`)].filter(Boolean).join(` · `):``};return(()=>{var e=qe();return l(e,t(i,{get when(){return!f.error},get fallback(){return(()=>{var e=$();return l(e,()=>E(f.error)),e})()},get children(){return t(i,{get when(){return f()},get fallback(){return me()},children:e=>[(()=>{var e=Je(),t=e.firstChild;return l(e,(()=>{var e=n(()=>!!O());return()=>e()?`${O()}.`:`Nothing you can see uses this profile.`})(),t),e})(),t(i,{get when(){return!e().hidden.includes(`sessions`)},get children(){return[Ye(),t(i,{get when(){return C().length},get fallback(){return st()},get children(){return[(()=>{var e=Xe();return l(e,t(s,{get each(){return C()},children:e=>(()=>{var a=ft(),o=a.firstChild,s=o.nextSibling,d=s.nextSibling;d.firstChild;var f=d.nextSibling;return f.nextSibling,l(s,(()=>{var t=n(()=>!!e.name);return()=>t()?`@${e.name}`:e.title??e.sessionID})()),l(d,()=>e.version,null),l(a,t(i,{get when(){return n(()=>e.running!==void 0)()&&e.running!==e.version},get children(){var t=ct();return t.firstChild,l(t,()=>e.running,null),t}}),f),l(a,t(i,{get when(){return e.olderVersion},get children(){return lt()}}),f),l(f,()=>[e.ack?G[e.ack]+(e.offline?` (offline)`:``):``,e.harness??``,e.machineID??``,e.project??``,e.known?``:`session gone`].filter(Boolean).join(` · `)),l(a,t(i,{get when(){return e.known},get children(){var t=ut();return r(()=>u(t,`href`,`/s/${encodeURIComponent(e.sessionID)}`)),t}}),null),l(a,t(i,{get when(){return n(()=>!!e.olderVersion)()&&c.profile.state===`active`},get children(){var t=dt();return t.firstChild,t.$$click=()=>void D(e.sessionID,e.revision),l(t,()=>c.profile.latestVersion,null),r(()=>t.disabled=b()===e.sessionID),t}}),null),r(t=>{var n=`prof-dot${e.online?` on`:``}`,r=e.online?`online`:`offline`;return n!==t.e&&p(o,t.e=n),r!==t.t&&u(o,`title`,t.t=r),t},{e:void 0,t:void 0}),a})()})),e})(),t(i,{get when(){return v()},get children(){var e=Ze();return e.$$click=()=>void w(),e}})]}})]}}),t(i,{get when(){return!e().hidden.includes(`teams`)},get children(){return[Qe(),t(i,{get when(){return e().teamRoles.length},get fallback(){return pt()},get children(){var a=$e();return l(a,t(s,{get each(){return e().teamRoles},children:e=>(()=>{var a=ht(),o=a.firstChild,s=o.nextSibling,c=s.firstChild.nextSibling,d=s.nextSibling;return l(o,()=>e.teamTitle),l(c,()=>e.label??e.role),l(d,(()=>{var t=n(()=>e.version!==void 0);return()=>t()?`v${e.version}`:`latest`})()),l(a,t(i,{get when(){return e.staffed!==void 0},get children(){var t=mt();return l(t,()=>T(e.staffed,`staffed seat`)),t}}),null),r(()=>u(o,`href`,A(e.teamID,xt()))),a})()})),a}})]}}),t(i,{get when(){return!e().hidden.includes(`launches`)},get children(){return[et(),t(i,{get when(){return e().launches.length},get fallback(){return gt()},get children(){var a=tt();return l(a,t(s,{get each(){return e().launches},children:e=>(()=>{var a=_t(),o=a.firstChild,s=o.nextSibling,c=s.nextSibling;c.firstChild;var d=c.nextSibling;return l(o,()=>e.id),l(s,()=>e.state,null),l(s,(()=>{var t=n(()=>!!e.outcome);return()=>t()?` (${e.outcome})`:``})(),null),l(c,()=>e.version,null),l(d,()=>_(e.updated)),l(a,t(i,{get when(){return e.sessionID},get children(){var t=ut();return r(()=>u(t,`href`,`/s/${encodeURIComponent(e.sessionID)}`)),t}}),null),a})()})),a}})]}}),t(i,{get when(){return!e().hidden.includes(`workspaces`)},get children(){return[nt(),t(i,{get when(){return e().workspaces.length||e().projects.length},get fallback(){return vt()},get children(){return[(()=>{var n=rt();return l(n,t(s,{get each(){return e().workspaces},children:e=>(()=>{var t=yt(),n=t.firstChild,r=n.nextSibling;return l(n,()=>e.title??e.workspaceID),l(r,()=>T(e.sessions,`pinned session`)),t})()})),n})(),t(i,{get when(){return e().projects.length},get children(){var t=it();return t.firstChild,l(t,()=>e().projects.join(`, `),null),t}})]}})]}}),t(i,{get when(){return e().hidden.length},get children(){var t=at(),n=t.firstChild.nextSibling;return n.nextSibling,l(t,()=>e().hidden.map(e=>Dt[e]??e).join(`, `),n),t}}),t(i,{get when(){return e().truncated.length},get children(){var t=ot(),n=t.firstChild.nextSibling;return n.nextSibling,l(t,()=>e().truncated.join(`, `),n),t}})]})}})),e})()}v([`click`,`input`]);function kt(){return t(St,{get id(){return x().searchParams.get(`id`)??void 0}})}export{kt as default};
1
+ import{$ as e,B as t,C as n,G as r,I as i,J as a,K as o,N as s,P as c,S as l,T as u,U as d,W as f,b as p,i as m,k as h,t as g,u as _,x as v,y}from"./ui-CFB4wQfF.js";import{T as b,o as x,r as S,s as C,z as w}from"./toast-q818mjUF.js";import{t as T}from"./plural-Bspvoqfq.js";import{C as E,D,E as O,S as k,T as A,_ as j,a as M,b as N,c as P,d as F,f as I,g as L,h as R,i as z,it as B,l as V,m as H,n as U,o as W,p as G,r as K,rt as q,s as J,u as ee,v as Y,w as X,x as te,y as Z}from"./index-Da8SKXMw.js";var ne=h(`<fieldset class="prof-editor prof-fieldset"><label>Instructions<textarea rows=6 placeholder="Added after the session's own instructions; local instructions win where they conflict."></textarea></label><label>Preferred model (optional, provider/model)<input type=text placeholder=anthropic/claude-sonnet-4></label><h3>Skills (<!>/<!>)</h3><div><button type=button class="btn small">Add skill</button></div><h3>Commands (<!>/<!>)</h3><p class=prof-note>Templates use <code>{{param}}</code>, <code>{{arguments}}</code> and <code>{{secret:NAME}}</code> (write <code>\\{{</code> for a literal). Secrets are never entered here: the session's machine resolves them.</p><div><button type=button class="btn small">Add command`),re=h(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Body<textarea rows=4>`),ie=h(`<div class=prof-part role=group><div class=prof-part-head><label>Name<input type=text title="2–40 lowercase letters, digits or dashes"></label><label>Description<input type=text></label><button type=button class="btn small danger">Remove</button></div><label>Template<textarea rows=3>`),ae=h(`<p class="prof-preview bad">`),oe=h(`<p class=prof-preview>`);function se(e){let a=t=>e.onChange({...e.draft,...t}),o=(t,n)=>a({skills:e.draft.skills.map((e,r)=>r===t?{...e,...n}:e)}),s=(t,n)=>a({commands:e.draft.commands.map((e,r)=>r===t?{...e,...n}:e)});return(()=>{var d=ne(),f=d.firstChild,p=f.firstChild.nextSibling,m=f.nextSibling,h=m.firstChild.nextSibling,g=m.nextSibling,_=g.firstChild.nextSibling,v=_.nextSibling.nextSibling;v.nextSibling;var y=g.nextSibling,b=y.firstChild,x=y.nextSibling,S=x.firstChild.nextSibling,C=S.nextSibling.nextSibling;C.nextSibling;var w=x.nextSibling.nextSibling,T=w.firstChild;return p.$$input=e=>a({instructions:e.currentTarget.value}),h.$$input=e=>a({model:e.currentTarget.value}),l(g,()=>e.draft.skills.length,_),l(g,()=>D.skillsPerProfile,v),l(d,t(c,{get each(){return e.draft.skills},children:(t,n)=>(()=>{var i=re(),s=i.firstChild,c=s.firstChild,l=c.firstChild.nextSibling,d=c.nextSibling,f=d.firstChild.nextSibling,p=d.nextSibling,m=s.nextSibling.firstChild.nextSibling;return u(i,`aria-label`,`Skill ${n+1}`),l.$$input=e=>o(n,{name:e.currentTarget.value}),f.$$input=e=>o(n,{description:e.currentTarget.value}),p.$$click=()=>a({skills:e.draft.skills.filter((e,t)=>t!==n)}),m.$$input=e=>o(n,{body:e.currentTarget.value}),r(e=>{var r=`Remove skill ${t().name||n+1}`,i=D.skillChars;return r!==e.e&&u(p,`aria-label`,e.e=r),i!==e.t&&u(m,`maxlength`,e.t=i),e},{e:void 0,t:void 0}),r(()=>l.value=t().name),r(()=>f.value=t().description),r(()=>m.value=t().body),i})()}),y),b.$$click=()=>a({skills:[...e.draft.skills,{name:``,description:``,body:``}]}),l(x,()=>e.draft.commands.length,S),l(x,()=>D.commandsPerProfile,C),l(d,t(c,{get each(){return e.draft.commands},children:(o,c)=>{let d=()=>H(o().template);return(()=>{var f=ie(),p=f.firstChild,m=p.firstChild,h=m.firstChild.nextSibling,g=m.nextSibling,_=g.firstChild.nextSibling,v=g.nextSibling,y=p.nextSibling.firstChild.nextSibling;return u(f,`aria-label`,`Command ${c+1}`),h.$$input=e=>s(c,{name:e.currentTarget.value}),_.$$input=e=>s(c,{description:e.currentTarget.value}),v.$$click=()=>a({commands:e.draft.commands.filter((e,t)=>t!==c)}),y.$$input=e=>s(c,{template:e.currentTarget.value}),l(f,t(i,{get when(){return o().template.trim()},get children(){return(()=>{let e=d();return`error`in e?(()=>{var t=ae();return l(t,()=>e.error),t})():(()=>{var t=oe();return l(t,(()=>{var t=n(()=>!!e.params.length);return()=>t()?`Asks for: ${e.params.join(`, `)}`:`No parameters`})(),null),l(t,(()=>{var t=n(()=>!!e.secrets.length);return()=>t()?` · Secrets (names only): ${e.secrets.join(`, `)}`:``})(),null),t})()})()}}),null),r(e=>{var t=`Remove command ${o().name||c+1}`,n=D.commandChars;return t!==e.e&&u(v,`aria-label`,e.e=t),n!==e.t&&u(y,`maxlength`,e.t=n),e},{e:void 0,t:void 0}),r(()=>h.value=o().name),r(()=>_.value=o().description),r(()=>y.value=o().template),f})()}}),w),T.$$click=()=>a({commands:[...e.draft.commands,{name:``,description:``,template:``}]}),r(t=>{var n=e.disabled,r=D.instructionsChars,i=e.draft.skills.length>=D.skillsPerProfile,a=e.draft.commands.length>=D.commandsPerProfile;return n!==t.e&&(d.disabled=t.e=n),r!==t.t&&u(p,`maxlength`,t.t=r),i!==t.a&&(b.disabled=t.a=i),a!==t.o&&(T.disabled=t.o=a),t},{e:void 0,t:void 0,a:void 0,o:void 0}),r(()=>p.value=e.draft.instructions),r(()=>h.value=e.draft.model),d})()}v([`input`,`click`]);var ce=h(`<select aria-label=Tag><option value>Any tag`),le=h(`<select aria-label=Project><option value>Any project`),ue=h(`<select aria-label=Team><option value>Any team`),de=h(`<select aria-label=Harness><option value>Any harness`),fe=h(`<ul class=prof-items>`),pe=h(`<div class=prof-page><header class=topbar><h1 class=title>Agent profiles</h1><span class=grow></span><button type=button class="btn small primary">New profile</button></header><div><nav class=prof-list aria-label=Profiles><div class=prof-filter role=group aria-label=Show><button type=button class="btn small">Active</button><button type=button class="btn small">Archived</button></div><div class=prof-filters role=group aria-label="Filter and sort"><select aria-label=Usage><option value>Used or not</option><option value=used>Used</option><option value=unused>Unused</option></select><select aria-label=Sort><option value=name>Sort: name</option><option value=updated>Sort: recently updated</option><option value=usage>Sort: most used</option></select></div></nav><section class=prof-detail aria-label=Profile>`),Q=h(`<option>`),$=h(`<p class="error small"role=alert>`),me=h(`<p class="muted small">Loading…`),he=h(`<p class="muted small">`),ge=h(`<p class="muted small">No profile matches these filters.`),_e=h(`<div class=prof-intro><h2>Shared agent profiles</h2><p class=prof-note>Versioned instructions, skills and commands you can pin to any session from its top bar. Saving creates a new version; running sessions keep the version they are pinned to until you upgrade each one.`),ve=h(`<span class=prof-desc>`),ye=h(`<span class=prof-chips>`),be=h(`<li><a class=prof-item><strong></strong><span class=prof-sub> · v`),xe=h(`<span class=prof-tag>`),Se=h(`<span>`),Ce=h(`<form class=prof-editor novalidate><label>Name (2–40 lowercase letters, digits or dashes; can't change later)<input type=text autofocus></label><label>Title<input type=text></label><label>Description (optional)<input type=text></label><label>Tags (comma separated, optional)<input type=text></label><div class=row><button type=submit class="btn small primary">Create v1</button><button type=button class="btn small">Cancel`),we=h(`<div><a class="btn small prof-back"href=/profiles>← Profiles`),Te=h(`<p class=error role=alert>`),Ee=h(`<p class=muted>Loading…`),De=h(`<span class="prof-tag archived">archived`),Oe=h(`<div class=prof-head><h2></h2><span class=prof-tag></span><span class=prof-tag>v</span><span class=grow></span><button type=button class="btn small">`),ke=h(`<p class=prof-note>`),Ae=h(`<div class=prof-tabs role=tablist aria-label="Profile views"><button type=button role=tab class="btn small">Edit</button><button type=button role=tab class="btn small">History</button><button type=button role=tab class="btn small">Used by`),je=h(`<div class="row prof-row-gap"><button type=button class="btn small primary">Save as v</button><button type=button class="btn small">Discard changes`),Me=h(`<p class=prof-note>Versions are immutable. Restoring copies an old version into a new one; nothing is rewritten.`),Ne=h(`<ul class=prof-history aria-label=Versions>`),Pe=h(`<span class=prof-tag>latest`),Fe=h(`<button type=button class="btn small">Restore as v`),Ie=h(`<pre>`),Le=h(`<li><strong>v</strong><span class="muted small"></span><span class=mono></span><span class=grow></span><button type=button class="btn small">View`),Re=h(`<form class=prof-editor aria-label="Edit details"novalidate><p class=prof-note>Optional details for people browsing the library (no secrets): up to 32 keys (lowercase letters, digits, dashes) and 16 projects. Versions don't change.</p><div class=row><button type=button class="btn small">Add detail</button></div><label>Projects (comma separated)<input type=text></label><div class=row><button type=submit class="btn small primary">Save details</button><button type=button class="btn small">Cancel`),ze=h(`<section class=prof-details aria-label=Details>`),Be=h(`<dt>Tags`),Ve=h(`<dd>`),He=h(`<dl class=prof-facts><dt>Latest</dt><dd>v</dd><dt>Updated</dt><dd></dd><dt>Projects</dt><dd>`),Ue=h(`<button type=button class="btn small">Edit details`),We=h(`<span class=muted>none`),Ge=h(`<dt>`),Ke=h(`<div class=prof-meta-row role=group><input type=text aria-label=Key placeholder="key (e.g. owner)"><input type=text aria-label=Value placeholder=value>`),qe=h(`<section class=prof-usage aria-label="Used by">`),Je=h(`<p class=prof-note> Upgrading a session is always explicit; a new version never reaches a running session by itself.`),Ye=h(`<h3>Sessions`),Xe=h(`<ul class=prof-uses aria-label="Pinned sessions">`),Ze=h(`<button type=button class="btn small">More sessions`),Qe=h(`<h3>Team roles`),$e=h(`<ul class=prof-uses aria-label="Team roles">`),et=h(`<h3>Launches`),tt=h(`<ul class=prof-uses aria-label=Launches>`),nt=h(`<h3>Workspaces and projects`),rt=h(`<ul class=prof-uses aria-label=Workspaces>`),it=h(`<p class=prof-note>Projects: `),at=h(`<p class=prof-note>Hidden for this sign-in: <!>.`),ot=h(`<p class=prof-note>Only part of the <!> is listed; the counts are complete.`),st=h(`<p class="muted small">No session pins this profile.`),ct=h(`<span class=prof-tag>running v`),lt=h(`<span class="prof-use older">older`),ut=h(`<a class="btn small">Open session`),dt=h(`<button type=button class="btn small primary">Upgrade to v`),ft=h(`<li><span></span><strong></strong><span class=prof-tag>v</span><span class="muted small"></span><span class=grow>`),pt=h(`<p class="muted small">No team role names this profile.`),mt=h(`<span class="muted small">`),ht=h(`<li><a></a><span>role <strong></strong></span><span class=prof-tag>`),gt=h(`<p class="muted small">No retained launch named this profile.`),_t=h(`<li><span class=mono></span><span class=prof-tag></span><span class=prof-tag>v</span><span class="muted small">`),vt=h(`<p class="muted small">The pinned sessions are in no workspace or project.`),yt=h(`<li><strong></strong><span class="muted small">`),bt=e=>e?`/profiles?id=${encodeURIComponent(e)}`:`/profiles`,xt=()=>b.some(e=>e.route===`/teams`);function St(e){let[n,c]=a(`active`),[d,h]=a(!1),[g,{refetch:_}]=o(n,e=>W(e).then(e=>e.items)),[v,b]=a({}),[x,S]=a(`name`),w=f(()=>te(g()??[])),T=f(()=>X(N(g()??[],v()),x())),D=e=>t=>b({...v(),[e]:t.currentTarget.value||void 0});return(()=>{var a=pe(),o=a.firstChild,f=o.firstChild,b=f.nextSibling.nextSibling,O=o.nextSibling,k=O.firstChild,A=k.firstChild,j=A.firstChild,M=j.nextSibling,N=A.nextSibling,P=N.firstChild,F=P.nextSibling,I=k.nextSibling;return l(o,t(i,{get when(){return q()},get children(){return t(m,{icon:`menu`,label:`Open sidebar`,onClick:B})}}),f),b.$$click=()=>h(!0),j.$$click=()=>c(`active`),M.$$click=()=>c(`archived`),l(N,t(i,{get when(){return w().tags.length},get children(){var e=ce();return e.firstChild,y(e,`change`,D(`tag`)),l(e,t(s,{get each(){return w().tags},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().tag??``),e}}),P),l(N,t(i,{get when(){return w().projects.length},get children(){var e=le();return e.firstChild,y(e,`change`,D(`project`)),l(e,t(s,{get each(){return w().projects},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().project??``),e}}),P),l(N,t(i,{get when(){return w().teams.length},get children(){var e=ue();return e.firstChild,y(e,`change`,D(`team`)),l(e,t(s,{get each(){return w().teams},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().team??``),e}}),P),l(N,t(i,{get when(){return w().harnesses.length},get children(){var e=de();return e.firstChild,y(e,`change`,D(`harness`)),l(e,t(s,{get each(){return w().harnesses},children:e=>(()=>{var t=Q();return t.value=e,l(t,e),t})()}),null),r(()=>e.value=v().harness??``),e}}),P),y(P,`change`,D(`used`)),F.addEventListener(`change`,e=>S(e.currentTarget.value)),l(k,t(i,{get when(){return!g.error},get fallback(){return(()=>{var e=$();return l(e,()=>E(g.error)),e})()},get children(){return t(i,{get when(){return g()},get fallback(){return me()},get children(){return t(i,{get when(){return g().length},get fallback(){return(()=>{var e=he();return l(e,()=>n()===`active`?`No profiles yet. Create one to share instructions, skills and commands across sessions.`:`No archived profiles.`),e})()},get children(){return t(i,{get when(){return T().length},get fallback(){return ge()},get children(){var n=fe();return l(n,t(s,{get each(){return T()},children:n=>t(Ct,{entry:n,get current(){return n.profile.id===e.id}})})),n}})}})}})}}),null),l(I,t(i,{get when(){return e.id},keyed:!0,get fallback(){return _e()},children:e=>t(Tt,{id:e,onChanged:()=>void _()})})),l(a,t(i,{get when(){return d()},get children(){return t(wt,{onClose:()=>h(!1),onCreated:e=>{h(!1),c(`active`),_(),C(bt(e.id))}})}}),null),r(t=>{var r=`prof-body${e.id?` has-detail`:``}`,i=n()===`active`,a=n()===`archived`;return r!==t.e&&p(O,t.e=r),i!==t.t&&u(j,`aria-pressed`,t.t=i),a!==t.a&&u(M,`aria-pressed`,t.a=a),t},{e:void 0,t:void 0,a:void 0}),r(()=>P.value=v().used??``),r(()=>F.value=x()),a})()}function Ct(e){let a=()=>e.entry.profile,o=()=>e.entry.summary,c=()=>O(e.entry.usage);return(()=>{var d=be(),f=d.firstChild,m=f.firstChild,h=m.nextSibling,g=h.firstChild;return l(m,()=>a().title),l(f,t(i,{get when(){return a().description},get children(){var e=ve();return l(e,()=>a().description),e}}),h),l(h,()=>a().name,g),l(h,()=>a().latestVersion,null),l(h,t(i,{get when(){return o()},children:e=>` · ${T(e().skills,`skill`)} · ${T(e().commands,`command`)}`}),null),l(h,(()=>{var e=n(()=>!!a().updatedAt);return()=>e()?` · updated ${_(a().updatedAt)}`:``})(),null),l(f,t(i,{get when(){return a().tags.length||c().length},get children(){var e=ye();return l(e,t(s,{get each(){return a().tags},children:e=>(()=>{var t=xe();return l(t,e),t})()}),null),l(e,t(s,{get each(){return c()},children:e=>(()=>{var t=Se();return l(t,e),r(()=>p(t,`prof-use${e===`Unused`?` unused`:/older/.test(e)?` older`:``}`)),t})()}),null),e}}),null),r(t=>{var n=bt(a().id),r=e.current?`page`:void 0,i=`${a().title} (${a().name})`;return n!==t.e&&u(f,`href`,t.e=n),r!==t.t&&u(f,`aria-current`,t.t=r),i!==t.a&&u(f,`aria-label`,t.a=i),t},{e:void 0,t:void 0,a:void 0}),d})()}function wt(e){let[n,o]=a({name:``,title:``,description:``,tags:``}),[s,c]=a(Z()),[u,d]=a(``),[f,p]=a(!1),m=J(),h=async t=>{t.preventDefault();let r=R(n(),s());if(!r.ok)return d(r.error);p(!0),d(``);try{let t=await K(r.body,m);S(`Created ${t.name} v1`),e.onCreated(t)}catch(e){e instanceof w||(m=J()),d(E(e))}finally{p(!1)}},_=e=>t=>o({...n(),[e]:t.currentTarget.value});return t(g,{open:!0,wide:!0,title:`New agent profile`,get onClose(){return e.onClose},class:`prof-dialog`,get children(){var a=Ce(),o=a.firstChild,d=o.firstChild.nextSibling,p=o.nextSibling,m=p.firstChild.nextSibling,g=p.nextSibling,v=g.firstChild.nextSibling,b=g.nextSibling,x=b.firstChild.nextSibling,S=b.nextSibling,C=S.firstChild,w=C.nextSibling;return a.addEventListener(`submit`,e=>void h(e)),y(d,`input`,_(`name`),!0),y(m,`input`,_(`title`),!0),y(v,`input`,_(`description`),!0),y(x,`input`,_(`tags`),!0),l(a,t(se,{get draft(){return s()},onChange:c}),S),l(a,t(i,{get when(){return u()},get children(){var e=$();return l(e,u),e}}),S),y(w,`click`,e.onClose,!0),r(()=>C.disabled=f()),r(()=>d.value=n().name),r(()=>m.value=n().title),r(()=>v.value=n().description),r(()=>x.value=n().tags),a}})}function Tt(c){let[f,p]=a(),[m,h]=a(),[g,v]=a(Z()),[y,b]=a(``),[x,C]=a(``),[T,D]=a(!1),[O,k]=a(`edit`),A=J(),N=async(e=!1)=>{b(``);try{let{profile:t}=await M(c.id),n=await z(t.id,t.latestVersion);p(t),h(n),e||v(Y(n.content))}catch(e){b(E(e))}};d(e(()=>c.id,()=>void N()));let[P,{refetch:F}]=o(()=>O()===`history`?`${c.id}#${f()?.latestVersion??0}`:void 0,()=>I(c.id).then(e=>e.items)),R=()=>!!m()&&L(g(),m().content),B=async(e,t)=>{A=J(),S(t),c.onChanged(),p(e),await N(),F()},V=async e=>{e instanceof w||(A=J()),C(E(e)),e.code===`conflict`&&(await N(!0),c.onChanged())},H=async()=>{let e=f(),t=m();if(!e||!t)return;let n=j(g());if(!n.ok)return C(n.error);if(!L(g(),t.content))return C(`Nothing changed since v${e.latestVersion}.`);D(!0),C(``);try{let t=await U(e.id,{expectedRevision:e.revision,content:n.content},A);await B(t,`Saved ${t.name} v${t.latestVersion}. Pinned sessions keep their version until you upgrade them.`)}catch(e){await V(e)}finally{D(!1)}},W=async e=>{let t=f();if(t){D(!0),C(``);try{let n=await U(t.id,{expectedRevision:t.revision,fromVersion:e},A);await B(n,`Restored v${e} as v${n.latestVersion}`)}catch(e){await V(e)}finally{D(!1)}}},G=async e=>{let t=f();if(t){D(!0),C(``);try{let n=await ee(t,e);p(n),c.onChanged(),S(e?`Archived ${n.name}. Pinned sessions keep their version; it can't be pinned again until unarchived.`:`Unarchived ${n.name}`)}catch(e){await V(e)}finally{D(!1)}}},[K,q]=a(),X=async e=>{try{let t=await z(c.id,e);q({version:e,text:JSON.stringify(t.content,null,2)})}catch(e){C(E(e))}};return(()=>{var e=we();return e.firstChild,l(e,t(i,{get when(){return!y()},get fallback(){return(()=>{var e=Te();return l(e,y),e})()},get children(){return t(i,{get when(){return f()},get fallback(){return Ee()},children:e=>[(()=>{var n=Oe(),a=n.firstChild,o=a.nextSibling,s=o.nextSibling;s.firstChild;var c=s.nextSibling,u=c.nextSibling;return l(a,()=>e().title),l(o,()=>e().name),l(s,()=>e().latestVersion,null),l(n,t(i,{get when(){return e().state===`archived`},get children(){return De()}}),c),u.$$click=()=>void G(e().state!==`archived`),l(u,()=>e().state===`archived`?`Unarchive`:`Archive`),r(()=>u.disabled=T()),n})(),t(i,{get when(){return e().description},get children(){var t=ke();return l(t,()=>e().description),t}}),t(Et,{get profile(){return e()},get latest(){return m()},onSaved:e=>{p(e),c.onChanged()},onConflict:async()=>{await N(!0),c.onChanged()}}),(()=>{var e=Ae(),t=e.firstChild,n=t.nextSibling,i=n.nextSibling;return t.$$click=()=>k(`edit`),n.$$click=()=>k(`history`),i.$$click=()=>k(`usage`),r(e=>{var r=O()===`edit`,a=O()===`history`,o=O()===`usage`;return r!==e.e&&u(t,`aria-selected`,e.e=r),a!==e.t&&u(n,`aria-selected`,e.t=a),o!==e.a&&u(i,`aria-selected`,e.a=o),e},{e:void 0,t:void 0,a:void 0}),e})(),t(i,{get when(){return x()},get children(){var e=$();return l(e,x),e}}),t(i,{get when(){return O()===`edit`},get children(){return[(()=>{var t=ke();return l(t,(()=>{var t=n(()=>e().state===`archived`);return()=>t()?`Unarchive to edit or pin this profile.`:`Saving creates v${e().latestVersion+1}. Sessions pinned to an earlier version keep it until you upgrade each one.`})()),t})(),t(se,{get draft(){return g()},onChange:v,get disabled(){return e().state===`archived`||T()}}),(()=>{var t=je(),n=t.firstChild;n.firstChild;var i=n.nextSibling;return n.$$click=()=>void H(),l(n,()=>e().latestVersion+1,null),i.$$click=()=>(v(Y(m().content)),C(``)),r(t=>{var r=T()||e().state===`archived`||!R(),a=T()||!R();return r!==t.e&&(n.disabled=t.e=r),a!==t.t&&(i.disabled=t.t=a),t},{e:void 0,t:void 0}),t})()]}}),t(i,{get when(){return O()===`usage`},get children(){return t(Ot,{get profile(){return e()},get onChanged(){return c.onChanged}})}}),t(i,{get when(){return O()===`history`},get children(){return[Me(),t(i,{get when(){return n(()=>!P.error)()&&P()},get fallback(){return(()=>{var e=he();return l(e,(()=>{var e=n(()=>!!P.error);return()=>e()?E(P.error):`Loading…`})()),e})()},get children(){var a=Ne();return l(a,t(s,{get each(){return P()},children:a=>(()=>{var o=Le(),s=o.firstChild;s.firstChild;var c=s.nextSibling,d=c.nextSibling,f=d.nextSibling.nextSibling;return l(s,()=>a.version,null),l(o,t(i,{get when(){return a.version===e().latestVersion},get children(){return Pe()}}),c),l(c,()=>_(a.createdAt)),l(d,()=>a.digest.slice(0,12)),f.$$click=()=>void X(a.version),l(o,t(i,{get when(){return n(()=>a.version!==e().latestVersion)()&&e().state!==`archived`},get children(){var t=Fe();return t.firstChild,t.$$click=()=>void W(a.version),l(t,()=>e().latestVersion+1,null),r(()=>t.disabled=T()),t}}),null),l(o,t(i,{get when(){return K()?.version===a.version},get children(){var e=Ie();return l(e,()=>K().text),r(()=>u(e,`aria-label`,`Version ${a.version} content`)),e}}),null),r(()=>u(d,`title`,a.digest)),o})()})),a}})]}})]})}}),null),e})()}function Et(e){let[o,c]=a(!1),[d,f]=a([]),[p,h]=a(``),[g,v]=a(``),[y,b]=a(!1),x=()=>Object.entries(e.profile.metadata),C=()=>{f([...x().map(([e,t])=>({key:e,value:t})),{key:``,value:``}]),h(e.profile.projects.join(`, `)),v(``),c(!0)},w=(e,t,n)=>f(d().map((r,i)=>i===e?{...r,[t]:n}:r)),D=async t=>{t.preventDefault();let n=k(d(),p());if(!n.ok)return v(n.error);b(!0),v(``);try{let t=await F(e.profile,n.patch);c(!1),S(`Saved the details of ${t.name}`),e.onSaved(t)}catch(t){v(E(t)),t.code===`conflict`&&await e.onConflict()}finally{b(!1)}},O=()=>e.latest?.content;return(()=>{var a=ze();return l(a,t(i,{get when(){return o()},get fallback(){return[(()=>{var r=He(),a=r.firstChild.nextSibling;a.firstChild;var o=a.nextSibling.nextSibling,c=o.nextSibling,u=c.nextSibling;return l(a,()=>e.profile.latestVersion,null),l(a,t(i,{get when(){return O()},children:e=>` · ${e().instructions?`instructions · `:``}${T(e().skills.length,`skill`)} · ${T(e().commands.length,`command`)}${e().model?` · ${e().model}`:``}`}),null),l(o,(()=>{var t=n(()=>!!e.profile.updatedAt);return()=>t()?_(e.profile.updatedAt):`—`})()),l(r,t(i,{get when(){return e.profile.tags.length},get children(){return[Be(),(()=>{var t=Ve();return l(t,()=>e.profile.tags.join(`, `)),t})()]}}),c),l(u,(()=>{var t=n(()=>!!e.profile.projects.length);return()=>t()?e.profile.projects.join(`, `):We()})()),l(r,t(s,{get each(){return x()},children:([e,t])=>[(()=>{var t=Ge();return l(t,e),t})(),(()=>{var e=Ve();return l(e,t),e})()]}),null),r})(),(()=>{var e=Ue();return e.$$click=C,e})()]},get children(){var e=Re(),n=e.firstChild.nextSibling,a=n.firstChild,o=n.nextSibling,_=o.firstChild.nextSibling,v=o.nextSibling,b=v.firstChild,x=b.nextSibling;return e.addEventListener(`submit`,e=>void D(e)),l(e,t(s,{get each(){return d()},children:(e,n)=>(()=>{var i=Ke(),a=i.firstChild,o=a.nextSibling;return a.$$input=e=>w(n(),`key`,e.currentTarget.value),o.$$input=e=>w(n(),`value`,e.currentTarget.value),l(i,t(m,{icon:`close`,get label(){return`Remove detail ${n()+1}`},type:`button`,onClick:()=>f(d().filter((e,t)=>t!==n()))}),null),r(()=>u(i,`aria-label`,`Detail ${n()+1}`)),r(()=>a.value=e.key),r(()=>o.value=e.value),i})()}),n),a.$$click=()=>f([...d(),{key:``,value:``}]),_.$$input=e=>h(e.currentTarget.value),l(e,t(i,{get when(){return g()},get children(){var e=$();return l(e,g),e}}),v),x.$$click=()=>c(!1),r(()=>b.disabled=y()),r(()=>_.value=p()),e}})),a})()}var Dt={sessions:`sessions (needs sessions:read)`,teams:`team roles (needs teams:read)`,launches:`launches (needs sessions:launch)`,workspaces:`workspaces (needs workspaces:read)`};function Ot(c){let[f,{refetch:m}]=o(()=>c.profile.id+`#`+c.profile.latestVersion,()=>V(c.profile.id)),[h,g]=a([]),[v,y]=a(),[b,x]=a();d(e(f,e=>(g([]),y(e?.cursor))));let C=()=>[...f()?.sessions??[],...h()],w=async()=>{let e=v();if(e)try{let t=await V(c.profile.id,e);g([...h(),...t.sessions]),y(t.cursor)}catch(e){S(E(e))}},D=async(e,t)=>{x(e);try{await P(e,{profileID:c.profile.id,version:c.profile.latestVersion,expectedRevision:t}),S(`Asked ${e} to run v${c.profile.latestVersion}; it confirms on its next turn.`),c.onChanged(),m()}catch(e){S(E(e)),m()}finally{x(void 0)}},O=()=>{let e=f()?.counts;return e?[e.sessions===void 0?``:`${T(e.sessions,`session`)}${e.olderVersion?` (${e.olderVersion} on older versions)`:``}`,e.teamRoles===void 0?``:T(e.teamRoles,`team role`),e.launches===void 0?``:T(e.launches,`launch`),e.workspaces===void 0?``:T(e.workspaces,`workspace`)].filter(Boolean).join(` · `):``};return(()=>{var e=qe();return l(e,t(i,{get when(){return!f.error},get fallback(){return(()=>{var e=$();return l(e,()=>E(f.error)),e})()},get children(){return t(i,{get when(){return f()},get fallback(){return me()},children:e=>[(()=>{var e=Je(),t=e.firstChild;return l(e,(()=>{var e=n(()=>!!O());return()=>e()?`${O()}.`:`Nothing you can see uses this profile.`})(),t),e})(),t(i,{get when(){return!e().hidden.includes(`sessions`)},get children(){return[Ye(),t(i,{get when(){return C().length},get fallback(){return st()},get children(){return[(()=>{var e=Xe();return l(e,t(s,{get each(){return C()},children:e=>(()=>{var a=ft(),o=a.firstChild,s=o.nextSibling,d=s.nextSibling;d.firstChild;var f=d.nextSibling;return f.nextSibling,l(s,(()=>{var t=n(()=>!!e.name);return()=>t()?`@${e.name}`:e.title??e.sessionID})()),l(d,()=>e.version,null),l(a,t(i,{get when(){return n(()=>e.running!==void 0)()&&e.running!==e.version},get children(){var t=ct();return t.firstChild,l(t,()=>e.running,null),t}}),f),l(a,t(i,{get when(){return e.olderVersion},get children(){return lt()}}),f),l(f,()=>[e.ack?G[e.ack]+(e.offline?` (offline)`:``):``,e.harness??``,e.machineID??``,e.project??``,e.known?``:`session gone`].filter(Boolean).join(` · `)),l(a,t(i,{get when(){return e.known},get children(){var t=ut();return r(()=>u(t,`href`,`/s/${encodeURIComponent(e.sessionID)}`)),t}}),null),l(a,t(i,{get when(){return n(()=>!!e.olderVersion)()&&c.profile.state===`active`},get children(){var t=dt();return t.firstChild,t.$$click=()=>void D(e.sessionID,e.revision),l(t,()=>c.profile.latestVersion,null),r(()=>t.disabled=b()===e.sessionID),t}}),null),r(t=>{var n=`prof-dot${e.online?` on`:``}`,r=e.online?`online`:`offline`;return n!==t.e&&p(o,t.e=n),r!==t.t&&u(o,`title`,t.t=r),t},{e:void 0,t:void 0}),a})()})),e})(),t(i,{get when(){return v()},get children(){var e=Ze();return e.$$click=()=>void w(),e}})]}})]}}),t(i,{get when(){return!e().hidden.includes(`teams`)},get children(){return[Qe(),t(i,{get when(){return e().teamRoles.length},get fallback(){return pt()},get children(){var a=$e();return l(a,t(s,{get each(){return e().teamRoles},children:e=>(()=>{var a=ht(),o=a.firstChild,s=o.nextSibling,c=s.firstChild.nextSibling,d=s.nextSibling;return l(o,()=>e.teamTitle),l(c,()=>e.label??e.role),l(d,(()=>{var t=n(()=>e.version!==void 0);return()=>t()?`v${e.version}`:`latest`})()),l(a,t(i,{get when(){return e.staffed!==void 0},get children(){var t=mt();return l(t,()=>T(e.staffed,`staffed seat`)),t}}),null),r(()=>u(o,`href`,A(e.teamID,xt()))),a})()})),a}})]}}),t(i,{get when(){return!e().hidden.includes(`launches`)},get children(){return[et(),t(i,{get when(){return e().launches.length},get fallback(){return gt()},get children(){var a=tt();return l(a,t(s,{get each(){return e().launches},children:e=>(()=>{var a=_t(),o=a.firstChild,s=o.nextSibling,c=s.nextSibling;c.firstChild;var d=c.nextSibling;return l(o,()=>e.id),l(s,()=>e.state,null),l(s,(()=>{var t=n(()=>!!e.outcome);return()=>t()?` (${e.outcome})`:``})(),null),l(c,()=>e.version,null),l(d,()=>_(e.updated)),l(a,t(i,{get when(){return e.sessionID},get children(){var t=ut();return r(()=>u(t,`href`,`/s/${encodeURIComponent(e.sessionID)}`)),t}}),null),a})()})),a}})]}}),t(i,{get when(){return!e().hidden.includes(`workspaces`)},get children(){return[nt(),t(i,{get when(){return e().workspaces.length||e().projects.length},get fallback(){return vt()},get children(){return[(()=>{var n=rt();return l(n,t(s,{get each(){return e().workspaces},children:e=>(()=>{var t=yt(),n=t.firstChild,r=n.nextSibling;return l(n,()=>e.title??e.workspaceID),l(r,()=>T(e.sessions,`pinned session`)),t})()})),n})(),t(i,{get when(){return e().projects.length},get children(){var t=it();return t.firstChild,l(t,()=>e().projects.join(`, `),null),t}})]}})]}}),t(i,{get when(){return e().hidden.length},get children(){var t=at(),n=t.firstChild.nextSibling;return n.nextSibling,l(t,()=>e().hidden.map(e=>Dt[e]??e).join(`, `),n),t}}),t(i,{get when(){return e().truncated.length},get children(){var t=ot(),n=t.firstChild.nextSibling;return n.nextSibling,l(t,()=>e().truncated.join(`, `),n),t}})]})}})),e})()}v([`click`,`input`]);function kt(){return t(St,{get id(){return x().searchParams.get(`id`)??void 0}})}export{kt as default};