@ritualai/cli 0.7.3 → 0.7.6

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.
Files changed (68) hide show
  1. package/README.md +36 -1
  2. package/dist/commands/init.js +174 -43
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/login.js +120 -13
  5. package/dist/commands/login.js.map +1 -1
  6. package/dist/commands/logout.js +55 -8
  7. package/dist/commands/logout.js.map +1 -1
  8. package/dist/index.js +8 -66
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/auth-flow.js +1 -1
  11. package/dist/lib/auth-flow.js.map +1 -1
  12. package/dist/lib/colors.js +182 -0
  13. package/dist/lib/colors.js.map +1 -0
  14. package/dist/lib/config.js +30 -17
  15. package/dist/lib/config.js.map +1 -1
  16. package/dist/lib/credentials-backup.js +282 -0
  17. package/dist/lib/credentials-backup.js.map +1 -0
  18. package/dist/lib/identity-banner.js +88 -0
  19. package/dist/lib/identity-banner.js.map +1 -0
  20. package/dist/lib/oidc.js +55 -0
  21. package/dist/lib/oidc.js.map +1 -1
  22. package/dist/lib/package-info.js +76 -0
  23. package/dist/lib/package-info.js.map +1 -0
  24. package/dist/lib/welcome-banner.js +290 -0
  25. package/dist/lib/welcome-banner.js.map +1 -0
  26. package/package.json +1 -1
  27. package/skills/claude-code/ritual/agents/openai.yaml +2 -2
  28. package/skills/claude-code/ritual/manifest.json +57 -0
  29. package/skills/claude-code/ritual/references/build-flow.md +174 -105
  30. package/skills/claude-code/ritual/references/cli-output-contract.md +89 -0
  31. package/skills/claude-code/ritual/references/context-pulse-flow.md +1 -1
  32. package/skills/claude-code/ritual/references/lineage-flow.md +7 -6
  33. package/skills/claude-code/ritual/references/resume-flow.md +4 -4
  34. package/skills/codex/ritual/agents/openai.yaml +2 -2
  35. package/skills/codex/ritual/manifest.json +57 -0
  36. package/skills/codex/ritual/references/build-flow.md +174 -105
  37. package/skills/codex/ritual/references/cli-output-contract.md +89 -0
  38. package/skills/codex/ritual/references/context-pulse-flow.md +1 -1
  39. package/skills/codex/ritual/references/lineage-flow.md +7 -6
  40. package/skills/codex/ritual/references/resume-flow.md +4 -4
  41. package/skills/cursor/ritual/agents/openai.yaml +2 -2
  42. package/skills/cursor/ritual/manifest.json +57 -0
  43. package/skills/cursor/ritual/references/build-flow.md +174 -105
  44. package/skills/cursor/ritual/references/cli-output-contract.md +89 -0
  45. package/skills/cursor/ritual/references/context-pulse-flow.md +1 -1
  46. package/skills/cursor/ritual/references/lineage-flow.md +7 -6
  47. package/skills/cursor/ritual/references/resume-flow.md +4 -4
  48. package/skills/gemini/ritual/agents/openai.yaml +2 -2
  49. package/skills/gemini/ritual/manifest.json +57 -0
  50. package/skills/gemini/ritual/references/build-flow.md +174 -105
  51. package/skills/gemini/ritual/references/cli-output-contract.md +89 -0
  52. package/skills/gemini/ritual/references/context-pulse-flow.md +1 -1
  53. package/skills/gemini/ritual/references/lineage-flow.md +7 -6
  54. package/skills/gemini/ritual/references/resume-flow.md +4 -4
  55. package/skills/kiro/ritual/agents/openai.yaml +2 -2
  56. package/skills/kiro/ritual/manifest.json +57 -0
  57. package/skills/kiro/ritual/references/build-flow.md +174 -105
  58. package/skills/kiro/ritual/references/cli-output-contract.md +89 -0
  59. package/skills/kiro/ritual/references/context-pulse-flow.md +1 -1
  60. package/skills/kiro/ritual/references/lineage-flow.md +7 -6
  61. package/skills/kiro/ritual/references/resume-flow.md +4 -4
  62. package/skills/vscode/ritual/agents/openai.yaml +2 -2
  63. package/skills/vscode/ritual/manifest.json +57 -0
  64. package/skills/vscode/ritual/references/build-flow.md +174 -105
  65. package/skills/vscode/ritual/references/cli-output-contract.md +89 -0
  66. package/skills/vscode/ritual/references/context-pulse-flow.md +1 -1
  67. package/skills/vscode/ritual/references/lineage-flow.md +7 -6
  68. package/skills/vscode/ritual/references/resume-flow.md +4 -4
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printWelcomeBanner = printWelcomeBanner;
4
+ exports.readBoundWorkspace = readBoundWorkspace;
5
+ const node_os_1 = require("node:os");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const colors_1 = require("./colors");
9
+ /**
10
+ * Welcome banner for `ritual init` and `ritual login`.
11
+ *
12
+ * Inspired by Claude Code's startup screen: a two-column boxed
13
+ * panel that surfaces "who you are, where you are, what's about to
14
+ * happen, what you can do next" in one glance. Replaces the previous
15
+ * single-line `Ritual — scaffolding skills…` opener.
16
+ *
17
+ * Layout:
18
+ *
19
+ * ╭─── Ritual CLI v0.7.5 ──────────────────────────────────────╮
20
+ * │ │ <right column> │
21
+ * │ Welcome (back)! │ │
22
+ * │ │ • tip 1 │
23
+ * │ <chain link glyph> │ • tip 2 │
24
+ * │ │ • tip 3 │
25
+ * │ <tagline / identity> │ │
26
+ * │ │ Quick commands / │
27
+ * │ ~/Development/project-name │ recent activity │
28
+ * ╰────────────────────────────────────────┴────────────────────╯
29
+ *
30
+ * Renders only on TTY (`process.stdout.isTTY`). Skips entirely
31
+ * outside a TTY so piped output / CI / `--json` consumers aren't
32
+ * polluted. Width-aware: collapses to single-column when terminal
33
+ * width < 100.
34
+ *
35
+ * The chain-link glyph is the Ritual CLI's terminal-only visual
36
+ * anchor. The canonical Ritual brand mark (teal R-in-circle, see
37
+ * `apps/web/static/icon.svg`) is too detailed for terminal block-
38
+ * character rendering at the welcome-box scale. Both coexist: chain
39
+ * link in CLI, R-in-circle everywhere else. The brand TEAL color
40
+ * `#1FAF9F` is shared across both for unmistakable Ritual identity.
41
+ */
42
+ /** The chain-link glyph. 7×5 cells of Unicode box characters. */
43
+ const CHAIN_GLYPH = [
44
+ '╭─────╮ ',
45
+ '│ ╭──┼──╮ ',
46
+ '│ │ │ │ ',
47
+ '╰──┼──╯ │ ',
48
+ ' ╰─────╯ ',
49
+ ];
50
+ /** Minimum terminal width for the two-column layout. Below this we fall back. */
51
+ const MIN_TWO_COL_WIDTH = 100;
52
+ /** Target total width of the welcome box (top + bottom border). */
53
+ const TARGET_WIDTH = 110;
54
+ /** Left column width (identity / context / glyph). */
55
+ const LEFT_COL_WIDTH = 48;
56
+ /**
57
+ * Render the welcome banner. Writes to stderr — same routing
58
+ * principle as `identity-banner.ts`: human chrome on stderr, leaving
59
+ * stdout clean for JSON / pipes / agent-readable status output.
60
+ *
61
+ * Returns nothing. Idempotent — callers can call multiple times if
62
+ * they want (e.g. before sign-in and after), but the standard call
63
+ * site is once at the top of the command.
64
+ */
65
+ function printWelcomeBanner(input) {
66
+ // Non-TTY: skip entirely. Same gate as identity-banner.
67
+ if (!process.stderr.isTTY)
68
+ return;
69
+ const width = Math.min(process.stdout.columns ?? TARGET_WIDTH, TARGET_WIDTH);
70
+ const twoCol = width >= MIN_TWO_COL_WIDTH;
71
+ const colorMode = (0, colors_1.detectColorMode)();
72
+ const lines = twoCol
73
+ ? renderTwoColumn(input, width)
74
+ : renderSingleColumn(input, width);
75
+ // Wrap in top/bottom border. Top border carries the CLI version
76
+ // in the chrome — `╭─── Ritual CLI v0.7.5 ──────╮` — same shape
77
+ // as Claude Code's `Claude Code v2.1.112` header.
78
+ const header = renderTopBorder(input.cliVersion, width);
79
+ const footer = renderBottomBorder(width, twoCol);
80
+ const out = [header, ...lines, footer].join('\n') + '\n';
81
+ // Apply teal to the entire frame at the end so partial-write
82
+ // glitches don't leave color escapes hanging.
83
+ void colorMode; // colorize() is per-line inside the renderers
84
+ process.stderr.write(out);
85
+ }
86
+ // ─── top + bottom border ──────────────────────────────────────────
87
+ function renderTopBorder(cliVersion, width) {
88
+ const label = ` Ritual CLI v${cliVersion} `;
89
+ // Pad to: ╭───label───────────────╮
90
+ const dashesBefore = 3;
91
+ const innerWidth = width - 2; // minus the corner chars
92
+ const remaining = innerWidth - dashesBefore - label.length;
93
+ const body = '─'.repeat(dashesBefore) + label + '─'.repeat(Math.max(0, remaining));
94
+ return (0, colors_1.color)(colors_1.RITUAL_TEAL, `╭${body}╮`);
95
+ }
96
+ function renderBottomBorder(width, twoCol) {
97
+ const innerWidth = width - 2;
98
+ if (twoCol) {
99
+ // Bottom has a ┴ where the column divider was.
100
+ const left = '─'.repeat(LEFT_COL_WIDTH);
101
+ const right = '─'.repeat(Math.max(0, innerWidth - LEFT_COL_WIDTH - 1));
102
+ return (0, colors_1.color)(colors_1.RITUAL_TEAL, `╰${left}┴${right}╯`);
103
+ }
104
+ return (0, colors_1.color)(colors_1.RITUAL_TEAL, `╰${'─'.repeat(innerWidth)}╯`);
105
+ }
106
+ // ─── two-column layout ────────────────────────────────────────────
107
+ function renderTwoColumn(input, width) {
108
+ const left = leftColumnLines(input, LEFT_COL_WIDTH);
109
+ const right = rightColumnLines(input);
110
+ const rightWidth = width - LEFT_COL_WIDTH - 3; // minus separators
111
+ // Pad to the same length so the divider doesn't drift.
112
+ const rowCount = Math.max(left.length, right.length);
113
+ while (left.length < rowCount)
114
+ left.push('');
115
+ while (right.length < rowCount)
116
+ right.push('');
117
+ const result = [];
118
+ for (let i = 0; i < rowCount; i++) {
119
+ const l = padDisplay(left[i], LEFT_COL_WIDTH);
120
+ const r = padDisplay(right[i], rightWidth);
121
+ const bar = (0, colors_1.color)(colors_1.RITUAL_TEAL, '│');
122
+ result.push(`${bar}${l}${bar}${r}${bar}`);
123
+ }
124
+ return result;
125
+ }
126
+ function renderSingleColumn(input, width) {
127
+ // Narrow terminal — stack everything in one column. Drop the
128
+ // chain glyph margin to give text more room.
129
+ const innerWidth = width - 2;
130
+ const lines = [];
131
+ for (const l of leftColumnLines(input, innerWidth)) {
132
+ lines.push((0, colors_1.color)(colors_1.RITUAL_TEAL, '│') + padDisplay(l, innerWidth) + (0, colors_1.color)(colors_1.RITUAL_TEAL, '│'));
133
+ }
134
+ // Visual separator between left + right content blocks.
135
+ lines.push((0, colors_1.color)(colors_1.RITUAL_TEAL, '├' + '─'.repeat(innerWidth) + '┤'));
136
+ for (const r of rightColumnLines(input)) {
137
+ lines.push((0, colors_1.color)(colors_1.RITUAL_TEAL, '│') + padDisplay(r, innerWidth) + (0, colors_1.color)(colors_1.RITUAL_TEAL, '│'));
138
+ }
139
+ return lines;
140
+ }
141
+ // ─── content: left column (identity + glyph) ─────────────────────
142
+ function leftColumnLines(input, colWidth) {
143
+ const greeting = input.currentUser ? `Welcome back, ${input.currentUser}` : 'Welcome to Ritual!';
144
+ const projectLabel = `~/${relativeToHome(input.projectDir)}`;
145
+ const wsLine = input.workspaceBound && input.workspaceName
146
+ ? `Workspace: ${input.workspaceName}`
147
+ : input.workspaceBound
148
+ ? 'Workspace: (bound)'
149
+ : undefined;
150
+ const lines = [];
151
+ lines.push('');
152
+ lines.push(centerInColumn((0, colors_1.boldColor)(colors_1.RITUAL_TEAL, greeting), colWidth, greeting.length));
153
+ lines.push('');
154
+ // Chain glyph — center the WHOLE glyph as a block, not each
155
+ // row independently. Each row is trimmed of trailing whitespace
156
+ // (to avoid odd terminal selection rectangles) but the relative
157
+ // alignment between rows is preserved by computing the centering
158
+ // offset once from the widest row.
159
+ const glyphWidth = Math.max(...CHAIN_GLYPH.map((r) => r.trimEnd().length));
160
+ const glyphLeftPad = Math.max(0, Math.floor((colWidth - glyphWidth) / 2));
161
+ for (const row of CHAIN_GLYPH) {
162
+ const trimmed = row.trimEnd();
163
+ lines.push(' '.repeat(glyphLeftPad) + (0, colors_1.color)(colors_1.RITUAL_TEAL, trimmed));
164
+ }
165
+ lines.push('');
166
+ if (wsLine) {
167
+ lines.push(centerInColumn((0, colors_1.dim)(wsLine), colWidth, wsLine.length));
168
+ }
169
+ else if (!input.currentUser) {
170
+ // Fresh user tagline.
171
+ const tagline = 'Plan and ship without surprise context';
172
+ lines.push(centerInColumn((0, colors_1.dim)(tagline), colWidth, tagline.length));
173
+ }
174
+ lines.push(centerInColumn((0, colors_1.dim)(projectLabel), colWidth, projectLabel.length));
175
+ lines.push('');
176
+ return lines;
177
+ }
178
+ // ─── content: right column (tips / activity / commands) ──────────
179
+ function rightColumnLines(input) {
180
+ const lines = [];
181
+ const heading = (text) => (0, colors_1.boldColor)(colors_1.RITUAL_TEAL, text);
182
+ const tips = input.tips ?? defaultTipsFor(input);
183
+ const recent = input.recentActivity;
184
+ const quick = input.quickCommands ?? defaultQuickCommandsFor(input);
185
+ if (recent !== undefined && recent.length > 0) {
186
+ lines.push('');
187
+ lines.push(` ${heading('Recent activity')}`);
188
+ for (const r of recent) {
189
+ lines.push(` ${r}`);
190
+ }
191
+ lines.push('');
192
+ lines.push(` ${heading('Quick commands')}`);
193
+ for (const q of quick) {
194
+ lines.push(` ${(0, colors_1.dim)(q)}`);
195
+ }
196
+ }
197
+ else {
198
+ lines.push('');
199
+ lines.push(` ${heading('What this command will do')}`);
200
+ for (const t of tips) {
201
+ lines.push(` ${t}`);
202
+ }
203
+ lines.push('');
204
+ lines.push(` ${heading('Quick commands')}`);
205
+ for (const q of quick) {
206
+ lines.push(` ${(0, colors_1.dim)(q)}`);
207
+ }
208
+ }
209
+ lines.push('');
210
+ return lines;
211
+ }
212
+ function defaultTipsFor(_input) {
213
+ return [
214
+ '1. Sign you in (browser-based OAuth)',
215
+ '2. Bind a workspace for this repo',
216
+ '3. Mint a long-lived MCP token',
217
+ '4. Register the MCP server with your',
218
+ ' AI coding agent(s)',
219
+ ];
220
+ }
221
+ function defaultQuickCommandsFor(_input) {
222
+ return [
223
+ '/ritual build <feature> ← inside agent',
224
+ 'ritual graph status',
225
+ 'ritual doctor',
226
+ 'ritual init --switch-account',
227
+ ];
228
+ }
229
+ // ─── helpers ──────────────────────────────────────────────────────
230
+ /**
231
+ * Display the project path relative to ~ when possible, else
232
+ * absolute. Cosmetic only — keeps the welcome box from showing the
233
+ * user's full home prefix.
234
+ */
235
+ function relativeToHome(absPath) {
236
+ const home = (0, node_os_1.homedir)();
237
+ if (absPath === home)
238
+ return '';
239
+ if (absPath.startsWith(home + '/'))
240
+ return absPath.slice(home.length + 1);
241
+ return (0, node_path_1.basename)(absPath);
242
+ }
243
+ /**
244
+ * Pad text to a fixed visible width — taking into account ANSI
245
+ * escape sequences which take screen-space of 0 chars. Bare-bones
246
+ * implementation: strip ANSI, measure, pad.
247
+ */
248
+ function padDisplay(text, width) {
249
+ const visible = stripAnsi(text).length;
250
+ if (visible >= width)
251
+ return text;
252
+ return text + ' '.repeat(width - visible);
253
+ }
254
+ /**
255
+ * Center `text` in a column of `colWidth`, treating ANSI-sequence
256
+ * bytes as zero-width. Caller must pass the visible length of the
257
+ * uncolored text as `visibleLen` since we can't reliably recompute
258
+ * after color() wraps the content.
259
+ */
260
+ function centerInColumn(coloredText, colWidth, visibleLen) {
261
+ const pad = Math.max(0, Math.floor((colWidth - visibleLen) / 2));
262
+ return ' '.repeat(pad) + coloredText;
263
+ }
264
+ /** Strip ANSI escape sequences. Minimal — covers SGR codes only. */
265
+ function stripAnsi(s) {
266
+ // eslint-disable-next-line no-control-regex
267
+ return s.replace(/\x1b\[[0-9;]*m/g, '');
268
+ }
269
+ // ─── workspace-name resolver ─────────────────────────────────────
270
+ /**
271
+ * Read `.ritual/config.json` from the project dir (if present) and
272
+ * resolve the workspace name. Returns `{ bound: false }` if no
273
+ * config file. Returns `{ bound: true, name }` with a best-effort
274
+ * label — config schema stores `workspaceId` only, so the name
275
+ * itself comes from a separate cached field if the binding flow
276
+ * persisted it (it does, as of PR #200).
277
+ */
278
+ function readBoundWorkspace(projectDir) {
279
+ const cfgPath = (0, node_path_1.join)(projectDir, '.ritual', 'config.json');
280
+ if (!(0, node_fs_1.existsSync)(cfgPath))
281
+ return { bound: false };
282
+ try {
283
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(cfgPath, 'utf-8'));
284
+ return { bound: true, name: parsed.workspaceName };
285
+ }
286
+ catch {
287
+ return { bound: true };
288
+ }
289
+ }
290
+ //# sourceMappingURL=welcome-banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome-banner.js","sourceRoot":"","sources":["../../src/lib/welcome-banner.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ritualai/cli",
3
- "version": "0.7.3",
3
+ "version": "0.7.6",
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",
@@ -1,5 +1,5 @@
1
1
  interface:
