@ritualai/cli 0.4.0 → 0.6.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.
@@ -6,6 +6,7 @@ const node_os_1 = require("node:os");
6
6
  const config_1 = require("../lib/config");
7
7
  const detector_1 = require("../lib/agents/detector");
8
8
  const api_client_1 = require("../lib/api-client");
9
+ const project_config_1 = require("../lib/project-config");
9
10
  /**
10
11
  * `ritual doctor` — sanity check the CLI's environment.
11
12
  *
@@ -80,6 +81,38 @@ async function doctorCommand() {
80
81
  }
81
82
  console.log('');
82
83
  }
84
+ // --- Knowledge-graph reachability (PR 107c) ------------------
85
+ // Lightweight verify: if a workspace is bound to this project,
86
+ // fetch its KG summary. Proves auth → API → DB round-trip works
87
+ // AND shows the user where the workspace's KG currently stands.
88
+ // Skip silently when not signed in (covered above) or when no
89
+ // project workspace is bound (not a misconfiguration; the user
90
+ // just hasn't run `ritual init` in this repo yet).
91
+ if (tokenStatus.kind === 'signed-in') {
92
+ const project = (0, project_config_1.loadProjectConfig)(process.cwd());
93
+ if (project) {
94
+ console.log(' Knowledge graph (this project\'s workspace):');
95
+ console.log(` workspace ${project.workspaceName} (${project.workspaceId})`);
96
+ try {
97
+ const api = new api_client_1.ApiClient({
98
+ issuer: tokenStatus.creds.issuer,
99
+ accessToken: tokenStatus.accessToken,
100
+ });
101
+ const summary = await api.get(`/workspaces/${encodeURIComponent(project.workspaceId)}/knowledge-graph/summary`);
102
+ console.log(` counts ${summary.counts.implementations} implementation(s), ${summary.counts.decisions} decision(s), ${summary.counts.deferrals} deferral(s)`);
103
+ if (summary.counts.implementations === 0) {
104
+ console.log(' note cold-start KG — fills as agents call `mcp__ritual__sync_implementation`');
105
+ }
106
+ console.log('');
107
+ }
108
+ catch (err) {
109
+ console.log(` reachable ✗ (${err.message})`);
110
+ console.log(' note cluster/API reachability issue — `ritual graph status` will fail too');
111
+ problems++;
112
+ console.log('');
113
+ }
114
+ }
115
+ }
83
116
  if (problems > 0) {
84
117
  process.exitCode = 1;
85
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.graphStatusCommand = graphStatusCommand;
4
+ const config_1 = require("../lib/config");
5
+ const api_client_1 = require("../lib/api-client");
6
+ const project_config_1 = require("../lib/project-config");
7
+ async function graphStatusCommand(opts = {}) {
8
+ console.log('');
9
+ console.log(' Ritual — knowledge-graph status');
10
+ console.log('');
11
+ // 1. Auth check (uses the same lazy-OAuth flow as the rest of the CLI).
12
+ const tokenStatus = await (0, config_1.getValidAccessToken)();
13
+ if (tokenStatus.kind !== 'signed-in') {
14
+ console.error(' ✗ Not signed in. Run `ritual login` first, then `ritual graph status`.');
15
+ console.error('');
16
+ process.exitCode = 1;
17
+ return;
18
+ }
19
+ // 2. Resolve workspace id.
20
+ let workspaceId = opts.workspace;
21
+ let workspaceSource = '--workspace flag';
22
+ if (!workspaceId) {
23
+ const project = (0, project_config_1.loadProjectConfig)(opts.cwd ?? process.cwd());
24
+ if (project) {
25
+ workspaceId = project.workspaceId;
26
+ workspaceSource = `.ritual/config.json (${project.workspaceName})`;
27
+ }
28
+ }
29
+ if (!workspaceId) {
30
+ console.error(' ✗ No workspace specified.');
31
+ console.error(' Run `ritual init` in your repo to bind one, OR pass `--workspace <id>` explicitly.');
32
+ console.error('');
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ console.log(` Workspace: ${workspaceId} (from ${workspaceSource})`);
37
+ console.log('');
38
+ // 3. Hit the API.
39
+ const issuer = tokenStatus.creds.issuer;
40
+ const api = new api_client_1.ApiClient({
41
+ issuer,
42
+ accessToken: tokenStatus.accessToken,
43
+ });
44
+ const limit = opts.limit ? parseInt(opts.limit, 10) : undefined;
45
+ const queryString = limit ? `?recentLimit=${limit}` : '';
46
+ let summary;
47
+ try {
48
+ summary = await api.get(`/workspaces/${encodeURIComponent(workspaceId)}/knowledge-graph/summary${queryString}`);
49
+ }
50
+ catch (err) {
51
+ console.error(` ✗ Could not fetch graph summary: ${err.message}`);
52
+ console.error('');
53
+ process.exitCode = 1;
54
+ return;
55
+ }
56
+ // 4. Render.
57
+ console.log(` Workspace name: ${summary.workspaceName}`);
58
+ console.log('');
59
+ console.log(' Counts:');
60
+ console.log(` Implementations: ${pad(summary.counts.implementations)}`);
61
+ console.log(` Decisions: ${pad(summary.counts.decisions)}`);
62
+ console.log(` Deferrals: ${pad(summary.counts.deferrals)}`);
63
+ console.log('');
64
+ if (summary.recent.length === 0) {
65
+ // Cold-start KG — no implementations synced yet. Tell the user
66
+ // what to do about it, not just "0 records found."
67
+ console.log(' No implementations have been synced for this workspace yet.');
68
+ console.log('');
69
+ console.log(' The KG fills in when you complete an exploration and your');
70
+ console.log(' AI coding agent calls `mcp__ritual__sync_implementation`');
71
+ console.log(' after landing the work. Until then, /ritual build calls won\'t');
72
+ console.log(' have any prior-implementation context to draw from.');
73
+ console.log('');
74
+ return;
75
+ }
76
+ console.log(` Recent implementations (${summary.recent.length} shown):`);
77
+ console.log('');
78
+ for (const r of summary.recent) {
79
+ const name = r.explorationName ?? '(unnamed)';
80
+ const subtitle = `${r.repo}@${r.branch} · ${r.commitsCount} commit${r.commitsCount === 1 ? '' : 's'} · ${r.decisions} decision${r.decisions === 1 ? '' : 's'} · ${r.deferrals} deferral${r.deferrals === 1 ? '' : 's'}`;
81
+ console.log(` ${shortDate(r.implementedAt)} ${name}`);
82
+ console.log(` ${subtitle}`);
83
+ if (r.prUrl) {
84
+ console.log(` ${r.prUrl}`);
85
+ }
86
+ }
87
+ console.log('');
88
+ }
89
+ /** Right-pad a count for visual alignment in the summary block. */
90
+ function pad(n) {
91
+ return String(n).padStart(3, ' ');
92
+ }
93
+ /** Render an ISO timestamp as YYYY-MM-DD for the recent-list. */
94
+ function shortDate(iso) {
95
+ try {
96
+ return iso.slice(0, 10);
97
+ }
98
+ catch {
99
+ return iso;
100
+ }
101
+ }
102
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/commands/graph.ts"],"names":[],"mappings":"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"}
@@ -172,8 +172,7 @@ async function initCommand(opts = {}) {
172
172
  process.exitCode = 1;
173
173
  return;
174
174
  }
