Commit graph

7206 commits

Author SHA1 Message Date
Mario Zechner
ec2c8ed311 docs(chord): slice 6b reopen and commit numbers accepted 2026-10-28 18:51:30 +00:00
Mario Zechner
97553d10f2 docs(chord): design text after the audit of slices 1-6a 2026-10-28 18:10:32 +00:00
Mario Zechner
cc41246b9d docs(chord): design audit of slices 1-6a, decisions 6a and 7a 2026-10-28 18:10:01 +00:00
Petr Houška
3bae85274a fix(tui,coding-agent): handle selection page keys in all scrolling lists
tui.select.pageUp/pageDown were configurable but ignored by SelectList,
SettingsList, editor autocomplete, and most coding-agent selectors. In
fullscreen mode, the default PageUp/PageDown also scrolled the transcript
instead of reaching the focused list.

- add getSelectPageIndex() and handle page keys in SelectList, SettingsList,
  editor autocomplete, and the model, scoped models, auth, user message,
  settings submenu, llama search, and /mcp selectors
- add Component.capturesViewportInput: a focused component that sets it
  receives fullscreen viewport keys instead of the transcript, as a focused
  overlay already does
- let page keys move an open autocomplete menu before app actions, so a
  remapped Ctrl+V pages the menu instead of pasting an image

closes #7629

Co-authored-by: muyiyr <940955635@qq.com>
2026-10-28 19:05:21 +01:00
Mario Zechner
9ae3d8814c docs(chord): design §6 seal fence: staged job changes adopted 2026-10-28 17:58:27 +00:00
Mario Zechner
dc35ae2d92 docs(chord): slice 8: ref.state is a native source too 2026-10-28 17:56:37 +00:00
Mario Zechner
568f6c47eb docs(chord): slice 8 ready to build 2026-10-28 17:53:56 +00:00
Mario Zechner
82a0d646e5 docs(chord): slice 8 review 2 leftovers; design §24 harness example 2026-10-28 17:52:54 +00:00
Mario Zechner
eb9d443462 docs(chord): slice 8 review 2 fixes; design §17 and slices folded 2026-10-28 17:51:28 +00:00
Mario Zechner
02a2b2532d docs(chord): slice 8 accepts adapters guarded; example shape 2026-10-28 17:49:48 +00:00
Mario Zechner
5f75cd77f8 docs(chord): slice 8 S3, self.registry is a dependency 2026-10-28 17:48:15 +00:00
Mario Zechner
376ccf6e89 docs(chord): slice 8 revised: self.registry is a dependency; S1-S3; review gaps 2026-10-28 17:48:03 +00:00
Mario Zechner
677e8067b3 docs(chord): slice 6b revision part and examples as built 2026-10-28 17:46:55 +00:00
Mario Zechner
b0eb8ace19 docs(chord): slice 6b entry_heads table 2026-10-28 17:43:57 +00:00
Mario Zechner
df9275d434 docs(chord): slice 8 S2, registry readers of an older version 2026-10-28 17:39:33 +00:00
Mario Zechner
cf9042b48a docs(chord): slice 8 S1, a Session close fails Durable's observers 2026-10-28 17:35:55 +00:00
Mario Zechner
07a76f1ef0 docs(chord): slice 8 D2, D3; spec decided 2026-10-28 17:20:43 +00:00
Mario Zechner
9cef0db2d6 docs(chord): slice 8 registry failures 2026-10-28 17:15:50 +00:00
Mario Zechner
1e1716e69a docs(chord): slice 8 D1, registries served by their provider 2026-10-28 17:08:18 +00:00
Mario Zechner
ad702637fd docs(chord): slice 8 spec draft 2026-10-28 15:31:08 +00:00
Mario Zechner
b2fcfee083 docs(chord): slice 6b ready to build; claims per table and namespace 2026-10-28 15:09:35 +00:00
Mario Zechner
7f3cfb060d docs(chord): slice 6b spec revised after the first spec review 2026-10-28 14:55:45 +00:00
Mario Zechner
a2c5657c86 docs(chord): slice 6b R4, a follow source's end 2026-10-28 14:54:03 +00:00
Mario Zechner
8c38be894d docs(chord): slice 6b R3, a seal is a clean stop for persisted runs 2026-10-28 14:51:05 +00:00
Mario Zechner
74bbffadf3 docs(chord): slice 6b owner names and claims, no pi.durable 2026-10-28 14:50:33 +00:00
Mario Zechner
84576c70c8 docs(chord): slice 6b R2, no host kind in store names 2026-10-28 14:33:53 +00:00
Mario Zechner
018fdcf43e fix(durable): pi.live version 3 gives a stored run without turns a count of 0
A database an earlier unreleased build wrote at pi.live version 2 has a run
without run.turns; a run in flight across the upgrade then counted NaN turns
and failed its next tool round with "Value contains a non-finite number and
is not strict JSON". Version 3's migrate adds turns: 0 wherever it is
missing.
2026-10-28 14:28:41 +00:00
Mario Zechner
2eb6a8d15f docs(chord): slice 6b R1, retirement per record by history 2026-10-28 14:18:12 +00:00
Mario Zechner
3ac64a074d docs(durable): examples for turn limits and continue, and admission inside a commit 2026-10-28 14:03:36 +00:00
Mario Zechner
7e15f96019 feat(durable): run-end tasks with the afterRun hook
GenerationHooks.afterRun asks, after a run answered, for durable tasks
(runEndTask(task, input)). The answer commits and the run's inputs settle
done first; the generation then creates the tasks as its children in a
finish phase and waits for them in drain, keeping pi.live.run (run.afterRun)
and the conversation busy, so idle waits include them, Stop aborts them and
a crash resumes them. Queued input is placed when they are terminal.
pi.live.run.first and runFailure.first name where a run's history starts,
also for a continue after a failure.

