@hybridlabor-api/aos 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/.agents/{agents.md → AGENTS.md} +2 -0
  2. package/.agents/nodes.json +2 -0
  3. package/.claude/hooks/memb-inject.mjs +29 -1
  4. package/.claude/workflows/startcycle-dispatch.mjs +23 -1
  5. package/CLAUDE.md +0 -571
  6. package/THIRD_PARTY_NOTICES.md +38 -0
  7. package/bin/aos-doctor.mjs +1 -1
  8. package/installer.js +13 -9
  9. package/package.json +2 -2
  10. package/skills/basic/bdb-eventagency-skill/SKILL.md +252 -0
  11. package/skills/basic/bdb-shipping-skill/SKILL.md +161 -0
  12. package/skills/basic/godmode-eventtech/SKILL.md +4 -1
  13. package/skills/global_config/aos-project-init/SKILL.md +2 -0
  14. package/skills/global_config/aos-project-init/assets/AGENTS.template.md +1 -1
  15. package/skills/global_config/aos-project-init/scripts/aos-project-doctor.mjs +1 -1
  16. package/skills/global_config/aos-setup/SKILL.md +1 -1
  17. package/skills/global_config/aos-setup/scripts/aos-doctor.mjs +1 -1
  18. package/skills/global_config/ask-tim/SKILL.md +3 -3
  19. package/skills/global_config/deja-memory/SKILL.md +3 -1
  20. package/skills/global_config/plan-canvas/SKILL.md +9 -2
  21. package/skills/global_config/plan-canvas/scripts/lib/plan-canvas/ui.js +10 -2
  22. package/skills/global_config/plan-canvas/scripts/plan-canvas.js +1 -1
  23. package/skills/global_config/read-the-damn-docs/SKILL.md +175 -0
  24. package/skills/global_config/writing-plans/SKILL.md +12 -12
  25. package/skills/global_config/writing-plans-legacy/SKILL.md +15 -2
  26. package/.claude/CLAUDE.md +0 -12
  27. package/mcps/RhinoMCP/docs/content/docs/getting-started/gemini.md +0 -61
  28. /package/{GEMINI.md → RULES.md} +0 -0
@@ -3,7 +3,7 @@ name: plan-canvas
3
3
  description: Open plans and HTML artifacts in a local browser canvas where the human annotates elements, chats, and approves or requests changes without leaving the page. Use when presenting a plan for review, or when feedback like "move this, change that" is easier pointed at than typed.
4
4
  category: bdb-core
5
5
  metadata:
6
- version: "1.0.0"
6
+ version: "1.0.1"
7
7
  origin: affaan-m/ECC
8
8
  license: MIT
9
9
  ---
@@ -28,6 +28,10 @@ AOS from [affaan-m/ECC](https://github.com/affaan-m/ECC).
28
28
  decision — the canvas verdict replaces a typed "yes/proceed".
29
29
  - **Mandatory, not optional**, at the end of `bdbrainstorm` (before writing
30
30
  `state.goal` / handing off to `/startcycle-graph`) and `bdbmediastorm`
31
+ - **Visual Extensions (BuilderIO Integration):** When generating plans, always ask the human which Canvas version they prefer:
32
+ - **Plan-Canvas Preview**: Standard markdown/html review.
33
+ - **Archify Canvas**: For strict architecture schema validation.
34
+ - **Visual Ecosystem**: Use `/visual-plan` (turn text plans into rich visual plans), `/visual-recap` (turn diffs into interactive visual recaps), or `/visual-edit` (open a running local app for visual editing).
31
35
  (before the show-control architecture is considered final) — both produce
32
36
  a plan/spec artifact a human must approve before anything downstream
33
37
  proceeds. See each skill's own "Plan Canvas Review" section.
@@ -75,11 +79,14 @@ If your turn ends with nothing listening, the message sits in the queue and,
75
79
  from the human's side of the glass, sending appears to do nothing at all.
76
80
 
77
81
  So **run `await` as a background task** when your harness supports one (in
78
- Claude Code, a Bash call with `run_in_background: true`). It exits the moment
82
+ Claude Code, a Bash call with `run_in_background: true`; in Antigravity, use `WaitMsBeforeAsync: 500`). It exits the moment
79
83
  feedback arrives and the harness hands you the JSON, which keeps the loop alive
