catherd-cli 2.0.0-next.20261022182421 → 2.0.0-next.20261022200328

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 (105) hide show
  1. package/package.json +9 -9
  2. package/plugin/.claude-plugin/plugin.json +1 -1
  3. package/plugin/.codex-plugin/plugin.json +1 -1
  4. package/plugin/bin/catherd-mcp +1 -1
  5. package/plugin/skills/catherd/SKILL.md +1 -1
  6. package/src/entry/runs-command.ts +4 -1
  7. package/src/infra/supervisor.ts +1 -1
  8. package/src/services/capture.ts +1 -1
  9. package/src/services/protocol.ts +1 -1
  10. package/src/services/run-report.ts +2 -1
  11. package/src/services/summary.ts +18 -3
  12. package/web/dist/assets/{Brand-CsasrnDg.js → Brand-BZ37Usv9.js} +1 -1
  13. package/web/dist/assets/Brand-BZ37Usv9.js.br +0 -0
  14. package/web/dist/assets/Brand-BZ37Usv9.js.gz +0 -0
  15. package/web/dist/assets/{Modal-Xe1WI1-2.js → Modal-Cfsb-5wI.js} +1 -1
  16. package/web/dist/assets/Modal-Cfsb-5wI.js.br +0 -0
  17. package/web/dist/assets/Modal-Cfsb-5wI.js.gz +0 -0
  18. package/web/dist/assets/{Pressable-C8-T6Ed_.js → Pressable-CInPFWYq.js} +1 -1
  19. package/web/dist/assets/StatusChip-DNJGXpaM.js +153 -0
  20. package/web/dist/assets/StatusChip-DNJGXpaM.js.br +0 -0
  21. package/web/dist/assets/StatusChip-DNJGXpaM.js.gz +0 -0
  22. package/web/dist/assets/{_app-BLjKroiJ.js → _app-BRHXf361.js} +1 -1
  23. package/web/dist/assets/_app-BRHXf361.js.br +0 -0
  24. package/web/dist/assets/_app-BRHXf361.js.gz +0 -0
  25. package/web/dist/assets/{_runId-D2pfjMgO.js → _runId-BWlmGHgV.js} +1 -1
  26. package/web/dist/assets/_runId-BWlmGHgV.js.br +0 -0
  27. package/web/dist/assets/_runId-BWlmGHgV.js.gz +0 -0
  28. package/web/dist/assets/{drawer-Qv6pmnj0.js → drawer-DiBoCh3k.js} +1 -1
  29. package/web/dist/assets/drawer-DiBoCh3k.js.br +0 -0
  30. package/web/dist/assets/drawer-DiBoCh3k.js.gz +0 -0
  31. package/web/dist/assets/{index-DoDbR0X_.js → index-8eTsNUPE.js} +5 -5
  32. package/web/dist/assets/index-8eTsNUPE.js.br +0 -0
  33. package/web/dist/assets/index-8eTsNUPE.js.gz +0 -0
  34. package/web/dist/assets/{label-DFSYBc62.js → label-BLvEBSes.js} +1 -1
  35. package/web/dist/assets/label-BLvEBSes.js.br +0 -0
  36. package/web/dist/assets/label-BLvEBSes.js.gz +0 -0
  37. package/web/dist/assets/{link-Bxr2h_7-.js → link-CWPWkcE7.js} +1 -1
  38. package/web/dist/assets/link-CWPWkcE7.js.br +0 -0
  39. package/web/dist/assets/link-CWPWkcE7.js.gz +0 -0
  40. package/web/dist/assets/{login-lD5Y5ToX.js → login-DJ0JJ4Kh.js} +1 -1
  41. package/web/dist/assets/login-DJ0JJ4Kh.js.br +0 -0
  42. package/web/dist/assets/login-DJ0JJ4Kh.js.gz +0 -0
  43. package/web/dist/assets/{questions-BZVveTHL.js → questions-CIezu9MQ.js} +1 -1
  44. package/web/dist/assets/questions-CIezu9MQ.js.br +0 -0
  45. package/web/dist/assets/questions-CIezu9MQ.js.gz +0 -0
  46. package/web/dist/assets/{react-query.gen-Bu2yV-qJ.js → react-query.gen--d119q9w.js} +1 -1
  47. package/web/dist/assets/react-query.gen--d119q9w.js.br +0 -0
  48. package/web/dist/assets/{react-query.gen-Bu2yV-qJ.js.gz → react-query.gen--d119q9w.js.gz} +0 -0
  49. package/web/dist/assets/{runs-FLPX1t35.js → runs-CmNMqEUC.js} +1 -1
  50. package/web/dist/assets/runs-CmNMqEUC.js.br +0 -0
  51. package/web/dist/assets/runs-CmNMqEUC.js.gz +0 -0
  52. package/web/dist/assets/{setup-e6cWTQHR.js → setup-QG_DwH4K.js} +1 -1
  53. package/web/dist/assets/setup-QG_DwH4K.js.br +0 -0
  54. package/web/dist/assets/setup-QG_DwH4K.js.gz +0 -0
  55. package/web/dist/assets/table-i60Ln8uO.js +1 -0
  56. package/web/dist/assets/table-i60Ln8uO.js.br +0 -0
  57. package/web/dist/assets/table-i60Ln8uO.js.gz +0 -0
  58. package/web/dist/assets/{textfield-BzRFkxBF.js → textfield-JjDRdZq2.js} +1 -1
  59. package/web/dist/assets/textfield-JjDRdZq2.js.br +0 -0
  60. package/web/dist/assets/textfield-JjDRdZq2.js.gz +0 -0
  61. package/web/dist/assets/use-css-variable-CVkVc5hW.js +5 -0
  62. package/web/dist/assets/use-css-variable-CVkVc5hW.js.br +0 -0
  63. package/web/dist/assets/use-css-variable-CVkVc5hW.js.gz +0 -0
  64. package/web/dist/assets/{useMutation-ByvV_qcM.js → useMutation-fO0BlIlO.js} +1 -1
  65. package/web/dist/assets/useMutation-fO0BlIlO.js.br +0 -0
  66. package/web/dist/assets/useMutation-fO0BlIlO.js.gz +0 -0
  67. package/web/dist/index.html +2 -2
  68. package/web/dist/assets/Brand-CsasrnDg.js.br +0 -0
  69. package/web/dist/assets/Brand-CsasrnDg.js.gz +0 -0
  70. package/web/dist/assets/Modal-Xe1WI1-2.js.br +0 -0
  71. package/web/dist/assets/Modal-Xe1WI1-2.js.gz +0 -0
  72. package/web/dist/assets/StatusChip-CM5Y95R8.js +0 -153
  73. package/web/dist/assets/StatusChip-CM5Y95R8.js.br +0 -0
  74. package/web/dist/assets/StatusChip-CM5Y95R8.js.gz +0 -0
  75. package/web/dist/assets/_app-BLjKroiJ.js.br +0 -0
  76. package/web/dist/assets/_app-BLjKroiJ.js.gz +0 -0
  77. package/web/dist/assets/_runId-D2pfjMgO.js.br +0 -0
  78. package/web/dist/assets/_runId-D2pfjMgO.js.gz +0 -0
  79. package/web/dist/assets/drawer-Qv6pmnj0.js.br +0 -0
  80. package/web/dist/assets/drawer-Qv6pmnj0.js.gz +0 -0
  81. package/web/dist/assets/index-DoDbR0X_.js.br +0 -0
  82. package/web/dist/assets/index-DoDbR0X_.js.gz +0 -0
  83. package/web/dist/assets/label-DFSYBc62.js.br +0 -0
  84. package/web/dist/assets/label-DFSYBc62.js.gz +0 -0
  85. package/web/dist/assets/link-Bxr2h_7-.js.br +0 -0
  86. package/web/dist/assets/link-Bxr2h_7-.js.gz +0 -0
  87. package/web/dist/assets/login-lD5Y5ToX.js.br +0 -0
  88. package/web/dist/assets/login-lD5Y5ToX.js.gz +0 -0
  89. package/web/dist/assets/questions-BZVveTHL.js.br +0 -0
  90. package/web/dist/assets/questions-BZVveTHL.js.gz +0 -0
  91. package/web/dist/assets/react-query.gen-Bu2yV-qJ.js.br +0 -0
  92. package/web/dist/assets/runs-FLPX1t35.js.br +0 -0
  93. package/web/dist/assets/runs-FLPX1t35.js.gz +0 -0
  94. package/web/dist/assets/setup-e6cWTQHR.js.br +0 -0
  95. package/web/dist/assets/setup-e6cWTQHR.js.gz +0 -0
  96. package/web/dist/assets/table-BVyBSngP.js +0 -1
  97. package/web/dist/assets/table-BVyBSngP.js.br +0 -0
  98. package/web/dist/assets/table-BVyBSngP.js.gz +0 -0
  99. package/web/dist/assets/textfield-BzRFkxBF.js.br +0 -0
  100. package/web/dist/assets/textfield-BzRFkxBF.js.gz +0 -0
  101. package/web/dist/assets/use-css-variable-BckMm7jP.js +0 -5
  102. package/web/dist/assets/use-css-variable-BckMm7jP.js.br +0 -0
  103. package/web/dist/assets/use-css-variable-BckMm7jP.js.gz +0 -0
  104. package/web/dist/assets/useMutation-ByvV_qcM.js.br +0 -0
  105. package/web/dist/assets/useMutation-ByvV_qcM.js.gz +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd-cli",