175
- console.log(` ✓ Minted ${pat.name}`);
176
- console.log(` Manage tokens at: ${webAppUrlFromIssuer(issuer)}/settings/tokens`);
175
+ printKeyCreatedBlock(pat, webAppUrlFromIssuer(issuer));
177
176
  console.log('');
178
177
  // --- 3.5 Bind a project workspace --------------------------------
179
178
  // Project-scoped state — see ./../lib/workspace-flow.ts for the
@@ -201,24 +200,26 @@ async function initCommand(opts = {}) {
201
200
  registrationResults.push((0, configure_mcp_1.configureMcpForAgent)(t.provider, { url: mcpUrl, token: pat.plaintextToken }));
202
201
  }
203
202
  // --- 5. Summary --------------------------------------------------
204
- console.log(' Per-agent results:');
205
- for (const t of targets) {
206
- const copy = copyResults.find((r) => r.provider.id === t.provider.id);
207
- const reg = registrationResults.find((r) => r.provider.id === t.provider.id);
208
- const skillSummary = copy.copied > 0
209
- ? `${copy.copied} skill(s) ${t.provider.projectSkillDir}/`
210
- : `skills skipped (${copy.reason ?? 'unknown'})`;
211
- const mcpSummary = reg.success
212
- ? `MCP server registered`
213
- : `MCP register failed: ${reg.reason ?? 'unknown'}`;
214
- console.log(` ${t.provider.name}`);
215
- console.log(` ${skillSummary}`);
216
- console.log(` ${mcpSummary}`);
217
- }
218
- console.log('');
219
- console.log(' Next: restart your AI coding agent so it picks up the new MCP server.');
220
- console.log(' In your agent, try: /ritual build <feature>');
221
- console.log('');
203
+ //
204
+ // Two pieces of feedback the user gets here:
205
+ //
206
+ // (a) `Detected coding agents:` dotted-aligned table of all
207
+ // known agents with `configured` / `not detected` / `failed`
208
+ // status. Mirrors the legacy CLI's `printSummary` output so
209
+ // any user who used the legacy CLI sees a familiar shape.
210
+ //
211
+ // (b) `Next steps:` — verify-then-restart pattern. Crucially,
212
+ // if the user ran `ritual init` from inside a Claude Code
213
+ // session (detected via env vars), we surface a prominent
214
+ // yellow warning that the CURRENT session won't see the
215
+ // new MCP server until restart. This was the single biggest
216
+ // footgun the legacy CLI surfaced and we want feature parity.
217
+ printDetectedAgentsBlock(targets, copyResults, registrationResults);
218
+ printNextStepsBlock({
219
+ targets,
220
+ registrationResults,
221
+ mcpUrl,
222
+ });
222
223
  }
