projmux 0.11.1 → 0.12.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/docs/agent-workflow.md +1 -1
- package/docs/legacy-cli-retirement.md +23 -17
- package/docs/upgrading.md +16 -6
- package/package.json +5 -5
package/docs/agent-workflow.md
CHANGED
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
- Shell focused unit coverage includes `projmux shell` routing to `tmux -L projmux -f <generated config> new-session -A -s <session> [-c <cwd>]`, generated tmux config callbacks, native key-broker platform policy, runtime overrides, and nested-socket guards.
|
|
181
181
|
- `make test` also covers npm retire/staging path canonicalization for the resolved projmux executable so generated tmux config and hooks never embed a `node_modules/.projmux-<hash>` directory, plus error-suppressed attention and rebalance-panes hooks.
|
|
182
182
|
- `make test` also covers the public config spelling: `projmux config edit [--get|--set <mode>]`, `config render standalone|app`, and `config apply` forward raw argv to their manual leaf handlers; flags, unknown tokens, streams, handler errors, and side effects stay on those handlers. `make install` and every update path emit `projmux config apply`, while generated plumbing uses only the hidden `internal` namespace.
|
|
183
|
-
- `make test` also covers Legacy CLI retirement Phase 2: the
|
|
183
|
+
- `make test` also covers Legacy CLI retirement Phase 2/3: the remaining removed-public argv matrix returns exact replacement guidance with stdout/handler/pre-dispatch mutation zero; `attach project`, `focus project|window|pane`, `pin project`, and `prune project|snapshot` remain exact raw-argv forwards; removed pre-namespace internal tokens and the final `ai` root have no catalog or top-level handler and use root unknown-command exit 1 for every argv. Canonical `internal agent-hook ingest` forwards all provider event shapes to the unchanged handler, while stale unmanaged legacy-hook fixtures remain byte-preserved and require the documented manual canonical-prefix remediation. The repository literal audit permits the retired producer spelling only in test fixtures and explicit retirement/upgrade history. Maintained-doc scans, catalog/canonical/handler two-way audits, root/command-tree/reference goldens, the exact retired route set, preserved Shortcut/kind aliases, and generated producer scans close the topology and drift contracts.
|
|
184
184
|
- `make test` also covers the canonical manifest honesty audit: every canonical spelling resolves to a full executable path in the command tree, no canonical summary carries forward-looking vocabulary or any adjudicated-and-retired string, the two remaining target-state summaries (`delete pane`, `restore snapshot`) are pinned verbatim with a named owning track and must stay absent from every command-tree node, and the separate shortcut gaps are enumerated as a two-way diff so a future change cannot drop a mapping unadjudicated; config and workflow routes are also asserted to have no cardinality-matrix row because they resolve no resource set.
|
|
185
185
|
- `make test` also covers singular and plural kind spellings on the four resource verbs: `Route.Aliases` in `internal/cli/catalog.go` is the single declaration, `cli.CanonicalChildToken` normalizes an alias to its canonical token before `get`/`describe`/`delete`/`rename` dispatch, and the unknown-kind refusals are rendered from `cli.ChildSpellings` so an accepted spelling can never be missing from the list they print. `TestKindSpellingAliasesAreByteIdenticalToTheCanonicalSpelling` runs all 17 canonical/alias pairs -- including the two forwarded parity kinds per verb, whose forwarded argv is compared as well -- and requires identical stdout, identical stderr, and an identical error, with the canonical run required to succeed so an all-failing pair cannot satisfy byte-equality vacuously; `TestEveryManifestKindHasAParityCase` derives the matrix from the manifest so a kind added later cannot escape coverage, and `TestKindSpellingAliasesNeverReachAnotherRoute` proves each singular `get` alias answers its own inventory and is distinguishable from every sibling kind. On the manifest side `TestCanonicalKindSpellingsSurviveTheAliasContract` pins the canonical kind token of every resource-verb child so an alias can never replace a shipped spelling, `TestNoChildAliasShadowsACanonicalSpelling` walks the whole tree for alias/name collisions and duplicate aliases, and `TestResourceVerbsAcceptBothFormsOfEveryKind` asserts zero missing singular/plural combinations with `get pane`/`get panes` as the one enumerated divergent pair. That exception is the product decision the track recorded and is held by `TestGetPaneKeepsItsOwnRouteUnderBothSpellings` and `TestGetPaneSpellingIsUnchanged`: `get pane` stays the exact-one Pane read that owns `--current -o cwd`, `get panes` stays the 0..N inventory, and neither aliases onto the other. `rename` no longer special-cases the `agent` token by hand -- the manifest has no Agent child, so `agent` and `agents` both reach the ordinary refusal.
|
|
186
186
|
- `make test-integration` / `make test-e2e` / `make test-install-smoke`: suite containers still run with `--network none`, so `scripts/test-docker-run.sh` prefetches the checked-in module graph once per `go.sum` into a host-side Go module cache outside the repository and mounts it into the isolated run; `test/lib/smoke.sh` honors that inherited `GOMODCACHE` instead of forcing an empty run-local one.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
# Legacy CLI Retirement Ledger
|
|
2
2
|
|
|
3
|
-
Phase 2
|
|
4
|
-
|
|
5
|
-
side effect, and
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
on stderr.
|
|
3
|
+
Phase 2 removed the human-facing compatibility argv below. Those non-AI
|
|
4
|
+
tombstones return exit 2, write no stdout, perform no command or pre-dispatch
|
|
5
|
+
migration side effect, and print their replacement on stderr. Phase 3 removes
|
|
6
|
+
the final hidden `ai` producer dispatcher and catalog node: every `projmux ai
|
|
7
|
+
...` invocation now follows the root unknown-command contract (exit 1, no
|
|
8
|
+
stdout or side effect, and root help plus `unknown command: ai` on stderr).
|
|
9
|
+
The seven removed old internal top-level aliases use the same root contract.
|
|
9
10
|
|
|
10
11
|
| Removed argv | Replacement |
|
|
11
12
|
| --- | --- |
|
|
@@ -56,22 +57,27 @@ other old tmux subcommand, and `tmux apply` with any extra argv still use the
|
|
|
56
57
|
removed-root contract: exit 1, no stdout or side effect, and root help plus
|
|
57
58
|
`unknown command: tmux` on stderr.
|
|
58
59
|
|
|
59
|
-
##
|
|
60
|
+
## Final ingest compatibility removal
|
|
60
61
|
|
|
61
|
-
Phase 2
|
|
62
|
-
|
|
62
|
+
Phase 2 temporarily retained one hidden compatibility dispatcher for exact old
|
|
63
|
+
managed-producer argv. The accepted historical bytes were
|
|
63
64
|
`ai ingest codex-hook`, `ai ingest claude-hook`, `ai ingest antigravity-hook
|
|
64
65
|
--event <event>` where `<event>` is exactly `PreInvocation`, `PostInvocation`,
|
|
65
66
|
`PostToolUse`, `Stop`, or `Statusline`, and `ai ingest bell --pane <pane-id>`.
|
|
66
|
-
The
|
|
67
|
-
|
|
67
|
+
The v0.11.1 `R_migrate` release migrated marker-owned Codex, Claude,
|
|
68
|
+
Antigravity/Statusline, and tmux-bell producers to `internal agent-hook ingest`
|
|
69
|
+
before this dispatcher was removed. The old bytes are now history, not an
|
|
70
|
+
executable alias; every `ai` argv is rejected at the root before stdin, tmux,
|
|
71
|
+
diagnostics, or automatic migration is touched.
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
A markerless or otherwise unmanaged hook is intentionally never rewritten.
|
|
74
|
+
If one still invokes the old spelling, decide that the hook is yours, preserve
|
|
75
|
+
its provider arguments, redirection, and fallback, and manually replace only
|
|
76
|
+
the command prefix with `projmux internal agent-hook ingest`. For example, the
|
|
77
|
+
historical `projmux ai ingest claude-hook` prefix becomes `projmux internal
|
|
78
|
+
agent-hook ingest claude-hook`. Run `projmux agent integrate <provider>
|
|
79
|
+
--dry-run` afterward; a remaining conflict must be resolved by the owner, not
|
|
80
|
+
by projmux taking ownership of the entry.
|
|
75
81
|
|
|
76
82
|
The `ai notify` split is intentional parity guidance, not an alias mapping.
|
|
77
83
|
The old notify action drove an immediate desktop-notification path from pane
|
package/docs/upgrading.md
CHANGED
|
@@ -73,12 +73,14 @@ Statusline, and the tmux bell fallback with the canonical
|
|
|
73
73
|
`projmux internal agent-hook ingest ...` entrypoint. Copyable integration
|
|
74
74
|
commands use `projmux agent integrate <provider>`.
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
installed while the exact old managed-producer argv described in the
|
|
78
|
-
|
|
79
|
-
marker-owned producer
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
The v0.11.1 migration release used hook-first ordering: the new binary was
|
|
77
|
+
atomically installed while the exact old managed-producer argv described in the
|
|
78
|
+
ledger still dispatched to the same handler; it then migrated every
|
|
79
|
+
marker-owned producer before generating and applying tmux config. Phase 3's
|
|
80
|
+
next breaking release removes that temporary dispatcher after the public
|
|
81
|
+
fresh/upgrade/`--no-apply` migration evidence gate. Upgrade an old installation
|
|
82
|
+
through v0.11.1 before the next release when you need the migration-window
|
|
83
|
+
event guarantee.
|
|
82
84
|
|
|
83
85
|
Migration is ownership- and transaction-aware. Codex managed blocks and the
|
|
84
86
|
Claude, Antigravity, Statusline, and tmux-bell markers are the only ownership
|
|
@@ -134,6 +136,14 @@ which tool owns it; remove or rewrite it manually only after that decision,
|
|
|
134
136
|
then rerun the dry-run and installer. A failed transaction is safe to retry
|
|
135
137
|
because it restores its starting state.
|
|
136
138
|
|
|
139
|
+
**Stale unmanaged legacy hooks after the final removal:** projmux does not take
|
|
140
|
+
ownership of markerless hooks and does not rewrite them automatically. Such a
|
|
141
|
+
hook now fails with `unknown command: ai`. After confirming that you own the
|
|
142
|
+
entry, preserve its provider/event arguments, redirection, and fallback and
|
|
143
|
+
manually replace the old `projmux ai ingest` prefix with `projmux internal
|
|
144
|
+
agent-hook ingest`. Then run `projmux agent integrate <provider> --dry-run` and
|
|
145
|
+
resolve any reported ownership conflict before installing a managed entry.
|
|
146
|
+
|
|
137
147
|
**Downgrading to 0.10.1 or older:** those binaries do not expose the canonical
|
|
138
148
|
internal ingress. Before replacing the current binary, remove each managed
|
|
139
149
|
integration with `projmux agent integrate <provider> --remove`. After the old
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
29
|
},
|
|
30
30
|
"optionalDependencies": {
|
|
31
|
-
"@projmux/linux-x64": "0.
|
|
32
|
-
"@projmux/linux-arm64": "0.
|
|
33
|
-
"@projmux/darwin-x64": "0.
|
|
34
|
-
"@projmux/darwin-arm64": "0.
|
|
31
|
+
"@projmux/linux-x64": "0.12.0",
|
|
32
|
+
"@projmux/linux-arm64": "0.12.0",
|
|
33
|
+
"@projmux/darwin-x64": "0.12.0",
|
|
34
|
+
"@projmux/darwin-arm64": "0.12.0"
|
|
35
35
|
}
|
|
36
36
|
}
|