3
- "version": "2.0.0-next.20261022182421",
3
+ "version": "2.0.0-next.20261022200328",
4
4
  "description": "Herds coding agents: autopilot builds from your own Claude Code session.",
5
5
  "keywords": [
6
6
  "autopilot",
@@ -47,18 +47,18 @@
47
47
  "release:publish": "npm view catherd-cli@$npm_package_version version >/dev/null 2>&1 || bun test/pack-smoke.ts && changeset publish"
48
48
  },
49
49
  "dependencies": {
50
- "@modelcontextprotocol/sdk": "^1.30.1",
50
+ "@modelcontextprotocol/sdk": "^1.32.1",
51
51
  "citty": "^0.2.2",
52
- "zod": "^4.6.5"
52
+ "zod": "^4.6.7"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@changesets/cli": "^3.0.3",
56
- "@commitlint/cli": "^21.2.3",
57
- "@commitlint/config-conventional": "^21.2.3",
58
- "@types/bun": "^1.4.2",
59
- "lefthook": "^2.1.14",
60
- "oxfmt": "^0.70.0",
61
- "oxlint": "^1.85.0",
56
+ "@commitlint/cli": "^21.2.4",
57
+ "@commitlint/config-conventional": "^21.2.4",
58
+ "@types/bun": "^1.4.3",
59
+ "lefthook": "^2.2.2",
60
+ "oxfmt": "^0.74.0",
61
+ "oxlint": "^1.89.0",
62
62
  "typescript": "^7.0.2"
63
63
  },
