dreamteamer 0.30.0 → 0.31.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.
@@ -1,81 +0,0 @@
1
- name: containers
2
- description: >-
3
- A workspace running as a container — one person's editor, harness and compiled workspace over a
4
- named volume set, answered over the Docker Engine API rather than from a folder of files.
5
- use_when: >-
6
- a workspace has to RUN somewhere for someone — `dt start container <name> --template <t>` makes
7
- one and prints its editor URL; `dt list containers` says what is running and where; `stop`, `open`,
8
- `rm` are the lifecycle. Not a record: nothing lands under data/, nothing is committed, and Docker
9
- keeps the history
10
- # MACHINERY WITH A DRIVER, NOT A RECORD COLLECTION. `storage.driver: docker` says every verb on this
11
- # collection is answered by src/containers.js over the Engine API: `list` is GET /containers/json,
12
- # `get` is an inspect, `add`/`start` create-and-start, `rm` removes. The derived storage.path names a
13
- # folder that never exists, so every walker (check, commit, the store's index) reads zero records here
14
- # and never writes one; the REST route and the CLI dispatch to the driver before the store is asked.
15
- # `group: system` folds it out of the orientation block's domain listing, beside `repos` and the
16
- # compiled kinds, which is where a stranger's mental model puts "the thing my workspace runs in".
17
- storage:
18
- driver: docker
19
- schema:
20
- type: object
21
- required: [name, template]
22
- properties:
23
- # ---- identity ----
24
- name:
25
- type: string
26
- description: The workspace name — also the container name and the stem of its three volumes (`dreamteamer-<name>-workspace` · `-home` · `-files`).
27
- template:
28
- type: string
29
- description: The template it was made from — an image carrying `dreamteamer.template`, `dreamteamer.ports` and `dreamteamer.modules` labels; `--template hq` resolves to `<DT_REGISTRY>/hq:<DT_TEMPLATE_TAG>` or to `DT_IMAGE_hq`.
30
- image:
31
- type: string
32
- description: The image reference the container runs.
33
- id:
34
- type: string
35
- description: Docker's short id.
36
- # ---- runtime ----
37
- state:
38
- type: string
39
- enum: [created, running, paused, restarting, exited, dead]
40
- description: Docker's container state.
41
- status:
42
- type: string
43
- description: Docker's own phrase — `Up 2 hours`, `Exited (0) 3 minutes ago`.
44
- started:
45
- type: string
46
- format: date-time
47
- description: When it last started.
48
- # ---- network ----
49
- editor_url:
50
- type: string
51
- description: Where the person opens the machine — `http://localhost:<port>/`, its home (every workspace, create, clone); the host port comes from DT_PORT_BASE upward, bound to DT_BIND (127.0.0.1). Never carries the image's URL token — `dt open container <name>` prints the URL that does.
52
- port:
53
- type: integer
54
- description: The host port the editor is published on.
55
- bind:
56
- type: string
57
- description: The host address it is bound to — loopback unless the host .env says otherwise.
58
- # ---- storage ----
59
- workspace_dir:
60
- type: string
61
- description: Where the workspace is mounted inside — `/workspaces/<name>`, the dev-container convention.
62
- volumes:
63
- type: object
64
- description: The three named volumes — `workspace` (the repo), `home` (the person's logins and editor settings), `files` (FILES_FOLDER). Plain `rm` keeps them; `rm --force` removes them.
65
- mounts:
66
- type: array
67
- items: { type: string }
68
- description: Extra bind or volume mounts passed as `--mount <host-path|volume>:<container-path>[:ro]` — targets under /workspaces · /home/node · /files · /mnt only, none at or under another mount's target (the own volumes included), and no bind source inside another.
69
- # ---- person ----
70
- person:
71
- type: string
72
- description: Whose container this is — the git identity injected as env; the harness login happens INSIDE, once, and is never injected.
73
- # ---- provenance ----
74
- created:
75
- type: string
76
- format: date-time
77
- description: When Docker created it.
78
- order: 146
79
- list_fields: [name, template, state, editor_url, person]
80
- icon: deployed_code
81
- group: system
@@ -1,46 +0,0 @@
1
- name: images
2
- description: >-
3
- A template a workspace container is made from — a Docker image carrying the `dreamteamer.template`,
4
- `dreamteamer.ports` and `dreamteamer.modules` labels — as the local Docker holds it.
5
- use_when: >-
6
- choosing what a container runs — `dt list images` shows the templates present, `dt add image
7
- --template <t>` pulls one, `dt rm image <ref>` removes one; a template is an IMAGE WITH LABELS, not
8
- a record here, so there is nothing to author — publish an image with the labels and it appears
9
- # The second driver-backed collection (see containers.collection.yaml for what that means). `list` is
10
- # GET /images/json filtered to the template label, `get` an inspect, `add --template` a pull, `rm` a
11
- # delete. No records, no folder, no commit.
12
- storage:
13
- driver: docker
14
- schema:
15
- type: object
16
- required: [image]
17
- properties:
18
- # ---- identity ----
19
- image:
20
- type: string
21
- description: The image reference — `<registry>/<template>:<tag>`.
22
- template:
23
- type: string
24
- description: The `dreamteamer.template` label — the word `--template` takes.
25
- id:
26
- type: string
27
- description: Docker's image id.
28
- # ---- what it runs ----
29
- ports:
30
- type: string
31
- description: The `dreamteamer.ports` label — the in-container port the editor listens on (8080 by convention).
32
- modules:
33
- type: string
34
- description: The `dreamteamer.modules` label — the modules the template installs, comma-separated.
35
- # ---- size and time ----
36
- size_mb:
37
- type: integer
38
- description: Image size in megabytes.
39
- created:
40
- type: string
41
- format: date
42
- description: When the image was built.
43
- order: 147
44
- list_fields: [template, image, size_mb, created]
45
- icon: layers
46
- group: system
@@ -1,96 +0,0 @@
1
- name: proofs
2
- storage:
3
- path: proofs
4
- codec: yaml
5
- shape: file
6
- suffix: proof
7
- id:
8
- generate: '{{ name | slug }}'
9
- schema:
10
- type: object
11
- required:
12
- - name
13
- - about
14
- - kind
15
- properties:
16
- name:
17
- type: string
18
- description: The proof id — must equal the filename.
19
- about:
20
- type: array
21
- items:
22
- type: string
23
- description: What this proof is ABOUT — one or more artifact refs it proves something about. An artifact ref is `skills/<id>` · `commands/<id>` · `command-bindings/<id>` · `<module-id>/bin/<file>`.
24
- kind:
25
- type: string
26
- enum:
27
- - gate
28
- - live
29
- description: '`gate` — a static check with no fixture record; `live` — runs against a real record and is judged by `expect`.'
30
- mode:
31
- type: string
32
- enum:
33
- - readonly
34
- - writes
35
- description: Whether a `live` proof only reads the workspace or actually writes to it. Required when kind is live, forbidden on a gate.
36
- description:
37
- type: string
38
- description: What this proof asserts, in one line.
39
- external:
40
- type: boolean
41
- description: Excludes this proof from a bare `--all` run — it needs a network call, a credential or a mount that is not always present. `--external` still runs it.
42
- requires:
43
- type: object
44
- description: What must already be present for this proof to be runnable at all — missing ones make it UNAVAILABLE rather than FAIL.
45
- properties:
46
- env:
47
- type: array
48
- items:
49
- type: string
50
- description: '.env keys (names only, never values) that must be set.'
51
- bin:
52
- type: array
53
- items:
54
- type: string
55
- description: Binaries that must be on PATH.
56
- given:
57
- type: object
58
- description: The record a `live` proof runs against — either a live filter over a collection or a checked-in fixture. Exactly one of `where`/`fixture`.
59
- properties:
60
- collection:
61
- type: string
62
- description: A collection NAME (not a reference) the record is picked from — e.g. `notes`, never `collections/notes`.
63
- where:
64
- type: object
65
- description: 'A filter narrowing which record is picked — the ordinary filter grammar, one reference hop deep. ⚠ It may NOT use `{record}`: the given is what PICKS the record, so nothing substitutes here and compile refuses the literal.'
66
- pick:
67
- type: string
68
- description: '`latest` (the collection''s own `sort_field`, descending — refused when the collection declares none) or an explicit record id. `any` is refused. A `fixture` given REQUIRES a `pick: <id>` naming one of its records.'
69
- fixture:
70
- type: boolean
71
- description: Read the record from this proof's own fixtures folder instead of the live workspace.
72
- steps:
73
- type: array
74
- items:
75
- type: object
76
- description: What actually runs, in order — a shell command (`run`) or a bound command (`perform`). Required; a gate takes one or more `run` steps, a live proof one or more of either.
77
- expect:
78
- type: array
79
- items:
80
- type: object
81
- description: 'What must hold for a `live` proof to PASS. Live only, and every row is exactly ONE of four forms — `collection`+`where`+`count` · `record`+`where` · `step` (`exit`/`stdout`/`stdout_json`) · `path`+`exists`. A row whose keys span two forms is a compile error, because compile and the judge would otherwise read it as different shapes. `count` takes its own closed operator set (`_eq _neq _gt _gte _lt _lte _delta`) and every operand must be an INTEGER; a `record:` row REQUIRES a non-empty `where` and takes only the literal `{record}` as its target; a `step:` index past the last step is refused; `stdout` and `stdout_json` are FILTER MAPS (`{ _contains: ''…'' }` · `{ ''a.b'': { _gte: 1 } }`) and a scalar, a list or a bare key is refused, because the judge reads only a map and a row it skips asserts nothing. A `where`''s string literals substitute `{record}` and `{record.<field>}` against the picked record before the filter runs — in an expectation only, never in `given.where`.'
82
- timeout:
83
- type: integer
84
- description: Seconds allowed per `run` step before it is killed.
85
- order: 46
86
- # ⚠ NO `last-modified` HERE (M12). Every other list_fields carries it, and on a proof it renders as
87
- # a bare `-` in the MIDDLE of the row: `dt list proofs` appends two computed columns (availability
88
- # and the ledger tail) after the declared ones, so the empty cell sits between the about list and
89
- # the answer the reader came for. A proof's meaningful date is its LAST RUN, which is the `last`
90
- # column, not the mtime of a file git already tracks.
91
- list_fields:
92
- - name
93
- - kind
94
- - about
95
- icon: verified
96
- group: system
@@ -1,53 +0,0 @@
1
- # exporting — the workspace for a reader that is not a coding agent
2
-
3
- `compile` renders the runtime for harnesses that read files. `dt export <target>` renders it for a
4
- consumer that does not: today **NotebookLM**, which holds a bounded number of *sources* per notebook
5
- and takes its standing instructions as a 10,000-character *persona*. `dt help` has the flags; this
6
- page has the judgment.
7
-
8
- ## what travels, and what never does
9
-
10
- Sensitivity is SCHEMA, decided once where the field is declared — never a flag on the export and
11
- never inferred from a field's name (`email` travels unless somebody marked it):
12
-
13
- - **a whole collection**: `dt set collections/<c> sensitive=true`. No record of it is written; the
14
- schema source and the persona NAME the omission so the reader knows the gap is deliberate.
15
- - **one field**: `dt add-field <c> --name <f> … --sensitive`, or `dt set-field <c> --name <f>
16
- --sensitive` (`--sensitive false` clears). The field is projected out of every record.
17
-
18
- Also never exported as records: the system collections (they ARE the schema source) and `codec: file`
19
- collections (bytes a view draws). **Before the first export of a workspace, read the report** — it
20
- prints every field that WAS exported per collection; that list is the review.
21
-
22
- ## what a notebook gets
23
-
24
- - **`dt · schema`** — one source: workspace → module → collection → field, one heading level per
25
- step, with each collection's `use when`, id shape and every field's type, enum values and reference
26
- target. The lexicon the persona cannot afford in full.
27
- - **`dt · <collection>`** — one source per collection, `## <collection>/<id>` per record, references
28
- rendered as `companies/acme (Acme Ltd)`. Over `--max-words` it shards into `dt · <c> [n/m]`.
29
- - **the persona** — a Markdown template with `{{workspace}}` `{{schema_brief}}` `{{sources}}`
30
- `{{omitted}}` `{{exported_at}}` `{{engine_version}}` `{{schema_title}}` `{{collections}}`; the
31
- engine ships a default, `--instructions <file.md>` replaces it, an unknown placeholder is an
32
- error. `--response-length` and `--mode` ride along to `notebooklm configure`.
33
-
34
- **The budget is the plan's source cap** (`--plan standard|plus|pro|ultra|<n>`, default `standard` =
35
- 50). Too many sources is a refusal that names the count and the remedies — nothing is dropped
36
- quietly. A workspace with more collections than the plan has sources narrows with `--collections`.
37
-
38
- ## syncing
39
-
40
- Without `--notebook`/`--create` the export is a pure render into `--out` (default
41
- `.cache/dreamteamer/notebooklm/`, gitignored) and touches no network. With one, it makes the notebook
42
- match **by title**: adds new sources, replaces those whose content hash changed, removes its own stale
43
- ones (the `dt · ` prefix marks ownership — a source added by hand is never touched), then applies the
44
- persona. `notebook.json` in the out dir keeps the notebook id and per-source hashes, so the second run
45
- is incremental and `--create` is needed once. Every vendor call names the notebook with `-n`;
46
- `notebooklm use` is never run. **Preflight is `notebooklm auth check --test`** — the bare check
47
- reports a stale session as valid — and an expired login is the operator's to renew (`notebooklm
48
- login` opens a browser).
49
-
50
- ## asking
51
-
52
- Not a verb here. Ask with `notebooklm ask -n <id> --json`, and treat an answer as real only when it
53
- has non-blank text AND at least one reference — exit 0 with an empty answer is a known shape.