Skip to content

Commit c926974

Browse files
committed
Split the tutorial into Cloud and Local lab courses, add a tutor skill
The single README walkthrough becomes two linear lab courses in the shape of the Orca University labs: one file per lab, each with "Before you start", three or four steps with a check, a quiz, a "Try it yourself" task, a clean-up where one is needed, and a recap. - labs/cloud: the course the hackathon runs, on a team card. Its lab scripts, agent definitions and turn loop are the ones main had. - labs/local: the whole stack on a laptop. local/compose.yaml runs Ursa for Kafka (a diskless topic), Oxia, RustFS, Karapace, RisingWave and RisingWave's MCP server. local/engine.sh starts `ork local` with the AI Gateway and lets the gateway reach the MCP server; write-env.sh, sql.sh and down.sh do the rest. - TUTORIAL_STACK=cloud|local in .env picks the agent definitions (agent/<stack>/), the SQL (sql/<stack>/), Kafka auth, the vault and the state file, on all three paths. - Python and TypeScript send the message before they open the event stream on the local stack only: `ork local` answers a stream opened on a quiet session at its next keep-alive, 15 s later. A team card keeps main's order. - Seeders replay data/login_events.jsonl into an empty topic; lab-ork runs every check with the saved ids filled in. - skills/data-agent-tutor walks a learner through a course one step at a time; docs/tutor.md says how to start it. - scripts/check-labs.sh lints the labs' structure and links; CI gains `local` and `labs` jobs. The Local course was run end to end with the model answering, on the CLI, Python and TypeScript paths. Nothing that needs a team card was run for this change.
1 parent 4340c6b commit c926974

97 files changed

Lines changed: 8288 additions & 852 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.agents/skills/data-agent-tutor‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../skills/data-agent-tutor

‎.claude-plugin/marketplace.json‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "dataplusagent-hackathon-tutorial",
3+
"owner": {
4+
"name": "StreamNative"
5+
},
6+
"metadata": {
7+
"description": "The tutor for the Data + Agent Hackathon hello-world labs",
8+
"version": "0.1.0"
9+
},
10+
"plugins": [
11+
{
12+
"name": "data-agent-tutor",
13+
"description": "A tutor that walks you through the Data + Agent Hackathon labs one step at a time, checks your work with you, and quizzes you",
14+
"source": "./",
15+
"strict": false,
16+
"skills": [
17+
"./skills/data-agent-tutor"
18+
]
19+
}
20+
]
21+
}

‎.claude/settings.json‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"permissions": {
3+
"deny": [
4+
"Read(/.env)",
5+
"Read(/.env.cloud)",
6+
"Read(/.env.local)",
7+
"Read(/.lab/**)"
8+
]
9+
}
10+
}

‎.claude/skills/data-agent-tutor‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../skills/data-agent-tutor

.env.example renamed to .env.cloud.example

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
# Copy this file to .env (in the repo root) and paste the values from your
2-
# team card. .env is git-ignored: never commit it.
1+
# The Cloud course: copy this file to .env (in the repo root) and paste the
2+
# values from your team card. .env is git-ignored: never commit it.
3+
#
4+
# cp .env.cloud.example .env
5+
#
6+
# (The Local course writes its own .env: see labs/local/00-set-up.md.)
37

48
# ---------------------------------------------------------------- team card --
59

@@ -11,11 +15,6 @@ SN_API_KEY=
1115
# Looks like: <service-account>@<org>.auth.streamnative.cloud
1216
SN_SERVICE_ACCOUNT=
1317

14-
# Optional separate Registry workspace key for ork local (sent as x-api-key).
15-
# Leave empty for a hosted team card; SN_API_KEY then authenticates Agent Engine.
16-
# This key does not authenticate Kafka, Schema Registry, or StreamNative MCP.
17-
ORCA_API_KEY=
18-
1918
# Agent Engine registry endpoint (the External one). Host root only, no /v1.
2019
# Looks like: https://<workspace-host>
2120
ORCA_BASE_URL=
@@ -28,9 +27,8 @@ SCHEMA_REGISTRY_URL=
2827
SN_MCP_URL=
2928

