@ritualai/cli 0.36.39 → 0.36.44
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 +1 -1
- package/dist/commands/init.js +58 -133
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/materialize.js +300 -0
- package/dist/commands/materialize.js.map +1 -0
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/agents/providers.js +15 -8
- package/dist/lib/agents/providers.js.map +1 -1
- package/dist/lib/gitignore-update.js +68 -23
- package/dist/lib/gitignore-update.js.map +1 -1
- package/dist/lib/memory-update.js +31 -22
- package/dist/lib/memory-update.js.map +1 -1
- package/dist/lib/okf-knowledge.js +201 -0
- package/dist/lib/okf-knowledge.js.map +1 -0
- package/dist/lib/onboarding-state.js +5 -3
- package/dist/lib/onboarding-state.js.map +1 -1
- package/dist/lib/project-config.js.map +1 -1
- package/dist/lib/uninstall-plan.js +6 -2
- package/dist/lib/uninstall-plan.js.map +1 -1
- package/package.json +1 -1
- package/skills/claude-code/ritual/.ritual-bundle.json +3 -3
- package/skills/claude-code/ritual/SKILL.md +2 -2
- package/skills/claude-code/ritual/references/build-flow.md +17 -20
- package/skills/claude-code/ritual/references/cli-output-contract.md +3 -5
- package/skills/claude-code/ritual/references/lite-flow.md +18 -21
- package/skills/codex/ritual/.ritual-bundle.json +3 -3
- package/skills/codex/ritual/SKILL.md +2 -2
- package/skills/codex/ritual/references/build-flow.md +17 -20
- package/skills/codex/ritual/references/cli-output-contract.md +3 -5
- package/skills/codex/ritual/references/lite-flow.md +18 -21
- package/skills/cursor/ritual/.ritual-bundle.json +3 -3
- package/skills/cursor/ritual/SKILL.md +2 -2
- package/skills/cursor/ritual/references/build-flow.md +17 -20
- package/skills/cursor/ritual/references/cli-output-contract.md +3 -5
- package/skills/cursor/ritual/references/lite-flow.md +18 -21
- package/skills/gemini/ritual/.ritual-bundle.json +3 -3
- package/skills/gemini/ritual/SKILL.md +2 -2
- package/skills/gemini/ritual/references/build-flow.md +17 -20
- package/skills/gemini/ritual/references/cli-output-contract.md +3 -5
- package/skills/gemini/ritual/references/lite-flow.md +18 -21
- package/skills/kiro/ritual/.ritual-bundle.json +3 -3
- package/skills/kiro/ritual/SKILL.md +2 -2
- package/skills/kiro/ritual/references/build-flow.md +17 -20
- package/skills/kiro/ritual/references/cli-output-contract.md +3 -5
- package/skills/kiro/ritual/references/lite-flow.md +18 -21
- package/skills/vscode/ritual/.ritual-bundle.json +3 -3
- package/skills/vscode/ritual/SKILL.md +2 -2
- package/skills/vscode/ritual/references/build-flow.md +17 -20
- package/skills/vscode/ritual/references/cli-output-contract.md +3 -5
- package/skills/vscode/ritual/references/lite-flow.md +18 -21
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.materializeCommand = materializeCommand;
|
|
7
|
+
const node_child_process_1 = require("node:child_process");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const api_client_1 = require("../lib/api-client");
|
|
11
|
+
const config_1 = require("../lib/config");
|
|
12
|
+
const project_config_1 = require("../lib/project-config");
|
|
13
|
+
const colors_1 = require("../lib/colors");
|
|
14
|
+
const gitignore_update_1 = require("../lib/gitignore-update");
|
|
15
|
+
const okf_knowledge_1 = require("../lib/okf-knowledge");
|
|
16
|
+
function repoRoot() {
|
|
17
|
+
try {
|
|
18
|
+
return (0, node_child_process_1.execSync)('git rev-parse --show-toplevel', { stdio: 'pipe', encoding: 'utf8' }).trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return process.cwd();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const MATERIALIZE_STATE = 'materialize.json';
|
|
25
|
+
async function materializeCommand(opts) {
|
|
26
|
+
const token = await (0, config_1.getValidAccessToken)();
|
|
27
|
+
if (token.kind === 'not-signed-in') {
|
|
28
|
+
console.error(' ✗ Not signed in. Run `ritual login` first.');
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (token.kind === 're-auth-required') {
|
|
33
|
+
console.error(` ✗ Session expired (${token.reason}). Run \`ritual login\` to re-auth.`);
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const root = repoRoot();
|
|
38
|
+
const project = (0, project_config_1.loadProjectConfig)(root);
|
|
39
|
+
if (!project) {
|
|
40
|
+
console.error(' ✗ No `.ritual/config.json` in this repo. Run `ritual init` to bind a workspace first.');
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const api = new api_client_1.ApiClient({ issuer: token.creds.issuer, accessToken: token.accessToken });
|
|
45
|
+
const base = node_path_1.default.resolve(opts.out ?? root);
|
|
46
|
+
const ritualDir = node_path_1.default.join(base, '.ritual');
|
|
47
|
+
const knowledgeDir = opts.snapshot
|
|
48
|
+
? node_path_1.default.join(base, 'knowledge', '_snapshots', new Date().toISOString().replace(/[:.]/g, '-'))
|
|
49
|
+
: node_path_1.default.join(base, 'knowledge');
|
|
50
|
+
// 1. Enumerate the workspace's explorations.
|
|
51
|
+
let listed;
|
|
52
|
+
try {
|
|
53
|
+
listed = await api.get(`/explorations?workspaceId=${encodeURIComponent(project.workspaceId)}`);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error(` ✗ Couldn't list explorations: ${err.message}`);
|
|
57
|
+
process.exitCode = 1;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// 2. Filter to DELIVERABLE-BEARING: recommendationsStatus === 'ready',
|
|
61
|
+
// exclude archived / failed / empty / draft. (Status is read live —
|
|
62
|
+
// never inferred from a stale count.)
|
|
63
|
+
const ready = [];
|
|
64
|
+
for (const e of listed ?? []) {
|
|
65
|
+
try {
|
|
66
|
+
const s = await api.get(`/explorations/${encodeURIComponent(e.id)}/status`);
|
|
67
|
+
if (s.recommendationsStatus === 'ready' && !s.isArchived) {
|
|
68
|
+
ready.push({ status: s });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
/* skip explorations whose status won't load — never block the sweep */
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (ready.length === 0) {
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(` ${(0, colors_1.dim)('No deliverable-bearing explorations to materialize yet.')}`);
|
|
78
|
+
console.log(` ${(0, colors_1.dim)('(An exploration qualifies once its recommendations are ready.)')}`);
|
|
79
|
+
console.log('');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// 3. Load the prior resolver (for conflict + prune bookkeeping).
|
|
83
|
+
const resolverPath = node_path_1.default.join(ritualDir, 'resolver.json');
|
|
84
|
+
const prior = readResolver(resolverPath);
|
|
85
|
+
const priorByExpId = new Map(prior.entries.map((en) => [en.explorationId, en]));
|
|
86
|
+
// 4. Build each agnostic doc + resolver entry.
|
|
87
|
+
const entries = [];
|
|
88
|
+
const writes = [];
|
|
89
|
+
for (const { status } of ready) {
|
|
90
|
+
const detail = await fetchDetail(api, status.id);
|
|
91
|
+
const exploration = {
|
|
92
|
+
id: status.id,
|
|
93
|
+
name: status.name ?? detail.name,
|
|
94
|
+
jtbd: status.jtbd,
|
|
95
|
+
workItemLabel: status.workItemLabel,
|
|
96
|
+
problemStatement: detail.problemStatement,
|
|
97
|
+
recommendationsStatus: status.recommendationsStatus,
|
|
98
|
+
driftWatermark: status.recommendationsCompletedAt ?? status.recommendationsGeneratedAt ?? null,
|
|
99
|
+
};
|
|
100
|
+
const doc = (0, okf_knowledge_1.renderKnowledgeDoc)({
|
|
101
|
+
exploration,
|
|
102
|
+
briefContent: detail.briefContent,
|
|
103
|
+
scopeContract: detail.scopeContract,
|
|
104
|
+
recommendations: detail.recommendations,
|
|
105
|
+
});
|
|
106
|
+
// Belt + suspenders: never write a leaking agnostic file.
|
|
107
|
+
const leak = (0, okf_knowledge_1.findKnowledgeLeak)(doc);
|
|
108
|
+
if (leak) {
|
|
109
|
+
console.error(` ✗ Refusing to write a leaking knowledge doc for ${exploration.name} (found "${leak}"). Skipped.`);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const fileName = (0, okf_knowledge_1.knowledgeFileName)(exploration);
|
|
113
|
+
const relFile = node_path_1.default.join('knowledge', fileName);
|
|
114
|
+
const destPath = node_path_1.default.join(knowledgeDir, fileName);
|
|
115
|
+
const action = classifyWrite(destPath, doc, priorByExpId.get(status.id), opts.force);
|
|
116
|
+
writes.push({ file: relFile, content: doc, action });
|
|
117
|
+
entries.push((0, okf_knowledge_1.buildResolverEntry)({ exploration, recommendations: detail.recommendations }, relFile, doc));
|
|
118
|
+
}
|
|
119
|
+
// 5. Dry-run: report and stop.
|
|
120
|
+
if (opts.dryRun) {
|
|
121
|
+
printPlan(writes, knowledgeDir);
|
|
122
|
+
console.log(` ${(0, colors_1.dim)('(--dry-run — nothing written)')}`);
|
|
123
|
+
console.log('');
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// 6. Write knowledge docs (honoring conflict policy).
|
|
127
|
+
node_fs_1.default.mkdirSync(knowledgeDir, { recursive: true });
|
|
128
|
+
for (const w of writes) {
|
|
129
|
+
const full = node_path_1.default.join(base, w.file);
|
|
130
|
+
if (w.action === 'unchanged')
|
|
131
|
+
continue;
|
|
132
|
+
if (w.action === 'conflict') {
|
|
133
|
+
// User-edited since last materialize and no --force → don't clobber.
|
|
134
|
+
node_fs_1.default.writeFileSync(`${full}.new`, w.content);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
node_fs_1.default.writeFileSync(full, w.content);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// 7. Prune: knowledge files we generated previously but no longer produce.
|
|
141
|
+
const pruned = [];
|
|
142
|
+
if (opts.prune && !opts.snapshot) {
|
|
143
|
+
const liveFiles = new Set(writes.map((w) => node_path_1.default.basename(w.file)));
|
|
144
|
+
for (const en of prior.entries) {
|
|
145
|
+
const baseName = node_path_1.default.basename(en.file);
|
|
146
|
+
if (!liveFiles.has(baseName)) {
|
|
147
|
+
const full = node_path_1.default.join(base, en.file);
|
|
148
|
+
if (node_fs_1.default.existsSync(full)) {
|
|
149
|
+
node_fs_1.default.rmSync(full);
|
|
150
|
+
pruned.push(en.file);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// 8. Write the local resolver (always gitignored).
|
|
156
|
+
const resolver = { version: 1, generatedAt: new Date().toISOString(), entries };
|
|
157
|
+
node_fs_1.default.mkdirSync(ritualDir, { recursive: true });
|
|
158
|
+
node_fs_1.default.writeFileSync(resolverPath, JSON.stringify(resolver, null, 2) + '\n');
|
|
159
|
+
node_fs_1.default.writeFileSync(node_path_1.default.join(ritualDir, 'index.md'), (0, okf_knowledge_1.renderResolverIndex)(resolver) + '\n');
|
|
160
|
+
// 9. Persist the share opt-in (local), and ensure gitignore.
|
|
161
|
+
const statePath = node_path_1.default.join(ritualDir, MATERIALIZE_STATE);
|
|
162
|
+
const state = readState(statePath);
|
|
163
|
+
if (opts.share)
|
|
164
|
+
state.shareKnowledge = true;
|
|
165
|
+
node_fs_1.default.writeFileSync(statePath, JSON.stringify(state, null, 2) + '\n');
|
|
166
|
+
(0, gitignore_update_1.ensureMaterializeGitignore)(base);
|
|
167
|
+
// 10. Stage (force-add past the ignore rule) on --stage. Never commits.
|
|
168
|
+
let staged = false;
|
|
169
|
+
if (opts.stage) {
|
|
170
|
+
staged = tryStage(base);
|
|
171
|
+
}
|
|
172
|
+
printResult(writes, pruned, resolver.entries.length, knowledgeDir, {
|
|
173
|
+
share: state.shareKnowledge === true,
|
|
174
|
+
staged,
|
|
175
|
+
wantedStage: opts.stage === true,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async function fetchDetail(api, id) {
|
|
179
|
+
const enc = encodeURIComponent(id);
|
|
180
|
+
const [full, brief, recs] = await Promise.all([
|
|
181
|
+
api
|
|
182
|
+
.get(`/explorations/${enc}`)
|
|
183
|
+
.catch(() => ({})),
|
|
184
|
+
api
|
|
185
|
+
.get(`/explorations/${enc}/build-brief`)
|
|
186
|
+
.catch(() => ({})),
|
|
187
|
+
api.get(`/explorations/${enc}/recommendations`).catch(() => []),
|
|
188
|
+
]);
|
|
189
|
+
return {
|
|
190
|
+
name: full.name,
|
|
191
|
+
problemStatement: full.problemStatement,
|
|
192
|
+
briefContent: brief.content ?? null,
|
|
193
|
+
scopeContract: brief.scopeContractResolved ?? null,
|
|
194
|
+
recommendations: recs ?? [],
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
/** Decide how a knowledge file should be written, honoring the conflict policy. */
|
|
198
|
+
function classifyWrite(destPath, newContent, priorEntry, force) {
|
|
199
|
+
if (!node_fs_1.default.existsSync(destPath))
|
|
200
|
+
return 'create';
|
|
201
|
+
const current = node_fs_1.default.readFileSync(destPath, 'utf8');
|
|
202
|
+
if (current === newContent)
|
|
203
|
+
return 'unchanged';
|
|
204
|
+
if (force)
|
|
205
|
+
return 'update';
|
|
206
|
+
// Edited since last materialize? Compare on-disk hash to the recorded watermark.
|
|
207
|
+
const currentHash = (0, okf_knowledge_1.cyrb53)(current);
|
|
208
|
+
if (priorEntry && currentHash === priorEntry.sourceHash)
|
|
209
|
+
return 'update'; // ours, safe to refresh
|
|
210
|
+
return 'conflict'; // user (or unknown) edits — write .new, don't clobber
|
|
211
|
+
}
|
|
212
|
+
function readResolver(p) {
|
|
213
|
+
try {
|
|
214
|
+
const parsed = JSON.parse(node_fs_1.default.readFileSync(p, 'utf8'));
|
|
215
|
+
if (parsed.version === 1 && Array.isArray(parsed.entries))
|
|
216
|
+
return parsed;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
/* absent or malformed → empty */
|
|
220
|
+
}
|
|
221
|
+
return { version: 1, generatedAt: '', entries: [] };
|
|
222
|
+
}
|
|
223
|
+
function readState(p) {
|
|
224
|
+
try {
|
|
225
|
+
return JSON.parse(node_fs_1.default.readFileSync(p, 'utf8'));
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return {};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function tryStage(base) {
|
|
232
|
+
try {
|
|
233
|
+
// Knowledge must land in its OWN commit → its own PR — never bundled with
|
|
234
|
+
// code a maintainer reviews for correctness (ritual-knowledge-loop: a build
|
|
235
|
+
// PR never includes knowledge; knowledge gets a deliberate reasoning review).
|
|
236
|
+
// So refuse to stage if anything ELSE is already staged.
|
|
237
|
+
const staged = (0, node_child_process_1.execSync)('git diff --cached --name-only', { cwd: base, stdio: 'pipe', encoding: 'utf8' })
|
|
238
|
+
.split('\n')
|
|
239
|
+
.map((s) => s.trim())
|
|
240
|
+
.filter(Boolean);
|
|
241
|
+
const others = staged.filter((f) => !f.startsWith('knowledge/'));
|
|
242
|
+
if (others.length > 0) {
|
|
243
|
+
console.log('');
|
|
244
|
+
console.log(` ${(0, colors_1.dim)(`Not staging — knowledge belongs in its own PR, and you have ${others.length} other staged change(s).`)}`);
|
|
245
|
+
console.log(` ${(0, colors_1.dim)('Commit or stash those first, then run')} ritual materialize --stage ${(0, colors_1.dim)('on a clean index.')}`);
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
(0, node_child_process_1.execSync)('git add -f knowledge', { cwd: base, stdio: 'pipe' });
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
console.log('');
|
|
253
|
+
console.log(` ${(0, colors_1.dim)('Could not stage automatically. Run this when ready:')}`);
|
|
254
|
+
console.log(` git add -f knowledge`);
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function printPlan(writes, knowledgeDir) {
|
|
259
|
+
console.log('');
|
|
260
|
+
console.log(` ${(0, colors_1.dim)('Would materialize')} ${(0, colors_1.boldColor)(colors_1.RITUAL_TEAL, String(writes.length))} ${(0, colors_1.dim)('knowledge doc(s) →')} ${(0, colors_1.dim)(knowledgeDir)}`);
|
|
261
|
+
for (const w of writes) {
|
|
262
|
+
console.log(` ${(0, colors_1.dim)(symbolFor(w.action))} ${w.file}`);
|
|
263
|
+
}
|
|
264
|
+
console.log('');
|
|
265
|
+
}
|
|
266
|
+
function printResult(writes, pruned, count, knowledgeDir, share) {
|
|
267
|
+
console.log('');
|
|
268
|
+
console.log(` ${(0, colors_1.boldColor)(colors_1.RITUAL_TEAL, 'Materialized')} ${count} ${(0, colors_1.dim)('exploration(s) →')} ${(0, colors_1.dim)(knowledgeDir)}`);
|
|
269
|
+
for (const w of writes) {
|
|
270
|
+
if (w.action === 'unchanged')
|
|
271
|
+
continue;
|
|
272
|
+
console.log(` ${(0, colors_1.dim)(symbolFor(w.action))} ${w.file}${w.action === 'conflict' ? (0, colors_1.dim)(' (wrote .new — your edits kept; --force to overwrite)') : ''}`);
|
|
273
|
+
}
|
|
274
|
+
for (const p of pruned)
|
|
275
|
+
console.log(` ${(0, colors_1.dim)('✗')} ${p} ${(0, colors_1.dim)('(pruned)')}`);
|
|
276
|
+
console.log('');
|
|
277
|
+
if (share.share && !share.staged) {
|
|
278
|
+
console.log(` ${(0, colors_1.dim)('Knowledge is shareable but local. Run')} ritual materialize --stage ${(0, colors_1.dim)('to stage for commit.')}`);
|
|
279
|
+
}
|
|
280
|
+
else if (share.staged) {
|
|
281
|
+
console.log(` ${(0, colors_1.dim)('Staged knowledge/ for commit (git add -f). Review and commit when ready.')}`);
|
|
282
|
+
}
|
|
283
|
+
else if (!share.share) {
|
|
284
|
+
console.log(` ${(0, colors_1.dim)('Local only. Run')} ritual materialize --share ${(0, colors_1.dim)('to mark it shareable with your team.')}`);
|
|
285
|
+
}
|
|
286
|
+
console.log('');
|
|
287
|
+
}
|
|
288
|
+
function symbolFor(action) {
|
|
289
|
+
switch (action) {
|
|
290
|
+
case 'create':
|
|
291
|
+
return '+';
|
|
292
|
+
case 'update':
|
|
293
|
+
return '~';
|
|
294
|
+
case 'conflict':
|
|
295
|
+
return '!';
|
|
296
|
+
default:
|
|
297
|
+
return '·';
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialize.js","sourceRoot":"","sources":["../../src/commands/materialize.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ const init_1 = require("./commands/init");
|
|
|
44
44
|
const build_1 = require("./commands/build");
|
|
45
45
|
const lite_1 = require("./commands/lite");
|
|
46
46
|
const project_1 = require("./commands/project");
|
|
47
|
+
const materialize_1 = require("./commands/materialize");
|
|
47
48
|
const doctor_1 = require("./commands/doctor");
|
|
48
49
|
const uninstall_1 = require("./commands/uninstall");
|
|
49
50
|
// 2026-05-15 (PR D) — `ritual status [--watch]` instant snapshot of
|
|
@@ -135,17 +136,14 @@ const initCmd = program
|
|
|
135
136
|
.option('--list', 'List known agents and exit')
|
|
136
137
|
.option('--issuer <url>', 'OIDC issuer for the lazy-auth flow (defaults to prod or RITUAL_KEYCLOAK_URL env)')
|
|
137
138
|
.option('--client-id <id>', 'OIDC client id (defaults to "ritual-cli")')
|
|
138
|
-
.option('--no-
|
|
139
|
-
.option('--no-memory-rule', 'Skip writing the coding-discovery routing rule into each agent\'s instructions file (CLAUDE.md, GEMINI.md, AGENTS.md, .cursor/rules, .kiro/steering, .windsurf/rules, .github/copilot-instructions.md).')
|
|
140
|
-
.option('--global-memory-rule', 'Also write the coding-discovery rule to each agent\'s USER-GLOBAL instructions file (~/.claude/CLAUDE.md, ~/.gemini/GEMINI.md, ~/.codex/AGENTS.md) so it applies in every repo, not just this one.')
|
|
139
|
+
.option('--no-memory-rule', "Don't write the Ritual coding-discovery routing rule. By default it's written only to your PERSONAL agent config — this repo's gitignored CLAUDE.local.md and your global ~/.claude/CLAUDE.md — never to the committed, team-shared CLAUDE.md. Pass this to skip it entirely.")
|
|
141
140
|
.option('--switch-account', 'Force a fresh sign-in even if you already have valid local credentials. Uses OIDC prompt=login so Keycloak ignores its SSO cookie. Atomic — your previous session is restored if anything fails.')
|
|
142
141
|
.option('--yes', 'Skip interactive confirmation prompts (required for --switch-account in non-TTY mode).')
|
|
143
142
|
.option('--skills-only', 'Refresh ONLY the bundled skill files in this project; skip auth, PAT minting, workspace binding, and MCP registration. Use after `npm i -g @ritualai/cli@latest` to pull the newest SKILL bundle into an already-initialized repo.')
|
|
144
|
-
.option('--persona <slug>', 'Persona for /ritual build defaults (e.g. backend-services, frontend-web). Skips the interactive picker in the onboarding flow.')
|
|
145
143
|
.option('-v, --verbose', 'Verbose post-setup output: PAT details, per-agent status table, skill install paths, and the detailed verify-then-restart next-steps block. Default is a compact "Ready to ship" CTA box.');
|
|
146
144
|
// Maintainer-only — registered only when RITUAL_INTERNAL=1.
|
|
147
145
|
internalOption(initCmd, '--dev', 'Shortcut for --issuer https://auth.dev.ritualapp.cloud/realms/ritual (maintainer testing against the Ritual dev environment).');
|
|
148
|
-
internalOption(initCmd, '--re-onboard', 'Re-run the FTUE onboarding screens (
|
|
146
|
+
internalOption(initCmd, '--re-onboard', 'Re-run the FTUE onboarding screens (workspace + build-flow explainer) even if they\'ve been shown on this machine. Used by maintainers iterating on screen designs.');
|
|
149
147
|
initCmd.action(init_1.initCommand);
|
|
150
148
|
// `ritual build "<ask>"` — the terminal entry into the build flow.
|
|
151
149
|
// The flow runs inside the user's coding agent; this command launches
|
|
@@ -178,6 +176,21 @@ program
|
|
|
178
176
|
.description('Project an exploration’s reasoning into a local .ritual/ tree (build brief, scope contract, recommendations)')
|
|
179
177
|
.option('--out <dir>', 'Output directory (default: <repo>/.ritual)')
|
|
180
178
|
.action(project_1.projectCommand);
|
|
179
|
+
// `ritual materialize` — workspace-wide, idempotent sync of deliverable-bearing
|
|
180
|
+
// knowledge to durable local OKF files (agnostic `knowledge/`) + a local
|
|
181
|
+
// resolver index (`.ritual/`). LOCAL by default; --share marks it shareable and
|
|
182
|
+
// --stage force-adds it for commit (never edits .gitignore, never `git commit`).
|
|
183
|
+
program
|
|
184
|
+
.command('materialize')
|
|
185
|
+
.description('Write the workspace’s explored knowledge to local OKF files (knowledge/ + a local index)')
|
|
186
|
+
.option('--share', 'Mark the agnostic knowledge/ docs as shareable with your team (persists locally; does not stage)')
|
|
187
|
+
.option('--stage', 'git add -f knowledge/ so it’s staged for commit (never edits .gitignore, never commits)')
|
|
188
|
+
.option('--snapshot', 'Write a timestamped point-in-time copy instead of syncing in place')
|
|
189
|
+
.option('--prune', 'Remove previously-materialized knowledge files that are no longer produced')
|
|
190
|
+
.option('--dry-run', 'Show what would change without writing anything')
|
|
191
|
+
.option('--force', 'Overwrite locally-edited knowledge files instead of writing a .new sibling')
|
|
192
|
+
.option('--out <dir>', 'Output base directory (default: repo root)')
|
|
193
|
+
.action((opts) => (0, materialize_1.materializeCommand)(opts));
|
|
181
194
|
const loginCmd = program
|
|
182
195
|
.command('login')
|
|
183
196
|
.description('Authenticate with Ritual via your browser')
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,10 +47,13 @@ exports.PROVIDERS = [
|
|
|
47
47
|
// closes the scope-mismatch FTUE bug where MCP was registered
|
|
48
48
|
// user-global but the skill only loaded from the project dir.
|
|
49
49
|
userSkillDir: (0, node_path_1.join)((0, node_os_1.homedir)(), '.claude', 'skills'),
|
|
50
|
-
// Claude Code loads
|
|
51
|
-
//
|
|
52
|
-
//
|
|
50
|
+
// Claude Code loads, at the start of every session: `CLAUDE.md` (committed,
|
|
51
|
+
// team-shared — opt-in only now), `CLAUDE.local.md` (repo-local, gitignored
|
|
52
|
+
// — the personal default), and `~/.claude/CLAUDE.md` (global — also a
|
|
53
|
+
// personal default). The default `ritual init` writes the two personal
|
|
54
|
+
// surfaces; the committed one is the future share-with-team opt-in.
|
|
53
55
|
projectMemoryRule: { path: 'CLAUDE.md', mode: 'append' },
|
|
56
|
+
localMemoryRule: { path: 'CLAUDE.local.md', mode: 'append' },
|
|
54
57
|
userMemoryRule: { path: (0, node_path_1.join)('.claude', 'CLAUDE.md'), mode: 'append' },
|
|
55
58
|
// `claude mcp add-json` writes to ~/.claude.json itself; we
|
|
56
59
|
// shell out so we don't fight its config-file format.
|
|
@@ -71,9 +74,10 @@ exports.PROVIDERS = [
|
|
|
71
74
|
packageSkillDir: 'skills/cursor',
|
|
72
75
|
// Cursor reads project rules from `.cursor/rules/*.mdc` with YAML
|
|
73
76
|
// frontmatter; `alwaysApply: true` loads the rule every request.
|
|
74
|
-
// Dedicated file (we own it)
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
+
// Dedicated file (we own it), written repo-local + gitignored by default
|
|
78
|
+
// — Cursor has no user-global rule FILE (User Rules live in the settings
|
|
79
|
+
// DB), so this personal repo-local file is the only surface a CLI writes.
|
|
80
|
+
localMemoryRule: {
|
|
77
81
|
path: (0, node_path_1.join)('.cursor', 'rules', 'ritual-discovery.mdc'),
|
|
78
82
|
mode: 'dedicated',
|
|
79
83
|
frontmatter: '---\ndescription: Choose the right discovery tier before planning a coding task\nglobs:\nalwaysApply: true\n---',
|
|
@@ -105,7 +109,9 @@ exports.PROVIDERS = [
|
|
|
105
109
|
// `.windsurf/rules/*.md` takes single rule files with a `trigger`
|
|
106
110
|
// frontmatter — `always_on` loads it every Cascade conversation. So
|
|
107
111
|
// the routing rule ships even though the multi-file SKILL bundle can't.
|
|
108
|
-
|
|
112
|
+
// Written repo-local + gitignored by default (Windsurf global is a
|
|
113
|
+
// single settings file we don't manage).
|
|
114
|
+
localMemoryRule: {
|
|
109
115
|
path: (0, node_path_1.join)('.windsurf', 'rules', 'ritual-discovery.md'),
|
|
110
116
|
mode: 'dedicated',
|
|
111
117
|
frontmatter: '---\ntrigger: always_on\ndescription: Choose the right discovery tier before planning a coding task\n---',
|
|
@@ -123,7 +129,8 @@ exports.PROVIDERS = [
|
|
|
123
129
|
// Kiro steering: `.kiro/steering/*.md` with `inclusion: always`
|
|
124
130
|
// frontmatter loads the file into context for every prompt. The
|
|
125
131
|
// frontmatter MUST be the first bytes (no leading blank line).
|
|
126
|
-
|
|
132
|
+
// Written repo-local + gitignored by default.
|
|
133
|
+
localMemoryRule: {
|
|
127
134
|
path: (0, node_path_1.join)('.kiro', 'steering', 'ritual-discovery.md'),
|
|
128
135
|
mode: 'dedicated',
|
|
129
136
|
frontmatter: '---\ninclusion: always\n---',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/lib/agents/providers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/lib/agents/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateProjectGitignore = updateProjectGitignore;
|
|
4
|
+
exports.ensureMaterializeGitignore = ensureMaterializeGitignore;
|
|
4
5
|
const node_fs_1 = require("node:fs");
|
|
5
6
|
const node_path_1 = require("node:path");
|
|
6
7
|
/**
|
|
@@ -58,16 +59,8 @@ function entryForProvider(provider) {
|
|
|
58
59
|
* `.gitignore`. The block always sorts entries the same way for
|
|
59
60
|
* idempotent diffs across re-runs.
|
|
60
61
|
*/
|
|
61
|
-
function buildBlock(
|
|
62
|
-
|
|
63
|
-
.map(entryForProvider)
|
|
64
|
-
.filter((e) => e !== null)
|
|
65
|
-
// Sort so the block's contents are deterministic regardless of
|
|
66
|
-
// detect()-order changes between releases. Makes diffs in
|
|
67
|
-
// people's `.gitignore` files signal-not-noise.
|
|
68
|
-
.sort()
|
|
69
|
-
.join('\n');
|
|
70
|
-
return `${BEGIN_MARKER}\n${entries}\n${END_MARKER}`;
|
|
62
|
+
function buildBlock(entries) {
|
|
63
|
+
return `${BEGIN_MARKER}\n${entries.join('\n')}\n${END_MARKER}`;
|
|
71
64
|
}
|
|
72
65
|
/**
|
|
73
66
|
* Replace the marker-bracketed block in `body` with `newBlock`. If
|
|
@@ -98,27 +91,31 @@ function replaceOrAppendBlock(body, newBlock) {
|
|
|
98
91
|
}
|
|
99
92
|
/**
|
|
100
93
|
* Ensure the project `.gitignore` ignores the scaffolded skill dirs
|
|
101
|
-
* for the agents that just got written
|
|
102
|
-
*
|
|
94
|
+
* for the agents that just got written, plus any `extraEntries` —
|
|
95
|
+
* since 2026-06-21 the repo-local routing-rule files (`CLAUDE.local.md`,
|
|
96
|
+
* `.cursor/rules/ritual-discovery.mdc`, etc.) that a default `ritual init`
|
|
97
|
+
* now writes as the developer's PERSONAL (non-committed) surface. Creates
|
|
98
|
+
* the file if it doesn't exist.
|
|
103
99
|
*
|
|
104
|
-
* Skipped silently when
|
|
105
|
-
*
|
|
100
|
+
* Skipped silently when there's nothing to ignore (no scaffolded skill
|
|
101
|
+
* dirs AND no extra entries).
|
|
106
102
|
*/
|
|
107
|
-
function updateProjectGitignore(projectRoot, scaffoldedProviders) {
|
|
103
|
+
function updateProjectGitignore(projectRoot, scaffoldedProviders, extraEntries = []) {
|
|
108
104
|
const gitignorePath = (0, node_path_1.join)(projectRoot, '.gitignore');
|
|
109
105
|
const preExisting = (0, node_fs_1.existsSync)(gitignorePath);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
106
|
+
// Merge skill-dir entries + extra (memory-rule local files), de-dupe,
|
|
107
|
+
// and sort so the block is deterministic across re-runs regardless of
|
|
108
|
+
// detect()-order — diffs stay signal-not-noise.
|
|
109
|
+
const entries = Array.from(new Set([
|
|
110
|
+
...scaffoldedProviders.map(entryForProvider).filter((e) => e !== null),
|
|
111
|
+
...extraEntries,
|
|
112
|
+
])).sort();
|
|
113
|
+
// No-op fast path: nothing to ignore.
|
|
117
114
|
if (entries.length === 0) {
|
|
118
115
|
return { gitignorePath, preExisting, entries, changed: false };
|
|
119
116
|
}
|
|
120
117
|
const currentBody = preExisting ? (0, node_fs_1.readFileSync)(gitignorePath, 'utf8') : '';
|
|
121
|
-
const newBlock = buildBlock(
|
|
118
|
+
const newBlock = buildBlock(entries);
|
|
122
119
|
const nextBody = replaceOrAppendBlock(currentBody, newBlock);
|
|
123
120
|
if (nextBody === currentBody) {
|
|
124
121
|
// Block already up to date — no write, no log noise.
|
|
@@ -127,4 +124,52 @@ function updateProjectGitignore(projectRoot, scaffoldedProviders) {
|
|
|
127
124
|
(0, node_fs_1.writeFileSync)(gitignorePath, nextBody, 'utf8');
|
|
128
125
|
return { gitignorePath, preExisting, entries, changed: true };
|
|
129
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Marker block for `ritual materialize` (ritual-knowledge-loop, 2026-06-21).
|
|
129
|
+
*
|
|
130
|
+
* The materialized OKF output is LOCAL by default — only the explicit
|
|
131
|
+
* `--share` + `--stage` flow commits the agnostic `knowledge/` docs (via
|
|
132
|
+
* `git add -f`, which force-adds past this ignore rule WITHOUT rewriting it).
|
|
133
|
+
*
|
|
134
|
+
* What's ignored:
|
|
135
|
+
* - `.ritual/*` — the local resolver (resolver.json, index.md,
|
|
136
|
+
* materialize.json). NAMES Ritual (ids, mcp links),
|
|
137
|
+
* so it never belongs in the committed repo.
|
|
138
|
+
* - `!.ritual/config.json` — the ONE sanctioned committed Ritual reference
|
|
139
|
+
* (the repo→workspace binding, #868). Re-include it.
|
|
140
|
+
* - `knowledge/` — agnostic docs; committed only via `git add -f`.
|
|
141
|
+
*/
|
|
142
|
+
const MATERIALIZE_BEGIN = '# Begin: ritual materialize — local OKF knowledge + resolver (not committed by default)';
|
|
143
|
+
const MATERIALIZE_END = '# End: ritual materialize';
|
|
144
|
+
const MATERIALIZE_ENTRIES = ['.ritual/*', '!.ritual/config.json', 'knowledge/'];
|
|
145
|
+
/**
|
|
146
|
+
* Ensure the project `.gitignore` keeps `ritual materialize` output out of git
|
|
147
|
+
* by default. Idempotent (marker-bracketed block, like the init block). Creates
|
|
148
|
+
* the file if absent. Returns the result for the caller to log.
|
|
149
|
+
*/
|
|
150
|
+
function ensureMaterializeGitignore(projectRoot) {
|
|
151
|
+
const gitignorePath = (0, node_path_1.join)(projectRoot, '.gitignore');
|
|
152
|
+
const preExisting = (0, node_fs_1.existsSync)(gitignorePath);
|
|
153
|
+
const currentBody = preExisting ? (0, node_fs_1.readFileSync)(gitignorePath, 'utf8') : '';
|
|
154
|
+
const block = `${MATERIALIZE_BEGIN}\n${MATERIALIZE_ENTRIES.join('\n')}\n${MATERIALIZE_END}`;
|
|
155
|
+
const nextBody = replaceOrAppendNamedBlock(currentBody, MATERIALIZE_BEGIN, MATERIALIZE_END, block);
|
|
156
|
+
if (nextBody === currentBody) {
|
|
157
|
+
return { gitignorePath, preExisting, entries: MATERIALIZE_ENTRIES, changed: false };
|
|
158
|
+
}
|
|
159
|
+
(0, node_fs_1.writeFileSync)(gitignorePath, nextBody, 'utf8');
|
|
160
|
+
return { gitignorePath, preExisting, entries: MATERIALIZE_ENTRIES, changed: true };
|
|
161
|
+
}
|
|
162
|
+
/** Generalized marker-block replace/append (parameterized markers). */
|
|
163
|
+
function replaceOrAppendNamedBlock(body, beginMarker, endMarker, newBlock) {
|
|
164
|
+
const beginIdx = body.indexOf(beginMarker);
|
|
165
|
+
const endIdx = body.indexOf(endMarker);
|
|
166
|
+
if (beginIdx >= 0 && endIdx > beginIdx) {
|
|
167
|
+
const endLineEnd = endIdx + endMarker.length;
|
|
168
|
+
return body.slice(0, beginIdx) + newBlock + body.slice(endLineEnd);
|
|
169
|
+
}
|
|
170
|
+
const trimmed = body.replace(/\s+$/, '');
|
|
171
|
+
if (trimmed.length === 0)
|
|
172
|
+
return `${newBlock}\n`;
|
|
173
|
+
return `${trimmed}\n\n${newBlock}\n`;
|
|
174
|
+
}
|
|
130
175
|
//# sourceMappingURL=gitignore-update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitignore-update.js","sourceRoot":"","sources":["../../src/lib/gitignore-update.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"gitignore-update.js","sourceRoot":"","sources":["../../src/lib/gitignore-update.ts"],"names":[],"mappings":"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"}
|