@pugi/cli 0.1.0-alpha.9 → 0.1.0-beta.2
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/README.md +33 -0
- package/assets/pugi-mascot.ansi +41 -0
- package/dist/commands/deploy.js +439 -0
- package/dist/core/agents/loader.js +104 -0
- package/dist/core/agents/registry.js +1 -1
- package/dist/core/consensus/anvil-fanout.js +276 -0
- package/dist/core/consensus/diff-capture.js +382 -0
- package/dist/core/consensus/rubric.js +233 -0
- package/dist/core/context/index.js +21 -0
- package/dist/core/context/pugiignore.js +316 -0
- package/dist/core/context/repo-skeleton.js +533 -0
- package/dist/core/context/watcher.js +342 -0
- package/dist/core/context/working-set.js +165 -0
- package/dist/core/edits/dispatch.js +185 -0
- package/dist/core/edits/index.js +15 -0
- package/dist/core/edits/layer-a-apply.js +217 -0
- package/dist/core/edits/layer-b-apply.js +211 -0
- package/dist/core/edits/layer-c-apply.js +160 -0
- package/dist/core/edits/layer-d-ast.js +29 -0
- package/dist/core/edits/marker-parser.js +401 -0
- package/dist/core/edits/security-gate.js +223 -0
- package/dist/core/edits/worktree.js +229 -0
- package/dist/core/engine/native-pugi.js +6 -1
- package/dist/core/engine/prompts.js +4 -1
- package/dist/core/engine/tool-bridge.js +33 -1
- package/dist/core/lsp/client.js +631 -0
- package/dist/core/repl/ask.js +512 -0
- package/dist/core/repl/cancellation.js +98 -0
- package/dist/core/repl/dispatch-fsm.js +220 -0
- package/dist/core/repl/privacy-banner.js +71 -0
- package/dist/core/repl/session.js +1896 -13
- package/dist/core/repl/slash-commands.js +59 -32
- package/dist/core/repl/store/index.js +12 -0
- package/dist/core/repl/store/jsonl-log.js +321 -0
- package/dist/core/repl/store/lockfile.js +155 -0
- package/dist/core/repl/store/session-store.js +792 -0
- package/dist/core/repl/store/types.js +44 -0
- package/dist/core/repl/store/uuid-v7.js +68 -0
- package/dist/core/repl/workspace-context.js +72 -1
- package/dist/core/skills/loader.js +454 -0
- package/dist/core/skills/sources.js +480 -0
- package/dist/core/skills/trust.js +172 -0
- package/dist/runtime/cli.js +767 -10
- package/dist/runtime/commands/agents.js +385 -0
- package/dist/runtime/commands/config.js +338 -8
- package/dist/runtime/commands/lsp.js +184 -0
- package/dist/runtime/commands/patch.js +111 -0
- package/dist/runtime/commands/review-consensus.js +399 -0
- package/dist/runtime/commands/skills.js +401 -0
- package/dist/runtime/commands/worktree.js +133 -0
- package/dist/tools/apply-patch.js +314 -0
- package/dist/tools/file-tools.js +90 -0
- package/dist/tools/lsp-tools.js +189 -0
- package/dist/tools/registry.js +18 -0
- package/dist/tools/web-fetch.js +1 -1
- package/dist/tui/agent-tree-pane.js +9 -0
- package/dist/tui/ask-cli.js +52 -0
- package/dist/tui/ask-modal.js +211 -0
- package/dist/tui/conversation-pane.js +48 -3
- package/dist/tui/input-box.js +48 -5
- package/dist/tui/markdown-render.js +266 -0
- package/dist/tui/repl-render.js +185 -0
- package/dist/tui/repl-splash-mascot.js +130 -0
- package/dist/tui/repl-splash.js +7 -1
- package/dist/tui/repl.js +82 -11
- package/dist/tui/status-bar.js +63 -3
- package/dist/tui/tool-stream-pane.js +91 -0
- package/package.json +11 -5
package/README.md
CHANGED
|
@@ -94,12 +94,45 @@ pugi review --triple --remote
|
|
|
94
94
|
pugi handoff --web # hand the session off to the cabinet
|
|
95
95
|
pugi sessions # list sessions from .pugi/index.json
|
|
96
96
|
pugi sessions --rebuild # rebuild the index from events.jsonl
|
|
97
|
+
pugi deploy --target vercel my-vercel-project --project proj_42
|
|
98
|
+
# trigger a Vercel deploy from the bound Git source
|
|
99
|
+
pugi deploy --status dep_42 # vendor-agnostic status snapshot
|
|
100
|
+
pugi deploy --logs dep_42 --tail
|
|
101
|
+
# build-log tail; --tail polls until terminal
|
|
97
102
|
pugi doctor --json # environment diagnostic
|
|
98
103
|
pugi version # CLI version
|
|
99
104
|
```
|
|
100
105
|
|
|
101
106
|
Run `pugi --help` for the full list.
|
|
102
107
|
|
|
108
|
+
### Deploy
|
|
109
|
+
|
|
110
|
+
`pugi deploy` triggers a deployment for the project bound to your Vercel or
|
|
111
|
+
Render integration. Source is resolved from the existing `ProjectGitBinding`
|
|
112
|
+
row on the admin-api side — the CLI never reads local files.
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# Vercel — production (default)
|
|
116
|
+
pugi deploy --target vercel my-vercel-project --project proj_42
|
|
117
|
+
|
|
118
|
+
# Vercel — preview from a feature branch
|
|
119
|
+
pugi deploy --target vercel my-vercel-project --project proj_42 \
|
|
120
|
+
--target-env preview --ref feat/landing-tweaks
|
|
121
|
+
|
|
122
|
+
# Render (Sprint 2 — endpoint returns 501 today)
|
|
123
|
+
pugi deploy --target render my-render-svc --project proj_42
|
|
124
|
+
|
|
125
|
+
# Query existing deploys
|
|
126
|
+
pugi deploy --status dep_42
|
|
127
|
+
pugi deploy --logs dep_42 --tail
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Exit codes:
|
|
131
|
+
|
|
132
|
+
- `0` success (queued, ready, building)
|
|
133
|
+
- `1` failed (status=error, refused, not authenticated)
|
|
134
|
+
- `2` transient (rate-limited, runtime down, retry-safe)
|
|
135
|
+
|
|
103
136
|
## Privacy
|
|
104
137
|
|
|
105
138
|
Pugi defaults to `local-only` — no upload happens without an explicit flag.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
[?25l[0m[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;0;0;3m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;0;0;3m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄[0m
|
|
2
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
3
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
4
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
5
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;0;0;3m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
6
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;0;0;3m▄[38;2;7;7;10m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;6;6;9m▄[38;2;1;1;3m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
7
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;22;24;28m▄[38;2;50;53;60m▄[38;2;80;84;95;48;2;0;0;3m▄[38;2;85;90;101;48;2;22;23;28m▄[38;2;83;88;99;48;2;48;51;59m▄[38;2;48;51;59;48;2;75;80;91m▄[38;2;32;34;40;48;2;79;85;97m▄[38;2;79;84;95;48;2;70;75;85m▄[38;2;82;87;99;48;2;51;54;63m▄[48;2;32;34;40m▄[38;2;81;87;99;48;2;13;14;18m▄[38;2;77;82;93;48;2;0;0;2m▄[38;2;59;63;72m▄[38;2;11;12;16m▄[38;2;0;0;2m▄[38;2;16;17;21m▄[38;2;66;70;81m▄[38;2;70;75;86m▄▄[38;2;71;76;87m▄▄▄[38;2;71;75;86m▄[38;2;60;64;73m▄[38;2;0;0;2m▄[38;2;0;45;74m▄[38;2;0;46;75m▄[38;2;0;0;2m▄[38;2;12;12;16m▄[38;2;57;61;70m▄[38;2;75;80;90m▄[38;2;80;86;98;48;2;12;14;17m▄[48;2;31;33;39m▄[38;2;81;87;98;48;2;49;52;60m▄[38;2;78;84;95;48;2;67;72;82m▄[38;2;32;34;40;48;2;80;85;97m▄[38;2;48;51;59;48;2;77;82;93m▄[38;2;83;88;100;48;2;49;53;61m▄[38;2;84;89;100;48;2;22;24;28m▄[38;2;79;84;94;48;2;1;1;3m▄[38;2;52;55;62;48;2;0;0;2m▄[38;2;23;24;28m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
8
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄[38;2;0;1;3m▄[38;2;20;22;27m▄[38;2;42;45;53m▄[38;2;66;71;81m▄[38;2;69;75;86;48;2;23;24;28m▄[38;2;63;68;80;48;2;52;55;62m▄[38;2;58;63;74;48;2;80;84;95m▄[38;2;54;59;70;48;2;86;92;103m▄[38;2;56;61;72;48;2;82;87;98m▄[38;2;86;91;102;48;2;83;88;99m▄[38;2;70;74;83;48;2;87;92;103m▄[38;2;1;1;3;48;2;39;41;47m▄[38;2;0;0;2;48;2;0;0;2m▄▄[48;2;17;19;23m▄[38;2;11;12;15;48;2;75;80;91m▄[38;2;70;75;85;48;2;82;88;99m▄[38;2;83;89;100m▄[38;2;32;34;40;48;2;83;89;101m▄[38;2;0;0;2;48;2;39;42;48m▄[38;2;33;36;42;48;2;0;0;2m▄[38;2;78;83;95;48;2;24;25;30m▄[38;2;79;84;96;48;2;75;80;92m▄[48;2;79;84;96m▄▄[48;2;79;85;97m▄[38;2;79;85;97;48;2;80;85;97m▄[38;2;80;85;97;48;2;80;86;98m▄[48;2;80;85;97m▄[48;2;80;86;98m▄[38;2;67;72;82;48;2;67;71;82m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;49;83;48;2;0;49;84m▄[38;2;0;58;97;48;2;0;57;96m▄[38;2;0;0;2;48;2;0;0;2m▄▄[48;2;39;41;48m▄[38;2;33;35;42;48;2;81;87;98m▄[38;2;81;87;98;48;2;81;86;98m▄[38;2;70;75;86m▄[38;2;12;12;16;48;2;75;80;91m▄[38;2;0;0;2;48;2;18;19;23m▄[48;2;0;0;2m▄▄[38;2;1;1;4;48;2;40;42;48m▄[38;2;70;74;83;48;2;86;91;102m▄[38;2;84;89;100;48;2;83;88;99m▄[38;2;56;61;71;48;2;79;84;95m▄[38;2;53;58;69;48;2;85;90;101m▄[38;2;57;62;73;48;2;81;85;95m▄[38;2;62;68;79;48;2;53;56;63m▄[38;2;69;74;85;48;2;23;25;29m▄[38;2;67;71;82;48;2;1;1;3m▄[38;2;44;47;54;48;2;0;0;2m▄[38;2;22;24;28m▄[38;2;1;1;3m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
9
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[38;2;14;15;19m▄[38;2;50;55;65;48;2;10;11;15m▄[38;2;53;58;69;48;2;48;53;63m▄[48;2;53;59;70m▄▄▄[38;2;53;59;69;48;2;53;58;69m▄[38;2;54;59;70;48;2;54;59;70m▄▄[38;2;62;67;78m▄[38;2;89;94;105;48;2;76;81;92m▄[38;2;45;47;54;48;2;88;93;104m▄[38;2;0;0;2;48;2;15;16;20m▄[48;2;0;0;2m▄▄▄▄▄[48;2;5;6;9m▄[38;2;3;3;6;48;2;23;25;29m▄[38;2;55;59;68;48;2;0;0;3m▄[38;2;79;84;96;48;2;45;48;55m▄[48;2;79;84;96m▄▄[48;2;79;84;97m▄[38;2;79;84;97;48;2;79;84;96m▄[38;2;79;85;97;48;2;79;85;97m▄[48;2;79;84;97m▄[48;2;79;85;97m▄[38;2;80;85;97;48;2;80;85;97m▄▄[38;2;80;86;98m▄[38;2;67;72;82;48;2;67;72;82m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;49;84;48;2;0;49;84m▄[38;2;0;57;96;48;2;0;57;96m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄[48;2;23;25;30m▄[48;2;6;6;9m▄[48;2;0;0;2m▄▄▄▄▄[48;2;17;18;22m▄[38;2;45;48;54;48;2;85;90;101m▄[38;2;85;90;102;48;2;73;78;88m▄[38;2;60;65;76;48;2;53;58;69m▄[38;2;52;58;68;48;2;52;57;68m▄[38;2;52;57;68;48;2;52;58;68m▄[38;2;53;57;68;48;2;53;58;69m▄[38;2;52;58;69;48;2;52;57;68m▄[38;2;53;58;69;48;2;52;58;69m▄[48;2;53;58;69m▄[38;2;53;59;70;48;2;50;55;66m▄[38;2;52;58;69;48;2;13;14;19m▄[38;2;18;20;25;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
10
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄[38;2;21;23;29m▄[38;2;53;58;69;48;2;17;19;24m▄[38;2;54;58;69;48;2;52;57;67m▄[38;2;54;59;70;48;2;53;58;69m▄▄▄▄[38;2;53;58;69m▄[38;2;53;59;69;48;2;53;59;69m▄[38;2;54;59;70;48;2;54;59;70m▄[38;2;70;75;86;48;2;55;60;71m▄[38;2;86;91;102;48;2;81;86;97m▄[38;2;17;18;22;48;2;72;76;86m▄[38;2;0;0;2;48;2;2;2;4m▄[48;2;0;0;2m▄▄▄▄▄[38;2;14;15;19m▄[38;2;70;75;86;48;2;8;8;12m▄[38;2;80;85;97;48;2;64;68;78m▄[38;2;79;85;97;48;2;79;84;96m▄▄▄[38;2;80;85;97m▄[48;2;80;85;97m▄▄▄▄▄[38;2;80;86;98m▄[38;2;81;86;98;48;2;80;86;97m▄[38;2;81;87;99;48;2;81;86;98m▄[38;2;68;73;83;48;2;67;72;82m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;28;46;48;2;1;50;84m▄[38;2;0;109;176;48;2;1;60;99m▄[38;2;0;6;13;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄[48;2;2;2;4m▄[38;2;19;20;24;48;2;72;76;87m▄[38;2;86;91;102;48;2;81;86;97m▄[38;2;69;74;85;48;2;53;58;69m▄[38;2;53;58;69m▄[48;2;53;58;68m▄[48;2;53;58;69m▄▄[38;2;54;59;70m▄[48;2;53;58;70m▄[48;2;54;59;70m▄[48;2;54;60;71m▄[48;2;21;23;28m▄[38;2;25;27;33;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄[0m
|
|
11
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄[38;2;28;31;38m▄[38;2;53;58;69;48;2;24;27;33m▄[48;2;52;58;69m▄[48;2;53;58;69m▄[38;2;54;59;70;48;2;54;59;70m▄[48;2;54;60;70m▄[38;2;55;60;71;48;2;55;60;71m▄[38;2;54;60;71m▄[38;2;54;59;70;48;2;54;59;70m▄▄[48;2;54;59;69m▄[38;2;79;84;95;48;2;59;64;75m▄[38;2;74;79;88;48;2;87;92;103m▄[38;2;2;2;5;48;2;46;49;56m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄[38;2;31;33;39m▄[38;2;79;84;96;48;2;22;23;28m▄[38;2;80;85;97;48;2;75;80;91m▄[38;2;81;86;98;48;2;80;85;97m▄[38;2;80;85;97m▄▄[38;2;79;85;97;48;2;79;85;97m▄▄[38;2;79;84;97;48;2;80;85;97m▄[38;2;79;85;97m▄[38;2;77;82;93;48;2;79;85;97m▄[38;2;44;48;55;48;2;80;85;97m▄[38;2;52;56;64m▄[38;2;81;86;98;48;2;80;86;97m▄[38;2;81;87;99;48;2;81;87;98m▄▄[38;2;82;88;100m▄[38;2;40;43;50;48;2;69;73;83m▄[38;2;0;0;2;48;2;0;0;2m▄▄[48;2;1;45;73m▄[38;2;0;52;86;48;2;0;105;171m▄[38;2;0;100;163;48;2;0;3;7m▄[38;2;0;1;5;48;2;0;0;2m▄[38;2;0;0;2m▄▄[38;2;0;33;55;48;2;0;1;4m▄[38;2;0;97;157;48;2;0;84;135m▄[38;2;1;77;124;48;2;1;94;151m▄[38;2;1;59;96;48;2;0;7;14m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄[38;2;3;3;5;48;2;48;51;58m▄[38;2;75;79;88;48;2;87;92;103m▄[38;2;77;82;93;48;2;58;63;73m▄[38;2;53;58;69;48;2;53;58;69m▄▄[48;2;53;59;70m▄[38;2;54;59;70;48;2;54;59;70m▄▄[38;2;53;59;70m▄▄[38;2;54;59;70m▄[38;2;53;59;70m▄[38;2;54;59;70;48;2;27;30;37m▄[38;2;29;32;39;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄[0m
|
|
12
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄[38;2;20;22;27;48;2;38;42;51m▄[38;2;53;58;69;48;2;53;58;69m▄[38;2;54;58;70m▄[38;2;54;59;70m▄[48;2;54;59;70m▄▄[48;2;54;60;71m▄[48;2;54;59;70m▄▄[38;2;57;62;73m▄[38;2;86;91;102;48;2;67;72;83m▄[38;2;47;50;57;48;2;87;92;103m▄[38;2;0;0;2;48;2;19;20;24m▄[48;2;0;0;2m▄▄▄▄[38;2;48;51;59;48;2;0;0;3m▄[38;2;79;84;96;48;2;44;47;54m▄[38;2;80;85;97;48;2;80;85;97m▄▄[48;2;80;86;97m▄[38;2;80;86;97;48;2;81;86;98m▄[48;2;80;85;97m▄[38;2;80;85;97m▄[38;2;78;83;95;48;2;79;84;96m▄[38;2;57;62;71;48;2;78;84;96m▄[38;2;38;41;47;48;2;75;80;91m▄[38;2;42;45;52;48;2;41;44;51m▄[38;2;55;59;68;48;2;6;6;9m▄[38;2;66;70;81;48;2;0;0;2m▄[38;2;15;16;20;48;2;0;0;3m▄[38;2;0;0;2;48;2;49;52;60m▄[38;2;46;50;57;48;2;82;87;100m▄[38;2;45;48;56;48;2;82;88;100m▄[38;2;0;0;2;48;2;44;47;54m▄[38;2;13;14;18;48;2;0;0;2m▄[38;2;68;72;82m▄[38;2;56;59;69m▄[38;2;45;48;56m▄[38;2;12;13;17m▄[38;2;0;0;2;48;2;0;61;100m▄[38;2;0;70;116;48;2;0;94;153m▄[38;2;0;83;137;48;2;0;0;3m▄[38;2;0;0;2;48;2;0;0;2m▄[48;2;0;8;16m▄[38;2;0;0;3;48;2;0;116;192m▄[48;2;1;136;218m▄[38;2;1;95;156;48;2;1;75;121m▄[38;2;0;53;88;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄[48;2;19;21;25m▄[38;2;47;50;58;48;2;85;90;101m▄[38;2;83;88;100;48;2;64;69;81m▄[38;2;56;60;71;48;2;53;58;69m▄[38;2;53;58;69m▄[38;2;54;59;70;48;2;53;59;70m▄[48;2;54;59;70m▄[38;2;53;59;69m▄[38;2;53;58;69;48;2;53;59;70m▄[48;2;53;59;69m▄[48;2;53;58;69m▄[48;2;53;59;70m▄[38;2;19;21;26;48;2;37;41;49m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄[0m
|
|
13
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄[48;2;3;4;6m▄[38;2;38;41;50;48;2;51;56;67m▄[38;2;53;58;69;48;2;53;58;69m▄[48;2;53;59;69m▄[38;2;54;59;70;48;2;54;59;70m▄▄[48;2;53;59;70m▄[48;2;53;58;69m▄[38;2;63;68;79;48;2;53;59;69m▄[38;2;88;93;104;48;2;75;80;91m▄[38;2;19;20;24;48;2;74;79;88m▄[38;2;0;0;2;48;2;2;2;5m▄[48;2;0;0;2m▄▄▄▄[38;2;52;56;64;48;2;13;14;17m▄[38;2;78;84;96;48;2;78;84;95m▄[38;2;79;84;96;48;2;79;84;96m▄[38;2;79;85;97;48;2;80;85;97m▄[38;2;80;85;97m▄▄▄[38;2;80;86;98m▄[38;2;80;85;97m▄[48;2;79;85;97m▄[38;2;80;86;98;48;2;80;85;97m▄[38;2;81;86;98;48;2;80;86;97m▄[38;2;81;87;98;48;2;81;86;98m▄[38;2;82;87;98m▄[38;2;82;87;99m▄[38;2;83;88;100;48;2;73;78;89m▄[38;2;66;71;80;48;2;9;9;13m▄[38;2;3;3;6;48;2;0;0;2m▄[38;2;2;2;5m▄[38;2;64;68;77;48;2;7;7;10m▄[38;2;82;87;98;48;2;70;75;85m▄[38;2;81;87;98;48;2;80;86;97m▄[38;2;81;86;98;48;2;80;85;97m▄▄[38;2;80;85;97;48;2;72;77;87m▄[38;2;67;72;82;48;2;9;10;13m▄[38;2;6;6;9;48;2;0;0;2m▄[38;2;0;0;2;48;2;0;79;130m▄[38;2;0;86;141;48;2;0;72;121m▄[38;2;2;64;107;48;2;0;0;2m▄[38;2;0;0;2m▄▄[48;2;0;2;6m▄[38;2;0;4;11;48;2;1;100;164m▄[38;2;0;107;175;48;2;1;48;80m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄[48;2;2;3;5m▄[38;2;20;21;25;48;2;73;78;88m▄[38;2;87;92;103;48;2;74;78;90m▄[38;2;62;67;78;48;2;54;59;69m▄[38;2;54;58;69m▄[38;2;53;58;69;48;2;53;58;69m▄▄▄▄▄[38;2;36;40;49;48;2;51;57;67m▄[38;2;0;0;2;48;2;3;3;6m▄[48;2;0;0;2m▄▄▄▄▄▄[0m
|
|
14
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄[38;2;3;3;6;48;2;20;22;28m▄[38;2;51;56;67;48;2;53;58;69m▄[38;2;53;58;69m▄[38;2;54;59;70;48;2;53;59;69m▄[48;2;54;59;70m▄[38;2;54;60;70m▄[38;2;55;60;71m▄[38;2;89;94;105;48;2;80;85;96m▄[38;2;27;28;33;48;2;57;61;68m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄[38;2;54;58;67;48;2;14;15;19m▄[38;2;80;85;97;48;2;79;84;96m▄[48;2;79;85;97m▄▄▄[48;2;80;85;97m▄▄▄[38;2;79;84;96m▄[38;2;58;61;71;48;2;80;86;98m▄[38;2;27;29;34;48;2;81;86;97m▄[38;2;2;2;6;48;2;75;80;92m▄[38;2;0;0;2;48;2;53;57;65m▄[38;2;24;25;29;48;2;81;86;97m▄[38;2;78;83;94;48;2;82;87;98m▄[38;2;83;88;99;48;2;83;87;98m▄[38;2;84;89;100;48;2;83;88;99m▄[38;2;85;90;101;48;2;83;89;100m▄[38;2;21;22;26;48;2;23;25;29m▄[38;2;18;19;23;48;2;20;22;26m▄[38;2;84;89;100;48;2;83;88;99m▄[38;2;83;88;99m▄[38;2;82;88;99;48;2;82;87;98m▄[38;2;78;84;95;48;2;81;87;98m▄[38;2;22;24;28;48;2;80;85;96m▄[38;2;0;0;2;48;2;55;58;67m▄[38;2;3;3;7;48;2;75;80;92m▄[38;2;29;31;37;48;2;63;67;77m▄[38;2;37;39;45;48;2;3;3;6m▄[38;2;0;0;3;48;2;0;0;3m▄[38;2;0;18;31;48;2;1;93;151m▄[38;2;0;87;144;48;2;0;48;82m▄[38;2;0;0;2;48;2;0;0;2m▄▄[48;2;0;0;3m▄[38;2;1;106;174;48;2;1;106;173m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄[38;2;28;30;35;48;2;58;62;70m▄[38;2;88;93;104;48;2;79;84;95m▄[38;2;53;58;69;48;2;53;58;69m▄▄▄▄▄[38;2;52;57;67m▄[38;2;2;3;5;48;2;19;21;26m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄[0m
|
|
15
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄[38;2;19;21;27;48;2;37;41;49m▄[38;2;53;58;69;48;2;53;58;69m▄[38;2;53;59;69;48;2;54;59;70m▄[38;2;54;59;69;48;2;53;59;69m▄[38;2;54;59;70;48;2;54;59;70m▄[38;2;70;75;86;48;2;61;66;77m▄[38;2;54;57;64;48;2;85;90;100m▄[38;2;0;0;2;48;2;2;2;4m▄[48;2;0;0;2m▄▄▄▄[38;2;57;60;70;48;2;16;17;21m▄[38;2;80;85;97;48;2;79;84;96m▄[48;2;80;85;97m▄[38;2;80;85;98;48;2;80;85;98m▄[38;2;80;86;98;48;2;80;85;97m▄[38;2;80;85;97m▄▄[38;2;79;85;97;48;2;72;77;87m▄[38;2;80;85;97;48;2;53;57;66m▄[38;2;79;85;97;48;2;27;29;34m▄[38;2;80;85;97;48;2;26;28;33m▄[48;2;35;38;44m▄[38;2;81;86;98;48;2;43;45;53m▄[38;2;81;87;98;48;2;42;45;51m▄[38;2;48;51;59;48;2;0;0;3m▄[38;2;0;0;2;48;2;16;17;21m▄[38;2;47;50;58;48;2;77;81;92m▄[38;2;85;89;100;48;2;85;90;100m▄[38;2;85;90;101;48;2;85;90;101m▄[38;2;21;22;27;48;2;22;23;28m▄[38;2;17;17;21;48;2;17;18;22m▄[38;2;85;89;100;48;2;85;89;100m▄[38;2;85;90;101;48;2;84;89;100m▄[38;2;50;52;60;48;2;78;82;93m▄[38;2;0;0;2;48;2;15;16;20m▄[38;2;44;47;54;48;2;0;0;3m▄[38;2;82;88;99;48;2;41;44;50m▄[38;2;81;87;99;48;2;41;44;51m▄[48;2;33;35;42m▄[38;2;72;77;88;48;2;16;18;21m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;0;3;48;2;0;18;30m▄[38;2;0;2;7;48;2;1;90;144m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄[38;2;1;117;190;48;2;1;107;174m▄[38;2;0;8;15;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄[48;2;2;2;5m▄[38;2;54;57;65;48;2;83;88;99m▄[38;2;66;71;82;48;2;59;64;75m▄[38;2;53;58;69;48;2;53;58;68m▄[48;2;53;58;69m▄▄[38;2;54;59;70;48;2;53;58;70m▄[38;2;18;20;26;48;2;36;40;49m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄[0m
|
|
16
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄[48;2;3;3;6m▄[38;2;37;41;49;48;2;52;57;67m▄[38;2;53;59;69;48;2;54;59;70m▄[38;2;54;59;70m▄[38;2;55;60;71;48;2;55;60;70m▄[38;2;76;81;90;48;2;79;84;95m▄[38;2;0;0;2;48;2;21;22;27m▄[48;2;0;0;2m▄▄▄▄[38;2;61;65;74;48;2;19;20;25m▄[38;2;80;85;97;48;2;80;85;97m▄[48;2;80;84;97m▄[38;2;79;84;97;48;2;79;85;97m▄[38;2;80;85;97;48;2;80;85;97m▄[38;2;80;86;98;48;2;80;86;98m▄[38;2;81;86;98m▄[38;2;80;86;98;48;2;80;85;97m▄[38;2;80;85;97;48;2;79;85;97m▄[38;2;80;86;98;48;2;80;85;97m▄▄[38;2;81;86;98;48;2;81;86;98m▄[38;2;82;87;99;48;2;82;87;99m▄▄[38;2;83;88;99;48;2;83;88;99m▄[38;2;84;89;100;48;2;84;89;100m▄[38;2;13;13;17;48;2;3;4;6m▄[38;2;8;9;12;48;2;27;28;33m▄[38;2;84;89;100;48;2;85;90;100m▄[38;2;86;91;102;48;2;86;91;101m▄[38;2;18;19;23;48;2;19;20;24m▄[38;2;14;15;19;48;2;15;16;20m▄[38;2;85;89;100;48;2;86;91;101m▄[38;2;85;90;101;48;2;85;90;101m▄[38;2;10;10;14;48;2;28;29;35m▄[38;2;10;11;14;48;2;2;2;5m▄[38;2;83;89;101;48;2;82;88;100m▄[38;2;83;88;100;48;2;83;88;100m▄[38;2;82;88;100;48;2;82;88;100m▄[48;2;82;87;99m▄[38;2;73;77;88;48;2;72;77;87m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;1;78;123m▄[38;2;1;127;207;48;2;0;0;3m▄[38;2;0;53;90;48;2;0;0;2m▄[38;2;0;0;2m▄▄[48;2;1;38;63m▄[38;2;0;46;75;48;2;1;109;176m▄[38;2;1;106;171;48;2;0;5;10m▄[38;2;0;2;7;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄[38;2;0;0;3;48;2;23;24;29m▄[38;2;73;77;87;48;2;75;80;91m▄[38;2;53;58;69;48;2;53;58;69m▄▄▄[38;2;36;40;48;48;2;51;57;67m▄[38;2;0;0;2;48;2;2;2;5m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄[0m
|
|
17
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄[38;2;2;2;5;48;2;18;20;26m▄[38;2;51;56;66;48;2;53;58;69m▄[38;2;53;58;69m▄[38;2;65;70;80;48;2;57;62;73m▄[38;2;17;18;21;48;2;49;52;58m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄[38;2;64;68;78;48;2;22;23;28m▄[38;2;80;85;97;48;2;80;86;97m▄[48;2;80;86;98m▄▄[48;2;80;85;97m▄[38;2;79;85;97;48;2;79;84;97m▄[38;2;80;85;97;48;2;80;85;97m▄▄[38;2;79;85;97m▄[38;2;80;85;97m▄▄[38;2;80;86;97m▄[38;2;70;75;85;48;2;81;86;98m▄[38;2;84;88;99;48;2;82;87;99m▄[48;2;83;88;99m▄[38;2;84;89;100;48;2;84;89;100m▄[38;2;85;90;101;48;2;85;90;101m▄[38;2;31;33;38;48;2;21;23;27m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;57;60;68;48;2;77;81;91m▄[38;2;42;45;52;48;2;84;90;101m▄[38;2;0;0;2;48;2;15;16;20m▄[38;2;0;0;3;48;2;13;14;18m▄[38;2;41;43;49;48;2;84;89;100m▄[38;2;57;60;69;48;2;77;81;91m▄[38;2;0;0;3;48;2;0;0;2m▄[38;2;27;29;34;48;2;19;20;25m▄[38;2;82;88;99;48;2;83;89;100m▄[38;2;83;88;100;48;2;83;88;100m▄▄[38;2;84;89;101m▄[38;2;60;64;72;48;2;72;77;88m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;42;69;48;2;2;119;192m▄[38;2;1;102;164;48;2;0;35;59m▄[38;2;2;93;149;48;2;0;116;192m▄[38;2;1;109;178;48;2;0;0;3m▄[38;2;1;82;134;48;2;0;0;2m▄[38;2;0;1;5m▄[38;2;0;0;2m▄[48;2;0;58;94m▄[38;2;0;66;110;48;2;0;96;154m▄[38;2;0;86;139;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄[38;2;18;19;23;48;2;48;51;58m▄[38;2;62;67;78;48;2;54;60;70m▄[38;2;53;58;69;48;2;52;58;68m▄[38;2;50;56;66;48;2;53;59;70m▄[38;2;2;2;4;48;2;18;20;25m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄[0m
|
|
18
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[38;2;19;21;27;48;2;36;40;48m▄[38;2;46;52;62;48;2;54;59;70m▄[38;2;4;5;8;48;2;50;54;62m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄[38;2;57;61;70;48;2;25;27;32m▄[38;2;79;84;97;48;2;80;85;97m▄▄[38;2;79;84;96m▄[38;2;79;84;97m▄[48;2;79;85;97m▄[38;2;78;84;96m▄[38;2;67;72;82m▄[38;2;49;52;61;48;2;80;85;97m▄[38;2;28;30;36;48;2;79;84;97m▄[38;2;2;3;5;48;2;74;80;91m▄[38;2;0;0;2;48;2;46;49;56m▄[48;2;14;15;19m▄[48;2;1;1;4m▄[38;2;7;8;11;48;2;60;64;72m▄[38;2;75;79;90;48;2;83;88;99m▄[38;2;83;88;99;48;2;84;89;100m▄[38;2;84;89;100;48;2;84;88;99m▄[38;2;37;39;45;48;2;38;41;47m▄[38;2;0;0;2;48;2;0;0;3m▄[48;2;4;5;8m▄[48;2;0;0;2m▄▄▄▄[48;2;5;5;8m▄[48;2;0;0;2m▄[38;2;35;37;43;48;2;34;37;43m▄[38;2;83;88;100;48;2;82;88;99m▄[38;2;82;88;100;48;2;83;88;100m▄[38;2;78;83;94;48;2;84;89;101m▄[38;2;9;10;13;48;2;65;69;79m▄[38;2;0;0;2;48;2;1;2;5m▄[48;2;0;0;2m▄▄[48;2;0;0;3m▄▄[48;2;0;8;17m▄[48;2;1;65;105m▄[38;2;0;71;115;48;2;2;92;148m▄[38;2;0;82;132;48;2;0;0;2m▄[38;2;0;0;2m▄▄[48;2;1;77;124m▄[38;2;2;108;178;48;2;0;73;121m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄[38;2;4;5;8;48;2;49;53;62m▄[38;2;47;52;62;48;2;53;58;69m▄[38;2;18;20;25;48;2;35;38;47m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
19
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[48;2;2;3;6m▄[48;2;11;12;17m▄[48;2;0;0;2m▄▄▄▄▄[38;2;59;63;72;48;2;59;63;72m▄[38;2;79;85;97;48;2;79;84;96m▄[38;2;80;85;97m▄[38;2;45;48;55;48;2;70;75;85m▄[38;2;0;0;2;48;2;44;47;54m▄[48;2;25;27;32m▄[48;2;7;7;10m▄[38;2;0;46;69;48;2;0;0;2m▄[38;2;1;79;114m▄[38;2;0;25;35m▄[38;2;0;0;2m▄▄▄▄▄[48;2;20;21;26m▄[38;2;11;12;16;48;2;84;89;100m▄[38;2;0;0;2;48;2;41;44;50m▄[48;2;0;0;2m▄[38;2;12;13;18m▄[38;2;44;47;54m▄[38;2;65;70;80m▄[38;2;79;84;96;48;2;6;7;10m▄[38;2;78;84;96m▄[38;2;65;70;81;48;2;0;0;2m▄[38;2;45;48;56m▄[38;2;15;16;21m▄[38;2;0;0;2;48;2;0;0;3m▄[48;2;37;40;46m▄[38;2;11;12;16;48;2;81;87;99m▄[38;2;0;0;2;48;2;23;25;30m▄[48;2;0;0;2m▄▄▄▄▄[38;2;0;27;43m▄[38;2;0;70;112m▄[38;2;0;45;72m▄[38;2;0;0;2m▄[48;2;1;83;133m▄[38;2;2;112;182;48;2;0;70;115m▄[38;2;0;5;13;48;2;0;0;2m▄[38;2;0;0;2m▄[38;2;1;107;171;48;2;0;106;171m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄[48;2;11;12;16m▄[48;2;2;2;5m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
20
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;59;63;72;48;2;59;63;73m▄[38;2;80;85;97;48;2;80;85;97m▄[38;2;80;85;98m▄[38;2;45;49;55;48;2;45;48;55m▄[38;2;0;0;2;48;2;0;0;2m▄▄[38;2;0;3;7m▄[38;2;0;175;250;48;2;1;151;224m▄[38;2;1;158;227;48;2;0;191;252m▄[38;2;0;20;27;48;2;1;114;151m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;1;4m▄[38;2;0;23;38m▄[38;2;0;0;2m▄▄▄[38;2;30;33;39m▄[38;2;73;78;89;48;2;5;5;8m▄[38;2;79;85;97;48;2;45;48;56m▄[38;2;80;85;98;48;2;78;84;96m▄[48;2;79;85;97m▄[38;2;79;85;98;48;2;80;85;98m▄[38;2;80;86;98m▄[48;2;80;86;98m▄[48;2;80;85;98m▄[38;2;80;85;98;48;2;80;86;98m▄[38;2;80;86;98;48;2;79;84;97m▄[48;2;46;50;58m▄[38;2;74;79;91;48;2;5;5;9m▄[38;2;32;34;40;48;2;0;0;2m▄[38;2;0;0;3m▄[38;2;0;0;2m▄▄[38;2;0;23;38m▄[38;2;0;0;4m▄[38;2;0;0;2m▄[38;2;0;0;1;48;2;0;3;8m▄[38;2;0;134;215;48;2;0;142;228m▄[38;2;0;158;251;48;2;0;139;224m▄[38;2;0;2;7;48;2;0;0;2m▄[38;2;0;0;2m▄[38;2;1;102;161;48;2;1;101;162m▄[38;2;0;5;13;48;2;0;5;12m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;106;171;48;2;1;107;172m▄[38;2;0;0;3;48;2;0;0;3m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
21
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;59;63;72;48;2;59;63;71m▄[38;2;80;85;97;48;2;80;85;97m▄▄[38;2;73;78;89;48;2;45;49;56m▄[38;2;5;5;8;48;2;0;0;2m▄[38;2;0;0;2m▄▄[38;2;0;45;64;48;2;0;152;214m▄[38;2;1;154;239;48;2;0;164;251m▄[38;2;0;160;252;48;2;2;83;133m▄[38;2;0;159;251;48;2;0;32;49m▄[38;2;1;151;241;48;2;1;93;147m▄[38;2;0;40;65;48;2;1;124;200m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;31;33;39m▄[38;2;77;82;94;48;2;44;47;55m▄[38;2;79;84;97;48;2;78;84;96m▄[38;2;78;83;95;48;2;79;85;97m▄[38;2;47;51;59m▄[38;2;5;6;8;48;2;73;78;89m▄[38;2;0;0;2;48;2;47;50;58m▄[38;2;0;0;3;48;2;26;28;34m▄[38;2;7;8;10;48;2;9;10;13m▄[38;2;7;7;10;48;2;8;9;13m▄[38;2;0;0;3;48;2;24;26;31m▄[38;2;0;0;1;48;2;44;47;55m▄[38;2;2;3;5;48;2;70;74;85m▄[38;2;42;45;52;48;2;80;85;97m▄[38;2;78;83;95;48;2;80;86;98m▄[38;2;80;86;98;48;2;80;85;98m▄[48;2;46;49;57m▄[38;2;33;35;41;48;2;0;0;2m▄[38;2;0;0;2m▄[38;2;0;39;62;48;2;0;127;202m▄[38;2;1;151;240;48;2;1;90;148m▄[38;2;1;158;252;48;2;0;32;50m▄[38;2;0;156;251;48;2;1;85;138m▄[38;2;1;149;239;48;2;0;155;251m▄[38;2;0;36;59;48;2;1;128;207m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;0;1m▄[38;2;2;101;161;48;2;1;100;160m▄[38;2;0;5;12;48;2;0;5;12m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;1;108;171;48;2;1;106;171m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
22
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;61;64;74;48;2;60;64;73m▄[38;2;81;86;98;48;2;81;86;98m▄[38;2;81;87;99m▄[38;2;82;87;99m▄[38;2;82;88;100;48;2;48;51;58m▄[38;2;18;19;24;48;2;0;0;2m▄[38;2;0;0;2m▄▄[48;2;0;17;28m▄[48;2;0;69;106m▄[48;2;1;70;109m▄[48;2;0;19;32m▄[38;2;13;14;17;48;2;0;0;2m▄[38;2;75;80;91;48;2;21;23;27m▄[38;2;79;84;95;48;2;77;82;93m▄[38;2;76;81;93;48;2;78;83;95m▄[38;2;17;19;23;48;2;74;79;91m▄[38;2;0;0;2;48;2;16;18;23m▄[38;2;15;16;21;48;2;0;0;1m▄[38;2;76;81;92;48;2;20;22;27m▄[38;2;82;87;98;48;2;63;67;76m▄[38;2;83;88;100;48;2;76;81;93m▄[38;2;82;88;99;48;2;81;86;98m▄[38;2;83;88;100;48;2;80;86;98m▄[38;2;82;88;100;48;2;76;81;93m▄[38;2;82;88;99;48;2;62;67;76m▄[38;2;78;83;94;48;2;22;23;28m▄[38;2;16;17;21;48;2;0;0;1m▄[38;2;0;0;3;48;2;15;16;20m▄[38;2;14;15;19;48;2;73;79;90m▄[38;2;76;81;92;48;2;80;85;97m▄[38;2;80;85;98m▄[38;2;76;81;93;48;2;21;23;27m▄[38;2;12;13;17;48;2;0;0;2m▄[38;2;0;0;2;48;2;0;17;30m▄[48;2;0;67;106m▄[48;2;1;67;108m▄[48;2;0;15;27m▄[48;2;0;0;2m▄[38;2;2;49;78m▄[38;2;1;107;171;48;2;1;46;74m▄[38;2;0;5;12;48;2;1;108;175m▄[38;2;0;0;2;48;2;0;1;5m▄[48;2;0;0;2m▄[38;2;0;107;171;48;2;1;108;171m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
23
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;60;63;73;48;2;60;64;73m▄[38;2;81;86;98;48;2;81;86;98m▄[38;2;66;71;80;48;2;82;87;99m▄[38;2;78;83;94m▄[38;2;82;87;99;48;2;82;88;100m▄[38;2;84;88;99;48;2;69;73;82m▄[38;2;40;43;49;48;2;2;2;4m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄[38;2;57;61;69;48;2;6;7;10m▄[38;2;80;85;97;48;2;68;73;83m▄[38;2;78;84;95;48;2;79;84;96m▄[38;2;23;25;30;48;2;77;82;94m▄[38;2;0;0;2;48;2;20;22;26m▄[48;2;0;0;2m▄[38;2;4;5;8m▄[38;2;24;25;30;48;2;49;53;60m▄[38;2;79;84;95;48;2;82;87;98m▄[38;2;50;54;61;48;2;63;67;77m▄[38;2;16;18;24;48;2;45;48;56m▄[38;2;42;47;57;48;2;69;74;86m▄[38;2;45;50;60;48;2;70;76;87m▄[38;2;20;22;28;48;2;50;54;63m▄[38;2;50;53;60;48;2;60;64;73m▄[38;2;79;84;95;48;2;83;88;99m▄[38;2;24;26;31;48;2;53;57;65m▄[38;2;3;4;7;48;2;0;0;2m▄[38;2;0;0;2m▄[48;2;16;18;22m▄[38;2;19;21;25;48;2;76;82;93m▄[38;2;76;82;93;48;2;79;84;97m▄[38;2;79;84;97;48;2;68;73;83m▄[38;2;56;60;69;48;2;6;7;10m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄[38;2;0;0;3;48;2;0;0;3m▄[38;2;2;105;170;48;2;1;117;189m▄[38;2;0;0;2;48;2;0;4;9m▄[48;2;0;0;2m▄▄▄[38;2;1;106;171;48;2;0;106;172m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
24
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;60;64;73;48;2;60;64;73m▄[38;2;81;86;97;48;2;80;86;97m▄[38;2;81;86;98;48;2;77;82;93m▄[38;2;26;28;32;48;2;29;31;36m▄[38;2;45;48;55;48;2;83;88;99m▄[38;2;83;87;98;48;2;82;87;98m▄[38;2;82;87;98;48;2;80;85;96m▄[38;2;55;59;66;48;2;13;13;17m▄[38;2;0;0;2;48;2;0;0;2m▄▄[38;2;29;31;36;48;2;6;6;10m▄[38;2;82;87;98;48;2;79;85;96m▄[38;2;42;45;51;48;2;79;85;97m▄[38;2;0;0;2;48;2;27;29;35m▄[38;2;19;21;27;48;2;0;0;2m▄[38;2;46;52;62;48;2;5;5;8m▄[38;2;49;55;65;48;2;35;39;47m▄[38;2;50;55;66;48;2;49;54;64m▄[48;2;23;25;31m▄[38;2;50;56;66;48;2;2;2;5m▄[38;2;29;33;41;48;2;1;1;4m▄[38;2;25;29;36;48;2;23;25;34m▄[38;2;23;25;34;48;2;32;36;44m▄[38;2;20;23;31;48;2;31;35;43m▄[38;2;26;30;39;48;2;23;26;33m▄[38;2;24;26;33;48;2;0;0;3m▄[38;2;45;50;60;48;2;2;2;5m▄[38;2;44;50;60;48;2;20;22;29m▄[38;2;45;50;60;48;2;42;46;57m▄[38;2;45;50;61;48;2;31;35;43m▄[38;2;41;46;56;48;2;3;4;7m▄[38;2;9;10;13;48;2;0;0;2m▄[38;2;0;0;2;48;2;21;22;27m▄[38;2;21;23;27;48;2;77;82;94m▄[38;2;77;82;95;48;2;79;84;96m▄[38;2;24;26;32;48;2;4;4;7m▄[38;2;0;0;1;48;2;0;0;2m▄[38;2;3;117;181;48;2;0;8;14m▄[38;2;1;98;157;48;2;0;67;107m▄[38;2;1;74;119;48;2;1;129;206m▄[38;2;0;75;119;48;2;0;69;110m▄[38;2;0;76;121;48;2;0;68;108m▄[38;2;0;75;121m▄[38;2;0;75;120;48;2;0;69;110m▄[38;2;1;76;120;48;2;1;130;207m▄[38;2;0;99;156;48;2;0;66;107m▄[38;2;1;110;176;48;2;0;6;12m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄[38;2;0;21;36m▄[38;2;0;23;39m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
25
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;60;64;73;48;2;61;64;73m▄[38;2;81;86;97;48;2;81;86;97m▄[38;2;81;86;98;48;2;81;86;98m▄[38;2;80;85;97;48;2;56;60;68m▄[38;2;7;8;10;48;2;1;1;3m▄[38;2;9;9;13;48;2;63;67;76m▄[38;2;78;83;94;48;2;84;89;101m▄[38;2;27;29;35;48;2;46;49;57m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;0;3m▄[38;2;66;70;80;48;2;55;59;67m▄[38;2;20;22;28;48;2;58;62;70m▄[38;2;46;51;60;48;2;5;5;9m▄[38;2;50;55;66;48;2;35;39;46m▄[38;2;51;56;67;48;2;50;56;66m▄▄[38;2;50;56;67;48;2;50;55;66m▄[38;2;51;56;67m▄[48;2;51;56;67m▄[48;2;50;55;66m▄[38;2;52;57;68;48;2;42;47;57m▄[38;2;45;50;60;48;2;7;7;13m▄[38;2;8;9;14;48;2;4;5;7m▄[38;2;6;7;11;48;2;5;5;9m▄[38;2;38;43;53;48;2;6;6;11m▄[38;2;45;50;60;48;2;37;41;50m▄[38;2;45;49;60;48;2;44;49;59m▄[38;2;45;50;60;48;2;45;50;60m▄[38;2;46;51;61;48;2;45;50;61m▄[38;2;45;50;60m▄▄[38;2;45;50;61;48;2;43;48;58m▄[38;2;42;47;57;48;2;8;9;13m▄[38;2;6;7;10;48;2;0;0;2m▄[38;2;0;0;2;48;2;21;23;27m▄[38;2;9;9;13;48;2;42;45;53m▄[38;2;0;0;2;48;2;0;0;3m▄[38;2;1;129;200;48;2;0;131;201m▄[38;2;0;1;6;48;2;0;0;4m▄[38;2;0;47;81;48;2;0;2;7m▄[38;2;0;120;201;48;2;0;8;18m▄[38;2;0;124;204;48;2;0;11;24m▄[48;2;0;10;23m▄[38;2;0;121;202;48;2;0;7;17m▄[38;2;0;50;87;48;2;0;2;9m▄[38;2;0;2;6;48;2;0;1;5m▄[38;2;3;127;199;48;2;0;129;207m▄[38;2;0;37;60;48;2;1;74;120m▄[48;2;0;73;120m▄[38;2;0;37;61;48;2;0;75;122m▄[38;2;1;116;189;48;2;0;120;191m▄[38;2;1;118;194;48;2;0;111;187m▄[38;2;0;8;15;48;2;0;12;23m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
26
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;2;2;4;48;2;43;45;52m▄[38;2;65;69;79;48;2;81;86;98m▄[38;2;81;86;97m▄[48;2;82;87;98m▄[38;2;66;70;80;48;2;37;40;46m▄[38;2;0;0;2;48;2;0;0;2m▄[48;2;24;26;31m▄[48;2;8;8;11m▄[48;2;0;0;2m▄[38;2;22;24;30;48;2;14;15;19m▄[38;2;49;54;64;48;2;43;47;56m▄[38;2;49;54;65;48;2;49;55;65m▄[38;2;50;55;66;48;2;50;55;66m▄▄[38;2;51;56;67;48;2;50;55;67m▄[48;2;51;56;67m▄▄[38;2;51;57;68m▄[48;2;51;57;68m▄▄[38;2;52;57;68m▄[48;2;52;57;68m▄[38;2;27;30;38;48;2;27;30;36m▄[38;2;22;24;31;48;2;21;24;31m▄[38;2;45;50;60;48;2;44;49;60m▄[48;2;45;50;60m▄▄[48;2;45;50;61m▄[48;2;46;50;61m▄[38;2;46;51;61;48;2;45;50;60m▄[38;2;38;73;101m▄[38;2;28;94;140m▄[38;2;46;53;66m▄[38;2;46;50;61;48;2;39;42;52m▄[38;2;12;13;18;48;2;4;4;8m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;0;0;1m▄[38;2;2;127;199;48;2;0;128;199m▄[38;2;0;9;20;48;2;0;6;16m▄[38;2;1;82;138;48;2;0;77;131m▄[38;2;0;167;253;48;2;0;156;253m▄[38;2;0;193;253;48;2;0;168;253m▄[38;2;0;194;253;48;2;0;169;253m▄[38;2;0;167;253;48;2;0;157;253m▄[38;2;1;81;137;48;2;1;78;133m▄[38;2;0;7;16;48;2;0;4;12m▄[38;2;0;119;191;48;2;0;120;191m▄[38;2;0;0;2;48;2;0;0;3m▄[48;2;0;0;2m▄▄[48;2;0;0;3m▄[48;2;0;0;4m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
27
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;11;12;16m▄[38;2;29;30;36;48;2;76;80;92m▄[38;2;81;86;98;48;2;81;86;97m▄[48;2;81;87;98m▄[38;2;29;31;36;48;2;7;7;10m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄[38;2;44;49;59;48;2;33;37;44m▄[38;2;49;55;65;48;2;49;55;65m▄[38;2;50;55;65;48;2;50;55;65m▄[38;2;50;55;66;48;2;50;55;66m▄[38;2;51;56;66m▄[38;2;51;56;67;48;2;51;56;67m▄[48;2;51;57;68m▄▄[38;2;51;57;68m▄[38;2;51;56;67m▄[38;2;52;57;68;48;2;52;57;68m▄[38;2;53;58;69;48;2;52;57;69m▄[38;2;39;43;51;48;2;52;57;68m▄[38;2;2;2;5;48;2;25;28;34m▄[38;2;1;1;4;48;2;21;23;29m▄[38;2;31;35;43;48;2;45;49;60m▄[38;2;44;49;60;48;2;44;50;60m▄[38;2;45;50;60;48;2;45;50;60m▄[38;2;45;50;61;48;2;45;50;61m▄[38;2;45;50;60m▄[38;2;45;50;61;48;2;46;51;62m▄[38;2;23;101;153;48;2;14;130;203m▄[38;2;16;125;200;48;2;23;104;158m▄[38;2;39;65;89;48;2;13;130;206m▄[38;2;43;50;64;48;2;19;123;189m▄[38;2;12;17;27;48;2;7;113;178m▄[38;2;0;3;11;48;2;1;107;173m▄[38;2;0;3;10;48;2;2;108;173m▄[38;2;1;127;200;48;2;0;140;222m▄[38;2;0;4;12;48;2;0;9;21m▄[38;2;0;74;127;48;2;0;80;135m▄[38;2;0;155;252;48;2;0;166;253m▄[38;2;0;165;253;48;2;0;190;253m▄[38;2;0;165;252;48;2;0;191;253m▄[38;2;0;156;253;48;2;0;165;253m▄[38;2;1;77;131;48;2;1;82;140m▄[38;2;0;4;11;48;2;0;7;17m▄[38;2;2;135;212;48;2;0;120;191m▄[38;2;0;105;170;48;2;0;0;2m▄[38;2;1;103;171m▄[38;2;1;107;171m▄[38;2;1;116;185;48;2;0;47;75m▄[38;2;1;106;174;48;2;0;50;82m▄[38;2;0;16;28;48;2;0;0;2m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
28
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;3;3;6;48;2;50;53;61m▄[38;2;68;72;83;48;2;81;86;98m▄[38;2;76;80;91;48;2;53;56;64m▄[38;2;0;0;3;48;2;0;0;2m▄[38;2;0;0;2m▄[38;2;17;19;24;48;2;6;7;10m▄[38;2;49;54;64;48;2;49;54;65m▄[38;2;49;54;65m▄[48;2;50;55;65m▄[38;2;50;55;66;48;2;50;55;66m▄▄[38;2;51;56;67;48;2;51;56;67m▄▄▄[38;2;51;57;67m▄[38;2;52;57;68;48;2;51;57;68m▄[38;2;37;41;50;48;2;52;57;68m▄[38;2;1;2;4;48;2;38;42;50m▄[38;2;0;0;2;48;2;1;2;4m▄[38;2;14;16;23;48;2;0;0;2m▄[38;2;15;18;24m▄[38;2;0;0;2;48;2;1;1;3m▄[38;2;0;0;3;48;2;30;33;41m▄[38;2;28;32;39;48;2;45;50;61m▄[38;2;45;50;61m▄[38;2;46;50;61m▄[38;2;46;51;61m▄[38;2;46;51;62m▄[48;2;46;51;61m▄[48;2;45;50;61m▄[38;2;45;50;61m▄[38;2;8;9;13;48;2;11;13;17m▄[38;2;0;0;2;48;2;0;0;2m▄▄[38;2;0;129;203;48;2;0;127;199m▄[38;2;0;7;13;48;2;0;1;5m▄[38;2;0;1;5;48;2;0;29;54m▄[38;2;0;4;11;48;2;0;86;146m▄[38;2;0;5;14;48;2;0;88;149m▄[48;2;0;89;150m▄[38;2;0;4;11;48;2;0;85;146m▄[38;2;0;1;5;48;2;0;32;58m▄[38;2;0;7;13;48;2;0;1;6m▄[38;2;1;127;198;48;2;2;124;194m▄[38;2;0;0;2;48;2;0;13;25m▄▄[48;2;0;15;27m▄[48;2;1;107;172m▄[48;2;1;106;176m▄[48;2;0;3;9m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄[0m
|
|
29
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;14;15;19m▄[38;2;34;36;42;48;2;79;84;96m▄[38;2;43;46;53;48;2;18;19;23m▄[38;2;0;0;2;48;2;0;0;2m▄[38;2;1;1;3;48;2;19;21;26m▄[38;2;42;47;57;48;2;49;54;65m▄[38;2;50;55;66;48;2;49;55;65m▄[48;2;50;55;66m▄▄▄[48;2;50;56;66m▄[38;2;51;56;67;48;2;51;56;67m▄[38;2;51;57;68m▄[38;2;45;50;60;48;2;52;57;68m▄[38;2;3;3;6;48;2;38;42;50m▄[38;2;0;0;3;48;2;1;1;4m▄[38;2;21;24;32;48;2;0;1;3m▄[38;2;29;33;42;48;2;18;21;29m▄[38;2;29;33;43;48;2;29;34;43m▄[38;2;30;34;44;48;2;30;34;43m▄[38;2;30;35;44;48;2;21;25;32m▄[38;2;23;26;34;48;2;1;1;4m▄[38;2;1;1;4;48;2;0;0;2m▄[38;2;0;0;2;48;2;26;29;36m▄[38;2;28;32;40;48;2;46;51;61m▄[38;2;46;51;61;48;2;46;51;62m▄[38;2;46;51;62m▄[38;2;47;52;63;48;2;46;52;62m▄[38;2;25;28;35;48;2;47;52;63m▄[38;2;0;0;2;48;2;19;22;27m▄[48;2;0;0;2m▄[38;2;4;70;109m▄[38;2;0;89;143;48;2;2;68;110m▄[38;2;0;0;4;48;2;1;121;193m▄[38;2;0;24;40;48;2;2;129;211m▄[38;2;0;27;45;48;2;0;108;179m▄[38;2;0;70;111;48;2;0;111;180m▄[38;2;0;74;116;48;2;0;110;180m▄[38;2;0;27;44;48;2;0;111;180m▄[38;2;0;26;42m▄[38;2;1;114;184m▄[38;2;0;23;40;48;2;0;128;207m▄[38;2;0;0;2;48;2;1;78;125m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
30
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;5;5;8;48;2;41;43;50m▄[38;2;0;0;3;48;2;0;0;2m▄[38;2;0;0;2m▄[48;2;15;17;22m▄[38;2;38;41;50;48;2;50;55;66m▄[38;2;50;55;66m▄[38;2;51;56;67m▄[48;2;51;56;66m▄[38;2;50;56;67;48;2;51;56;67m▄[38;2;51;56;67m▄[38;2;18;20;25;48;2;50;55;65m▄[38;2;0;0;2;48;2;9;10;14m▄[38;2;14;16;22;48;2;0;0;2m▄[38;2;29;33;42;48;2;17;20;27m▄[38;2;28;32;42;48;2;29;32;42m▄[38;2;29;33;42;48;2;29;33;42m▄[38;2;29;33;43;48;2;29;33;43m▄[48;2;30;34;44m▄[38;2;30;34;44m▄[38;2;30;35;44m▄[38;2;30;34;44;48;2;22;25;33m▄[38;2;20;24;31;48;2;0;0;3m▄[38;2;0;0;2m▄[38;2;1;1;4;48;2;32;35;44m▄[38;2;18;21;26;48;2;46;51;62m▄[38;2;0;1;3;48;2;29;33;40m▄[38;2;0;0;2;48;2;0;0;2m▄▄[38;2;1;49;79;48;2;1;38;61m▄[38;2;2;58;94;48;2;1;96;155m▄[38;2;0;0;2;48;2;0;0;3m▄[48;2;0;0;2m▄▄▄[38;2;0;75;117;48;2;0;54;85m▄[38;2;1;54;83;48;2;0;55;87m▄[38;2;0;0;2;48;2;0;0;2m▄▄[38;2;1;107;172;48;2;0;106;171m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
31
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;10;11;15m▄[38;2;32;35;43;48;2;50;55;66m▄[38;2;50;55;66;48;2;51;56;66m▄[38;2;50;56;67;48;2;51;55;67m▄[38;2;36;40;48;48;2;50;55;67m▄[38;2;0;0;2;48;2;27;30;37m▄[38;2;7;8;12;48;2;0;0;2m▄[38;2;28;32;41;48;2;10;12;17m▄[38;2;28;32;42;48;2;28;32;42m▄[38;2;29;33;42;48;2;29;32;42m▄[38;2;29;33;43;48;2;29;33;42m▄[38;2;29;39;52;48;2;29;33;43m▄[38;2;10;124;199;48;2;30;35;45m▄[38;2;8;122;200m▄[38;2;24;63;91;48;2;30;34;43m▄[38;2;25;62;89m▄[38;2;25;63;89;48;2;30;35;44m▄[38;2;26;63;89;48;2;31;36;45m▄[38;2;26;64;90;48;2;18;21;28m▄[38;2;2;38;59;48;2;0;0;3m▄[38;2;0;35;56m▄[48;2;0;0;2m▄[38;2;0;35;57m▄[38;2;1;108;174;48;2;0;7;13m▄[38;2;1;40;67;48;2;2;112;179m▄[38;2;0;0;2;48;2;0;29;48m▄[48;2;0;0;2m▄▄[38;2;1;52;82m▄[38;2;1;108;168;48;2;0;56;87m▄[38;2;0;3;7;48;2;2;103;163m▄[38;2;0;0;2;48;2;0;2;5m▄[38;2;0;30;47;48;2;0;0;2m▄[38;2;1;118;185;48;2;1;30;48m▄[38;2;0;13;23;48;2;2;109;174m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
32
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;5;6;9m▄[38;2;14;15;20;48;2;49;54;64m▄[38;2;7;7;11;48;2;44;48;58m▄[38;2;2;3;6;48;2;3;3;6m▄[38;2;25;29;37;48;2;5;5;9m▄[38;2;28;32;42;48;2;27;30;40m▄[38;2;28;32;41;48;2;28;32;41m▄[38;2;28;32;42;48;2;28;32;42m▄[38;2;29;32;42;48;2;29;33;43m▄[38;2;29;33;43m▄[48;2;28;42;58m▄[38;2;25;53;77;48;2;10;123;198m▄[38;2;25;54;78;48;2;9;121;196m▄[38;2;29;33;42;48;2;16;94;147m▄[38;2;29;33;43;48;2;15;92;142m▄[38;2;30;35;44;48;2;16;94;143m▄[38;2;22;25;33;48;2;17;95;144m▄[38;2;0;0;3;48;2;4;80;127m▄[38;2;0;0;2;48;2;0;77;123m▄[48;2;1;77;123m▄[48;2;1;77;124m▄[48;2;0;76;123m▄[48;2;0;37;62m▄[48;2;0;0;2m▄▄[38;2;0;41;64m▄[38;2;1;113;178;48;2;1;45;72m▄[38;2;0;6;12;48;2;1;111;176m▄[38;2;0;0;2;48;2;0;4;9m▄[48;2;0;0;2m▄[38;2;0;17;28;48;2;0;10;17m▄[38;2;2;86;138;48;2;2;117;185m▄[38;2;0;0;2;48;2;0;12;22m▄[48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
33
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[48;2;2;3;6m▄[38;2;0;0;3;48;2;22;26;34m▄[38;2;8;9;14;48;2;29;33;42m▄[38;2;9;10;15;48;2;28;32;42m▄[38;2;8;10;14;48;2;28;32;41m▄[38;2;9;10;15;48;2;29;32;42m▄[48;2;29;33;43m▄▄[48;2;29;33;42m▄▄▄[38;2;9;10;14;48;2;29;33;43m▄[38;2;6;7;11;48;2;29;32;42m▄[38;2;0;0;2;48;2;4;4;8m▄[48;2;0;0;2m▄▄▄▄▄▄▄[38;2;1;44;73;48;2;0;38;60m▄[38;2;0;9;17;48;2;1;114;182m▄[38;2;0;0;2;48;2;0;7;15m▄[48;2;0;0;2m▄▄▄[38;2;0;3;8;48;2;0;18;29m▄[38;2;0;3;7;48;2;2;76;121m▄[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
34
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[38;2;0;0;3m▄[38;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
35
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
36
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
37
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
38
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
39
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
40
|
+
[38;2;0;0;2;48;2;0;0;2m▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄[0m
|
|
41
|
+
[?25h
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `pugi deploy` command surface — Wave 3 P2 (Task #34, 2026-05-25).
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* pugi deploy --target vercel <vercelProject> [--project <id>] [--ref <ref>] [--target-env production|preview] [--integration <id>]
|
|
6
|
+
* pugi deploy --target render <renderService> [--project <id>] [--ref <ref>]
|
|
7
|
+
* pugi deploy --status <deployment-id>
|
|
8
|
+
* pugi deploy --logs <deployment-id> [--tail]
|
|
9
|
+
*
|
|
10
|
+
* Exit codes (per task spec):
|
|
11
|
+
* 0 success (trigger queued, status terminal=ready, logs printed)
|
|
12
|
+
* 1 deployment failed (status=error or trigger refused)
|
|
13
|
+
* 2 transient (rate-limited, runtime down, retry-safe)
|
|
14
|
+
*
|
|
15
|
+
* Project resolution:
|
|
16
|
+
* `--project <id>` is required for trigger commands because the CLI's
|
|
17
|
+
* credential store is tenant-scoped but not project-scoped. A future
|
|
18
|
+
* sprint (Wave 4) auto-detects the project from `.pugi/settings.json`
|
|
19
|
+
* bound to the workspace; until then the operator passes it explicitly.
|
|
20
|
+
*
|
|
21
|
+
* Local-first invariant (ADR-0037):
|
|
22
|
+
* `pugi deploy` does NOT read repository files. The Vercel deploy
|
|
23
|
+
* resolves source from the existing ProjectGitBinding row on the
|
|
24
|
+
* admin-api side — the CLI is only a request initiator + status poller.
|
|
25
|
+
*/
|
|
26
|
+
import { fetchDeployStatus, fetchDeployLogs, submitDeployTrigger, } from '@pugi/sdk';
|
|
27
|
+
/**
|
|
28
|
+
* Parse `pugi deploy ...` flags + positionals into a structured shape.
|
|
29
|
+
* Exported so tests can exercise the parser in isolation.
|
|
30
|
+
*/
|
|
31
|
+
export function parseDeployArgs(args) {
|
|
32
|
+
const flags = {};
|
|
33
|
+
const positional = [];
|
|
34
|
+
for (let i = 0; i < args.length; i++) {
|
|
35
|
+
const arg = args[i] ?? '';
|
|
36
|
+
if (arg === '--json') {
|
|
37
|
+
flags.json = true;
|
|
38
|
+
}
|
|
39
|
+
else if (arg === '--target') {
|
|
40
|
+
const next = args[i + 1];
|
|
41
|
+
if (!next)
|
|
42
|
+
return { flags, positional, error: '--target requires a value (vercel|render)' };
|
|
43
|
+
if (next !== 'vercel' && next !== 'render') {
|
|
44
|
+
return { flags, positional, error: `--target must be vercel or render, got "${next}"` };
|
|
45
|
+
}
|
|
46
|
+
flags.target = next;
|
|
47
|
+
i += 1;
|
|
48
|
+
}
|
|
49
|
+
else if (arg.startsWith('--target=')) {
|
|
50
|
+
const value = arg.slice('--target='.length);
|
|
51
|
+
if (value !== 'vercel' && value !== 'render') {
|
|
52
|
+
return { flags, positional, error: `--target must be vercel or render, got "${value}"` };
|
|
53
|
+
}
|
|
54
|
+
flags.target = value;
|
|
55
|
+
}
|
|
56
|
+
else if (arg === '--project') {
|
|
57
|
+
const next = args[i + 1];
|
|
58
|
+
if (!next)
|
|
59
|
+
return { flags, positional, error: '--project requires a value' };
|
|
60
|
+
flags.project = next;
|
|
61
|
+
i += 1;
|
|
62
|
+
}
|
|
63
|
+
else if (arg.startsWith('--project=')) {
|
|
64
|
+
flags.project = arg.slice('--project='.length);
|
|
65
|
+
}
|
|
66
|
+
else if (arg === '--ref') {
|
|
67
|
+
const next = args[i + 1];
|
|
68
|
+
if (!next)
|
|
69
|
+
return { flags, positional, error: '--ref requires a value' };
|
|
70
|
+
flags.ref = next;
|
|
71
|
+
i += 1;
|
|
72
|
+
}
|
|
73
|
+
else if (arg.startsWith('--ref=')) {
|
|
74
|
+
flags.ref = arg.slice('--ref='.length);
|
|
75
|
+
}
|
|
76
|
+
else if (arg === '--target-env') {
|
|
77
|
+
const next = args[i + 1];
|
|
78
|
+
if (!next)
|
|
79
|
+
return { flags, positional, error: '--target-env requires a value' };
|
|
80
|
+
if (next !== 'production' && next !== 'preview') {
|
|
81
|
+
return {
|
|
82
|
+
flags,
|
|
83
|
+
positional,
|
|
84
|
+
error: `--target-env must be production or preview, got "${next}"`,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
flags.targetEnv = next;
|
|
88
|
+
i += 1;
|
|
89
|
+
}
|
|
90
|
+
else if (arg.startsWith('--target-env=')) {
|
|
91
|
+
const value = arg.slice('--target-env='.length);
|
|
92
|
+
if (value !== 'production' && value !== 'preview') {
|
|
93
|
+
return {
|
|
94
|
+
flags,
|
|
95
|
+
positional,
|
|
96
|
+
error: `--target-env must be production or preview, got "${value}"`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
flags.targetEnv = value;
|
|
100
|
+
}
|
|
101
|
+
else if (arg === '--integration') {
|
|
102
|
+
const next = args[i + 1];
|
|
103
|
+
if (!next)
|
|
104
|
+
return { flags, positional, error: '--integration requires a value' };
|
|
105
|
+
flags.integration = next;
|
|
106
|
+
i += 1;
|
|
107
|
+
}
|
|
108
|
+
else if (arg.startsWith('--integration=')) {
|
|
109
|
+
flags.integration = arg.slice('--integration='.length);
|
|
110
|
+
}
|
|
111
|
+
else if (arg === '--status') {
|
|
112
|
+
const next = args[i + 1];
|
|
113
|
+
if (!next)
|
|
114
|
+
return { flags, positional, error: '--status requires a deployment id' };
|
|
115
|
+
flags.status = next;
|
|
116
|
+
i += 1;
|
|
117
|
+
}
|
|
118
|
+
else if (arg.startsWith('--status=')) {
|
|
119
|
+
flags.status = arg.slice('--status='.length);
|
|
120
|
+
}
|
|
121
|
+
else if (arg === '--logs') {
|
|
122
|
+
const next = args[i + 1];
|
|
123
|
+
if (!next)
|
|
124
|
+
return { flags, positional, error: '--logs requires a deployment id' };
|
|
125
|
+
flags.logs = next;
|
|
126
|
+
i += 1;
|
|
127
|
+
}
|
|
128
|
+
else if (arg.startsWith('--logs=')) {
|
|
129
|
+
flags.logs = arg.slice('--logs='.length);
|
|
130
|
+
}
|
|
131
|
+
else if (arg === '--tail') {
|
|
132
|
+
flags.tail = true;
|
|
133
|
+
}
|
|
134
|
+
else if (arg.startsWith('--')) {
|
|
135
|
+
return { flags, positional, error: `unknown flag: ${arg}` };
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
positional.push(arg);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return { flags, positional };
|
|
142
|
+
}
|
|
143
|
+
export function usage() {
|
|
144
|
+
return [
|
|
145
|
+
'Usage:',
|
|
146
|
+
' pugi deploy --target vercel <vercelProject> --project <id> [--target-env production|preview] [--ref <git-ref>] [--integration <id>]',
|
|
147
|
+
' pugi deploy --target render <renderService> --project <id> [--ref <git-ref>]',
|
|
148
|
+
' pugi deploy --status <deployment-id>',
|
|
149
|
+
' pugi deploy --logs <deployment-id> [--tail]',
|
|
150
|
+
'',
|
|
151
|
+
'Flags:',
|
|
152
|
+
' --target vercel|render Provider to deploy to.',
|
|
153
|
+
' --project <id> Pugi project id (required for trigger).',
|
|
154
|
+
' --ref <git-ref> Optional Git ref. Defaults to the binding default branch.',
|
|
155
|
+
' --target-env production|preview',
|
|
156
|
+
' Vercel deploy environment. Defaults to production.',
|
|
157
|
+
' --integration <id> Disambiguate when multiple integrations are active.',
|
|
158
|
+
' --status <id> Show the current status for a deployment.',
|
|
159
|
+
' --logs <id> [--tail] Fetch log tail. With --tail, polls until terminal.',
|
|
160
|
+
' --json Emit machine-readable JSON envelopes.',
|
|
161
|
+
'',
|
|
162
|
+
'Exit codes:',
|
|
163
|
+
' 0 success',
|
|
164
|
+
' 1 deployment failed / refused',
|
|
165
|
+
' 2 transient (rate-limited, runtime down, retry-safe)',
|
|
166
|
+
].join('\n');
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Main entry point. Returns the exit code; the CLI shim sets
|
|
170
|
+
* `process.exitCode = result` so tests can drive this without a child
|
|
171
|
+
* process and the REPL can poll the value.
|
|
172
|
+
*/
|
|
173
|
+
export async function runDeployCommand(args, io, deps) {
|
|
174
|
+
const parsed = parseDeployArgs(args);
|
|
175
|
+
if (parsed.error) {
|
|
176
|
+
if (parsed.flags.json) {
|
|
177
|
+
io.write(`${JSON.stringify({ command: 'deploy', ok: false, error: parsed.error }, null, 2)}\n`);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
io.writeError(parsed.error);
|
|
181
|
+
io.writeError(usage());
|
|
182
|
+
}
|
|
183
|
+
return 2;
|
|
184
|
+
}
|
|
185
|
+
const { flags, positional } = parsed;
|
|
186
|
+
// Branch 1: --status <id>
|
|
187
|
+
if (flags.status) {
|
|
188
|
+
return runStatus(flags.status, flags, io, deps);
|
|
189
|
+
}
|
|
190
|
+
// Branch 2: --logs <id>
|
|
191
|
+
if (flags.logs) {
|
|
192
|
+
return runLogs(flags.logs, flags, io, deps);
|
|
193
|
+
}
|
|
194
|
+
// Branch 3: trigger via --target <vercel|render>
|
|
195
|
+
if (!flags.target) {
|
|
196
|
+
if (flags.json) {
|
|
197
|
+
io.write(`${JSON.stringify({
|
|
198
|
+
command: 'deploy',
|
|
199
|
+
ok: false,
|
|
200
|
+
error: 'No --target specified. Use --target vercel|render, or --status / --logs to query existing deploys.',
|
|
201
|
+
}, null, 2)}\n`);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
io.writeError('No --target specified. Use --target vercel|render, or --status / --logs to query existing deploys.');
|
|
205
|
+
io.writeError(usage());
|
|
206
|
+
}
|
|
207
|
+
return 2;
|
|
208
|
+
}
|
|
209
|
+
const projectKey = positional[0];
|
|
210
|
+
if (!projectKey) {
|
|
211
|
+
const msg = flags.target === 'vercel'
|
|
212
|
+
? 'pugi deploy --target vercel requires a Vercel project name as the positional argument'
|
|
213
|
+
: 'pugi deploy --target render requires a Render service name as the positional argument';
|
|
214
|
+
if (flags.json) {
|
|
215
|
+
io.write(`${JSON.stringify({ command: 'deploy', ok: false, error: msg }, null, 2)}\n`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
io.writeError(msg);
|
|
219
|
+
io.writeError(usage());
|
|
220
|
+
}
|
|
221
|
+
return 2;
|
|
222
|
+
}
|
|
223
|
+
if (!flags.project) {
|
|
224
|
+
const msg = 'pugi deploy trigger requires --project <pugi-project-id>';
|
|
225
|
+
if (flags.json) {
|
|
226
|
+
io.write(`${JSON.stringify({ command: 'deploy', ok: false, error: msg }, null, 2)}\n`);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
io.writeError(msg);
|
|
230
|
+
io.writeError(usage());
|
|
231
|
+
}
|
|
232
|
+
return 2;
|
|
233
|
+
}
|
|
234
|
+
const config = deps.resolveConfig();
|
|
235
|
+
if (!config) {
|
|
236
|
+
const msg = 'Not authenticated. Run `pugi login` first.';
|
|
237
|
+
if (flags.json) {
|
|
238
|
+
io.write(`${JSON.stringify({ command: 'deploy', ok: false, error: msg }, null, 2)}\n`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
io.writeError(msg);
|
|
242
|
+
}
|
|
243
|
+
return 1;
|
|
244
|
+
}
|
|
245
|
+
let result;
|
|
246
|
+
if (flags.target === 'vercel') {
|
|
247
|
+
result = await submitDeployTrigger(config, 'vercel', {
|
|
248
|
+
schema: 1,
|
|
249
|
+
projectId: flags.project,
|
|
250
|
+
vercelProject: projectKey,
|
|
251
|
+
...(flags.integration ? { integrationId: flags.integration } : {}),
|
|
252
|
+
...(flags.targetEnv ? { target: flags.targetEnv } : {}),
|
|
253
|
+
...(flags.ref ? { ref: flags.ref } : {}),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
result = await submitDeployTrigger(config, 'render', {
|
|
258
|
+
schema: 1,
|
|
259
|
+
projectId: flags.project,
|
|
260
|
+
renderService: projectKey,
|
|
261
|
+
...(flags.ref ? { ref: flags.ref } : {}),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
return emitTriggerResult(result, flags, io);
|
|
265
|
+
}
|
|
266
|
+
function emitTriggerResult(result, flags, io) {
|
|
267
|
+
if (result.status === 'ok') {
|
|
268
|
+
if (flags.json) {
|
|
269
|
+
io.write(`${JSON.stringify({ command: 'deploy.trigger', ok: true, deployment: result.response }, null, 2)}\n`);
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
io.write(renderStatusTable(result.response, 'queued'));
|
|
273
|
+
}
|
|
274
|
+
return 0;
|
|
275
|
+
}
|
|
276
|
+
return emitDeployFailure('deploy.trigger', result, flags, io);
|
|
277
|
+
}
|
|
278
|
+
async function runStatus(deploymentId, flags, io, deps) {
|
|
279
|
+
const config = deps.resolveConfig();
|
|
280
|
+
if (!config) {
|
|
281
|
+
const msg = 'Not authenticated. Run `pugi login` first.';
|
|
282
|
+
if (flags.json) {
|
|
283
|
+
io.write(`${JSON.stringify({ command: 'deploy.status', ok: false, error: msg }, null, 2)}\n`);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
io.writeError(msg);
|
|
287
|
+
}
|
|
288
|
+
return 1;
|
|
289
|
+
}
|
|
290
|
+
const result = await fetchDeployStatus(config, deploymentId);
|
|
291
|
+
if (result.status === 'ok') {
|
|
292
|
+
if (flags.json) {
|
|
293
|
+
io.write(`${JSON.stringify({ command: 'deploy.status', ok: true, deployment: result.response }, null, 2)}\n`);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
io.write(renderStatusTable(result.response, 'current'));
|
|
297
|
+
}
|
|
298
|
+
return statusToExitCode(result.response.status);
|
|
299
|
+
}
|
|
300
|
+
return emitDeployFailure('deploy.status', result, flags, io);
|
|
301
|
+
}
|
|
302
|
+
async function runLogs(deploymentId, flags, io, deps) {
|
|
303
|
+
const config = deps.resolveConfig();
|
|
304
|
+
if (!config) {
|
|
305
|
+
const msg = 'Not authenticated. Run `pugi login` first.';
|
|
306
|
+
if (flags.json) {
|
|
307
|
+
io.write(`${JSON.stringify({ command: 'deploy.logs', ok: false, error: msg }, null, 2)}\n`);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
io.writeError(msg);
|
|
311
|
+
}
|
|
312
|
+
return 1;
|
|
313
|
+
}
|
|
314
|
+
const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
315
|
+
let lastTerminal = false;
|
|
316
|
+
let lastStatus = 'queued';
|
|
317
|
+
let lastLogs = '';
|
|
318
|
+
// Single-shot vs --tail. The tail loop is bounded by the 10-minute hard
|
|
319
|
+
// ceiling so a runaway runtime doesn't keep a CI job pinned forever.
|
|
320
|
+
const startedAt = Date.now();
|
|
321
|
+
const maxMs = 10 * 60 * 1000;
|
|
322
|
+
const pollIntervalMs = 3_000;
|
|
323
|
+
while (true) {
|
|
324
|
+
const result = await fetchDeployLogs(config, deploymentId);
|
|
325
|
+
if (result.status !== 'ok') {
|
|
326
|
+
return emitDeployFailure('deploy.logs', result, flags, io);
|
|
327
|
+
}
|
|
328
|
+
const { response } = result;
|
|
329
|
+
lastTerminal = response.terminal;
|
|
330
|
+
lastStatus = response.status;
|
|
331
|
+
lastLogs = response.logs;
|
|
332
|
+
if (flags.json) {
|
|
333
|
+
io.write(`${JSON.stringify({ command: 'deploy.logs', ok: true, snapshot: response }, null, 2)}\n`);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
io.write(response.logs.endsWith('\n') ? response.logs : `${response.logs}\n`);
|
|
337
|
+
}
|
|
338
|
+
if (!flags.tail)
|
|
339
|
+
break;
|
|
340
|
+
if (response.terminal)
|
|
341
|
+
break;
|
|
342
|
+
if (Date.now() - startedAt > maxMs) {
|
|
343
|
+
io.writeError(`--tail timed out after ${Math.floor(maxMs / 60_000)} minutes; deployment still ${response.status}. Re-run with --status to confirm.`);
|
|
344
|
+
return 2;
|
|
345
|
+
}
|
|
346
|
+
await sleep(pollIntervalMs);
|
|
347
|
+
}
|
|
348
|
+
// Suppress unused-warning safe-guards in single-shot path.
|
|
349
|
+
void lastTerminal;
|
|
350
|
+
void lastLogs;
|
|
351
|
+
return statusToExitCode(lastStatus);
|
|
352
|
+
}
|
|
353
|
+
function emitDeployFailure(command, result, flags, io) {
|
|
354
|
+
if (result.status === 'ok')
|
|
355
|
+
return 0;
|
|
356
|
+
if (flags.json) {
|
|
357
|
+
io.write(`${JSON.stringify({ command, ok: false, ...result }, null, 2)}\n`);
|
|
358
|
+
}
|
|
359
|
+
switch (result.status) {
|
|
360
|
+
case 'unauthenticated':
|
|
361
|
+
if (!flags.json) {
|
|
362
|
+
io.writeError('Runtime rejected credentials. Re-run `pugi login` or refresh your API key.');
|
|
363
|
+
}
|
|
364
|
+
return 1;
|
|
365
|
+
case 'endpoint_missing':
|
|
366
|
+
if (!flags.json) {
|
|
367
|
+
io.writeError('Deploy endpoint not deployed on this runtime. Update your runtime or set PUGI_API_URL to a runtime that supports /api/pugi/deploy/*.');
|
|
368
|
+
}
|
|
369
|
+
return 2;
|
|
370
|
+
case 'not_configured':
|
|
371
|
+
if (!flags.json) {
|
|
372
|
+
io.writeError('Provider not configured on this runtime. Try `pugi deploy --target vercel` until Render ships in Sprint 2.');
|
|
373
|
+
}
|
|
374
|
+
return 2;
|
|
375
|
+
case 'not_found':
|
|
376
|
+
if (!flags.json) {
|
|
377
|
+
io.writeError('Deployment not found for this tenant.');
|
|
378
|
+
}
|
|
379
|
+
return 1;
|
|
380
|
+
case 'rate_limited':
|
|
381
|
+
if (!flags.json) {
|
|
382
|
+
const retrySec = Math.max(1, Math.ceil(result.retryAfterMs / 1000));
|
|
383
|
+
io.writeError(`Runtime rate-limited. Retry in ${retrySec}s. (Vercel Hobby cap is the common cause.)`);
|
|
384
|
+
}
|
|
385
|
+
return 2;
|
|
386
|
+
case 'failed':
|
|
387
|
+
if (!flags.json) {
|
|
388
|
+
io.writeError(`Deploy call failed: ${result.message}`);
|
|
389
|
+
}
|
|
390
|
+
// Network / 5xx → transient. Schema validation / 4xx → permanent.
|
|
391
|
+
// We cannot perfectly disambiguate here, so map HTTP < 500 to 1
|
|
392
|
+
// (caller error, fix and retry) and the rest to 2 (transient).
|
|
393
|
+
return result.code >= 500 || result.code === 0 ? 2 : 1;
|
|
394
|
+
default:
|
|
395
|
+
// Exhaustiveness: TS catches new variants at compile time. Runtime
|
|
396
|
+
// fall-through keeps the CLI from hanging if a future SDK version
|
|
397
|
+
// adds a status the CLI doesn't yet know about.
|
|
398
|
+
if (!flags.json) {
|
|
399
|
+
io.writeError(`Unknown deploy result.`);
|
|
400
|
+
}
|
|
401
|
+
return 2;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
function statusToExitCode(status) {
|
|
405
|
+
switch (status) {
|
|
406
|
+
case 'ready':
|
|
407
|
+
case 'queued':
|
|
408
|
+
case 'building':
|
|
409
|
+
return 0;
|
|
410
|
+
case 'error':
|
|
411
|
+
return 1;
|
|
412
|
+
case 'canceled':
|
|
413
|
+
return 1;
|
|
414
|
+
default:
|
|
415
|
+
return 0;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
function renderStatusTable(response, context) {
|
|
419
|
+
const lines = [];
|
|
420
|
+
lines.push(context === 'queued' ? 'Deployment queued.' : 'Deployment status:');
|
|
421
|
+
lines.push(` id: ${response.id}`);
|
|
422
|
+
lines.push(` provider: ${response.provider}`);
|
|
423
|
+
lines.push(` project: ${response.projectId}`);
|
|
424
|
+
lines.push(` status: ${response.status}`);
|
|
425
|
+
if (response.url)
|
|
426
|
+
lines.push(` url: ${response.url}`);
|
|
427
|
+
if (response.providerDeploymentId)
|
|
428
|
+
lines.push(` providerDeploymentId: ${response.providerDeploymentId}`);
|
|
429
|
+
lines.push(` createdAt: ${response.createdAt}`);
|
|
430
|
+
lines.push(` updatedAt: ${response.updatedAt}`);
|
|
431
|
+
if (response.error) {
|
|
432
|
+
lines.push('');
|
|
433
|
+
lines.push('--- build error tail ---');
|
|
434
|
+
lines.push(response.error);
|
|
435
|
+
}
|
|
436
|
+
lines.push('');
|
|
437
|
+
return lines.join('\n');
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=deploy.js.map
|