3029
# MCP authentication: oauth (default) or static_bearer for API-key MCP servers.
31-
# All three tutorial paths call ork for the first OAuth login, then reuse the
32-
# credential stored in the vault. Install ork with the OAuth discovery support
33-
# from orca-cli PR #8 (or current main).
30+
# All three paths call ork for the first OAuth login, then reuse the
31+
# credential stored in the vault. Needs ork v0.6.0 or newer.
3432
SN_MCP_AUTH=oauth
3533

3634
# Optional authorization server selection. Leave empty for automatic discovery.
@@ -42,8 +40,9 @@ SN_MCP_OAUTH_SCOPE="openid profile email offline_access"
4240
# ------------------------------------------------------------- your choices --
4341

4442
# The Kafka topic name. Injectors and doctor read this value.
45-
# L2 SQL files use the default below: edit their quoted "avro.<LOGIN_TOPIC>"
46-
# source name to match this value before running them in SQL Workspace.
43+
# The SQL files in sql/cloud/ use the default below: edit their quoted
44+
# "avro.<LOGIN_TOPIC>" source name to match this value before running them in
45+
# SQL Workspace.
4746
LOGIN_TOPIC=security.login_events
4847

4948
# The model your agent runs on (served by the event's AI gateway).

‎.env.local.example‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# The Local course: you do not fill this in by hand. local/write-env.sh writes
2+
# .env for you, with the key your Agent Engine generated (labs/local/00-set-up.md).
3+
# This file shows what it writes. .env is git-ignored: never commit it.
4+
5+
# Tells every script that the stack is the one on your laptop.
6+
TUTORIAL_STACK=local
7+
8+
# The Agent Engine that `ork local` runs, and the workspace key it generated.
9+
ORCA_BASE_URL=http://127.0.0.1:8080
10+
ORCA_API_KEY=
11+
12+
# Ursa for Kafka and its schema registry, as your terminal reaches them.
13+
KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:29092
14+
SCHEMA_REGISTRY_URL=http://127.0.0.1:18081
15+
16+
# RisingWave's MCP server. The first address is the one your agent's definition
17+
# carries: the AI Gateway reaches the server by that name. The second is the same
18+
# server from your terminal, for the doctor.
19+
RW_MCP_URL=http://risingwave-mcp:8000/mcp
20+
RW_MCP_LOCAL_URL=http://127.0.0.1:8000/mcp
21+
22+
# The Kafka topic the injector writes to and RisingWave reads.
23+
LOGIN_TOPIC=security.login_events
24+
25+
# The model your agent runs on. Your provider key must be able to use it.
26+
ORCA_MODEL=claude-sonnet-4-6
27+
28+
# Names your agent and environment. Defaults to your OS user name.
29+
PARTICIPANT=

‎.github/workflows/ci.yml‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,27 @@ jobs:
4242
runs-on: ubuntu-latest
4343
steps:
4444
- uses: actions/checkout@v4
45-
- run: shellcheck cli/*.sh cli/tests/*.sh cli/tests/fake-ork
45+
- run: shellcheck cli/*.sh cli/tests/*.sh cli/tests/fake-ork lab-ork
4646
- run: cli/tests/run.sh
4747

48+
local:
49+
runs-on: ubuntu-latest
50+
steps:
51+
- uses: actions/checkout@v4
52+
- run: shellcheck local/*.sh local/tests/*.sh
53+
- run: local/tests/run.sh
54+
- name: The Compose file is valid
55+
run: docker compose -f local/compose.yaml config -q
56+
57+
labs:
58+
runs-on: ubuntu-latest
59+
steps:
60+
- uses: actions/checkout@v4
61+
- run: shellcheck scripts/*.sh scripts/tests/*.sh
62+
- run: scripts/tests/run.sh
63+
- name: Every lab has its steps, checks, quiz and solution, and every link resolves
64+
run: scripts/check-labs.sh
65+
4866
no-credentials:
4967
runs-on: ubuntu-latest
5068
steps:

‎.gitignore‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
# Secrets: your team card lives here. Never commit it.
1+
# Secrets: your team card (or your local stack's key) lives here. Never commit it.
22
.env
33
.env.*
4-
!.env.example
4+
!.env.*.example
55

66
# Local state (agent/environment/vault ids per participant)
77
.orca-state/
88

9+
# The Local course's Agent Engine data: `ork local` keeps its keys here.
10+
.lab/
11+
12+
# Claude Code worktrees
13+
.claude/worktrees/
14+
915
# Python
1016
.venv/
1117
__pycache__/

0 commit comments

Comments
 (0)