Ctrl K
ComunidadGuías…

assets/mcp-cards/agent-card-v11.html.txt

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Chickpea Agent card</title>
<style>/*
 * Framework-free MCP App styles.
 */

@layer base {
  :root {
    color-scheme: light dark;
    --background: var(
      --color-background-primary,
      light-dark(rgb(255 255 255), rgb(24 24 24))
    );
    --foreground: var(
      --color-text-primary,
      light-dark(rgb(26 28 31), rgb(255 255 255))
    );
    --card: color-mix(in oklab, var(--foreground) 5%, var(--background));
    --card-foreground: var(--color-text-primary, var(--foreground));
    --primary: var(
      --color-text-info,
      light-dark(rgb(51 156 255), rgb(131 195 255))
    );
    --primary-foreground: var(
      --color-text-inverse,
      light-dark(rgb(255 255 255), rgb(13 13 13))
    );
    --secondary: var(
      --color-background-secondary,
      light-dark(rgb(255 255 255 / 96%), rgb(54 54 54 / 96%))
    );
    --secondary-foreground: var(--color-text-primary, var(--foreground));
    --muted: color-mix(in srgb, var(--foreground) 10%, transparent);
    --muted-foreground: var(
      --color-text-secondary,
      light-dark(rgb(26 28 31 / 49.4%), rgb(255 255 255 / 49.8%))
    );
    --accent: var(
      --color-background-info,
      light-dark(rgb(229 242 255), rgb(13 39 63))
    );
    --accent-foreground: var(--color-text-info, var(--primary));
    --destructive: var(
      --color-text-warning,
      light-dark(rgb(226 85 7), rgb(255 133 73))
    );
    --border: var(
      --color-border-secondary,
      light-dark(rgb(26 28 31 / 8%), rgb(255 255 255 / 8.2%))
    );
    --input: var(
      --color-border-primary,
      light-dark(rgb(26 28 31 / 11.8%), rgb(255 255 255 / 12%))
    );
    --ring: var(--color-ring-primary, var(--primary));
    --font-size-base: var(--font-text-md-size, 14px);
    --radius: var(--border-radius-lg, 12.5px);
  }

  :root[data-theme="light"] {
    color-scheme: light;
  }

  :root[data-theme="dark"] {
    color-scheme: dark;
  }

  body {
    margin: 0;
    color: var(--foreground);
    background: var(--background);
    font-size: max(11px, var(--font-size-base));
    font-weight: var(--font-weight-normal, 430);
    line-height: 1.5;
  }

  /* MCP sandboxes can force their own font on body, so restore the host font below it. */
  body,
  body > * {
    font-family: var(
      --font-sans,
      -apple-system,
      system-ui,
      "Segoe UI",
      sans-serif
    );
  }

  h1,
  h2,
  h3,
  p {
    margin-block: 0;
  }

  h1,
  h2,
  h3 {
    font-weight: var(--font-weight-medium, 500);
    line-height: 1.25;
  }

  h1 {
    font-size: calc(var(--font-size-base) * 1.7142857143);
  }

  h2 {
    font-size: calc(var(--font-size-base) * 1.4285714286);
  }

  h3 {
    font-size: calc(var(--font-size-base) * 1.2857142857);
  }
}

@layer components {
  .cursor-interaction {
    cursor: var(--cursor-interaction, pointer);
  }

  .card {
    min-width: 0;
    padding: 12px;
    overflow-wrap: break-word;
    border-radius: calc(var(--radius) * 1.6);
    corner-shape: superellipse(1.5);
    color: var(--card-foreground);
    background: var(--card);
  }

  .btn,
  .form-check-input,
  .form-control,
  .form-select {
    box-sizing: border-box;
    font: inherit;
  }

  .btn {
    appearance: button;
    display: inline-flex;
    inline-size: fit-content;
    max-inline-size: 100%;
    min-height: 28px;
    align-items: center;
    justify-content: center;
    gap: 4px;
    margin: 0;
    padding: 0 8px;
    border: 1px solid var(--input);
    border-radius: var(--radius);
    corner-shape: superellipse(1.5);
    color: var(--secondary-foreground);
    background: var(--secondary);
    cursor: var(--cursor-interaction, pointer);
    text-align: center;
    text-decoration: none;
    white-space: nowrap;
    user-select: none;
  }

  .btn:not(:disabled):hover {
    background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
  }

  .btn-primary {
    border-color: transparent;
    color: var(--primary-foreground);
    background: var(--foreground);
    background-clip: padding-box;
  }

  .btn-primary:not(:disabled):hover {
    background: color-mix(in srgb, var(--foreground) 80%, transparent);
    background-clip: padding-box;
  }

  .btn-ghost {
    border-color: transparent;
    color: var(--muted-foreground);
    background: transparent;
  }

  .btn-ghost:not(:disabled):hover {
    color: var(--foreground);
    background: color-mix(in srgb, var(--foreground) 6%, var(--secondary));
  }

  .btn:not(.btn-primary):is([aria-pressed="true"], [aria-selected="true"]) {
    border-color: var(--primary);
    color: var(--primary-foreground);
    background: var(--primary);
  }

  .btn:focus-visible {
    outline: 2px solid var(--ring);
    outline-offset: 2px;
  }

  .btn:disabled,
  .form-check-input:disabled,
  .form-control:disabled,
  .form-select:disabled {
    cursor: not-allowed;
    opacity: 0.4;
  }

  .form-label {
    display: block;
    margin-bottom: 6px;
    color: var(--foreground);
  }

  .form-control,
  .form-select {
    display: block;
    width: 100%;
    min-height: 28px;
    padding: 0 8px;
    outline: none;
    border: 1px solid var(--input);
    border-radius: var(--radius);
    corner-shape: superellipse(1.5);
    color: var(--foreground);
    background: var(--secondary);
  }

  .form-control::placeholder {
    color: var(--muted-foreground);
  }

  .form-select {
    appearance: none;
    padding-right: 32px;
    background-image:
      linear-gradient(45deg, transparent 50%, var(--muted-foreground) 50%),
      linear-gradient(135deg, var(--muted-foreground) 50%, transparent 50%);
    background-position:
      calc(100% - 14px) 50%,
      calc(100% - 10px) 50%;
    background-repeat: no-repeat;
    background-size: 4px 4px;
    cursor: var(--cursor-interaction, pointer);
  }

  .form-select:not(:disabled):hover {
    background-color: color-mix(
      in srgb,
      var(--foreground) 6%,
      var(--secondary)
    );
  }

  textarea.form-control {
    min-height: 72px;
    padding: 8px 10px;
    resize: vertical;
  }

  .form-control:focus-visible,
  .form-select:focus-visible {
    border-color: var(--ring);
    box-shadow: inset 0 0 0 1px var(--ring);
  }

  .form-check {
    display: flex;
    min-height: 20px;
    align-items: center;
    gap: 8px;
  }

  .form-check-input {
    appearance: none;
    display: grid;
    width: 16px;
    height: 16px;
    flex: 0 0 auto;
    place-items: center;
    margin: 0;
    border: 1px solid var(--input);
    border-radius: 5px;
    corner-shape: superellipse(1.5);
    color: var(--primary-foreground);
    background: var(--secondary);
    cursor: var(--cursor-interaction, pointer);
  }

  .form-check-input:checked {
    border-color: var(--primary);
    background: var(--primary);
  }

  .form-check-input:checked::after {
    width: 7px;
    height: 4px;
    border-bottom: 2px solid currentColor;
    border-left: 2px solid currentColor;
    content: "";
    transform: translateY(-1px) rotate(-45deg);
  }

  .form-check-input:focus-visible {
    outline: 2px solid var(--ring);
    outline-offset: 2px;
  }

  .form-check-label {
    color: var(--foreground);
  }

  svg.lucide {
    display: block;
    width: 16px;
    height: 16px;
    flex: none;
    stroke-width: 1.6;
  }

  .text-small {
    font-size: max(11px, calc(var(--font-size-base) - 2px));
  }

  .text-muted {
    color: var(--muted-foreground);
  }

  .text-destructive {
    color: var(--destructive);
  }

  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
}

/*
 * The Agent card in ChatGPT's own look: its type, colors and black primary
 * buttons, from the host's style variables. Chickpea shows only in the avatar
 * and the quote accent. Without host variables the colors fall back to the
 * mockup's palette, and without a host theme to light.
 */

:root:not([data-theme]) {
  color-scheme: light;
}

