devcake-cli 0.1.0__py3-none-any.whl
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.
- devcake_cli/__init__.py +10 -0
- devcake_cli/__main__.py +8 -0
- devcake_cli/baker.py +15 -0
- devcake_cli/doctor.py +600 -0
- devcake_cli/down.py +37 -0
- devcake_cli/envfile.py +199 -0
- devcake_cli/main.py +209 -0
- devcake_cli/paths.py +29 -0
- devcake_cli/setup.py +933 -0
- devcake_cli/status.py +75 -0
- devcake_cli/up.py +676 -0
- devcake_cli-0.1.0.dist-info/METADATA +375 -0
- devcake_cli-0.1.0.dist-info/RECORD +17 -0
- devcake_cli-0.1.0.dist-info/WHEEL +5 -0
- devcake_cli-0.1.0.dist-info/entry_points.txt +2 -0
- devcake_cli-0.1.0.dist-info/licenses/LICENSE +674 -0
- devcake_cli-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devcake-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: DevCake host CLI (up/down/status/doctor/setup/baker run)
|
|
5
|
+
License: GPL-3.0-only
|
|
6
|
+
Project-URL: Homepage, https://github.com/flieber-inc/devcake
|
|
7
|
+
Project-URL: Documentation, https://github.com/flieber-inc/devcake/tree/main/docs
|
|
8
|
+
Keywords: devcake,agents,orchestration,self-hosted
|
|
9
|
+
Requires-Python: >=3.12
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Dynamic: license-file
|
|
13
|
+
|
|
14
|
+
<div align="center">
|
|
15
|
+
<picture>
|
|
16
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/img/brand/A-devcake-full-color-transparent.svg">
|
|
17
|
+
<img src="docs/img/brand/C-devcake-full-black-transparent.svg" alt="DevCake" width="380">
|
|
18
|
+
</picture>
|
|
19
|
+
|
|
20
|
+
### Your personal software factory. Tickets in, pull requests out.
|
|
21
|
+
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
DevCake turns the task board you already run into a software team. Write a
|
|
25
|
+
ticket the way you would brief a colleague; DevCake staffs it with an AI
|
|
26
|
+
developer in a fresh, disposable container — it triages, plans, implements,
|
|
27
|
+
and passes every mission through REVIEW — and the work comes back as a **pull
|
|
28
|
+
request**, with the full **transcript and token bill** attached to the ticket.
|
|
29
|
+
|
|
30
|
+
You steer with labels. You own the merge. **Done means merged** — with
|
|
31
|
+
auto-merge off (the default), DevCake parks approved work and waits for you.
|
|
32
|
+
|
|
33
|
+
- **Board-native.** Linear or GitHub / GitLab / Gitea Issues — no second
|
|
34
|
+
work queue, no chat window pretending to be one. The bundled admin UI is
|
|
35
|
+
for configuration and operations; the board drives the work. A human edit
|
|
36
|
+
always beats an in-flight agent.
|
|
37
|
+
- **Receipts, not vibes.** Missions post their transcript and token cost to
|
|
38
|
+
the ticket (the documented invariant, named exceptions and all), and every
|
|
39
|
+
dispatch, kill, sweep, and merge is traced end to end.
|
|
40
|
+
- **Your box, your rules.** Self-hosted on a dedicated machine, with **your**
|
|
41
|
+
model subscriptions or API keys and **your** forge (code-hosting platform)
|
|
42
|
+
credentials. There is no hosted SaaS; the control plane does not ship your
|
|
43
|
+
secrets anywhere.
|
|
44
|
+
- **A workforce, not a bot.** Six CLI harnesses — Claude Code, Grok Build,
|
|
45
|
+
Codex, Pi, OpenCode, Qwen Code — staffable per role: judgment work here,
|
|
46
|
+
volume work there. Every harness release upgrades your workforce without a
|
|
47
|
+
line of DevCake changing.
|
|
48
|
+
|
|
49
|
+
> **The deal, stated plainly:** anyone who can write tickets on the
|
|
50
|
+
> configured team (or land content in a configured repo) can influence agents
|
|
51
|
+
> that hold forge and model credentials. You own branch protection, team
|
|
52
|
+
> membership, and whether the **app** may auto-merge after REVIEW. That
|
|
53
|
+
> ownership is *why* the output can be trusted. Full contract:
|
|
54
|
+
> [`docs/14-security.md`](docs/14-security.md).
|
|
55
|
+
|
|
56
|
+
**Proof over promises:** we pointed DevCake at its own codebase — one board
|
|
57
|
+
prompt became 54 self-decomposed tickets, 257 agent runs, and 42 human-merged
|
|
58
|
+
pull requests, receipts included. Read the field report:
|
|
59
|
+
[`docs/evidence/2026-08-devcake-audits-devcake.md`](docs/evidence/2026-08-devcake-audits-devcake.md).
|
|
60
|
+
|
|
61
|
+
Product voice and pitch variants: [`docs/17-positioning.md`](docs/17-positioning.md).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Why DevCake?
|
|
66
|
+
|
|
67
|
+
The deepest AI-assisted work today happens in CLI harnesses — Claude Code,
|
|
68
|
+
Grok Build, Codex, Pi, OpenCode, and Qwen Code — with an expert invisibly
|
|
69
|
+
orchestrating each session:
|
|
70
|
+
curating context, sizing the task, sequencing the work, verifying the output.
|
|
71
|
+
DevCake mechanizes that orchestration for board-shaped work. It is a
|
|
72
|
+
**meta-harness** — a CLI agent orchestrator that staffs those harnesses rather
|
|
73
|
+
than competing with them: not a new coding agent, but a session made
|
|
74
|
+
repeatable, without the expert chained to the keyboard.
|
|
75
|
+
|
|
76
|
+
The method is context hygiene, engineered: one clear goal per session, tasks
|
|
77
|
+
decomposed until they fit, fresh containers, curated read-only mounts of
|
|
78
|
+
exactly the relevant prior work, feedback at step boundaries — never
|
|
79
|
+
interruption inside one. We call it putting AI to work in a state of flow,
|
|
80
|
+
and we treat the conditions for it as a design target, not a hope. In one
|
|
81
|
+
phrase: **the clean room for delegated deep work** — as capability gets
|
|
82
|
+
cheap, the scarce thing is accountability, and the envelope supplies it,
|
|
83
|
+
domain-free ([`docs/17-positioning.md`](docs/17-positioning.md) §1c).
|
|
84
|
+
|
|
85
|
+
We believe this works. The mechanisms are built and tested; the evidence so far
|
|
86
|
+
is our own production use, self-reported ([`docs/16-roadmap.md`](docs/16-roadmap.md), living log).
|
|
87
|
+
The full argument — its evidence status stated claim by claim, and what
|
|
88
|
+
would change our mind — is [`docs/19-thesis.md`](docs/19-thesis.md).
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Who this is for
|
|
93
|
+
|
|
94
|
+
- Teams already running work on a **PMO board** (project-management system —
|
|
95
|
+
Linear, Gitea Issues, GitHub Issues, and GitLab Issues are all
|
|
96
|
+
launch-supported)
|
|
97
|
+
- A **single operator** who will **self-host on a dedicated machine** (Docker,
|
|
98
|
+
Bake, your forge, your models) — not multi-tenant SaaS
|
|
99
|
+
- People who want **receipts** (transcripts, costs, traces) more than a chat copilot
|
|
100
|
+
|
|
101
|
+
**Not for:** anyone wanting a hosted, zero-ops service (self-hosting *is* the
|
|
102
|
+
trust model); boards without discipline (DevCake amplifies your board — it
|
|
103
|
+
cannot invent one); shared Docker hosts; exposing the admin UI to the open
|
|
104
|
+
internet on basic auth alone; or expecting injection-proof agents. Prompt
|
|
105
|
+
injection is in scope of “ticket writers are trusted,” not a product defect to
|
|
106
|
+
be papered over.
|
|
107
|
+
|
|
108
|
+
What you own as the operator — once at setup, and recurring — fits on one page:
|
|
109
|
+
[`docs/18-operator-contract.md`](docs/18-operator-contract.md).
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## What you get
|
|
114
|
+
|
|
115
|
+
| You set up | The system does |
|
|
116
|
+
|---|---|
|
|
117
|
+
| One or more **PMO instances** (teams) | Polls, managed labels, feed posts, adoption modes |
|
|
118
|
+
| Zero or more **external repos** | Clone, branch, PR; zero uses the bundled Gitea; **RO** + **reviewer** tokens recommended (write always for work repos) |
|
|
119
|
+
| **Work** vs **reference** vs **memory** repos per PMO | Routing targets vs read-only consultation clones vs team-memory notebooks (curated notes, mounted read-only into every run — ADR-0035) |
|
|
120
|
+
| **Dev Types**, assignments, prompts | ONBOARD → PLAN → EXECUTE → REVIEW (plus optional steward) |
|
|
121
|
+
| **Skills** per Dev Type (skill store + skill sources) | Curated skills seeded into an editable Gitea repo, plus your own external **skill sources** — dedicated read-only connections serving `<source>/<skill>` — installed into agent sessions |
|
|
122
|
+
| **Scheduled Tasks** | Built-in maintenance on a timer — the Relations Steward (proposes ticket orderings) and the Memory Curator (reviews raw leads into notebook notes via PRs) — plus your own recurring ticket-creating tasks |
|
|
123
|
+
| Auto-merge, intake pause, limits | Operator knobs — defaults favor a human merge |
|
|
124
|
+
|
|
125
|
+
### Three ways to use it
|
|
126
|
+
|
|
127
|
+
1. **External forge** — Classic path: a Linear ticket becomes a PR on your
|
|
128
|
+
GitHub or GitLab repo, with the full label pipeline and receipts on the issue.
|
|
129
|
+
2. **Internal forge** — No external repo: work runs on the **bundled Gitea**;
|
|
130
|
+
missions still complete on the board, with deliverables you can take from the
|
|
131
|
+
PMO feed. Useful for non-code or sandbox workloads without burning forge PATs.
|
|
132
|
+
3. **Multi-connection** — Several teams and/or repos on one stack. Missions
|
|
133
|
+
route by instance config and optional markers; reference repos can ride along
|
|
134
|
+
read-only for every stage.
|
|
135
|
+
|
|
136
|
+
REVIEW is always a pipeline stage (judgment in `result.json`). The
|
|
137
|
+
**reviewer token** — app-only, different forge account — is what is
|
|
138
|
+
**recommended** when branch protection requires formal approval; it is never
|
|
139
|
+
injected into a Dev. Staffing a different Dev Type for REVIEW than EXECUTE is
|
|
140
|
+
optional and about role focus (skills, identifying prompt), not security. How
|
|
141
|
+
merges are actually controlled is next.
|
|
142
|
+
|
|
143
|
+
### How forge merges are controlled (first deploy)
|
|
144
|
+
|
|
145
|
+
Three different things are easy to conflate. Only the forge enforces the last:
|
|
146
|
+
|
|
147
|
+
| Knob | Who it constrains | What it does |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| **`auto_merge`** (per repo, default **off**) | The **app** only | Off on a repo → app never merges that repo's PRs; parks at `DEVCAKE-MERGE` until a real merge is observed. On → app squash-merges after REVIEW approve. (ADR-0020) |
|
|
150
|
+
| **Forge tokens** (Repositories page) | Devs + app | **Write** token: EXECUTE push + open PR; app also uses it to **merge** when auto-merge is on. **RO** token (recommended): non-EXECUTE stages clone without write. **Reviewer** token (**recommended** for formal PR/MR approval under branch protection; **app-only** — never injected into a Dev). |
|
|
151
|
+
| **Branch protection** (on the forge; the Repositories page can **apply** a derived baseline per repo or in bulk) | Everyone with a token | Server rules on the **default branch** (require a PR, require ≥1 approval, no bypass for the Dev account). Token scopes usually **cannot** separate “push a feature branch” from “merge to main” — protection is what does. |
|
|
152
|
+
|
|
153
|
+
**Happy path with protection + tokens configured:**
|
|
154
|
+
|
|
155
|
+
1. **EXECUTE** Dev (write token) pushes a feature branch and opens a PR.
|
|
156
|
+
2. **REVIEW** Dev judges the PR (`result.json`). It does **not** formally approve on the forge. With an RO token set, it does not even hold write credentials.
|
|
157
|
+
3. **App** (on approve): posts the PR comment; if a **reviewer** token is set, files a **formal forge approval** with that token (different identity from the PR author — needed when the forge blocks self-approval).
|
|
158
|
+
4. Then either:
|
|
159
|
+
- **mission's repo `auto_merge` off:** park at `DEVCAKE-MERGE`; **you** merge on the forge; the app marks Done when it sees the merge.
|
|
160
|
+
- **mission's repo `auto_merge` on:** the app **merges with the write token** (not the reviewer token), then Done.
|
|
161
|
+
|
|
162
|
+
Without branch protection, a Dev that holds the write token can often merge (or push) despite `auto_merge` being off — playbooks say not to; that is guidance, not enforcement. Full contract: [`docs/14-security.md`](docs/14-security.md) §2 zone C · setup steps: [`docs/13-deployment.md`](docs/13-deployment.md) §8a · token details: [`docs/06-forge-adapter.md`](docs/06-forge-adapter.md) §4–5.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## A day on the board
|
|
167
|
+
|
|
168
|
+
1. Write a ticket; add `DEVCAKE` (opt-in mode) — or adopt a whole team deliberately.
|
|
169
|
+
2. Labels advance: ONBOARD → PLAN → EXECUTE → REVIEW as work completes.
|
|
170
|
+
3. A PR opens on `devcake/…` (or the internal forge equivalent).
|
|
171
|
+
4. With auto-merge **off** (default): the **app** parks at `DEVCAKE-MERGE` until
|
|
172
|
+
the PR is merged (normally by you); then Done. Branch protection is what
|
|
173
|
+
stops Devs from merging on their own — see above.
|
|
174
|
+
5. Steer with comments and label swaps; stop everything with `DEVCAKE-SKIP`.
|
|
175
|
+
(Comments steer the *next run*; granting a failing step **fresh attempts**
|
|
176
|
+
takes the literal `DEVCAKE-RETRY` in a comment, or a label op — the strict
|
|
177
|
+
default keeps bot comments from resetting the budget. ADR-0026.)
|
|
178
|
+
|
|
179
|
+
Details and interventions: [Tutorial 2](docs/tutorials/02-operating-devcake.md).
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Architecture (one screen)
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
PMO (Linear / Gitea Issues) ──poll / labels──► app (orchestrator)
|
|
187
|
+
│ RunBootstrap → Dagu
|
|
188
|
+
▼
|
|
189
|
+
docker.sock ──► Dev containers
|
|
190
|
+
(runtime net, open egress)
|
|
191
|
+
│
|
|
192
|
+
Redis Streams (per-run ACL)
|
|
193
|
+
▼
|
|
194
|
+
finalize → PMO + forge
|
|
195
|
+
│
|
|
196
|
+
OpenObserve ← app OTLP
|
|
197
|
+
(Devs → otel-collector only)
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
- **Dedicated host.** Dagu holds `docker.sock` (root-equivalent). See
|
|
201
|
+
[`docs/14`](docs/14-security.md) §5 and [`docs/13`](docs/13-deployment.md).
|
|
202
|
+
- **No per-mission lease or checkout.** A crashed agent holds nothing; the next
|
|
203
|
+
poll reschedules. Process-local locks serialize dispatch and maintenance.
|
|
204
|
+
- **PMO is source of truth.** Local run files are advisory
|
|
205
|
+
([`docs/10`](docs/10-persistence.md)).
|
|
206
|
+
- **Control plane** (app, admin, Dagu, OpenObserve) stays off the Dev network;
|
|
207
|
+
optional **Gitea** straddles both for clone/push.
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Trust in one breath
|
|
212
|
+
|
|
213
|
+
Self-hosted, single operator, loopback by default. Stack passwords live in
|
|
214
|
+
`.env`; **operator secrets** (PMO keys, forge tokens, model credentials) are
|
|
215
|
+
entered through the admin UI's Connections (Repositories, PMO, Skill sources), Fleet, and Settings pages and stored
|
|
216
|
+
on the app volume — never echoed back. Be clear-eyed about what "GUI secret
|
|
217
|
+
store" means: values rest as **plaintext files (mode 0600) on the `/data`
|
|
218
|
+
volume** — there is no vault and no at-rest encryption (a key would have to
|
|
219
|
+
live on the same host); anyone with host root or a volume backup reads
|
|
220
|
+
everything. Treat `/data` backups like a password-manager export
|
|
221
|
+
([`docs/14-security.md`](docs/14-security.md) §4).
|
|
222
|
+
|
|
223
|
+
Agents are powerful by design. The app enforces outcome legality and never lets
|
|
224
|
+
Devs write the PMO directly; it **warns** on weak posture (write token on every
|
|
225
|
+
stage, unprotected default branch). It does not replace forge branch protection
|
|
226
|
+
or careful team membership.
|
|
227
|
+
|
|
228
|
+
→ [`docs/14-security.md`](docs/14-security.md) (contract) · checklist before first
|
|
229
|
+
real EXECUTE: §9.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## Quickstart
|
|
234
|
+
|
|
235
|
+
> **Have an agent set it up for you.** Tell your CLI agent:
|
|
236
|
+
> *“Read `.claude/skills/devcake-ops/SKILL.md` in this repo and help me set
|
|
237
|
+
> up and manage DevCake.”* The skill teaches any capable agent the install,
|
|
238
|
+
> preflight, bring-up, non-interactive configuration, day-to-day operations,
|
|
239
|
+
> and upgrades — with JSON receipts and sealed exit codes it can assert on.
|
|
240
|
+
> (Claude Code discovers it automatically when opened in this repo.)
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# Clone the remote or fork you intend to run:
|
|
244
|
+
git clone <this-repo-url> && cd devcake
|
|
245
|
+
uv tool install . # or: pipx install . → console script `devcake`
|
|
246
|
+
devcake doctor # named preflight + one-time remedies (--json ok)
|
|
247
|
+
devcake up --bake # auto-inits .env secrets, DOCKER_GID, control plane + hello + baker
|
|
248
|
+
# Later restarts (images already baked): devcake up
|
|
249
|
+
|
|
250
|
+
# Configure in a browser: http://localhost:8080 — basic auth (from .env) →
|
|
251
|
+
# Connections / Fleet / Settings → secrets + connection tests. Saving Dev
|
|
252
|
+
# Types triggers the baker's harness bake; the first mission waits for it.
|
|
253
|
+
|
|
254
|
+
# Or configure non-interactively (agents; same validation as the UI):
|
|
255
|
+
devcake setup --same-harness claude-code --json # first Dev roster
|
|
256
|
+
devcake setup --help # PMO/repo wiring (secrets via env/file/stdin) + settings-bundle import
|
|
257
|
+
|
|
258
|
+
# Telemetry connectivity: app boot auto-provisions the OO ingest user from OO_INGEST_*.
|
|
259
|
+
# Optional dashboard/alerts only: python3 scripts/provision_oo.py (docs/12 §5)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
`devcake up` is the only bring-up path (ADR-0038): it auto-generates missing
|
|
263
|
+
bootstrap secrets into a mode-600 `.env`, upserts the docker socket group id,
|
|
264
|
+
optionally bakes, then runs compose and installs the host baker. Control
|
|
265
|
+
ports bind `127.0.0.1`. Images are **Bake-only** — compose never builds them.
|
|
266
|
+
|
|
267
|
+
**macOS / Docker Desktop:** see [`docs/13-deployment.md`](docs/13-deployment.md) §8b before first `devcake up --bake` — socket gid, install gates, and the nested-engine probe.
|
|
268
|
+
|
|
269
|
+
**Before the first real mission:**
|
|
270
|
+
|
|
271
|
+
1. Sandbox (or tightly controlled) Linear team — ticket writers = agent trust.
|
|
272
|
+
2. On the forge: **protect the default branch** (require PR + ≥1 approval; Dev
|
|
273
|
+
write account must not bypass) — see [merge control](#how-forge-merges-are-controlled-first-deploy).
|
|
274
|
+
3. Repositories: write token; prefer **RO** for non-EXECUTE and a **reviewer**
|
|
275
|
+
token (app-only formal approval — the security-relevant second identity).
|
|
276
|
+
4. Leave each repo's **`auto_merge` off** until you want the **app** to merge that repo after REVIEW.
|
|
277
|
+
|
|
278
|
+
Then, step by step:
|
|
279
|
+
|
|
280
|
+
- [Tutorial 1 — first mission](docs/tutorials/01-first-mission.md)
|
|
281
|
+
- [Tutorial 2 — daily operations](docs/tutorials/02-operating-devcake.md)
|
|
282
|
+
- [Tutorial 3 — MCP plugins](docs/tutorials/03-mcp-plugins.md)
|
|
283
|
+
- Fresh empty volume drill: [operator-drill](docs/tutorials/operator-drill.md)
|
|
284
|
+
- Pre-v1 host wipe-and-re-onboard: [host-refresh](docs/tutorials/host-refresh.md)
|
|
285
|
+
|
|
286
|
+
After upgrades or changes under `app/`, `admin/`, or `images/`:
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
devcake up --bake
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
More detail: [`AGENTS.md`](AGENTS.md) · [`docs/13-deployment.md`](docs/13-deployment.md).
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## Verify
|
|
297
|
+
|
|
298
|
+
Primary local unit path (always rebakes `app-test` so the image matches the
|
|
299
|
+
tree; prefers Docker Buildx bake and falls back to a plain Dockerfile build
|
|
300
|
+
where bake is unavailable — e.g. podman/buildah hosts, see
|
|
301
|
+
`scripts/lib/bake_app_test.sh`):
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
./scripts/pytest_app.sh
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
CI-shaped proof on a full Docker Engine (real Buildx — not buildah's shim)
|
|
308
|
+
matches [`.github/workflows/ci.yml`](.github/workflows/ci.yml) — bake group
|
|
309
|
+
`ci`, then Redis + pytest in `app-test`, then the dispatch smoke. Locally
|
|
310
|
+
that bake is:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
docker buildx bake ci
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
(GHA applies `type=gha` cache via bake-action `set:` — not a second bake
|
|
317
|
+
file; see `docs/13-deployment.md` §6.)
|
|
318
|
+
|
|
319
|
+
Full local suite when the stack is up (pin gate + ruff + pytest + forge/PMO
|
|
320
|
+
contract batteries + dispatch-hello smoke). Not a full GHA clone (no
|
|
321
|
+
npm/pip-audit, no control-plane rebake); a mixed-version live stack prints a
|
|
322
|
+
warning banner:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
./scripts/ci_suite.sh
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
PR CI (`.github/workflows/ci.yml`) also runs pin gate, npm checks, pip-audit,
|
|
329
|
+
compose with Gitea, and contract batteries — see `docs/13-deployment.md` §6.
|
|
330
|
+
Token-spending golden path (**manual pre-release only**, real models/forges —
|
|
331
|
+
**not** FOSS CI / `ci_suite` / GHA unit path): `scripts/acceptance.py` —
|
|
332
|
+
including internal-forge / Gitea lanes when configured. Tester credentials
|
|
333
|
+
from shell/`.env`; spends model + PMO tokens.
|
|
334
|
+
|
|
335
|
+
Coding agents: follow [`AGENTS.md`](AGENTS.md). Security and autonomy claims
|
|
336
|
+
must not exceed [`docs/14-security.md`](docs/14-security.md).
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Documentation
|
|
341
|
+
|
|
342
|
+
| I want to… | Start here |
|
|
343
|
+
|---|---|
|
|
344
|
+
| Understand the product and invariants | [`docs/00-overview.md`](docs/00-overview.md) |
|
|
345
|
+
| Onboard as a new engineer (reading path) | [`docs/00-overview.md`](docs/00-overview.md) §6a |
|
|
346
|
+
| Contribute (build, tests, PR expectations) | [`CONTRIBUTING.md`](CONTRIBUTING.md) |
|
|
347
|
+
| Report a vulnerability | [`SECURITY.md`](SECURITY.md) |
|
|
348
|
+
| Understand the security deal | [`docs/14-security.md`](docs/14-security.md) |
|
|
349
|
+
| Know what you own as operator | [`docs/18-operator-contract.md`](docs/18-operator-contract.md) |
|
|
350
|
+
| Run a first mission / operate daily | [`docs/tutorials/`](docs/tutorials/) |
|
|
351
|
+
| Deploy, networks, runbook | [`docs/13-deployment.md`](docs/13-deployment.md) |
|
|
352
|
+
| Labels, lifecycle, orchestrator | [`docs/02`](docs/02-domain-model.md) · [`03`](docs/03-mission-lifecycle.md) · [`04`](docs/04-orchestrator.md) |
|
|
353
|
+
| PMO / forge / harnesses | [`05`](docs/05-pmo-adapter.md) · [`06`](docs/06-forge-adapter.md) · [`08`](docs/08-harness-templates.md) |
|
|
354
|
+
| Admin API & UI contract | [`docs/11-admin-panel.md`](docs/11-admin-panel.md) |
|
|
355
|
+
| History and backlog | [`docs/16-roadmap.md`](docs/16-roadmap.md) · [`CHANGELOG.md`](CHANGELOG.md) |
|
|
356
|
+
| How we talk about it | [`docs/17-positioning.md`](docs/17-positioning.md) |
|
|
357
|
+
| Why this exists — the thesis | [`docs/19-thesis.md`](docs/19-thesis.md) |
|
|
358
|
+
|
|
359
|
+
Full map and architecture: [`docs/00`](docs/00-overview.md) §7 · [`docs/01`](docs/01-architecture.md).
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Contributing
|
|
364
|
+
|
|
365
|
+
Self-hosted operator software. Prefer PRs with tests at public seams
|
|
366
|
+
(`app/tests/`) and zero-drift docs when public contracts change. Build with
|
|
367
|
+
**Bake**, target **Python 3.12**, and prove run/up paths — not only “build
|
|
368
|
+
succeeded.” Full contributor guide: [`CONTRIBUTING.md`](CONTRIBUTING.md) ·
|
|
369
|
+
coding agents: [`AGENTS.md`](AGENTS.md) · vulnerability reporting:
|
|
370
|
+
[`SECURITY.md`](SECURITY.md).
|
|
371
|
+
|
|
372
|
+
## License
|
|
373
|
+
|
|
374
|
+
DevCake is free software, released under the **GNU General Public License,
|
|
375
|
+
version 3** — see [`LICENSE`](LICENSE) for the full text.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
devcake_cli/__init__.py,sha256=2tyN2uqp_FYwNnktMZ6G9Y4aPr9wqUR8nD1hrkV1y-E,280
|
|
2
|
+
devcake_cli/__main__.py,sha256=Yrivns0-nI9sRx3knAbqypEv_44dbB29MRneVRIqw-s,156
|
|
3
|
+
devcake_cli/baker.py,sha256=MOOqDcn_NH-Fa3YYad_YvcjoW-mQLRXJW-l8aEQmG0s,532
|
|
4
|
+
devcake_cli/doctor.py,sha256=JNs5mUPceBr96nx6zKXuCtCRZ0tDMUaidO2OlWE8IRE,19552
|
|
5
|
+
devcake_cli/down.py,sha256=GU3nSbyWtwMWJlSB482NtARJxsN46x_rFx1iC443JIE,1005
|
|
6
|
+
devcake_cli/envfile.py,sha256=HBALyxRBmz_EyGpcRoInuCDme6mXooXjenXPz6p0QCU,6936
|
|
7
|
+
devcake_cli/main.py,sha256=jHonQMLePh4S2A6Mv7x2Rgck8picBvuUvfBlNEi5Uuo,6707
|
|
8
|
+
devcake_cli/paths.py,sha256=tWVjYFuTUgHHJopIgNvpq6xwE0f5zZk8c0PT7FHcHio,883
|
|
9
|
+
devcake_cli/setup.py,sha256=9ltsjmUEQfcT3OMOgHTcZzyAB67bEMstjyzTYNxqGOo,32475
|
|
10
|
+
devcake_cli/status.py,sha256=Fs9ipE2P2yGtNjx0x9aF9mn3YR0bCSbtnqcd8UmL2Vo,2394
|
|
11
|
+
devcake_cli/up.py,sha256=9Ww41yhxyXLY-xSLgnVMyY2KcHQWbOc8-Z_up3TEAog,23334
|
|
12
|
+
devcake_cli-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
13
|
+
devcake_cli-0.1.0.dist-info/METADATA,sha256=GVVuHsnwp-9W-9SmzTH7Bzj-D18HBldHfgjE3BgNN6w,19966
|
|
14
|
+
devcake_cli-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
15
|
+
devcake_cli-0.1.0.dist-info/entry_points.txt,sha256=JsopJxP_M6UP07mSV2G958nF7eB75zTuymntWQ_wce8,50
|
|
16
|
+
devcake_cli-0.1.0.dist-info/top_level.txt,sha256=yF4B2jt9z0a11bWZlzuk2qbjry9L2uc5y8lJsfJP3Yk,12
|
|
17
|
+
devcake_cli-0.1.0.dist-info/RECORD,,
|