Commit graph

173 commits

Author SHA1 Message Date
Mario Zechner
24d3993b20 docs(chord): the Chord v2 tutorial, a todo app built with the app kit (example 61) 2026-11-03 08:30:05 +00:00
Mario Zechner
5bd014b1c7 feat(chord): mistakes that wait are reported at once
- get, hold and registry on a host that has not loaded throw not_ready at once.
- A registry with contributions and no provider is reported (registry_undeclared) at publication.
- A request waiting unbound is reported once after 5 s (unbound_long; one clock per host), and keeps waiting.
- An invalid plugin name makes load and reload throw before any change.
- A transaction cancelled by the end of its context is reported (transaction_cancelled) besides rejecting.
- Docs: who a reference acts as, no per-link call limit, await what you start in a root or a handler.
2026-11-03 07:19:52 +00:00
Mario Zechner
8ff2cec028 docs(chord): p2 switch goes to the phone once green 2026-11-03 06:59:12 +00:00
Mario Zechner
5d74f40de9 docs(chord): changes cancelled by a seal are reported 2026-11-03 06:49:01 +00:00
Mario Zechner
fc7d91f4e8 docs(chord): mistakes that wait are reported at once; no per-link call limit 2026-11-03 06:39:27 +00:00
Mario Zechner
d5c4b80ebf docs(chord): p2 moves to Chord v2, then v1 is deleted 2026-11-02 22:38:23 +00:00
Mario Zechner
e9c0ff4d84 feat(chord): Chord v2 is the package's root
src/next is src (the main export), src/next-node is src/node with short subpaths (/http, /workers, /plugins,
/plugins/runtime, /app, /surfaces, /web, /react, /tui, /tui/launcher); the foundations get /json and /watch;
Chord v1 moves to src/old (/old, /old/node) until p2 runs on v2; tests and docs move likewise (test/, docs/,
test/old, docs/old). Durable and env import the foundations from their subpaths.
2026-11-02 22:36:55 +00:00
Mario Zechner
1d81a69727 docs(chord): Chord v2 becomes the package's root 2026-11-02 21:40:16 +00:00
Mario Zechner
5bc4145165 feat(chord): Chord v2 web and terminal surfaces (slice 11)
- Web: base bundles built from the app's entry at start (content-hashed, served
  forever), plugin scripts that register themselves and one combined file,
  WebScripts/TuiScripts showing the current set, startPage with the connection
  loop, in-place plugin reloads and a reload on a new base bundle.
- React bindings: HostProvider, useHold, useWatch, useRegistry, useRefState.
- Terminal: startTerminal, a launcher that signs in with a token, a token file or
  device pairing and always runs the app's terminal code in a sandboxed child
  process (pipes, empty environment, --permission granting nothing, no SQLite,
  a builtin allowlist and a frozen process inside); output filter, confirmed
  copy/open/attach actions; startTerminalRuntime and TuiScope inside.
- Themes: the Themes registry, ThemeChoice per principal, CSS variables on the
  page, terminal colours by role; CSS modules in plugin builds.
- App kit: startServer gains web and tui; startApp renamed startServer,
  exportAddress/importAddress renamed exportData/importData and export no longer
  stops the worker; ephemeral sessions end with their client's last link.
