@paperclipai/server 0.2.7 → 0.3.0-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/adapters/cursor-models.d.ts +13 -0
- package/dist/adapters/cursor-models.d.ts.map +1 -0
- package/dist/adapters/cursor-models.js +148 -0
- package/dist/adapters/cursor-models.js.map +1 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +55 -9
- package/dist/adapters/registry.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +5 -1
- package/dist/app.js.map +1 -1
- package/dist/auth/better-auth.d.ts +2 -1
- package/dist/auth/better-auth.d.ts.map +1 -1
- package/dist/auth/better-auth.js +29 -1
- package/dist/auth/better-auth.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -2
- package/dist/config.js.map +1 -1
- package/dist/home-paths.d.ts +1 -0
- package/dist/home-paths.d.ts.map +1 -1
- package/dist/home-paths.js +3 -0
- package/dist/home-paths.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +468 -370
- package/dist/index.js.map +1 -1
- package/dist/middleware/error-handler.d.ts +14 -0
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +19 -4
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +52 -3
- package/dist/middleware/logger.js.map +1 -1
- package/dist/realtime/live-events-ws.d.ts +20 -2
- package/dist/realtime/live-events-ws.d.ts.map +1 -1
- package/dist/realtime/live-events-ws.js +3 -1
- package/dist/realtime/live-events-ws.js.map +1 -1
- package/dist/routes/access.d.ts +47 -0
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.js +1340 -193
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +106 -17
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/companies.d.ts.map +1 -1
- package/dist/routes/companies.js +6 -0
- package/dist/routes/companies.js.map +1 -1
- package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
- package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
- package/dist/routes/issues-checkout-wakeup.js +12 -0
- package/dist/routes/issues-checkout-wakeup.js.map +1 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +122 -15
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/sidebar-badges.d.ts.map +1 -1
- package/dist/routes/sidebar-badges.js +12 -11
- package/dist/routes/sidebar-badges.js.map +1 -1
- package/dist/services/agents.d.ts +13 -1
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +65 -5
- package/dist/services/agents.js.map +1 -1
- package/dist/services/approvals.d.ts.map +1 -1
- package/dist/services/approvals.js +14 -1
- package/dist/services/approvals.js.map +1 -1
- package/dist/services/company-portability.d.ts.map +1 -1
- package/dist/services/company-portability.js +16 -4
- package/dist/services/company-portability.js.map +1 -1
- package/dist/services/heartbeat.d.ts +24 -0
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +152 -9
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/hire-hook.d.ts +14 -0
- package/dist/services/hire-hook.d.ts.map +1 -0
- package/dist/services/hire-hook.js +85 -0
- package/dist/services/hire-hook.js.map +1 -0
- package/dist/services/index.d.ts +2 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/issues.d.ts +37 -0
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +199 -2
- package/dist/services/issues.js.map +1 -1
- package/dist/services/projects.d.ts +8 -0
- package/dist/services/projects.d.ts.map +1 -1
- package/dist/services/projects.js +45 -0
- package/dist/services/projects.js.map +1 -1
- package/dist/services/run-log-store.d.ts.map +1 -1
- package/dist/services/run-log-store.js +4 -7
- package/dist/services/run-log-store.js.map +1 -1
- package/dist/services/secrets.d.ts +6 -2
- package/dist/services/secrets.d.ts.map +1 -1
- package/dist/services/secrets.js +9 -5
- package/dist/services/secrets.js.map +1 -1
- package/dist/services/sidebar-badges.d.ts +1 -1
- package/dist/services/sidebar-badges.d.ts.map +1 -1
- package/dist/services/sidebar-badges.js +2 -2
- package/dist/services/sidebar-badges.js.map +1 -1
- package/dist/startup-banner.d.ts +4 -0
- package/dist/startup-banner.d.ts.map +1 -1
- package/dist/startup-banner.js +5 -0
- package/dist/startup-banner.js.map +1 -1
- package/package.json +15 -8
- package/skills/paperclip/SKILL.md +77 -10
- package/skills/paperclip/references/api-reference.md +24 -3
- package/skills/release/SKILL.md +261 -0
- package/skills/release-changelog/SKILL.md +178 -0
- package/ui-dist/assets/_basePickBy-uTypp8IS.js +1 -0
- package/ui-dist/assets/_baseUniq-Br5ginSL.js +1 -0
- package/ui-dist/assets/arc-CL_yTLb7.js +1 -0
- package/ui-dist/assets/architectureDiagram-VXUJARFQ-QDWenfc8.js +36 -0
- package/ui-dist/assets/blockDiagram-VD42YOAC-Cx5v00JC.js +122 -0
- package/ui-dist/assets/c4Diagram-YG6GDRKO-w1jXPcld.js +10 -0
- package/ui-dist/assets/channel-Cgg5Zy18.js +1 -0
- package/ui-dist/assets/chunk-4BX2VUAB-IP20JmJc.js +1 -0
- package/ui-dist/assets/chunk-55IACEB6-DnoDQzkr.js +1 -0
- package/ui-dist/assets/chunk-B4BG7PRW-B0oMPqWG.js +165 -0
- package/ui-dist/assets/chunk-DI55MBZ5-XP2Bv90U.js +220 -0
- package/ui-dist/assets/chunk-FMBD7UC4-BTXZhgrQ.js +15 -0
- package/ui-dist/assets/chunk-QN33PNHL-CV1_kZb0.js +1 -0
- package/ui-dist/assets/chunk-QZHKN3VN-DRQRsvpN.js +1 -0
- package/ui-dist/assets/chunk-TZMSLE5B-CyRhnMtV.js +1 -0
- package/ui-dist/assets/classDiagram-2ON5EDUG-C7fyGn2Z.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-C7fyGn2Z.js +1 -0
- package/ui-dist/assets/clone-C-dKMXxT.js +1 -0
- package/ui-dist/assets/cose-bilkent-S5V4N54A-C3zcDRja.js +1 -0
- package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
- package/ui-dist/assets/dagre-6UL2VRFP-B2DRzkCD.js +4 -0
- package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/ui-dist/assets/diagram-PSM6KHXK-CxoAcsrX.js +24 -0
- package/ui-dist/assets/diagram-QEK2KX5R-DE0jOoKl.js +43 -0
- package/ui-dist/assets/diagram-S2PKOQOG-nZkpfo7y.js +24 -0
- package/ui-dist/assets/erDiagram-Q2GNP2WA-Bl8ZbdFt.js +60 -0
- package/ui-dist/assets/flowDiagram-NV44I4VS-Bets3UXj.js +162 -0
- package/ui-dist/assets/ganttDiagram-JELNMOA3-CzdlM4Q4.js +267 -0
- package/ui-dist/assets/gitGraphDiagram-V2S2FVAM-0znuWjdT.js +65 -0
- package/ui-dist/assets/graph-CqfQ17fA.js +1 -0
- package/ui-dist/assets/{index-pu8fzL7q.js → index-7nNiKIK4.js} +2 -2
- package/ui-dist/assets/{index-CF8nX1vG.js → index-9_NCEtxm.js} +1 -1
- package/ui-dist/assets/{index-kYgLZCCi.js → index-B98qVBYv.js} +1 -1
- package/ui-dist/assets/{index-CdX_ZDP5.js → index-BGTZFghP.js} +1 -1
- package/ui-dist/assets/{index-tZqt0pgN.js → index-BLzuntY1.js} +5 -5
- package/ui-dist/assets/index-BZyxDGuR.js +1 -0
- package/ui-dist/assets/{index-NaKAsGKV.js → index-B_BkZUzM.js} +1 -1
- package/ui-dist/assets/{index-Dg1rynkq.js → index-Bgr40E5T.js} +1 -1
- package/ui-dist/assets/{index-B-OLFaqv.js → index-BrUI189T.js} +2 -2
- package/ui-dist/assets/{index-C9NgpAmN.js → index-BwywxTyu.js} +1 -1
- package/ui-dist/assets/{index-CgAKYlm4.js → index-C0rbEf43.js} +1 -1
- package/ui-dist/assets/{index-D-j8BRho.js → index-CEG1A6xN.js} +1 -1
- package/ui-dist/assets/{index-DYE3wRax.js → index-CZlgUP5H.js} +1 -1
- package/ui-dist/assets/{index-C3Iv_Fqi.js → index-CnZTY1ys.js} +1 -1
- package/ui-dist/assets/index-DN1_92Qm.js +900 -0
- package/ui-dist/assets/{index-COdba80T.js → index-DYxzi5jO.js} +1 -1
- package/ui-dist/assets/{index-BIEaSsd6.js → index-DZTlxw-9.js} +1 -1
- package/ui-dist/assets/{index-CKNdC7J5.js → index-DZYyOzky.js} +1 -1
- package/ui-dist/assets/{index-COhpE0rU.js → index-Dsg_WOwh.js} +1 -1
- package/ui-dist/assets/{index-Btnrtcrc.js → index-DskiIzZI.js} +1 -1
- package/ui-dist/assets/{index-jVC6cnfD.js → index-Lr8m8V8u.js} +1 -1
- package/ui-dist/assets/{index-BTMR1V3x.js → index-O7wFYmP6.js} +1 -1
- package/ui-dist/assets/index-nfAtmpEH.css +1 -0
- package/ui-dist/assets/{index-DVW9_Opq.js → index-rYTF_5JN.js} +1 -1
- package/ui-dist/assets/infoDiagram-HS3SLOUP-CoLHBo93.js +2 -0
- package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
- package/ui-dist/assets/journeyDiagram-XKPGCS4Q-B-juOJt7.js +139 -0
- package/ui-dist/assets/kanban-definition-3W4ZIXB7-CRhCTAGl.js +89 -0
- package/ui-dist/assets/katex-O9d3_IXG.js +261 -0
- package/ui-dist/assets/layout-0_5Wah8d.js +1 -0
- package/ui-dist/assets/linear-rXBW0wlX.js +1 -0
- package/ui-dist/assets/mermaid.core-CZKXdC_e.js +256 -0
- package/ui-dist/assets/mindmap-definition-VGOIOE7T-CcsJM-Ch.js +68 -0
- package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/ui-dist/assets/pieDiagram-ADFJNKIX-Ci6R42sU.js +30 -0
- package/ui-dist/assets/quadrantDiagram-AYHSOK5B-B6xrkCsR.js +7 -0
- package/ui-dist/assets/requirementDiagram-UZGBJVZJ-4V-WQI-N.js +64 -0
- package/ui-dist/assets/sankeyDiagram-TZEHDZUN-D4NrQ_iq.js +10 -0
- package/ui-dist/assets/sequenceDiagram-WL72ISMW-C1V8T_WD.js +145 -0
- package/ui-dist/assets/stateDiagram-FKZM4ZOC-B6msJabL.js +1 -0
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-BbXAbFox.js +1 -0
- package/ui-dist/assets/timeline-definition-IT6M3QCI-D82F3vGD.js +61 -0
- package/ui-dist/assets/treemap-GDKQZRPO-CN1NndeP.js +162 -0
- package/ui-dist/assets/xychartDiagram-PRI3JC2R-BrHVvbst.js +7 -0
- package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
- package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
- package/ui-dist/index.html +2 -2
- package/ui-dist/site.webmanifest +15 -4
- package/ui-dist/sw.js +42 -0
- package/ui-dist/assets/index-B6IJ7rtH.css +0 -1
- package/ui-dist/assets/index-CNeWfnNw.js +0 -856
- package/ui-dist/assets/index-D7c99xP8.js +0 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release
|
|
3
|
+
description: >
|
|
4
|
+
Coordinate a full Paperclip release across engineering verification, npm,
|
|
5
|
+
GitHub, website publishing, and announcement follow-up. Use when leadership
|
|
6
|
+
asks to ship a release, not merely to discuss version bumps.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Release Coordination Skill
|
|
10
|
+
|
|
11
|
+
Run the full Paperclip release as a maintainer workflow, not just an npm publish.
|
|
12
|
+
|
|
13
|
+
This skill coordinates:
|
|
14
|
+
|
|
15
|
+
- stable changelog drafting via `release-changelog`
|
|
16
|
+
- release-train setup via `scripts/release-start.sh`
|
|
17
|
+
- prerelease canary publishing via `scripts/release.sh --canary`
|
|
18
|
+
- Docker smoke testing via `scripts/docker-onboard-smoke.sh`
|
|
19
|
+
- stable publishing via `scripts/release.sh`
|
|
20
|
+
- pushing the stable branch commit and tag
|
|
21
|
+
- GitHub Release creation via `scripts/create-github-release.sh`
|
|
22
|
+
- website / announcement follow-up tasks
|
|
23
|
+
|
|
24
|
+
## Trigger
|
|
25
|
+
|
|
26
|
+
Use this skill when leadership asks for:
|
|
27
|
+
|
|
28
|
+
- "do a release"
|
|
29
|
+
- "ship the next patch/minor/major"
|
|
30
|
+
- "release vX.Y.Z"
|
|
31
|
+
|
|
32
|
+
## Preconditions
|
|
33
|
+
|
|
34
|
+
Before proceeding, verify all of the following:
|
|
35
|
+
|
|
36
|
+
1. `skills/release-changelog/SKILL.md` exists and is usable.
|
|
37
|
+
2. The repo working tree is clean, including untracked files.
|
|
38
|
+
3. There are commits since the last stable tag.
|
|
39
|
+
4. The release SHA has passed the verification gate or is about to.
|
|
40
|
+
5. If package manifests changed, the CI-owned `pnpm-lock.yaml` refresh is already merged on `master` before the release branch is cut.
|
|
41
|
+
6. npm publish rights are available locally, or the GitHub release workflow is being used with trusted publishing.
|
|
42
|
+
7. If running through Paperclip, you have issue context for status updates and follow-up task creation.
|
|
43
|
+
|
|
44
|
+
If any precondition fails, stop and report the blocker.
|
|
45
|
+
|
|
46
|
+
## Inputs
|
|
47
|
+
|
|
48
|
+
Collect these inputs up front:
|
|
49
|
+
|
|
50
|
+
- requested bump: `patch`, `minor`, or `major`
|
|
51
|
+
- whether this run is a dry run or live release
|
|
52
|
+
- whether the release is being run locally or from GitHub Actions
|
|
53
|
+
- release issue / company context for website and announcement follow-up
|
|
54
|
+
|
|
55
|
+
## Step 0 — Release Model
|
|
56
|
+
|
|
57
|
+
Paperclip now uses this release model:
|
|
58
|
+
|
|
59
|
+
1. Start or resume `release/X.Y.Z`
|
|
60
|
+
2. Draft the **stable** changelog as `releases/vX.Y.Z.md`
|
|
61
|
+
3. Publish one or more **prerelease canaries** such as `X.Y.Z-canary.0`
|
|
62
|
+
4. Smoke test the canary via Docker
|
|
63
|
+
5. Publish the stable version `X.Y.Z`
|
|
64
|
+
6. Push the stable branch commit and tag
|
|
65
|
+
7. Create the GitHub Release
|
|
66
|
+
8. Merge `release/X.Y.Z` back to `master` without squash or rebase
|
|
67
|
+
9. Complete website and announcement surfaces
|
|
68
|
+
|
|
69
|
+
Critical consequence:
|
|
70
|
+
|
|
71
|
+
- Canaries do **not** use promote-by-dist-tag anymore.
|
|
72
|
+
- The changelog remains stable-only. Do not create `releases/vX.Y.Z-canary.N.md`.
|
|
73
|
+
|
|
74
|
+
## Step 1 — Decide the Stable Version
|
|
75
|
+
|
|
76
|
+
Start the release train first:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
./scripts/release-start.sh {patch|minor|major}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Then run release preflight:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
./scripts/release-preflight.sh canary {patch|minor|major}
|
|
86
|
+
# or
|
|
87
|
+
./scripts/release-preflight.sh stable {patch|minor|major}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Then use the last stable tag as the base:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
LAST_TAG=$(git tag --list 'v*' --sort=-version:refname | head -1)
|
|
94
|
+
git log "${LAST_TAG}..HEAD" --oneline --no-merges
|
|
95
|
+
git diff --name-only "${LAST_TAG}..HEAD" -- packages/db/src/migrations/
|
|
96
|
+
git diff "${LAST_TAG}..HEAD" -- packages/db/src/schema/
|
|
97
|
+
git log "${LAST_TAG}..HEAD" --format="%s" | rg -n 'BREAKING CHANGE|BREAKING:|^[a-z]+!:' || true
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Bump policy:
|
|
101
|
+
|
|
102
|
+
- destructive migrations, removed APIs, breaking config changes -> `major`
|
|
103
|
+
- additive migrations or clearly user-visible features -> at least `minor`
|
|
104
|
+
- fixes only -> `patch`
|
|
105
|
+
|
|
106
|
+
If the requested bump is too low, escalate it and explain why.
|
|
107
|
+
|
|
108
|
+
## Step 2 — Draft the Stable Changelog
|
|
109
|
+
|
|
110
|
+
Invoke `release-changelog` and generate:
|
|
111
|
+
|
|
112
|
+
- `releases/vX.Y.Z.md`
|
|
113
|
+
|
|
114
|
+
Rules:
|
|
115
|
+
|
|
116
|
+
- review the draft with a human before publish
|
|
117
|
+
- preserve manual edits if the file already exists
|
|
118
|
+
- keep the heading and filename stable-only, for example `v1.2.3`
|
|
119
|
+
- do not create a separate canary changelog file
|
|
120
|
+
|
|
121
|
+
## Step 3 — Verify the Release SHA
|
|
122
|
+
|
|
123
|
+
Run the standard gate:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
pnpm -r typecheck
|
|
127
|
+
pnpm test:run
|
|
128
|
+
pnpm build
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
If the release will be run through GitHub Actions, the workflow can rerun this gate. Still report whether the local tree currently passes.
|
|
132
|
+
|
|
133
|
+
The GitHub Actions release workflow installs with `pnpm install --frozen-lockfile`. Treat that as a release invariant, not a nuisance: if manifests changed and the lockfile refresh PR has not landed yet, stop and wait for `master` to contain the committed lockfile before shipping.
|
|
134
|
+
|
|
135
|
+
## Step 4 — Publish a Canary
|
|
136
|
+
|
|
137
|
+
Run from the `release/X.Y.Z` branch:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
./scripts/release.sh {patch|minor|major} --canary --dry-run
|
|
141
|
+
./scripts/release.sh {patch|minor|major} --canary
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
What this means:
|
|
145
|
+
|
|
146
|
+
- npm receives `X.Y.Z-canary.N` under dist-tag `canary`
|
|
147
|
+
- `latest` remains unchanged
|
|
148
|
+
- no git tag is created
|
|
149
|
+
- the script cleans the working tree afterward
|
|
150
|
+
|
|
151
|
+
Guard:
|
|
152
|
+
|
|
153
|
+
- if the current stable is `0.2.7`, the next patch canary is `0.2.8-canary.0`
|
|
154
|
+
- the tooling must never publish `0.2.7-canary.N` after `0.2.7` is already stable
|
|
155
|
+
|
|
156
|
+
After publish, verify:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
npm view paperclipai@canary version
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The user install path is:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
npx paperclipai@canary onboard
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Step 5 — Smoke Test the Canary
|
|
169
|
+
|
|
170
|
+
Run:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
PAPERCLIPAI_VERSION=canary ./scripts/docker-onboard-smoke.sh
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Confirm:
|
|
177
|
+
|
|
178
|
+
1. install succeeds
|
|
179
|
+
2. onboarding completes
|
|
180
|
+
3. server boots
|
|
181
|
+
4. UI loads
|
|
182
|
+
5. basic company/dashboard flow works
|
|
183
|
+
|
|
184
|
+
If smoke testing fails:
|
|
185
|
+
|
|
186
|
+
- stop the stable release
|
|
187
|
+
- fix the issue
|
|
188
|
+
- publish another canary
|
|
189
|
+
- repeat the smoke test
|
|
190
|
+
|
|
191
|
+
Each retry should create a higher canary ordinal, while the stable target version can stay the same.
|
|
192
|
+
|
|
193
|
+
## Step 6 — Publish Stable
|
|
194
|
+
|
|
195
|
+
Once the SHA is vetted, run:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
./scripts/release.sh {patch|minor|major} --dry-run
|
|
199
|
+
./scripts/release.sh {patch|minor|major}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Stable publish does this:
|
|
203
|
+
|
|
204
|
+
- publishes `X.Y.Z` to npm under `latest`
|
|
205
|
+
- creates the local release commit
|
|
206
|
+
- creates the local git tag `vX.Y.Z`
|
|
207
|
+
|
|
208
|
+
Stable publish does **not** push the release for you.
|
|
209
|
+
|
|
210
|
+
## Step 7 — Push and Create GitHub Release
|
|
211
|
+
|
|
212
|
+
After stable publish succeeds:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
git push public-gh HEAD --follow-tags
|
|
216
|
+
./scripts/create-github-release.sh X.Y.Z
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Use the stable changelog file as the GitHub Release notes source.
|
|
220
|
+
|
|
221
|
+
Then open the PR from `release/X.Y.Z` back to `master` and merge without squash or rebase.
|
|
222
|
+
|
|
223
|
+
## Step 8 — Finish the Other Surfaces
|
|
224
|
+
|
|
225
|
+
Create or verify follow-up work for:
|
|
226
|
+
|
|
227
|
+
- website changelog publishing
|
|
228
|
+
- launch post / social announcement
|
|
229
|
+
- any release summary in Paperclip issue context
|
|
230
|
+
|
|
231
|
+
These should reference the stable release, not the canary.
|
|
232
|
+
|
|
233
|
+
## Failure Handling
|
|
234
|
+
|
|
235
|
+
If the canary is bad:
|
|
236
|
+
|
|
237
|
+
- publish another canary, do not ship stable
|
|
238
|
+
|
|
239
|
+
If stable npm publish succeeds but push or GitHub release creation fails:
|
|
240
|
+
|
|
241
|
+
- fix the git/GitHub issue immediately from the same checkout
|
|
242
|
+
- do not republish the same version
|
|
243
|
+
|
|
244
|
+
If `latest` is bad after stable publish:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
./scripts/rollback-latest.sh <last-good-version>
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Then fix forward with a new patch release.
|
|
251
|
+
|
|
252
|
+
## Output
|
|
253
|
+
|
|
254
|
+
When the skill completes, provide:
|
|
255
|
+
|
|
256
|
+
- stable version and, if relevant, the final canary version tested
|
|
257
|
+
- verification status
|
|
258
|
+
- npm status
|
|
259
|
+
- git tag / GitHub Release status
|
|
260
|
+
- website / announcement follow-up status
|
|
261
|
+
- rollback recommendation if anything is still partially complete
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: release-changelog
|
|
3
|
+
description: >
|
|
4
|
+
Generate the stable Paperclip release changelog at releases/v{version}.md by
|
|
5
|
+
reading commits, changesets, and merged PR context since the last stable tag.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Release Changelog Skill
|
|
9
|
+
|
|
10
|
+
Generate the user-facing changelog for the **stable** Paperclip release.
|
|
11
|
+
|
|
12
|
+
Output:
|
|
13
|
+
|
|
14
|
+
- `releases/v{version}.md`
|
|
15
|
+
|
|
16
|
+
Important rule:
|
|
17
|
+
|
|
18
|
+
- even if there are canary releases such as `1.2.3-canary.0`, the changelog file stays `releases/v1.2.3.md`
|
|
19
|
+
|
|
20
|
+
## Step 0 — Idempotency Check
|
|
21
|
+
|
|
22
|
+
Before generating anything, check whether the file already exists:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
ls releases/v{version}.md 2>/dev/null
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
If it exists:
|
|
29
|
+
|
|
30
|
+
1. read it first
|
|
31
|
+
2. present it to the reviewer
|
|
32
|
+
3. ask whether to keep it, regenerate it, or update specific sections
|
|
33
|
+
4. never overwrite it silently
|
|
34
|
+
|
|
35
|
+
## Step 1 — Determine the Stable Range
|
|
36
|
+
|
|
37
|
+
Find the last stable tag:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git tag --list 'v*' --sort=-version:refname | head -1
|
|
41
|
+
git log v{last}..HEAD --oneline --no-merges
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The planned stable version comes from one of:
|
|
45
|
+
|
|
46
|
+
- an explicit maintainer request
|
|
47
|
+
- the chosen bump type applied to the last stable tag
|
|
48
|
+
- the release plan already agreed in `doc/RELEASING.md`
|
|
49
|
+
|
|
50
|
+
Do not derive the changelog version from a canary tag or prerelease suffix.
|
|
51
|
+
|
|
52
|
+
## Step 2 — Gather the Raw Inputs
|
|
53
|
+
|
|
54
|
+
Collect release data from:
|
|
55
|
+
|
|
56
|
+
1. git commits since the last stable tag
|
|
57
|
+
2. `.changeset/*.md` files
|
|
58
|
+
3. merged PRs via `gh` when available
|
|
59
|
+
|
|
60
|
+
Useful commands:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git log v{last}..HEAD --oneline --no-merges
|
|
64
|
+
git log v{last}..HEAD --format="%H %s" --no-merges
|
|
65
|
+
ls .changeset/*.md | grep -v README.md
|
|
66
|
+
gh pr list --state merged --search "merged:>={last-tag-date}" --json number,title,body,labels
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Step 3 — Detect Breaking Changes
|
|
70
|
+
|
|
71
|
+
Look for:
|
|
72
|
+
|
|
73
|
+
- destructive migrations
|
|
74
|
+
- removed or changed API fields/endpoints
|
|
75
|
+
- renamed or removed config keys
|
|
76
|
+
- `major` changesets
|
|
77
|
+
- `BREAKING:` or `BREAKING CHANGE:` commit signals
|
|
78
|
+
|
|
79
|
+
Key commands:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git diff --name-only v{last}..HEAD -- packages/db/src/migrations/
|
|
83
|
+
git diff v{last}..HEAD -- packages/db/src/schema/
|
|
84
|
+
git diff v{last}..HEAD -- server/src/routes/ server/src/api/
|
|
85
|
+
git log v{last}..HEAD --format="%s" | rg -n 'BREAKING CHANGE|BREAKING:|^[a-z]+!:' || true
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
If the requested bump is lower than the minimum required bump, flag that before the release proceeds.
|
|
89
|
+
|
|
90
|
+
## Step 4 — Categorize for Users
|
|
91
|
+
|
|
92
|
+
Use these stable changelog sections:
|
|
93
|
+
|
|
94
|
+
- `Breaking Changes`
|
|
95
|
+
- `Highlights`
|
|
96
|
+
- `Improvements`
|
|
97
|
+
- `Fixes`
|
|
98
|
+
- `Upgrade Guide` when needed
|
|
99
|
+
|
|
100
|
+
Exclude purely internal refactors, CI changes, and docs-only work unless they materially affect users.
|
|
101
|
+
|
|
102
|
+
Guidelines:
|
|
103
|
+
|
|
104
|
+
- group related commits into one user-facing entry
|
|
105
|
+
- write from the user perspective
|
|
106
|
+
- keep highlights short and concrete
|
|
107
|
+
- spell out upgrade actions for breaking changes
|
|
108
|
+
|
|
109
|
+
### Inline PR and contributor attribution
|
|
110
|
+
|
|
111
|
+
When a bullet item clearly maps to a merged pull request, add inline attribution at the
|
|
112
|
+
end of the entry in this format:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
- **Feature name** — Description. ([#123](https://github.com/paperclipai/paperclip/pull/123), @contributor1, @contributor2)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Rules:
|
|
119
|
+
|
|
120
|
+
- Only add a PR link when you can confidently trace the bullet to a specific merged PR.
|
|
121
|
+
Use merge commit messages (`Merge pull request #N from user/branch`) to map PRs.
|
|
122
|
+
- List the contributor(s) who authored the PR. Use GitHub usernames, not real names or emails.
|
|
123
|
+
- If multiple PRs contributed to a single bullet, list them all: `([#10](url), [#12](url), @user1, @user2)`.
|
|
124
|
+
- If you cannot determine the PR number or contributor with confidence, omit the attribution
|
|
125
|
+
parenthetical — do not guess.
|
|
126
|
+
- Core maintainer commits that don't have an external PR can omit the parenthetical.
|
|
127
|
+
|
|
128
|
+
## Step 5 — Write the File
|
|
129
|
+
|
|
130
|
+
Template:
|
|
131
|
+
|
|
132
|
+
```markdown
|
|
133
|
+
# v{version}
|
|
134
|
+
|
|
135
|
+
> Released: {YYYY-MM-DD}
|
|
136
|
+
|
|
137
|
+
## Breaking Changes
|
|
138
|
+
|
|
139
|
+
## Highlights
|
|
140
|
+
|
|
141
|
+
## Improvements
|
|
142
|
+
|
|
143
|
+
## Fixes
|
|
144
|
+
|
|
145
|
+
## Upgrade Guide
|
|
146
|
+
|
|
147
|
+
## Contributors
|
|
148
|
+
|
|
149
|
+
Thank you to everyone who contributed to this release!
|
|
150
|
+
|
|
151
|
+
@username1, @username2, @username3
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Omit empty sections except `Highlights`, `Improvements`, and `Fixes`, which should usually exist.
|
|
155
|
+
|
|
156
|
+
The `Contributors` section should always be included. List every person who authored
|
|
157
|
+
commits in the release range, @-mentioning them by their **GitHub username** (not their
|
|
158
|
+
real name or email). To find GitHub usernames:
|
|
159
|
+
|
|
160
|
+
1. Extract usernames from merge commit messages: `git log v{last}..HEAD --oneline --merges` — the branch prefix (e.g. `from username/branch`) gives the GitHub username.
|
|
161
|
+
2. For noreply emails like `user@users.noreply.github.com`, the username is the part before `@`.
|
|
162
|
+
3. For contributors whose username is ambiguous, check `gh api users/{guess}` or the PR page.
|
|
163
|
+
|
|
164
|
+
**Never expose contributor email addresses.** Use `@username` only.
|
|
165
|
+
|
|
166
|
+
Exclude bot accounts (e.g. `lockfile-bot`, `dependabot`) from the list. List contributors
|
|
167
|
+
in alphabetical order by GitHub username (case-insensitive).
|
|
168
|
+
|
|
169
|
+
## Step 6 — Review Before Release
|
|
170
|
+
|
|
171
|
+
Before handing it off:
|
|
172
|
+
|
|
173
|
+
1. confirm the heading is the stable version only
|
|
174
|
+
2. confirm there is no `-canary` language in the title or filename
|
|
175
|
+
3. confirm any breaking changes have an upgrade path
|
|
176
|
+
4. present the draft for human sign-off
|
|
177
|
+
|
|
178
|
+
This skill never publishes anything. It only prepares the stable changelog artifact.
|
|
@@ -0,0 +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-Br5ginSL.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-CZKXdC_e.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};
|
|
@@ -0,0 +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-CZKXdC_e.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ℜ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};
|
|
@@ -0,0 +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-CZKXdC_e.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};
|