You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(docs): clarify quickstart + Mission Control Ch 1-2 from user feedback
60-second quickstart (python.mdx):
- Lede now leads with the cross-machine promise
- Define the terms "service" and "consumer" inline (not just "producer")
- Python consumer uses dynamic proxy — drops the
"from hello_service import" line that broke cross-machine demos
- Windows PowerShell variants for ASTER_ENDPOINT_ADDR commands
- New "What just happened" section explains the 3 steps + cross-network
semantics
- Drop "Dev mode vs production" — out of scope for 60 seconds
- "What's next" reduced to single Mission Control CTA
Mission Control walkthrough (mission-control.mdx):
- New "Skip to the code" tip box at the top linking the Python and
TypeScript example repos for readers who'd rather clone and run
- Chapter 1: explicit "this is the address from control.py" framing
for aster shell / aster call placeholders, ephemeral-key warning,
Windows PowerShell variant using --% (the stop-parsing operator)
- Chapter 2 fully rewritten:
- Full control.py / control.ts files instead of "... from Chapter 1 ..."
snippets, so readers know exactly what to copy
- Explicit restart instructions + reminder that the address changes
- New logs.py / logs.ts test submitter so tailLogs has data to stream
- CLI command now includes the missing "cd services/MissionControl"
- Three-terminals callout explaining the natural shape of a
streaming demo (server, submitter, tail consumer)
# ^^^^^^^ this is your control plane's public-key address — copy it for the next step
201
209
```
202
210
203
-
In another terminal, connect and inspect:
211
+
In another terminal, connect and inspect. **Replace `aster1Qm...` below with the address your `control.py` just printed** (the address is unique to each run; it's an ephemeral key in dev mode):
# ^^^^^^^ this is your control plane's public-key address — copy it for the next step
258
267
```
259
268
260
-
In another terminal, connect and inspect:
269
+
In another terminal, connect and inspect. **Replace `aster1Qm...` below with the address your `control.ts` just printed** (the address is unique to each run; it's an ephemeral key in dev mode):
261
270
262
271
```bash
263
272
aster shell aster1Qm...
@@ -268,12 +277,20 @@ aster shell aster1Qm...
268
277
</TabItem>
269
278
</LanguageTabs>
270
279
271
-
Or skip the shell entirely — call it straight from the command line:
280
+
Or skip the shell entirely — call it straight from the command line. Replace `aster1Qm...` with your address:
**Goal:** Agents push logs into the control plane. Operators tail them
296
313
in real time using server streaming.
297
314
315
+
This chapter extends `control.py` (or `control.ts`) with two new methods: `submitLog` (a unary RPC) and `tailLogs` (a server-streaming RPC). To save you from puzzling over which lines go where, the full updated file is below — replace your existing `control.py` / `control.ts` with it.
316
+
298
317
<LanguageTabs>
299
318
<TabItemvalue="python">
300
319
320
+
Replace your `control.py` with this complete version:
321
+
301
322
```python
323
+
# control.py
324
+
import asyncio
302
325
from collections.abc import AsyncIterator
303
-
from aster import server_stream
326
+
from dataclasses import dataclass
327
+
from aster import AsterServer, service, rpc, server_stream, wire_type
304
328
305
-
# Ordered severity used by the level filter below.
**Restart the service.** Stop the previous run with `Ctrl+C`, then start the new version:
532
+
533
+
```bash
534
+
bun run control.ts
535
+
# → aster1Qmxxxxxxxx... ← this is a NEW address; the old one is gone
420
536
```
421
537
538
+
The address changes on every restart in dev mode (it's an ephemeral key). Copy the new address — you'll need it for both terminals below.
539
+
422
540
</TabItem>
423
541
</LanguageTabs>
424
542
543
+
### Submit some logs to stream
544
+
545
+
`tailLogs` blocks until log entries arrive. For the demo we need a process that's actively pushing logs, so the stream has something to show. Save this as `logs.py` (or `logs.ts`) and run it in a **second terminal**:
546
+
547
+
<LanguageTabs>
548
+
<TabItemvalue="python">
549
+
550
+
```python
551
+
# logs.py — submits one log entry per second so tailLogs has something to stream.
552
+
# Usage: python logs.py <aster1...address>
553
+
import asyncio
554
+
import sys
555
+
import time
556
+
from aster import AsterClient
557
+
558
+
asyncdefmain():
559
+
iflen(sys.argv) <2:
560
+
print("Usage: python logs.py <aster1...address>")
561
+
sys.exit(1)
562
+
563
+
asyncwith AsterClient(address=sys.argv[1]) as client:
You should see entries scroll past in real time as `logs.py` submits them. Note the `level="warn"` filter excludes `info` entries, so you'll see roughly two out of every three submitted logs.
651
+
652
+
> **Three terminals?** Yes — server (`control.py`), submitter (`logs.py`), and tail consumer (`aster shell`). That's the natural shape of any streaming demo: someone produces, someone consumes, the server brokers between them.
0 commit comments