223
224
  /** Tiny helper for the lazy-auth message ("you are not signed in" → "You are..."). */
224
225
  function capitalize(s) {
@@ -246,4 +247,171 @@ function webAppUrlFromIssuer(issuer) {
246
247
  return 'https://app.ritualapp.cloud';
247
248
  }
248
249
  }
250
+ // =============================================================================
251
+ // Output helpers — feature-parity with legacy CLI's polished init summary.
252
+ // =============================================================================
253
+ //
254
+ // Ported 2026-05-11. Legacy lives at
255
+ // ~/Development/ritual-mcp-server/src/cli/commands/login.ts but its
256
+ // URLs / config locations are legacy-specific; the vNext versions
257
+ // below adapt to vNext's pattern (PAT stored in agent MCP config, not
258
+ // in a home-global file).
259
+ /**
260
+ * Concise summary of what `mintAgentPat` just created. Surfaces enough
261
+ * for the user to find + revoke the token later, without echoing the
262
+ * plaintext to stdout (which would leak via screenshots / clipboard /
263
+ * terminal history).
264
+ */
265
+ function printKeyCreatedBlock(pat, webAppUrl) {
266
+ const expiry = pat.expiresAt
267
+ ? new Date(pat.expiresAt).toISOString().slice(0, 10) // YYYY-MM-DD
268
+ : 'never';
269
+ console.log(` ✓ Created MCP key`);
270
+ console.log(` Name: ${pat.name}`);
271
+ console.log(` Scope: admin`);
272
+ console.log(` Expires: ${expiry}`);
273
+ console.log(` Stored: in your agent's MCP config (e.g. ~/.claude.json)`);
274
+ console.log(` Manage: ${webAppUrl}/settings/tokens`);
275
+ console.log(` (Token not displayed for security. Use the manage URL to copy or revoke.)`);
276
+ }
277
+ /**
278
+ * Dotted-aligned table of every known agent with its status.
279
+ * Mirrors the legacy CLI's output so users who have used the
280
+ * legacy CLI find a familiar shape.
281
+ *
282
+ * Claude Code ........... configured
283
+ * Cursor ................ not detected
284
+ * Windsurf .............. not detected
285
+ * VS Code (Copilot) ..... configured
286
+ * ...
287
+ *
288
+ * Lists detected-and-configured FIRST, then detected-but-failed,
289
+ * then not-detected (dimmed). Failed entries get a manual-fix hint.
290
+ */
291
+ function printDetectedAgentsBlock(targets, copyResults, registrationResults) {
292
+ console.log(' Detected coding agents:');
293
+ // Build a status string per known agent.
294
+ const targetIds = new Set(targets.map((t) => t.provider.id));
295
+ const detections = (0, detector_1.detectAgents)();
296
+ const longestName = Math.max(...providers_1.PROVIDERS.map((p) => p.name.length), 18);
297
+ for (const d of detections) {
298
+ const dots = '.'.repeat(Math.max(1, longestName - d.name.length + 4));
299
+ if (!d.detected) {
300
+ console.log(` ${d.name} ${dots} not detected`);
301
+ continue;
302
+ }
303
+ // Detected, but did we target this agent in this run?
304
+ // (User can scope via --agent <id>.)
305
+ if (!targetIds.has(d.id)) {
306
+ console.log(` ${d.name} ${dots} detected (skipped — not selected)`);
307
+ continue;
308
+ }
309
+ const reg = registrationResults.find((r) => r.provider.id === d.id);
310
+ if (reg?.success) {
311
+ console.log(` ${d.name} ${dots} configured`);
312
+ }
313
+ else {
314
+ console.log(` ${d.name} ${dots} failed: ${reg?.reason ?? 'unknown'}`);
315
+ }
316
+ }
317
+ // Per-agent skill copy summary — kept here because users sometimes
318
+ // scan the dotted table and miss the more detailed counts.
319
+ console.log('');
320
+ console.log(' Skills copied:');
321
+ for (const t of targets) {
322
+ const copy = copyResults.find((r) => r.provider.id === t.provider.id);
323
+ const status = copy.copied > 0
324
+ ? `${copy.copied} → ${t.provider.projectSkillDir}/`
325
+ : `skipped (${copy.reason ?? 'unknown'})`;
326
+ console.log(` ${t.provider.name}: ${status}`);
327
+ }
328
+ }
329
+ /**
330
+ * Verify-then-restart Next-steps block. Replaces the previous 2-line
331
+ * "Next: restart your AI coding agent" with the structured pattern
332
+ * the legacy CLI shipped, tuned for vNext:
333
+ *
334
+ * ⚠ Warning if running INSIDE Claude Code (current session won't
335
+ * see the new MCP server until you restart it).
336
+ * 1. Verify connection — `claude mcp list` + expected output.
337
+ * Diagnostic fallback: `ritual doctor`.
338
+ * 2. Restart Claude Code (3 bullet sub-steps).
339
+ * Per-agent restart hints (Cursor / Windsurf / VS Code).
340
+ * "Once connected, you can use:" — quick-reference of the main
341
+ * ritual commands.
342
+ */
343
+ function printNextStepsBlock(args) {
344
+ const { targets, registrationResults, mcpUrl } = args;
345
+ const configuredIds = new Set(registrationResults
346
+ .filter((r) => r.success)
347
+ .map((r) => r.provider.id));
348
+ const hasClaudeCode = configuredIds.has('claude-code') &&
349
+ targets.some((t) => t.provider.id === 'claude-code');
350
+ const hasCursor = configuredIds.has('cursor');
351
+ const hasWindsurf = configuredIds.has('windsurf');
352
+ const hasVsCode = configuredIds.has('vscode') || configuredIds.has('vs-code');
353
+ console.log('');
354
+ console.log(' Next steps:');
355
+ // ⚠ Inside-Claude warning — important enough to lead with.
356
+ if (hasClaudeCode && isInsideClaudeCode()) {
357
+ console.log('');
358
+ console.log(' ⚠ You\'re running this from inside a Claude Code session.');
359
+ console.log(' The CURRENT session will NOT see ritual tools until you restart it.');
360
+ }
361
+ if (hasClaudeCode) {
362
+ console.log('');
363
+ console.log(' 1. Verify the connection — run this in a regular terminal');
364
+ console.log(' (not inside Claude):');
365
+ console.log('');
366
+ console.log(' claude mcp list');
367
+ console.log('');
368
+ console.log(' You should see:');
369
+ console.log(` ritual: ${mcpUrl} (HTTP) - ✓ Connected`);
370
+ console.log('');
371
+ console.log(' If it shows ✗ Failed to connect, run: ritual doctor');
372
+ console.log('');
373
+ console.log(' 2. Restart Claude Code so the new MCP server loads:');
374
+ console.log(' • Exit any running Claude sessions (Ctrl-C or /exit)');
375
+ console.log(' • Run `claude` again');
376
+ console.log(' • Inside Claude, type /mcp — `ritual` should be listed');
377
+ }
378
+ // Per-agent restart hints — only emit for agents we actually wired.
379
+ if (hasCursor) {
380
+ console.log('');
381
+ console.log(' Cursor: restart Cursor (Cmd-Q then reopen) to load the MCP server.');
382
+ }
383
+ if (hasWindsurf) {
384
+ console.log('');
385
+ console.log(' Windsurf: restart Windsurf to load the MCP server.');
386
+ }
387
+ if (hasVsCode) {
388
+ console.log('');
389
+ console.log(' VS Code: reload the window (Cmd+Shift+P → "Developer: Reload Window")');
390
+ console.log(' to load the MCP server.');
391
+ }
392
+ console.log('');
393
+ console.log(' Once connected, you can use:');
394
+ console.log(' /ritual build <feature> — full pipeline (from your coding agent)');
395
+ console.log(' ritual graph status — see the workspace knowledge graph');
396
+ console.log(' ritual doctor — diagnose MCP / auth setup');
397
+ console.log('');
398
+ console.log(' Setup complete.');
399
+ console.log('');
400
+ }
401
+ /**
402
+ * Heuristic: are we running inside an active Claude Code session?
403
+ *
404
+ * Claude Code sets one or more of these env vars when spawning a child
405
+ * process from within a session. Any one of them being present is a
406
+ * strong signal — we don't need all three. (Names are stable across
407
+ * Claude Code releases since Sept 2025.)
408
+ *
409
+ * Used to surface a prominent warning that the CURRENT Claude session
410
+ * won't see the new MCP server until restart.
411
+ */
412
+ function isInsideClaudeCode() {
413
+ return (!!process.env.CLAUDECODE ||
414
+ !!process.env.CLAUDE_CODE_ENTRYPOINT ||
415
+ !!process.env.CLAUDE_CODE_SESSION_ID);
416
+ }
249
417
  //# sourceMappingURL=init.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,12 +8,13 @@ const whoami_1 = require("./commands/whoami");
