@su-record/vibe 3.2.60 → 3.2.62

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 (78) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CLAUDE.md +12 -4
  4. package/README.en.md +1 -1
  5. package/README.md +1 -1
  6. package/dist/cli/commands/codex-proxy.d.ts.map +1 -1
  7. package/dist/cli/commands/codex-proxy.js +8 -7
  8. package/dist/cli/commands/codex-proxy.js.map +1 -1
  9. package/dist/cli/commands/config.d.ts.map +1 -1
  10. package/dist/cli/commands/config.js +19 -18
  11. package/dist/cli/commands/config.js.map +1 -1
  12. package/dist/cli/commands/evolution.d.ts.map +1 -1
  13. package/dist/cli/commands/evolution.js +35 -34
  14. package/dist/cli/commands/evolution.js.map +1 -1
  15. package/dist/cli/commands/figma.d.ts.map +1 -1
  16. package/dist/cli/commands/figma.js +21 -20
  17. package/dist/cli/commands/figma.js.map +1 -1
  18. package/dist/cli/commands/info.js +4 -4
  19. package/dist/cli/commands/info.js.map +1 -1
  20. package/dist/cli/commands/llm.d.ts.map +1 -1
  21. package/dist/cli/commands/llm.js +11 -10
  22. package/dist/cli/commands/llm.js.map +1 -1
  23. package/dist/cli/commands/remove.js +13 -13
  24. package/dist/cli/commands/remove.js.map +1 -1
  25. package/dist/cli/commands/sentinel.d.ts +10 -1
  26. package/dist/cli/commands/sentinel.d.ts.map +1 -1
  27. package/dist/cli/commands/sentinel.js +51 -49
  28. package/dist/cli/commands/sentinel.js.map +1 -1
  29. package/dist/cli/commands/skills.js +3 -3
  30. package/dist/cli/commands/skills.js.map +1 -1
  31. package/dist/cli/commands/slack.d.ts.map +1 -1
  32. package/dist/cli/commands/slack.js +16 -15
  33. package/dist/cli/commands/slack.js.map +1 -1
  34. package/dist/cli/commands/stats.d.ts.map +1 -1
  35. package/dist/cli/commands/stats.js +30 -29
  36. package/dist/cli/commands/stats.js.map +1 -1
  37. package/dist/cli/commands/telegram.d.ts.map +1 -1
  38. package/dist/cli/commands/telegram.js +26 -25
  39. package/dist/cli/commands/telegram.js.map +1 -1
  40. package/dist/cli/postinstall/main.d.ts +11 -0
  41. package/dist/cli/postinstall/main.d.ts.map +1 -1
  42. package/dist/cli/postinstall/main.js +29 -0
  43. package/dist/cli/postinstall/main.js.map +1 -1
  44. package/dist/infra/lib/browser/launch.d.ts.map +1 -1
  45. package/dist/infra/lib/browser/launch.js +0 -1
  46. package/dist/infra/lib/browser/launch.js.map +1 -1
  47. package/dist/tools/docs/agentsMd.d.ts +45 -0
  48. package/dist/tools/docs/agentsMd.d.ts.map +1 -0
  49. package/dist/tools/docs/agentsMd.js +51 -0
  50. package/dist/tools/docs/agentsMd.js.map +1 -0
  51. package/dist/tools/docs/cacheSurface.d.ts +37 -0
  52. package/dist/tools/docs/cacheSurface.d.ts.map +1 -0
  53. package/dist/tools/docs/cacheSurface.js +98 -0
  54. package/dist/tools/docs/cacheSurface.js.map +1 -0
  55. package/dist/tools/memory/getMemoryGraph.d.ts.map +1 -1
  56. package/dist/tools/memory/getMemoryGraph.js.map +1 -1
  57. package/dist/tools/spec/index.d.ts +2 -0
  58. package/dist/tools/spec/index.d.ts.map +1 -1
  59. package/dist/tools/spec/index.js +2 -0
  60. package/dist/tools/spec/index.js.map +1 -1
  61. package/dist/tools/spec/specGenerator.js +3 -5
  62. package/dist/tools/spec/specGenerator.js.map +1 -1
  63. package/dist/tools/spec/specLifecycle.d.ts +40 -0
  64. package/dist/tools/spec/specLifecycle.d.ts.map +1 -0
  65. package/dist/tools/spec/specLifecycle.js +147 -0
  66. package/dist/tools/spec/specLifecycle.js.map +1 -0
  67. package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -1
  68. package/dist/tools/spec/validateSpecDocument.js +13 -0
  69. package/dist/tools/spec/validateSpecDocument.js.map +1 -1
  70. package/hooks/scripts/figma-extract.js +6 -2
  71. package/hooks/scripts/figma-to-scss.js +10 -3
  72. package/hooks/scripts/llm-orchestrate.js +2 -2
  73. package/hooks/scripts/session-start.js +30 -23
  74. package/hooks/scripts/utils.js +4 -5
  75. package/package.json +19 -9
  76. package/skills/vibe.docs/references/agent.md +4 -0
  77. package/vibe/rules/prefix-cache-surface.md +98 -0
  78. package/vibe/templates/spec-template.md +16 -1
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { join } from 'path';
6
6
  import { existsSync } from 'fs';