2
2
  display_name: Ritual
3
3
  short_description: Plan and build implementation-heavy changes with Ritual context, discovery, build briefs, lineage, and context-pulse scoring.
4
- icon: 🪷
5
- color: "#7C3AED"
4
+ icon: 🔗
5
+ color: "#1FAF9F"
@@ -0,0 +1,57 @@
1
+ [
2
+ {
3
+ "path": "DESIGN.md",
4
+ "lines": 36,
5
+ "bytes": 2226
6
+ },
7
+ {
8
+ "path": "SKILL.md",
9
+ "lines": 72,
10
+ "bytes": 5915
11
+ },
12
+ {
13
+ "path": "agents/openai.yaml",
14
+ "lines": 6,
15
+ "bytes": 213
16
+ },
17
+ {
18
+ "path": "references/async-polling.md",
19
+ "lines": 27,
20
+ "bytes": 1197
21
+ },
22
+ {
23
+ "path": "references/build-flow.md",
24
+ "lines": 1519,
25
+ "bytes": 88142
26
+ },
27
+ {
28
+ "path": "references/cli-output-contract.md",
29
+ "lines": 225,
30
+ "bytes": 11559
31
+ },
32
+ {
33
+ "path": "references/context-pulse-flow.md",
34
+ "lines": 357,
35
+ "bytes": 25358
36
+ },
37
+ {
38
+ "path": "references/discovery-classification.md",
39
+ "lines": 176,
40
+ "bytes": 10275
41
+ },
42
+ {
43
+ "path": "references/lineage-flow.md",
44
+ "lines": 154,
45
+ "bytes": 8774
46
+ },
47
+ {
48
+ "path": "references/resume-flow.md",
49
+ "lines": 157,
50
+ "bytes": 9950
51
+ },
52
+ {
53
+ "path": "references/scoring-fallback.md",
54
+ "lines": 126,
55
+ "bytes": 6494
56
+ }
57
+ ]