@jamesaphoenix/tx-test-utils 0.11.1 → 0.13.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 +116 -356
- package/dist/helpers/shared-test-layer.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,425 +1,185 @@
|
|
|
1
1
|
# tx
|
|
2
2
|
|
|
3
|
-
**Primitives, not frameworks.** Headless infrastructure for AI agents.
|
|
3
|
+
**Primitives, not frameworks.** Headless, local infrastructure for AI agents.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
tx gives you a small set of reusable primitives for task state, docs-first specs, memory, coordination, and observability. You keep the orchestration loop.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
6
8
|
|
|
7
9
|
```bash
|
|
8
|
-
# Standalone binary (recommended
|
|
10
|
+
# Standalone binary (recommended)
|
|
9
11
|
curl -fsSL https://raw.githubusercontent.com/jamesaphoenix/tx/main/install.sh | sh
|
|
10
12
|
|
|
11
13
|
# Or via npm (requires bun)
|
|
12
14
|
npm install -g @jamesaphoenix/tx-cli
|
|
13
15
|
```
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
tx init
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Agent onboarding (optional, both supported):
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
tx init --claude # CLAUDE.md + .claude/skills
|
|
23
|
-
tx init --codex # AGENTS.md + .codex/agents
|
|
24
|
-
tx init --claude --codex # scaffold both
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
Watchdog onboarding (optional, default off):
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
tx init --watchdog # scaffold watchdog assets with runtime auto-detect
|
|
31
|
-
tx init --watchdog --watchdog-runtime codex
|
|
32
|
-
tx init --watchdog --watchdog-runtime both
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## The Problem
|
|
38
|
-
|
|
39
|
-
Your agents lose context between sessions. Tasks collide when multiple agents work in parallel. Learnings vanish into conversation history. You're rebuilding the same infrastructure every project.
|
|
17
|
+
## Start Small
|
|
40
18
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Composable primitives that handle the hard parts. You keep control of the orchestration.
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
┌─────────────────────────────────────────────────────────┐
|
|
47
|
-
│ Your Orchestration (your code, your rules) │
|
|
48
|
-
├─────────────────────────────────────────────────────────┤
|
|
49
|
-
│ tx primitives │
|
|
50
|
-
│ │
|
|
51
|
-
│ tx ready tx done tx memory tx pin │
|
|
52
|
-
│ tx claim tx block tx sync tx trace │
|
|
53
|
-
│ │
|
|
54
|
-
└─────────────────────────────────────────────────────────┘
|
|
55
|
-
```
|
|
19
|
+
The recommended first path is:
|
|
56
20
|
|
|
57
|
-
|
|
21
|
+
1. Task Management
|
|
22
|
+
2. Spec-Driven Development
|
|
23
|
+
3. Memory & Context
|
|
24
|
+
4. Bounded Autonomy
|
|
25
|
+
5. Coordination
|
|
26
|
+
6. Observability
|
|
58
27
|
|
|
59
|
-
|
|
28
|
+
Most users should start with just the first two.
|
|
60
29
|
|
|
61
|
-
###
|
|
62
|
-
|
|
63
|
-
Filesystem-backed knowledge that persists, links, and surfaces when relevant.
|
|
30
|
+
### Day 1: Task Management
|
|
64
31
|
|
|
65
32
|
```bash
|
|
66
|
-
#
|
|
67
|
-
tx
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
tx
|
|
71
|
-
tx
|
|
72
|
-
tx
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
tx memory add "JWT Guide" --tags auth,security
|
|
76
|
-
tx memory tag mem-a7f3bc12 reviewed
|
|
77
|
-
tx memory link mem-a7f3bc12 mem-b8e4cd56
|
|
78
|
-
|
|
79
|
-
# Navigate the knowledge graph
|
|
80
|
-
tx memory links mem-a7f3bc12 # Outgoing wikilinks + edges
|
|
81
|
-
tx memory backlinks mem-a7f3bc12 # What links to this?
|
|
33
|
+
tx init --codex # or: --claude, or plain tx init
|
|
34
|
+
tx add "Write auth PRD" --json
|
|
35
|
+
tx add "Implement auth flow" --json
|
|
36
|
+
tx dep block <implement-task-id> <prd-task-id>
|
|
37
|
+
tx ready
|
|
38
|
+
tx show <prd-task-id>
|
|
39
|
+
tx done <prd-task-id>
|
|
40
|
+
tx ready
|
|
41
|
+
tx sync export
|
|
82
42
|
```
|
|
83
43
|
|
|
84
|
-
|
|
44
|
+
This proves the basic loop:
|
|
85
45
|
|
|
86
|
-
|
|
46
|
+
- the queue works
|
|
47
|
+
- dependencies affect readiness
|
|
48
|
+
- completion advances the queue
|
|
49
|
+
- state exports cleanly to `.tx/streams`
|
|
87
50
|
|
|
88
|
-
|
|
51
|
+
### Day 2: Spec-Driven Development
|
|
89
52
|
|
|
90
53
|
```bash
|
|
91
|
-
|
|
92
|
-
tx
|
|
93
|
-
|
|
94
|
-
#
|
|
95
|
-
tx
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
tx
|
|
99
|
-
|
|
100
|
-
tx
|
|
54
|
+
tx doc add prd auth-flow-prd --title "Auth Flow PRD"
|
|
55
|
+
tx doc add design auth-flow-design --title "Auth Flow Design"
|
|
56
|
+
tx doc link auth-flow-prd auth-flow-design
|
|
57
|
+
# add or update tests with [INV-*], _INV_*, @spec, or .tx/spec-tests.yml
|
|
58
|
+
tx spec discover
|
|
59
|
+
tx spec status --doc auth-flow-design
|
|
60
|
+
tx decompose auth-flow-design --dry-run
|
|
61
|
+
tx decompose auth-flow-design
|
|
62
|
+
vitest run --reporter=json | tx spec batch --from vitest
|
|
63
|
+
tx spec complete --doc auth-flow-design --by you
|
|
101
64
|
```
|
|
102
65
|
|
|
103
|
-
|
|
66
|
+
Use the spec primitives like this:
|
|
104
67
|
|
|
105
|
-
|
|
68
|
+
- `tx spec fci`: compact machine score for agents and automation
|
|
69
|
+
- `tx spec status`: human-readable blocker view for one scope
|
|
70
|
+
- `tx spec health`: repo rollup, not part of the minimum day-1 loop
|
|
106
71
|
|
|
107
|
-
|
|
72
|
+
### Human-in-Loop Example
|
|
108
73
|
|
|
109
74
|
```bash
|
|
110
|
-
|
|
111
|
-
tx
|
|
112
|
-
tx
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
# Work on what's ready
|
|
116
|
-
tx ready # Only unblocked tasks
|
|
117
|
-
tx done tx-schema # Completes → unblocks dependents
|
|
75
|
+
task=$(tx ready --limit 1 --json | jq -r '.[0].id')
|
|
76
|
+
codex "Read AGENTS.md. For task $task: run tx show $task, make sure a paired PRD/design doc is linked, then decompose the work into tx subtasks and dependency edges."
|
|
77
|
+
echo "Review tx show $task, tx dep tree $task, and the linked PRD/DD docs, then press Enter to continue..."
|
|
78
|
+
read
|
|
79
|
+
codex "Read AGENTS.md. For task $task: execute the approved ready work from the linked PRD/DD docs and keep tx updated."
|
|
118
80
|
```
|
|
119
81
|
|
|
120
|
-
|
|
82
|
+
## The Six Layers
|
|
121
83
|
|
|
122
|
-
###
|
|
84
|
+
### 1. Task Management
|
|
123
85
|
|
|
124
|
-
|
|
86
|
+
Core queue and persistence:
|
|
125
87
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
88
|
+
- `tx init`
|
|
89
|
+
- `tx add`
|
|
90
|
+
- `tx ready`
|
|
91
|
+
- `tx show`
|
|
92
|
+
- `tx done`
|
|
93
|
+
- `tx dep block`
|
|
94
|
+
- `tx sync`
|
|
132
95
|
|
|
133
|
-
###
|
|
96
|
+
### 2. Spec-Driven Development
|
|
134
97
|
|
|
135
|
-
|
|
98
|
+
Docs-first intent and closure:
|
|
136
99
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
tx
|
|
140
|
-
|
|
141
|
-
tx doc link auth-prd auth-dd # Link PRD to DD
|
|
142
|
-
tx doc drift # Detect stale docs
|
|
143
|
-
```
|
|
100
|
+
- `tx doc`
|
|
101
|
+
- `tx decompose`
|
|
102
|
+
- `tx spec`
|
|
103
|
+
- `tx decision`
|
|
144
104
|
|
|
145
|
-
###
|
|
105
|
+
### 3. Memory & Context
|
|
146
106
|
|
|
147
|
-
|
|
107
|
+
Durable knowledge and prompt context:
|
|
148
108
|
|
|
149
|
-
|
|
150
|
-
tx
|
|
151
|
-
tx invariant show INV-001 # Show details
|
|
152
|
-
tx invariant record INV-001 --passed # Record check result
|
|
153
|
-
tx invariant sync # Sync from CLAUDE.md
|
|
154
|
-
```
|
|
109
|
+
- `tx memory`
|
|
110
|
+
- `tx pin`
|
|
155
111
|
|
|
156
|
-
###
|
|
112
|
+
### 4. Bounded Autonomy
|
|
157
113
|
|
|
158
|
-
|
|
114
|
+
Controls for agents with more freedom:
|
|
159
115
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
116
|
+
- `tx auto label`
|
|
117
|
+
- `tx auto guard`
|
|
118
|
+
- `tx auto verify`
|
|
119
|
+
- `tx auto reflect`
|
|
120
|
+
- `tx auto gate`
|
|
163
121
|
|
|
164
|
-
|
|
122
|
+
### 5. Coordination
|
|
165
123
|
|
|
166
|
-
|
|
124
|
+
Multi-worker and multi-actor primitives:
|
|
167
125
|
|
|
168
|
-
|
|
126
|
+
- `tx claim`
|
|
127
|
+
- `tx msg send` / `tx msg inbox`
|
|
128
|
+
- `tx group-context`
|
|
169
129
|
|
|
170
|
-
|
|
171
|
-
# Simple: one agent, one task
|
|
172
|
-
AGENT_CMD=${AGENT_CMD:-codex} # or: claude
|
|
173
|
-
while task=$(tx ready --limit 1 --json | jq -r '.[0].id'); do
|
|
174
|
-
"$AGENT_CMD" "Work on task $task, then run: tx done $task"
|
|
175
|
-
done
|
|
176
|
-
```
|
|
130
|
+
### 6. Observability
|
|
177
131
|
|
|
178
|
-
|
|
179
|
-
# Parallel: N agents with claims
|
|
180
|
-
AGENT_CMD=${AGENT_CMD:-codex} # or: claude
|
|
181
|
-
for i in {1..5}; do
|
|
182
|
-
(while task=$(tx ready --json --limit 1 | jq -r '.[0].id // empty'); do
|
|
183
|
-
[ -z "$task" ] && break
|
|
184
|
-
tx claim "$task" "worker-$i" || continue
|
|
185
|
-
"$AGENT_CMD" "Complete $task" && tx done "$task"
|
|
186
|
-
done) &
|
|
187
|
-
done
|
|
188
|
-
wait
|
|
189
|
-
```
|
|
132
|
+
Operational visibility once the earlier layers are in place:
|
|
190
133
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
"$AGENT_CMD" "Plan implementation for $task" > plan.md
|
|
196
|
-
read -p "Approve? [y/n] " && "$AGENT_CMD" "Execute plan.md"
|
|
197
|
-
tx done $task
|
|
198
|
-
```
|
|
134
|
+
- `tx trace`
|
|
135
|
+
- `tx spec health`
|
|
136
|
+
- `tx diag stats`
|
|
137
|
+
- dashboard
|
|
199
138
|
|
|
200
|
-
|
|
201
|
-
# File-based: agent reads markdown, no CLI polling needed
|
|
202
|
-
AGENT_CMD=${AGENT_CMD:-claude} # or: codex
|
|
203
|
-
while true; do
|
|
204
|
-
tx md-export # materialize ready tasks to .tx/tasks.md
|
|
205
|
-
"$AGENT_CMD" "Read .tx/tasks.md and complete the highest priority task. When done, run: tx done <id>"
|
|
206
|
-
done
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
**The flow is yours.** Serial, parallel, swarm, human-in-loop, file-based. Your call.
|
|
210
|
-
|
|
211
|
-
---
|
|
212
|
-
|
|
213
|
-
## Watchdog (Opt-In)
|
|
139
|
+
## Interfaces
|
|
214
140
|
|
|
215
|
-
|
|
141
|
+
| Interface | Best For |
|
|
142
|
+
|-----------|----------|
|
|
143
|
+
| CLI | Shell scripts, human operators, local loops |
|
|
144
|
+
| MCP Server | Claude Code, Cursor, IDE integrations |
|
|
145
|
+
| TypeScript SDK | Custom Node/Bun agents |
|
|
146
|
+
| REST API | Language-agnostic HTTP clients |
|
|
147
|
+
| Dashboard | Visual monitoring and management |
|
|
216
148
|
|
|
217
|
-
|
|
218
|
-
- Long-running unattended execution
|
|
219
|
-
- Automatic stalled-run reaping and orphan task reset
|
|
220
|
-
- Background supervision through launchd/systemd
|
|
149
|
+
## Optional Later
|
|
221
150
|
|
|
222
|
-
|
|
223
|
-
- Short interactive sessions
|
|
224
|
-
- One-off local runs you supervise manually
|
|
151
|
+
Watchdog is intentionally not part of the main getting-started path.
|
|
225
152
|
|
|
226
|
-
|
|
153
|
+
Use it only if you need detached, long-running supervision:
|
|
227
154
|
|
|
228
155
|
```bash
|
|
229
156
|
tx init --watchdog --watchdog-runtime auto
|
|
230
157
|
./scripts/watchdog-launcher.sh start
|
|
231
|
-
./scripts/watchdog-launcher.sh status
|
|
232
158
|
```
|
|
233
159
|
|
|
234
|
-
|
|
160
|
+
Runbook:
|
|
161
|
+
|
|
235
162
|
- [Watchdog Runbook](https://txdocs.dev/docs/watchdog-runbook)
|
|
236
163
|
|
|
237
|
-
## Why tx
|
|
164
|
+
## Why tx
|
|
238
165
|
|
|
239
|
-
| | Native Tasks |
|
|
166
|
+
| | Native Tasks | Static Agent Docs | tx |
|
|
240
167
|
|---|---|---|---|
|
|
241
|
-
|
|
|
242
|
-
|
|
|
243
|
-
|
|
|
244
|
-
|
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Design Principles
|
|
249
|
-
|
|
250
|
-
- **No opinions on orchestration.** Serial, parallel, swarm, human-in-loop. Your call.
|
|
251
|
-
- **Powerful defaults.** `tx ready` just works. So does dependency resolution.
|
|
252
|
-
- **Escape hatches everywhere.** Raw SQL access, JSONL export, custom scoring.
|
|
253
|
-
- **Framework agnostic.** CLI, MCP, REST API, TypeScript SDK. Use what fits.
|
|
254
|
-
- **Local-first.** SQLite + git. No server required. Works offline.
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
|
-
## Non-Goals
|
|
259
|
-
|
|
260
|
-
- **Not an agent framework.** You bring your own orchestration.
|
|
261
|
-
- **Not a hosted memory product.** Local-first, your data stays yours.
|
|
262
|
-
- **Not a prompt library.** Primitives, not templates.
|
|
263
|
-
- **Not a replacement for your issue tracker.** (Unless you want it to be.)
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## Interfaces
|
|
268
|
-
|
|
269
|
-
| Interface | Use Case |
|
|
270
|
-
|-----------|----------|
|
|
271
|
-
| **CLI** | Scripts, terminal workflows, agent loops |
|
|
272
|
-
| **MCP Server** | Claude Code integration (42 tools) |
|
|
273
|
-
| **REST API** | Custom dashboards, external integrations |
|
|
274
|
-
| **TypeScript SDK** | Programmatic access from your agents |
|
|
275
|
-
| **Dashboard** | Visual monitoring and management |
|
|
276
|
-
|
|
277
|
-
---
|
|
278
|
-
|
|
279
|
-
## Quick Reference
|
|
280
|
-
|
|
281
|
-
```bash
|
|
282
|
-
# Tasks
|
|
283
|
-
tx add <title> # Create task
|
|
284
|
-
tx list # List all tasks
|
|
285
|
-
tx ready # List unblocked tasks
|
|
286
|
-
tx show <id> # View details
|
|
287
|
-
tx update <id> # Update task fields
|
|
288
|
-
tx done <id> # Complete task
|
|
289
|
-
tx reset <id> # Reset to backlog
|
|
290
|
-
tx delete <id> # Delete task
|
|
291
|
-
tx md-export # Export tasks to markdown file (.tx/tasks.md)
|
|
292
|
-
tx block <id> <blocker> # Add dependency
|
|
293
|
-
tx unblock <id> <blocker> # Remove dependency
|
|
294
|
-
tx children <id> # List child tasks
|
|
295
|
-
tx tree <id> # Show hierarchy
|
|
296
|
-
|
|
297
|
-
# Memory (filesystem-backed .md search)
|
|
298
|
-
tx memory source add <dir> # Register directory
|
|
299
|
-
tx memory source rm <dir> # Unregister directory
|
|
300
|
-
tx memory source list # Show registered directories
|
|
301
|
-
tx memory add <title> # Create .md file (--content, --tags, --dir)
|
|
302
|
-
tx memory index # Index all sources (--incremental, --status)
|
|
303
|
-
tx memory search <query> # BM25 search (--semantic, --expand, --tags, --prop)
|
|
304
|
-
tx memory show <id> # Display document
|
|
305
|
-
tx memory tag <id> <tags> # Add tags to frontmatter
|
|
306
|
-
tx memory untag <id> <t> # Remove tags
|
|
307
|
-
tx memory relate <id> <t> # Add to frontmatter.related
|
|
308
|
-
tx memory set <id> <k> <v> # Set property
|
|
309
|
-
tx memory unset <id> <k> # Remove property
|
|
310
|
-
tx memory props <id> # Show properties
|
|
311
|
-
tx memory links <id> # Outgoing wikilinks + edges
|
|
312
|
-
tx memory backlinks <id> # Incoming links
|
|
313
|
-
tx memory list # List documents (--source, --tags)
|
|
314
|
-
tx memory link <src> <tgt> # Create explicit edge
|
|
315
|
-
|
|
316
|
-
# Memory
|
|
317
|
-
tx memory add <title> # Create .md knowledge file
|
|
318
|
-
tx memory search <query> # BM25 search (--semantic, --expand)
|
|
319
|
-
tx memory context <id> # Task-relevant memory retrieval
|
|
320
|
-
tx memory learn <p> <note> # Attach learning to file path/glob
|
|
321
|
-
tx memory recall [path] # Query file-specific learnings
|
|
322
|
-
tx memory index # Index all sources
|
|
323
|
-
|
|
324
|
-
# Coordination
|
|
325
|
-
tx claim <id> <worker> # Lease-based claim
|
|
326
|
-
tx claim renew <id> <worker> # Extend lease
|
|
327
|
-
tx claim release <id> <worker> # Release early
|
|
328
|
-
|
|
329
|
-
# Docs
|
|
330
|
-
tx doc add <type> <slug> # Create doc
|
|
331
|
-
tx doc edit <slug> # Edit doc
|
|
332
|
-
tx doc show <slug> # Show doc
|
|
333
|
-
tx doc list # List docs
|
|
334
|
-
tx doc render # Generate markdown
|
|
335
|
-
tx doc lock <slug> # Lock (immutable)
|
|
336
|
-
tx doc version <slug> # Create version
|
|
337
|
-
tx doc link <from> <to> # Link docs
|
|
338
|
-
tx doc attach <slug> <task> # Attach to task
|
|
339
|
-
tx doc patch <slug> # Apply patch
|
|
340
|
-
tx doc validate # Validate all docs
|
|
341
|
-
tx doc drift # Detect stale docs
|
|
342
|
-
|
|
343
|
-
# Invariants
|
|
344
|
-
tx invariant list # List invariants
|
|
345
|
-
tx invariant show <id> # Show details
|
|
346
|
-
tx invariant record <id> # Record check result
|
|
347
|
-
tx invariant sync # Sync from CLAUDE.md
|
|
348
|
-
|
|
349
|
-
# Sync
|
|
350
|
-
tx sync export # SQLite → JSONL (git-friendly)
|
|
351
|
-
tx sync import # JSONL → SQLite
|
|
352
|
-
tx sync status # Show sync status
|
|
353
|
-
tx sync auto # Auto-sync on change
|
|
354
|
-
tx sync compact # Compact JSONL files
|
|
355
|
-
tx sync claude --team <name> # Push to Claude Code team
|
|
356
|
-
tx sync codex # Push to Codex
|
|
357
|
-
|
|
358
|
-
# Traces
|
|
359
|
-
tx trace list # Recent runs
|
|
360
|
-
tx trace show <id> # Show trace details
|
|
361
|
-
tx trace transcript <id> # View transcript
|
|
362
|
-
tx trace stderr <id> # View stderr
|
|
363
|
-
tx trace errors # Recent errors
|
|
364
|
-
|
|
365
|
-
# Bulk
|
|
366
|
-
tx bulk done <ids...> # Complete multiple tasks
|
|
367
|
-
tx bulk score <ids...> # Score multiple tasks
|
|
368
|
-
tx bulk reset <ids...> # Reset multiple tasks
|
|
369
|
-
tx bulk delete <ids...> # Delete multiple tasks
|
|
370
|
-
|
|
371
|
-
# Cycle
|
|
372
|
-
tx cycle # Sub-agent swarm scan
|
|
373
|
-
|
|
374
|
-
# Utilities
|
|
375
|
-
tx stats # Queue metrics
|
|
376
|
-
tx validate # Database health checks
|
|
377
|
-
tx migrate status # Migration status
|
|
378
|
-
tx doctor # System diagnostics
|
|
379
|
-
tx dashboard # Launch dashboard
|
|
380
|
-
tx mcp-server # Start MCP server
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
---
|
|
384
|
-
|
|
385
|
-
## Storage
|
|
386
|
-
|
|
387
|
-
```
|
|
388
|
-
.tx/
|
|
389
|
-
├── tasks.db # SQLite (gitignored)
|
|
390
|
-
├── tasks.jsonl # Git-tracked
|
|
391
|
-
├── learnings.jsonl # Git-tracked
|
|
392
|
-
├── runs.jsonl # Git-tracked
|
|
393
|
-
└── docs/ # YAML doc sources
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
Local SQLite for speed. JSONL for git sync. Branch your knowledge with your code.
|
|
397
|
-
|
|
398
|
-
---
|
|
399
|
-
|
|
400
|
-
## Packages
|
|
401
|
-
|
|
402
|
-
| Package | Description |
|
|
403
|
-
|---------|-------------|
|
|
404
|
-
| [`@jamesaphoenix/tx`](https://www.npmjs.com/package/@jamesaphoenix/tx) | Public SDK |
|
|
405
|
-
| [`@jamesaphoenix/tx-cli`](https://www.npmjs.com/package/@jamesaphoenix/tx-cli) | CLI |
|
|
406
|
-
| [`@jamesaphoenix/tx-core`](https://www.npmjs.com/package/@jamesaphoenix/tx-core) | Core service layer (Effect-TS) |
|
|
407
|
-
| [`@jamesaphoenix/tx-types`](https://www.npmjs.com/package/@jamesaphoenix/tx-types) | Shared type definitions |
|
|
408
|
-
| [`@jamesaphoenix/tx-agent-sdk`](https://www.npmjs.com/package/@jamesaphoenix/tx-agent-sdk) | TypeScript Agent SDK |
|
|
409
|
-
| [`@jamesaphoenix/tx-mcp-server`](https://www.npmjs.com/package/@jamesaphoenix/tx-mcp-server) | MCP server (42 tools) |
|
|
410
|
-
| [`@jamesaphoenix/tx-api-server`](https://www.npmjs.com/package/@jamesaphoenix/tx-api-server) | REST API server |
|
|
411
|
-
|
|
412
|
-
---
|
|
168
|
+
| Persistence | Session-scoped | Manual file edits | SQLite + git-backed streams |
|
|
169
|
+
| Multi-agent safety | Easy collisions | Manual coordination | Claims, dependencies, messaging |
|
|
170
|
+
| Intent tracking | Weak | Weak | Docs-first specs + decision capture |
|
|
171
|
+
| Knowledge reuse | Lost each session | Static dump | Searchable memory + pins |
|
|
172
|
+
| Orchestration | Fixed by tool | None | You own the loop |
|
|
413
173
|
|
|
414
|
-
##
|
|
174
|
+
## Docs
|
|
415
175
|
|
|
416
|
-
-
|
|
417
|
-
-
|
|
418
|
-
-
|
|
419
|
-
-
|
|
176
|
+
- [Getting Started](https://txdocs.dev/docs/getting-started)
|
|
177
|
+
- [Primitives](https://txdocs.dev/docs/primitives)
|
|
178
|
+
- [Agent SDK](https://txdocs.dev/docs/agent-sdk)
|
|
179
|
+
- [PRDs and Design Docs](https://txdocs.dev/docs/prd)
|
|
420
180
|
|
|
421
|
-
|
|
181
|
+
## Principle
|
|
422
182
|
|
|
423
|
-
|
|
183
|
+
tx should stay small.
|
|
424
184
|
|
|
425
|
-
|
|
185
|
+
It is not an agent framework, not a hosted memory product, and not a prescribed workflow. It is a local set of primitives you can compose into your own loop.
|
|
@@ -56,7 +56,7 @@ export interface SharedTestLayer<L> {
|
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export declare const createSharedTestLayer: () => Promise<{
|
|
59
|
-
layer: Layer.Layer<import("@jamesaphoenix/tx-core").MigrationService | import("@jamesaphoenix/tx-core").SqliteClient | import("@jamesaphoenix/tx-core").TaskRepository | import("@jamesaphoenix/tx-core").DependencyRepository | import("@jamesaphoenix/tx-core").LearningRepository | import("@jamesaphoenix/tx-core").FileLearningRepository | import("@jamesaphoenix/tx-core").AttemptRepository | import("@jamesaphoenix/tx-core").RunRepository | import("@jamesaphoenix/tx-core").AnchorRepository | import("@jamesaphoenix/tx-core").EdgeRepository | import("@jamesaphoenix/tx-core").DeduplicationRepository | import("@jamesaphoenix/tx-core").CandidateRepository | import("@jamesaphoenix/tx-core").TrackedProjectRepository | import("@jamesaphoenix/tx-core").WorkerRepository | import("@jamesaphoenix/tx-core").ClaimRepository | import("@jamesaphoenix/tx-core").ProcessRegistryRepository | import("@jamesaphoenix/tx-core").OrchestratorStateRepository | import("@jamesaphoenix/tx-core").GuardRepository | import("@jamesaphoenix/tx-core").PinRepository | import("@jamesaphoenix/tx-core").TaskService | import("@jamesaphoenix/tx-core").DependencyService | import("@jamesaphoenix/tx-core").ClaimService | import("@jamesaphoenix/tx-core").ReadyService | import("@jamesaphoenix/tx-core").HierarchyService | import("@jamesaphoenix/tx-core").EdgeService | typeof import("@jamesaphoenix/tx-core").GraphExpansionService | import("@jamesaphoenix/tx-core").FeedbackTrackerService | import("@jamesaphoenix/tx-core").DiversifierService | import("@jamesaphoenix/tx-core").RetrieverService | import("@jamesaphoenix/tx-core").LearningService | import("@jamesaphoenix/tx-core").FileLearningService | import("@jamesaphoenix/tx-core").AttemptService | import("@jamesaphoenix/tx-core").AnchorVerificationService | import("@jamesaphoenix/tx-core").AnchorService | import("@jamesaphoenix/tx-core").DeduplicationService | import("@jamesaphoenix/tx-core").StreamService | import("@jamesaphoenix/tx-core").
|
|
59
|
+
layer: Layer.Layer<import("@jamesaphoenix/tx-core").MigrationService | import("@jamesaphoenix/tx-core").SqliteClient | import("@jamesaphoenix/tx-core").TaskRepository | import("@jamesaphoenix/tx-core").DependencyRepository | import("@jamesaphoenix/tx-core").LearningRepository | import("@jamesaphoenix/tx-core").FileLearningRepository | import("@jamesaphoenix/tx-core").AttemptRepository | import("@jamesaphoenix/tx-core").RunRepository | import("@jamesaphoenix/tx-core").AnchorRepository | import("@jamesaphoenix/tx-core").EdgeRepository | import("@jamesaphoenix/tx-core").DeduplicationRepository | import("@jamesaphoenix/tx-core").CandidateRepository | import("@jamesaphoenix/tx-core").TrackedProjectRepository | import("@jamesaphoenix/tx-core").WorkerRepository | import("@jamesaphoenix/tx-core").ClaimRepository | import("@jamesaphoenix/tx-core").ProcessRegistryRepository | import("@jamesaphoenix/tx-core").OrchestratorStateRepository | import("@jamesaphoenix/tx-core").GuardRepository | import("@jamesaphoenix/tx-core").PinRepository | import("@jamesaphoenix/tx-core").DocRepository | import("@jamesaphoenix/tx-core").TaskService | import("@jamesaphoenix/tx-core").DependencyService | import("@jamesaphoenix/tx-core").ClaimService | import("@jamesaphoenix/tx-core").ReadyService | import("@jamesaphoenix/tx-core").HierarchyService | import("@jamesaphoenix/tx-core").EdgeService | typeof import("@jamesaphoenix/tx-core").GraphExpansionService | import("@jamesaphoenix/tx-core").FeedbackTrackerService | import("@jamesaphoenix/tx-core").DiversifierService | import("@jamesaphoenix/tx-core").RetrieverService | import("@jamesaphoenix/tx-core").LearningService | import("@jamesaphoenix/tx-core").FileLearningService | import("@jamesaphoenix/tx-core").AttemptService | import("@jamesaphoenix/tx-core").AnchorVerificationService | import("@jamesaphoenix/tx-core").AnchorService | import("@jamesaphoenix/tx-core").DeduplicationService | import("@jamesaphoenix/tx-core").StreamService | import("@jamesaphoenix/tx-core").SyncService | import("@jamesaphoenix/tx-core").SwarmVerificationService | import("@jamesaphoenix/tx-core").PromotionService | import("@jamesaphoenix/tx-core").WorkerService | import("@jamesaphoenix/tx-core").RunHeartbeatService | import("@jamesaphoenix/tx-core").ProcessRegistryService | import("@jamesaphoenix/tx-core").OrchestratorService | import("@jamesaphoenix/tx-core").DaemonService | import("@jamesaphoenix/tx-core").TracingService | import("@jamesaphoenix/tx-core").CompactionRepository | import("@jamesaphoenix/tx-core").CompactionService | import("@jamesaphoenix/tx-core").ValidationService | import("@jamesaphoenix/tx-core").MessageRepository | import("@jamesaphoenix/tx-core").MessageService | import("@jamesaphoenix/tx-core").DocService | import("@jamesaphoenix/tx-core").MemoryDocumentRepository | import("@jamesaphoenix/tx-core").MemoryLinkRepository | import("@jamesaphoenix/tx-core").MemoryPropertyRepository | import("@jamesaphoenix/tx-core").MemorySourceRepository | import("@jamesaphoenix/tx-core").MemoryService | import("@jamesaphoenix/tx-core").MemoryRetrieverService | import("@jamesaphoenix/tx-core").PinService | import("@jamesaphoenix/tx-core").LabelRepository | import("@jamesaphoenix/tx-core").GuardService | import("@jamesaphoenix/tx-core").VerifyService | import("@jamesaphoenix/tx-core").ReflectService | import("@jamesaphoenix/tx-core").SpecTraceRepository | import("@jamesaphoenix/tx-core").SpecTraceService | import("@jamesaphoenix/tx-core/layer").DecisionRepository | import("@jamesaphoenix/tx-core").DecisionService | import("@jamesaphoenix/tx-core").DomainEventRepository | import("@jamesaphoenix/tx-core").SupervisionRepository | import("@jamesaphoenix/tx-core").DocReviewRepository | import("@jamesaphoenix/tx-core").DomainEventService | import("@jamesaphoenix/tx-core").SupervisionService | import("@jamesaphoenix/tx-core").DocReviewService | import("@jamesaphoenix/tx-core").ReviewRuntime, import("@jamesaphoenix/tx-core").DatabaseError, never>;
|
|
60
60
|
reset: () => Promise<void>;
|
|
61
61
|
close: () => Promise<void>;
|
|
62
62
|
getDb: () => Database;
|