8
8
  const refresh_1 = require("./commands/refresh");
9
9
  const init_1 = require("./commands/init");
10
10
  const doctor_1 = require("./commands/doctor");
11
+ const graph_1 = require("./commands/graph");
11
12
  const program = new commander_1.Command();
12
13
  program
13
14
  .name('ritual')
14
15
  .description('Ritual CLI — connect AI coding agents to Ritual Cloud. ' +
15
16
  'Scaffold skills, register MCP servers, manage sessions.')
16
- .version('0.4.0');
17
+ .version('0.5.0');
17
18
  // `init` is the headline command: scaffold + register against every
18
19
  // detected agent. Listed first so `ritual --help` surfaces it.
19
20
  program
@@ -49,6 +50,18 @@ program
49
50
  .command('doctor')
50
51
  .description('Sanity check the CLI environment: credentials, endpoints, detected agents')
51
52
  .action(doctor_1.doctorCommand);
53
+ // `graph` is the workspace-KG visibility surface. Today only one
54
+ // subcommand (`status`) but reserved as a noun so future verbs
55
+ // (`verify`, `seed`, `export`) compose naturally.
56
+ const graph = program
57
+ .command('graph')
58
+ .description('Inspect the workspace knowledge graph (PR 107c — visibility layer)');
59
+ graph
60
+ .command('status')
61
+ .description('Show counts + recent implementations for the project\'s workspace')
62
+ .option('--workspace <id>', 'Override the workspaceId. Default reads from .ritual/config.json (set by `ritual init`).')
63
+ .option('--limit <n>', 'Number of recent implementations to show (default 5, max 25)')
64
+ .action(graph_1.graphStatusCommand);
52
65
  program.parseAsync(process.argv).catch((err) => {
53
66
  console.error(`\n ✗ ${err.message}\n`);
54
67
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACL,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACX,yDAAyD;IACxD,yDAAyD,CAC1D;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnB,oEAAoE;AACpE,+DAA+D;AAC/D,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kFAAkF,CAAC;KAC/F,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CACN,gBAAgB,EAChB,kFAAkF,CAClF;KACA,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,gBAAgB,EAChB,wHAAwH,CACxH;KACA,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEtB,OAAO;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CACN,gBAAgB,EAChB,iGAAiG,CACjG;KACA,MAAM,CACN,kBAAkB,EAClB,4EAA4E,CAC5E;KACA,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CAAC,oBAAY,CAAC,CAAC;AAEvB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,wBAAc,CAAC,CAAC;AAEzB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,4CAAgD;AAChD,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,0CAA8C;AAC9C,8CAAkD;AAClD,4CAAsD;AAEtD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACL,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CACX,yDAAyD;IACxD,yDAAyD,CAC1D;KACA,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnB,oEAAoE;AACpE,+DAA+D;AAC/D,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kFAAkF,CAAC;KAC/F,MAAM,CAAC,cAAc,EAAE,wDAAwD,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CACN,gBAAgB,EAChB,kFAAkF,CAClF;KACA,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CACN,gBAAgB,EAChB,wHAAwH,CACxH;KACA,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEtB,OAAO;KACL,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CACN,gBAAgB,EAChB,iGAAiG,CACjG;KACA,MAAM,CACN,kBAAkB,EAClB,4EAA4E,CAC5E;KACA,MAAM,CAAC,OAAO,EAAE,iFAAiF,CAAC;KAClG,MAAM,CAAC,oBAAY,CAAC,CAAC;AAEvB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yBAAyB,CAAC;KACtC,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,OAAO;KACL,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,sEAAsE,CAAC;KACnF,MAAM,CAAC,wBAAc,CAAC,CAAC;AAEzB,OAAO;KACL,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,sBAAa,CAAC,CAAC;AAExB,iEAAiE;AACjE,+DAA+D;AAC/D,kDAAkD;AAClD,MAAM,KAAK,GAAG,OAAO;KACnB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oEAAoE,CAAC,CAAC;AAEpF,KAAK;KACH,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CACN,kBAAkB,EAClB,0FAA0F,CAC1F;KACA,MAAM,CAAC,aAAa,EAAE,8DAA8D,CAAC;KACrF,MAAM,CAAC,0BAAkB,CAAC,CAAC;AAE7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ritualai/cli",
3
- "version": "0.4.0",
3
+ "version": "0.6.0",
4
4
  "description": "Ritual CLI — scaffold AI coding agent skills + register MCP servers. Connects Claude Code, Cursor, Windsurf, Kiro, Gemini CLI, VS Code/Copilot, and Codex to Ritual Cloud.",
5
5
  "private": false,
6
6
  "license": "Apache-2.0",
@@ -24,6 +24,7 @@
24
24
  "prepublishOnly": "pnpm run clean && pnpm run build"
25
25
  },
26
26
  "dependencies": {
27
+ "@ritual/shared-types": "workspace:^",
27
28
  "commander": "^14.0.3",
28
29
  "open": "^10.1.0"
29
30
  },
@@ -53,7 +54,12 @@
53
54
  "jest": {
54
55
  "preset": "ts-jest",
55
56
  "testEnvironment": "node",
56
- "roots": ["<rootDir>/src", "<rootDir>/test"],
57
- "testMatch": ["**/?(*.)+(spec|test).ts"]
57
+ "roots": [
58
+ "<rootDir>/src",
59
+ "<rootDir>/test"
60
+ ],
61
+ "testMatch": [
62
+ "**/?(*.)+(spec|test).ts"
63
+ ]
58
64
  }
59
65
  }
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?
@@ -51,7 +51,7 @@ When **not** to use:
51
51
  - An exploration already exists with recommendations — fetch directly via `get_exploration` + `get_recommendations`
