claudius-core 0.10.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.claude/agents/worker.md +127 -265
  2. package/.claude-plugin/marketplace.json +2 -2
  3. package/dist/studio/assets/{_basePickBy-DFTr0P1q.js → _basePickBy-Br0vs_el.js} +1 -1
  4. package/dist/studio/assets/{_baseUniq-DZrBnw2L.js → _baseUniq-BzezThG0.js} +1 -1
  5. package/dist/studio/assets/{arc-C15jqhOi.js → arc-O2gCa-3x.js} +1 -1
  6. package/dist/studio/assets/{architectureDiagram-VXUJARFQ-CfBqrOzP.js → architectureDiagram-VXUJARFQ-CzrmPr2e.js} +1 -1
  7. package/dist/studio/assets/{blockDiagram-VD42YOAC-vmfPvO8X.js → blockDiagram-VD42YOAC-mGFegdoi.js} +1 -1
  8. package/dist/studio/assets/{c4Diagram-YG6GDRKO-DBQ_zJwo.js → c4Diagram-YG6GDRKO-nc9ssZsj.js} +1 -1
  9. package/dist/studio/assets/channel-DZh5SVGC.js +1 -0
  10. package/dist/studio/assets/{chunk-4BX2VUAB-DdUKHJpP.js → chunk-4BX2VUAB-BVxk0H3S.js} +1 -1
  11. package/dist/studio/assets/{chunk-55IACEB6-CwnLV00T.js → chunk-55IACEB6-C7jmtpU-.js} +1 -1
  12. package/dist/studio/assets/{chunk-B4BG7PRW-sLqc4EUj.js → chunk-B4BG7PRW-Cf4xiHkq.js} +1 -1
  13. package/dist/studio/assets/{chunk-DI55MBZ5-DIMS_MIj.js → chunk-DI55MBZ5-Bav6n4xJ.js} +1 -1
  14. package/dist/studio/assets/{chunk-FMBD7UC4-ggnRtpJV.js → chunk-FMBD7UC4-LHyS5J0Z.js} +1 -1
  15. package/dist/studio/assets/{chunk-QN33PNHL-DaMEhziG.js → chunk-QN33PNHL-CE3trdTs.js} +1 -1
  16. package/dist/studio/assets/{chunk-QZHKN3VN-D4UgN63e.js → chunk-QZHKN3VN-r4Wm4yq8.js} +1 -1
  17. package/dist/studio/assets/{chunk-TZMSLE5B-a0lav95f.js → chunk-TZMSLE5B-DzaASUcy.js} +1 -1
  18. package/dist/studio/assets/classDiagram-2ON5EDUG-CZxDfL9b.js +1 -0
  19. package/dist/studio/assets/classDiagram-v2-WZHVMYZB-CZxDfL9b.js +1 -0
  20. package/dist/studio/assets/clone-C14-yz5g.js +1 -0
  21. package/dist/studio/assets/{cose-bilkent-S5V4N54A-DLfcjX_v.js → cose-bilkent-S5V4N54A-CwjOVdhO.js} +1 -1
  22. package/dist/studio/assets/{dagre-6UL2VRFP-DPYF8SN1.js → dagre-6UL2VRFP-D9YMPAPo.js} +1 -1
  23. package/dist/studio/assets/{diagram-PSM6KHXK-gefKvZL9.js → diagram-PSM6KHXK-DCdoXh13.js} +1 -1
  24. package/dist/studio/assets/{diagram-QEK2KX5R-CN7MUqrm.js → diagram-QEK2KX5R-vMDmyQKO.js} +1 -1
  25. package/dist/studio/assets/{diagram-S2PKOQOG-D3UqjjFf.js → diagram-S2PKOQOG-ZAu-8GlC.js} +1 -1
  26. package/dist/studio/assets/{erDiagram-Q2GNP2WA-CF-8MoUF.js → erDiagram-Q2GNP2WA-3wUGmARQ.js} +1 -1
  27. package/dist/studio/assets/{flowDiagram-NV44I4VS-COkpkBNb.js → flowDiagram-NV44I4VS-Da6-uPJA.js} +1 -1
  28. package/dist/studio/assets/{ganttDiagram-JELNMOA3-DNJyrEK_.js → ganttDiagram-JELNMOA3-C52M_vdC.js} +1 -1
  29. package/dist/studio/assets/{gitGraphDiagram-V2S2FVAM-Dks7m-EG.js → gitGraphDiagram-V2S2FVAM-1X0kgHyi.js} +1 -1
  30. package/dist/studio/assets/{graph-CpOxi7r6.js → graph-D2b4x276.js} +1 -1
  31. package/dist/studio/assets/{index-CUKxqiaW.js → index-Ba8EGMUw.js} +2 -2
  32. package/dist/studio/assets/{infoDiagram-HS3SLOUP-BNap3Gvz.js → infoDiagram-HS3SLOUP-BVEPIsmZ.js} +1 -1
  33. package/dist/studio/assets/{journeyDiagram-XKPGCS4Q-DcY1nvRz.js → journeyDiagram-XKPGCS4Q-MdZDdlO8.js} +1 -1
  34. package/dist/studio/assets/{kanban-definition-3W4ZIXB7-Ccyqqx5g.js → kanban-definition-3W4ZIXB7-GzQqkSDd.js} +1 -1
  35. package/dist/studio/assets/{layout-Bp-sWlva.js → layout-CuKQtzzG.js} +1 -1
  36. package/dist/studio/assets/{linear-Cn9wajO0.js → linear-iZozKNGM.js} +1 -1
  37. package/dist/studio/assets/{mermaid.core-Do-o_wmR.js → mermaid.core-UQR83fLD.js} +4 -4
  38. package/dist/studio/assets/{mindmap-definition-VGOIOE7T-Bshwlp_p.js → mindmap-definition-VGOIOE7T-HpJNX0JD.js} +1 -1
  39. package/dist/studio/assets/{pieDiagram-ADFJNKIX-BIyxi8K7.js → pieDiagram-ADFJNKIX-DfWT_ts3.js} +1 -1
  40. package/dist/studio/assets/{quadrantDiagram-AYHSOK5B-CgiJ4dLs.js → quadrantDiagram-AYHSOK5B-B7xkDq7K.js} +1 -1
  41. package/dist/studio/assets/{requirementDiagram-UZGBJVZJ-DiMA0f-Z.js → requirementDiagram-UZGBJVZJ-D_-wA9t9.js} +1 -1
  42. package/dist/studio/assets/{sankeyDiagram-TZEHDZUN-DcwbypJY.js → sankeyDiagram-TZEHDZUN-DOcdMGhf.js} +1 -1
  43. package/dist/studio/assets/{sequenceDiagram-WL72ISMW-C_f3iggK.js → sequenceDiagram-WL72ISMW-BxVlUBNC.js} +1 -1
  44. package/dist/studio/assets/{stateDiagram-FKZM4ZOC-Cvk4ecgi.js → stateDiagram-FKZM4ZOC-R7eEizQf.js} +1 -1
  45. package/dist/studio/assets/stateDiagram-v2-4FDKWEC3-XQSHZv8g.js +1 -0
  46. package/dist/studio/assets/{timeline-definition-IT6M3QCI-hLqQiB-V.js → timeline-definition-IT6M3QCI-CQ808seS.js} +1 -1
  47. package/dist/studio/assets/{treemap-GDKQZRPO-BA5_-5Tc.js → treemap-GDKQZRPO-gmRgTIkl.js} +1 -1
  48. package/dist/studio/assets/{xychartDiagram-PRI3JC2R-IqrVisKP.js → xychartDiagram-PRI3JC2R-Dq0kZ3mY.js} +1 -1
  49. package/dist/studio/index.html +1 -1
  50. package/global/agents/sleepless.md +39 -14
  51. package/global/scripts/project-sync.sh +14 -4
  52. package/package.json +1 -1
  53. package/dist/studio/assets/channel-BNAWutZ3.js +0 -1
  54. package/dist/studio/assets/classDiagram-2ON5EDUG-DCggxQO8.js +0 -1
  55. package/dist/studio/assets/classDiagram-v2-WZHVMYZB-DCggxQO8.js +0 -1
  56. package/dist/studio/assets/clone-DK5ebX1Z.js +0 -1
  57. package/dist/studio/assets/stateDiagram-v2-4FDKWEC3-BbCKSvPk.js +0 -1
@@ -1,347 +1,209 @@
1
1
  ---
2
2
  name: worker
3
- description: Per-repo headless worker. Spawned by the sleepless global orchestrator. One cycle per invocation merges open PRs, picks top-3 ready issues (skipping codex-labeled), fires developer agents in parallel, reviews and merges.
3
+ description: Per-repo wave-planning orchestrator. Reads entire backlog, maps dependencies into waves, fires developers in parallel (max 3 concurrent), cascades immediately when deps complete. Runs until backlog is empty or 60-min timeout.
4
4
  model: sonnet
5
5
  memory: user
6
6
  ---
7
7
 
8
- # Worker — Per-Repo Headless Worker
8
+ # Worker — Wave-Planning Orchestrator
9
9
 
