prjct-cli 2.43.0 → 2.43.3
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 +15 -43
- package/README.md +8 -0
- package/bin/prjct +13 -9
- package/dist/bin/prjct-core.mjs +345 -338
- package/dist/daemon/entry.mjs +265 -258
- package/dist/mcp/server.mjs +245 -238
- package/dist/templates.json +1 -1
- package/package.json +1 -1
- package/templates/codex/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,63 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
-
Vault v2 — signal-first RAG. The generated vault now renders knowledge, not telemetry: on this repo it dropped from 326 files to ~113 with zero information loss (everything stays in SQLite).
|
|
6
|
-
|
|
7
|
-
### Changed
|
|
8
|
-
- **Machine signals quarantined to one `signals.md` dashboard.** Detector output (hot-file churn, skill-miss, friction, recurring bugs — 45% of all entries on a busy project) no longer spawns per-entry notes or tag pages. One page, grouped by section, hot files deduped per path, every row block-anchored so `[[signals#^mem-N|title]]` refs still resolve. The graph shows one hub instead of a dust cloud of `hot-file-NNN` nodes.
|
|
9
|
-
- **Tag pages are link-only.** The old `tags/<key>/<value>.md` model copied every entry's full content into every tag page it appeared on (54% of vault files, all duplicated content). Now: one `tags/<key>.md` index per dimension with values as sections and entries as wikilinks, plus a `tags.md` master index. Dimensions used by fewer than 2 entries get no page (orphan-node guard).
|
|
10
|
-
- **Native Obsidian frontmatter tags.** `tags: { topic: "x" }` (a YAML flow map Obsidian ignores) → `tags: [topic/x]` — graph coloring/filtering and the tag pane now work. Machine bookkeeping keys (source/session/touches/hash/…) are excluded from note bodies and frontmatter; they stay queryable in SQLite.
|
|
11
|
-
- **index.md is a dashboard.** Recent decisions and known traps surface as wikilinks on the landing page; signals get their own section.
|
|
12
|
-
- **Readable filenames.** Slugs cut at word boundaries (no more `…-porque-la-key-guardada-es-de.md`); `retro` entries get per-entry notes.
|
|
13
|
-
|
|
14
5
|
### Fixed
|
|
15
|
-
- **
|
|
16
|
-
-
|
|
6
|
+
- **CRITICAL: Codex support actually works now.** The bin shim self-healed the ~9.5KB Claude skill baseline into `~/.codex/skills/prjct/SKILL.md` — 9× over Codex's HARD ~1024-byte cap, so Codex silently rejected the entire skill. The shim now installs the Codex-specific template (and only when Codex is present); the skill metadata marker was compacted and a size guard + tests keep the built artifact under the cap with headroom.
|
|
7
|
+
- `prjct init` no longer logs `Generated: AGENTS.md` (and friends) for files it never wrote — it reports only what it actually writes.
|
|
17
8
|
|
|
18
|
-
###
|
|
19
|
-
-
|
|
20
|
-
- **
|
|
21
|
-
-
|
|
9
|
+
### Added
|
|
10
|
+
- **Codex MCP wiring.** Setup and sync now ensure `[mcp_servers.prjct]` in `~/.codex/config.toml` (marker-managed TOML block; user-managed entries are never touched) — the `prjct_*` tools finally exist for Codex sessions.
|
|
11
|
+
- **AGENTS.md generation.** `prjct init` writes a vendor-neutral prjct routing block to the project's `AGENTS.md` (marker-merged, user content preserved) when Codex is detected or wizard-selected — Codex has no hooks, so this block is its session-start context.
|
|
12
|
+
- `prjct doctor` now checks the `codex` binary and the installed Claude hooks count.
|
|
22
13
|
|
|
23
|
-
|
|
14
|
+
## [2.43.3] - 2026-06-11
|
|
24
15
|
|
|
25
|
-
###
|
|
26
|
-
- **Lazy command loaders no longer memoize rejected promises.** A transient import/constructor error during the first dispatch of a command group used to be cached forever — every later command in that group replayed the same error for the daemon's lifetime (the old eager loading failed loud at startup instead). Both layers fixed (registry group loaders + the 17 `PrjctCommands` getters); the next dispatch now retries.
|
|
27
|
-
- **`mapOptions` numbers**: non-numeric input for a numeric flag maps to `undefined` (flag ignored) instead of `NaN`.
|
|
16
|
+
### Bug Fixes
|
|
28
17
|
|
|
29
|
-
|
|
30
|
-
- New CI guard: `manifest-completeness` instantiates every command group and verifies each manifest `routing.method` actually exists — restoring the registration-time validation the lazy refactor deferred to first dispatch.
|
|
31
|
-
- `registerLazyMethod` memoizes the resolved instance+method pair (was re-resolving per dispatch); dead `registerMethod` deleted (single registration mechanism).
|
|
32
|
-
- `runBinCommand` imports moved into the branches that use them — every bin command was paying the `version` branch's chalk/ai-provider/file-helper imports.
|
|
33
|
-
- `compareSemver` deduped to the `schemas/model.ts` implementation; the monotonic-stamp rule shared between `nextKvStamp` and `updateDoc`; `cosineSimilarity` single-sourced over `dot`/`l2Norm`.
|
|
18
|
+
- Codex first-class — skill under 1KB cap, MCP wiring, real AGENTS.md, doctor checks (#427)
|
|
34
19
|
|
|
35
20
|
|
|
36
|
-
|
|
21
|
+
## [2.43.2] - 2026-06-11
|
|
37
22
|
|
|
38
|
-
###
|
|
39
|
-
- **Post-upgrade re-setup silently never ran.** `bin/prjct.ts` invoked `setup.run()` through a default export that the ESM-standardization PR (#132, 2026-02) deleted — `bin/` sits outside core's typecheck, so the call threw `TypeError` into its own catch and only stamped the version, on every upgrade, for four months. `run()` is a named export now and bin imports it directly.
|
|
23
|
+
### Bug Fixes
|
|
40
24
|
|
|
41
|
-
|
|
42
|
-
- **FTS5 prefix indexes** (migration 29): `searchFts` matches every keyword as a prefix query, but the FTS table had no prefix indexes — each term scanned the full-term index. Recreated with `prefix='2 3 4'` + content rebuild.
|
|
25
|
+
- release job is idempotent — recovery path for partial failures + retried npm publish (#426)
|
|
43
26
|
|
|
44
|
-
### Changed
|
|
45
|
-
- **MCP tool descriptions are intent-led.** Six tools (analysis, workflow rules/list/status, signatures, history) were noun phrases with no "when to reach for this"; each now states what it returns and when to use it.
|
|
46
|
-
- **`package.json` overrides documented** in CONTRIBUTING.md — vulnerability class, the PR that introduced each pin (#251/#326), and the removal condition.
|
|
47
27
|
|
|
48
|
-
|
|
49
|
-
- **God-files split.** `infrastructure/setup.ts` (892 → 472) extracted `codex-skill.ts` + `statusline-installer.ts`; `memory/project-memory.ts` (1086 → 660) extracted `entries.ts` (types + row mapping + pure filters) and `format.ts` (markdown rendering). All importers updated per the no-re-export rule.
|
|
50
|
-
- **Dropped the `glob` dependency** — the single call site (monorepo workspace discovery) uses native `node:fs` `globSync` (node ≥22 / bun; the engine floor is already 22.5). `@types/node@22` pinned as a devDependency (types resolved to a transitive v20 that predates `globSync`).
|
|
28
|
+
## [2.43.1] - 2026-06-11
|
|
51
29
|
|
|
52
|
-
###
|
|
53
|
-
- **Daemon command groups load lazily.** `PrjctCommands` and the registry bindings eagerly imported and instantiated all ~18 command-group classes at daemon startup; both now use memoized dynamic-import loaders (new `registerLazyMethod`), so the first socket request stops paying for the whole command tree (daemon module import: 67ms → 40ms warm).
|
|
30
|
+
### Bug Fixes
|
|
54
31
|
|
|
55
|
-
|
|
56
|
-
- **All prjct data paths honor `PRJCT_CLI_HOME`.** New shared lazy resolver (`core/infrastructure/cli-home.ts`); fixed the four sites with no override at all — the embeddings key file, the auto-updater state dir, the context7 verify cache, and session-cleanup's rotation, which had drifted from the writer's path and rotated the user's *real* cache file from test runs.
|
|
57
|
-
- Dropped the dead `daemon start --port/--no-http` flags — parsed for years but never accepted by `startDaemon` (the latent type error only surfaced when the handler moved under core's typecheck).
|
|
32
|
+
- memory cap never deletes knowledge — exclude memory.remember.* from capEntries (#425)
|
|
58
33
|
|
|
59
|
-
### Refactoring
|
|
60
|
-
- **`bin/prjct.ts` split**: the ~550 lines of bin-only command handlers moved to `core/cli/bin-commands.ts` (1082 → 536 lines); the entry point keeps startup concerns only.
|
|
61
|
-
- **`core/workflow/` → `core/workflow-engine/`** — disambiguates the rule engine from `core/workflows/` (implementations).
|
|
62
34
|
|
|
63
35
|
## [2.43.0] - 2026-06-10
|
|
64
36
|
|
package/README.md
CHANGED
|
@@ -509,6 +509,14 @@ Codex is detected by the `codex` CLI on PATH (context file `AGENTS.md`). The
|
|
|
509
509
|
sandbox is non-interactive/non-TTY, so prjct-cli emits the same static, prompt-free
|
|
510
510
|
status line as any agent; add `--md` for fully markdown-structured output.
|
|
511
511
|
|
|
512
|
+
**What does Codex get from prjct?**
|
|
513
|
+
Three surfaces, all installed/healed automatically: a compact skill at
|
|
514
|
+
`~/.codex/skills/prjct/SKILL.md` (kept under Codex's ~1KB skill cap), the
|
|
515
|
+
prjct MCP server wired into `~/.codex/config.toml` (`prjct_*` tools), and a
|
|
516
|
+
vendor-neutral routing block in the project's `AGENTS.md` written by
|
|
517
|
+
`prjct init`. Codex has no lifecycle hooks, so AGENTS.md + MCP are its
|
|
518
|
+
session-start context and live tool surface.
|
|
519
|
+
|
|
512
520
|
**How do I quickly find the local `.prjct/` directory?**
|
|
513
521
|
It's in your **project repo root** (created by `prjct init` / first `prjct`
|
|
514
522
|
command) and is `.gitignore`d — that's why `git status` never shows it. Find it:
|
package/bin/prjct
CHANGED
|
@@ -91,15 +91,19 @@ ensure_setup() {
|
|
|
91
91
|
# postinstall is unreliable (--ignore-scripts, npm policies), so the
|
|
92
92
|
# bin shim self-heals on every invocation. mtime-based: source newer
|
|
93
93
|
# than dest → overwrite. Common case (skill up-to-date) = two stats.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
# Each agent gets ITS OWN template: Codex enforces a hard ~1KB limit
|
|
95
|
+
# on the whole SKILL.md and silently rejects the entire skill when
|
|
96
|
+
# the (much larger) Claude baseline lands there.
|
|
97
|
+
install_skill() {
|
|
98
|
+
if [ -f "$1" ] && { [ ! -f "$2" ] || [ "$1" -nt "$2" ]; }; then
|
|
99
|
+
mkdir -p "$(dirname "$2")" 2>/dev/null
|
|
100
|
+
cp "$1" "$2" 2>/dev/null
|
|
101
|
+
fi
|
|
102
|
+
}
|
|
103
|
+
install_skill "$ROOT_DIR/templates/skills/prjct/SKILL.md" "$HOME/.claude/skills/prjct/SKILL.md"
|
|
104
|
+
# Codex only if present — don't create ~/.codex on machines without it
|
|
105
|
+
if [ -d "$HOME/.codex" ] || command -v codex >/dev/null 2>&1; then
|
|
106
|
+
install_skill "$ROOT_DIR/templates/codex/SKILL.md" "$HOME/.codex/skills/prjct/SKILL.md"
|
|
103
107
|
fi
|
|
104
108
|
}
|
|
105
109
|
|