agents-pod 0.0.0-stage → 0.2.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/CHANGELOG.md ADDED
@@ -0,0 +1,83 @@
1
+ # Changelog
2
+
3
+ All notable changes to agents-pod. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project
5
+ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [0.2.0] — 2026-11-04
8
+
9
+ Work that arrives in a chat can now be picked up there, and answered there,
10
+ without a resident process holding a socket: a **Source** drains a conversation
11
+ into a pod once per pass, a **Deliverer** posts a pod's **Outbox** back, and a
12
+ **Delivery Address** rides the Goal so a Worker can reply without asking anyone.
13
+
14
+ ### Added
15
+
16
+ - **IM intake and outbound — Source, Deliverer, Outbox, and Delivery Address** —
17
+ a pull-based intake and file-based reply path, with platform credentials and
18
+ API behavior kept in operator commands.
19
+ - **Sources and drains** — `source add|list|rm`, cursor-based JSONL drains with
20
+ platform ids and routing fields, bounded execution, claim-before-cursor
21
+ commits, and two-generation claim retention.
22
+ - **Source Listeners and standing Pod intake** — `listener add --source`, batched
23
+ `TASKS.md` Inbox delivery with Waiting state, the `{{reply_to}}` template
24
+ placeholder, and `--project` for template-materialized Pods.
25
+ - **Outbox delivery** — `deliver add|list|rm`, one operator deliverer, named
26
+ per-wake-up entry files carrying `{to, text}`, stable delivery uuids, bounded
27
+ wrapper and reconcile flushes, same-uuid retries, one-hour dead-lettering,
28
+ and retained `*.dead` entries for expired or invalid input.
29
+
30
+ ### Fixed
31
+
32
+ - Wake-up outcomes are recorded under the registry lock, so concurrent passes
33
+ and wrappers no longer overwrite each other's registry updates.
34
+
35
+ ## [0.1.0] — 2026-11-03
36
+
37
+ First release: one pod, many wake-ups, and the machinery that keeps a standing
38
+ unit alive across them. Published under the AGPL-3.0-or-later.
39
+
40
+ ### Added
41
+
42
+ - **CLI** — `spawn`, `status`, `list`, `logs [--follow]`, `wake [--warm]`,
43
+ `cancel`, `reconcile`, `agent add|edit|rm|list`, `listener add|rm|list`,
44
+ `project cap`. Exit codes: `0` success or nothing to do, `1` at least one pod
45
+ failed, `2` configuration or storage error.
46
+ - **Wrapper per wake-up** (`bin/wrapper.mjs`) — a detached session and
47
+ process-group leader that spawns the agent CLI, streams stdout/stderr to the
48
+ pod log, touches a heartbeat, and adjudicates the outcome in three layers
49
+ (fresh handoff declaration over observed events over exit facts). A clean
50
+ exit with no fresh handoff is `failed`.
51
+ - **Document store** — `docs/HANDOFF.md` (rolling, `status: rotating | done`
52
+ first line), `docs/DECISIONS.md` (append-only), `docs/TASKS.md` (plan
53
+ checkboxes plus the `## Inbox` section reconcile appends to).
54
+ - **Reconcile** — idempotent cron entry point: ghost records marked lost,
55
+ orphans reaped, reboot detection, idle pods woken per policy (backoff after
56
+ `failed`/`lost`, 1m ×2 capped at 15m, three consecutive failures park the
57
+ pod), listener inboxes scanned and claimed, one lock so overlapping passes
58
+ cannot double-wake.
59
+ - **Wake admission** — `--after <podId>` dependencies and the per-project live
60
+ wake-up cap; a manual `wake` overrides park and backoff, never a dependency
61
+ or the cap.
62
+ - **Listeners** — standing intake without a daemon: an inbox directory or
63
+ JSONL file, a pod template or a bound standing pod, routing by substring.
64
+ - **Progress signals** — document and log growth per wake-up, so a live but
65
+ progressless wake-up is killed and re-woken rather than left to burn.
66
+ - **Notifications** — system, webhook and email channels adapted from
67
+ agents-cron, on the two events a human must hear: a pod reached `done`, and a
68
+ pod parked after three consecutive failures (with its failure trail).
69
+ - **Pi extension** — two planes gated by wrapper-injected env: the management
70
+ plane (`/pod …` commands and the `spawn_pod` tool) registers only in an
71
+ interactive session, and the self plane (`pod_handoff`) only inside a pod, so
72
+ fan-out from inside a pod is structurally impossible rather than forbidden.
73
+ - **Packaging** — TypeScript shipped and executed as-is (no build step, no
74
+ `dist/`), a bin loader hook for files under `node_modules`, and a
75
+ packed-tarball smoke test in `npm run check`.
76
+
77
+ ### Limits
78
+
79
+ - **Pi only.** `--type claude | codex` is refused at `agent add`, `spawn`,
80
+ `wake`, and again at launch: the wrapper has one command line, and running pi
81
+ in claude's name would be a silent wrong agent.
82
+ - **No default timeout, no default expiry.** Liveness is a pid plus our own
83
+ heartbeat; a pod idles as a registry record for as long as its goal is open.