7
+ import { log } from '../utils.js';
7
8
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8
9
  // Helpers
9
10
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -34,7 +35,7 @@ function tryLoadStorage() {
34
35
  export function sentinelStatus() {
35
36
  const storage = tryLoadStorage();
36
37
  if (!storage) {
37
- console.log('Sentinel: No database found. Run a session first.');
38
+ log('Sentinel: No database found. Run a session first.');
38
39
  return;
39
40
  }
40
41
  const db = storage.getDatabase();
@@ -65,7 +66,7 @@ export function sentinelStatus() {
65
66
  catch {
66
67
  // Table may not exist
67
68
  }
68
- console.log(`
69
+ log(`
69
70
  Security Sentinel Status
70
71
  ========================
71
72
  Policies: ${policyCount} active
@@ -78,10 +79,11 @@ Security Sentinel Status
78
79
  Blocked: ${blockedActions}
79
80
  `);
80
81
  }
81
- export function sentinelAudit(type, risk, days, deadLetter, retryId, discardId) {
82
+ export function sentinelAudit(options = {}) {
83
+ const { type, risk, days, deadLetter, retryId, discardId } = options;
82
84
  const storage = tryLoadStorage();
83
85
  if (!storage) {
84
- console.log('No audit data found.');
86
+ log('No audit data found.');
85
87
  return;
86
88
  }
87
89
  const db = storage.getDatabase();
@@ -89,36 +91,36 @@ export function sentinelAudit(type, risk, days, deadLetter, retryId, discardId)
89
91
  try {
90
92
  const rows = db.prepare('SELECT * FROM dead_letter_events ORDER BY failedAt DESC LIMIT 50').all();
91
93
  if (rows.length === 0) {
92
- console.log('No dead letter events.');
94
+ log('No dead letter events.');
93
95
  return;
94
96
  }
95
- console.log(`Dead Letter Events (${rows.length}):`);
97
+ log(`Dead Letter Events (${rows.length}):`);
96
98
  for (const row of rows) {
97
- console.log(` [${row.id}] ${row.eventType} — retries: ${row.retryCount}, failed: ${row.failedAt}`);
99
+ log(` [${row.id}] ${row.eventType} — retries: ${row.retryCount}, failed: ${row.failedAt}`);
98
100
  }
99
101
  }
100
102
  catch {
101
- console.log('Dead letter table not found.');
103
+ log('Dead letter table not found.');
102
104
  }
103
105
  return;
104
106
  }
105
107
  if (retryId) {
106
108
  try {
107
109
  db.prepare("UPDATE event_outbox SET status = 'pending', retryCount = 0 WHERE id = ?").run(retryId);
108
- console.log(`Event ${retryId} re-queued for retry.`);
110
+ log(`Event ${retryId} re-queued for retry.`);
109
111
  }
110
112
  catch (err) {
111
- console.log(`Failed to retry: ${err.message}`);
113
+ log(`Failed to retry: ${err.message}`);
112
114
  }
113
115
  return;
114
116
  }
115
117
  if (discardId) {
116
118
  try {
117
119
  db.prepare('DELETE FROM dead_letter_events WHERE id = ?').run(discardId);
118
- console.log(`Dead letter event ${discardId} discarded.`);
120
+ log(`Dead letter event ${discardId} discarded.`);
119
121
  }
120
122
  catch (err) {
121
- console.log(`Failed to discard: ${err.message}`);
123
+ log(`Failed to discard: ${err.message}`);
122
124
  }
123
125
  return;
124
126
  }
@@ -138,149 +140,149 @@ export function sentinelAudit(type, risk, days, deadLetter, retryId, discardId)
138
140
  try {
139
141
  const rows = db.prepare(query).all(...params);
140
142
  if (rows.length === 0) {
141
- console.log('No audit events found.');
143
+ log('No audit events found.');
142
144
  return;
143
145
  }
144
- console.log(`Audit Events (${rows.length}):`);
146
+ log(`Audit Events (${rows.length}):`);
145
147
  for (const row of rows) {
146
148
  const risk = row.riskLevel ?? '-';
147
149
  const outcome = row.outcome ?? '-';
148
- console.log(` [${row.id}] ${row.eventType} | risk=${risk} | outcome=${outcome} | ${row.createdAt}`);
150
+ log(` [${row.id}] ${row.eventType} | risk=${risk} | outcome=${outcome} | ${row.createdAt}`);
149
151
  }
150
152
  }
151
153
  catch (err) {
152
- console.log(`Query failed: ${err.message}`);
154
+ log(`Query failed: ${err.message}`);
153
155
  }
154
156
  }
155
157
  export function sentinelApprove(id) {
156
158
  if (!id) {
157
- console.log('Usage: vibe sentinel approve <confirmation-id>');
159
+ log('Usage: vibe sentinel approve <confirmation-id>');
158
160
  return;
159
161
  }
160
162
  const storage = tryLoadStorage();
161
163
  if (!storage) {
162
- console.log('No database found.');
164
+ log('No database found.');
163
165
  return;
164
166
  }
165
167
  const db = storage.getDatabase();
166
168
  try {
167
169
  const row = db.prepare('SELECT * FROM confirmations WHERE id = ?').get(id);
168
170
  if (!row) {
169
- console.log(`Confirmation ${id} not found.`);
171
+ log(`Confirmation ${id} not found.`);
170
172
  return;
171
173
  }
172
174
  if (row.status !== 'pending') {
173
- console.log(`Confirmation ${id} is already ${row.status}.`);
175
+ log(`Confirmation ${id} is already ${row.status}.`);
174
176
  return;
175
177
  }
176
178
  db.prepare("UPDATE confirmations SET status = 'approved', ownerResponse = 'CLI approval', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
177
- console.log(`Confirmation ${id} approved.`);
179
+ log(`Confirmation ${id} approved.`);
178
180
  }
179
181
  catch (err) {
180
- console.log(`Failed: ${err.message}`);
182
+ log(`Failed: ${err.message}`);
181
183
  }
182
184
  }
183
185
  export function sentinelReject(id) {
184
186
  if (!id) {
185
- console.log('Usage: vibe sentinel reject <confirmation-id>');
187
+ log('Usage: vibe sentinel reject <confirmation-id>');
186
188
  return;
187
189
  }
188
190
  const storage = tryLoadStorage();
189
191
  if (!storage) {
190
- console.log('No database found.');
192
+ log('No database found.');
191
193
  return;
192
194
  }
193
195
  const db = storage.getDatabase();
194
196
  try {
195
197
  const row = db.prepare('SELECT * FROM confirmations WHERE id = ?').get(id);
196
198
  if (!row) {
197
- console.log(`Confirmation ${id} not found.`);
199
+ log(`Confirmation ${id} not found.`);
198
200
  return;
199
201
  }
200
202
  if (row.status !== 'pending') {
201
- console.log(`Confirmation ${id} is already ${row.status}.`);
203
+ log(`Confirmation ${id} is already ${row.status}.`);
202
204
  return;
203
205
  }
204
206
  db.prepare("UPDATE confirmations SET status = 'rejected', ownerResponse = 'CLI rejection', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
205
- console.log(`Confirmation ${id} rejected.`);
207
+ log(`Confirmation ${id} rejected.`);
206
208
  }
207
209
  catch (err) {
208
- console.log(`Failed: ${err.message}`);
210
+ log(`Failed: ${err.message}`);
209
211
  }
210
212
  }
211
213
  export function sentinelPolicyList() {
212
214
  const storage = tryLoadStorage();
213
215
  if (!storage) {
214
- console.log('No policies found.');
216
+ log('No policies found.');
215
217
  return;
216
218
  }
217
219
  const db = storage.getDatabase();
218
220
  try {
219
221
  const rows = db.prepare('SELECT name, description, action, priority, enabled FROM policies ORDER BY priority DESC').all();
220
222
  if (rows.length === 0) {
221
- console.log('No policies configured.');
223
+ log('No policies configured.');
222
224
  return;
223
225
  }
224
- console.log('Sentinel Policies:');
226
+ log('Sentinel Policies:');
225
227
  for (const row of rows) {
226
228
  const status = row.enabled ? 'ON' : 'OFF';
227
- console.log(` [${status}] ${row.name} (priority: ${row.priority}, action: ${row.action})`);
229
+ log(` [${status}] ${row.name} (priority: ${row.priority}, action: ${row.action})`);
228
230
  if (row.description)
229
- console.log(` ${row.description}`);
231
+ log(` ${row.description}`);
230
232
  }
231
233
  }
232
234
  catch (err) {
233
- console.log(`Failed: ${err.message}`);
235
+ log(`Failed: ${err.message}`);
234
236
  }
235
237
  }
236
238
  export function sentinelPolicyToggle(name, enable) {
237
239
  if (!name) {
238
- console.log(`Usage: vibe sentinel policy ${enable ? 'enable' : 'disable'} <policy-name>`);
240
+ log(`Usage: vibe sentinel policy ${enable ? 'enable' : 'disable'} <policy-name>`);
239
241
  return;
240
242
  }
241
243
  const storage = tryLoadStorage();
242
244
  if (!storage) {
243
- console.log('No database found.');
245
+ log('No database found.');
244
246
  return;
245
247
  }
246
248
  const db = storage.getDatabase();
247
249
  try {
248
250
  const result = db.prepare('UPDATE policies SET enabled = ?, updatedAt = ? WHERE name = ?').run(enable ? 1 : 0, new Date().toISOString(), name);
249
251
  if (result.changes === 0) {
250
- console.log(`Policy '${name}' not found.`);
252
+ log(`Policy '${name}' not found.`);
251
253
  }
252
254
  else {
253
- console.log(`Policy '${name}' ${enable ? 'enabled' : 'disabled'}.`);
255
+ log(`Policy '${name}' ${enable ? 'enabled' : 'disabled'}.`);
254
256
  }
255
257
  }
256
258
  catch (err) {
257
- console.log(`Failed: ${err.message}`);
259
+ log(`Failed: ${err.message}`);
258
260
  }
259
261
  }
260
262
  export function sentinelSuggestions(action, id) {
261
263
  const storage = tryLoadStorage();
262
264
  if (!storage) {
263
- console.log('No suggestions found.');
265
+ log('No suggestions found.');
264
266
  return;
265
267
  }
266
268
  const db = storage.getDatabase();
267
269
  if (action === 'accept' && id) {
268
270
  try {
269
271
  db.prepare("UPDATE suggestions SET status = 'accepted', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
270
- console.log(`Suggestion ${id} accepted.`);
272
+ log(`Suggestion ${id} accepted.`);
271
273
  }
272
274
  catch (err) {
273
- console.log(`Failed: ${err.message}`);
275
+ log(`Failed: ${err.message}`);
274
276
  }
275
277
  return;
276
278
  }
277
279
  if (action === 'dismiss' && id) {
278
280
  try {
279
281
  db.prepare("UPDATE suggestions SET status = 'dismissed', resolvedAt = ? WHERE id = ?").run(new Date().toISOString(), id);
280
- console.log(`Suggestion ${id} dismissed.`);
282
+ log(`Suggestion ${id} dismissed.`);
281
283
  }
282
284
  catch (err) {
283
- console.log(`Failed: ${err.message}`);
285
+ log(`Failed: ${err.message}`);
284
286
  }
285
287
  return;
286
288
  }
@@ -288,20 +290,20 @@ export function sentinelSuggestions(action, id) {
288
290
  try {
289
291
  const rows = db.prepare("SELECT id, type, title, priority, riskLevel FROM suggestions WHERE status = 'pending' ORDER BY priority ASC LIMIT 20").all();
290
292
  if (rows.length === 0) {
291
- console.log('No pending suggestions.');
293
+ log('No pending suggestions.');
292
294
  return;
293
295
  }
294
- console.log(`Pending Suggestions (${rows.length}):`);
296
+ log(`Pending Suggestions (${rows.length}):`);
295
297
  for (const row of rows) {
296
- console.log(` [P${row.priority}] ${row.type}: ${row.title} (risk: ${row.riskLevel}) — id: ${row.id}`);
298
+ log(` [P${row.priority}] ${row.type}: ${row.title} (risk: ${row.riskLevel}) — id: ${row.id}`);
297
299
  }
298
300
  }
299
301
  catch (err) {
300
- console.log(`Failed: ${err.message}`);
302
+ log(`Failed: ${err.message}`);
301
303
  }
302
304
  }
303
305
  export function sentinelHelp() {
304
- console.log(`
306
+ log(`
305
307
  Sentinel Commands:
306
308
  vibe sentinel status Show sentinel status
307
309
  vibe sentinel audit [--type X] [--risk Y] [--days N]
@@ -1 +1 @@
1
- {"version":3,"file":"sentinel.js","sourceRoot":"","sources":["../../../src/cli/commands/sentinel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sentinel.js","sourceRoot":"","sources":["../../../src/cli/commands/sentinel.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ function isValidSkillTarget(target) {
31
31
  */
32
32
  export function skillsAdd(target) {
33
33
  if (!target) {
34
- console.log(`
34
+ log(`
35
35
  Usage: vibe skills add <owner/repo>
36
36
 
37
37
  Install skills from skills.sh ecosystem.
@@ -46,12 +46,12 @@ Examples:
46
46
  console.error(`❌ Invalid skill target: "${target}" (expected: owner/repo)`);
47
47
  process.exit(1);
48
48
  }
49
- console.log(`\nInstalling skill: ${target}...\n`);
49
+ log(`\nInstalling skill: ${target}...\n`);
50
50
  try {
51
51
  execSync(`npx skills add ${target} --agent claude-code`, {
52
52
  stdio: 'inherit',
53
53
  });
54
- console.log(`\n✅ Skill "${target}" installed successfully.`);
54
+ log(`\n✅ Skill "${target}" installed successfully.`);
55
55
  }
56
56
  catch {
57
57
  console.error(`\n❌ Failed to install skill "${target}".`);
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/slack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAoBrE;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAuBrD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAelC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAYhC"}
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/slack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAoBrE;AAED,wBAAgB,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAuBrD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAelC;AAED,wBAAgB,SAAS,IAAI,IAAI,CAYhC"}
@@ -5,6 +5,7 @@
5
5
  * 설정은 ~/.vibe/config.json channels.slack에 통합 저장
6
6
  */
7
7
  import { readGlobalConfig, patchGlobalConfig, } from '../../infra/lib/config/GlobalConfigManager.js';
8
+ import { log } from '../utils.js';
8
9
  function loadConfig() {
9
10
  return readGlobalConfig().channels?.slack ?? null;
10
11
  }
@@ -13,9 +14,9 @@ function saveConfig(config) {
13
14
  }
14
15
  export function slackSetup(botToken, appToken) {
15
16
  if (!botToken || !appToken) {
16
- console.log('Usage: vibe slack setup <bot-token> <app-token>');
17
- console.log(' bot-token: Slack Bot Token (xoxb-...)');
18
- console.log(' app-token: Slack App-Level Token (xapp-...)');
17
+ log('Usage: vibe slack setup <bot-token> <app-token>');
18
+ log(' bot-token: Slack Bot Token (xoxb-...)');
19
+ log(' app-token: Slack App-Level Token (xapp-...)');
19
20
  return;
20
21
  }
21
22
  const existing = loadConfig();
@@ -25,49 +26,49 @@ export function slackSetup(botToken, appToken) {
25
26
  allowedChannelIds: existing?.allowedChannelIds || [],
26
27
  };
27
28
  saveConfig(config);
28
- console.log('Slack tokens saved');
29
+ log('Slack tokens saved');
29
30
  if ((config.allowedChannelIds ?? []).length === 0) {
30
- console.log('No allowed channels set. Use: vibe slack channel <channel-id>');
31
+ log('No allowed channels set. Use: vibe slack channel <channel-id>');
31
32
  }
32
33
  }
33
34
  export function slackChannel(channelId) {
34
35
  if (!channelId) {
35
- console.log('Usage: vibe slack channel <channel-id>');
36
- console.log(' Add a Slack channel ID to the allow list');
36
+ log('Usage: vibe slack channel <channel-id>');
37
+ log(' Add a Slack channel ID to the allow list');
37
38
  return;
38
39
  }
39
40
  const config = loadConfig();
40
41
  if (!config) {
41
- console.log('Slack not configured. Run: vibe slack setup <bot-token> <app-token>');
42
+ log('Slack not configured. Run: vibe slack setup <bot-token> <app-token>');
42
43
  return;
43
44
  }
44
45
  const channelIds = config.allowedChannelIds ?? [];
45
46
  if (channelIds.includes(channelId)) {
46
- console.log(`Channel ID "${channelId}" is already in the allow list`);
47
+ log(`Channel ID "${channelId}" is already in the allow list`);
47
48
  return;
48
49
  }
49
50
  channelIds.push(channelId);
50
51
  config.allowedChannelIds = channelIds;
51
52
  saveConfig(config);
52
- console.log(`Channel ID "${channelId}" added to allow list`);
53
+ log(`Channel ID "${channelId}" added to allow list`);
53
54
  }
54
55
  export function slackStatus() {
55
56
  const config = loadConfig();
56
57
  if (!config) {
57
- console.log('Slack: not configured');
58
+ log('Slack: not configured');
58
59
  return;
59
60
  }
60
61
  const bot = config.botToken ?? '';
61
62
  const app = config.appToken ?? '';
62
63
  const botPreview = bot.slice(0, 8) + '...' + bot.slice(-4);
63
64
  const appPreview = app.slice(0, 8) + '...' + app.slice(-4);
64
- console.log(`Slack Bot Token: configured (${botPreview})`);
65
- console.log(`Slack App Token: configured (${appPreview})`);
65
+ log(`Slack Bot Token: configured (${botPreview})`);
66
+ log(`Slack App Token: configured (${appPreview})`);
66
67
  const channelIds = config.allowedChannelIds ?? [];
67
- console.log(`Allowed channels: ${channelIds.length > 0 ? channelIds.join(', ') : 'none'}`);
68
+ log(`Allowed channels: ${channelIds.length > 0 ? channelIds.join(', ') : 'none'}`);
68
69
  }
69
70
  export function slackHelp() {
70
- console.log(`
71
+ log(`
71
72
  Vibe Slack Commands:
72
73
  vibe slack setup <bot-token> <app-token> Set Slack tokens
73
74
  vibe slack channel <id> Add allowed channel ID
@@ -1 +1 @@
1
- {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/cli/commands/slack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/cli/commands/slack.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmLH,wBAAgB,YAAY,IAAI,IAAI,CASnC;AA4BD,wBAAgB,SAAS,IAAI,IAAI,CAYhC;AAoED,wBAAgB,YAAY,IAAI,IAAI,CASnC;AAMD,wBAAgB,SAAS,IAAI,IAAI,CAQhC"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/stats.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoLH,wBAAgB,YAAY,IAAI,IAAI,CASnC;AA4BD,wBAAgB,SAAS,IAAI,IAAI,CAYhC;AAoED,wBAAgB,YAAY,IAAI,IAAI,CASnC;AAMD,wBAAgB,SAAS,IAAI,IAAI,CAQhC"}
@@ -10,6 +10,7 @@ import fs from 'fs';
10
10
  import path from 'path';
11
11
  import os from 'os';
12
12
  import chalk from 'chalk';
13
+ import { log } from '../utils.js';
13
14
  // ============================================================================
14
15
  // Constants
15
16
  // ============================================================================
@@ -121,9 +122,9 @@ function padRight(str, len) {
121
122
  return str.length >= len ? str : str + ' '.repeat(len - str.length);
122
123
  }
123
124
  function printHeader(title) {
124
- console.log('');
125
- console.log(chalk.bold(`📊 ${title}`));
126
- console.log(DIVIDER);
125
+ log('');
126
+ log(chalk.bold(`📊 ${title}`));
127
+ log(DIVIDER);
127
128
  }
128
129
  // ============================================================================
129
130
  // Default stats (all-time summary)
@@ -136,27 +137,27 @@ function printSummarySection(events, decisions) {
136
137
  const runsLabel = successRate !== null
137
138
  ? `${totalRuns} (${successRate}% success)`
138
139
  : `${totalRuns}`;
139
- console.log(`${chalk.white(padRight('Sessions:', 16))} ${chalk.cyan(sessions)}`);
140
- console.log(`${chalk.white(padRight('Skill Runs:', 16))} ${chalk.cyan(runsLabel)}`);
140
+ log(`${chalk.white(padRight('Sessions:', 16))} ${chalk.cyan(sessions)}`);
141
+ log(`${chalk.white(padRight('Skill Runs:', 16))} ${chalk.cyan(runsLabel)}`);
141
142
  if (avgDuration !== null) {
142
- console.log(`${chalk.white(padRight('Avg Duration:', 16))} ${chalk.cyan(`${avgDuration}s`)}`);
143
+ log(`${chalk.white(padRight('Avg Duration:', 16))} ${chalk.cyan(`${avgDuration}s`)}`);
143
144
  }
144
- console.log(`${chalk.white(padRight('Total Decisions:', 16))} ${chalk.cyan(decisions.length)}`);
145
+ log(`${chalk.white(padRight('Total Decisions:', 16))} ${chalk.cyan(decisions.length)}`);
145
146
  }
146
147
  function printTopSkills(summaries) {
147
148
  if (summaries.length === 0) {
148
- console.log(chalk.dim(' No skill data yet.'));
149
+ log(chalk.dim(' No skill data yet.'));
149
150
  return;
150
151
  }
151
- console.log('');
152
- console.log(chalk.bold('Top Skills:'));
152
+ log('');
153
+ log(chalk.bold('Top Skills:'));
153
154
  const top = summaries.slice(0, TOP_SKILLS_COUNT);
154
155
  top.forEach((s, i) => {
155
156
  const rank = chalk.dim(` ${i + 1}.`);
156
157
  const name = chalk.white(padRight(s.skill, 18));
157
158
  const runs = chalk.cyan(`${s.count} runs`);
158
159
  const rate = formatSuccessRate(s.successCount, s.count);
159
- console.log(`${rank} ${name} ${runs} (${rate})`);
160
+ log(`${rank} ${name} ${runs} (${rate})`);
160
161
  });
161
162
  }
162
163
  export function statsDefault() {
@@ -166,14 +167,14 @@ export function statsDefault() {
166
167
  printHeader('Vibe Stats');
167
168
  printSummarySection(events, decisions);
168
169
  printTopSkills(summaries);
169
- console.log('');
170
+ log('');
170
171
  }
171
172
  // ============================================================================
172
173
  // --week: Last 7 days with day-by-day breakdown
173
174
  // ============================================================================
174
175
  function printWeeklyBreakdown(events) {
175
- console.log('');
176
- console.log(chalk.bold('Day-by-Day Breakdown:'));
176
+ log('');
177
+ log(chalk.bold('Day-by-Day Breakdown:'));
177
178
  const today = new Date();
178
179
  for (let i = 6; i >= 0; i--) {
179
180
  const date = new Date(today);
@@ -186,7 +187,7 @@ function printWeeklyBreakdown(events) {
186
187
  const rate = dayEvents.length > 0
187
188
  ? ` (${formatSuccessRate(successCount, dayEvents.length)})`
188
189
  : '';
189
- console.log(` ${label} ${count}${rate}`);
190
+ log(` ${label} ${count}${rate}`);
190
191
  }
191
192
  }
192
193
  export function statsWeek() {
@@ -199,7 +200,7 @@ export function statsWeek() {
199
200
  printSummarySection(events, decisions);
200
201
  printTopSkills(summaries);
201
202
  printWeeklyBreakdown(events);
202
- console.log('');
203
+ log('');
203
204
  }
204
205
  // ============================================================================
205
206
  // --quality: Quality trends
@@ -207,11 +208,11 @@ export function statsWeek() {
207
208
  function printReviewStats(spans) {
208
209
  const reviewSpans = spans.filter(s => s.type === 'review');
209
210
  const p1Spans = reviewSpans.filter(s => s.attributes['p1_count'] !== undefined && Number(s.attributes['p1_count']) > 0);
210
- console.log(chalk.bold('Review Quality:'));
211
- console.log(` ${chalk.white(padRight('Review spans:', 20))} ${chalk.cyan(reviewSpans.length)}`);
212
- console.log(` ${chalk.white(padRight('With P1 issues:', 20))} ${chalk.red(p1Spans.length)}`);
211
+ log(chalk.bold('Review Quality:'));
212
+ log(` ${chalk.white(padRight('Review spans:', 20))} ${chalk.cyan(reviewSpans.length)}`);
213
+ log(` ${chalk.white(padRight('With P1 issues:', 20))} ${chalk.red(p1Spans.length)}`);
213
214
  const errorSpans = spans.filter(s => s.status === 'error');
214
- console.log(` ${chalk.white(padRight('Error spans:', 20))} ${chalk.yellow(errorSpans.length)}`);
215
+ log(` ${chalk.white(padRight('Error spans:', 20))} ${chalk.yellow(errorSpans.length)}`);
215
216
  }
216
217
  function printErrorTypes(spans) {
217
218
  const errorSpans = spans.filter(s => s.status === 'error');
@@ -222,20 +223,20 @@ function printErrorTypes(spans) {
222
223
  const key = `${span.type}/${span.name}`;
223
224
  errorMap.set(key, (errorMap.get(key) ?? 0) + 1);
224
225
  }
225
- console.log('');
226
- console.log(chalk.bold('Most Common Errors:'));
226
+ log('');
227
+ log(chalk.bold('Most Common Errors:'));
227
228
  [...errorMap.entries()]
228
229
  .sort((a, b) => b[1] - a[1])
229
230
  .slice(0, 5)
230
231
  .forEach(([name, count]) => {
231
- console.log(` ${chalk.red(padRight(name, 30))} ${chalk.white(count)}x`);
232
+ log(` ${chalk.red(padRight(name, 30))} ${chalk.white(count)}x`);
232
233
  });
233
234
  }
234
235
  function printDecisionQuality(decisions) {
235
- console.log('');
236
- console.log(chalk.bold('Decision Success Rate by Category:'));
236
+ log('');
237
+ log(chalk.bold('Decision Success Rate by Category:'));
237
238
  if (decisions.length === 0) {
238
- console.log(chalk.dim(' No decision data yet.'));
239
+ log(chalk.dim(' No decision data yet.'));
239
240
  return;
240
241
  }
241
242
  const categoryMap = new Map();
@@ -253,7 +254,7 @@ function printDecisionQuality(decisions) {
253
254
  const rate = data.withOutcome > 0
254
255
  ? formatSuccessRate(data.success, data.withOutcome)
255
256
  : chalk.dim('no outcome');
256
- console.log(` ${chalk.white(padRight(category, 20))} ${chalk.cyan(`${data.total} decisions`)} ${rate}`);
257
+ log(` ${chalk.white(padRight(category, 20))} ${chalk.cyan(`${data.total} decisions`)} ${rate}`);
257
258
  }
258
259
  }
259
260
  export function statsQuality() {
@@ -263,13 +264,13 @@ export function statsQuality() {
263
264
  printReviewStats(spans);
264
265
  printErrorTypes(spans);
265
266
  printDecisionQuality(decisions);
266
- console.log('');
267
+ log('');
267
268
  }
268
269
  // ============================================================================
269
270
  // Help
270
271
  // ============================================================================
271
272
  export function statsHelp() {
272
- console.log(`
273
+ log(`
273
274
  Stats Commands:
274
275
  vibe stats All-time session summary
275
276
  vibe stats --week Last 7 days with daily breakdown