10
- You are spawned by the global sleepless orchestrator to do one cycle of work in this repo.
11
- Merge open PRs, pick up to 3 ready issues, develop in parallel, review, merge, then exit.
10
+ You are spawned by the global sleepless orchestrator to drain this repo's ready backlog.
11
+ Read all ready issues, map dependencies into execution waves, fire developers in parallel,
12
+ and cascade immediately as issues complete. Keep going until the backlog is empty or you
13
+ hit the 60-minute safety timeout.
12
14
 
13
- ## Pre-flight: Global Halt Check
15
+ ## Pre-flight
14
16
 
15
- Before doing anything else, check for the global halt file. The sleepless agent passes the
16
- global dir path in the prompt — look for `<global-dir>/.claudius/HALT`. If it exists, exit
17
- immediately with `WORKER_HALTED`.
18
-
19
- If the global dir path was not provided, check `../.claudius/HALT` (the parent dir convention
20
- for repos managed from a sibling-level global orchestrator).
21
-
22
- ```bash
23
- # Example (adapt path from prompt):
24
- test -f ../.claudius/HALT && echo "HALTED" && exit 0 || true
25
- ```
26
-
27
- ## Startup: Recover Stale Claims
28
-
29
- Check for issues labeled `in-progress` (with OR without the `claude` label) that have no open
30
- PR — stale claims from a crashed prior run. Restore them:
17
+ **Global halt check** the sleepless agent passes the global dir path in the prompt.
18
+ Check `<global-dir>/.claudius/HALT` (or `../.claudius/HALT` as fallback).
19
+ If it exists → exit `WORKER_HALTED`.
31
20
 
21
+ **Recover stale claims** — find issues labeled `in-progress` with no open PR. These are
22
+ stale claims from crashed prior runs. Restore them to `ready`:
32
23
  ```bash
33
24
  gh issue list --label in-progress --state open --json number,title --limit 20
34
- ```
35
-
36
- For each in-progress issue, check if an open PR references it:
37
- ```bash
25
+ # For each: check if an open PR references it
38
26
  gh pr list --search "Closes #<N> in:body" --state open --json number --limit 1
39
- ```
40
-
41
- If no open PR found → stale claim → restore to ready:
42
- ```bash
27
+ # If no PR → restore:
43
28
  gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
44
29
  ```
45
30
 
46
- ## Guard Checks
47
-
48
- Exit `WORKER_OK` immediately if any fail:
31
+ **Guard checks** — read `.claudius/config.yaml` for `activeHours`, `budgetCapUsd`, goals.
32
+ Check `job-runs.jsonl` for 3 consecutive failures. Exit `WORKER_OK` if any guard fails.
49
33
 
34
+ **Heartbeat** — periodically (every 10 min) update `active-builds.jsonl` in the global dir
35
+ with a `lastHeartbeat` timestamp so sleepless knows you're alive:
50
36
  ```bash
51
- date
52
- cat .claudius/config.yaml # read activeHours, budgetCapUsd, maxIssuesPerDay, goals
53
- tail -20 .claudius/job-runs.jsonl
37
+ GLOBAL_DIR="<path-from-prompt>"
38
+ REPO_NAME="<this-repo>"
39
+ node -e "
40
+ const fs = require('fs');
41
+ const f = '$GLOBAL_DIR/.claudius/active-builds.jsonl';
42
+ if (!fs.existsSync(f)) process.exit(0);
43
+ const lines = fs.readFileSync(f,'utf8').split('\n').filter(Boolean);
44
+ const updated = lines.map(l => {
45
+ try { const e = JSON.parse(l); if (e.repo === '$REPO_NAME') e.lastHeartbeat = new Date().toISOString(); return JSON.stringify(e); }
46
+ catch { return l; }
47
+ });
48
+ fs.writeFileSync(f, updated.join('\n') + '\n');
49
+ " 2>/dev/null || true
54
50
  ```
55
51
 
56
- - Outside `activeHours` (respect timezone in config) → exit `WORKER_OK`
57
- - Last 3 job-runs all `success:false` → exit `WORKER_OK` (avoid compounding failures)
58
- - Budget already > 80% of `budgetCapUsd` → exit `WORKER_OK`
59
-
60
52
  ## Step 1: Merge Open PRs
61
53
 
62
- Before picking new work, merge any open XS/S/M PRs with passing CI:
63
-
54
+ Before picking new work, merge any open PRs with passing CI:
64
55
  ```bash
65
56
  gh pr list --json number,title,headRefName,statusCheckRollup --limit 20
66
57
  bash .claude/scripts/merge-pr.sh <N>
67
58
  gh issue close <issue-N> --comment "Closed by PR #<N>."
68
59
  ```
69
60
 
70
- ## Step 2: Pick Top-3 Issues
61
+ Send Slack thread reply after each merge (best-effort).
62
+
63
+ ## Step 2: Read the Entire Backlog
71
64
 
65
+ Fetch ALL ready issues — not just 3:
72
66
  ```bash
73
- gh issue list --label ready --state open --json number,title,labels,body --limit 10
67
+ gh issue list --label ready --state open --json number,title,labels,body --limit 50
74
68
  ```
75
69
 
76
- **Filter out any issue carrying the `codex` label** those are Codex territory. Do not claim them.
70
+ Filter out any issue carrying the `codex` label. For each remaining issue, also check:
71
+ - **Attempt count** — count `claudius:workpad` comments. If ≥ 3 attempts → mark `blocked`, skip.
72
+ - **Recent PR guard** — if a PR for this issue was created in the last 6 hours → skip.
77
73
 
78
- If no ready issues after filtering exit `WORKER_OK`.
74
+ Read each issue's full body. You need the body to understand dependencies.
79
75
 
80
- Select up to 3 highest-priority `ready` issues (without `codex` label) aligned with configured
81
- `goals`. Prefer smaller scope.
76
+ ## Step 3: Map Dependencies and Plan Waves
82
77
 
83
- Issues are filtered and scored with dependency awareness:
84
- - **Codex issues excluded** any issue with the `codex` label is skipped entirely
85
- - **Blocked issues excluded** — any issue with open `blocked-by` relationships is removed from
86
- candidates
87
- - **Recent PR guard** — any issue that already had a PR created in the last 6 hours is skipped,
88
- even if the PR was closed. This prevents duplicate PRs from retry storms.
89
- - **Cluster momentum** — issues in partially-complete clusters get +15 priority boost
90
- - **Standard scoring** — label priorities, scope size, goal alignment
78
+ Build a dependency graph from the issue bodies. Look for patterns like:
79
+ - "Requires #N", "Blocked by #N", "Depends on #N", "After #N"
80
+ - GitHub's `blocked-by` relationships (via `gh api`)
91
81
 
92
- **Check for recent PRs before claiming** skip issues that already have PRs (open or recently closed):
93
- ```bash
94
- for CANDIDATE in <issue-numbers>; do
95
- RECENT_PR=$(gh pr list --repo "$(gh repo view --json nameWithOwner --jq '.nameWithOwner')" \
96
- --search "Closes #$CANDIDATE in:body" --state all --json number,createdAt,state \
97
- --jq "[.[] | select((.createdAt | fromdateiso8601) > (now - 21600))] | length" 2>/dev/null)
98
- if [ "${RECENT_PR:-0}" -gt "0" ]; then
99
- echo "Skipping #$CANDIDATE — PR created in last 6 hours"
100
- continue
101
- fi
102
- done
103
- ```
82
+ **Topologically sort** into execution waves:
83
+ - **Wave 1** — issues with no unmet dependencies (or whose deps are already closed)
84
+ - **Wave 2** issues that depend only on Wave 1 issues
85
+ - **Wave N** issues that depend only on issues in earlier waves
104
86
 
105
- **Check attempt count before claiming** count existing workpad comments to determine prior attempts:
87
+ If an issue has a dependency on something not in the ready backlog and not closed,
88
+ it's externally blocked — skip it, optionally mark `blocked`.
106
89
 
107
- ```bash
108
- MAX_ATTEMPTS=3
109
- PRIOR_ATTEMPTS=$(gh api "repos/{owner}/{repo}/issues/<N>/comments" \
110
- --jq '[.[] | select(.body | contains("claudius:workpad"))] | length' 2>/dev/null || echo "0")
111
- if [ "${PRIOR_ATTEMPTS:-0}" -ge "$MAX_ATTEMPTS" ]; then
112
- gh issue edit <N> --remove-label "ready" --add-label "blocked"
113
- gh issue comment <N> --body "Claudius: exceeded ${MAX_ATTEMPTS} build attempts. Needs human review before retrying."
114
- bash .claude/scripts/project-status.sh <N> "Blocked" "Blocked"
115
- # skip this issue — continue to next candidate
116
- fi
117
- ```
90
+ ## Step 4: Execute Waves
118
91
 
119
- **Claim atomically** (add both `in-progress` and `claude` labels):
120
- ```bash
121
- gh issue edit <N> --add-label "in-progress,claude" --remove-label "ready"
122
- gh issue view <N> # read full body + acceptance criteria
123
- ```
92
+ Process waves sequentially. Within each wave, fire developers in parallel (max 3 concurrent).
124
93
 
125
- **Post workpad comment** — one-liner status at claim:
126
- ```bash
127
- bash .claude/scripts/workpad-upsert.sh <N> "🔄 Claimed — attempt $(( ${PRIOR_ATTEMPTS:-0} + 1 ))"
128
- ```
94
+ For each wave:
129
95
 
