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 +83 -0
- package/LICENSE +661 -0
- package/README.md +530 -2
- package/bin/agents-pod.mjs +15 -0
- package/bin/ts-loader.mjs +66 -0
- package/bin/wrapper.mjs +12 -0
- package/index.mjs +11 -0
- package/package.json +39 -4
- package/src/agents-store.ts +88 -0
- package/src/cli.ts +1864 -0
- package/src/extension/handoff.ts +57 -0
- package/src/extension/index.ts +34 -0
- package/src/extension/management.ts +149 -0
- package/src/extension/self.ts +80 -0
- package/src/inbox.ts +221 -0
- package/src/listeners.ts +84 -0
- package/src/liveness.ts +191 -0
- package/src/locks.ts +74 -0
- package/src/notify/config.ts +125 -0
- package/src/notify/dispatch.ts +63 -0
- package/src/notify/email.ts +72 -0
- package/src/notify/format.ts +42 -0
- package/src/notify/system.ts +79 -0
- package/src/notify/types.ts +96 -0
- package/src/notify/webhook.ts +39 -0
- package/src/outbox.ts +294 -0
- package/src/paths.ts +67 -0
- package/src/projects.ts +49 -0
- package/src/registry.ts +103 -0
- package/src/sources.ts +278 -0
- package/src/workspace.ts +131 -0
- package/src/wrapper.ts +533 -0
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.
|