64
64
  "engines": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd",
3
- "version": "2.0.0-next.20261022182421",
3
+ "version": "2.0.0-next.20261022200328",
4
4
  "description": "Herds coding agents: Claude plans and verifies, Codex, opencode or headless Claude Code workers write the code, and Jev picks the model and effort for each piece.",
5
5
  "author": {
6
6
  "name": "47vigen",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "catherd",
3
- "version": "2.0.0-next.20261022182421",
3
+ "version": "2.0.0-next.20261022200328",
4
4
  "description": "Shared catherd orchestration, profiles and durable role results through the versioned MCP core.",
5
5
  "author": { "name": "47vigen", "url": "https://github.com/47vigen" },
6
6
  "homepage": "https://github.com/47vigen/catherd",
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # catherd's MCP launcher (spec 1.1 §12): the plugin's .mcp.json runs it. The release stamps VERSION
3
3
  # (scripts/stamp-plugin-version.mjs), so the plugin always starts the server it was released with.
4
- VERSION="2.0.0-next.20261022182421"
4
+ VERSION="2.0.0-next.20261022200328"
5
5
 
6
6
  # a global catherd at this version (catherd init installs one): start it, no resolve at all
7
7
  if command -v catherd >/dev/null 2>&1 && [ "$(catherd --version 2>/dev/null)" = "$VERSION" ]; then
@@ -16,7 +16,7 @@ it, not its driver. Your job is four things:
16
16
  - carry the owner's answers to the questions the run parks;
17
17
  - relay the finished report.
18
18
 
19
- **Your first call is `status()`.** Its `version` must be the one this plugin pins, `catherd-cli@2.0.0-next.20261022182421`. If it
19
+ **Your first call is `status()`.** Its `version` must be the one this plugin pins, `catherd-cli@2.0.0-next.20261022200328`. If it
20
20
  differs, stop and tell the user to restart their host session so the plugin and its server match.
21
21
 
22
22
  **You never edit product files and you never dispatch a role.** Every line of code, tests or docs comes from a
@@ -38,9 +38,12 @@ const movedNote = (g: SessionGroup["runs"][number]): string =>
38
38
  /** One run at a glance: what is live, what finished, spend against the budget, landed milestones. */
39
39
  export function formatRun(s: RunSummary, now: number = Date.now()): string[] {
40
40
  const t = s.totals;
41
+ const end = s.ended ? Date.parse(s.ended.at) : now;
42
+ const mins = Math.round((end - Date.parse(s.createdAt)) / 60_000);
41
43
  const lines = [
42
44
  `run ${s.id} ${s.title}`,
43
- ` repo ${s.repo} · started ${s.createdAt} · ${Math.round((now - Date.parse(s.createdAt)) / 60_000)} min`,
45
+ ` repo ${s.repo} · started ${s.createdAt} · ${mins} min`,
46
+ ...(s.ended ? [` Ended: ${s.ended.outcome} at ${s.ended.at}, took ${mins} min`] : []),
44
47
  ];
45
48
  for (const q of s.questions) lines.push(` ${mark("warn")} parked ${q.milestone}: ${q.question}`);
46
49
  for (const l of s.live) lines.push(` live ${l.name} ${l.rung} ${l.state} ${l.secs}s`);
@@ -370,7 +370,7 @@ async function superviseHeld(spec: SuperviseSpec, hooks: SuperviseHooks): Promis
370
370
  if (!stopped && groupAlive(child.pid)) await stopGroup(child.pid, spec.killGraceMs, spec.pollMs);
371
371
  const info = finish({
372
372
  code: child.signalCode ? null : code,
373
- signal: child.signalCode ?? null,
373
+ signal: child.signalCode == null ? null : String(child.signalCode),
374
374
  reason: reason ?? "exited",
375
375
  endedAt: new Date().toISOString(),
376
376
  });
@@ -134,7 +134,7 @@ async function runOnce(
134
134
  stderr,
135
135
  exit: {
136
136
  code: p.signalCode ? null : code,
137
- signal: p.signalCode ?? null,
137
+ signal: p.signalCode == null ? null : String(p.signalCode),
138
138
  reason: timedOut ? "wall-timeout" : "exited",
139
139
  endedAt: new Date().toISOString(),
140
140
  },
@@ -290,7 +290,7 @@ export function writeDigest(
290
290
  "",
291
291
  `Commit ${i.commit} · ${i.minutes} min${i.pausedMinutes ? ` (${i.pausedMinutes} min parked or paused left out)` : ""} · landed ${i.at}`,
292
292
  ...(i.commits?.length ? [`Commits: ${i.commits.join("; ")}`] : []),
293
- `A-lines: ${aLines.length ? aLines.join("; ") : "none named in what or evidence"}`,
293
+ `A-lines: ${aLines.length ? aLines.join("; ") : run.meta.aLines.length ? `not mapped to this milestone (none cited as A<n>): ${run.meta.aLines.join("; ")}` : "none"}`,
294
294
  "",
295
295
  "Lanes:",
296
296
  ...(lanes.length ? lanes : ["- none routed"]),
@@ -140,7 +140,8 @@ export function writeRunReport(
140
140
  lines.push(
141
141
  `## ${e.milestone}${title && title !== e.milestone ? `: ${title}` : ""}`,
142
142
  "",
143
- digest || `Landed at ${e.commit.slice(0, 12)}.`,
143
+ // the section heading above is the digest's own H1
144
+ digest.replace(/^# .*\n+/, "") || `Landed at ${e.commit.slice(0, 12)}.`,
144
145
  "",
145
146
  roundsLine(events, e.milestone),
146
147
  ...gateLines(run, e.milestone),
@@ -17,6 +17,7 @@ import { type OpenQuestion, openQuestions } from "./questions.ts";
17
17
  import { type DispatchState, listDispatches, liveDispatches } from "./dispatches.ts";
18
18
  import { readDelivery, ROLE_THREAD_REFUSAL } from "../infra/delivery.ts";
19
19
  import { type RunSession, sessionFacts } from "./session-view.ts";
20
+ import { readEvents } from "./run-events-store.ts";
20
21
  import type { Deps } from "./ports.ts";
21
22
  import { orchestratorWait, type OrchestratorWait } from "./orchestrator-wait.ts";
22
23
  import {
@@ -49,6 +50,8 @@ export interface RunSummary {
49
50
  /** the session that continued it, when another did */
50
51
  continuedIn: string | null;
51
52
  stateTail: string[];
53
+ /** the run's `run.ended`: its outcome and when; state.md still says what came next, so the tail drops that */
54
+ ended?: { at: string; outcome: string } | null;
52
55
  live: { name: string; rung: string; state: DispatchState; secs: number; dispatchId: string }[];
53
56
  totals: { runs: number; ok: number; notOk: string[]; tokens: Tokens; costUsd: number; wallMinutes: number };
54
57
  /** native subagent runs, as the orchestrator reported them: reported, not measured (spec §14) */
@@ -74,7 +77,16 @@ export function summarizeRun(deps: Deps, run: Run): RunSummary {
74
77
  warnings.push(`daemon: ${errorMessage(e)}`);
75
78
  }
76
79
  const { records, corrupt } = readRecords(run);
80
+ let ended: RunSummary["ended"] = null;
81
+ try {
82
+ const e = readEvents(run).find((x) => x.type === "run.ended");
83
+ if (e?.type === "run.ended") ended = { at: e.at, outcome: e.outcome };
84
+ } catch (e) {
85
+ warnings.push(`events: ${errorMessage(e)}`);
86
+ }
77
87
  const live = liveDispatches(run, now);
88
+ // an ended run's clock stops at run.ended: its wall minutes and its minute budget
89
+ const until = ended ? Date.parse(ended.at) : now;
78
90
  const recorded = new Set(records.map((r) => r.dispatchId));
79
91
  const agents = readAgentRuns(run);
80
92
  const jev = readJsonl<{ source?: string }>(runPaths(run.dir).jev).rows;
@@ -86,7 +98,7 @@ export function summarizeRun(deps: Deps, run: Run): RunSummary {
86
98
  for (const c of pinned) warnings.push(`pinned: ${c}; dispatch keeps the pinned value (run_pin re-pins)`);
87
99
  try {
88
100
  budget = budgetStatus(
89
- spendOf(run, records, live, now),
101
+ spendOf(run, records, live, until),
90
102
  deps.profiles.budgetFor?.(run.meta.repo) ?? deps.profiles.forRepo(run.meta.repo).budget,
91
103
  );
92
104
  } catch (e) {
@@ -119,7 +131,10 @@ export function summarizeRun(deps: Deps, run: Run): RunSummary {
119
131
  repo: run.meta.repo,
120
132
  createdAt: run.meta.createdAt,
121
133
  ...sessionFacts(run),
122
- stateTail: nonBlankLines(runPaths(run.dir).state).slice(-3),
134
+ ended,
135
+ stateTail: nonBlankLines(runPaths(run.dir).state)
136
+ .filter((l) => !ended || !/^(Next|Protocol next): /.test(l))
137
+ .slice(-3),
123
138
  live: live.map((d) => ({
124
139
  name: d.admit.name,
125
140
  rung: d.admit.rung,
@@ -133,7 +148,7 @@ export function summarizeRun(deps: Deps, run: Run): RunSummary {
133
148
  notOk: records.filter((r) => r.status !== "ok").map((r) => `${r.name} (${r.status})`),
134
149
  tokens: { input: sum((t) => t.input), cached: sum((t) => t.cached), output: sum((t) => t.output) },
135
150
  costUsd: records.reduce((n, r) => n + (r.costUsd ?? 0), 0),
136
- wallMinutes: Math.round((now - Date.parse(run.meta.createdAt)) / 60_000),
151
+ wallMinutes: Math.round((until - Date.parse(run.meta.createdAt)) / 60_000),
137
152
  },
138
153
  agents: {
139
154
  runs: agents.length,
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{$ as t,Sn as n,xn as r}from"./react-query.gen-Bu2yV-qJ.js";import{u as i}from"./index-DoDbR0X_.js";var a=e(n(),1),o=`heroui-theme`,s=`(prefers-color-scheme: dark)`;function c(e){if(typeof window>`u`)return()=>{};let t=window.matchMedia(s);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function l(){return window.matchMedia?.(s).matches?`dark`:`light`}function u(){}function d(e,t){t!==e&&(t&&document.documentElement.classList.remove(t),document.documentElement.classList.add(e),document.documentElement.setAttribute(`data-theme`,e))}function f(e=`system`){let[t,n]=(0,a.useState)(()=>typeof window>`u`?e:localStorage.getItem(o)??e),r=(0,a.useSyncExternalStore)(c,l,u),s=t===`system`?r:t,f=(0,a.useRef)(void 0);return i(()=>{s&&(d(s,f.current),f.current=s)},[s]),{resolvedTheme:s,setTheme:(0,a.useCallback)(e=>{typeof window<`u`&&(localStorage.setItem(o,e),n(e))},[]),theme:t}}var p=r();function m({className:e}){return(0,p.jsxs)(`svg`,{viewBox:`0 0 20 20`,"aria-hidden":`true`,className:t(`size-5 shrink-0`,e),children:[(0,p.jsx)(`rect`,{x:`2`,y:`12`,width:`16`,height:`4`,className:`fill-foreground`}),(0,p.jsx)(`rect`,{x:`3`,y:`6`,width:`3`,height:`3`,className:`fill-accent`}),(0,p.jsx)(`rect`,{x:`8.5`,y:`6`,width:`3`,height:`3`,className:`fill-ink-faint`}),(0,p.jsx)(`rect`,{x:`14`,y:`6`,width:`3`,height:`3`,className:`fill-ink-faint`})]})}function h({className:e}){return(0,p.jsxs)(`span`,{className:t(`inline-flex items-center gap-2`,e),children:[(0,p.jsx)(m,{}),(0,p.jsx)(`span`,{className:`text-[15px] font-semibold tracking-[-0.02em]`,children:`catherd`})]})}export{f as n,h as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{$ as t,Sn as n,xn as r}from"./react-query.gen--d119q9w.js";import{u as i}from"./index-8eTsNUPE.js";var a=e(n(),1),o=`heroui-theme`,s=`(prefers-color-scheme: dark)`;function c(e){if(typeof window>`u`)return()=>{};let t=window.matchMedia(s);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function l(){return window.matchMedia?.(s).matches?`dark`:`light`}function u(){}function d(e,t){t!==e&&(t&&document.documentElement.classList.remove(t),document.documentElement.classList.add(e),document.documentElement.setAttribute(`data-theme`,e))}function f(e=`system`){let[t,n]=(0,a.useState)(()=>typeof window>`u`?e:localStorage.getItem(o)??e),r=(0,a.useSyncExternalStore)(c,l,u),s=t===`system`?r:t,f=(0,a.useRef)(void 0);return i(()=>{s&&(d(s,f.current),f.current=s)},[s]),{resolvedTheme:s,setTheme:(0,a.useCallback)(e=>{typeof window<`u`&&(localStorage.setItem(o,e),n(e))},[]),theme:t}}var p=r();function m({className:e}){return(0,p.jsxs)(`svg`,{viewBox:`0 0 20 20`,"aria-hidden":`true`,className:t(`size-5 shrink-0`,e),children:[(0,p.jsx)(`rect`,{x:`2`,y:`12`,width:`16`,height:`4`,className:`fill-foreground`}),(0,p.jsx)(`rect`,{x:`3`,y:`6`,width:`3`,height:`3`,className:`fill-accent`}),(0,p.jsx)(`rect`,{x:`8.5`,y:`6`,width:`3`,height:`3`,className:`fill-ink-faint`}),(0,p.jsx)(`rect`,{x:`14`,y:`6`,width:`3`,height:`3`,className:`fill-ink-faint`})]})}function h({className:e}){return(0,p.jsxs)(`span`,{className:t(`inline-flex items-center gap-2`,e),children:[(0,p.jsx)(m,{}),(0,p.jsx)(`span`,{className:`text-[15px] font-semibold tracking-[-0.02em]`,children:`catherd`})]})}export{f as n,h as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{Dt as t,G as n,K as r,Lt as i,Ot as a,Sn as o,Vt as s,W as c,X as l,_t as u,ct as d,dt as f,ft as p,ut as m}from"./react-query.gen-Bu2yV-qJ.js";import{$ as h,Q as g,X as _,Z as v,bt as y,ft as b,m as x,nt as S,ot as C,p as w,pt as T,st as E,tt as D,vt as O}from"./use-css-variable-BckMm7jP.js";import{D as k}from"./label-DFSYBc62.js";var A=e(o(),1),j=typeof document<`u`&&window.visualViewport;function M(){let e=t(),n=(0,A.useRef)(null),[r,a]=(0,A.useState)(()=>e?{width:0,height:0}:N());return(0,A.useEffect)(()=>{let e=e=>{a(t=>e.width===t.width&&e.height===t.height?t:e)},t=()=>{j&&j.scale>1||e(N())},r=t=>{j&&j.scale>1||k(u(t))&&(n.current=O(t=>{t||e({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})}))};return e(N()),s()&&i()&&window.addEventListener(`blur`,r,!0),j?j.addEventListener(`resize`,t):window.addEventListener(`resize`,t),()=>{n.current?.(),s()&&i()&&window.removeEventListener(`blur`,r,!0),j?j.removeEventListener(`resize`,t):window.removeEventListener(`resize`,t)}},[]),r}function N(){return{width:j?Math.min(j.width*j.scale,document.documentElement.clientWidth):document.documentElement.clientWidth,height:j?j.height*j.scale:document.documentElement.clientHeight}}function P(e,t,n){let{overlayProps:r,underlayProps:i}=S({...e,isOpen:t.isOpen,onClose:t.close},n);D({isDisabled:!t.isOpen,UNSTABLE_overrideFocus:e.UNSTABLE_overrideFocus}),v();let{isEntering:a}=e;return(0,A.useEffect)(()=>{if(t.isOpen&&n.current)return a?C(n.current):E([n.current],{shouldUseInert:!0})},[t.isOpen,a,n]),{modalProps:f(r),underlayProps:i}}var F=(0,A.createContext)(null),I=(0,A.createContext)(null),L=(0,A.forwardRef)(function(e,t){if((0,A.useContext)(I))return A.createElement(H,{...e,modalRef:t},e.children);let{isDismissable:n,isKeyboardDismissDisabled:r,isOpen:i,defaultOpen:a,onOpenChange:o,children:s,isEntering:c,isExiting:l,UNSTABLE_portalContainer:u,shouldCloseOnInteractOutside:d,...f}=e;return A.createElement(z,{isDismissable:n,isKeyboardDismissDisabled:r,isOpen:i,defaultOpen:a,onOpenChange:o,isEntering:c,isExiting:l,UNSTABLE_portalContainer:u,shouldCloseOnInteractOutside:d},A.createElement(H,{...f,modalRef:t},s))});function R(e,r){[e,r]=n(e,r,F);let i=(0,A.useContext)(x),a=_(e),o=e.isOpen!=null||e.defaultOpen!=null||!i?a:i,s=d(r),c=(0,A.useRef)(null),l=b(s,o.isOpen,e.onExit),u=(0,A.useRef)(null),f=b(c,o.isOpen,e=>u.current?.(e)),p=l||f||e.isExiting||!1,m=t();return!o.isOpen&&!p||m?null:A.createElement(B,{...e,state:o,isExiting:p,overlayRef:s,modalRef:c,onExitRef:u})}var z=(0,A.forwardRef)(R);function B({UNSTABLE_portalContainer:e,UNSTABLE_deferUntilEntered:t,...n}){let i=n.modalRef,{state:o}=n,[s,u]=(0,A.useState)(!1),d=T(n.overlayRef,s,n.onEnter)||n.isEntering||!1,p=!!t&&(!s||d),{modalProps:h,underlayProps:_}=P({...n,isEntering:p},o,i),v=(0,A.useContext)(w),b=t?V(v,{isEntering:p}):v,S=r({...n,defaultClassName:`react-aria-ModalOverlay`,values:{isEntering:d,isExiting:n.isExiting,state:o}}),C=M(),E,D;if(typeof document<`u`){let e=y(document.body)?document.body:document.scrollingElement||document.documentElement,t=e.getBoundingClientRect().width%1,n=e.getBoundingClientRect().height%1;E=e.scrollWidth-t,D=e.scrollHeight-n}let k={...S.style,"--visual-viewport-width":C.width+`px`,"--visual-viewport-height":C.height+`px`,"--page-width":E===void 0?void 0:E+`px`,"--page-height":D===void 0?void 0:D+`px`};return a(()=>O(()=>u(!0)),[]),A.createElement(g,{isExiting:n.isExiting,portalContainer:e},A.createElement(l.div,{...f(m(n,{global:!0}),_),...S,style:k,ref:n.overlayRef,"data-entering":d||void 0,"data-exiting":n.isExiting||void 0},A.createElement(c,{values:[[I,{modalProps:h,modalRef:i,isExiting:n.isExiting,onExitRef:n.onExitRef,isOpen:s,isDismissable:n.isDismissable}],[x,o],[w,b]]},S.children)))}function V(e,t){if(e&&`slots`in e&&e.slots){let n={};for(let r in e.slots)n[r]={...e.slots[r],...t};return{...e,slots:n}}return{...e,...t}}function H(e){let{modalProps:t,modalRef:n,isExiting:i,onExitRef:o,isDismissable:s,isOpen:c}=(0,A.useContext)(I),u=(0,A.useContext)(x),g=(0,A.useMemo)(()=>p(e.modalRef,n),[e.modalRef,n]),_=d(g),v=T(_,c,e.onEnter),y=r({...e,defaultClassName:`react-aria-Modal`,values:{isEntering:v,isExiting:i,state:u}});return a(()=>{o&&(o.current=e.onExit)}),A.createElement(l.div,{...f(m(e,{global:!0}),t),...y,ref:_,"data-entering":v||void 0,"data-exiting":i||void 0},s&&A.createElement(h,{onDismiss:u.close}),y.children)}export{z as n,L as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{Dt as t,G as n,K as r,Lt as i,Ot as a,Sn as o,Vt as s,W as c,X as l,_t as u,ct as d,dt as f,ft as p,ut as m}from"./react-query.gen--d119q9w.js";import{$ as h,Q as g,X as _,Z as v,bt as y,ft as b,m as x,nt as S,ot as C,p as w,pt as T,st as E,tt as D,vt as O}from"./use-css-variable-CVkVc5hW.js";import{D as k}from"./label-BLvEBSes.js";var A=e(o(),1),j=typeof document<`u`&&window.visualViewport;function M(){let e=t(),n=(0,A.useRef)(null),[r,a]=(0,A.useState)(()=>e?{width:0,height:0}:N());return(0,A.useEffect)(()=>{let e=e=>{a(t=>e.width===t.width&&e.height===t.height?t:e)},t=()=>{j&&j.scale>1||e(N())},r=t=>{j&&j.scale>1||k(u(t))&&(n.current=O(t=>{t||e({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})}))};return e(N()),s()&&i()&&window.addEventListener(`blur`,r,!0),j?j.addEventListener(`resize`,t):window.addEventListener(`resize`,t),()=>{n.current?.(),s()&&i()&&window.removeEventListener(`blur`,r,!0),j?j.removeEventListener(`resize`,t):window.removeEventListener(`resize`,t)}},[]),r}function N(){return{width:j?Math.min(j.width*j.scale,document.documentElement.clientWidth):document.documentElement.clientWidth,height:j?j.height*j.scale:document.documentElement.clientHeight}}function P(e,t,n){let{overlayProps:r,underlayProps:i}=S({...e,isOpen:t.isOpen,onClose:t.close},n);D({isDisabled:!t.isOpen,UNSTABLE_overrideFocus:e.UNSTABLE_overrideFocus}),v();let{isEntering:a}=e;return(0,A.useEffect)(()=>{if(t.isOpen&&n.current)return a?C(n.current):E([n.current],{shouldUseInert:!0})},[t.isOpen,a,n]),{modalProps:f(r),underlayProps:i}}var F=(0,A.createContext)(null),I=(0,A.createContext)(null),L=(0,A.forwardRef)(function(e,t){if((0,A.useContext)(I))return A.createElement(H,{...e,modalRef:t},e.children);let{isDismissable:n,isKeyboardDismissDisabled:r,isOpen:i,defaultOpen:a,onOpenChange:o,children:s,isEntering:c,isExiting:l,UNSTABLE_portalContainer:u,shouldCloseOnInteractOutside:d,...f}=e;return A.createElement(z,{isDismissable:n,isKeyboardDismissDisabled:r,isOpen:i,defaultOpen:a,onOpenChange:o,isEntering:c,isExiting:l,UNSTABLE_portalContainer:u,shouldCloseOnInteractOutside:d},A.createElement(H,{...f,modalRef:t},s))});function R(e,r){[e,r]=n(e,r,F);let i=(0,A.useContext)(x),a=_(e),o=e.isOpen!=null||e.defaultOpen!=null||!i?a:i,s=d(r),c=(0,A.useRef)(null),l=b(s,o.isOpen,e.onExit),u=(0,A.useRef)(null),f=b(c,o.isOpen,e=>u.current?.(e)),p=l||f||e.isExiting||!1,m=t();return!o.isOpen&&!p||m?null:A.createElement(B,{...e,state:o,isExiting:p,overlayRef:s,modalRef:c,onExitRef:u})}var z=(0,A.forwardRef)(R);function B({UNSTABLE_portalContainer:e,UNSTABLE_deferUntilEntered:t,...n}){let i=n.modalRef,{state:o}=n,[s,u]=(0,A.useState)(!1),d=T(n.overlayRef,s,n.onEnter)||n.isEntering||!1,p=!!t&&(!s||d),{modalProps:h,underlayProps:_}=P({...n,isEntering:p},o,i),v=(0,A.useContext)(w),b=t?V(v,{isEntering:p}):v,S=r({...n,defaultClassName:`react-aria-ModalOverlay`,values:{isEntering:d,isExiting:n.isExiting,state:o}}),C=M(),E,D;if(typeof document<`u`){let e=y(document.body)?document.body:document.scrollingElement||document.documentElement,t=e.getBoundingClientRect().width%1,n=e.getBoundingClientRect().height%1;E=e.scrollWidth-t,D=e.scrollHeight-n}let k={...S.style,"--visual-viewport-width":C.width+`px`,"--visual-viewport-height":C.height+`px`,"--page-width":E===void 0?void 0:E+`px`,"--page-height":D===void 0?void 0:D+`px`};return a(()=>O(()=>u(!0)),[]),A.createElement(g,{isExiting:n.isExiting,portalContainer:e},A.createElement(l.div,{...f(m(n,{global:!0}),_),...S,style:k,ref:n.overlayRef,"data-entering":d||void 0,"data-exiting":n.isExiting||void 0},A.createElement(c,{values:[[I,{modalProps:h,modalRef:i,isExiting:n.isExiting,onExitRef:n.onExitRef,isOpen:s,isDismissable:n.isDismissable}],[x,o],[w,b]]},S.children)))}function V(e,t){if(e&&`slots`in e&&e.slots){let n={};for(let r in e.slots)n[r]={...e.slots[r],...t};return{...e,slots:n}}return{...e,...t}}function H(e){let{modalProps:t,modalRef:n,isExiting:i,onExitRef:o,isDismissable:s,isOpen:c}=(0,A.useContext)(I),u=(0,A.useContext)(x),g=(0,A.useMemo)(()=>p(e.modalRef,n),[e.modalRef,n]),_=d(g),v=T(_,c,e.onEnter),y=r({...e,defaultClassName:`react-aria-Modal`,values:{isEntering:v,isExiting:i,state:u}});return a(()=>{o&&(o.current=e.onExit)}),A.createElement(l.div,{...f(m(e,{global:!0}),t),...y,ref:_,"data-entering":v||void 0,"data-exiting":i||void 0},s&&A.createElement(h,{onDismiss:u.close}),y.children)}export{z as n,L as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{C as t,O as n,Sn as r,ct as i,dt as a,ft as o}from"./react-query.gen-Bu2yV-qJ.js";var s=e(r(),1),c=s.forwardRef(({children:e,...r},c)=>{c=i(c);let{pressProps:l}=t({...r,ref:c}),{focusableProps:u}=n(r,c),d=s.Children.only(e);(0,s.useEffect)(()=>{},[c,r.isDisabled]);let f=d.props.ref;return s.cloneElement(d,{...a(l,u,d.props),ref:o(f,c)})});export{c as t};
1
+ import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{C as t,O as n,Sn as r,ct as i,dt as a,ft as o}from"./react-query.gen--d119q9w.js";var s=e(r(),1),c=s.forwardRef(({children:e,...r},c)=>{c=i(c);let{pressProps:l}=t({...r,ref:c}),{focusableProps:u}=n(r,c),d=s.Children.only(e);(0,s.useEffect)(()=>{},[c,r.isDisabled]);let f=d.props.ref;return s.cloneElement(d,{...a(l,u,d.props),ref:o(f,c)})});export{c as t};