closes #11141
2026-10-28 14:03:25 +00:00
Mario Zechner
65fba65b2e feat(durable): entry reads for hooks and tasks
HookApi.entry() and entries(), and TaskRuntime.entries(): a hook or task
reads the conversation's raw history, which compaction never changes, so a
range bounded by entry IDs reads the same before and after a compaction and
in a rerun.
2026-10-28 14:03:00 +00:00
Mario Zechner
cc9c523107 feat(durable): admit submissions inside the caller's commit with submit(tx, draft)
Conversation.submit(tx, draft) and ConversationHandle.submit(tx, draft) run
the same admission inside the caller's commit and return the submission ID,
so a host's own checks and writes and the admission are stored together or
not at all. Admission must come before the commit's first table write, once
per commit, and throws ReadAfterWrite otherwise on every path. A first
argument that is not a draft is taken as a transaction; one of another
Session, or a wrapped one, is refused. The handle form also rejects once its
invocation is aborted. The pi.durable.submit span covers the admission only.

closes #11149
2026-10-28 13:09:00 +00:00
Mario Zechner
6a28251136 feat(durable): reject input on idle conversations with whenIdle
An input with whenIdle: "reject" is refused with the new ConversationIdle
when the conversation has no run, before any write, so it never starts a
run. With whenBusy: "steer" it steers the current run or is refused.
Request-ID deduplication runs first.
2026-10-28 13:09:00 +00:00
Mario Zechner
c3d8ce44d3 docs(chord): slice 8 is registries and host.root; the harness object is p3's 2026-10-28 11:56:31 +00:00
Mario Zechner
bb6ae4b8ef docs(chord): self.follow in design and slices 2026-10-28 11:50:41 +00:00
Mario Zechner
e4c58271b8 docs(chord): slice 6b D9, self.follow; spec decided 2026-10-28 11:50:25 +00:00
Mario Zechner
f6a9db1d83 feat(durable): per-conversation turn limit
closes #11043
2026-10-28 11:45:59 +00:00
Mario Zechner
fb524dd2ea feat(durable): continue submissions 2026-10-28 11:45:59 +00:00
Mario Zechner
1c6928b309 feat(durable): calls to tools not offered run as tool tasks 2026-10-28 11:45:59 +00:00
Mario Zechner
87eff524f9 feat(durable): afterTool runs on every tool task result 2026-10-28 11:45:59 +00:00
Mario Zechner
47dba56f92 docs(chord): slice 6b D8, deferred run state per change 2026-10-28 11:45:47 +00:00
Mario Zechner
97622a8f1e docs(chord): slice 6b D7, job.abort as Durable's abortTask 2026-10-28 11:44:13 +00:00
Mario Zechner
cf4920c827 docs(chord): slice 6b D6, persisted jobs restart as Durable's tasks 2026-10-28 11:43:04 +00:00
Mario Zechner
66330961bd docs(chord): slice 6b D5; Harness.open in the examples 2026-10-28 11:41:48 +00:00
Mario Zechner
4ba356228c docs(chord): mark Store errors superseded in part 2026-10-28 11:18:50 +00:00
Mario Zechner
a9181321a0 docs(chord): slice 6b D4, the store has Durable's Storage semantics 2026-10-28 11:18:41 +00:00
Mario Zechner
cc12dad236 docs(chord): slice 6b D3, one id counter per store 2026-10-28 11:12:48 +00:00
Mario Zechner
7dff3effa3 docs(chord): slice 6b D2, Durable's records as declared tables 2026-10-28 11:09:06 +00:00
Mario Zechner
bdb68f750e docs(chord): Chord v2 and its docs live upstream; slice 6b D1 revised 2026-10-28 10:39:09 +00:00
Mario Zechner
93029a0f1e feat(chord): Chord v2 in src/next, experimental and not exported yet
The next object runtime moves from the private repository into pi: src/next (contracts, hosts and
objects, documents, derives, links and relays, routines and jobs, the store) with its tests and
examples in test/next, src/next-node (Node compression), and its design in docs/next (design.md, the
decision log decisions.md, the slice plan slices.md, slice specs, books and benchmarks). AGENTS.md
gets its code style. Not exported: the API changes with every slice until it has an entry point.
2026-10-28 10:30:19 +00:00