80
84
  across turns instead of dying with the foreground call. A foreground `await`
81
85
  works too, but only until the harness time-limits it.
82
86
 
87
+ > **OpenCode Limitations**: OpenCode currently lacks reactive background tasks (like AGY's `WaitMsBeforeAsync`) or background shells. If you are running in OpenCode, you must poll explicitly if needed (e.g., `aos-plan-canvas await <file> --timeout-ms 10000`), or launch the opencode-subagent to handle the waiting.
88
+ > Furthermore, OpenCode's execution environment often fails to launch the default browser automatically. **Whenever you use `open` or `await`, ALWAYS print the direct Canvas URL to the user in chat (e.g., "🔗 Canvas geöffnet: http://127.0.0.1:4519/canvas/...")** so they can click it manually.
89
+
83
90
  One backstop exists, and it is not an excuse to skip the above:
84
91
 
85
92
  - `aos-plan-canvas pending` lists feedback queued with no listener. Check it
@@ -544,7 +544,11 @@ function renderMarkdownArtifactHtml(bodyHtml, { title, sdkSrc }) {
544
544
  ${TOKENS_CSS}
545
545
  *{margin:0;padding:0;box-sizing:border-box}
546
546
  body{font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.65;font-size:14.5px}
547
- .doc{max-width:860px;margin:0 auto;padding:44px 36px 90px}
547
+ /* Two tracks: tables, code and diagrams take the whole frame; prose keeps a
548
+ readable measure. A single narrow column starved wide tables, and a single
549
+ wide column made body text unreadable. */
550
+ .doc{max-width:min(1560px,100%);margin:0 auto;padding:44px 36px 90px}
551
+ .doc>p,.doc>ul,.doc>ol,.doc>blockquote{max-width:104ch}
548
552
  h1,h2,h3,h4,h5,h6{line-height:1.25;margin:1.6em 0 .55em;letter-spacing:-.01em}
549
553
  h1{font-size:26px;margin-top:.3em;padding-bottom:.45em;border-bottom:1px solid var(--border)}
550
554
  h1:after{content:'';display:block;width:56px;height:3px;margin-top:14px;border-radius:2px;background:linear-gradient(90deg,var(--accent),var(--pink))}
@@ -563,7 +567,11 @@ ${TOKENS_CSS}
563
567
  pre code{background:none;border:none;padding:0;font-size:12.5px;line-height:1.55}
564
568
  blockquote{border-left:3px solid var(--accent);background:var(--accent-glow);border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:8px 14px;color:var(--text2)}
565
569
  table{width:100%;border-collapse:collapse;font-size:13px;display:block;overflow-x:auto}
566
- th,td{text-align:left;padding:7px 12px;border:1px solid var(--border)}
570
+ /* a clipped column must look scrollable, not truncated: keep the scrollbar visible */
571
+ table::-webkit-scrollbar{height:9px}
572
+ table::-webkit-scrollbar-thumb{background:var(--border-light);border-radius:99px}
573
+ table::-webkit-scrollbar-track{background:var(--bg3);border-radius:99px}
574
+ th,td{text-align:left;padding:7px 10px;border:1px solid var(--border)}
567
575
  th{background:var(--bg3);font-weight:600;font-size:11.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--text2);white-space:nowrap}
568
576
  tbody tr:hover{background:var(--surface-hover)}
569
577
  hr{border:none;border-top:1px solid var(--border);margin:1.6em 0}
@@ -37,7 +37,7 @@ const {
37
37
  resolvePort
38
38
  } = require('./lib/plan-canvas/server');
39
39
 
40
- const VERSION = '1.0.0'; // vendored Plan Canvas protocol version; matches SKILL.md metadata.version.
40
+ const VERSION = '1.0.1'; // vendored Plan Canvas protocol version; matches SKILL.md metadata.version.
41
41
  // Bump when the vendored JS changes, to force a stale detached server to restart.
42
42
 
43
43
  const SAFE_REQUEST_PATHS = new Set([
@@ -0,0 +1,175 @@
1
+ ---
2
+ name: read-the-damn-docs
3
+ description: >-
4
+ Use when implementing, integrating, upgrading, debugging, or answering
5
+ anything involving third-party APIs, libraries, frameworks, CLIs, cloud
6
+ services, model or provider SDKs, fast-moving product behavior, unfamiliar
7
+ repo docs or specs, errors that may indicate API drift, or high-stakes auth,
8
+ security, billing, data, migration, deployment, compliance, or privacy
9
+ behavior. Forces a docs pass before coding from memory.
10
+ category: engineering-method
11
+ source: BuilderIO/skills
12
+ ---
13
+
14
+ # Read The Damn Docs
15
+
16
+ Do not guess where authoritative docs can answer the question. The most common
17
+ correct move is to search for the current official docs, open the relevant
18
+ pages, and read them before writing code. For APIs, versions, provider behavior,
19
+ config, limits, lifecycle hooks, or security-sensitive flows, ground the answer
20
+ in what the docs actually say.
21
+
22
+ **Division of labour with `AGENTS.md`.** `AGENTS.md`'s *Zero guesswork* rule
23
+ states the obligation and the trigger list. This skill is the **procedure** that
24
+ discharges it. If the two ever disagree, the rule in `AGENTS.md` wins and this
25
+ file is the thing that should change.
26
+
27
+ Adapted from [BuilderIO/skills](https://github.com/BuilderIO/skills) (MIT).
28
+ Prose only — no upstream scripts, no agent config, no dependency.
29
+
30
+ ---
31
+
32
+ ## 1. Docs-First Triggers
33
+
34
+ Read docs before proceeding when any of these are true:
35
+
36
+ - The user asks for "latest", "current", "official", "supported", "best
37
+ practice", "recommended", "today", "now", or "look it up".
38
+ - The needed docs are **not** already in the repo or supplied by the user.
39
+ Search for the official docs rather than hoping model memory is current.
40
+ - The task adds, upgrades, configures, or imports a package, SDK, framework,
41
+ plugin, CLI, model, cloud resource, or provider integration.
42
+ - The API is fast-moving or version-sensitive: AI SDKs, model provider APIs,
43
+ Next.js, React, Tailwind, Vite, Drizzle, Prisma, Stripe, GitHub, Slack,
44
+ Notion, browser APIs, deployment platforms, auth libraries, and similar.
45
+ - The implementation depends on auth, OAuth scopes, permissions, secrets,
46
+ webhooks, billing, payments, PII, encryption, data retention, migrations,
47
+ retries, rate limits, quotas, caching, deploys, or compliance.
48
+ - An error mentions deprecation, unknown options, missing exports, invalid
49
+ config, unsupported fields, changed defaults, or version mismatch.
50
+ - The repo has local docs, ADRs, generated schemas, OpenAPI specs, route or
51
+ action registries, design-system docs, or package-level READMEs that could
52
+ define the contract.
53
+ - The choice is expensive to reverse: public wire formats, database schema,
54
+ migration strategy, persistent IDs, event names, customer-visible behavior,
55
+ or external automation contracts.
56
+ - You catch yourself about to write "usually", "probably", "I think", "from
57
+ memory", or code copied from model memory for an external API.
58
+
59
+ ---
60
+
61
+ ## 2. What Counts As Docs
62
+
63
+ Use the most authoritative source available:
64
+
65
+ - **Local** repo docs, specs, ADRs, schemas, generated types, package READMEs,
66
+ and tests — for project-specific behaviour.
67
+ - **Official** product docs, API references, migration guides, changelogs,
68
+ release notes, and SDK source or type definitions — for third-party
69
+ behaviour. Find these with web search when you do not already have the URL.
70
+ - **Package registry metadata** for versions. Before adding a dependency, check
71
+ its current version (`npm view <pkg> version`, `pnpm view <pkg> version`, or
72
+ the ecosystem equivalent), then read the docs for *that* major version.
73
+ - **Source code or type definitions** when official docs are incomplete. Treat
74
+ this as evidence, not folklore.
75
+
76
+ Avoid Stack Overflow, old blog posts, random snippets, and memory as the
77
+ primary source when official docs exist. Use community sources only to debug
78
+ symptoms *after* the authoritative contract is known.
79
+
80
+ **In this environment:** `firecrawl-search` and `firecrawl-scrape` are the
81
+ installed tools for the web pass, and `deja-memory` / `memb_mcp` can surface
82
+ prior project knowledge. Neither substitutes for a docs read.
83
+
84
+ ---
85
+
86
+ ## 3. Required Workflow
87
+
88
+ 1. **Identify the exact surface** — package name, installed version, target
89
+ version, provider endpoint, CLI command, config file, local helper, schema,
90
+ or product feature.
91
+ 2. **Search for the current official docs**, unless the relevant docs are
92
+ already local or the user supplied a URL. Targeted queries work best:
93
+ `<product> <feature> official docs`, `<package> migration guide`,
94
+ `<provider> API reference`.
95
+ 3. **Open and read the docs closest to that surface.** Prefer local docs first
96
+ for internal code, then official upstream docs. For new packages, verify the
97
+ latest version before writing imports, config, or install commands.
98
+ 4. **Extract the few facts needed** — option names, imports, lifecycle rules,
99
+ default behaviour, breaking changes, limits, permissions, and examples for
100
+ the current major version.
101
+ 5. **Implement or answer using those facts.** If the docs conflict with existing
102
+ code, inspect the local code path and call out the discrepancy — do not
103
+ silently pick one.
104
+ 6. **Verify with the smallest useful check** — typecheck, tests, build, CLI dry
105
+ run, API schema validation, or a local reproduction. This is the same
106
+ "narrowest quiet validation" rule the Shipping gate enforces.
107
+ 7. **Name what you read** in the final answer, when that evidence affected the
108
+ recommendation or the implementation.
109
+
110
+ ---
111
+
112
+ ## 4. Examples That Must Trigger A Docs Pass
113
+
114
+ - *"Add Tailwind to this app."* — Check the current Tailwind major and its
115
+ install docs before creating config files or assuming old PostCSS setup.
116
+ - *"Stream responses with the AI SDK."* — Verify the current SDK major,
117
+ provider package names, streaming helpers, and runtime examples.
118
+ - *"Wire up Stripe webhooks."* — Read current signature verification, event
119
+ retry, endpoint secret, and framework body-parsing docs before coding.
120
+ - *"Fix this Next.js caching bug."* — Read the docs for the **installed** major
121
+ and router mode before assuming cache invalidation semantics.
122
+ - *"Add Drizzle migrations."* — Read the current kit docs **and** the existing
123
+ repo migration conventions before generating files.
124
+ - *"Create a GitHub Action."* — Read Actions syntax and permissions docs,
125
+ especially `pull_request`, `workflow_run`, OIDC, tokens, and artifacts.
126
+ - *"Why does this OAuth flow fail?"* — Read the provider's scopes, redirect URI,
127
+ PKCE, token refresh, and app-verification docs before changing code.
128
+ - *"Use this repo's plan/comment/action system."* — Read local docs, route and
129
+ action registries, schemas, and tests before inventing endpoints or props.
130
+ - *"Upgrade Vite/React."* — Read the migration guide for the **exact** target
131
+ major before editing config or imports.
132
+ - *"What model should we use?"* — Read current provider model docs, pricing and
133
+ limits pages, and SDK examples before recommending.
134
+
135
+ ---
136
+
137
+ ## 5. When A Quick Local Read Is Enough
138
+
139
+ Do not search the web for every tiny edit. A docs pass can be local and brief
140
+ when the answer is already in the repo: existing helper usage, nearby tests,
141
+ typed interfaces, generated clients, ADRs, or package READMEs.
142
+
143
+ But if the task depends on an external tool, package, provider, or current
144
+ product behaviour, a search is usually the right first step. For trivial
145
+ language syntax, typo fixes, formatting, or self-contained code with no
146
+ external contract, proceed normally.
147
+
148
+ ---
149
+
150
+ ## 6. If Docs Are Unavailable
151
+
152
+ If network access, auth, or missing local files prevents reading the docs, say
153
+ that plainly **before** relying on memory. Narrow the uncertainty, inspect
154
+ source or types if available, and do not present the result as
155
+ confirmed-current. A clearly-labelled estimate is useful; an unlabelled one is
156
+ a defect.
157
+
158
+ ---
159
+
160
+ ## 7. Verification
161
+
162
+ - [ ] Every trigger in §1 was checked before writing code, not after.
163
+ - [ ] The exact version in play was established (installed vs. target), and the
164
+ docs read match that major.
165
+ - [ ] At least one authoritative source backs every external API, option name,
166
+ default, limit, and lifecycle claim in the output.
167
+ - [ ] No claim rests on Stack Overflow, a blog post, or model memory as its
168
+ primary source.
169
+ - [ ] Conflicts between docs and local code were surfaced, not silently
170
+ resolved.
171
+ - [ ] The smallest useful verification check was run and its result reported.
172
+ - [ ] The sources consulted are named in the response where they affected the
173
+ recommendation.
174
+ - [ ] Any remaining uncertainty is stated explicitly, with what would resolve it.
175
+ - [ ] No npm dependency, script, or executable was added by this skill.
@@ -182,24 +182,24 @@ If you find issues, fix them inline. No need to re-review — just fix and move
182
182
 
183
183
  ## Execution Handoff
184
184
 
185
- After saving and self-reviewing the plan, link it for your human partner
186
- to read. If they have already explicitly supplied an execution method, ask
187
- them to review the plan and confirm it captures what they want; wait for that
188
- review before implementation, then use the preserved method. Otherwise, ask
189
- them to review the plan and choose an execution method before implementation.
185
+ After saving and self-reviewing the plan, you **MUST** open it in the Plan Canvas for the user to review. Do not ask them to read the markdown file in the terminal.
190
186
 
191
- **When no execution method has already been supplied:**
187
+ 1. **Render Architecture:** If the plan contains complex flows, render them using `aos-archify` (see `archify` skill).
188
+ 2. **Open Canvas:** Run `aos-plan-canvas open docs/plans/<filename>.md` (or `.html` if using archify).
189
+ 3. **Await Feedback:** Run `aos-plan-canvas await docs/plans/<filename>.md` as a background task.
192
190
 
193
- **"Plan complete and saved to `docs/plans/<filename>.md`. Please review the plan. Which execution approach would you prefer?**
191
+ Tell the user:
192
+ **"Plan complete and saved! Ich habe den Plan im Canvas für dich geöffnet. Bitte schau ihn dir im Browser an und gib mir dort dein Feedback oder klicke auf Approve."**
194
193
 
195
- - **Subagent-driven** - A fresh subagent implements each task and a fresh reviewer checks it before the next one starts, then a whole-branch review at the end. Most thorough; costs a fresh context per task and per review.
196
- - **Native** - I implement every task myself in this session, the way this harness runs work, then one fresh reviewer on the most capable model checks the whole branch. Cheapest and fastest; no independent review until the end. Runs well with a mid-tier session model, since the plan carries the design.
194
+ *(If running in OpenCode, always explicitly print the Canvas URL in chat so the user can click it).*
197
195
 
198
- **For this plan I recommend <one of the two>, because <one sentence from the plan: how much the tasks depend on each other's interfaces, how many there are, what a shipped mistake would cost>. Does the plan capture what you want, and which approach should we use?"**
196
+ Wait for the `approve` verdict from the Canvas before proceeding to execution.
199
197
 
200
- **When an execution method has already been supplied:**
198
+ **When the plan is approved, ask for the execution method (if not already supplied):**
201
199
 
202
- **"Plan complete and saved to `docs/plans/<filename>.md`. Please review the plan. Does it capture what you want?"**
200
+ **"Welchen Ausführungsansatz sollen wir wählen?**
201
+ - **Subagent-driven** - Ein frischer Subagent für jede Aufgabe. (Am gründlichsten, aber teurer).
202
+ - **Native** - Ich implementiere alle Tasks selbst nacheinander in dieser Session. (Schneller, günstiger)."
203
203
 
204
204
  **If Subagent-driven chosen:**
205
205
  - **REQUIRED SUB-SKILL:** Use subagent-driven-development
@@ -111,9 +111,22 @@ git commit -m "feat: add specific feature"
111
111
 
112
112
  ## Execution Handoff
113
113
 
114
- After saving the plan, offer execution choice:
114
+ After saving the plan, you **MUST** open it in the Plan Canvas for the user to review. Do not ask them to read the markdown file in the terminal.
115
115
 
116
- **"Plan complete and saved to `docs/plans/<filename>.md`. Two execution options:**
116
+ 1. **Render Architecture:** If the plan contains complex flows, render them using `aos-archify` (see `archify` skill).
117
+ 2. **Open Canvas:** Run `aos-plan-canvas open docs/plans/<filename>.md` (or `.html` if using archify).
118
+ 3. **Await Feedback:** Run `aos-plan-canvas await docs/plans/<filename>.md` as a background task.
119
+
120
+ Tell the user:
121
+ **"Plan complete and saved! Ich habe den Plan im Canvas für dich geöffnet. Bitte schau ihn dir im Browser an und gib mir dort dein Feedback oder klicke auf Approve."**
122
+
123
+ *(If running in OpenCode, always explicitly print the Canvas URL in chat so the user can click it).*
124
+
125
+ Wait for the `approve` verdict from the Canvas before proceeding to execution.
126
+
127
+ **When the plan is approved, offer execution choice:**
128
+
129
+ **"Plan is approved. Two execution options:**
117
130
 
118
131
  **1. Subagent-Driven (this session)** - I dispatch fresh subagent per task, review between tasks, fast iteration
119
132
 
package/.claude/CLAUDE.md DELETED
@@ -1,12 +0,0 @@
1
- <!-- memB-start -->
2
- # memB Auto-Injected Context
3
- The following knowledge was automatically retrieved from the memB vector engine.
4
-
5
- ## Global Developer Preferences (Godmode)
6
-
7
- ## Project Context: bdb-dev-optimized-agent-skills
8
- - None
9
- - None
10
- - None
11
- - None
12
- <!-- memB-end -->
@@ -1,61 +0,0 @@
1
- ---
2
- title: Gemini CLI
3
- icon: gemini
4
- weight: 6
5
- prev: docs/getting-started
6
- next: docs/try-it-out
7
- toc: false
8
- author: SteveF
9
- keywords:
10
- - Gemini CLI
11
- - Google
12
- - terminal
13
- - CLI
14
- ---
15
-
16
- [Gemini CLI](https://github.com/google-gemini/gemini-cli) is Google's open-source terminal AI assistant. It speaks MCP, so once you point it at the Rhino MCP server it can drive Rhino & Grasshopper the same way Claude or Codex can.
17
-
18
- If you're choosing between assistants and aren't sure, start with [Claude Desktop](../connector); it's the gentler entry point.
19
-
20
- ## 1. Install Gemini CLI
21
-
22
- [Gemini CLI](https://github.com/google-gemini/gemini-cli) — install and sign in. See the [Gemini CLI install guide](https://github.com/google-gemini/gemini-cli#installation) if you need it.
23
-
24
- ## 2. Install the Rhino plugin
25
-
26
- {{< yak package="Rhino-MCP-Platform" version="8" >}}
27
- {{< yak package="Rhino-MCP-Platform" version="9" >}}
28
-
29
- If that doesn't work you can try the below:
30
-
31
- 1. Open Rhino 8 (and/or Rhino 9 WIP)
32
- 2. Run the `PackageManager` command
33
- 3. Search for, and install Rhino-MCP-Platform
34
-
35
- ## 3. Wire up the Rhino MCP server
36
-
37
- 1. In Rhino, run the `MCPConnect` command. It prints the command Gemini CLI needs to launch the Rhino MCP router.
38
- 2. Open `~/.gemini/settings.json` (create it if it doesn't exist).
39
- 3. Add an `mcpServers` entry for the Rhino server, pasting the command and args from step 1:
40
-
41
- ```json
42
- {
43
- "mcpServers": {
44
- "rhino": {
45
- "command": "rhino-mcp-router",
46
- "args": ["--default-version", "8"]
47
- }
48
- }
49
- }
50
- ```
51
-
52
- 4. Restart Gemini CLI. The `rhino` server should appear when you list MCP servers from inside a session.
53
-
54
- > **Pick the Rhino version** by changing the `--default-version` arg.
55
- > Use `8` for Rhino 8, `9` for Rhino 9 WIP/BETA.
56
-
57
- ## Try it out
58
-
59
- <blockquote class="page-note">
60
- Start a Gemini CLI session and follow the prompts on the <a href="../../try-it-out">Try It Out</a> page.
61
- </blockquote>
File without changes