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.
- package/README.md +47 -153
- package/collections/collections.collection.yaml +0 -9
- package/package.json +14 -2
- package/skills/using-dreamteamer/SKILL.md +10 -8
- package/skills/using-dreamteamer/references/before-you-build.md +4 -3
- package/skills/using-dreamteamer/references/commands.md +3 -3
- package/skills/using-dreamteamer/references/extensions.md +60 -0
- package/skills/using-dreamteamer/references/sessions.md +4 -5
- package/skills/using-dreamteamer/references/skills.md +3 -5
- package/src/api.d.ts +109 -0
- package/src/api.js +70 -0
- package/src/checkout.js +105 -330
- package/src/cli.js +60 -273
- package/src/collections-cli.js +16 -165
- package/src/compile.js +110 -156
- package/src/extensions.js +135 -0
- package/src/filter.js +1 -1
- package/src/harnesses.js +82 -135
- package/src/init.js +9 -3
- package/src/records-api.d.ts +95 -0
- package/src/records-api.js +40 -0
- package/src/runtime.js +2 -2
- package/src/schema-ops.js +16 -7
- package/collections/containers.collection.yaml +0 -81
- package/collections/images.collection.yaml +0 -46
- package/collections/proofs.collection.yaml +0 -96
- package/skills/using-dreamteamer/references/exporting.md +0 -53
- package/skills/using-dreamteamer/references/proofs.md +0 -435
- package/skills/using-dreamteamer/references/worktrees.md +0 -235
- package/src/container-archive.js +0 -356
- package/src/containers.js +0 -635
- package/src/export-notebooklm.js +0 -502
- package/src/land.js +0 -743
- package/src/prove.js +0 -1922
- package/src/server.js +0 -481
|
@@ -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.
|