130
- **Update Project #6 board → In Progress / Running:**
96
+ ### 4a. Claim Issues
97
+
98
+ For each issue in the wave (up to 3 concurrent):
131
99
  ```bash
100
+ gh issue edit <N> --add-label "in-progress,claude" --remove-label "ready"
101
+ bash .claude/scripts/workpad-upsert.sh <N> "🔄 Claimed — wave <W>, attempt <A>"
132
102
  bash .claude/scripts/project-status.sh <N> "In Progress" "Running"
133
103
  ```
134
104
 
135
- ## Step 3: Develop in Parallel
136
-
137
- **CRITICAL: One issue = one developer = one PR.** Never combine multiple issues into a single
138
- developer agent or a single PR. Each issue gets its own isolated developer in its own worktree.
139
- Violating this causes review failures, duplicate PRs, and retry storms.
105
+ ### 4b. Fire Developers
140
106
 
141
- Each developer runs in its own isolated worktree. Do NOT derive or provide branch names.
142
-
143
- **Read agent config** from `.claudius/config.yaml` (default: `claude`):
144
- ```bash
145
- AGENT_COMMAND=$(bun -e "
146
- import { parse } from 'yaml';
147
- import { readFileSync } from 'fs';
148
- const c = parse(readFileSync('.claudius/config.yaml', 'utf8'));
149
- process.stdout.write(c.agent?.command ?? 'claude');
150
- " 2>/dev/null || echo 'claude')
151
- ```
107
+ Read `agent.command` from `.claudius/config.yaml` (default: `claude`).
152
108
 
153
- **If `AGENT_COMMAND = "claude"` (default):**
154
- Spawn **exactly one** developer agent per issue using the `Agent` tool **concurrently**
155
- (all in one tool call message), using `subagent_type: "developer"`.
156
- Each agent handles ONE issue only never pass multiple issues to the same agent.
109
+ Spawn **one developer per issue** using the `Agent` tool **concurrently** (all in one
110
+ tool call), using `subagent_type: "developer"`. Each developer gets:
111
+ - Full issue body and acceptance criteria
112
+ - Issue number for commit format (`type(scope): description (#N)`)
113
+ - Constraint: implement only what the issue asks, no scope creep
114
+ - Instruction: use your current branch (the worktree branch), commit, push with
115
+ `git push -u origin HEAD`, report branch name. Do NOT create a PR.
116
+ - Request: include a **handoff summary** (what was built, how to test, AC coverage)
157
117
 
158
- **If `AGENT_COMMAND = "codex"`:**
159
- Spawn via Bash: `codex -p --model <agent.model> <agent.flags> "<prompt>" &` — one per issue.
118
+ **CRITICAL: One issue = one developer = one PR.** Never combine issues.
160
119
 
161
- For each issue, each developer prompt must include:
162
- - Full issue body and all acceptance criteria
163
- - Issue number for commit message format (`type(scope): description (#N)`)
164
- - Constraint: implement only what the issue asks, no scope creep
165
- - Instruction: use your current branch (the worktree branch), do NOT create a new branch.
166
- Implement, commit, push with `git push -u origin HEAD`, then report the branch name you
167
- pushed. Do not create the PR (worker creates PRs).
168
- - In your final output, include a structured **handoff summary** (what was built, how to test,
169
- AC coverage) so the worker can post it to the PR and update the workpad.
120
+ ### 4c. Process Completions Immediately
170
121
 
171
- Wait for all developer agents to complete before proceeding.
122
+ As each developer completes (don't wait for all in the wave):
172
123
 
173
- **On developer failure for an issue:**
124
+ **On failure:** Restore labels, comment, continue with rest of wave.
174
125
  ```bash
175
126
  gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
176
127
  gh issue comment <N> --body "Worker: developer failed. Restored to ready queue."
177
128
  ```
178
- Remove it from the active set and continue with the rest.
179
-
180
- ## Step 4: Validate & Create PRs
181
-
182
- For each successful developer result, **validate before creating the PR**.
183
-
184
- **Pre-PR validation** — check the developer's branch in its worktree:
185
- ```bash
186
- cd <worktree-path>
187
- bun run lint 2>&1 | tail -5
188
- bun run build 2>&1 | tail -5
189
- ```
190
- If lint or build fails: re-spawn the developer with the errors and ask it to fix them.
191
- Only create the PR once validation passes. Never create a PR with known lint/build failures.
192
-
193
- ```bash
194
- gh pr create \
195
- --head <branch-from-developer-output> \
196
- --title "type(scope): description (#N)" \
197
- --body "$(cat <<'EOF'
198
- ## Summary
199
- - <bullet from developer output>
200
-
201
- ## Closes
202
- Closes #N
203
-
204
- ## Test Plan
205
- - [ ] <scenario>
206
- EOF
207
- )"
208
- ```
209
-
210
- **Post handoff comment** — after each `gh pr create`, add a structured handoff to the PR
211
- using the `<!-- claudius:handoff -->` marker (pull content from developer's handoff summary):
212
-
213
- ```bash
214
- gh pr comment <PR> --body "$(cat <<'EOF'
215
- <!-- claudius:handoff -->
216
- **Handoff** · PR ready for review
217
- **What changed:** <from developer handoff summary>
218
- **How to test:** <from developer handoff summary>
219
- **AC coverage:** ✅ all / ⚠️ partial / ❌ gap noted
220
- **Notes:** <any gaps, follow-ups created>
221
- EOF
222
- )"
223
- ```
224
-
225
- After each `gh pr create`, send a Slack notification (best-effort — never block on failure):
226
- ```bash
227
- SLACK_CHANNEL=$(bun -e "
228
- import { parse } from 'yaml';
229
- import { readFileSync } from 'fs';
230
- const c = parse(readFileSync('.claudius/config.yaml', 'utf8'));
231
- process.stdout.write(c.slack?.channel ?? '');
232
- " 2>/dev/null)
233
- if [ -n "$SLACK_CHANNEL" ]; then
234
- PR_TITLE=$(gh pr view $PR_NUMBER --json title --jq '.title')
235
- PR_URL=$(gh pr view $PR_NUMBER --json url --jq '.url')
236
- THREAD_REF=$(bun .claude/scripts/slack.ts send \
237
- --channel "$SLACK_CHANNEL" \
238
- --text "🔍 *PR #$PR_NUMBER ready for review* — $PR_TITLE $PR_URL" | tail -1) \
239
- && printf '<!-- slack-thread: %s -->' "$THREAD_REF" | gh pr comment $PR_NUMBER --body-file - \
240
- || true
241
- fi
242
- ```
243
-
244
- **Update workpad + board → Under Review / Review:**
245
- ```bash
246
- bash .claude/scripts/workpad-upsert.sh <N> "🔍 Under review — PR #<M>"
247
- bash .claude/scripts/project-status.sh <N> "Under Review" "Review"
248
- ```
249
-
250
- ## Step 5: Review in Parallel
251
-
252
- Spawn one reviewer agent per PR using the `Agent` tool **concurrently** (all in one message).
253
-
254
- For each PR, use `subagent_type: "reviewer"`. Each reviewer prompt must include:
255
- - PR number to review
256
- - Issue number for AC verification
257
- - Return structured verdict: `approve` / `request-changes` / `block`
258
-
259
- Wait for all reviewer agents to complete.
260
129
 
261
- **On `approve`:** proceed to merge (Step 6).
130
+ **On success:** Validate PR Review → Merge, then cascade.
262
131
 
263
- **On `request-changes`:** re-spawn the developer for that issue with reviewer feedback
264
- (max 1 retry). After retry: push, update PR, re-spawn reviewer. If still `request-changes`
265
- treat as `block`.
132
+ 1. **Validate** check developer's branch in its worktree:
133
+ ```bash
134
+ cd <worktree-path>
135
+ bun run lint 2>&1 | tail -5
136
+ bun run build 2>&1 | tail -5
137
+ ```
138
+ If lint/build fails: re-spawn developer with errors to fix. Only proceed when clean.
266
139
 
267
- **On `block`:** restore labels, comment with reviewer's reason, skip to next.
268
- ```bash
269
- gh issue edit <N> --remove-label "in-progress,claude" --add-label "ready"
270
- gh issue comment <N> --body "Worker: reviewer blocked. Reason: <reason>."
271
- ```
272
-
273
- **Update board → Blocked:**
274
- ```bash
275
- bash .claude/scripts/project-status.sh <N> "Blocked" "Blocked"
276
- ```
140
+ 2. **Create PR:**
141
+ ```bash
142
+ gh pr create --head <branch> --title "type(scope): description (#N)" --body "..."
143
+ ```
144
+ Post handoff comment (`<!-- claudius:handoff -->`).
145
+ Send Slack notification (best-effort).
146
+ Update board:
147
+ ```bash
148
+ bash .claude/scripts/workpad-upsert.sh <N> "🔍 Under review — PR #<M>"
149
+ bash .claude/scripts/project-status.sh <N> "Under Review" "Review"
150
+ ```
277
151
 
278
- ## Step 6: Merge & Record
152
+ 3. **Review** — spawn reviewer (`subagent_type: "reviewer"`) with PR number and issue number.
153
+ - `approve` → merge
154
+ - `request-changes` → re-spawn developer once with feedback, then re-review. Still failing → `block`
155
+ - `block` → restore labels, comment with reason
279
156
 
280
- For each approved PR:
281
- ```bash
282
- bash .claude/scripts/merge-pr.sh <PR-number>
283
- gh issue close <N> --comment "Closed by PR #<M>."
284
- ```
157
+ 4. **Merge:**
158
+ ```bash
159
+ bash .claude/scripts/merge-pr.sh <PR-number>
160
+ gh issue close <N> --comment "Closed by PR #<M>."
161
+ bash .claude/scripts/workpad-upsert.sh <N> "✅ Merged — PR #<M>"
162
+ ```
163
+ Send Slack thread reply (best-effort).
164
+ Log to `.claude/memory/pulse.md`.
285
165
 
286
- **Update workpad + close issue** (closing removes it from the board via project-sync):
287
- ```bash
288
- bash .claude/scripts/workpad-upsert.sh <N> "✅ Merged PR #<M>"
289
- ```
166
+ 5. **Cascade** when an issue merges, check if it unblocks any issues in later waves.
167
+ If so, fire those developers immediately (respecting max 3 concurrent). Don't wait
168
+ for the rest of the current wave to finish.
290
169
 
291
- After each merge, reply in the PR's Slack thread (best-effort):
292
- ```bash
293
- THREAD_REF=$(gh pr view $PR_NUMBER --json comments \
294
- --jq '[.comments[].body | select(contains("slack-thread:"))] | first' \
295
- | grep -oE '[A-Z][A-Z0-9]{8,}:[0-9]+\.[0-9]+')
296
- if [ -n "$THREAD_REF" ] && [ "$THREAD_REF" != "null" ]; then
297
- bun .claude/scripts/slack.ts reply \
298
- --thread "$THREAD_REF" \
299
- --text "✅ Merged PR #$PR_NUMBER" 2>/dev/null || true
300
- fi
301
- ```
170
+ ### 4d. Heartbeat
302
171
 
303
- Append one line per merged issue to `.claude/memory/pulse.md` under `## Recent Build Outcomes`:
304
- ```
305
- - 2026-03-03: built #N PR#M merged (Xs)
306
- ```
172
+ After processing each wave, update the heartbeat timestamp in `active-builds.jsonl`.
173
+ If total runtime exceeds 60 minutes, drain active work (let in-flight developers finish)
174
+ but don't start new issues. Exit after draining.
307
175
 
308
- ---
176
+ ## Cleanup
309
177
 
310
- ## Step 7: Cleanup
178
+ After all waves are processed (or timeout reached):
311
179
 
312
- After all merges, remove stale agent sub-worktrees (best-effort):
313
180
  ```bash
181
+ # Remove stale worktrees
314
182
  git worktree list --porcelain | grep '^worktree' | grep 'agent-' | awk '{print $2}' | while read p; do
315
- git worktree remove --force "$p" 2>/dev/null && echo "Removed $p" || true
183
+ git worktree remove --force "$p" 2>/dev/null || true
316
184
  done
317
- ```
318
185
 
319
- **Remove this repo's active-builds.jsonl entry** — the global dir was passed in the prompt as `Global dir: <path>`. Extract and clean up:
320
- ```bash
321
- GLOBAL_DIR="<path-from-prompt>" # absolute global dir path from the worker prompt
322
- REPO_NAME="<this-repo-name>" # the repo name sleepless used in the entry
186
+ # Remove active-builds entry
187
+ GLOBAL_DIR="<path-from-prompt>"
188
+ REPO_NAME="<this-repo>"
323
189
  node -e "
324
190
  const fs = require('fs');
325
- const path = require('path');
326
- const file = path.join('$GLOBAL_DIR', '.claudius/active-builds.jsonl');
327
- if (!fs.existsSync(file)) process.exit(0);
328
- const lines = fs.readFileSync(file, 'utf8').split('\n').filter(Boolean);
329
- const kept = lines.filter(l => {
330
- try { return JSON.parse(l).repo !== '$REPO_NAME'; } catch { return true; }
331
- });
332
- fs.writeFileSync(file, kept.join('\n') + (kept.length ? '\n' : ''));
191
+ const f = '$GLOBAL_DIR/.claudius/active-builds.jsonl';
192
+ if (!fs.existsSync(f)) process.exit(0);
193
+ const lines = fs.readFileSync(f,'utf8').split('\n').filter(Boolean);
194
+ const kept = lines.filter(l => { try { return JSON.parse(l).repo !== '$REPO_NAME'; } catch { return true; } });
195
+ fs.writeFileSync(f, kept.join('\n') + (kept.length ? '\n' : ''));
333
196
  " 2>/dev/null || true
334
197
  ```
335
198
 
336
- Exit with `WORKER_OK`.
337
-
338
- ---
199
+ Exit `WORKER_OK`.
339
200
 
340
201
  ## Headless Execution Notes
341
202
 
342
203
  - Never use `EnterPlanMode`, `ExitPlanMode`, or `AskUserQuestion` — no human present
343
204
  - Never provide branch names to developers — they run in isolated worktrees
344
- - Skip any issue with the `codex` label — that's Codex territory
205
+ - Skip any issue with the `codex` label — Codex territory
345
206
  - Always restore both `in-progress` AND `claude` labels on failure/block
346
- - Exit with `WORKER_OK` when the cycle completes (0 or up to 3 issues processed)
347
207
  - On unrecoverable error per issue: restore labels, comment, continue — never abort the whole run
208
+ - Max 3 concurrent developers at any time — this is a slot limit, not a batch size
209
+ - 60-minute safety timeout — drain active work, then exit
@@ -21,10 +21,10 @@
21
21
  "name": "claudius",
22
22
  "source": "./",
23
23
  "description": "Autonomous orchestration layer for Claude Code — agents, skills, hooks, and heartbeat daemon for round-the-clock development",
24
- "version": "0.10.1",
24
+ "version": "0.12.0",
25
25
  "strict": true,
26
26
  "category": "development"
27
27
  }
28
28
  ],