52
52
  - The user wants to *implement* a feature from existing recommendations — use `/ritual-builder-spec` (from `@ritual-ai/cli`)
53
53
 
54
- ### Workflow — 8 phases
54
+ ### Workflow — 9 phases (Phase 8 happens after the engineer ships the work)
55
55
 
56
56
  Each phase has explicit **[USER PAUSE]** points — never skip them.
57
57
 
@@ -319,6 +319,32 @@ Show the final state:
319
319
  >
320
320
  > View at: https://dev.ritualapp.cloud/e/{exploration_id}
321
321
 
322
+ #### Phase 8 — After shipping: close the loop with `sync_implementation`
323
+
324
+ This phase happens *outside* the `/ritual build` chat — after the engineer has taken the accepted recommendations into their coding work and the implementation has actually landed (PR merged, etc.). The agent in that follow-up session should call `mcp__ritual__sync_implementation` to register what shipped, which decisions were made, and what was deliberately deferred.
325
+
326
+ When sync_implementation succeeds, the response now includes:
327
+
328
+ - `decisions: [{ decisionId, area, choice }, ...]` — IDs of every architectural decision logged
329
+ - `deferrals: [{ deferralId, rbId, severity }, ...]` — IDs of every deferral
330
+ - `decisionsCount`, `deferralsCount` — totals for the summary line
331
+ - `webUrl` — clickable link to the exploration's implementation record in the web UI
332
+
333
+ **Surface ALL of this to the user**, not just "ok logged." This is the visible signal that the loop closed. Format:
334
+
335
+ > ✓ Logged implementation for **{exploration name}**
336
+ > - {decisionsCount} decision{s} registered: {first 2 decisions, e.g. "auth: OAuth not SAML; data-model: tenant-scoped indexes"}
337
+ > - {deferralsCount} deferral{s} registered: {first 1, e.g. "[major] Rate-limit per-tenant — out of scope for v1"}
338
+ > - View: {webUrl}
339
+ >
340
+ > Future `/ritual build` calls touching `{first 2 of filesChanged}` will now see this implementation in their priorContext block.
341
+
342
+ The closing sentence is the most important one: it tells the user **what just happened in the system** in product-level terms. Without it, sync_implementation feels like a write-only black hole. With it, the user understands they just contributed to the workspace's memory.
343
+
344
+ If they want to check the state at any time, point them at:
345
+
346
+ > `ritual graph status` (in their CLI) — shows the workspace's current KG counts + recent implementations.
347
+
322
348
  ### Failure modes & recovery
323
349
 
324
350
  **Discovery generation hangs (>5 min polling without `ready: true`)**: ask the user — wait longer? retry (`suggest_discovery_questions` again, new task)? or skip discovery entirely (proceed to Phase 6 without picked questions)?