- Examples 56-web, 57-tui, 58-themes, 59-chat.
2026-11-02 21:31:59 +00:00
Mario Zechner
9c248717da docs(chord): messages and languages in the app kit decided 2026-11-02 21:28:52 +00:00
Mario Zechner
65c85bda2c docs(chord): slice 11 spec, the sandbox is a child process 2026-11-02 20:47:13 +00:00
Mario Zechner
10cf3264fb docs(chord): design §23, the terminal's sandbox is a child process 2026-11-02 20:26:54 +00:00
Mario Zechner
128912d246 docs(chord): the terminal's sandbox is a child process 2026-11-02 20:26:39 +00:00
Mario Zechner
642e30b689 docs(chord): p3 meeting prep with pictures, sync example, branches 2026-11-02 17:18:31 +00:00
Mario Zechner
1746cfd515 docs(chord): i18n proposal, t.message and one file per host 2026-11-02 17:09:59 +00:00
Mario Zechner
48f9f1b423 docs(chord): i18n proposal, messages as object state 2026-11-02 17:03:46 +00:00
Mario Zechner
7dffeaf521 docs(chord): i18n proposal 2026-11-02 16:58:24 +00:00
Mario Zechner
1f8604f84f docs(chord): sync applies batches with the host stopped 2026-11-02 16:47:09 +00:00
Mario Zechner
95485d32f1 docs(chord): startServer, exportData without stopping; p3 notes on subagent context and tree 2026-11-02 16:15:54 +00:00
Mario Zechner
e64f313bd6 docs(chord): p3 feature set and work packages, meeting prep 2026-11-02 15:58:52 +00:00
Mario Zechner
cf74b67653 docs(chord): p3 meeting summary, session sync and index 2026-11-02 15:49:56 +00:00
Mario Zechner
d6af4d18e5 docs(chord): looks and themes decided; slice 11 spec gains themes 2026-11-02 15:23:22 +00:00
Mario Zechner
072e413bf3 feat(chord): Chord v2 slice 13, the app kit
chord/next/app: startApp and startWorker with the fixed app layout, worker kinds,
AppInfo and WorkerInfo; sessions (hashed tokens, rolling cookies, bearer tokens),
the one-time owner link, the owner token file, device pairing; Files per host
with ordered chunked uploads; export and import per address; plugin roots,
installs and applyChanges; optional users, invite and ephemeral login facets.
HTTP: deny by default (public routes and sockets), remoteAddress,
readSignedCookie. Examples 53-55.
2026-11-02 15:13:37 +00:00
Mario Zechner
ff2c8931cf docs(chord): looks and themes proposal 2026-11-02 15:05:24 +00:00
Mario Zechner
9823079ad9 feat(chord): Chord v2 slice 12, the plugin model
Plugins import the app's versioned API (createPlugins api option: unlisted
versions, other kinds' modules, mixed versions and direct Chord imports refused),
each other by relative path within a root or by package name across
repositories (npm or git pins), with per-kind files checked by name.
chord.plugins lists a package's plugins. Required roots, single-file plugins,
installPlugin from git or npm, testPlugin with stub facets.
plugin-authoring.md for authors and agents. Examples 49-52.
2026-11-02 13:19:03 +00:00
Mario Zechner
3e0eec29f5 docs(chord): chord.plugins is a package's manifest of plugins 2026-11-02 12:20:33 +00:00
Mario Zechner
7b991fd96a docs(chord): slice 11 spec, web and TUI on the app kit 2026-11-02 11:15:21 +00:00
Mario Zechner
8d81a0f49d docs(chord): slice 13 spec, the app kit 2026-11-02 11:14:37 +00:00
Mario Zechner
ebce9debd4 docs(chord): fold the plugin model, app kit and slice 11 decisions into the design; slice 12 spec 2026-11-02 11:13:08 +00:00
Mario Zechner
752019da07 docs(chord): slice 11 terminal component scope 2026-11-02 11:03:04 +00:00
Mario Zechner
e8504dfab5 docs(chord): slice 11 terminal client always sandboxed 2026-11-02 11:00:43 +00:00
Mario Zechner
20f600e58d docs(chord): slice 11 React bindings 2026-11-02 10:59:40 +00:00
Mario Zechner
2f153034b4 docs(chord): slice 11 connection loop 2026-11-02 10:58:40 +00:00
Mario Zechner
9942d5bbcf docs(chord): slice 11 pages learn of new scripts through Chord 2026-11-02 10:57:16 +00:00
Mario Zechner
7f7ec86806 docs(chord): slice 11 applies plugin scripts in place 2026-11-02 10:56:16 +00:00
Mario Zechner
cdd50052f6 docs(chord): slice 11 base bundle and plugin scripts 2026-11-02 10:55:18 +00:00
Mario Zechner
3cec8e2b66 docs(chord): app kit plugins, files and export 2026-11-02 10:50:22 +00:00
Mario Zechner
dbfb5bc105 docs(chord): app kit storage 2026-11-02 10:43:09 +00:00
Mario Zechner
e8c5ac945f docs(chord): app kit command-line clients 2026-11-02 10:42:09 +00:00
Mario Zechner
09f2dac685 docs(chord): app kit authentication 2026-11-02 10:40:04 +00:00
Mario Zechner
87f69dbf3c docs(chord): app kit principals and users 2026-11-02 10:36:42 +00:00
Mario Zechner
2dd44fb1c8 docs(chord): app kit shape 2026-11-02 10:33:06 +00:00
Mario Zechner
7edaa131dd docs(chord): testing a plugin alone 2026-11-02 10:26:25 +00:00
Mario Zechner
95e2015f3b docs(chord): single-file plugins 2026-11-02 10:22:50 +00:00
Mario Zechner
ee7f61f92c docs(chord): the plugin model's points 3, 4, 5 and 8, imports and builds 2026-11-02 10:19:47 +00:00
Mario Zechner
6ab6c1e0e4 docs(chord): plugins import only the app's versioned API 2026-11-02 09:41:22 +00:00
Mario Zechner
c9f4c7b9fc docs(chord): fold the cross-plugin import rule into design and slices 2026-11-01 23:11:22 +00:00
Mario Zechner
e1669ee4b8 docs(chord): contracts come from where the plugin's code came from 2026-11-01 23:11:16 +00:00
Mario Zechner
b556cfe5b0 docs(chord): schemas are pi-schema's in the design
Some checks are pending
CI / build-check (push) Waiting to run
CI / test (coding-agent) (push) Waiting to run
CI / test (durable) (push) Waiting to run
CI / test (other) (push) Waiting to run
CI / mcp-conformance (push) Waiting to run
Environments / daemons (push) Waiting to run
Environments / check (push) Blocked by required conditions
Environments / release-daemons (darwin-arm64, macos-latest) (push) Blocked by required conditions
Environments / release-daemons (darwin-x64, macos-latest) (push) Blocked by required conditions
Environments / release-daemons (linux-arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
Environments / release-daemons (linux-x64, ubuntu-latest) (push) Blocked by required conditions
Environments / release-daemons (windows-arm64, windows-11-arm) (push) Blocked by required conditions
Environments / release-daemons (windows-x64, windows-latest) (push) Blocked by required conditions
Environments / tests (macos-latest) (push) Waiting to run
Environments / tests (ubuntu-24.04-arm) (push) Waiting to run
Environments / tests (ubuntu-latest) (push) Waiting to run
Environments / tests (windows-11-arm) (push) Waiting to run
Environments / tests (windows-latest) (push) Waiting to run
2026-11-01 15:20:46 +00:00
Armin Ronacher
c09c98d7d2 fix(chord): admit a routed host even when the relay that spawned it is gone
A relayed hold released (or its principal refused or revoked) while the route resolved made #resolve throw before adding the connection, so the spawned host's link was never read and its own upstream references failed unavailable/ready_timeout after readyTimeout. The connection is now added right after resolve; the checks only fail the relay.
2026-11-01 14:47:36 +01:00