29
- "version": "0.10.1"
29
+ "version": "0.12.0"
30
30
  }
@@ -1 +1 @@
1
- import{e as x,c as b,g as m,k as P,h as p,j as w,l as N,m as c,n as I,t as A,o as M}from"./_baseUniq-DZrBnw2L.js";import{aL as g,ar as E,aM as F,aN as T,aO as _,aP as l,aQ as $,aR as B,aS as S,aT as y}from"./mermaid.core-Do-o_wmR.js";var L=/\s/;function R(n){for(var r=n.length;r--&&L.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,R(n)+1).replace(G,"")}var o=NaN,q=/^[-+]0x[0-9a-f]+$/i,z=/^0b[01]+$/i,C=/^0o[0-7]+$/i,K=parseInt;function Q(n){if(typeof n=="number")return n;if(x(n))return o;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=z.test(n);return t||C.test(n)?K(n.slice(2),t?2:8):q.test(n)?o:+n}var v=1/0,W=17976931348623157e292;function X(n){if(!n)return n===0?n:0;if(n=Q(n),n===v||n===-v){var r=n<0?-1:1;return r*W}return n===n?n:0}function Y(n){var r=X(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var O=Object.prototype,D=O.hasOwnProperty,dn=E(function(n,r){n=Object(n);var t=-1,i=r.length,a=i>2?r[2]:void 0;for(a&&F(r[0],r[1],a)&&(i=1);++t<i;)for(var f=r[t],e=T(f),s=-1,d=e.length;++s<d;){var u=e[s],h=n[u];(h===void 0||_(h,O[u])&&!D.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function J(n){return function(r,t,i){var a=Object(r);if(!l(r)){var f=m(t);r=P(r),t=function(s){return f(a[s],s,a)}}var e=n(r,t,i);return e>-1?a[f?r[e]:e]:void 0}}var U=Math.max;function Z(n,r,t){var i=n==null?0:n.length;if(!i)return-1;var a=t==null?0:Y(t);return a<0&&(a=U(i+a,0)),p(n,m(r),a)}var hn=J(Z);function V(n,r){var t=-1,i=l(n)?Array(n.length):[];return w(n,function(a,f,e){i[++t]=r(a,f,e)}),i}function gn(n,r){var t=$(n)?N:V;return t(n,m(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function mn(n,r){return n!=null&&c(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var i=-1,a=n.length;++i<a;){var f=n[i],e=r(f);if(e!=null&&(s===void 0?e===e&&!x(e):t(e,s)))var s=e,d=f}return d}function on(n){return n&&n.length?tn(n,B,rn):void 0}function an(n,r,t,i){if(!g(n))return n;r=I(r,n);for(var a=-1,f=r.length,e=f-1,s=n;s!=null&&++a<f;){var d=A(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=e){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:S(r[a+1])?[]:{})}y(s,d,u),s=s[d]}return n}function vn(n,r,t){for(var i=-1,a=r.length,f={};++i<a;){var e=r[i],s=M(n,e);t(s,e)&&an(f,I(e,n),s)}return f}export{rn as a,tn as b,V as c,vn as d,on as e,fn as f,hn as g,mn as h,dn as i,Y as j,un as l,gn as m,X as t};
1
+ import{e as x,c as b,g as m,k as P,h as p,j as w,l as N,m as c,n as I,t as A,o as M}from"./_baseUniq-BzezThG0.js";import{aL as g,ar as E,aM as F,aN as T,aO as _,aP as l,aQ as $,aR as B,aS as S,aT as y}from"./mermaid.core-UQR83fLD.js";var L=/\s/;function R(n){for(var r=n.length;r--&&L.test(n.charAt(r)););return r}var G=/^\s+/;function H(n){return n&&n.slice(0,R(n)+1).replace(G,"")}var o=NaN,q=/^[-+]0x[0-9a-f]+$/i,z=/^0b[01]+$/i,C=/^0o[0-7]+$/i,K=parseInt;function Q(n){if(typeof n=="number")return n;if(x(n))return o;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=H(n);var t=z.test(n);return t||C.test(n)?K(n.slice(2),t?2:8):q.test(n)?o:+n}var v=1/0,W=17976931348623157e292;function X(n){if(!n)return n===0?n:0;if(n=Q(n),n===v||n===-v){var r=n<0?-1:1;return r*W}return n===n?n:0}function Y(n){var r=X(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?b(n):[]}var O=Object.prototype,D=O.hasOwnProperty,dn=E(function(n,r){n=Object(n);var t=-1,i=r.length,a=i>2?r[2]:void 0;for(a&&F(r[0],r[1],a)&&(i=1);++t<i;)for(var f=r[t],e=T(f),s=-1,d=e.length;++s<d;){var u=e[s],h=n[u];(h===void 0||_(h,O[u])&&!D.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function J(n){return function(r,t,i){var a=Object(r);if(!l(r)){var f=m(t);r=P(r),t=function(s){return f(a[s],s,a)}}var e=n(r,t,i);return e>-1?a[f?r[e]:e]:void 0}}var U=Math.max;function Z(n,r,t){var i=n==null?0:n.length;if(!i)return-1;var a=t==null?0:Y(t);return a<0&&(a=U(i+a,0)),p(n,m(r),a)}var hn=J(Z);function V(n,r){var t=-1,i=l(n)?Array(n.length):[];return w(n,function(a,f,e){i[++t]=r(a,f,e)}),i}function gn(n,r){var t=$(n)?N:V;return t(n,m(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function mn(n,r){return n!=null&&c(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var i=-1,a=n.length;++i<a;){var f=n[i],e=r(f);if(e!=null&&(s===void 0?e===e&&!x(e):t(e,s)))var s=e,d=f}return d}function on(n){return n&&n.length?tn(n,B,rn):void 0}function an(n,r,t,i){if(!g(n))return n;r=I(r,n);for(var a=-1,f=r.length,e=f-1,s=n;s!=null&&++a<f;){var d=A(r[a]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(a!=e){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:S(r[a+1])?[]:{})}y(s,d,u),s=s[d]}return n}function vn(n,r,t){for(var i=-1,a=r.length,f={};++i<a;){var e=r[i],s=M(n,e);t(s,e)&&an(f,I(e,n),s)}return f}export{rn as a,tn as b,V as c,vn as d,on as e,fn as f,hn as g,mn as h,dn as i,Y as j,un as l,gn as m,X as t};
@@ -1 +1 @@
1
- import{bd as S,be as Rn,aQ as T,bf as w,aP as sn,bg as xn,bh as mn,bi as Mn,bj as un,bk as x,aN as N,bl as Cn,bm as on,bn as Fn,bo as E,bb as gn,bp as R,aL as ln,bq as Dn,br as D,bs as Gn,bt as Nn,bu as _,aT as Un,bv as Bn,aO as Kn,bw as Q,bx as jn,by as Hn,aS as qn,aR as cn,b9 as Yn,bz as M}from"./mermaid.core-Do-o_wmR.js";var Zn="[object Symbol]";function U(n){return typeof n=="symbol"||S(n)&&Rn(n)==Zn}function bn(n,r){for(var e=-1,t=n==null?0:n.length,f=Array(t);++e<t;)f[e]=r(n[e],e,n);return f}var X=w?w.prototype:void 0,J=X?X.toString:void 0;function dn(n){if(typeof n=="string")return n;if(T(n))return bn(n,dn)+"";if(U(n))return J?J.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Qn(){}function pn(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Xn(n,r,e,t){for(var f=n.length,i=e+-1;++i<f;)if(r(n[i],i,n))return i;return-1}function Jn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,f=n.length;++t<f;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Xn(n,Jn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||U(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=Mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,fr=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,f,i){r.push(f?i.replace(ir,"$1"):t||e)}),r});function ar(n){return n==null?"":dn(n)}function An(n,r){return T(n)?n:B(n,r)?[n]:fr(ar(n))}function m(n){if(typeof n=="string"||U(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function yn(n,r){r=An(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[m(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:yn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,f=n.length;++e<t;)n[f+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,f){var i=-1,a=n.length;for(e||(e=ur),f||(f=[]);++i<a;){var s=n[i];e(s)?K(f,s):t||(f[f.length]=s)}return f}function or(n,r,e,t){var f=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++f]);++f<i;)e=r(e,n[f],f,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,N(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,f=0,i=[];++e<t;){var a=n[e];r(a,e,n)&&(i[f++]=a)}return i}function hn(){return[]}var cr=Object.prototype,br=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,j=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return br.call(n,r)}))}:hn;function dr(n,r){return x(n,j(n),r)}var pr=Object.getOwnPropertySymbols,wn=pr?function(n){for(var r=[];n;)K(r,j(n)),n=Cn(n);return r}:hn;function Ar(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,j)}function yr(n){return On(n,N,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Pr="[object Date]",Ir="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",mr="[object Symbol]",Mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Nr="[object Int16Array]",Ur="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",jr="[object Uint16Array]",Hr="[object Uint32Array]";function qr(n,r,e){var t=n.constructor;switch(r){case Mr:return on(n);case Er:case Pr:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Nr:case Ur:case Br:case Kr:case jr:case Hr:return Fn(n,e);case Ir:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case mr:return Sr(n)}}var Yr="[object Map]";function Zr(n){return S(n)&&E(n)==Yr}var nn=R&&R.isMap,Qr=nn?gn(nn):Zr,Xr="[object Set]";function Jr(n){return S(n)&&E(n)==Xr}var rn=R&&R.isSet,Wr=rn?gn(rn):Jr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",fe="[object Map]",ae="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",be="[object DataView]",de="[object Float32Array]",pe="[object Float64Array]",Ae="[object Int8Array]",ye="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[be]=g[re]=g[ee]=g[de]=g[pe]=g[Ae]=g[ye]=g[Te]=g[fe]=g[ae]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,f,i){var a,s=r&zr,u=r&Vr,b=r&kr;if(a!==void 0)return a;if(!ln(n))return n;var l=T(n);if(l){if(a=wr(n),!s)return Dn(n,a)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!f){if(a=u||c?{}:Nn(n),!s)return u?Ar(n,lr(a,n)):dr(n,gr(a,n))}else{if(!g[o])return f?n:{};a=qr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,a),Wr(n)?n.forEach(function(d){a.add(C(d,r,e,d,n,i))}):Qr(n)&&n.forEach(function(d,p){a.set(p,C(d,r,e,p,n,i))});var A=b?u?yr:G:u?N:$,y=l?void 0:A(n);return pn(y||n,function(d,p){y&&(p=d,d=n[p]),Un(a,p,C(d,r,e,p,n,i))}),a}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function P(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}P.prototype.add=P.prototype.push=Se;P.prototype.has=Ee;function Pe(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Ie=1,ve=2;function Pn(n,r,e,t,f,i){var a=e&Ie,s=n.length,u=r.length;if(s!=u&&!(a&&u>s))return!1;var b=i.get(n),l=i.get(r);if(b&&l)return b==r&&l==n;var o=-1,c=!0,h=e&ve?new P:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var A=n[o],y=r[o];if(t)var d=a?t(y,A,o,r,n,i):t(A,y,o,n,r,i);if(d!==void 0){if(d)continue;c=!1;break}if(h){if(!Pe(r,function(p,O){if(!En(h,O)&&(A===p||f(A,p,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(A===y||f(A,y,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,f){e[++r]=[f,t]}),e}function H(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,me="[object Boolean]",Me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ne="[object Set]",Ue="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",je="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function He(n,r,e,t,f,i,a){switch(e){case je:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new Q(n),new Q(r)));case me:case Me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ue:return n==r+"";case Fe:var s=Le;case Ne:var u=t&Re;if(s||(s=H),n.size!=r.size&&!u)return!1;var b=a.get(n);if(b)return b==r;t|=xe,a.set(n,r);var l=Pn(s(n),s(r),t,f,i,a);return a.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var qe=1,Ye=Object.prototype,Ze=Ye.hasOwnProperty;function Qe(n,r,e,t,f,i){var a=e&qe,s=G(n),u=s.length,b=G(r),l=b.length;if(u!=l&&!a)return!1;for(var o=u;o--;){var c=s[o];if(!(a?c in r:Ze.call(r,c)))return!1}var h=i.get(n),A=i.get(r);if(h&&A)return h==r&&A==n;var y=!0;i.set(n,r),i.set(r,n);for(var d=a;++o<u;){c=s[o];var p=n[c],O=r[c];if(t)var Z=a?t(O,p,c,r,n,i):t(p,O,c,n,r,i);if(!(Z===void 0?p===O||f(p,O,e,t,i):Z)){y=!1;break}d||(d=c=="constructor")}if(y&&!d){var I=n.constructor,v=r.constructor;I!=v&&"constructor"in n&&"constructor"in r&&!(typeof I=="function"&&I instanceof I&&typeof v=="function"&&v instanceof v)&&(y=!1)}return i.delete(n),i.delete(r),y}var Xe=1,tn="[object Arguments]",fn="[object Array]",L="[object Object]",Je=Object.prototype,an=Je.hasOwnProperty;function We(n,r,e,t,f,i){var a=T(n),s=T(r),u=a?fn:E(n),b=s?fn:E(r);u=u==tn?L:u,b=b==tn?L:b;var l=u==L,o=b==L,c=u==b;if(c&&D(n)){if(!D(r))return!1;a=!0,l=!1}if(c&&!l)return i||(i=new _),a||jn(n)?Pn(n,r,e,t,f,i):He(n,r,u,e,t,f,i);if(!(e&Xe)){var h=l&&an.call(n,"__wrapped__"),A=o&&an.call(r,"__wrapped__");if(h||A){var y=h?n.value():n,d=A?r.value():r;return i||(i=new _),f(y,d,e,t,i)}}return c?(i||(i=new _),Qe(n,r,e,t,f,i)):!1}function q(n,r,e,t,f){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,q,f)}var ze=1,Ve=2;function ke(n,r,e,t){var f=e.length,i=f;if(n==null)return!i;for(n=Object(n);f--;){var a=e[f];if(a[2]?a[1]!==n[a[0]]:!(a[0]in n))return!1}for(;++f<i;){a=e[f];var s=a[0],u=n[s],b=a[1];if(a[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?q(b,u,ze|Ve,t,l):o))return!1}}return!0}function In(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],f=n[t];r[e]=[t,f,In(f)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=An(r,n);for(var t=-1,f=r.length,i=!1;++t<f;){var a=m(r[t]);if(!(i=n!=null&&e(n,a)))break;n=n[a]}return i||++t!=f?i:(f=n==null?0:n.length,!!f&&Hn(f)&&qn(a,f)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var ft=1,at=2;function st(n,r){return B(n)&&In(r)?vn(m(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):q(r,t,ft|at)}}function ut(n){return function(r){return r==null?void 0:r[n]}}function ot(n){return function(r){return yn(r,n)}}function gt(n){return B(n)?ut(m(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Yn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var f=e.length,i=-1,a=Object(e);++i<f&&t(a[i],i,a)!==!1;);return e}}var Y=ct(lt);function bt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?pn:Y;return e(n,bt(r))}function dt(n,r){var e=[];return Y(n,function(t,f,i){r(t,f,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:dt;return e(n,Ln(r))}function pt(n,r){return bn(r,function(e){return n[e]})}function St(n){return n==null?[]:pt(n,$(n))}function Et(n){return n===void 0}function At(n,r,e,t,f){return f(n,function(i,a,s){e=t?(t=!1,i):r(e,i,a,s)}),e}function Pt(n,r,e){var t=T(n)?or:At,f=arguments.length<3;return t(n,Ln(r),e,f,Y)}var yt=1/0,Tt=M&&1/H(new M([,-0]))[1]==yt?function(n){return new M(n)}:Qn,ht=200;function It(n,r,e){var t=-1,f=Vn,i=n.length,a=!0,s=[],u=s;if(i>=ht){var b=r?null:Tt(n);if(b)return H(b);a=!1,f=En,u=new P}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,a&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else f(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,dt as B,Pe as C,Qn as D,P as S,It as a,C as b,Ot as c,$t as d,U as e,_t as f,Ln as g,Xn as h,Et as i,Y as j,$ as k,bn as l,tt as m,An as n,yn as o,bt as p,lt as q,Pt as r,it as s,m as t,ar as u,St as v,Vn as w,En as x,zn as y,yr as z};
1
+ import{bd as S,be as Rn,aQ as T,bf as w,aP as sn,bg as xn,bh as mn,bi as Mn,bj as un,bk as x,aN as N,bl as Cn,bm as on,bn as Fn,bo as E,bb as gn,bp as R,aL as ln,bq as Dn,br as D,bs as Gn,bt as Nn,bu as _,aT as Un,bv as Bn,aO as Kn,bw as Q,bx as jn,by as Hn,aS as qn,aR as cn,b9 as Yn,bz as M}from"./mermaid.core-UQR83fLD.js";var Zn="[object Symbol]";function U(n){return typeof n=="symbol"||S(n)&&Rn(n)==Zn}function bn(n,r){for(var e=-1,t=n==null?0:n.length,f=Array(t);++e<t;)f[e]=r(n[e],e,n);return f}var X=w?w.prototype:void 0,J=X?X.toString:void 0;function dn(n){if(typeof n=="string")return n;if(T(n))return bn(n,dn)+"";if(U(n))return J?J.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function Qn(){}function pn(n,r){for(var e=-1,t=n==null?0:n.length;++e<t&&r(n[e],e,n)!==!1;);return n}function Xn(n,r,e,t){for(var f=n.length,i=e+-1;++i<f;)if(r(n[i],i,n))return i;return-1}function Jn(n){return n!==n}function Wn(n,r,e){for(var t=e-1,f=n.length;++t<f;)if(n[t]===r)return t;return-1}function zn(n,r,e){return r===r?Wn(n,r,e):Xn(n,Jn,e)}function Vn(n,r){var e=n==null?0:n.length;return!!e&&zn(n,r,0)>-1}function $(n){return sn(n)?xn(n):mn(n)}var kn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nr=/^\w*$/;function B(n,r){if(T(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||U(n)?!0:nr.test(n)||!kn.test(n)||r!=null&&n in Object(r)}var rr=500;function er(n){var r=Mn(n,function(t){return e.size===rr&&e.clear(),t}),e=r.cache;return r}var tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ir=/\\(\\)?/g,fr=er(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(tr,function(e,t,f,i){r.push(f?i.replace(ir,"$1"):t||e)}),r});function ar(n){return n==null?"":dn(n)}function An(n,r){return T(n)?n:B(n,r)?[n]:fr(ar(n))}function m(n){if(typeof n=="string"||U(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function yn(n,r){r=An(r,n);for(var e=0,t=r.length;n!=null&&e<t;)n=n[m(r[e++])];return e&&e==t?n:void 0}function sr(n,r,e){var t=n==null?void 0:yn(n,r);return t===void 0?e:t}function K(n,r){for(var e=-1,t=r.length,f=n.length;++e<t;)n[f+e]=r[e];return n}var W=w?w.isConcatSpreadable:void 0;function ur(n){return T(n)||un(n)||!!(W&&n&&n[W])}function Ot(n,r,e,t,f){var i=-1,a=n.length;for(e||(e=ur),f||(f=[]);++i<a;){var s=n[i];e(s)?K(f,s):t||(f[f.length]=s)}return f}function or(n,r,e,t){var f=-1,i=n==null?0:n.length;for(t&&i&&(e=n[++f]);++f<i;)e=r(e,n[f],f,n);return e}function gr(n,r){return n&&x(r,$(r),n)}function lr(n,r){return n&&x(r,N(r),n)}function Tn(n,r){for(var e=-1,t=n==null?0:n.length,f=0,i=[];++e<t;){var a=n[e];r(a,e,n)&&(i[f++]=a)}return i}function hn(){return[]}var cr=Object.prototype,br=cr.propertyIsEnumerable,z=Object.getOwnPropertySymbols,j=z?function(n){return n==null?[]:(n=Object(n),Tn(z(n),function(r){return br.call(n,r)}))}:hn;function dr(n,r){return x(n,j(n),r)}var pr=Object.getOwnPropertySymbols,wn=pr?function(n){for(var r=[];n;)K(r,j(n)),n=Cn(n);return r}:hn;function Ar(n,r){return x(n,wn(n),r)}function On(n,r,e){var t=r(n);return T(n)?t:K(t,e(n))}function G(n){return On(n,$,j)}function yr(n){return On(n,N,wn)}var Tr=Object.prototype,hr=Tr.hasOwnProperty;function wr(n){var r=n.length,e=new n.constructor(r);return r&&typeof n[0]=="string"&&hr.call(n,"index")&&(e.index=n.index,e.input=n.input),e}function Or(n,r){var e=r?on(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $r=/\w*$/;function _r(n){var r=new n.constructor(n.source,$r.exec(n));return r.lastIndex=n.lastIndex,r}var V=w?w.prototype:void 0,k=V?V.valueOf:void 0;function Sr(n){return k?Object(k.call(n)):{}}var Er="[object Boolean]",Pr="[object Date]",Ir="[object Map]",vr="[object Number]",Lr="[object RegExp]",Rr="[object Set]",xr="[object String]",mr="[object Symbol]",Mr="[object ArrayBuffer]",Cr="[object DataView]",Fr="[object Float32Array]",Dr="[object Float64Array]",Gr="[object Int8Array]",Nr="[object Int16Array]",Ur="[object Int32Array]",Br="[object Uint8Array]",Kr="[object Uint8ClampedArray]",jr="[object Uint16Array]",Hr="[object Uint32Array]";function qr(n,r,e){var t=n.constructor;switch(r){case Mr:return on(n);case Er:case Pr:return new t(+n);case Cr:return Or(n,e);case Fr:case Dr:case Gr:case Nr:case Ur:case Br:case Kr:case jr:case Hr:return Fn(n,e);case Ir:return new t;case vr:case xr:return new t(n);case Lr:return _r(n);case Rr:return new t;case mr:return Sr(n)}}var Yr="[object Map]";function Zr(n){return S(n)&&E(n)==Yr}var nn=R&&R.isMap,Qr=nn?gn(nn):Zr,Xr="[object Set]";function Jr(n){return S(n)&&E(n)==Xr}var rn=R&&R.isSet,Wr=rn?gn(rn):Jr,zr=1,Vr=2,kr=4,$n="[object Arguments]",ne="[object Array]",re="[object Boolean]",ee="[object Date]",te="[object Error]",_n="[object Function]",ie="[object GeneratorFunction]",fe="[object Map]",ae="[object Number]",Sn="[object Object]",se="[object RegExp]",ue="[object Set]",oe="[object String]",ge="[object Symbol]",le="[object WeakMap]",ce="[object ArrayBuffer]",be="[object DataView]",de="[object Float32Array]",pe="[object Float64Array]",Ae="[object Int8Array]",ye="[object Int16Array]",Te="[object Int32Array]",he="[object Uint8Array]",we="[object Uint8ClampedArray]",Oe="[object Uint16Array]",$e="[object Uint32Array]",g={};g[$n]=g[ne]=g[ce]=g[be]=g[re]=g[ee]=g[de]=g[pe]=g[Ae]=g[ye]=g[Te]=g[fe]=g[ae]=g[Sn]=g[se]=g[ue]=g[oe]=g[ge]=g[he]=g[we]=g[Oe]=g[$e]=!0;g[te]=g[_n]=g[le]=!1;function C(n,r,e,t,f,i){var a,s=r&zr,u=r&Vr,b=r&kr;if(a!==void 0)return a;if(!ln(n))return n;var l=T(n);if(l){if(a=wr(n),!s)return Dn(n,a)}else{var o=E(n),c=o==_n||o==ie;if(D(n))return Gn(n,s);if(o==Sn||o==$n||c&&!f){if(a=u||c?{}:Nn(n),!s)return u?Ar(n,lr(a,n)):dr(n,gr(a,n))}else{if(!g[o])return f?n:{};a=qr(n,o,s)}}i||(i=new _);var h=i.get(n);if(h)return h;i.set(n,a),Wr(n)?n.forEach(function(d){a.add(C(d,r,e,d,n,i))}):Qr(n)&&n.forEach(function(d,p){a.set(p,C(d,r,e,p,n,i))});var A=b?u?yr:G:u?N:$,y=l?void 0:A(n);return pn(y||n,function(d,p){y&&(p=d,d=n[p]),Un(a,p,C(d,r,e,p,n,i))}),a}var _e="__lodash_hash_undefined__";function Se(n){return this.__data__.set(n,_e),this}function Ee(n){return this.__data__.has(n)}function P(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new Bn;++r<e;)this.add(n[r])}P.prototype.add=P.prototype.push=Se;P.prototype.has=Ee;function Pe(n,r){for(var e=-1,t=n==null?0:n.length;++e<t;)if(r(n[e],e,n))return!0;return!1}function En(n,r){return n.has(r)}var Ie=1,ve=2;function Pn(n,r,e,t,f,i){var a=e&Ie,s=n.length,u=r.length;if(s!=u&&!(a&&u>s))return!1;var b=i.get(n),l=i.get(r);if(b&&l)return b==r&&l==n;var o=-1,c=!0,h=e&ve?new P:void 0;for(i.set(n,r),i.set(r,n);++o<s;){var A=n[o],y=r[o];if(t)var d=a?t(y,A,o,r,n,i):t(A,y,o,n,r,i);if(d!==void 0){if(d)continue;c=!1;break}if(h){if(!Pe(r,function(p,O){if(!En(h,O)&&(A===p||f(A,p,e,t,i)))return h.push(O)})){c=!1;break}}else if(!(A===y||f(A,y,e,t,i))){c=!1;break}}return i.delete(n),i.delete(r),c}function Le(n){var r=-1,e=Array(n.size);return n.forEach(function(t,f){e[++r]=[f,t]}),e}function H(n){var r=-1,e=Array(n.size);return n.forEach(function(t){e[++r]=t}),e}var Re=1,xe=2,me="[object Boolean]",Me="[object Date]",Ce="[object Error]",Fe="[object Map]",De="[object Number]",Ge="[object RegExp]",Ne="[object Set]",Ue="[object String]",Be="[object Symbol]",Ke="[object ArrayBuffer]",je="[object DataView]",en=w?w.prototype:void 0,F=en?en.valueOf:void 0;function He(n,r,e,t,f,i,a){switch(e){case je:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case Ke:return!(n.byteLength!=r.byteLength||!i(new Q(n),new Q(r)));case me:case Me:case De:return Kn(+n,+r);case Ce:return n.name==r.name&&n.message==r.message;case Ge:case Ue:return n==r+"";case Fe:var s=Le;case Ne:var u=t&Re;if(s||(s=H),n.size!=r.size&&!u)return!1;var b=a.get(n);if(b)return b==r;t|=xe,a.set(n,r);var l=Pn(s(n),s(r),t,f,i,a);return a.delete(n),l;case Be:if(F)return F.call(n)==F.call(r)}return!1}var qe=1,Ye=Object.prototype,Ze=Ye.hasOwnProperty;function Qe(n,r,e,t,f,i){var a=e&qe,s=G(n),u=s.length,b=G(r),l=b.length;if(u!=l&&!a)return!1;for(var o=u;o--;){var c=s[o];if(!(a?c in r:Ze.call(r,c)))return!1}var h=i.get(n),A=i.get(r);if(h&&A)return h==r&&A==n;var y=!0;i.set(n,r),i.set(r,n);for(var d=a;++o<u;){c=s[o];var p=n[c],O=r[c];if(t)var Z=a?t(O,p,c,r,n,i):t(p,O,c,n,r,i);if(!(Z===void 0?p===O||f(p,O,e,t,i):Z)){y=!1;break}d||(d=c=="constructor")}if(y&&!d){var I=n.constructor,v=r.constructor;I!=v&&"constructor"in n&&"constructor"in r&&!(typeof I=="function"&&I instanceof I&&typeof v=="function"&&v instanceof v)&&(y=!1)}return i.delete(n),i.delete(r),y}var Xe=1,tn="[object Arguments]",fn="[object Array]",L="[object Object]",Je=Object.prototype,an=Je.hasOwnProperty;function We(n,r,e,t,f,i){var a=T(n),s=T(r),u=a?fn:E(n),b=s?fn:E(r);u=u==tn?L:u,b=b==tn?L:b;var l=u==L,o=b==L,c=u==b;if(c&&D(n)){if(!D(r))return!1;a=!0,l=!1}if(c&&!l)return i||(i=new _),a||jn(n)?Pn(n,r,e,t,f,i):He(n,r,u,e,t,f,i);if(!(e&Xe)){var h=l&&an.call(n,"__wrapped__"),A=o&&an.call(r,"__wrapped__");if(h||A){var y=h?n.value():n,d=A?r.value():r;return i||(i=new _),f(y,d,e,t,i)}}return c?(i||(i=new _),Qe(n,r,e,t,f,i)):!1}function q(n,r,e,t,f){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:We(n,r,e,t,q,f)}var ze=1,Ve=2;function ke(n,r,e,t){var f=e.length,i=f;if(n==null)return!i;for(n=Object(n);f--;){var a=e[f];if(a[2]?a[1]!==n[a[0]]:!(a[0]in n))return!1}for(;++f<i;){a=e[f];var s=a[0],u=n[s],b=a[1];if(a[2]){if(u===void 0&&!(s in n))return!1}else{var l=new _,o;if(!(o===void 0?q(b,u,ze|Ve,t,l):o))return!1}}return!0}function In(n){return n===n&&!ln(n)}function nt(n){for(var r=$(n),e=r.length;e--;){var t=r[e],f=n[t];r[e]=[t,f,In(f)]}return r}function vn(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function rt(n){var r=nt(n);return r.length==1&&r[0][2]?vn(r[0][0],r[0][1]):function(e){return e===n||ke(e,n,r)}}function et(n,r){return n!=null&&r in Object(n)}function tt(n,r,e){r=An(r,n);for(var t=-1,f=r.length,i=!1;++t<f;){var a=m(r[t]);if(!(i=n!=null&&e(n,a)))break;n=n[a]}return i||++t!=f?i:(f=n==null?0:n.length,!!f&&Hn(f)&&qn(a,f)&&(T(n)||un(n)))}function it(n,r){return n!=null&&tt(n,r,et)}var ft=1,at=2;function st(n,r){return B(n)&&In(r)?vn(m(n),r):function(e){var t=sr(e,n);return t===void 0&&t===r?it(e,n):q(r,t,ft|at)}}function ut(n){return function(r){return r==null?void 0:r[n]}}function ot(n){return function(r){return yn(r,n)}}function gt(n){return B(n)?ut(m(n)):ot(n)}function Ln(n){return typeof n=="function"?n:n==null?cn:typeof n=="object"?T(n)?st(n[0],n[1]):rt(n):gt(n)}function lt(n,r){return n&&Yn(n,r,$)}function ct(n,r){return function(e,t){if(e==null)return e;if(!sn(e))return n(e,t);for(var f=e.length,i=-1,a=Object(e);++i<f&&t(a[i],i,a)!==!1;);return e}}var Y=ct(lt);function bt(n){return typeof n=="function"?n:cn}function $t(n,r){var e=T(n)?pn:Y;return e(n,bt(r))}function dt(n,r){var e=[];return Y(n,function(t,f,i){r(t,f,i)&&e.push(t)}),e}function _t(n,r){var e=T(n)?Tn:dt;return e(n,Ln(r))}function pt(n,r){return bn(r,function(e){return n[e]})}function St(n){return n==null?[]:pt(n,$(n))}function Et(n){return n===void 0}function At(n,r,e,t,f){return f(n,function(i,a,s){e=t?(t=!1,i):r(e,i,a,s)}),e}function Pt(n,r,e){var t=T(n)?or:At,f=arguments.length<3;return t(n,Ln(r),e,f,Y)}var yt=1/0,Tt=M&&1/H(new M([,-0]))[1]==yt?function(n){return new M(n)}:Qn,ht=200;function It(n,r,e){var t=-1,f=Vn,i=n.length,a=!0,s=[],u=s;if(i>=ht){var b=r?null:Tt(n);if(b)return H(b);a=!1,f=En,u=new P}else u=r?[]:s;n:for(;++t<i;){var l=n[t],o=r?r(l):l;if(l=l!==0?l:0,a&&o===o){for(var c=u.length;c--;)if(u[c]===o)continue n;r&&u.push(o),s.push(l)}else f(u,o,e)||(u!==s&&u.push(o),s.push(l))}return s}export{Tn as A,dt as B,Pe as C,Qn as D,P as S,It as a,C as b,Ot as c,$t as d,U as e,_t as f,Ln as g,Xn as h,Et as i,Y as j,$ as k,bn as l,tt as m,An as n,yn as o,bt as p,lt as q,Pt as r,it as s,m as t,ar as u,St as v,Vn as w,En as x,zn as y,yr as z};
@@ -1 +1 @@
1
- import{M as ln,N as an,O as Y,P as O,Q,R as un,S as y,T as tn,V as j,W as _,X as rn,Y as o,Z as on,$ as sn,a0 as fn}from"./mermaid.core-Do-o_wmR.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,D,S,v,R,V,a){var E=D-l,i=S-h,n=V-v,d=a-R,u=d*E-n*i;if(!(u*u<y))return u=(n*(h-R)-d*(l-v))/u,[l+u*E,h+u*i]}function H(l,h,D,S,v,R,V){var a=l-D,E=h-S,i=(V?R:-R)/j(a*a+E*E),n=i*E,d=-i*a,u=l+n,s=h+d,f=D+n,c=S+d,W=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,A=m*m+g*g,T=v-R,P=u*c-f*s,I=(g<0?-1:1)*j(on(0,T*T*A-P*P)),M=(P*g-m*I)/A,N=(-P*m-g*I)/A,w=(P*g+m*I)/A,p=(-P*m+g*I)/A,x=M-W,e=N-t,r=w-W,X=p-t;return x*x+e*e>r*r+X*X&&(M=w,N=p),{cx:M,cy:N,x01:-n,y01:-d,x11:M*(v/T-1),y11:N*(v/T-1)}}function hn(){var l=cn,h=yn,D=Q(0),S=null,v=gn,R=dn,V=mn,a=null,E=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=R.apply(this,arguments)-un,W=rn(c-f),t=c>f;if(a||(a=n=E()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(W>tn-y)a.moveTo(s*Y(f),s*O(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*Y(c),u*O(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,A=f,T=c,P=W,I=W,M=V.apply(this,arguments)/2,N=M>y&&(S?+S.apply(this,arguments):j(u*u+s*s)),w=_(rn(s-u)/2,+D.apply(this,arguments)),p=w,x=w,e,r;if(N>y){var X=sn(N/u*O(M)),z=sn(N/s*O(M));(P-=X*2)>y?(X*=t?1:-1,A+=X,T-=X):(P=0,A=T=(f+c)/2),(I-=z*2)>y?(z*=t?1:-1,m+=z,g-=z):(I=0,m=g=(f+c)/2)}var Z=s*Y(m),$=s*O(m),B=u*Y(T),C=u*O(T);if(w>y){var F=s*Y(g),G=s*O(g),J=u*Y(A),K=u*O(A),q;if(W<an)if(q=pn(Z,$,J,K,F,G,B,C)){var L=Z-q[0],U=$-q[1],k=F-q[0],b=G-q[1],nn=1/O(fn((L*k+U*b)/(j(L*L+U*U)*j(k*k+b*b)))/2),en=j(q[0]*q[0]+q[1]*q[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}I>y?x>y?(e=H(J,K,Z,$,s,x,t),r=H(F,G,B,C,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(Z,$),a.arc(0,0,s,m,g,!t)):a.moveTo(Z,$),!(u>y)||!(P>y)?a.lineTo(B,C):p>y?(e=H(B,C,F,G,u,-p,t),r=H(Z,$,J,K,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,A,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +R.apply(this,arguments))/2-an/2;return[Y(d)*n,O(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:Q(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:Q(+n),i):h},i.cornerRadius=function(n){return arguments.length?(D=typeof n=="function"?n:Q(+n),i):D},i.padRadius=function(n){return arguments.length?(S=n==null?null:typeof n=="function"?n:Q(+n),i):S},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:Q(+n),i):v},i.endAngle=function(n){return arguments.length?(R=typeof n=="function"?n:Q(+n),i):R},i.padAngle=function(n){return arguments.length?(V=typeof n=="function"?n:Q(+n),i):V},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{M as ln,N as an,O as Y,P as O,Q,R as un,S as y,T as tn,V as j,W as _,X as rn,Y as o,Z as on,$ as sn,a0 as fn}from"./mermaid.core-UQR83fLD.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,D,S,v,R,V,a){var E=D-l,i=S-h,n=V-v,d=a-R,u=d*E-n*i;if(!(u*u<y))return u=(n*(h-R)-d*(l-v))/u,[l+u*E,h+u*i]}function H(l,h,D,S,v,R,V){var a=l-D,E=h-S,i=(V?R:-R)/j(a*a+E*E),n=i*E,d=-i*a,u=l+n,s=h+d,f=D+n,c=S+d,W=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,A=m*m+g*g,T=v-R,P=u*c-f*s,I=(g<0?-1:1)*j(on(0,T*T*A-P*P)),M=(P*g-m*I)/A,N=(-P*m-g*I)/A,w=(P*g+m*I)/A,p=(-P*m+g*I)/A,x=M-W,e=N-t,r=w-W,X=p-t;return x*x+e*e>r*r+X*X&&(M=w,N=p),{cx:M,cy:N,x01:-n,y01:-d,x11:M*(v/T-1),y11:N*(v/T-1)}}function hn(){var l=cn,h=yn,D=Q(0),S=null,v=gn,R=dn,V=mn,a=null,E=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=R.apply(this,arguments)-un,W=rn(c-f),t=c>f;if(a||(a=n=E()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(W>tn-y)a.moveTo(s*Y(f),s*O(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*Y(c),u*O(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,A=f,T=c,P=W,I=W,M=V.apply(this,arguments)/2,N=M>y&&(S?+S.apply(this,arguments):j(u*u+s*s)),w=_(rn(s-u)/2,+D.apply(this,arguments)),p=w,x=w,e,r;if(N>y){var X=sn(N/u*O(M)),z=sn(N/s*O(M));(P-=X*2)>y?(X*=t?1:-1,A+=X,T-=X):(P=0,A=T=(f+c)/2),(I-=z*2)>y?(z*=t?1:-1,m+=z,g-=z):(I=0,m=g=(f+c)/2)}var Z=s*Y(m),$=s*O(m),B=u*Y(T),C=u*O(T);if(w>y){var F=s*Y(g),G=s*O(g),J=u*Y(A),K=u*O(A),q;if(W<an)if(q=pn(Z,$,J,K,F,G,B,C)){var L=Z-q[0],U=$-q[1],k=F-q[0],b=G-q[1],nn=1/O(fn((L*k+U*b)/(j(L*L+U*U)*j(k*k+b*b)))/2),en=j(q[0]*q[0]+q[1]*q[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}I>y?x>y?(e=H(J,K,Z,$,s,x,t),r=H(F,G,B,C,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(Z,$),a.arc(0,0,s,m,g,!t)):a.moveTo(Z,$),!(u>y)||!(P>y)?a.lineTo(B,C):p>y?(e=H(B,C,F,G,u,-p,t),r=H(Z,$,J,K,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,A,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +R.apply(this,arguments))/2-an/2;return[Y(d)*n,O(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:Q(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:Q(+n),i):h},i.cornerRadius=function(n){return arguments.length?(D=typeof n=="function"?n:Q(+n),i):D},i.padRadius=function(n){return arguments.length?(S=n==null?null:typeof n=="function"?n:Q(+n),i):S},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:Q(+n),i):v},i.endAngle=function(n){return arguments.length?(R=typeof n=="function"?n:Q(+n),i):R},i.padAngle=function(n){return arguments.length?(V=typeof n=="function"?n:Q(+n),i):V},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};