@aacombarro89/praxis 0.1.0 → 0.1.1
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 +126 -0
- package/dist/init.d.ts +19 -2
- package/dist/init.js +33 -3
- package/dist/init.js.map +1 -1
- package/dist/program.js +32 -3
- package/dist/program.js.map +1 -1
- package/package.json +1 -1
- package/packages/layer1/instruction-upkeep/commands/{audit.md → instructions.md} +3 -3
- package/packages/layer1/instruction-upkeep/package.yaml +1 -1
- package/packages/layer1/instruction-upkeep/rules.md +4 -1
- package/packages/layer1/onboarding/commands/onboard.md +59 -0
- package/packages/layer1/onboarding/package.yaml +8 -0
- package/packages/layer1/onboarding/rules.md +14 -0
- package/packages/layer1/upkeep/commands/upkeep.md +1 -1
- package/packages/layer1/upkeep/package.yaml +1 -1
- package/packages/layer1/upkeep/rules.md +1 -1
- package/packages/layer1/wiki-memory/commands/wiki.md +2 -2
- package/dist/external.d.ts +0 -61
- package/dist/external.js +0 -155
- package/dist/external.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Praxis
|
|
2
|
+
|
|
3
|
+
**A CLI that installs an AI _methodology layer_ into a codebase** — the
|
|
4
|
+
meta-development rules and authoring recipes that make AI coding agents produce
|
|
5
|
+
correct, conformant work.
|
|
6
|
+
|
|
7
|
+
Praxis is **not** implementation scaffolding and **not** a config-file
|
|
8
|
+
generator. It writes _only_ the methodology layer — agent-instruction files,
|
|
9
|
+
skills, slash commands, and its own manifest. It never touches your application
|
|
10
|
+
code, dependencies, or runtime infrastructure.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx @aacombarro89/praxis
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## What it does
|
|
17
|
+
|
|
18
|
+
Running `praxis` in a project:
|
|
19
|
+
|
|
20
|
+
1. **Detects your stack** from project files — `pyproject.toml` /
|
|
21
|
+
`requirements.txt` / `setup.py` → `python-backend`; `package.json` → `node`;
|
|
22
|
+
a `react` dependency → both `node` and `react`.
|
|
23
|
+
2. **Offers a first-run fork** — _Quick start_ (recommended defaults, preview
|
|
24
|
+
the diff, confirm) or _Customize_ (choose stacks, packages, and targets).
|
|
25
|
+
3. **Composes the methodology into your repo** — it merges managed blocks into
|
|
26
|
+
files like `CLAUDE.md` without clobbering your own content, and records what
|
|
27
|
+
it did in a visible, committed, hand-editable manifest: `praxis.yaml`.
|
|
28
|
+
|
|
29
|
+
It always previews a single diff before writing. Git is your undo.
|
|
30
|
+
|
|
31
|
+
## Why it's different
|
|
32
|
+
|
|
33
|
+
Compared to `/init`-style tools, Praxis adds two things they lack:
|
|
34
|
+
|
|
35
|
+
- **A curated, opinionated methodology** — Layer 1 behavioral rules plus Layer 2
|
|
36
|
+
stack recipes, shipped as composable **packages**.
|
|
37
|
+
- **A composition / merge step** that folds methodology into an _existing_
|
|
38
|
+
project without overwriting project-specific content.
|
|
39
|
+
|
|
40
|
+
## The two layers
|
|
41
|
+
|
|
42
|
+
- **Layer 1 (general, stack-agnostic).** Tool-neutral behavioral rules that
|
|
43
|
+
reduce common LLM coding mistakes, plus methodology-upkeep commands:
|
|
44
|
+
`karpathy-claude`, `wiki-memory`, `session-handoff`, `upkeep`,
|
|
45
|
+
`instruction-upkeep`, `safe-permissions`.
|
|
46
|
+
- **Layer 2 (stack-specific recipes).** Authoring recipes for the stack you're
|
|
47
|
+
on — `node` (`node-recipes`, `node-testing`), `python-backend`
|
|
48
|
+
(`python-backend-recipes`, `python-testing`), and `react`
|
|
49
|
+
(`react-components`, `react-testing`).
|
|
50
|
+
|
|
51
|
+
## The mental model — imperative entry, declarative truth
|
|
52
|
+
|
|
53
|
+
This is the `npm install` pattern. One command (`praxis`) does the smart thing
|
|
54
|
+
immediately and records the result in `praxis.yaml`. Thereafter the manifest is
|
|
55
|
+
the source of truth: to customize, **edit `praxis.yaml`, then run `praxis
|
|
56
|
+
sync`**. There is no `add`/`remove` — one obvious way to change things.
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
# Edit this, then run `praxis sync`.
|
|
60
|
+
version: 1
|
|
61
|
+
methodology: "0.1.0" # pinned; `sync` offers to bump
|
|
62
|
+
stacks: [node, react] # detection-seeded, user-editable
|
|
63
|
+
targets: [claude-code, agents-md] # which agent files to emit
|
|
64
|
+
packages:
|
|
65
|
+
- karpathy-claude # behavioral rules (Layer 1)
|
|
66
|
+
- wiki-memory # the knowledge-wiki command (Layer 1)
|
|
67
|
+
- node-recipes # Layer 2 craft (stack: node)
|
|
68
|
+
- react-components # Layer 2 craft (stack: react)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
New methodology only reaches your repo on an explicit `sync` that bumps the
|
|
72
|
+
pinned version — never behind your back.
|
|
73
|
+
|
|
74
|
+
## Commands
|
|
75
|
+
|
|
76
|
+
| Command | What it does |
|
|
77
|
+
|----------------|------------------------------------------------------------------------------|
|
|
78
|
+
| `praxis` | First-run wizard; apply. |
|
|
79
|
+
| `praxis sync` | Reconcile the repo to `praxis.yaml`; offer newer methodology; diff + confirm. |
|
|
80
|
+
| `praxis check` | Dry-run; report drift; non-zero exit for CI. |
|
|
81
|
+
|
|
82
|
+
`--yes` skips prompts (takes the Quick-start path) for non-interactive/CI use.
|
|
83
|
+
|
|
84
|
+
## Tool-neutral by construction
|
|
85
|
+
|
|
86
|
+
The methodology source is singular; Praxis _emits_ per-tool variants from it.
|
|
87
|
+
**Claude Code** (`.claude/rules/`, skills, commands, `settings.json`) and the
|
|
88
|
+
**`agents-md`** flat-file convention (`AGENTS.md`) are built today. Cursor is a
|
|
89
|
+
planned target; Copilot/Windsurf/Roo are deferred until they land.
|
|
90
|
+
|
|
91
|
+
## "Memory" means the agent's memory, not the app's
|
|
92
|
+
|
|
93
|
+
In Praxis, _memory_ always refers to the **AI coding tool's** curated,
|
|
94
|
+
file-based instruction layer (`CLAUDE.md`, the knowledge wiki, skills, decision
|
|
95
|
+
notes) — not a runtime memory backend for your application (Mem0, Zep, Letta,
|
|
96
|
+
etc.). Wiring a persistence backend into your app is implementation, and out of
|
|
97
|
+
scope. The most Praxis ships on that topic is a Layer 2 _decision recipe_:
|
|
98
|
+
guidance on whether you need runtime memory and how to choose — never the
|
|
99
|
+
backend itself.
|
|
100
|
+
|
|
101
|
+
## Developing Praxis
|
|
102
|
+
|
|
103
|
+
Praxis is a TypeScript/Node CLI, and it self-hosts: it installs its own
|
|
104
|
+
methodology and gates drift in its own CI.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
npm run typecheck # tsc --noEmit
|
|
108
|
+
npm run build # tsc → dist/
|
|
109
|
+
npm test # vitest over test/
|
|
110
|
+
npm run conformance # vitest over conformance/
|
|
111
|
+
npm run selfcheck # praxis check against this repo's emitted files
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
CI runs all five, in that order, on every push to `main` and every PR. Work
|
|
115
|
+
lands on a feature branch and merges via PR — no direct pushes to `main`.
|
|
116
|
+
|
|
117
|
+
- `src/` — CLI implementation (emit, sync, merge, manifest, packages,
|
|
118
|
+
permissions, plugins, anchors, init).
|
|
119
|
+
- `packages/<layer>/<pkg>/` — methodology source (`layer1/`, `layer2/`, plus
|
|
120
|
+
thin `external/` plugin-marketplace packages).
|
|
121
|
+
- `test/` — unit tests mirroring `src/`. `conformance/` — the CI-gated
|
|
122
|
+
conformance suite.
|
|
123
|
+
- `docs/wiki/` — the durable, in-repo knowledge wiki and canonical design doc;
|
|
124
|
+
start at [`docs/wiki/index.md`](docs/wiki/index.md).
|
|
125
|
+
|
|
126
|
+
See [`CLAUDE.md`](CLAUDE.md) for the project's non-negotiable rails.
|
package/dist/init.d.ts
CHANGED
|
@@ -38,8 +38,25 @@ export interface InitPreview {
|
|
|
38
38
|
manifestYaml: string;
|
|
39
39
|
/** Dry-run emit report: what files init would create/update. */
|
|
40
40
|
report: SyncReport;
|
|
41
|
+
/**
|
|
42
|
+
* True when init would write the `.praxis-setup-pending` sentinel (fresh repo
|
|
43
|
+
* with no `CLAUDE.md` + `claude-code` in targets). WS1 uses this to surface
|
|
44
|
+
* the pending sentinel in the outro.
|
|
45
|
+
*/
|
|
46
|
+
willWriteSentinel: boolean;
|
|
41
47
|
}
|
|
42
48
|
/** Compute everything init would do, writing nothing. */
|
|
43
49
|
export declare function previewInit(cwd: string): InitPreview;
|
|
44
|
-
/**
|
|
45
|
-
|
|
50
|
+
/** The transient sentinel written on fresh installs (D14). The onboarding bootstrap
|
|
51
|
+
* rule triggers `/praxis-onboard`, which deletes it when done — one-shot, never
|
|
52
|
+
* a managed/synced file. */
|
|
53
|
+
export declare const SETUP_SENTINEL = ".praxis-setup-pending";
|
|
54
|
+
/**
|
|
55
|
+
* Write the transient `.praxis-setup-pending` sentinel directly (outside the
|
|
56
|
+
* sync/emit pipeline) so `praxis check` never treats it as drift. Called only
|
|
57
|
+
* when `!ctx.hasClaudeMd && manifest.targets.includes("claude-code")`.
|
|
58
|
+
*/
|
|
59
|
+
export declare function writeSetupSentinel(cwd: string): void;
|
|
60
|
+
/** Write `praxis.yaml`, apply the methodology files, and — for a fresh
|
|
61
|
+
* Claude Code repo with no CLAUDE.md — write the onboarding sentinel (D14). */
|
|
62
|
+
export declare function applyInit(cwd: string, manifest: Manifest, ctx: Pick<InitContext, "hasClaudeMd">): SyncReport;
|
package/dist/init.js
CHANGED
|
@@ -111,13 +111,43 @@ export function previewInit(cwd) {
|
|
|
111
111
|
manifest,
|
|
112
112
|
manifestYaml: renderManifestYaml(manifest),
|
|
113
113
|
report: applyManifest(manifest, cwd, false),
|
|
114
|
+
willWriteSentinel: !ctx.hasClaudeMd && manifest.targets.includes("claude-code"),
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
|
-
/**
|
|
117
|
-
|
|
117
|
+
/** The transient sentinel written on fresh installs (D14). The onboarding bootstrap
|
|
118
|
+
* rule triggers `/praxis-onboard`, which deletes it when done — one-shot, never
|
|
119
|
+
* a managed/synced file. */
|
|
120
|
+
export const SETUP_SENTINEL = ".praxis-setup-pending";
|
|
121
|
+
const SENTINEL_CONTENT = `# .praxis-setup-pending
|
|
122
|
+
#
|
|
123
|
+
# This file was written by \`praxis init\` to signal that project-owned sections
|
|
124
|
+
# of CLAUDE.md haven't been authored yet for this fresh install.
|
|
125
|
+
#
|
|
126
|
+
# At the start of the next session your AI coding agent will offer to run
|
|
127
|
+
# /praxis-onboard, which guides you through writing the build/run/test commands,
|
|
128
|
+
# project layout, conventions, and always-do rules for this repo.
|
|
129
|
+
#
|
|
130
|
+
# /praxis-onboard deletes this file when it finishes — making onboarding
|
|
131
|
+
# one-shot. You can also delete this file yourself to skip onboarding.
|
|
132
|
+
`;
|
|
133
|
+
/**
|
|
134
|
+
* Write the transient `.praxis-setup-pending` sentinel directly (outside the
|
|
135
|
+
* sync/emit pipeline) so `praxis check` never treats it as drift. Called only
|
|
136
|
+
* when `!ctx.hasClaudeMd && manifest.targets.includes("claude-code")`.
|
|
137
|
+
*/
|
|
138
|
+
export function writeSetupSentinel(cwd) {
|
|
139
|
+
writeFileSync(join(cwd, SETUP_SENTINEL), SENTINEL_CONTENT, "utf8");
|
|
140
|
+
}
|
|
141
|
+
/** Write `praxis.yaml`, apply the methodology files, and — for a fresh
|
|
142
|
+
* Claude Code repo with no CLAUDE.md — write the onboarding sentinel (D14). */
|
|
143
|
+
export function applyInit(cwd, manifest, ctx) {
|
|
118
144
|
const path = join(cwd, MANIFEST_FILE);
|
|
119
145
|
mkdirSync(dirname(path), { recursive: true });
|
|
120
146
|
writeFileSync(path, renderManifestYaml(manifest), "utf8");
|
|
121
|
-
|
|
147
|
+
const report = applyManifest(manifest, cwd, true);
|
|
148
|
+
if (!ctx.hasClaudeMd && manifest.targets.includes("claude-code")) {
|
|
149
|
+
writeSetupSentinel(cwd);
|
|
150
|
+
}
|
|
151
|
+
return report;
|
|
122
152
|
}
|
|
123
153
|
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/program.js
CHANGED
|
@@ -161,7 +161,10 @@ async function runInit(opts) {
|
|
|
161
161
|
const manifestYaml = renderManifestYaml(manifest);
|
|
162
162
|
const report = applyManifest(manifest, cwd, false);
|
|
163
163
|
note(manifestYaml.trimEnd(), "praxis.yaml (proposed)");
|
|
164
|
-
|
|
164
|
+
const freshHarness = !ctx.hasClaudeMd && manifest.targets.includes("claude-code");
|
|
165
|
+
const willWritePlan = formatPlan(report, "init");
|
|
166
|
+
const sentinelLine = freshHarness ? "\n + .praxis-setup-pending (onboarding sentinel)" : "";
|
|
167
|
+
note(willWritePlan + sentinelLine, "Will write");
|
|
165
168
|
if (!opts.yes) {
|
|
166
169
|
const ok = await confirm({ message: "Apply these changes?" });
|
|
167
170
|
if (isCancel(ok) || !ok) {
|
|
@@ -169,8 +172,34 @@ async function runInit(opts) {
|
|
|
169
172
|
return;
|
|
170
173
|
}
|
|
171
174
|
}
|
|
172
|
-
applyInit(cwd, manifest);
|
|
173
|
-
|
|
175
|
+
applyInit(cwd, manifest, ctx);
|
|
176
|
+
const SKILLS = "/praxis-instructions /praxis-wiki /praxis-handoff\n /praxis-upkeep /praxis-onboard";
|
|
177
|
+
if (freshHarness) {
|
|
178
|
+
note([
|
|
179
|
+
"Open Claude Code in this repo.",
|
|
180
|
+
"It will offer to run /praxis-onboard automatically (one-shot bootstrap).",
|
|
181
|
+
"Or run /init then /praxis-onboard yourself to author project facts.",
|
|
182
|
+
"",
|
|
183
|
+
"Installed skills:",
|
|
184
|
+
` ${SKILLS}`,
|
|
185
|
+
"",
|
|
186
|
+
"Run `praxis check` anytime to verify the repo is in sync (good for CI).",
|
|
187
|
+
].join("\n"), "Next steps");
|
|
188
|
+
outro("Methodology layer installed. Open Claude Code to complete onboarding.");
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
note([
|
|
192
|
+
"Your CLAUDE.md was left untouched (existing harness preserved).",
|
|
193
|
+
".claude/rules load automatically — no edits needed.",
|
|
194
|
+
"",
|
|
195
|
+
"Installed skills:",
|
|
196
|
+
` ${SKILLS}`,
|
|
197
|
+
"",
|
|
198
|
+
"To tune: edit `praxis.yaml`, then run `praxis sync`.",
|
|
199
|
+
"Run `praxis check` anytime to verify the repo is in sync (good for CI).",
|
|
200
|
+
].join("\n"), "Next steps");
|
|
201
|
+
outro("Methodology layer installed.");
|
|
202
|
+
}
|
|
174
203
|
}
|
|
175
204
|
catch (err) {
|
|
176
205
|
cancel(`praxis: ${err.message}`);
|
package/dist/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAA0B,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,SAAS,EACT,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,MAAM,EAA0C,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAoC,MAAM,WAAW,CAAC;AAErF;;;;GAIG;AAEH,MAAM,aAAa,GAAyC;IAC1D,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;CACf,CAAC;AAEF,SAAS,UAAU,CAAC,MAAkB,EAAE,IAA+B;IACrE,OAAO,MAAM,CAAC,KAAK;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,GAAG,QAAQ,EAAE,CAAC;IACrE,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAyB;IACnD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,wBAAwB,MAAM,CAAC,cAAc,qBAAqB,CAAC;IAC5E,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;QACzE,OAAO,OAAO,CAAC,CAAC,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO,gCAAgC,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,6EAA6E;AAE7E,SAAS,YAAY,CAAC,KAAc,EAAE,IAAsB;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAChF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;YAChD,IAAI,YAAY,CAAC,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;gBACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CACX,0EAA0E;gBACxE,kFAAkF,CACrF,CAAC;QACJ,CAAC;QACD,IACE,IAAI,KAAK,OAAO;YACd,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,YAAY,EAAE,EAAE;YAC5D,CAAC,CAAC,MAAM,CAAC,YAAY,EACvB,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAY,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,6EAA6E;AAE7E,KAAK,UAAU,OAAO,CAAC,IAAuB;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAE/B,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CACF,2EAA2E,EAC3E,qBAAqB,CACtB,CAAC;YACF,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACzB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;YACpC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;YACpC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;SAC7E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAExE,IAAI,QAAkB,CAAC;QAEvB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,2CAA2C;YAC3C,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;gBACxB,OAAO,EAAE,6BAA6B;gBACtC,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,sCAAsC,EAAE;oBACtF,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,oCAAoC,EAAE;iBACvF;aACF,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,MAAM,YAAY,GAAG,MAAM,WAAW,CAAQ;oBAC5C,OAAO,EAAE,kCAAkC;oBAC3C,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;oBACpD,aAAa,EAAE,GAAG,CAAC,cAAc;oBACjC,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC3B,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;gBAEvC,sEAAsE;gBACtE,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;gBAChC,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,eAAe,CAAC,EAAE,GAAG,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,QAAQ,CACnE,CAAC;gBAEF,MAAM,UAAU,GAA2D,EAAE,CAAC;gBAC9E,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;oBAC9B,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;wBACvD,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjE,CAAC;yBAAM,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC1E,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC/E,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE1D,MAAM,UAAU,GAAG,MAAM,WAAW,CAAS;oBAC3C,OAAO,EAAE,iBAAiB;oBAC1B,OAAO,EAAE,UAAU;oBACnB,aAAa,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/E,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBACzB,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,sBAAsB;gBACtB,MAAM,aAAa,GAA4C;oBAC7D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;oBAC9C,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;iBAC3C,CAAC;gBACF,MAAM,aAAa,GAAG,MAAM,WAAW,CAAS;oBAC9C,OAAO,EAAE,wBAAwB;oBACjC,OAAO,EAAE,aAAa;oBACtB,aAAa,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC;oBAC3C,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,QAAQ,GAAG,sBAAsB,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,wBAAwB,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Keep the authored instruction files (CLAUDE.md, .claude/rules) current with the project's state and complete against the standard rubric.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Scope: $ARGUMENTS
|
|
6
6
|
|
|
7
|
-
This
|
|
7
|
+
This updates the **authored instruction layer** — `CLAUDE.md` and
|
|
8
8
|
`.claude/rules` — not the tool's native auto-memory and not any 3rd-party
|
|
9
9
|
agent-memory system. Those are out of scope.
|
|
10
10
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Package manifest (docs/wiki/packages-and-emit.md, D20). This package provides a standing
|
|
2
|
-
# reminder (rules.md) plus the /praxis-
|
|
2
|
+
# reminder (rules.md) plus the /praxis-instructions command (commands/instructions.md) that
|
|
3
3
|
# keeps the authored instruction layer (CLAUDE.md, .claude/rules) current —
|
|
4
4
|
# never the tool's native auto-memory, never a 3rd-party memory system
|
|
5
5
|
# (docs/wiki/onboarding.md).
|
|
@@ -13,9 +13,12 @@ and complete:
|
|
|
13
13
|
a fact that isn't backed by the code, config, or the user's answer.
|
|
14
14
|
- Prefer linking a canonical source (e.g. an architecture doc) over restating
|
|
15
15
|
its facts — restated facts drift independently of their source.
|
|
16
|
+
- If a *derived overview* like `README.md` exists, check it hasn't drifted from
|
|
17
|
+
its canonical sources — being a restatement of them, it drifts by
|
|
18
|
+
construction; reconcile it to the source rather than the reverse.
|
|
16
19
|
- When instruction files include `praxisAnchors` frontmatter, keep those anchors
|
|
17
20
|
resolving. `praxis check` hard-fails broken `path`, `command`, and `section`
|
|
18
21
|
anchors; staleness signals are future advisory work.
|
|
19
|
-
- Make instruction-layer changes through `/praxis-
|
|
22
|
+
- Make instruction-layer changes through `/praxis-instructions`, not ad-hoc edits — run
|
|
20
23
|
it when unsure whether the instruction files still match the project, or whether
|
|
21
24
|
they cover the sections above.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Author the project-owned sections of CLAUDE.md for a fresh Praxis install — build/run/test commands, layout, conventions, and always-do rules. One-shot: deletes .praxis-setup-pending when done.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Scope: $ARGUMENTS
|
|
6
|
+
|
|
7
|
+
This authors the **project-owned** sections of `CLAUDE.md` — not the
|
|
8
|
+
methodology layer (that is managed by Praxis's owned `.claude/rules/` files).
|
|
9
|
+
Praxis never calls an LLM (D12); never edits `CLAUDE.md` directly (D13). The
|
|
10
|
+
**agent** writes the facts, guided by the steps below, asking the user for
|
|
11
|
+
anything it cannot infer.
|
|
12
|
+
|
|
13
|
+
1. **Bulk discovery — lean on the tool's native `/init` first.** If `CLAUDE.md`
|
|
14
|
+
does not yet exist (or is empty), suggest running the tool's built-in `/init`
|
|
15
|
+
command so the model can auto-discover repository facts (files, build config,
|
|
16
|
+
README). Incorporate any useful output into the project-owned sections below,
|
|
17
|
+
rather than restating it from scratch.
|
|
18
|
+
|
|
19
|
+
2. **Check detected stacks (if known).** Read `praxis.yaml` for the `stacks:`
|
|
20
|
+
field. If stacks are declared, tailor the sections below to those stacks (e.g.
|
|
21
|
+
for `node`, prefer `npm run …` commands; for `python-backend`, prefer `pytest`
|
|
22
|
+
/ `poetry` patterns; for `react`, note the dev server and component test
|
|
23
|
+
runner). Never invent stack facts — confirm them from config files
|
|
24
|
+
(`package.json`, `pyproject.toml`, etc.).
|
|
25
|
+
|
|
26
|
+
3. **Author the four rubric sections.** For each section, read the project's
|
|
27
|
+
config files and recent git history, then write only what is verifiably true.
|
|
28
|
+
Ask the user before adding anything that isn't clear from the code:
|
|
29
|
+
|
|
30
|
+
- **Build / test / run commands** — the exact commands to typecheck, build,
|
|
31
|
+
run the test suite, and start the app. Include any CI commands that differ
|
|
32
|
+
from local. Never guess; confirm from `package.json` scripts, `Makefile`,
|
|
33
|
+
`pyproject.toml`, etc.
|
|
34
|
+
- **Project layout** — key directories and their purpose. One sentence per
|
|
35
|
+
entry is enough; link canonical docs rather than restating their content.
|
|
36
|
+
- **Key conventions** — branch/PR flow, what a change must ship with (tests,
|
|
37
|
+
docs update, etc.), naming conventions, anything a newcomer would violate.
|
|
38
|
+
- **Always-do rules** — the small set of non-negotiable habits (e.g. "run
|
|
39
|
+
`praxis check` before pushing", "never commit secrets"). Keep this list
|
|
40
|
+
short; a long always-do list is never read.
|
|
41
|
+
|
|
42
|
+
4. **Ask the user for anything not inferable.** If a section can't be filled from
|
|
43
|
+
config files, git history, or the `/init` output, ask a targeted question
|
|
44
|
+
rather than inventing a plausible answer. Content inclusion bar: a fact only
|
|
45
|
+
enters if it's backed by the code, config, a canonical doc, or the user.
|
|
46
|
+
|
|
47
|
+
5. **Write only project-owned content.** Never put content inside a Praxis
|
|
48
|
+
managed block (a `<!-- praxis-start … -->` / `<!-- praxis-end … -->` region).
|
|
49
|
+
Project facts belong in the free-prose sections the author controls; Praxis
|
|
50
|
+
owns only its own managed blocks.
|
|
51
|
+
|
|
52
|
+
6. **Delete `.praxis-setup-pending`** to make this one-shot. Once the rubric
|
|
53
|
+
sections are authored and the user is satisfied, remove the sentinel file
|
|
54
|
+
from the repo root. This prevents the bootstrap rule (`.claude/rules/
|
|
55
|
+
praxis-onboarding.md`) from re-offering onboarding on the next session.
|
|
56
|
+
|
|
57
|
+
7. **Report what was written / left.** Summarise which rubric sections were
|
|
58
|
+
filled, which were left empty (and why — e.g. "no build step detected"), and
|
|
59
|
+
any follow-up items for the user.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Package manifest (docs/wiki/packages-and-emit.md, D20). This package provides a bootstrap
|
|
2
|
+
# rule (rules.md) that self-terminates after first-run onboarding, and the /praxis-onboard
|
|
3
|
+
# command (commands/onboard.md) that guides the agent through authoring project facts
|
|
4
|
+
# (build/run/test, layout, conventions) — never authoring them directly (D12/D13).
|
|
5
|
+
# Part of the D14 onboarding mechanism (docs/wiki/onboarding.md).
|
|
6
|
+
name: onboarding
|
|
7
|
+
layer: layer1
|
|
8
|
+
provides: [rules, commands]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
## First-run onboarding
|
|
2
|
+
|
|
3
|
+
At the start of work, check for the `.praxis-setup-pending` sentinel file in
|
|
4
|
+
the repo root. Its presence means this is a fresh Praxis install and the
|
|
5
|
+
project-owned sections of `CLAUDE.md` haven't been authored yet.
|
|
6
|
+
|
|
7
|
+
- **If the sentinel is present:** offer to run `/praxis-onboard`. Once the
|
|
8
|
+
skill completes it deletes the sentinel — making this check one-shot and
|
|
9
|
+
self-terminating. Never nag when the sentinel is absent.
|
|
10
|
+
- **If the sentinel is absent:** do nothing here. The ongoing instruction
|
|
11
|
+
upkeep path (`/praxis-instructions`) handles currency after initial setup.
|
|
12
|
+
|
|
13
|
+
Cross-references: `/praxis-onboard` (first-run authoring),
|
|
14
|
+
`/praxis-instructions` (ongoing upkeep — D22/D23, [onboarding](../../../docs/wiki/onboarding.md)).
|
|
@@ -17,7 +17,7 @@ independently of its canonical home.
|
|
|
17
17
|
conflicts or broken anchors, surface them as-is. This step needs no LLM
|
|
18
18
|
judgment — do it first so the semantic passes below build on a known-good
|
|
19
19
|
baseline.
|
|
20
|
-
2. **Instruction layer.** Perform the
|
|
20
|
+
2. **Instruction layer.** Perform the update defined by `/praxis-instructions`,
|
|
21
21
|
scoped to the focus above. Follow that command's own steps; do not
|
|
22
22
|
re-derive them here.
|
|
23
23
|
3. **Wiki.** Perform the wiki maintenance defined by `/praxis-wiki`, scoped to
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Package manifest (docs/wiki/packages-and-emit.md, D29). Ships a standing reminder
|
|
2
2
|
# (rules.md) plus the /praxis-upkeep command (commands/upkeep.md): one entry point
|
|
3
3
|
# that runs the deterministic `praxis check` drift gate and then both semantic-drift
|
|
4
|
-
# passes — the instruction-layer
|
|
4
|
+
# passes — the instruction-layer update (/praxis-instructions) and the wiki lint
|
|
5
5
|
# (/praxis-wiki Phase 4) — and reports one consolidated result. Layer 1 /
|
|
6
6
|
# stack- & tool-agnostic; defers to those two commands rather than restating
|
|
7
7
|
# their steps, so the detail can't drift independently of its canonical home.
|
|
@@ -7,6 +7,6 @@ longer matches the code, an unsynced emit — or when work produces new durable
|
|
|
7
7
|
knowledge to file (a decision, a new package), run `/praxis-upkeep` rather than
|
|
8
8
|
letting the gap persist, fixing it ad hoc, or invoking the sub-skills piecemeal.
|
|
9
9
|
It is the single front gate: it sequences `praxis check` and fully delegates to
|
|
10
|
-
`/praxis-
|
|
10
|
+
`/praxis-instructions` (instruction layer) and `/praxis-wiki` (knowledge wiki). The
|
|
11
11
|
command itself only sequences and reports; the sub-skills make any edits, each
|
|
12
12
|
behind its own confirmation gate.
|
|
@@ -11,7 +11,7 @@ of long-lived knowledge that a future session reads instead of re-deriving. This
|
|
|
11
11
|
is the agent's cross-session memory **of the project** — version-controlled and
|
|
12
12
|
shared with the team. It is NOT a per-session handoff (transient — that is
|
|
13
13
|
`/praxis-handoff`) and NOT the authored instruction layer (`CLAUDE.md`,
|
|
14
|
-
`.claude/rules` — that is `/praxis-
|
|
14
|
+
`.claude/rules` — that is `/praxis-instructions`).
|
|
15
15
|
|
|
16
16
|
The wiki has two kinds of durable knowledge:
|
|
17
17
|
- **Derived summaries** compress code, config, and canonical docs. The underlying
|
|
@@ -81,7 +81,7 @@ Health-check the wiki and fix what you can (ask before large deletions):
|
|
|
81
81
|
- **Contradictions** — derived summaries that disagree with current code/config
|
|
82
82
|
lose to the source; fix the wiki. Canonical-intent entries are different: if
|
|
83
83
|
code and intent diverge, report the drift and route it to a decision/update
|
|
84
|
-
step (or `/praxis-
|
|
84
|
+
step (or `/praxis-instructions` for instruction-layer changes) instead of deciding
|
|
85
85
|
automatically. Two wiki entries that disagree resolve to the more recent /
|
|
86
86
|
authoritative / better-supported claim, with the resolution noted.
|
|
87
87
|
- **Stale claims** — derived facts the current code has invalidated: fix or
|
package/dist/external.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import type { Manifest, Target } from "./manifest.js";
|
|
3
|
-
declare const lockEntrySchema: z.ZodObject<{
|
|
4
|
-
name: z.ZodString;
|
|
5
|
-
spec: z.ZodArray<z.ZodString>;
|
|
6
|
-
targets: z.ZodArray<z.ZodString>;
|
|
7
|
-
}, z.core.$strict>;
|
|
8
|
-
declare const lockSchema: z.ZodObject<{
|
|
9
|
-
version: z.ZodLiteral<1>;
|
|
10
|
-
installed: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
11
|
-
name: z.ZodString;
|
|
12
|
-
spec: z.ZodArray<z.ZodString>;
|
|
13
|
-
targets: z.ZodArray<z.ZodString>;
|
|
14
|
-
}, z.core.$strict>>>;
|
|
15
|
-
}, z.core.$strict>;
|
|
16
|
-
export type LockEntry = z.infer<typeof lockEntrySchema>;
|
|
17
|
-
export type Lock = z.infer<typeof lockSchema>;
|
|
18
|
-
export declare const EMPTY_LOCK: Lock;
|
|
19
|
-
export type ExternalActionKind = "install" | "reinstall" | "skip" | "orphan";
|
|
20
|
-
export interface ExternalAction {
|
|
21
|
-
kind: ExternalActionKind;
|
|
22
|
-
name: string;
|
|
23
|
-
/** Targets the action applies to (the intersection of manifest.targets and
|
|
24
|
-
* the package's declared external.targets — empty if fully quarantined out). */
|
|
25
|
-
targets: Target[];
|
|
26
|
-
/** argv to run for install/reinstall; the declared uninstall argv for
|
|
27
|
-
* orphan (undefined if the package declared none — warn-only removal). */
|
|
28
|
-
command?: string[];
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Decide what `sync` would do with every selected external package, against
|
|
32
|
-
* the current lock. Pure: the lock is injected so this is testable without
|
|
33
|
-
* disk, and it performs no execution itself.
|
|
34
|
-
*
|
|
35
|
-
* - `install`: no lock entry for this package yet.
|
|
36
|
-
* - `reinstall`: lock entry exists but its spec/targets no longer match the
|
|
37
|
-
* package's current declaration (the manifest changed under it).
|
|
38
|
-
* - `skip`: lock entry matches exactly — idempotent no-op.
|
|
39
|
-
* - `orphan`: a lock entry exists for a package no longer selected (or with
|
|
40
|
-
* no targets left after quarantine) — offer to remove, never silently.
|
|
41
|
-
*/
|
|
42
|
-
export declare function planExternal(manifest: Manifest, lock: Lock): ExternalAction[];
|
|
43
|
-
/** Runs one argv in `cwd`. The real implementation for `executeAction`'s
|
|
44
|
-
* injected runner — uses `execFileSync` (argv form, no shell string) so
|
|
45
|
-
* there is no pipe/shell-injection surface from a pinned command. */
|
|
46
|
-
export declare function runCommand(command: string[], cwd: string): void;
|
|
47
|
-
export type CommandRunner = (command: string[], cwd: string) => void;
|
|
48
|
-
/** Execute one planned action via the injected runner. Tests pass a stub
|
|
49
|
-
* runner so they never actually shell out. No-op for `skip`, and for
|
|
50
|
-
* `orphan` when the package declared no `uninstall` (Praxis doesn't own
|
|
51
|
-
* those files and never deletes them on the user's behalf). */
|
|
52
|
-
export declare function executeAction(action: ExternalAction, cwd: string, runner?: CommandRunner): void;
|
|
53
|
-
/** Read `praxis-external.lock` from `cwd`, or the empty lock if absent. */
|
|
54
|
-
export declare function readLock(cwd: string): Lock;
|
|
55
|
-
/** Apply a list of executed actions to a lock, returning the next lock.
|
|
56
|
-
* Pure — the caller decides whether/when to persist it. */
|
|
57
|
-
export declare function applyActionsToLock(lock: Lock, actions: ExternalAction[]): Lock;
|
|
58
|
-
/** Persist the lock to `praxis-external.lock` at `cwd`, sorted for a stable
|
|
59
|
-
* diff (deterministic, reviewable — no timestamps anywhere in the file). */
|
|
60
|
-
export declare function writeLock(cwd: string, lock: Lock): void;
|
|
61
|
-
export {};
|
package/dist/external.js
DELETED
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from "node:child_process";
|
|
2
|
-
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
import { resolvePackages } from "./packages.js";
|
|
6
|
-
/**
|
|
7
|
-
* External installer packages (docs/wiki/external-packages.md, the bounded
|
|
8
|
-
* execution relaxation — see docs/wiki/decisions.md). A "rules"/"permissions"/
|
|
9
|
-
* "commands" package ships tool-neutral source that the *pure* emit pipeline
|
|
10
|
-
* (src/emit.ts) translates and writes. An "external" package ships no source
|
|
11
|
-
* at all — only a pinned install command that some other tool (npx/git) runs
|
|
12
|
-
* to drop its own already-tool-shaped files into the methodology layer (e.g.
|
|
13
|
-
* `.claude/skills/…`).
|
|
14
|
-
*
|
|
15
|
-
* That's side-effecting and untranslatable, so it never becomes an `EmitOp`.
|
|
16
|
-
* This module is the separate, explicit seam: `planExternal` decides *what*
|
|
17
|
-
* would happen (pure, no I/O — same plan/apply split as src/emit.ts +
|
|
18
|
-
* src/sync.ts), and `executeAction` is the one place that actually shells out,
|
|
19
|
-
* with the runner injected so tests never really execute a command.
|
|
20
|
-
*/
|
|
21
|
-
const LOCK_FILE = "praxis-external.lock";
|
|
22
|
-
// One row per (package, target) pair Praxis has installed. No timestamps —
|
|
23
|
-
// the pinned spec is the whole identity, so the lock is stable in git and
|
|
24
|
-
// re-syncing is deterministic: same spec ⇒ same action.
|
|
25
|
-
const lockEntrySchema = z.strictObject({
|
|
26
|
-
name: z.string().min(1),
|
|
27
|
-
spec: z.array(z.string().min(1)).min(1),
|
|
28
|
-
targets: z.array(z.string().min(1)).min(1),
|
|
29
|
-
});
|
|
30
|
-
const lockSchema = z.strictObject({
|
|
31
|
-
version: z.literal(1),
|
|
32
|
-
installed: z.array(lockEntrySchema).default([]),
|
|
33
|
-
});
|
|
34
|
-
export const EMPTY_LOCK = { version: 1, installed: [] };
|
|
35
|
-
/**
|
|
36
|
-
* Decide what `sync` would do with every selected external package, against
|
|
37
|
-
* the current lock. Pure: the lock is injected so this is testable without
|
|
38
|
-
* disk, and it performs no execution itself.
|
|
39
|
-
*
|
|
40
|
-
* - `install`: no lock entry for this package yet.
|
|
41
|
-
* - `reinstall`: lock entry exists but its spec/targets no longer match the
|
|
42
|
-
* package's current declaration (the manifest changed under it).
|
|
43
|
-
* - `skip`: lock entry matches exactly — idempotent no-op.
|
|
44
|
-
* - `orphan`: a lock entry exists for a package no longer selected (or with
|
|
45
|
-
* no targets left after quarantine) — offer to remove, never silently.
|
|
46
|
-
*/
|
|
47
|
-
export function planExternal(manifest, lock) {
|
|
48
|
-
const packages = resolvePackages(manifest.packages).filter((p) => p.provides.includes("external"));
|
|
49
|
-
const manifestTargets = new Set(manifest.targets);
|
|
50
|
-
const actions = [];
|
|
51
|
-
const seen = new Set();
|
|
52
|
-
for (const pkg of packages) {
|
|
53
|
-
const block = pkg.external;
|
|
54
|
-
if (!block)
|
|
55
|
-
continue; // schema guarantees this is unreachable; guard for type-narrowing only
|
|
56
|
-
const targets = block.targets.filter((t) => manifestTargets.has(t));
|
|
57
|
-
seen.add(pkg.name);
|
|
58
|
-
const existing = lock.installed.find((e) => e.name === pkg.name);
|
|
59
|
-
if (targets.length === 0) {
|
|
60
|
-
// Fully quarantined out for this manifest's targets: nothing to run. If a
|
|
61
|
-
// prior sync installed it for targets no longer selected, that's an orphan.
|
|
62
|
-
if (existing) {
|
|
63
|
-
actions.push({ kind: "orphan", name: pkg.name, targets: existing.targets, command: block.uninstall });
|
|
64
|
-
}
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (!existing) {
|
|
68
|
-
actions.push({ kind: "install", name: pkg.name, targets, command: block.command });
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
const specMatches = arraysEqual(existing.spec, block.command) && arraysEqual([...existing.targets].sort(), [...targets].sort());
|
|
72
|
-
actions.push(specMatches
|
|
73
|
-
? { kind: "skip", name: pkg.name, targets }
|
|
74
|
-
: { kind: "reinstall", name: pkg.name, targets, command: block.command });
|
|
75
|
-
}
|
|
76
|
-
// Lock entries for packages no longer selected at all are orphans too.
|
|
77
|
-
for (const entry of lock.installed) {
|
|
78
|
-
if (seen.has(entry.name))
|
|
79
|
-
continue;
|
|
80
|
-
const uninstall = lookupUninstall(entry.name);
|
|
81
|
-
actions.push({ kind: "orphan", name: entry.name, targets: entry.targets, command: uninstall });
|
|
82
|
-
}
|
|
83
|
-
return actions;
|
|
84
|
-
}
|
|
85
|
-
/** Look up a previously-installed package's declared uninstall argv, if the
|
|
86
|
-
* package is still discoverable (it may have been removed entirely from
|
|
87
|
-
* `packages/external/`, in which case removal stays warn-only). */
|
|
88
|
-
function lookupUninstall(name) {
|
|
89
|
-
try {
|
|
90
|
-
return resolvePackages([name])[0]?.external?.uninstall;
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
return undefined;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function arraysEqual(a, b) {
|
|
97
|
-
return a.length === b.length && a.every((v, i) => v === b[i]);
|
|
98
|
-
}
|
|
99
|
-
/** Runs one argv in `cwd`. The real implementation for `executeAction`'s
|
|
100
|
-
* injected runner — uses `execFileSync` (argv form, no shell string) so
|
|
101
|
-
* there is no pipe/shell-injection surface from a pinned command. */
|
|
102
|
-
export function runCommand(command, cwd) {
|
|
103
|
-
if (command.length === 0)
|
|
104
|
-
throw new Error("runCommand: empty argv");
|
|
105
|
-
const [bin, ...args] = command;
|
|
106
|
-
execFileSync(bin, args, { cwd, stdio: "inherit" });
|
|
107
|
-
}
|
|
108
|
-
/** Execute one planned action via the injected runner. Tests pass a stub
|
|
109
|
-
* runner so they never actually shell out. No-op for `skip`, and for
|
|
110
|
-
* `orphan` when the package declared no `uninstall` (Praxis doesn't own
|
|
111
|
-
* those files and never deletes them on the user's behalf). */
|
|
112
|
-
export function executeAction(action, cwd, runner = runCommand) {
|
|
113
|
-
if (action.kind === "skip")
|
|
114
|
-
return;
|
|
115
|
-
if (action.kind === "orphan" && !action.command)
|
|
116
|
-
return; // warn-only; caller reports it
|
|
117
|
-
if (!action.command)
|
|
118
|
-
return;
|
|
119
|
-
runner(action.command, cwd);
|
|
120
|
-
}
|
|
121
|
-
/** Read `praxis-external.lock` from `cwd`, or the empty lock if absent. */
|
|
122
|
-
export function readLock(cwd) {
|
|
123
|
-
const path = join(cwd, LOCK_FILE);
|
|
124
|
-
if (!existsSync(path))
|
|
125
|
-
return EMPTY_LOCK;
|
|
126
|
-
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
127
|
-
return lockSchema.parse(raw);
|
|
128
|
-
}
|
|
129
|
-
/** Apply a list of executed actions to a lock, returning the next lock.
|
|
130
|
-
* Pure — the caller decides whether/when to persist it. */
|
|
131
|
-
export function applyActionsToLock(lock, actions) {
|
|
132
|
-
let installed = lock.installed;
|
|
133
|
-
for (const action of actions) {
|
|
134
|
-
if (action.kind === "install" || action.kind === "reinstall") {
|
|
135
|
-
installed = [
|
|
136
|
-
...installed.filter((e) => e.name !== action.name),
|
|
137
|
-
{ name: action.name, spec: action.command ?? [], targets: action.targets },
|
|
138
|
-
];
|
|
139
|
-
}
|
|
140
|
-
else if (action.kind === "orphan") {
|
|
141
|
-
installed = installed.filter((e) => e.name !== action.name);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return { version: 1, installed };
|
|
145
|
-
}
|
|
146
|
-
/** Persist the lock to `praxis-external.lock` at `cwd`, sorted for a stable
|
|
147
|
-
* diff (deterministic, reviewable — no timestamps anywhere in the file). */
|
|
148
|
-
export function writeLock(cwd, lock) {
|
|
149
|
-
const sorted = {
|
|
150
|
-
version: 1,
|
|
151
|
-
installed: [...lock.installed].sort((a, b) => a.name.localeCompare(b.name)),
|
|
152
|
-
};
|
|
153
|
-
writeFileSync(join(cwd, LOCK_FILE), `${JSON.stringify(sorted, null, 2)}\n`, "utf8");
|
|
154
|
-
}
|
|
155
|
-
//# sourceMappingURL=external.js.map
|
package/dist/external.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
|