@magnusekdahl/parallix 1.3.4 → 1.5.126
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/NOTICES +1423 -0
- package/README.md +76 -103
- package/build/asset-manifest.json +129 -0
- package/{config → build/config}/agents.json +4 -8
- package/build/manifest.sha256 +40 -0
- package/build/migrations/0001-initial-schema.sql +91 -0
- package/build/migrations/0002-import-history.sql +16 -0
- package/build/migrations/0003-board-lane-events.sql +72 -0
- package/build/migrations/0004-mission-aggregate.sql +151 -0
- package/build/migrations/0005-mission-external-task-ref.sql +18 -0
- package/build/migrations/0005-repository-scoped-session-markers.sql +47 -0
- package/build/migrations/0006-session-markers.sql +35 -0
- package/build/migrations/0007-usage-statistics-identity.sql +60 -0
- package/build/migrations/0008-review-workflow-state.sql +61 -0
- package/build/migrations/0009-review-gate-retries.sql +16 -0
- package/build/migrations/0010-review-events-and-implementer-response.sql +64 -0
- package/build/migrations/0011-board-lane-events-repository-id.sql +89 -0
- package/build/migrations/0012-review-hook-retries.sql +11 -0
- package/build/migrations/0013-usage-statistics-thoughts-tokens.sql +11 -0
- package/build/migrations/0014-remove-usage-closed.sql +33 -0
- package/build/migrations/0015-current-work-latest-per-mission.sql +5 -0
- package/build/migrations/0016-review-drop-retry-counters.sql +21 -0
- package/build/migrations/0017-retire-mission-import-provenance.sql +5 -0
- package/build/migrations/0018-adhoc-mission-counter.sql +19 -0
- package/build/migrations/0019-custom-agent-leases.sql +12 -0
- package/build/package.json +5 -0
- package/{prompts/act-on-review.md → build/prompts/act-on-review-core.md} +6 -4
- package/build/prompts/act-on-review.md +1 -0
- package/{prompts/draft.md → build/prompts/draft-core.md} +8 -1
- package/build/prompts/execute-core.md +37 -0
- package/build/prompts/execute.md +0 -0
- package/build/prompts/review-core.md +71 -0
- package/build/prompts/review.md +0 -0
- package/build/px.mjs +1226 -0
- package/build/px.mjs.map +7 -0
- package/build/sbom.json +2155 -0
- package/build/templates/mission-scaffold.md +61 -0
- package/build/web/assets/index-B8Hv3ORh.js +9 -0
- package/build/web/assets/index-DYY4ROtr.css +1 -0
- package/build/web/index.html +13 -0
- package/build/web/manifest.json +20 -0
- package/package.json +56 -30
- package/CHANGELOG.md +0 -140
- package/config/agents.local.json.template +0 -8
- package/config/integration-pipelines.json +0 -14
- package/config/state-map.json.template +0 -31
- package/config/workflow.config.schema.json +0 -110
- package/docs/adr/0031-ai-agent-instruction-boundary-and-command-floor.md +0 -114
- package/docs/adr/0032-mission-refinement-state-and-usage-budget-signals.md +0 -137
- package/docs/adr/0034-module-and-skill-invocation-model.md +0 -202
- package/docs/adr/0036-mission-sizing-and-dependency-wave-heuristics.md +0 -81
- package/docs/adr/0037-ai-workflow-coordination-architecture.md +0 -162
- package/docs/adr/0041-integration-pipeline-gates.md +0 -165
- package/docs/adr/0042-workflow-cli-color-rendering-approach.md +0 -106
- package/docs/adr/0043-git-target-resolution-strategy.md +0 -185
- package/docs/adr/0044-workflow-distribution-model.md +0 -277
- package/docs/adr/0045-parallax-branch-model.md +0 -182
- package/docs/adr/0046-npm-publish-process-and-security.md +0 -138
- package/docs/adr/0047-per-mission-change-size-budget.md +0 -161
- package/docs/adr/0048-fail-closed-harness-defense-against-agent-hallucinations.md +0 -161
- package/docs/adr/index.md +0 -23
- package/docs/agents.md +0 -212
- package/docs/authority-reference.md +0 -328
- package/docs/doc-standards.md +0 -89
- package/docs/forgejo-setup.md +0 -55
- package/docs/migration/extraction.md +0 -61
- package/docs/migration/task-classification.md +0 -36
- package/docs/operator-setup.md +0 -76
- package/docs/readme-rewrite-benchmark.md +0 -188
- package/docs/use-cases.md +0 -149
- package/examples/README.md +0 -62
- package/examples/run-enterprise-tarball-workflow-smoke.sh +0 -257
- package/examples/run-verify-env-smoke.sh +0 -40
- package/index.js +0 -262
- package/lib/README.md +0 -13
- package/lib/agents/agents.js +0 -880
- package/lib/agents/agents.ts +0 -978
- package/lib/agents/claude-telemetry.js +0 -232
- package/lib/agents/claude-telemetry.ts +0 -233
- package/lib/agents/claude.js +0 -152
- package/lib/agents/claude.ts +0 -158
- package/lib/agents/codex-telemetry.js +0 -227
- package/lib/agents/codex-telemetry.ts +0 -205
- package/lib/agents/codex.js +0 -213
- package/lib/agents/codex.ts +0 -238
- package/lib/agents/limit-hit.js +0 -259
- package/lib/agents/limit-hit.ts +0 -262
- package/lib/agents/mistral-telemetry.js +0 -140
- package/lib/agents/mistral-telemetry.ts +0 -159
- package/lib/agents/mistral.js +0 -174
- package/lib/agents/mistral.ts +0 -224
- package/lib/agents/opencode-export.js +0 -158
- package/lib/agents/opencode-export.ts +0 -160
- package/lib/agents/opencode-telemetry.js +0 -372
- package/lib/agents/opencode-telemetry.ts +0 -350
- package/lib/agents/opencode.js +0 -355
- package/lib/agents/opencode.ts +0 -372
- package/lib/agents/stage-telemetry.js +0 -41
- package/lib/agents/stage-telemetry.ts +0 -47
- package/lib/commands/active.js +0 -642
- package/lib/commands/active.ts +0 -707
- package/lib/commands/checkpoint.js +0 -102
- package/lib/commands/checkpoint.ts +0 -79
- package/lib/commands/config.js +0 -76
- package/lib/commands/config.ts +0 -52
- package/lib/commands/coverage-gate.js +0 -408
- package/lib/commands/coverage-gate.ts +0 -367
- package/lib/commands/diff.js +0 -151
- package/lib/commands/diff.ts +0 -130
- package/lib/commands/draft.js +0 -920
- package/lib/commands/draft.ts +0 -1026
- package/lib/commands/handoff.js +0 -685
- package/lib/commands/handoff.ts +0 -705
- package/lib/commands/integrate.js +0 -1612
- package/lib/commands/integrate.ts +0 -1724
- package/lib/commands/mission-start.js +0 -313
- package/lib/commands/mission-start.ts +0 -268
- package/lib/commands/rebase.js +0 -667
- package/lib/commands/rebase.ts +0 -639
- package/lib/commands/repair-handoff.js +0 -363
- package/lib/commands/repair-handoff.ts +0 -373
- package/lib/commands/resolve-conflict.js +0 -137
- package/lib/commands/resolve-conflict.ts +0 -117
- package/lib/commands/review.js +0 -18
- package/lib/commands/review.ts +0 -19
- package/lib/commands/setup-review.js +0 -18
- package/lib/commands/setup-review.ts +0 -19
- package/lib/commands/setup.js +0 -9
- package/lib/commands/setup.ts +0 -7
- package/lib/commands/stats-backfill.js +0 -448
- package/lib/commands/stats-backfill.ts +0 -423
- package/lib/commands/stats.js +0 -2016
- package/lib/commands/stats.ts +0 -2135
- package/lib/commands/status.js +0 -246
- package/lib/commands/status.ts +0 -224
- package/lib/commands/verify.js +0 -12
- package/lib/commands/verify.ts +0 -7
- package/lib/core/fmt.js +0 -178
- package/lib/core/fmt.ts +0 -189
- package/lib/core/git.js +0 -140
- package/lib/core/git.ts +0 -146
- package/lib/core/gitignore.js +0 -73
- package/lib/core/gitignore.ts +0 -108
- package/lib/core/mission-utils.js +0 -1058
- package/lib/core/mission-utils.ts +0 -998
- package/lib/core/nels.js +0 -184
- package/lib/core/nels.ts +0 -189
- package/lib/core/persistent-data-migration.js +0 -285
- package/lib/core/persistent-data-migration.ts +0 -257
- package/lib/core/product-config.js +0 -460
- package/lib/core/product-config.ts +0 -518
- package/lib/core/runtime-matrix.js +0 -49
- package/lib/core/runtime-matrix.ts +0 -84
- package/lib/core/spawn-tee.js +0 -160
- package/lib/core/spawn-tee.ts +0 -202
- package/lib/core/state-map.js +0 -108
- package/lib/core/state-map.ts +0 -115
- package/lib/core/storage.js +0 -151
- package/lib/core/storage.ts +0 -182
- package/lib/core/subagent-limit.js +0 -27
- package/lib/core/subagent-limit.ts +0 -25
- package/lib/core/verification.js +0 -176
- package/lib/core/verification.ts +0 -200
- package/lib/index.js +0 -160
- package/lib/index.ts +0 -134
- package/lib/review/rebase.js +0 -168
- package/lib/review/rebase.ts +0 -188
- package/lib/review/review-adapter.js +0 -234
- package/lib/review/review-adapter.ts +0 -198
- package/lib/review/review-artifacts.js +0 -542
- package/lib/review/review-artifacts.ts +0 -622
- package/lib/review/review-commands.js +0 -1318
- package/lib/review/review-commands.ts +0 -1579
- package/lib/review/review-events.js +0 -716
- package/lib/review/review-events.ts +0 -954
- package/lib/review/review-loop.js +0 -1271
- package/lib/review/review-loop.ts +0 -1493
- package/lib/review/review-polling.js +0 -132
- package/lib/review/review-polling.ts +0 -194
- package/lib/review/review-prompts.js +0 -212
- package/lib/review/review-prompts.ts +0 -186
- package/lib/review/review-state.js +0 -325
- package/lib/review/review-state.ts +0 -353
- package/lib/review/review.js +0 -126
- package/lib/review/review.ts +0 -143
- package/lib/tools/backlog.js +0 -848
- package/lib/tools/backlog.ts +0 -835
- package/lib/tools/forgejo.js +0 -1659
- package/lib/tools/forgejo.ts +0 -1793
- package/lib/tools/gatekeeper.js +0 -134
- package/lib/tools/gatekeeper.ts +0 -124
- package/lib/tools/redgreen.js +0 -239
- package/lib/tools/redgreen.ts +0 -221
- package/lib/tools/sessions.js +0 -87
- package/lib/tools/sessions.ts +0 -81
- package/lib/tools/setup-review.js +0 -1083
- package/lib/tools/setup-review.ts +0 -1152
- package/prompts/act-on-review-verbose.md +0 -20
- package/prompts/execute.md +0 -24
- package/prompts/portfolio.md +0 -30
- package/prompts/review-verbose.md +0 -36
- package/prompts/review.md +0 -50
- package/px.js +0 -268
- package/templates/AGENTS-snippet.md +0 -14
- package/templates/AGENTS.md.template +0 -34
- package/templates/CLAUDE.md.template +0 -27
- package/templates/CODEX.md.template +0 -38
- package/templates/MISTRAL.md.template +0 -24
- package/templates/claude-commands/act-on-review.md +0 -3
- package/templates/claude-commands/area-review.md +0 -3
- package/templates/claude-commands/draft.md +0 -6
- package/templates/claude-commands/execute.md +0 -6
- package/templates/claude-commands/integrate.md +0 -4
- package/templates/claude-commands/portfolio.md +0 -5
- package/templates/claude-commands/review.md +0 -4
- package/templates/codex/config.toml +0 -6
- package/templates/mission-scaffold.md +0 -39
- package/templates/vibe/skills/act-on-review/SKILL.md +0 -16
- package/templates/vibe/skills/area-review/SKILL.md +0 -16
- package/templates/vibe/skills/draft/SKILL.md +0 -16
- package/templates/vibe/skills/execute/SKILL.md +0 -16
- package/templates/vibe/skills/integrate/SKILL.md +0 -16
- package/templates/vibe/skills/portfolio/SKILL.md +0 -21
- package/templates/vibe/skills/review/SKILL.md +0 -16
- package/tools/setup-forgejo-docker.sh +0 -87
- /package/{config → build/config}/state-map.json +0 -0
- /package/{data/.gitkeep → build/prompts/draft.md} +0 -0
package/README.md
CHANGED
|
@@ -1,45 +1,52 @@
|
|
|
1
1
|
# Parallix
|
|
2
2
|
|
|
3
|
-
**Parallix is
|
|
3
|
+
**Parallix is an agent-agnostic, local-first workflow that puts a trust ladder around AI coding work: separate review that prefers a different agent family when one is available, repository-owned verification where you configure a gate, Linux Bubblewrap confinement when available (falling back to an agent's native sandbox, or blocking until explicit consent when neither exists), and a human-owned squash merge.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Coding agents become much more useful when you can run several pieces of work at once. But simply starting more agents quickly creates a new bottleneck: they compete for the same working tree, lose context across long runs, hit provider limits, and produce more changes than one engineer can safely supervise and integrate.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Parallix is the delivery layer around those agents. It gives every piece of work an isolated mission, lets multiple missions progress concurrently, preserves execution across sessions, separates implementation from review, runs repository-owned verification, and leaves the final integration decision with the human operator. Parallel Git isolation is how that trust ladder can operate across concurrent missions instead of one shared checkout.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Parallix is deliberately not tied to one agent vendor or model family. The same mission workflow can use different agent families for drafting, implementation, and review, including commercially hosted agents, locally hosted AI, and custom runtimes.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
For Bash, install Parallix and load its bundled worktree-switching integration
|
|
14
|
+
in one step:
|
|
10
15
|
|
|
11
16
|
```sh
|
|
12
|
-
npm install -g @magnusekdahl/parallix
|
|
13
|
-
px draft "create a hello world program"
|
|
14
|
-
px active
|
|
15
|
-
px integrate
|
|
17
|
+
npm install -g @magnusekdahl/parallix && eval "$(px shell-init bash)"
|
|
16
18
|
```
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
**The first concrete thing you can do** is run one complete mission:
|
|
21
|
+
|
|
22
|
+
[](https://raw.githubusercontent.com/oxtan-maker/parallix/main/docs/assets/first-value-demo.gif)
|
|
23
|
+
|
|
24
|
+
The operator inspects the drafted mission before execution, then inspects the reviewed diff and decides whether to run `px integrate`. Parallix does not merge autonomously.
|
|
25
|
+
|
|
19
26
|
|
|
20
27
|
## Why Parallix?
|
|
21
28
|
|
|
22
|
-
|
|
29
|
+
The main reason to use coding agents is leverage: while one agent is working, another can be working on something else. The useful ceiling is therefore not how fast one agent can type code, but **how much trustworthy work one engineer can keep moving in parallel**, and running one session at a time leaves most of that unused. Simply starting several agents, however, creates a new set of coordination problems:
|
|
23
30
|
|
|
24
|
-
- **One working tree, many agents.** Point two agents at the same checkout and they fight over the index, the branch, and uncommitted files. You either serialize them —
|
|
31
|
+
- **One working tree, many agents.** Point two agents at the same checkout and they fight over the index, the branch, and uncommitted files. You either serialize them — throwing away the parallelism — or hand-manage `git worktree` and branch names yourself.
|
|
25
32
|
- **Runs die on usage caps.** An agent prints "usage limit reached", the run stops, and you babysit it: restart later or hand-switch to a different model.
|
|
26
33
|
- **Long tasks lose their place.** A crashed or context-exhausted agent leaves you reconstructing what was already done by re-reading diffs.
|
|
27
34
|
- **The author grades its own homework.** The agent that wrote the change also declares it done. Nobody independent looks before it lands.
|
|
28
35
|
|
|
29
|
-
Parallix is a mission-based development workflow that addresses each of these directly
|
|
36
|
+
Parallix is a mission-based development workflow that addresses each of these directly so parallel agents can translate into actual delivery throughput. The mechanics live in tested code rather than in prompts. It is not another agent or model — it is the operator-owned layer around the agents you already use.
|
|
30
37
|
|
|
31
38
|
## What it does
|
|
32
39
|
|
|
33
|
-
Each capability below is tied to a use case in [`docs/use-cases.md`](docs/use-cases.md), with the confidence level (Confirmed / Partial) carried through honestly.
|
|
34
|
-
|
|
35
40
|
- **Run several AI coding agents on one repo without clobbering each other**. Every mission gets its own `mission/<slug>` branch and its own sibling git worktree (`../<repo>-<slug>`) automatically, so N agents make progress independently and each lands by squash-merge.
|
|
36
|
-
- **
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
41
|
+
- **Use different agent families — including local AI — in the same workflow**. Parallix owns the mission lifecycle rather than one vendor's agent framework. Drafting, implementation, and review can use different eligible families, and custom/local runtimes participate in the same branch, checkpoint, review, and integration model.
|
|
42
|
+
- **Fail over automatically when an agent hits its usage limit**. Per-family limit messages are pattern-detected; the agent family is written to a timed blocklist and the run retries with the next eligible, unblocked family. Only when all are exhausted does it fail loudly. Agent usage limits stop a single session; they don't have to stop the mission.
|
|
43
|
+
- **Resume a long mission deterministically**. The execution agent records completed checkpoints with evidence and a concrete next action, and commits them locally, so a later session or a different agent can resume from the recorded progress.
|
|
44
|
+
- **Force a second, preferentially-different coding agent review before merge**. Review is a separate step whose reviewer selection excludes the implementer to prefer a different agent family, and a self-approval is code-blocked at the provider. It falls back to the same family when no other agent is runnable, so this forces a second review *attempt* — it only guarantees a different reviewer when one is available.
|
|
45
|
+
- **Publish work to a Forgejo reviewer surface without making Forgejo your branch authority**. When the review provider is enabled, Parallix syncs the local baseline to a dedicated `review` remote running locally and opens or updates the PR there; if Forgejo is disabled, the branch/worktree flow still runs without it.
|
|
40
46
|
- **Use a repo-local Graphify knowledge graph for smaller codebase context pulls**. In repositories where the operator has already installed the Graphify skill, the workflow keeps `graphify-out/` isolated per worktree and refreshes it during review/integration, while the installed agent guidance steers codebase questions toward `graphify query` / `path` / `explain` before full reports or raw grep. That reduces token-usage.
|
|
41
47
|
- **Keep your existing verification gate instead of agent self-reporting**. The gate is a configured shell command with a no-op default: declare your existing `make` / `npm` / script command in `workflow.config.json` and it runs verbatim; declare nothing and verification is a documented no-op pass, not an invented gate.
|
|
42
|
-
- **
|
|
48
|
+
- **Confine supported agent processes with Bubblewrap on Linux**. When Bubblewrap is available, Parallix mounts the host filesystem read-only and selectively grants write access required by the current mission. Implementation gets its mission worktree and required Git state writable; review keeps the worktree read-only. If Bubblewrap is unavailable, Parallix falls back to the agent's own native sandbox where the family exposes one (e.g. Codex `--sandbox`, Qwen `-s`), otherwise it blocks the mutating launch until the operator explicitly consents to run unsandboxed — no silent fallback.
|
|
49
|
+
- **Evaluate which agent family actually pays off across every repo one runtime drives**. A single operator-owned measurement database (`<PARALLIX_HOME>/parallix.db`) accumulates per-agent usage telemetry across repositories.
|
|
43
50
|
|
|
44
51
|
## The core workflow
|
|
45
52
|
|
|
@@ -53,76 +60,23 @@ backlog → draft → active → review → approved → done
|
|
|
53
60
|
checkpoints gates cleanup
|
|
54
61
|
```
|
|
55
62
|
|
|
56
|
-
In practice: a human drafts a mission, Parallix creates the branch and worktree, an agent runs and writes checkpoints, a verification gate runs, a second
|
|
57
|
-
|
|
58
|
-
## Quick start
|
|
59
|
-
|
|
60
|
-
Install from the public npm registry and run a complete mission:
|
|
61
|
-
|
|
62
|
-
```sh
|
|
63
|
-
npm install -g @magnusekdahl/parallix
|
|
64
|
-
px draft "hello world"
|
|
65
|
-
px active
|
|
66
|
-
px integrate
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
`px draft` creates the mission branch, sibling worktree, mission file, and task record. Then `cd` into the mission worktree and run `px active` and `px integrate` there with no slug; the CLI infers the mission from the current branch/worktree.
|
|
70
|
-
|
|
71
|
-
Other draft entry points are available when you need them:
|
|
72
|
-
|
|
73
|
-
```sh
|
|
74
|
-
# Draft from the current repository directory name
|
|
75
|
-
px draft .
|
|
76
|
-
|
|
77
|
-
# Draft from an existing structured task file
|
|
78
|
-
px draft task-001
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Optional but useful: run `px setup` if you want help creating `workflow.config.json`, appending workflow entries to `.gitignore`, or bootstrapping Forgejo review wiring.
|
|
82
|
-
|
|
83
|
-
Optional but useful: add `px shell-init` to your shell rc so mission transitions can `cd` your terminal into the next worktree:
|
|
84
|
-
|
|
85
|
-
```sh
|
|
86
|
-
echo 'eval "$(px shell-init bash)"' >> ~/.bashrc
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Alternatively, install from a local tarball (useful for development or when offline):
|
|
90
|
-
|
|
91
|
-
```sh
|
|
92
|
-
npm pack
|
|
93
|
-
npm install -g ./magnus-parallix-*.tgz
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Parallix runs on built-in defaults without setup. `px setup` becomes useful when you want to configure your verification command, customize the mission layout, or bootstrap the Forgejo review surface (repo, token files, and `review` remote). Forgejo is the PR viewer and publication surface here, not the authority for local branch ancestry or integration.
|
|
97
|
-
|
|
98
|
-
`px draft` now works without a pre-existing task file. If the input is free text or a directory path, Parallix creates a synthetic markdown task with classification `unknown` so the later phases, stats, and preflight checks still have a consistent record to work from.
|
|
99
|
-
|
|
100
|
-
If you already use Backlog.md-style task files, that still works. `px draft task-001` remains valid, and Parallix will use the existing task metadata and classification when it is present.
|
|
101
|
-
|
|
102
|
-
## Optional task files
|
|
63
|
+
In practice: a human drafts a mission, Parallix creates the branch and worktree, an agent runs and writes checkpoints, a configured verification gate runs, a second agent reviews the diff, and only then is the work integrated back to your primary branch by squash-merge. Review uses a different agent family when one is available; when none is runnable, it falls back to the same family as a second review attempt. Blocking review findings loop back to `active` on the same branch and PR.
|
|
103
64
|
|
|
104
|
-
|
|
65
|
+
## Defence in depth
|
|
105
66
|
|
|
106
|
-
|
|
107
|
-
backlog/tasks/task-001 - my-first-task.md
|
|
108
|
-
---
|
|
109
|
-
id: TASK-001
|
|
110
|
-
title: my first task
|
|
111
|
-
status: backlog
|
|
112
|
-
assignee: []
|
|
113
|
-
labels: ["user_value"]
|
|
114
|
-
dependencies: []
|
|
115
|
-
---
|
|
116
|
-
```
|
|
67
|
+
Running several agents in parallel is only worth doing if you can trust what comes back. Parallix combines isolation, mission-specific checks, separate review, and automatic repair so confidence comes from checked results throughout delivery.
|
|
117
68
|
|
|
118
|
-
|
|
69
|
+
1. **Isolation.** Every mission gets its own branch and sibling worktree, so parallel agents do not compete over the same working tree, index, or branch.
|
|
70
|
+
2. **Confinement.** On Linux with Bubblewrap enabled, supported agent processes see a read-only host filesystem, with write access limited to the mission worktree and the Git, temporary, and agent-state paths needed for the current step. During review, the mission worktree is read-only too.
|
|
71
|
+
3. **Your existing checks at lifecycle transitions.** Connect your test pyramid by assigning existing test commands to the stages where you want them to run. For example, run fast unit tests and static analysis before a mission moves from `active` to `review`, and reserve expensive integration and end-to-end suites for the final merge. Parallix runs the selected commands and blocks progress when they fail. The [lifecycle check configuration](docs/config.md#lifecycle-gates) shows how to connect those commands to each stage.
|
|
72
|
+
4. **Defences tailored to the mission.** Parallix instructs the drafting agent to investigate the codebase and mission, define concrete success criteria, and select suitable verification commands. For bug fixes, it calls for a failing reproduction test before implementation. The mission's declared checks run before it moves from `active` to `review`, turning the plan into checks on the delivery.
|
|
73
|
+
5. **Evidence for review.** Before a mission moves from `active` to `review`, Parallix checks that the final checkpoint connects success criteria to concrete references, such as tests or runnable repository commands. Missing mission or checkpoint documents block that transition. Reviewers get a stated goal and supporting evidence to examine; generic claims such as “verified” are insufficient.
|
|
74
|
+
6. **Separate review.** A second agent reviews the delivery, using a different agent family when one is available. The pull request author cannot formally approve their own work.
|
|
75
|
+
7. **Automatic, focused repair.** When checks detect a repairable delivery failure, Parallix sends the agent back with a tight prompt containing the specific failure, captured output, and the repair required. It reruns the failing check to confirm the fix. Retries are bounded, and unresolved failures are surfaced to the operator.
|
|
76
|
+
8. **Validate the final tree before merge.** When you choose to integrate an approved mission, Parallix runs the checks you assigned to integration against the exact tree about to land. This is where the broader tests from your pyramid check that the change works with the rest of the system. A failing check stops the merge.
|
|
77
|
+
9. **Operator decision.** Nothing merges itself. A human reads the diff and decides whether to integrate at all.
|
|
119
78
|
|
|
120
|
-
|
|
121
|
-
px draft task-001
|
|
122
|
-
px active task-001
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Optional but useful: install the Graphify skill once per supported agent family if you want graph-backed codebase navigation in long missions and reviews. This is not a hard requirement like having a task file for `px draft`; when Graphify is not installed, Parallix skips graph updates and continues the workflow. The operator setup is documented separately because it is a workstation capability, not a minimum install step.
|
|
79
|
+
Repository checks and mission-specific defences complement separate review: passing a command or finding an evidence reference does not prove the change meets its goal. Parallix runs the checks your repository and mission declare; the operator retains the final judgement. See [use cases](docs/use-cases.md) for supported capabilities.
|
|
126
80
|
|
|
127
81
|
## Example
|
|
128
82
|
|
|
@@ -151,22 +105,37 @@ px active task-042
|
|
|
151
105
|
px integrate task-042
|
|
152
106
|
```
|
|
153
107
|
|
|
154
|
-
The verification gate that runs at each phase is whatever you declare in `workflow.config.json`. In this repo that dispatcher is `./scripts/verify-local.sh {{area}}`: earlier phases use the fast general suite, while `px integrate` calls `verify-local.sh integrate`, which resolves repo-side integration gates from `config/integration-pipelines.json` and runs the stricter pre-merge checks there.
|
|
108
|
+
Parallix runs on built-in defaults with no config file; `px setup` writes one when you want to declare your own verification gate or mission layout. See the [configuration reference](docs/config.md) for the supported overrides and their defaults. The verification gate that runs at each phase is whatever you declare in `workflow.config.json`. In this repo that dispatcher is `./scripts/verify-local.sh {{area}}`: earlier phases use the fast general suite, while `px integrate` calls `verify-local.sh integrate`, which resolves repo-side integration gates from `config/integration-pipelines.json` and runs the stricter pre-merge checks there.
|
|
109
|
+
|
|
110
|
+
When a mission goes wrong and you want to start it over, `px cancel <slug> --yes`
|
|
111
|
+
retires it: it deletes that one mission's lifecycle rows from the operator
|
|
112
|
+
database, archives its Backlog task file so the card leaves the board, keeps its
|
|
113
|
+
recorded usage and cost, and prints the
|
|
114
|
+
`git worktree remove ... && git branch -D ...` cleanup for you to run yourself.
|
|
115
|
+
The same action sits behind a confirmation on the TUI board (`Shift+X`) and on
|
|
116
|
+
the web board (the `cancel ✕` button). See the [board guide](docs/tui-board.md)
|
|
117
|
+
for the details.
|
|
118
|
+
|
|
119
|
+
## Optional integrations
|
|
120
|
+
|
|
121
|
+
Both are optional integrations, and each one is wired independently of the other.
|
|
122
|
+
|
|
123
|
+
**Backlog.md.** Point `px draft` at a task key and Parallix adopts the existing record instead of creating one: it reads the ID, title, labels, and classification from `backlog/tasks/<slug> - <title>.md` and carries them through the mission. As the mission moves, Parallix writes the task's `status` frontmatter and, on completion, moves the file into `backlog/completed/`, so the board reflects mission state without a second bookkeeping step. Drafting from free text instead produces an equivalent synthetic record, so nothing downstream depends on you keeping task files.
|
|
124
|
+
|
|
125
|
+
**Forgejo.** Review publication is off until you opt in. If you want its reviewer surface, `px setup` can bootstrap the review repository, agent tokens, and the `review` git remote; otherwise the branch/worktree workflow runs without Forgejo. Forgejo user accounts must already exist before that optional setup; see [`docs/forgejo-setup.md`](docs/forgejo-setup.md) for account creation, token layout, and running a local instance.
|
|
155
126
|
|
|
156
127
|
## Use cases
|
|
157
128
|
|
|
158
|
-
The
|
|
129
|
+
The durable capability guide and confidence boundaries are in [`docs/use-cases.md`](docs/use-cases.md).
|
|
159
130
|
|
|
160
|
-
|
|
161
|
-
2. **Usage-limit auto-failover (UC-2).** Family-specific limit detection → timed blocklist → retry-next-eligible is a tested control loop, not a retry button.
|
|
162
|
-
3. **Second review gate (UC-4, Partial).** A self-approval is code-blocked and reviewer selection excludes the implementer family — forcing a second review *attempt* by a preferentially different agent, with an honest same-family fallback.
|
|
131
|
+
An **internal retrospective, not external evidence,** measured the isolated worktree-per-mission model as the only configuration to beat a human baseline. Depending on whether you frame output as direct user-value missions or total completed missions in an already-productized setup, the observed gain ranges from roughly **+57%** to about **an order of magnitude**.
|
|
163
132
|
|
|
164
133
|
## What Parallix is not
|
|
165
134
|
|
|
166
|
-
- **Not a model and not an AI coding agent.** It does not generate code itself. It
|
|
167
|
-
- **Not an IDE or an editor plugin.** It is a CLI workflow harness around Git and your existing toolchain
|
|
135
|
+
- **Not a model and not an AI coding agent.** It does not generate code itself. It is agent-agnostic infrastructure around the agents and models you already use, including hosted and local AI.
|
|
136
|
+
- **Not an IDE or an editor plugin.** It is a CLI workflow harness around Git and your existing toolchain. It has a terminal mission board, but no code editor, autocomplete, or inline suggestions.
|
|
168
137
|
- **Not a magic autonomous engineer.** This is a human-in-the-loop workflow. Nothing merges itself, and the safe operating model is that a human decides what to queue, when to run `px active`, how to respond to review findings, and whether `px integrate` should happen at all.
|
|
169
|
-
- **Not a guaranteed throughput multiplier.** The observed gain varies with context.
|
|
138
|
+
- **Not a guaranteed throughput multiplier.** The observed gain varies with context.
|
|
170
139
|
|
|
171
140
|
## Current status
|
|
172
141
|
|
|
@@ -174,35 +143,39 @@ The full evidence-backed inventory is in [`docs/use-cases.md`](docs/use-cases.md
|
|
|
174
143
|
|
|
175
144
|
- **Distribution:** Published to the public npm registry as `@magnusekdahl/parallix`. Local tarball install (`npm pack`) is also supported. No Homebrew, no Docker image, no standalone binary, and no CI/release automation today.
|
|
176
145
|
- **Review surface:** Forgejo is supported as the hosted PR viewer/publication surface, but the workflow remains local-first and can run without Forgejo when that provider is disabled.
|
|
177
|
-
- **Versioning:** `CHANGELOG.md` is the versioning authority; PATCH bumps are the release discipline.
|
|
178
146
|
- **Telemetry:** structured token/usage telemetry exists for the codex and claude families; the local-custom and mistral paths record honest zeros by design rather than fabricated numbers.
|
|
179
147
|
- **Graphify:** the knowledge-graph path is supported for codex, claude, and custom/opencode after one-time operator setup. It is optional, not a workflow prerequisite. The credible claim today is better-scoped context retrieval, not a proven token-savings benchmark.
|
|
180
|
-
- **Review coverage** is best-effort, not guaranteed — see UC-4's caveats in [`docs/use-cases.md`](docs/use-cases.md).
|
|
181
148
|
|
|
182
149
|
This is a tool for a local-first developer workflow on one machine, driven by an operator who reads the caveats.
|
|
183
150
|
|
|
184
151
|
## Documentation
|
|
185
152
|
|
|
186
|
-
- [`docs/use-cases.md`](docs/use-cases.md) —
|
|
187
|
-
- [`docs/authority-reference.md`](docs/authority-reference.md) — the internal operator reference: workflow modes, the authority model, agent selection, the layered validation model, checkpoint model, state mapping, command aliases, stats, persistent operator data, and the full public-distribution story.
|
|
153
|
+
- [`docs/use-cases.md`](docs/use-cases.md) — durable capability identities, confidence levels, and positioning boundaries.
|
|
188
154
|
- [`docs/forgejo-setup.md`](docs/forgejo-setup.md) — how the Forgejo review surface, tokens, and `review` remote are bootstrapped.
|
|
189
155
|
- [`docs/operator-setup.md`](docs/operator-setup.md) — one-time Graphify skill installation for codex, claude, and custom/opencode.
|
|
190
|
-
- [`docs/readme-rewrite-benchmark.md`](docs/readme-rewrite-benchmark.md) — how comparable developer-tool READMEs are structured, and the decisions behind this one.
|
|
191
156
|
- [`AGENTS.md`](AGENTS.md) — hard rules, restricted actions, and verification entrypoints.
|
|
192
|
-
- `docs/adr/` — architecture decision records, including ADR 0044 (distribution model).
|
|
157
|
+
- `docs/adr/` — architecture decision records, including ADR 0044 (distribution model) and ADR 0048 (the fail-closed harness defence inventory cited above).
|
|
193
158
|
|
|
194
159
|
## Development
|
|
195
160
|
|
|
196
161
|
```sh
|
|
197
|
-
npm test
|
|
162
|
+
npm test
|
|
163
|
+
npm run test:integration # real process, Git/worktree, package, and local-network boundary coverage
|
|
164
|
+
npm run test:codeql # CodeQL SAST scan (javascript-typescript security/code-scanning), run manually; not part of local integration
|
|
198
165
|
```
|
|
199
166
|
|
|
200
|
-
The test suite is the verification gate this repo declares in `workflow.config.json`. Run it before integrating any change. Contributions follow the same mission lifecycle the tool itself runs: branch, worktree, checkpoints, a second review, and a passing gate before integration.
|
|
167
|
+
The test suite is the verification gate this repo declares in `workflow.config.json`. Run it before integrating any change. Contributions follow the same mission lifecycle the tool itself runs: branch, worktree, checkpoints, a second review, and a passing gate before integration. To exercise the packaged artifact the way a user receives it: `npm pack && npm install -g ./magnusekdahl-parallix-*.tgz`.
|
|
201
168
|
|
|
202
|
-
If you are developing Parallix itself from a checkout, the
|
|
169
|
+
If you are developing Parallix itself from a checkout, use the built runtime
|
|
170
|
+
after `npm run build`, or run the TypeScript entry directly with the development
|
|
171
|
+
script:
|
|
203
172
|
|
|
204
173
|
```sh
|
|
205
|
-
|
|
174
|
+
npm run build
|
|
175
|
+
node build/px.mjs <command>
|
|
176
|
+
|
|
177
|
+
# Direct-source development path
|
|
178
|
+
npm run dev -- <command>
|
|
206
179
|
```
|
|
207
180
|
|
|
208
181
|
## License
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"assets": [
|
|
4
|
+
{
|
|
5
|
+
"key": "config/agents.json",
|
|
6
|
+
"sha256": "c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"key": "config/state-map.json",
|
|
10
|
+
"sha256": "6a4ec47387d1240e32967dc8e4ce54a15d69df2676b7a96ff72baafe996fef7d"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"key": "prompts/act-on-review-core.md",
|
|
14
|
+
"sha256": "c7931a2b30343eb509e6d06c8c71d6f0591fbe9bca9029ae8f88781858c8e26c"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"key": "prompts/act-on-review.md",
|
|
18
|
+
"sha256": "8f06b68b92c8cfc6f3ee0ff7a1e258258c1a1c2220bdfe5b1a3d5fbaab6befeb"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"key": "prompts/draft-core.md",
|
|
22
|
+
"sha256": "f5565ff259a2c830e8853573f7a774fb2ce21e1631d457a025d63ebcf9f4ea6a"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"key": "prompts/draft.md",
|
|
26
|
+
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"key": "prompts/execute-core.md",
|
|
30
|
+
"sha256": "51b16691ee421a55c5a2da30e62fb8e41c910a5e1e3a16ea45ed6f67aa5e031f"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"key": "prompts/execute.md",
|
|
34
|
+
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"key": "prompts/review-core.md",
|
|
38
|
+
"sha256": "7be9123246e77e669d0bbd7c1f6c6f436f58af0c216cb4ee43fd82824b344bbf"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"key": "prompts/review.md",
|
|
42
|
+
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"key": "templates/mission-scaffold.md",
|
|
46
|
+
"sha256": "ce7f4aa6eb9e684434f243a64018d4dfa9962348bfdb5d59881783326cc0ec90"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"key": "migrations/0001-initial-schema.sql",
|
|
50
|
+
"sha256": "30a76fa3839753ddbfe312428dd1b7285ac1b8d0bd678fc79c79018ec6154f69"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"key": "migrations/0002-import-history.sql",
|
|
54
|
+
"sha256": "a8a0febfb4e448a11a5a16b2227d5cc1959bf4594aadd6fd65ea764283020edd"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"key": "migrations/0003-board-lane-events.sql",
|
|
58
|
+
"sha256": "d4080e33cb1a77e504188dbdafa0765ddf3391d99e1d81a76ab3a5ce3b9b40f2"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"key": "migrations/0004-mission-aggregate.sql",
|
|
62
|
+
"sha256": "27a88fa469f0197b9c54a0c1878c3fa3339061c15eb1b1b1928b72249ac7c67d"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"key": "migrations/0005-mission-external-task-ref.sql",
|
|
66
|
+
"sha256": "c92e3addb896b7f93221e70bf69c7eed70e94832921ef0177e28abf283639458"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"key": "migrations/0005-repository-scoped-session-markers.sql",
|
|
70
|
+
"sha256": "2c6318e475a40ecac6489bbd6b4bafc3fb5af80cfc8760dbff88b073fd694673"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"key": "migrations/0006-session-markers.sql",
|
|
74
|
+
"sha256": "f06bf2ae50ba8e1ed51b1cb643b5f6dc739f107bb8b7cabc7d511b5f42087433"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"key": "migrations/0007-usage-statistics-identity.sql",
|
|
78
|
+
"sha256": "0bba52d7101501a2a2bc95d20abed97f52bae10670bdf15e55c5d09c391315b3"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"key": "migrations/0008-review-workflow-state.sql",
|
|
82
|
+
"sha256": "02d772850468eb5b064080ca1fcb35100cfaf21cbeed4fe6a877278ab3b87148"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"key": "migrations/0009-review-gate-retries.sql",
|
|
86
|
+
"sha256": "905cbf1fdfbd357cc705ceb4762170ad6d649424bfc977dd4b241a31fa9e642d"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"key": "migrations/0010-review-events-and-implementer-response.sql",
|
|
90
|
+
"sha256": "c8f9327fe161bfdea6a7e56ad3fab2c1bc97a30989da3cb1236c35d9d672d07a"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"key": "migrations/0011-board-lane-events-repository-id.sql",
|
|
94
|
+
"sha256": "cee3b1df36dfa117ae8ef56f0cca813b81808ca62b65a6c6eb1f41fc0ad98d05"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"key": "migrations/0012-review-hook-retries.sql",
|
|
98
|
+
"sha256": "3511bf668060e7a70237176c80a8145ce521d41ff2965351e02e059ecd1992eb"
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"key": "migrations/0013-usage-statistics-thoughts-tokens.sql",
|
|
102
|
+
"sha256": "b3b9c80e6372eeb3b2bf3b12813dc6fbc4c5d20f601a5abbb6ac0a7605467eb7"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"key": "migrations/0014-remove-usage-closed.sql",
|
|
106
|
+
"sha256": "4a14bf444be8cbb1d1ef67e0526fb3b31609e04877e0eec32e0b3e0094fa1757"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"key": "migrations/0015-current-work-latest-per-mission.sql",
|
|
110
|
+
"sha256": "a08063b188a91e901d462f73f4f154c98d85068324cef45eb144250e5000051a"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"key": "migrations/0016-review-drop-retry-counters.sql",
|
|
114
|
+
"sha256": "0acd31e661e720b563b92b3f75f99218dd99011b787ee8aad76b9a3bc1e363c4"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"key": "migrations/0017-retire-mission-import-provenance.sql",
|
|
118
|
+
"sha256": "f46823014782c22a9e40b486958770d2b5f7e7180fc9fe6be961a791cca97b50"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"key": "migrations/0018-adhoc-mission-counter.sql",
|
|
122
|
+
"sha256": "3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"key": "migrations/0019-custom-agent-leases.sql",
|
|
126
|
+
"sha256": "07559cd5363f01a309d028673e6dcb9e222a848fae79c57d2fee9001589da19d"
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comment": "Per-step agent eligibility policy. Modify to change which agents are eligible for each workflow step.",
|
|
2
|
+
"_comment": "Per-step agent eligibility policy. Modify to change which agents are eligible for each workflow step. In an installed/published build, drop a copy at <working-tree>/config/agents.json to override the bundled file without a rebuild; the working-tree copy is authoritative for steps.*.eligible. The bundled copy under the package root is the fallback when no working-tree copy exists.",
|
|
3
3
|
"_weights_comment": "Weights are relative integers (not percentages). Agent is selected by weighted random draw from eligible-and-supported set. Omit weights to use equal probability.",
|
|
4
4
|
"steps": {
|
|
5
5
|
"draft": {
|
|
6
|
-
"eligible": ["codex", "custom", "
|
|
6
|
+
"eligible": ["codex", "custom", "qwen", "vibe"],
|
|
7
7
|
"selection": "random"
|
|
8
8
|
},
|
|
9
9
|
"active": {
|
|
10
|
-
"eligible": ["codex", "claude",
|
|
11
|
-
"selection": "random"
|
|
12
|
-
},
|
|
13
|
-
"conflict-resolution": {
|
|
14
|
-
"eligible": ["claude", "codex", "mistral"],
|
|
10
|
+
"eligible": ["codex", "claude", "custom", "qwen", "vibe"],
|
|
15
11
|
"selection": "random"
|
|
16
12
|
},
|
|
17
13
|
"review": {
|
|
18
|
-
"eligible": ["codex", "claude", "custom", "
|
|
14
|
+
"eligible": ["codex", "claude", "custom", "qwen", "vibe"],
|
|
19
15
|
"selection": "random"
|
|
20
16
|
}
|
|
21
17
|
},
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
2e6369b99697e6aaebc09838469bc8a4e546739bc39b05df7818a593a1ff320c asset-manifest.json
|
|
2
|
+
c380d909ddf757f9bbe5136d79652a19396ae69068d144e2b6031ed4b7fb4b78 config/agents.json
|
|
3
|
+
6a4ec47387d1240e32967dc8e4ce54a15d69df2676b7a96ff72baafe996fef7d config/state-map.json
|
|
4
|
+
30a76fa3839753ddbfe312428dd1b7285ac1b8d0bd678fc79c79018ec6154f69 migrations/0001-initial-schema.sql
|
|
5
|
+
a8a0febfb4e448a11a5a16b2227d5cc1959bf4594aadd6fd65ea764283020edd migrations/0002-import-history.sql
|
|
6
|
+
d4080e33cb1a77e504188dbdafa0765ddf3391d99e1d81a76ab3a5ce3b9b40f2 migrations/0003-board-lane-events.sql
|
|
7
|
+
27a88fa469f0197b9c54a0c1878c3fa3339061c15eb1b1b1928b72249ac7c67d migrations/0004-mission-aggregate.sql
|
|
8
|
+
c92e3addb896b7f93221e70bf69c7eed70e94832921ef0177e28abf283639458 migrations/0005-mission-external-task-ref.sql
|
|
9
|
+
2c6318e475a40ecac6489bbd6b4bafc3fb5af80cfc8760dbff88b073fd694673 migrations/0005-repository-scoped-session-markers.sql
|
|
10
|
+
f06bf2ae50ba8e1ed51b1cb643b5f6dc739f107bb8b7cabc7d511b5f42087433 migrations/0006-session-markers.sql
|
|
11
|
+
0bba52d7101501a2a2bc95d20abed97f52bae10670bdf15e55c5d09c391315b3 migrations/0007-usage-statistics-identity.sql
|
|
12
|
+
02d772850468eb5b064080ca1fcb35100cfaf21cbeed4fe6a877278ab3b87148 migrations/0008-review-workflow-state.sql
|
|
13
|
+
905cbf1fdfbd357cc705ceb4762170ad6d649424bfc977dd4b241a31fa9e642d migrations/0009-review-gate-retries.sql
|
|
14
|
+
c8f9327fe161bfdea6a7e56ad3fab2c1bc97a30989da3cb1236c35d9d672d07a migrations/0010-review-events-and-implementer-response.sql
|
|
15
|
+
cee3b1df36dfa117ae8ef56f0cca813b81808ca62b65a6c6eb1f41fc0ad98d05 migrations/0011-board-lane-events-repository-id.sql
|
|
16
|
+
3511bf668060e7a70237176c80a8145ce521d41ff2965351e02e059ecd1992eb migrations/0012-review-hook-retries.sql
|
|
17
|
+
b3b9c80e6372eeb3b2bf3b12813dc6fbc4c5d20f601a5abbb6ac0a7605467eb7 migrations/0013-usage-statistics-thoughts-tokens.sql
|
|
18
|
+
4a14bf444be8cbb1d1ef67e0526fb3b31609e04877e0eec32e0b3e0094fa1757 migrations/0014-remove-usage-closed.sql
|
|
19
|
+
a08063b188a91e901d462f73f4f154c98d85068324cef45eb144250e5000051a migrations/0015-current-work-latest-per-mission.sql
|
|
20
|
+
0acd31e661e720b563b92b3f75f99218dd99011b787ee8aad76b9a3bc1e363c4 migrations/0016-review-drop-retry-counters.sql
|
|
21
|
+
f46823014782c22a9e40b486958770d2b5f7e7180fc9fe6be961a791cca97b50 migrations/0017-retire-mission-import-provenance.sql
|
|
22
|
+
3560376d8e31e0b8fc527509211378a839ba24ef5e5e5fac9ee6dadc06c172c2 migrations/0018-adhoc-mission-counter.sql
|
|
23
|
+
07559cd5363f01a309d028673e6dcb9e222a848fae79c57d2fee9001589da19d migrations/0019-custom-agent-leases.sql
|
|
24
|
+
0b5d1cd2c31f63f18d543abd23de8efae08ed0692bd1335c9664329e73743d56 package.json
|
|
25
|
+
c7931a2b30343eb509e6d06c8c71d6f0591fbe9bca9029ae8f88781858c8e26c prompts/act-on-review-core.md
|
|
26
|
+
8f06b68b92c8cfc6f3ee0ff7a1e258258c1a1c2220bdfe5b1a3d5fbaab6befeb prompts/act-on-review.md
|
|
27
|
+
f5565ff259a2c830e8853573f7a774fb2ce21e1631d457a025d63ebcf9f4ea6a prompts/draft-core.md
|
|
28
|
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/draft.md
|
|
29
|
+
51b16691ee421a55c5a2da30e62fb8e41c910a5e1e3a16ea45ed6f67aa5e031f prompts/execute-core.md
|
|
30
|
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/execute.md
|
|
31
|
+
7be9123246e77e669d0bbd7c1f6c6f436f58af0c216cb4ee43fd82824b344bbf prompts/review-core.md
|
|
32
|
+
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 prompts/review.md
|
|
33
|
+
73d251f710121157b0e0cdabe1919551359f3b3658d8bf59ba6111e9272dfb7d px.mjs
|
|
34
|
+
f3f642e1a3ac8c624ca8894e9eac29a1eed18073a91b1cd871615263dc364631 px.mjs.map
|
|
35
|
+
fbf9b7bd1d7cf095d0533f064b6aa0bac6b1606268765915a61ae3a7c918089e sbom.json
|
|
36
|
+
ce7f4aa6eb9e684434f243a64018d4dfa9962348bfdb5d59881783326cc0ec90 templates/mission-scaffold.md
|
|
37
|
+
99784eaf9444cd3b2531bc71976751ffe78f8305f6affe78b8a258e4c9509dd2 web/assets/index-B8Hv3ORh.js
|
|
38
|
+
807f92b40d54c1112d284e7c491702aa90e25edfc32ff5af9f4889beec5583a8 web/assets/index-DYY4ROtr.css
|
|
39
|
+
9464b53a502745042971e980f4b89d1e37300d4eca96e8ab6e0591fb561c5562 web/index.html
|
|
40
|
+
3f454a7af0f992df9a8da22f5a75768d4a4c4fca91d8bc5c5e8a5617882fa7bf web/manifest.json
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
-- Migration: 0001-initial-schema
|
|
2
|
+
-- Description: Create initial operator-local state tables for all six domains
|
|
3
|
+
-- Authority: operator-local only (agent-blocklist, usage-statistics, known-repositories,
|
|
4
|
+
-- ui-preferences, operational-history, migration-ledger)
|
|
5
|
+
-- No repository artifacts are stored in this schema.
|
|
6
|
+
|
|
7
|
+
-- Agent blocklist: operator-local agent blocking rules
|
|
8
|
+
CREATE TABLE IF NOT EXISTS agent_blocklist (
|
|
9
|
+
agent TEXT PRIMARY KEY NOT NULL,
|
|
10
|
+
blocked INTEGER NOT NULL DEFAULT 0,
|
|
11
|
+
until TEXT,
|
|
12
|
+
reason TEXT,
|
|
13
|
+
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- Usage statistics: agent work measurements and completed-mission projections.
|
|
17
|
+
-- Types conform to the TASK-2294 domain model (src/domain/usage.ts): token,
|
|
18
|
+
-- tool-call and round counts are INTEGER; durations, costs and provider-usage
|
|
19
|
+
-- percentages are REAL. NULL means "unavailable" (an unmeasured value), which
|
|
20
|
+
-- maps to the domain's `Measurement<'unavailable'>` kind — distinct from a
|
|
21
|
+
-- measured 0. Free-text and ISO-8601 timestamp columns remain TEXT (SQLite has
|
|
22
|
+
-- no native date type; ISO-8601 text is sortable and idiomatic).
|
|
23
|
+
CREATE TABLE IF NOT EXISTS usage_statistics (
|
|
24
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
25
|
+
date TEXT,
|
|
26
|
+
repo TEXT NOT NULL DEFAULT '',
|
|
27
|
+
mission TEXT NOT NULL DEFAULT '',
|
|
28
|
+
classification TEXT,
|
|
29
|
+
implementer TEXT,
|
|
30
|
+
pr_fix_rounds INTEGER,
|
|
31
|
+
provider TEXT,
|
|
32
|
+
model TEXT,
|
|
33
|
+
implementer_agent TEXT,
|
|
34
|
+
reviewer_agent TEXT,
|
|
35
|
+
stage TEXT DEFAULT 'default',
|
|
36
|
+
input_tokens INTEGER,
|
|
37
|
+
output_tokens INTEGER,
|
|
38
|
+
cached_tokens INTEGER,
|
|
39
|
+
context_tokens INTEGER,
|
|
40
|
+
tool_calls INTEGER,
|
|
41
|
+
openai_usage_before REAL,
|
|
42
|
+
openai_usage_after REAL,
|
|
43
|
+
openai_usage_delta REAL,
|
|
44
|
+
duration_minutes REAL,
|
|
45
|
+
cost_usd REAL,
|
|
46
|
+
closed TEXT
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_usage_statistics_mission
|
|
50
|
+
ON usage_statistics(repo, mission, stage);
|
|
51
|
+
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_usage_statistics_date
|
|
53
|
+
ON usage_statistics(date);
|
|
54
|
+
|
|
55
|
+
-- Known repositories: operator-local cache of repository identity
|
|
56
|
+
CREATE TABLE IF NOT EXISTS known_repositories (
|
|
57
|
+
id TEXT PRIMARY KEY NOT NULL,
|
|
58
|
+
path TEXT NOT NULL,
|
|
59
|
+
last_accessed TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_known_repositories_path
|
|
63
|
+
ON known_repositories(path);
|
|
64
|
+
|
|
65
|
+
-- UI preferences: key-value store for operator-local UI settings
|
|
66
|
+
CREATE TABLE IF NOT EXISTS ui_preferences (
|
|
67
|
+
key TEXT PRIMARY KEY NOT NULL,
|
|
68
|
+
value TEXT NOT NULL,
|
|
69
|
+
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
-- Operational history: local operational event log
|
|
73
|
+
CREATE TABLE IF NOT EXISTS operational_history (
|
|
74
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
75
|
+
event_type TEXT NOT NULL,
|
|
76
|
+
event_data TEXT NOT NULL DEFAULT '{}',
|
|
77
|
+
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_operational_history_type
|
|
81
|
+
ON operational_history(event_type);
|
|
82
|
+
|
|
83
|
+
CREATE INDEX IF NOT EXISTS idx_operational_history_created
|
|
84
|
+
ON operational_history(created_at);
|
|
85
|
+
|
|
86
|
+
-- Migration ledger: records applied migrations with checksums
|
|
87
|
+
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
88
|
+
id TEXT PRIMARY KEY,
|
|
89
|
+
checksum TEXT NOT NULL,
|
|
90
|
+
applied_at TEXT NOT NULL
|
|
91
|
+
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Migration: 0002-import-history
|
|
2
|
+
-- Description: Add import history ledger for source path, digest, and idempotency tracking
|
|
3
|
+
-- Authority: operator-local only
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS import_history (
|
|
6
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
7
|
+
source_path TEXT NOT NULL,
|
|
8
|
+
digest TEXT NOT NULL,
|
|
9
|
+
imported_count INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
skipped_count INTEGER NOT NULL DEFAULT 0,
|
|
11
|
+
imported_at TEXT NOT NULL,
|
|
12
|
+
backup_path TEXT
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_import_history_source
|
|
16
|
+
ON import_history(source_path);
|