:root {
  --cp-bg: var(--color-background-primary, light-dark(#ffffff, #181818));
  --cp-fg: var(--color-text-primary, light-dark(#0d0d0d, #ededed));
  /* Secondary text stays at AA contrast; the host's tertiary text does not. */
  --cp-muted: var(--color-text-secondary, light-dark(#5d5d5d, #cdcdcd));
  --cp-line: var(--color-border-primary, light-dark(#e5e5e5, rgb(255 255 255 / 20%)));
  --cp-soft: light-dark(#f7f7f7, rgb(255 255 255 / 6%));
  --cp-ok: light-dark(#1a7f37, #40c977);
  --cp-warn: light-dark(#a15c00, #f0a050);
  --cp-danger: #c62828;
  --cp-danger-hover: #a31f1f;
  --cp-accent: #e8901a;
  --cp-size: var(--font-text-md-size, 14px);
}

html,
body {
  background: var(--cp-bg);
  color: var(--cp-fg);
}

body {
  font-size: var(--cp-size);
  line-height: 1.45;
}

.cp-card {
  display: flex;
  flex-direction: column;
  gap: 0;
  padding: 16px;
  overflow-wrap: anywhere;
}

.cp-hdr {
  display: flex;
  gap: 12px;
  align-items: center;
}

.cp-avatar {
  flex: none;
  display: block;
}

.cp-avatar svg,
.cp-avatar img {
  display: block;
  width: 100%;
  height: 100%;
}

/* Slack's rounded square, cropped as Admin and the setup page crop it. */
.cp-avatar img {
  object-fit: cover;
}

.cp-avatar-lg {
  width: 44px;
  height: 44px;
}

.cp-avatar-lg img {
  border-radius: 12px;
}

.cp-avatar-sm {
  width: 26px;
  height: 26px;
}

.cp-avatar-sm img {
  border-radius: 7px;
}

/* On an alert card, an Agent's picture keeps the alert art's red. */
.cp-avatar-alert img {
  outline: 2px solid var(--cp-danger);
  outline-offset: 1px;
}

.cp-heading {
  min-width: 0;
}

.cp-title {
  margin: 0;
  font-size: calc(var(--cp-size) * 1.143);
  font-weight: 600;
  line-height: 1.25;
}

/* Focus lands here after a redraw only so the keyboard stays on the card. */
.cp-title:focus {
  outline: none;
}

.cp-sub {
  margin: 2px 0 0;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.93);
}

.cp-ok {
  color: var(--cp-ok);
}

.cp-warn {
  color: var(--cp-warn);
}

.cp-text {
  margin: 12px 0 0;
  white-space: pre-line;
}

.cp-sect {
  margin: 14px 0 6px;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.79);
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.cp-sect + .cp-text {
  margin-top: 0;
}

.cp-quote {
  margin: 6px 0;
  padding: 2px 0 2px 10px;
  border-left: 3px solid var(--cp-accent);
  white-space: pre-line;
}

.cp-note {
  margin: 6px 0 0;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.93);
}

.cp-note.cp-warn {
  color: var(--cp-warn);
}

.cp-thread {
  display: flex;
  flex-direction: column;
  gap: 9px;
  margin: 12px 0 0;
  padding: 10px 12px;
  border: 1px solid var(--cp-line);
  border-radius: 12px;
  background: var(--cp-soft);
}

.cp-msg {
  display: grid;
  grid-template-columns: 26px 1fr;
  gap: 8px;
  font-size: calc(var(--cp-size) * 0.964);
}

/*
 * A host may pass an example's line breaks as they are; they show as written.
 * A long one shows its start and an ellipsis: the tool's result holds it whole.
 */
.cp-said {
  display: -webkit-box;
  overflow: hidden;
  -webkit-box-orient: vertical;
  white-space: pre-line;
  overflow-wrap: anywhere;
}

.cp-clamp-2 {
  -webkit-line-clamp: 2;
}

.cp-clamp-5 {
  -webkit-line-clamp: 5;
}

.cp-init {
  display: grid;
  width: 26px;
  height: 26px;
  place-items: center;
  border-radius: 7px;
  background: #4a6cc4;
  color: #ffffff;
  font-size: calc(var(--cp-size) * 0.86);
  font-weight: 600;
}

.cp-line {
  margin: 10px 0 0;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.964);
}

.cp-line b {
  color: var(--cp-fg);
  font-weight: 500;
}

.cp-chip {
  display: inline-flex;
  padding: 0 9px;
  border: 1px solid var(--cp-line);
  border-radius: 999px;
  background: var(--cp-soft);
  color: var(--cp-fg);
  font-size: calc(var(--cp-size) * 0.9);
}

.cp-foot {
  margin: 14px 0 0;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.93);
}

.cp-steps {
  display: flex;
  flex-direction: column;
  gap: 7px;
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
  font-size: calc(var(--cp-size) * 0.964);
}

.cp-steps li {
  display: flex;
  gap: 8px;
  align-items: center;
}

.cp-ic {
  display: inline-grid;
  flex: none;
  width: 18px;
  height: 18px;
  box-sizing: border-box;
  place-items: center;
  border-radius: 50%;
  font-size: 11px;
}

.cp-ic-done {
  background: color-mix(in srgb, var(--cp-ok) 14%, transparent);
  color: var(--cp-ok);
}

.cp-ic-now {
  border: 2px solid var(--cp-accent);
  border-right-color: transparent;
  animation: cp-spin 0.9s linear infinite;
}

.cp-ic-todo {
  border: 1.5px solid var(--cp-line);
}

.cp-ic-failed {
  background: color-mix(in srgb, var(--cp-danger) 14%, transparent);
  color: light-dark(var(--cp-danger), #ff8a80);
  font-weight: 700;
}

@keyframes cp-spin {
  to {
    transform: rotate(360deg);
  }
}

@media (prefers-reduced-motion: reduce) {
  .cp-ic-now {
    animation: none;
  }
}

.cp-acts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-top: 14px;
}

.cp-card .btn {
  min-height: 34px;
  padding: 0 14px;
  border-radius: 999px;
  font-size: calc(var(--cp-size) * 0.964);
  font-weight: 600;
}

.cp-btn-primary {
  border-color: transparent;
  color: var(--color-text-inverse, light-dark(#ffffff, #0d0d0d));
  background: var(--cp-fg);
}

.cp-btn-primary:not(:disabled):hover {
  background: color-mix(in srgb, var(--cp-fg) 82%, var(--cp-bg));
}

.cp-btn-danger {
  border-color: transparent;
  color: #ffffff;
  background: var(--cp-danger);
}

.cp-btn-danger:not(:disabled):hover {
  background: var(--cp-danger-hover);
}

.cp-btn-secondary {
  border-color: var(--cp-line);
  color: var(--cp-fg);
  background: var(--cp-bg);
}

.cp-card .btn:focus-visible {
  outline: 2px solid var(--color-ring-primary, light-dark(#0169cc, #ffffff));
  outline-offset: 2px;
}

.cp-acts[hidden],
.cp-error[hidden] {
  display: none;
}

.cp-error {
  margin: 10px 0 0;
  color: light-dark(#b42318, #ff8a80);
  font-size: calc(var(--cp-size) * 0.93);
}

.cp-rows {
  display: flex;
  flex-direction: column;
  container-type: inline-size;
  margin: 12px 0 0;
  padding: 0;
  border: 1px solid var(--cp-line);
  border-radius: 14px;
  list-style: none;
}

.cp-row {
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 10px 12px;
  border-top: 1px solid var(--cp-line);
  font-size: calc(var(--cp-size) * 0.964);
}

.cp-row:first-child {
  border-top: 0;
}

/* A narrow card puts a row's link under its words instead of squeezing them. */
@container (max-width: 520px) {
  .cp-row:has(> .cp-link-go) {
    grid-template-columns: 22px minmax(0, 1fr);
    row-gap: 2px;
  }

  .cp-row > .cp-link-go {
    grid-column: 2;
    justify-self: start;
    white-space: normal;
    text-align: start;
  }
}

.cp-row-detail {
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.893);
  white-space: pre-line;
}

.cp-row-detail.cp-warn {
  color: var(--cp-warn);
}

.cp-tile {
  display: grid;
  width: 22px;
  height: 22px;
  place-items: center;
  border-radius: 6px;
  background: var(--cp-fg);
  color: var(--cp-bg);
  font-size: calc(var(--cp-size) * 0.86);
  font-weight: 700;
}

.cp-ic-warning {
  background: color-mix(in srgb, var(--cp-warn) 16%, transparent);
  color: var(--cp-warn);
  font-weight: 700;
}

.cp-ic-unknown {
  border: 1.5px solid var(--cp-line);
  color: var(--cp-muted);
  font-weight: 700;
}

.cp-card .btn-sm {
  min-height: 30px;
  padding: 0 12px;
  font-size: calc(var(--cp-size) * 0.893);
  white-space: nowrap;
}

.cp-link {
  padding: 4px 0;
  border: 0;
  background: none;
  color: var(--cp-fg);
  font: inherit;
  font-size: calc(var(--cp-size) * 0.93);
  font-weight: 600;
  white-space: nowrap;
  cursor: var(--cursor-interaction, pointer);
}

.cp-link-go::after {
  content: " →" / "";
}

.cp-link:not(:disabled):hover {
  text-decoration: underline;
}

.cp-link:disabled {
  color: var(--cp-muted);
}

.cp-link:focus-visible {
  border-radius: 4px;
  outline: 2px solid var(--color-ring-primary, light-dark(#0169cc, #ffffff));
  outline-offset: 2px;
}

/* Two answers side by side where there is room, one above the other on a phone. */
.cp-panes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
  gap: 10px;
  margin: 10px 0 0;
}

.cp-pane {
  min-width: 0;
  padding: 10px 12px;
  border: 1px solid var(--cp-line);
  border-radius: 12px;
  font-size: calc(var(--cp-size) * 0.964);
}

.cp-pane-label {
  margin: 0 0 4px;
  color: var(--cp-muted);
  font-size: calc(var(--cp-size) * 0.79);
  font-weight: 600;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.cp-pane-text {
  white-space: pre-line;
  overflow-wrap: anywhere;
}
</style></head>
<body><div id="card"></div><script>"use strict";(()=>{function xe(e){return p(e)?{..."code"in e?{code:e.code}:{},...p(e.data)?{data:e.data}:{}}:{}}function Ae({told:e=[],outcome:n},t){return{modelContent:e.join(`
`),privateContent:{card:{version:t,told:e,...n===void 0?{}:{outcome:n}}}}}var xn=2e3,An=16e3,_e=2*6e4;function D(e=0){return Math.min(xn*2**e,An)}var o=(e,n=[])=>({state:e,effects:n}),g=(e,n=[])=>({state:{view:e,busy:!1},effects:n}),b=(e,n)=>({type:"call",call:{tool:e,args:n}}),x=(e,n)=>({...e,effects:[{type:"context",text:n},...e.effects]}),_n=6,Cn=1500;function Ce(e,n={}){return(t,r)=>{if(t.checking&&r.type==="press")return{state:t,effects:[]};let a=e(t,r.type==="result"||r.type==="reply"?{...r,result:Tn(r.result)}:r),{told:i=[],outcome:s}=t,d=0;if(r.type==="result"){({told:i,outcome:s}=r.kept??{told:[]});let u=s===void 0?void 0:n.resume?.(a.state.view,s);u&&(a={state:{view:u,busy:!1},effects:[]});let y=e({...a.state,seq:t.seq},{type:"reread",now:r.now});d=y.effects.filter(({type:w})=>w==="call").length;let S=new Set(y.effects.map(({type:w})=>w));a={state:y.state,effects:[...a.effects.filter(({type:w})=>!S.has(w)),...y.effects]}}else if(t.checking&&a.state.view===t.view){let u=(r.type==="reply"||r.type==="unreachable")&&r.call.seq===t.seq;d=t.checking-(u?1:0)}let c=a.effects.flatMap(u=>u.type==="context"?[u.text]:[]);c.length>0&&(i=te([...i.filter(u=>!c.includes(u)),...c]),s=n.remember?.(a.state.view)??s);let m=a.state.view===t.view?t.seq:t.seq+1,{told:f,outcome:k,checking:P,...$}=a.state;return{state:{...$,seq:m,...i.length?{told:i}:{},...s===void 0?{}:{outcome:s},...d>0?{checking:d}:{}},effects:[...c.length>0?[{type:"context",text:i.join(`
`)}]:[],...a.effects.flatMap(u=>u.type==="context"?[]:u.type==="call"?[{...u,call:{...u.call,seq:m}}]:[u])]}}}function te(e){let n=e.slice(-_n);for(;n.length>1&&n.join(`
`).length>Cn;)n=n.slice(1);return n}function v(e,n){return n.seq!==e.seq}function Tn(e){let n=e._meta?.["chickpea/held"],t=e.structuredContent;if(!p(n)||!p(t))return e;let r=typeof n.confirmToken=="string"?n.confirmToken:void 0,a=typeof n.undoToken=="string"?n.undoToken:void 0;return{...e,structuredContent:{...t,...a?{undoToken:a}:{},...r&&p(t.confirmation)?{confirmation:{...t.confirmation,confirmToken:r}}:{}}}}var A="That did not work. Try again.",K="Chickpea could not be reached. Try again.",W={kind:"notice",title:"Nothing to show here."};function h(e){return typeof e=="string"&&URL.parse(e)?.protocol==="https:"?e:void 0}var be=60;function T(e,n){let t=e.length>be?`${e.slice(0,be-1)}\u2026`:e;return`the Agent ${JSON.stringify(t)}${n?` (@${n})`:""}`}function Te(e,n){return typeof n!="object"||n===null||Array.isArray(n)?e:{...e,_meta:{...n,...e._meta}}}var we=200;function Sn(e){let n=e.replace(/\s+/g," ").trim();return n.length>we?`${n.slice(0,we-1)}\u2026`:n}function C(e){return JSON.stringify(Sn(e))}function Se(e,n){if(n.length===0)return`Try it: message @${e} in Slack.`;let t=n.length<=2?n.join(" or "):`${n.slice(0,-1).join(", ")} or ${n.at(-1)}`;return`Try it: mention @${e} in ${t}.`}function p(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function I(e){for(let n of En(e)){let t=p(n.structuredContent)?n.structuredContent.error:void 0;if(p(t)&&typeof t.code=="string"&&typeof t.message=="string")return{code:t.code,message:t.message,retryable:t.retryable,fix:t.fix}}}function En(e){let n=e.hostError?.data,t=r=>p(r)?[r.mcp_tool_result,r.call_tool_result].filter(p):[];return[e,...t(e._meta),...p(n)?[n,...t(n),...t(n._meta)]:[]]}function E(e){return I(e)?.message??(e.isError?A:void 0)}function B(e){return I(e)?.code}function Ee(e){return e.hostError!==void 0&&I(e)===void 0}function $e(e){return e===void 0||p(e)&&typeof e.label=="string"&&(typeof e.url=="string"||typeof e.tool=="string"&&p(e.arguments))}function Ie(e){return e.tool==="reconnect_service"||e.tool==="connect_model_provider"||e.tool==="connect_service"&&!("custom"in e.arguments)}function Re(e){let n=e._meta?.["chickpea/tool"];return typeof n=="string"?n:void 0}function Ne(e){return n=>{let t;try{t=e(n)}catch{return{busy:n.busy,error:n.error,avatar:"none",title:W.title,blocks:[],buttons:[]}}return n.checking?{...t,busy:!0}:t}}var $n="2026-01-26",In=6e4,z=class{constructor(n){this.appInfo=n;window.addEventListener("message",t=>{t.source===window.parent&&this.#i(t.data)}),this.on("ui/notifications/host-context-changed",t=>{let r=t,{styles:a,...i}=this.hostContext??{},s=r.theme!==void 0&&r.theme!==i.theme&&!r.styles;this.hostContext={...i,...a&&!s?{styles:a}:{},...r}})}appInfo;#a=1;#e=new Map;#t=new Map;hostContext;hostCapabilities;on(n,t){this.#t.set(n,[...this.#t.get(n)??[],t])}async connect(){let n=await this.#n("ui/initialize",{appInfo:this.appInfo,appCapabilities:{availableDisplayModes:["inline"]},protocolVersion:$n});this.hostContext=n?.hostContext,this.hostCapabilities=n?.hostCapabilities,this.#r("ui/notifications/initialized",{}),new ResizeObserver(()=>this.#r("ui/notifications/size-changed",{height:Math.ceil(document.body.getBoundingClientRect().height)})).observe(document.body)}async callTool(n,t,r){let a=(i,s)=>s===void 0?i:{isError:!0,hostError:xe(s)};try{return a(await this.#n("tools/call",{name:n,arguments:t},(i,s)=>r(a(i,s))))}catch(i){if(i instanceof Error)throw i;return a(void 0,i)}}async sendMessage(n){let t=this.hostCapabilities?.experimental?.["openai/message"]?.draft!==void 0,r=n.draft!==void 0&&t?n.draft:n.sent;re(await this.#n("ui/message",{role:"user",content:[{type:"text",text:r}],...r===n.draft?{_meta:{"openai/message":{target:"active",send:!1}}}:{}}))}async updateModelContext(n){re(await this.#n("ui/update-model-context",{content:[{type:"text",text:n}]}))}async openLink(n){if(window.openai?.openExternal)try{await window.openai.openExternal({href:n,redirectUrl:!1});return}catch{}re(await this.#n("ui/open-link",{url:n}))}#r(n,t){window.parent.postMessage({jsonrpc:"2.0",method:n,params:t},"*")}#n(n,t,r){let a=this.#a++;return new Promise((i,s)=>{let d=setTimeout(()=>{r?this.#e.set(a,{resolve:c=>r(c),reject:c=>r(void 0,c??{})}):this.#e.delete(a),s(new Error(`${n} timed out`))},In);this.#e.set(a,{resolve:c=>{clearTimeout(d),i(c)},reject:c=>{clearTimeout(d),s(c)}}),window.parent.postMessage({jsonrpc:"2.0",id:a,method:n,params:t},"*")})}#i(n){if(!(!n||n.jsonrpc!=="2.0")){if(n.method===void 0){let t=typeof n.id=="number"?this.#e.get(n.id):void 0;if(!t)return;this.#e.delete(n.id),n.error?t.reject(n.error):t.resolve(n.result);return}for(let t of this.#t.get(n.method)??[])t(n.params);n.id!==void 0&&window.parent.postMessage({jsonrpc:"2.0",id:n.id,result:{}},"*")}}};function re(e){if(e?.isError===!0)throw new Error("The host refused it")}function Rn(e){document.documentElement.setAttribute("data-theme",e),document.documentElement.style.colorScheme=e}function Nn(e){for(let[n,t]of Object.entries(e))t!==void 0&&document.documentElement.style.setProperty(n,t)}var ve=[];function ae(e){e?.theme&&Rn(e.theme);let n=e?.["openai/interactionCursor"],t={...e?.styles?.variables,"--cursor-interaction":typeof n=="string"&&/^[a-z-]+$/.test(n)?n:void 0};for(let r of ve)t[r]===void 0&&document.documentElement.style.removeProperty(r);Nn(t),ve=Object.keys(t).filter(r=>t[r]!==void 0)}var Ue=(e,n,t)=>`<svg viewBox="0 0 44 44" aria-hidden="true" focusable="false"><rect width="44" height="44" rx="12" fill="${e}"/><path d="M22 6c-9 0-14 8-14 18v14h28V24C36 14 31 6 22 6z" fill="${n}"/><path d="M22 12c-6 0-9.5 6-9.5 13.5S16 38 22 38s9.5-5 9.5-12.5S28 12 22 12z" fill="${t}"/><circle cx="18.5" cy="26" r="1.3" fill="#3a2a1e"/><circle cx="25.5" cy="26" r="1.3" fill="#3a2a1e"/><path d="M20.5 30.2q1.5 1.2 3 0" stroke="#3a2a1e" stroke-width="1.1" fill="none" stroke-linecap="round"/></svg>`,vn={agent:Ue("#3a2a1e","#E8901A","#f3d9b1"),alert:Ue("#2a1f2e","#c2453a","#f1d3b8")},Un={done:"done",now:"in progress",todo:"to do",failed:"failed"},Fe={done:{glyph:"\u2713",words:"done"},now:{glyph:"",words:"in progress"},failed:{glyph:"!",words:"needs attention"},warning:{glyph:"!",words:"warning"},unknown:{glyph:"?",words:"unknown"}};function l(e,n,t){let r=document.createElement(e);return n&&(r.className=n),t!==void 0&&(r.textContent=t),r}var Oe=new Set;function Ve(e,n,t){let r=l("span",`cp-avatar cp-avatar-${n}`),a=()=>{r.innerHTML=vn[e]};if(!t||Oe.has(t))return a(),r;e==="alert"&&r.classList.add("cp-avatar-alert");let i=l("img");return i.alt="",i.decoding="async",i.addEventListener("error",()=>{Oe.add(t),a()},{once:!0}),i.src=t,r.append(i),r}function Fn(e){let n=l("p","cp-sub");for(let t of e)n.append(t.tone?l("span",`cp-${t.tone}`,t.text):t.text);return n}function On(e,n,t){switch(e.kind){case"text":return l("p","cp-text",e.text);case"quote":return l("blockquote","cp-quote",e.text);case"section":return l("h3","cp-sect",e.label);case"note":return l("p",`cp-note${e.tone?` cp-${e.tone}`:""}`,e.text);case"exchange":{let r=(c,m,f)=>{let k=l("div");return k.append(l("span","sr-only",`${c}: `),l("div",`cp-said cp-clamp-${f}`,m)),k},a=l("span","cp-init","Y");a.setAttribute("aria-hidden","true");let i=l("div","cp-msg");i.append(a,r("You",e.ask,2));let s=l("div","cp-msg");s.append(Ve(n,"sm",t),r(e.agent,e.answer,5));let d=l("div","cp-thread");return d.append(i,s),d}case"line":{let r=l("p","cp-line");for(let a of e.parts)r.append("chip"in a?l("span","cp-chip",a.chip):a.strong?l("b",void 0,a.text):a.text);return r}case"steps":{let r=l("ul","cp-steps");for(let{label:a,state:i}of e.steps){let s=l("li"),d=l("span",`cp-ic cp-ic-${i}`,i==="done"?"\u2713":i==="failed"?"!":"");d.setAttribute("aria-hidden","true"),s.append(d,a,l("span","sr-only",` (${Un[i]})`)),r.append(s)}return r}case"rows":{let r=l("ul","cp-rows");return r.append(...e.rows.map(Vn)),r}case"panes":{let r=l("div","cp-panes");for(let{label:a,text:i}of e.panes){let s=l("section","cp-pane");s.append(l("h3","cp-pane-label",a),l("div","cp-pane-text",i)),r.append(s)}return r}}}function Vn(e){let n=l("li","cp-row");if(e.icon==="tile"){let a=l("span","cp-tile",e.tile??"");a.setAttribute("aria-hidden","true"),n.append(a)}else{let a=Fe[e.icon],i=l("span",`cp-ic cp-ic-${e.icon}`,a.glyph);i.setAttribute("aria-hidden","true"),n.append(i)}let t=l("div","cp-row-body"),r=l("div","cp-row-title",e.title);if(e.icon!=="tile"&&r.append(l("span","sr-only",` (${Fe[e.icon].words})`)),t.append(r),e.detail&&t.append(l("div",`cp-row-detail${e.tone?` cp-${e.tone}`:""}`,e.detail)),n.append(t),e.control){let{label:a,action:i,style:s}=e.control;n.append(Me(a,i,s==="link"?"cp-link cp-link-go":s==="toggle"?"cp-link":`btn btn-sm cp-btn-${s}`))}return n}function Me(e,n,t){let r=l("button",`${t} cursor-interaction`,e);return r.type="button",r.dataset.action=n,r}function Pe(e,n){let t=l("p","sr-only");t.setAttribute("aria-live","polite");let r=l("main","cp-card"),a=l("div","cp-content"),i=l("div","cp-acts"),s=l("p","cp-error");s.setAttribute("role","alert"),r.append(a,i,s),e.replaceChildren(t,r),r.addEventListener("click",f=>{let k=f.target?.closest("button[data-action]");k instanceof HTMLButtonElement&&!k.disabled&&n(k.dataset.action)});let d="",c="",m=new Map;return{render(f){let k=JSON.stringify(f);if(k===d)return;d=k;let P=r.contains(document.activeElement),$=f.announce??f.title;t.textContent!==$&&(t.textContent=$);let u=l("header","cp-hdr"),y=f.avatar==="none"?"agent":f.avatar,{avatarUrl:S}=f;f.avatar!=="none"&&u.append(Ve(f.avatar,"lg",S));let w=l("div","cp-heading"),L=l("h2","cp-title");if(L.tabIndex=-1,f.done){let _=l("span","cp-ok","\u2713 ");_.setAttribute("aria-hidden","true"),L.append(_)}L.append(f.title),w.append(L),f.subtitle&&w.append(Fn(f.subtitle)),u.append(w);let q=new Map,wn=f.blocks.map(_=>{let j=JSON.stringify([_,y,S]),he=!q.has(j)&&m.get(j)||On(_,y,S);return q.has(j)||q.set(j,he),he});m=q,a.replaceChildren(u,...wn,...f.foot?[l("p","cp-foot",f.foot)]:[]);let ye=JSON.stringify(f.buttons);ye!==c&&(c=ye,i.replaceChildren(...f.buttons.map(_=>Me(_.label,_.action,`btn cp-btn-${_.tone}`)))),i.hidden=f.buttons.length===0;for(let _ of r.querySelectorAll("button"))_.disabled=f.busy,_.toggleAttribute("aria-busy",f.busy);s.textContent=f.error??"",s.hidden=!f.error,P&&!r.contains(document.activeElement)&&L.focus({preventScroll:!0})}}}var Mn=1e3,Pn=1e3;function De(e,n){let t=new z({name:e,version:String(11)}),r=n.initial,a,i=0,s,d=Pe(document.getElementById("card"),u=>c({type:"press",action:u,now:Date.now()}));function c(u){let y=n.step(r,u),S=y.state.told!==r.told||y.state.outcome!==r.outcome;r=y.state,u.type==="press"&&(s=void 0),S&&u.type!=="result"&&Ln(r),d.render(n.present(r));for(let w of y.effects)f(w)}function m(u,y){Ee(y)?c({type:"unreachable",call:u,now:Date.now()}):c({type:"reply",call:u,result:y,now:Date.now()})}function f(u){switch(u.type){case"call":{let y=w=>m(u.call,w),S=w=>{(!w.isError||I(w))&&y(w)};t.callTool(u.call.tool,u.call.args,S).then(y,()=>c({type:"unreachable",call:u.call,now:Date.now()}));return}case"timer":clearTimeout(a),a=setTimeout(()=>c({type:"tick",now:Date.now()}),u.inMs);return;case"message":t.sendMessage(u).catch(()=>c({type:"refused",effect:u,now:Date.now()}));return;case"open":t.openLink(u.url).catch(()=>c({type:"refused",effect:u,now:Date.now()}));return;case"context":t.updateModelContext(u.text).catch(()=>{});return}}function k(){let u=Date.now();u-i<Mn||r.view.kind==="waiting"||(i=u,c({type:"reread",now:u}))}function P(u,y){s={result:u,kept:y!==void 0},i=Date.now(),c({type:"result",result:u,kept:y,now:Date.now()})}t.on("ui/notifications/tool-result",u=>{r.view.kind==="waiting"&&P(Te(u,window.openai?.toolResponseMetadata),Le())}),t.on("ui/notifications/tool-cancelled",()=>c({type:"no_result",now:Date.now()})),t.on("ui/notifications/host-context-changed",()=>ae(t.hostContext)),window.addEventListener("openai:set_globals",()=>{let u=s&&!s.kept?Le():void 0;s&&u&&P(s.result,u)}),window.addEventListener("focus",k),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"&&k()});let $=!0;new IntersectionObserver(([u])=>{u?.isIntersecting&&!$&&k(),$=u?.isIntersecting??$}).observe(document.body),d.render(n.present(r)),t.connect().then(()=>ae(t.hostContext),()=>c({type:"no_result",now:Date.now()}))}function Le(){let n=window.openai?.widgetState?.privateContent?.card;if(n?.version!==11||!Array.isArray(n.told))return;let t=n.told.filter(r=>typeof r=="string"&&r.length<=Pn);return{told:te(t),...n.outcome===void 0?{}:{outcome:n.outcome}}}function Ln(e){Promise.resolve(window.openai?.setWidgetState?.(Ae(e,11))).catch(()=>{})}var Dn=/^[a-z0-9][a-z0-9_-]{0,127}$/;function G(e){return Dn.test(e)}function U(e){let n=e.flatMap(({name:r})=>r?[`#${r.replace(/^#/,"")}`]:[]),t=e.length-n.length;return t===0?n:[...n,t===1?"a private Channel":`${t} private Channels`]}function Be(e,n){let t=e.quotedWhole?"":` (${qn(e.words)})`;if(e.kind==="section")return`${e.action==="adds"?`Adds a new section, ${n(e.heading)}${e.quote?`: ${n(e.quote)}`:""}`:`Removes the section ${n(e.heading)}`}${t}`;let r=Bn[e.action],a=Hn(e.place,n);return`${a?`${a}, ${r}`:`${r[0].toUpperCase()}${r.slice(1)}`}: ${n(e.quote)}${t}`}var Bn={adds:"adds",removes:"removes",changes:"changes wording to"};function Hn(e,n){switch(e.kind){case"heading":return`Under ${n(e.heading)}`;case"start":return"At the start";case"end":return"At the end";case"none":return}}function qn(e){return e<10?`${e} ${e===1?"word":"words"}`:`about ${(e<1e3?Math.round(e/10)*10:Math.round(e/100)*100).toLocaleString("en-US")} words`}var ie=" was not available in this practice run, so an answer that needs it can't be judged here.";function He(e){return e.endsWith(ie)&&e.length>ie.length?e.slice(0,-ie.length):void 0}function qe(e){return`Mark ${e}'s read tools`}var F=3*6e4,jn=5e3,Kn=6e4,Wn=60*6e4;function ze(e,n){return Q(e,void 0,n)}function Ge(e,n,t){return Q(e,n,t)}function Q(e,n,t){return ce({kind:"first_answer",tested:e,...n?{again:n}:{},key:`try:${e.agentId}:${t}`,keyedAt:t,startedAt:t,stage:{kind:"asking"}})}function ce(e){return{state:{view:e,busy:!0},effects:[b("practice_agent",{agentId:e.tested.agentId,idempotencyKey:e.key})]}}function R(e){return b("get_practice_run",{runToken:e})}function Je(e,n){switch(n.type){case"press":return e.busy?o(e):zn(e,n.action,n.now);case"reply":return v(e,n.call)?o(e):Jn(e,n.call,n.result,n.now);case"unreachable":return v(e,n.call)?o(e):at(e,n.call,n.now);case"refused":return Gn(e,n.effect);case"tick":return it(e,n.now);case"reread":return e.busy?o(e):st(e);default:return o(e)}}function zn(e,n,t){let{view:r}=e,{stage:a,tested:i}=r;switch(n){case"try_once":return a.kind==="answered"&&!a.reading&&(r.again||a.acted)?Q(i,r.again,t):a.kind==="lost"||a.kind==="stopped"&&(a.then==="again"||a.then==="fix"&&a.acted!==void 0)?je(r,t):o(e);case"try_fix":{if(a.kind==="answered"){let d=tn(a);return d?"url"in d?g({...r,stage:{...a,acted:{kind:"page",url:d.url}}},[{type:"open",url:d.url}]):g({...r,stage:{...a,acted:{kind:"chat"}}},[se(r,d)]):o(e)}let s=a.kind==="stopped"?a.fix:void 0;return a.kind!=="stopped"||!s?o(e):"url"in s?g({...r,stage:{...a,acted:{kind:"page",url:s.url}}},[{type:"open",url:s.url}]):Ie(s)?{state:{view:{...r,stage:{...a,fixing:!0}},busy:!0},effects:[b(s.tool,s.arguments)]}:g({...r,stage:{...a,acted:{kind:"chat"}}},[se(r,s)])}case"check_again":return a.kind!=="slow"?o(e):a.runToken?{state:{view:r,busy:!0},effects:[R(a.runToken)]}:je(r,t);case"open_slack":return i.slackUrl?o(e,[{type:"open",url:i.slackUrl}]):o(e);case"change_something":return a.kind==="answered"?o(e,[{type:"message",draft:`Change ${i.name}: `,sent:`Change ${i.name}: `}]):o(e);default:return o(e)}}function je(e,n){return n-e.keyedAt<Wn-F-6e4?ce({...e,startedAt:n,stage:{kind:"asking"}}):Q(e.tested,e.again,n)}function se(e,n){return{type:"message",sent:`${n.label} for ${e.tested.name}.`}}function Gn(e,n){let{view:t}=e,{stage:r,tested:a}=t;if((r.kind==="stopped"||r.kind==="answered")&&r.acted&&(r.acted.kind==="page"?n.type==="open"&&n.url===r.acted.url:n.type==="message")){let{acted:s,...d}=r;return o({view:{...t,stage:d},busy:!1,error:A})}return(n.type==="open"?n.url===a.slackUrl&&(r.kind==="answered"||r.kind==="stopped"||r.kind==="slow"):r.kind==="answered")?o({...e,error:A}):o(e)}function Jn(e,n,t,r){let{view:a}=e,{stage:i}=a,{tool:s}=n;return s==="get_practice_run"&&i.kind==="answered"&&i.reading===n.args.runToken?Zn(a,i,t):s==="practice_agent"&&i.kind==="asking"?Xn(a,i,t,r):s==="get_practice_run"&&(i.kind==="running"||i.kind==="slow")?Qn(e,t,r):i.kind==="stopped"&&i.fixing?rt(a,i,t):o({...e,busy:!1})}function Xn(e,n,t,r){let a=B(t);if(t.isError&&a===void 0)return Xe(e,n,r);if(a==="in_progress"){let s=n.heldSince??r;return r-s>=Kn?Y(e,E(t)??A,"again"):Yn(e,s)}if(a!==void 0)return tt(e,a,t);let i=ge(t.structuredContent);return i?oe(n.heldSince===void 0?e:{...e,startedAt:r},i,r):Y(e,rn(e),"slack")}function Yn(e,n){return{state:{view:{...e,stage:{kind:"asking",heldSince:n,retry:!0}},busy:!0},effects:[{type:"timer",inMs:jn}]}}function Xe(e,n,t){if(t-e.startedAt>=F)return H(e,void 0);let r=(n.failures??0)+1;return{state:{view:{...e,stage:{...n,failures:r,retry:!0}},busy:!0},effects:[{type:"timer",inMs:D(r-1)}]}}function Qn(e,n,t){let{view:r}=e,{stage:a}=r;if(B(n)==="not_found")return J(r,{kind:"stopped",problem:E(n),then:"slack"},X(r,"but its answer is no longer there"));let s=E(n)?void 0:ge(n.structuredContent);return a.kind==="slow"?s&&s.status!=="running"?oe(r,s,t):s?g({...r,stage:{...a,again:!0}}):o({...e,busy:!1}):a.kind!=="running"?o({...e,busy:!1}):s?oe(r,s,t):Ye(r,a,t)}function Ye(e,n,t){if(t-e.startedAt>=F)return H(e,n.runToken);let r=(n.failures??0)+1;return{state:{view:{...e,stage:{...n,failures:r,retry:!0}},busy:!0},effects:[{type:"timer",inMs:D(r-1)}]}}function oe(e,n,t){switch(n.status){case"answered":{let r=e.again&&n.version!==void 0&&n.before&&n.before.agentVersion!==n.version?n.before.runToken:void 0,a={kind:"answered",ask:n.ask,reply:n.reply??"",read:n.read??[],leftOut:n.leftOut,...n.version===void 0?{}:{version:n.version},...r?{reading:r}:{}},i=e.again?`${le(e)}. ${et}`:X(e,"and it answered its first question there");return r?x({state:{view:{...e,stage:a},busy:!0},effects:[R(r)]},i):J(e,a,i)}case"failed":return J(e,{kind:"stopped",problem:n.problem??dt(e),then:"slack"},X(e,"but it did not finish answering"));case"running":{if(t-e.startedAt>=F)return H(e,n.runToken);let r={kind:"running",runToken:n.runToken,ask:n.ask};return{state:{view:e.stage.kind==="running"&&e.stage.runToken===n.runToken&&!e.stage.retry&&!e.stage.failures?e:{...e,stage:r},busy:!0},effects:[R(n.runToken)]}}}}function Zn(e,n,t){let{reading:r,...a}=n,i=E(t)?void 0:ge(t.structuredContent),s=i?.status==="answered"&&i.version!==void 0&&n.version!==void 0&&i.version!==n.version;return g({...e,stage:{...a,...s?{before:on(i.reply??"")}:{}}})}function H(e,n){return J(e,{kind:"slow",...n?{runToken:n}:{}},X(e,"but its answer did not come back in time"))}function J(e,n,t){return x(g({...e,stage:n}),t)}function Qe(e){let{stage:n,tested:t,again:r}=e;if(!(n.kind!=="slow"||n.runToken===void 0))return{kind:"checking",runToken:n.runToken,agentId:t.agentId,name:t.name,...t.handle?{handle:t.handle}:{},...r?{summary:r.summary}:{}}}function Ze(e){if(!p(e)||e.kind!=="checking")return;let{runToken:n,agentId:t,name:r,handle:a,summary:i}=e;if(!(typeof n!="string"||!/^[A-Za-z0-9_-]{1,64}$/.test(n))&&!(typeof t!="string"||!G(t)||typeof r!="string"))return{kind:"checking",runToken:n,agentId:t,name:r,...typeof a=="string"?{handle:a}:{},...typeof i=="string"?{summary:i}:{}}}function ue(e,n={}){return{kind:"first_answer",tested:{agentId:e.agentId,name:e.name,...e.handle?{handle:e.handle}:{},avatarUrl:n.avatarUrl,...n.promised?{promised:n.promised}:{}},...e.summary===void 0?{}:{again:{summary:e.summary}},key:`try:${e.agentId}:0`,keyedAt:0,startedAt:0,stage:{kind:"slow",runToken:e.runToken}}}var et="A practice answer is shown on the card.";function X(e,n){return e.again?`${le(e)}, ${n}.`:`The person ran ${T(e.tested.name,e.tested.handle)} once from the card, ${n}.`}function le(e){return`The person pressed ${C(en(e))} for ${T(e.tested.name,e.tested.handle)} on the card`}function en(e){return e.again?"Try it again":"See its first answer"}var nt=new Set(["needs_setup","not_testable","model_unavailable","not_allowed","usage_limit","not_found","temporarily_unavailable","test_run_unavailable"]);function tt(e,n,t){let r=I(t);if(!nt.has(n)||!r)return Y(e,rn(e),"slack");let a=nn(r.fix);return Y(e,r.message,a?"fix":r.retryable===!0?"again":"slack",a)}function nn(e){if(!(!$e(e)||e===void 0))return"url"in e&&h(e.url)===void 0?void 0:e}function Y(e,n,t,r){return x(g({...e,stage:{kind:"stopped",problem:n,then:t,...r?{fix:r}:{}}}),`${le(e)}, but the practice run did not start.`)}function rt(e,n,t){let{fixing:r,...a}=n,i=E(t),s=t.structuredContent,d=!i&&p(s)&&p(s.setup)?s.setup:void 0,c=h(d?.url);if(!c||!n.fix){let m=p(s)&&typeof s.summary=="string"?s.summary:void 0;return o({view:{...e,stage:a},busy:!1,error:i??m??A})}return typeof d?.setupToken!="string"?g({...e,stage:{...a,acted:{kind:"chat"}}},[se(e,n.fix)]):x(g({...e,stage:{...a,acted:{kind:"page",url:c}}},[{type:"open",url:c}]),`The person pressed ${C(n.fix.label)} for ${T(e.tested.name,e.tested.handle)} on the card, which opened Chickpea's page. They can try it again once they finish there.`)}function at(e,n,t){let{view:r}=e,{stage:a}=r,{tool:i}=n;if(i==="get_practice_run"&&a.kind==="answered"&&a.reading===n.args.runToken){let{reading:s,...d}=a;return g({...r,stage:d})}if(i==="practice_agent"&&a.kind==="asking")return Xe(r,a,t);if(i==="get_practice_run"&&a.kind==="running")return Ye(r,a,t);if(a.kind==="stopped"&&a.fixing){let{fixing:s,...d}=a;return o({view:{...r,stage:d},busy:!1,error:K})}return o({...e,busy:!1})}function it(e,n){let{view:t}=e,{stage:r}=t;if(!e.busy||!("retry"in r)||!r.retry)return o(e);if(r.kind==="asking"){let{retry:s,...d}=r;return r.heldSince===void 0&&n-t.startedAt>=F?H(t,void 0):ce({...t,stage:d})}if(n-t.startedAt>=F)return H(t,r.runToken);let{retry:a,...i}=r;return{state:{view:{...t,stage:i},busy:!0},effects:[R(r.runToken)]}}function st(e){let{view:n}=e,{stage:t}=n;switch(t.kind){case"asking":return g({...n,stage:{kind:"lost"}});case"running":{let{retry:r,failures:a,...i}=t;return{state:{view:{...n,stage:i},busy:!0},effects:[R(t.runToken)]}}case"slow":return t.runToken?o(e,[R(t.runToken)]):o(e);case"answered":return t.reading?{state:{view:n,busy:!0},effects:[R(t.reading)]}:o(e);default:return o(e)}}function ge(e){if(!(!p(e)||typeof e.runToken!="string"||typeof e.question!="string")&&!(e.status!=="running"&&e.status!=="answered"&&e.status!=="failed"))return{status:e.status,runToken:e.runToken,ask:e.question,...typeof e.reply=="string"?{reply:e.reply.replaceAll("&lt;","<")}:{},...Array.isArray(e.read)?{read:e.read.filter(n=>typeof n=="string")}:{},...typeof e.problem=="string"?{problem:e.problem}:{},...p(e.ran)&&typeof e.ran.agentVersion=="string"?{version:e.ran.agentVersion}:{},...p(e.before)&&typeof e.before.runToken=="string"&&typeof e.before.agentVersion=="string"?{before:{runToken:e.before.runToken,agentVersion:e.before.agentVersion}}:{},leftOut:ot(e.off,e.fixes)}}function ot(e,n){let t=Array.isArray(e)?e.filter(a=>typeof a=="string"):[],r=Array.isArray(n)?n.map(nn).filter(a=>a!==void 0):[];return t.flatMap(a=>{let i=He(a);if(i===void 0)return[];let s=r.find(d=>"tool"in d&&d.label===qe(i));return[{service:i,...s?{fix:s}:{}}]})}function tn(e){return e.leftOut.find(({fix:n})=>n)?.fix}function rn(e){return`The practice run didn't start. Ask ${e.tested.name} in Slack instead.`}function dt(e){return`The practice run didn't finish. Ask ${e.tested.name} in Slack instead.`}var de="A practice run: it makes only read requests and sends nothing to Slack.",ct="A practice run: it made only read requests and sent nothing to Slack.";function an(e){let{tested:n,stage:t}=e,r=`${n.name}'s first answer`,a={avatar:"agent",avatarUrl:n.avatarUrl,title:r},i=n.slackUrl?[{label:"Open in Slack",action:"open_slack",tone:"primary"}]:[];switch(t.kind){case"asking":{let s=t.heldSince===void 0?`Asking ${n.name} its first question`:"Waiting for another practice run to finish";return{...a,announce:`${r}. ${s}.`,subtitle:[{text:de}],blocks:[{kind:"steps",steps:[{label:s,state:"now"}]}],buttons:[]}}case"running":return Ke(e,t.ask);case"answered":{if(t.reading)return Ke(e,t.ask);let s=ft(n,t.ask),d=on(t.reply),c=e.again?t.before!==void 0?[{label:"Before",text:t.before},{label:"After",text:d}]:[{label:"What it answered",text:d}]:[...s?[{label:"What we promised",text:s}]:[],{label:"What it answered",text:d}],m=tn(t),f=m&&!(e.again&&(t.acted||e.again.undoToken!==void 0))?{label:m.label,action:"try_fix",tone:"secondary"}:{label:"Change something",action:"change_something",tone:"secondary"};return{...a,announce:`${r}. It answered.`,subtitle:[{text:ct}],blocks:[sn(t.ask),{kind:"panes",panes:c},...t.read.length?[{kind:"note",text:`It read ${mt(t.read)}.`}]:[],...t.leftOut.map(({service:k})=>({kind:"note",text:ut(k),tone:"warn"})),...t.acted?[{kind:"note",text:We[t.acted.kind]}]:[]],buttons:e.again?[{label:"Try it again",action:"try_once",tone:"primary"},f]:t.acted?[{label:"Try again",action:"try_once",tone:"primary"},f]:[...i,f]}}case"stopped":return{...a,announce:`${r}. ${t.problem}`,blocks:[{kind:"text",text:t.problem},...t.acted?[{kind:"note",text:We[t.acted.kind]}]:[]],buttons:gt(t,i)};case"slow":{let s=t.runToken?lt:t.again?`It's still answering. Check again in a moment, or ask ${n.name} in Slack.`:`Its answer is taking longer than it should. Check again in a moment, or ask ${n.name} in Slack.`;return{...a,announce:`${r}. ${s}`,blocks:[{kind:"text",text:s}],buttons:[{label:"Check again",action:"check_again",tone:"primary"},...i.map(d=>({...d,tone:"secondary"}))]}}case"lost":{let s="This card closed before the practice run answered.";return{...a,announce:`${r}. ${s}`,subtitle:[{text:de}],blocks:[{kind:"text",text:s}],buttons:[{label:en(e),action:"try_once",tone:"primary"}]}}}}function Ke({tested:e},n){let t=`${e.name}'s first answer`;return{avatar:"agent",avatarUrl:e.avatarUrl,title:t,announce:`${t}. ${e.name} is answering.`,subtitle:[{text:de}],blocks:[sn(n),{kind:"steps",steps:[{label:`${e.name} is answering`,state:"now"}]}],buttons:[]}}function ut(e){return`${e} wasn't used: none of its tools are marked as ones that only read.`}var lt="Still working on it.",We={page:"Finish on the Chickpea page that opened, then try again.",chat:"Finish it in the chat, then try again."};function gt(e,n){let t={label:"Try again",action:"try_once",tone:"primary"},r=i=>e.fix?[{label:e.fix.label,action:"try_fix",tone:i}]:[],a=n.map(i=>({...i,tone:"secondary"}));switch(e.then){case"again":return[t,...a];case"fix":return e.acted?[t,...r("secondary")]:[...r("primary"),...a];case"slack":return n}}function sn(e){return{kind:"note",text:`First question: \u201C${e}\u201D`}}function ft(e,n){let{promised:t}=e,r=a=>a.replace(/\s+/g," ").trim();return t&&r(t.ask)===r(n)?t.answer:void 0}function on(e){return pt(e).trim()||"It gave no answer."}function pt(e){let n=[],t=r=>`\0${n.push(r)-1}\0`;return e.replace(/\u0000/g,"").replace(/^[ \t]*```[^\n]*\n([\s\S]*?)^[ \t]*```[ \t]*$\n?/gm,(r,a)=>t(a)).replace(/^[ \t]*```.*$\n?/gm,"").replace(/`([^`\n]+)`/g,(r,a)=>t(a)).replace(/!?\[([^\]\n]*)\]\([^)\n]*\)/g,"$1").replace(/^[ \t]*\|?(?:[ \t]*:?-+:?[ \t]*\|)+(?:[ \t]*:?-+:?[ \t]*)?$\n?/gm,"").replace(/^[ \t]*\|(.*)\|[ \t]*$/gm,(r,a)=>a.split("|").map(i=>i.trim()).join(" \xB7 ")).replace(/^[ \t]*([-*_])(?:[ \t]*\1){2,}[ \t]*$\n?/gm,"").replace(/^[ \t]*(?:>[ \t]?)+/gm,"").replace(/^#{1,6}[ \t]+/gm,"").replace(/^([ \t]*)[-*+][ \t]+/gm,"$1\u2022 ").replace(/(\*\*|__|~~)(?=\S)([^\n]*?\S)\1/g,"$2").replace(/(^|[^\w*])\*(?=[^\s*])([^*\n]*?[^\s*])\*(?![\w*])/gm,"$1$2").replace(/(^|[^\w_])_(?=[^\s_])([^_\n]*?[^\s_])_(?![\w_])/gm,"$1$2").replace(/\u0000(\d+)\u0000/g,(r,a)=>n[Number(a)]??"")}function mt(e){return e.length<=2?e.join(" and "):`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}var kt=new Set(["get_creation_status","get_agent","get_confirmation"]),yt=new Set(["instructions","model","effort"]),un={view:{kind:"waiting"},busy:!1,seq:0},ln=Ce(ht,{remember:Rt,resume:Nt});function ht(e,n){let{view:t}=e;if(t.kind==="first_answer"&&n.type!=="result"&&!xt(n))return Je({...e,view:t},n);switch(n.type){case"result":return bt(n.result,n.now);case"press":return e.busy?o(e):wt(e,n.action,n.now);case"reply":return v(e,n.call)&&!Tt(e,n.call)?o(e):St(e,n.call,n.result,n.now);case"unreachable":return v(e,n.call)?o(e):kt.has(n.call.tool)?e.view.kind!=="creating"?o(e):fe({...e.view,failures:(e.view.failures??0)+1},n.now):o({view:e.view.kind==="starting"?e.view.from:e.view,busy:!1,error:K});case"refused":return o({...e,error:A});case"no_result":return e.view.kind==="waiting"?g(W):o(e);case"tick":return e.busy?o(e):It(e,n.now);case"reread":return e.busy?o(e):pn(e,n.now)}}function bt(e,n){let t=E(e);if(t)return g({kind:"notice",title:t});let r=e.structuredContent;if(Pt(r))return g({kind:"proposal",proposal:r});if(Lt(r))return g({kind:"change",preview:r});if(N(r)){let a=Re(e);return a==="create_agent"&&r.status==="done"&&r.agent?gn(r,{answersIn:[],needs:[]},n):O(r,n,{saved:a==="update_agent",undone:a==="undo_change"})}return g(W)}function O(e,n,t={}){switch(e.status){case"needs_confirmation":return e.confirmation?ne(e.confirmation,n)?g(V):g({kind:"confirm",confirmation:e.confirmation,...e.agent?{agent:{agentId:e.agent.agentId,name:e.agent.name,handle:e.agent.handle},avatarUrl:h(e.agent.avatarUrl),adminUrl:h(e.agent.links?.admin)}:{}},[pe(e.confirmation,n)]):g({kind:"notice",title:e.summary});case"done":{let{agent:r}=e;return g({kind:"done",summary:e.summary,...r?{agent:{agentId:r.agentId,name:r.name,handle:r.handle},avatarUrl:h(r.avatarUrl),status:r.status,channels:U(r.channels??[]),slackUrl:h(r.links?.slack)}:{},undoToken:t.undone?void 0:e.undoToken,version:e.version,...t.saved?{saved:!0}:{},...t.practice?{practice:!0}:{}})}default:return g({kind:"notice",title:e.summary})}}function gn(e,n,t){let r=e.agent;return g({kind:"creating",agentId:r.agentId,agent:{name:r.name,handle:r.handle},avatarUrl:h(r.avatarUrl)??n.avatarUrl,workspaceName:n.workspaceName,answersIn:n.answersIn,needs:n.needs,adminUrl:h(r.links?.admin),startedAt:t,...n.byPress?{byPress:!0}:{},...n.promised?{promised:n.promised}:{}},[b("get_creation_status",{agentId:r.agentId})])}function wt(e,n,t){let{view:r}=e,a=i=>o({view:r,busy:!0},[i]);switch(n){case"create":return r.kind==="proposal"?dn(r,r.proposal.create.arguments):o(e);case"create_anyway":return r.kind==="similar"?dn(r,{...r.create,createEvenIfSimilar:!0,idempotencyKey:`${r.create.idempotencyKey}:anyway`}):o(e);case"change_something":{let i=r.kind==="proposal"?r.proposal.proposal.name:r.kind==="similar"?r.name:void 0;return i?o(e,[{type:"message",draft:`Change ${i}: `,sent:`Change ${i}: `}]):o(e)}case"save":return r.kind==="change"&&!r.stale?a(b("update_agent",r.preview.save.arguments)):o(e);case"cancel":return r.kind==="change"?x(g({kind:"notice",title:"Not saved",body:"Nothing changed."}),`The person cancelled this change to ${T(r.preview.agent.name)} on the card. Nothing was saved.`):o(e);case"confirm":return r.kind!=="confirm"||!r.confirmation.confirmToken?o(e):ne(r.confirmation,t)?g(V):a(b("confirm_change",{confirmToken:r.confirmation.confirmToken}));case"keep":return r.kind!=="confirm"||!r.confirmation.confirmToken?o(e):a(b("decline_change",{confirmToken:r.confirmation.confirmToken}));case"undo":{let i=r.kind==="done"?r.undoToken:r.kind==="first_answer"&&fn(r)?r.again?.undoToken:void 0;return i?a(b("undo_change",{undoToken:i,idempotencyKey:`undo:${i}`})):o(e)}case"open_slack":{let i=Mt(r);return i?o(e,[{type:"open",url:i}]):o(e)}case"open_admin":{let i=r.kind==="ready"||r.kind==="creating"||r.kind==="confirm"&&kn(r)?r.adminUrl:void 0;return i?o(e,[{type:"open",url:i}]):o(e)}case"next_step":{let i=r.kind==="ready"?r.needs[0]:void 0;return i&&r.kind==="ready"?o(e,[{type:"message",sent:`Connect ${i.name} to ${r.agent.name}.`}]):o(e)}case"check_again":return pn(e,t);case"try_once":if(r.kind==="ready"&&hn(r))return ze(Ct(r),t);if(r.kind==="done"&&r.agent&&ke(r)){let{agent:i}=r;return Ge({agentId:i.agentId,name:i.name,handle:i.handle,avatarUrl:r.avatarUrl,slackUrl:r.slackUrl},{summary:r.summary,undoToken:r.undoToken},t)}return o(e);case"try_fix":return o(e)}}function xt(e){return e.type==="press"?e.action==="undo":(e.type==="reply"||e.type==="unreachable")&&e.call.tool==="undo_change"}function fn(e){let{stage:n}=e,t=n.kind==="answered"?n.reading===void 0:n.kind==="stopped"||n.kind==="slow";return e.again?.undoToken!==void 0&&t}function At(e){let n=({action:t,tone:r})=>t==="change_something"||t==="open_slack"&&r==="secondary";return e.some(n)?e.map(t=>n(t)?me:t):e.length<2?[...e,me]:[...e]}function ke(e){return e.practice!==void 0&&e.agent!==void 0&&e.status!=="off"&&e.status!=="archived"}function _t(e){return e.agent.hasFirstAsk===!0&&e.changes.some(({field:n})=>yt.has(n))}function Ct(e){return{agentId:e.agentId,name:e.agent.name,handle:e.agent.handle,avatarUrl:e.avatarUrl,slackUrl:h(e.status.slackUrl),promised:e.promised}}function Tt(e,n){let{view:t}=e;if(e.busy||n.tool!=="create_agent")return!1;let r=n.args.idempotencyKey;return t.kind==="proposal"?r===t.proposal.create.arguments.idempotencyKey:t.kind==="similar"&&r===`${t.create.idempotencyKey}:anyway`}function dn(e,n){return{state:{view:{kind:"starting",from:e},busy:!0},effects:[b("create_agent",n)]}}function St(e,n,t,r){let{view:a}=e,i=E(t),s=B(t),d=t.structuredContent;switch(n.tool){case"create_agent":{let c=a.kind==="starting"?a.from:a.kind==="proposal"||a.kind==="similar"?a:void 0;if(i||!N(d))return o({view:c??a,busy:!1,error:i??A});let m=c?.kind==="proposal"?c.proposal.proposal:void 0;if(d.status==="done"&&d.agent){let{name:f,handle:k}=d.agent;return x(gn(d,{answersIn:U(m?.answersIn??[]),needs:m?.needs??[],workspaceName:m?.workspaceName,avatarUrl:M(c),byPress:!0,promised:ee(c)},r),`The person created ${T(f,k)} from the card. It is joining Slack now.`)}if(d.status==="similar_agent_exists"&&c){let f=c.kind==="proposal"?c.proposal.create.arguments:c.create,k=ee(c);return x(g({kind:"similar",summary:d.summary,create:f,name:f.name,avatarUrl:M(c),...k?{promised:k}:{}}),`The person pressed Create in Slack on the card, but nothing was created. Chickpea said: ${C(d.summary)}`)}return O(d,r)}case"get_creation_status":return s==="not_found"?Z(e,"unavailable"):$t(e,i?void 0:d,r);case"update_agent":{if(i||!N(d))return a.kind==="change"&&s==="changed_since_read"?o({view:{...a,stale:!0},busy:!1,error:i}):o({view:a,busy:!1,error:i??A});let c=a.kind==="change"?a.preview.agent.name:d.agent?.name,m=c===void 0?"the Agent":T(c),f=a.kind==="change"&&_t(a.preview);return x(O(d,r,{saved:!0,practice:f}),d.status==="needs_confirmation"?`The person pressed Save on the card for ${m}. Nothing has changed yet: it waits for their confirmation on the card.`:c===void 0?`The person saved the change from the card. Chickpea said: ${C(d.summary)}`:`The person saved the change to ${m} from the card.`)}case"confirm_change":return s==="confirmation_expired"?g(V):i||!N(d)?i&&s!==void 0&&s!=="temporarily_unavailable"?x(g({kind:"notice",title:"Nothing changed",body:i}),`The person confirmed on the card, but nothing changed. Chickpea said: ${C(i)}`):o({view:a,busy:!1,error:i??A}):x(O(d,r),`The person confirmed on the card. Chickpea said: ${C(d.summary)}`);case"decline_change":{if(!(i?s==="not_found":N(d)))return o({view:a,busy:!1,error:i??A});let m=a.kind==="confirm"?a.confirmation.ask.keep:"Keep it";return!i&&N(d)&&d.status==="done"?x(O(d,r),`On the card, the person pressed ${C(m)}, but the change was already made. Chickpea said: ${C(d.summary)}`):x(g(Ft),`On the card, the person pressed ${C(m)}, so nothing changed. Make this change only if they ask for it again.`)}case"undo_change":{if(i||!N(d))return o({view:s==="nothing_to_undo"||s==="changed_since_read"?Et(a):a,busy:!1,error:i??A});let c=a.kind==="done"?a.agent?.name:a.kind==="first_answer"?a.tested.name:void 0;return x(O(d,r,{undone:!0}),d.status==="needs_confirmation"?"The person pressed Undo on the card. Nothing has changed yet: it waits for their confirmation on the card.":`The person undid the change${c===void 0?"":` to ${T(c)}`} from the card.`)}case"get_confirmation":{if(e.busy||a.kind!=="confirm")return o(e);let c=i?void 0:d?.status;return c==="applied"?g({kind:"done",summary:Vt,...a.agent?{agent:a.agent}:{},avatarUrl:a.avatarUrl}):c==="cancelled"?g(Ot):c==="expired"?g(V):o(e)}case"get_agent":{if(e.busy)return o(e);if(s==="not_found")return Z(e,"unavailable");let c=i?void 0:d;return typeof c?.version!="string"||a.kind==="confirm"?o(e):c.status==="archived"?Z(e,"archived"):a.kind==="change"&&c.version!==a.preview.save.arguments.version?o({...e,view:{...a,stale:!0}}):a.kind==="done"&&a.undoToken&&c.version!==a.version?o({...e,view:{...a,undoToken:void 0}}):o(e)}default:return o({...e,busy:!1})}}function Et(e){return e.kind==="done"?{...e,undoToken:void 0}:e.kind==="first_answer"&&e.again?{...e,again:{...e.again,undoToken:void 0}}:e}function Z(e,n){let{view:t}=e,r=t.kind==="creating"||t.kind==="ready"||t.kind==="done"||t.kind==="confirm"?t.agent:t.kind==="change"?t.preview.agent:void 0;if(!r)return o(e);let a=t.kind==="change"?h(t.preview.agent.avatarUrl):"avatarUrl"in t?t.avatarUrl:void 0;return g({kind:"gone",agent:{name:r.name,handle:r.handle},why:n,avatarUrl:a})}function $t(e,n,t){let{view:r}=e;if(r.kind!=="creating"&&r.kind!=="ready")return o(e);if(!n||typeof n.stage!="string")return r.kind==="creating"?fe({...r,failures:(r.failures??0)+1},t):o(e);if(n.agent?.status==="archived")return Z(e,"archived");let a=h(n.agent?.avatarUrl)??r.avatarUrl;if(!(n.stage==="needs_attention"||n.stage!=="joining"&&n.channels!=="joining")){let{failures:c,...m}=r.kind==="creating"?r:{...r,kind:"creating",startedAt:t};return fe({...m,avatarUrl:a,status:n},t)}let s=g({kind:"ready",agentId:r.agentId,agent:r.agent,avatarUrl:a,answersIn:r.answersIn,needs:r.needs,adminUrl:r.adminUrl,status:n,...r.promised?{promised:r.promised}:{}});if(r.kind!=="creating"||!r.byPress)return s;let d=T(r.agent.name,r.agent.handle);return x(s,n.stage==="needs_attention"?`The person created ${d} from the card, but it needs attention in Slack. Chickpea said: ${C(n.problem??"Slack has not finished setting it up.")}`:`The person created ${d} from the card. It is ready in Slack${n.stage==="said_hello"?" and said hello to them there":""}.`)}function fe(e,n){return n-e.startedAt>=_e?g({...e,slow:!0}):g(e,[{type:"timer",inMs:D(e.failures)}])}function It(e,n){let{view:t}=e;return t.kind==="creating"&&!t.slow?o(e,[b("get_creation_status",{agentId:t.agentId})]):t.kind==="confirm"&&ne(t.confirmation,n)?g(V):o(e)}function pn(e,n){let{view:t}=e;switch(t.kind){case"starting":return g(t.from);case"creating":{let{slow:r,failures:a,...i}=t;return o({...e,view:{...i,startedAt:n}},[b("get_creation_status",{agentId:t.agentId})])}case"ready":return o(e,[b("get_creation_status",{agentId:t.agentId})]);case"change":return o(e,[b("get_agent",{agentId:t.preview.save.arguments.agentId})]);case"done":return t.agent?o(e,[b("get_agent",{agentId:t.agent.agentId})]):o(e);case"confirm":{if(ne(t.confirmation,n))return g(V);let{confirmToken:r}=t.confirmation;return r?o(e,[pe(t.confirmation,n),b("get_confirmation",{confirmToken:r}),...t.agent?[b("get_agent",{agentId:t.agent.agentId})]:[]]):o(e,[pe(t.confirmation,n)])}default:return o(e)}}function Rt(e){switch(e.kind){case"creating":case"ready":return{kind:"created",name:e.agent.name,agentId:e.agentId};case"done":return{kind:"done",summary:e.summary,...e.practice&&ke(e)?{practice:!0}:{}};case"first_answer":{let n=Qe(e);return n||(e.again?{kind:"done",summary:e.again.summary,practice:!0}:{kind:"created",name:e.tested.name,agentId:e.tested.agentId})}case"notice":return{kind:"notice",title:e.title,...e.body?{body:e.body}:{}};default:return}}function cn(e){return e.practice?{practice:!0}:{}}function Nt(e,n){let t=Ut(n);switch(t?.kind){case"checking":return e.kind==="proposal"||e.kind==="similar"?ue(t,{avatarUrl:M(e),promised:ee(e)}):ue(t,{avatarUrl:"avatarUrl"in e?e.avatarUrl:void 0});case"created":return e.kind!=="proposal"?void 0:t.agentId?vt(e,{name:t.name,agentId:t.agentId}):{kind:"done",summary:`Created ${t.name}.`,avatarUrl:M(e)};case"notice":return e.kind==="change"||e.kind==="confirm"?{kind:"notice",title:t.title,body:t.body}:void 0;case"done":if(e.kind==="done"){let{undoToken:r,version:a,saved:i,status:s,practice:d,...c}=e;return{...c,summary:t.summary,...cn(t)}}if(e.kind==="change"){let{agent:r,save:a}=e.preview;return{kind:"done",summary:t.summary,agent:{agentId:a.arguments.agentId,name:r.name,handle:r.handle},avatarUrl:h(r.avatarUrl),...cn(t)}}return e.kind==="confirm"?{kind:"done",summary:t.summary,...e.agent?{agent:e.agent}:{},avatarUrl:e.avatarUrl}:void 0;default:return}}function vt(e,n){let{proposal:t,create:r}=e.proposal,a=ee(e);return{kind:"creating",agentId:n.agentId,agent:{name:n.name,handle:r.arguments.handle??t.handle},avatarUrl:M(e),workspaceName:t.workspaceName,answersIn:U(t.answersIn),needs:t.needs,startedAt:0,...a?{promised:a}:{}}}function Ut(e){if(p(e)){if(e.kind==="created"&&typeof e.name=="string")return{kind:"created",name:e.name,...typeof e.agentId=="string"&&G(e.agentId)?{agentId:e.agentId}:{}};if(e.kind==="done"&&typeof e.summary=="string")return{kind:"done",summary:e.summary,...e.practice===!0?{practice:!0}:{}};if(e.kind==="checking")return Ze(e);if(e.kind==="notice"&&typeof e.title=="string")return{kind:"notice",title:e.title,...typeof e.body=="string"?{body:e.body}:{}}}}var V={kind:"notice",title:"This confirmation expired",body:"Nothing changed. Ask again for a fresh one."},Ft={kind:"notice",title:"Kept as it is",body:"Nothing changed."},Ot={kind:"notice",title:"This confirmation no longer applies",body:"Nothing changed. Ask again to make the change."},Vt="Made the change you confirmed.";function pe(e,n){return{type:"timer",inMs:Math.max(0,Date.parse(e.expiresAt)-n)}}function ne(e,n){let t=Date.parse(e.expiresAt);return Number.isFinite(t)&&n>=t}function Mt(e){if(e.kind==="ready")return h(e.status.slackUrl);if(e.kind==="creating")return h(e.status?.slackUrl);if(e.kind==="done")return e.slackUrl}function M(e){return e?.kind==="proposal"?h(e.proposal.proposal.avatarUrl):e?.avatarUrl}function ee(e){return e?.kind==="proposal"?mn(e.proposal.proposal):e?.promised}function mn({sampleExchange:e}){let{ask:n,answer:t}=p(e)?e:{};return typeof n=="string"&&n.trim()&&typeof t=="string"&&t.trim()?{ask:n,answer:t}:void 0}function kn(e){return e.confirmation.inAdmin===!0&&e.adminUrl!==void 0}function Pt(e){return p(e)&&p(e.proposal)&&p(e.create)&&p(e.create.arguments)}function Lt(e){return p(e)&&Array.isArray(e.changes)&&p(e.save)&&p(e.save.arguments)}function N(e){return p(e)&&typeof e.status=="string"&&typeof e.summary=="string"}var Dt={name:"Name",description:"Description",handle:"Slack handle",instructions:"Instructions",on:"On or off",model:"Model",effort:"Effort",imageModel:"Image model",whoCanEdit:"Who can edit"},Bt={creator_and_admins:"Its creator and workspace admins",all_workspace_members:"Anyone in the workspace"},yn=Ne(Ht);function Ht(e){let n={busy:e.busy,error:e.error},{view:t}=e;switch(t.kind){case"waiting":return{...n,avatar:"none",title:"Loading\u2026",blocks:[],buttons:[]};case"proposal":return{...n,...jt(t.proposal)};case"similar":return{...n,avatar:"agent",avatarUrl:t.avatarUrl,title:"An Agent like this already exists",blocks:[{kind:"text",text:t.summary}],buttons:[{label:"Create it anyway",action:"create_anyway",tone:"primary"},{label:"Change something",action:"change_something",tone:"secondary"}]};case"starting":return{...n,...Kt(t.from)};case"creating":return{...n,...Wt(t)};case"ready":return{...n,...zt(t)};case"change":return{...n,...Xt(t.preview,t.stale===!0)};case"done":return{...n,...Jt(t)};case"confirm":return{...n,...qt(t)};case"gone":return{...n,avatar:"agent",avatarUrl:t.avatarUrl,title:t.why==="archived"?`${t.agent.name} is archived`:`${t.agent.name} is no longer available`,blocks:[{kind:"text",text:t.why==="archived"?"It no longer answers in Slack.":"It was deleted, or you can no longer manage it."}],buttons:[]};case"notice":return{...n,avatar:"none",title:t.title,blocks:t.body?[{kind:"text",text:t.body}]:[],buttons:[]};case"first_answer":{let r=an(t);return{...n,...r,buttons:fn(t)?At(r.buttons):r.buttons}}}}var me={label:"Undo",action:"undo",tone:"secondary"};function qt(e){let{ask:n,confirmToken:t,inAdmin:r}=e.confirmation,a={avatar:e.agent?"alert":"none",avatarUrl:e.avatarUrl,title:n.question};return t?{...a,blocks:[{kind:"text",text:n.consequence}],buttons:[{label:n.confirm,action:"confirm",tone:"danger"},{label:n.keep,action:"keep",tone:"secondary"}]}:{...a,blocks:[{kind:"text",text:n.consequence},{kind:"note",text:r?"Confirm this in Admin.":"Ask again in a new chat to confirm it."}],buttons:kn(e)?[{label:"Open in Admin",action:"open_admin",tone:"secondary"}]:[]}}function jt({proposal:e,issues:n}){let t=mn(e),r=bn(["your DMs",...U(e.answersIn)]);return{avatar:"agent",avatarUrl:h(e.avatarUrl),title:e.name,subtitle:[{text:`@${e.handle}`},...e.handleAvailable===!1?[{text:" \xB7 "},{text:"handle is taken",tone:"warn"}]:[]],blocks:[t?{kind:"exchange",ask:t.ask.trim(),answer:t.answer.trim(),agent:e.name}:{kind:"text",text:e.job},{kind:"line",parts:[{text:"Answers in "},{text:r,strong:!0},{text:`. Anyone in ${e.workspaceName?.trim()||"your Slack workspace"} can message it.`}]},...e.needs.length?[{kind:"line",parts:[{text:"Needs "},...e.needs.flatMap(({name:a})=>[{chip:a},{text:" "}]),{text:"\xB7 you sign in after it's created"}]}]:[],...n.map(a=>({kind:"note",text:a,tone:"warn"}))],buttons:[{label:"Create in Slack",action:"create",tone:"primary"},{label:"Change something",action:"change_something",tone:"secondary"}]}}function Kt(e){let n=e.kind==="proposal"?e.proposal.proposal:void 0,t=n?.handle??(e.kind==="similar"?e.create.handle:void 0),r=U(n?.answersIn??[]);return{avatar:"agent",avatarUrl:M(e),title:n?.name??(e.kind==="similar"?e.name:""),subtitle:[{text:n?.workspaceName?`Setting up in ${n.workspaceName}'s Slack\u2026`:"Setting up in Slack\u2026"}],blocks:[{kind:"steps",steps:[{label:"Creating it in Chickpea",state:"now"},{label:t?`Joining Slack as @${t}`:"Joining Slack",state:"todo"},{label:"Saying hello to you",state:"todo"},...r.length?[{label:`Joining ${r.join(", ")}`,state:"todo"}]:[]]}],buttons:[]}}function Wt(e){let n=e.status?.stage??"joining",t=e.status?.channels??"none",r=n!=="joining";return{avatar:"agent",avatarUrl:e.avatarUrl,title:e.agent.name,subtitle:[{text:e.workspaceName?`Setting up in ${e.workspaceName}'s Slack\u2026`:"Setting up in Slack\u2026"}],blocks:[{kind:"steps",steps:[{label:"Created in Chickpea",state:"done"},{label:e.agent.handle?`Joining Slack as @${e.agent.handle}`:"Joining Slack",state:r?"done":"now"},...n==="ready"?[]:[{label:"Saying hello to you",state:r?"done":"todo"}],...t==="none"?[]:[{label:e.answersIn.length?`Joining ${e.answersIn.join(", ")}`:"Joining its Channels",state:t==="joined"?"done":t==="needs_attention"?"failed":r?"now":"todo"}]]},...e.slow?[{kind:"note",text:"This is taking longer than usual. It keeps going, and the card checks again when you come back."}]:[]],buttons:e.slow?[{label:"Check again",action:"check_again",tone:"secondary"}]:[]}}function zt(e){let{status:n,agent:t}=e,r=t.handle?`@${t.handle}`:t.name;if(n.stage==="needs_attention")return{avatar:"alert",avatarUrl:e.avatarUrl,title:`${t.name} needs attention in Slack`,blocks:[{kind:"text",text:n.problem??"Slack has not finished setting it up."}],buttons:[...e.adminUrl?[{label:"Open in Admin",action:"open_admin",tone:"primary"}]:[],...h(n.slackUrl)?[{label:"Open in Slack",action:"open_slack",tone:"secondary"}]:[]]};let a=e.answersIn.length?`your DMs and ${bn(e.answersIn)}`:"your DMs";return{avatar:"agent",avatarUrl:e.avatarUrl,title:n.stage==="said_hello"?`${r} said hello to you in Slack`:`${t.name} is ready in Slack`,subtitle:[{text:`${t.name} is ready \xB7 answers in ${a}`}],blocks:[...n.hello?[{kind:"quote",text:n.hello}]:[],...n.channels==="needs_attention"?[{kind:"note",text:"It could not join one of its Channels yet.",tone:"warn"}]:[]],buttons:[...h(n.slackUrl)?[{label:"Open in Slack",action:"open_slack",tone:"primary"}]:[],...Gt(e)]}}function Gt(e){let n=e.needs[0];return n?[{label:`Connect ${n.name}`,action:"next_step",tone:"secondary"}]:hn(e)?[{label:"See its first answer",action:"try_once",tone:"secondary"}]:[]}function hn(e){return e.needs.length===0&&e.status.stage!=="needs_attention"&&e.status.agent?.hasFirstAsk===!0}function Jt(e){let n=e.status==="off"?"It won't answer in Slack until it's turned back on.":e.saved&&e.agent?.handle&&e.status!=="archived"?Se(e.agent.handle,e.channels??[]):void 0;return{avatar:"agent",avatarUrl:e.avatarUrl,title:e.summary.replace(/\.$/,""),done:!0,...n?{subtitle:[{text:n}]}:{},blocks:[],buttons:[...ke(e)?[{label:"Try it again",action:"try_once",tone:"primary"}]:[],...e.undoToken?[me]:[],...e.slackUrl?[{label:"Open in Slack",action:"open_slack",tone:"secondary"}]:[]].slice(0,2)}}function Xt(e,n){let t=e.changes.length;return{avatar:"agent",avatarUrl:h(e.agent.avatarUrl),title:`Change ${e.agent.name}`,subtitle:[{text:`${t} ${t===1?"change":"changes"} \xB7 nothing is saved until you press Save`}],blocks:[...e.changes.flatMap(r=>[{kind:"section",label:Dt[r.field]},...Yt(r)]),...n?[{kind:"note",text:"It changed since this preview. Ask again for a fresh one.",tone:"warn"}]:[]],buttons:[...n?[]:[{label:"Save",action:"save",tone:"primary"}],{label:"Cancel",action:"cancel",tone:"secondary"}]}}function Yt(e){if(e.field==="instructions")return e.quotes.length?e.quotes.map(t=>({kind:"quote",text:Be(t,r=>`\u201C${r}\u201D`)})):[{kind:"text",text:"Only spacing or line breaks change."}];if(e.field==="on")return[{kind:"text",text:e.after?"Turns it back on.":"Turns it off."}];let n=t=>t==null||t===""?Qt[e.field]??"Not set":e.field==="handle"?`@${t}`:e.field==="whoCanEdit"?Bt[String(t)]??String(t):String(t);return[{kind:"text",text:n(e.after)},...e.before===void 0?[]:[{kind:"note",text:`Was: ${n(e.before)}`}]]}var Qt={model:"The workspace default",imageModel:"The workspace default",effort:"The model's standard effort"};function bn(e){return e.length<=2?e.join(" and "):`${e.slice(0,-1).join(", ")} and ${e.at(-1)}`}De("chickpea-agent-card",{initial:un,step:ln,present:yn});})();
</script></body>
</html>