@lumenflow/cli 1.0.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.
Files changed (129) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +116 -0
  3. package/dist/gates.d.ts +41 -0
  4. package/dist/gates.d.ts.map +1 -0
  5. package/dist/gates.js +684 -0
  6. package/dist/gates.js.map +1 -0
  7. package/dist/initiative-add-wu.d.ts +22 -0
  8. package/dist/initiative-add-wu.d.ts.map +1 -0
  9. package/dist/initiative-add-wu.js +234 -0
  10. package/dist/initiative-add-wu.js.map +1 -0
  11. package/dist/initiative-create.d.ts +28 -0
  12. package/dist/initiative-create.d.ts.map +1 -0
  13. package/dist/initiative-create.js +172 -0
  14. package/dist/initiative-create.js.map +1 -0
  15. package/dist/initiative-edit.d.ts +34 -0
  16. package/dist/initiative-edit.d.ts.map +1 -0
  17. package/dist/initiative-edit.js +440 -0
  18. package/dist/initiative-edit.js.map +1 -0
  19. package/dist/initiative-list.d.ts +12 -0
  20. package/dist/initiative-list.d.ts.map +1 -0
  21. package/dist/initiative-list.js +101 -0
  22. package/dist/initiative-list.js.map +1 -0
  23. package/dist/initiative-status.d.ts +11 -0
  24. package/dist/initiative-status.d.ts.map +1 -0
  25. package/dist/initiative-status.js +221 -0
  26. package/dist/initiative-status.js.map +1 -0
  27. package/dist/mem-checkpoint.d.ts +16 -0
  28. package/dist/mem-checkpoint.d.ts.map +1 -0
  29. package/dist/mem-checkpoint.js +237 -0
  30. package/dist/mem-checkpoint.js.map +1 -0
  31. package/dist/mem-cleanup.d.ts +29 -0
  32. package/dist/mem-cleanup.d.ts.map +1 -0
  33. package/dist/mem-cleanup.js +267 -0
  34. package/dist/mem-cleanup.js.map +1 -0
  35. package/dist/mem-create.d.ts +17 -0
  36. package/dist/mem-create.d.ts.map +1 -0
  37. package/dist/mem-create.js +265 -0
  38. package/dist/mem-create.js.map +1 -0
  39. package/dist/mem-inbox.d.ts +35 -0
  40. package/dist/mem-inbox.d.ts.map +1 -0
  41. package/dist/mem-inbox.js +373 -0
  42. package/dist/mem-inbox.js.map +1 -0
  43. package/dist/mem-init.d.ts +15 -0
  44. package/dist/mem-init.d.ts.map +1 -0
  45. package/dist/mem-init.js +146 -0
  46. package/dist/mem-init.js.map +1 -0
  47. package/dist/mem-ready.d.ts +16 -0
  48. package/dist/mem-ready.d.ts.map +1 -0
  49. package/dist/mem-ready.js +224 -0
  50. package/dist/mem-ready.js.map +1 -0
  51. package/dist/mem-signal.d.ts +16 -0
  52. package/dist/mem-signal.d.ts.map +1 -0
  53. package/dist/mem-signal.js +204 -0
  54. package/dist/mem-signal.js.map +1 -0
  55. package/dist/mem-start.d.ts +16 -0
  56. package/dist/mem-start.d.ts.map +1 -0
  57. package/dist/mem-start.js +158 -0
  58. package/dist/mem-start.js.map +1 -0
  59. package/dist/mem-summarize.d.ts +22 -0
  60. package/dist/mem-summarize.d.ts.map +1 -0
  61. package/dist/mem-summarize.js +213 -0
  62. package/dist/mem-summarize.js.map +1 -0
  63. package/dist/mem-triage.d.ts +22 -0
  64. package/dist/mem-triage.d.ts.map +1 -0
  65. package/dist/mem-triage.js +328 -0
  66. package/dist/mem-triage.js.map +1 -0
  67. package/dist/spawn-list.d.ts +16 -0
  68. package/dist/spawn-list.d.ts.map +1 -0
  69. package/dist/spawn-list.js +140 -0
  70. package/dist/spawn-list.js.map +1 -0
  71. package/dist/wu-block.d.ts +16 -0
  72. package/dist/wu-block.d.ts.map +1 -0
  73. package/dist/wu-block.js +241 -0
  74. package/dist/wu-block.js.map +1 -0
  75. package/dist/wu-claim.d.ts +32 -0
  76. package/dist/wu-claim.d.ts.map +1 -0
  77. package/dist/wu-claim.js +1106 -0
  78. package/dist/wu-claim.js.map +1 -0
  79. package/dist/wu-cleanup.d.ts +17 -0
  80. package/dist/wu-cleanup.d.ts.map +1 -0
  81. package/dist/wu-cleanup.js +194 -0
  82. package/dist/wu-cleanup.js.map +1 -0
  83. package/dist/wu-create.d.ts +38 -0
  84. package/dist/wu-create.d.ts.map +1 -0
  85. package/dist/wu-create.js +520 -0
  86. package/dist/wu-create.js.map +1 -0
  87. package/dist/wu-deps.d.ts +13 -0
  88. package/dist/wu-deps.d.ts.map +1 -0
  89. package/dist/wu-deps.js +119 -0
  90. package/dist/wu-deps.js.map +1 -0
  91. package/dist/wu-done.d.ts +153 -0
  92. package/dist/wu-done.d.ts.map +1 -0
  93. package/dist/wu-done.js +2096 -0
  94. package/dist/wu-done.js.map +1 -0
  95. package/dist/wu-edit.d.ts +29 -0
  96. package/dist/wu-edit.d.ts.map +1 -0
  97. package/dist/wu-edit.js +852 -0
  98. package/dist/wu-edit.js.map +1 -0
  99. package/dist/wu-infer-lane.d.ts +17 -0
  100. package/dist/wu-infer-lane.d.ts.map +1 -0
  101. package/dist/wu-infer-lane.js +135 -0
  102. package/dist/wu-infer-lane.js.map +1 -0
  103. package/dist/wu-preflight.d.ts +47 -0
  104. package/dist/wu-preflight.d.ts.map +1 -0
  105. package/dist/wu-preflight.js +167 -0
  106. package/dist/wu-preflight.js.map +1 -0
  107. package/dist/wu-prune.d.ts +16 -0
  108. package/dist/wu-prune.d.ts.map +1 -0
  109. package/dist/wu-prune.js +259 -0
  110. package/dist/wu-prune.js.map +1 -0
  111. package/dist/wu-repair.d.ts +60 -0
  112. package/dist/wu-repair.d.ts.map +1 -0
  113. package/dist/wu-repair.js +226 -0
  114. package/dist/wu-repair.js.map +1 -0
  115. package/dist/wu-spawn-completion.d.ts +10 -0
  116. package/dist/wu-spawn-completion.js +30 -0
  117. package/dist/wu-spawn.d.ts +168 -0
  118. package/dist/wu-spawn.d.ts.map +1 -0
  119. package/dist/wu-spawn.js +1327 -0
  120. package/dist/wu-spawn.js.map +1 -0
  121. package/dist/wu-unblock.d.ts +16 -0
  122. package/dist/wu-unblock.d.ts.map +1 -0
  123. package/dist/wu-unblock.js +234 -0
  124. package/dist/wu-unblock.js.map +1 -0
  125. package/dist/wu-validate.d.ts +16 -0
  126. package/dist/wu-validate.d.ts.map +1 -0
  127. package/dist/wu-validate.js +193 -0
  128. package/dist/wu-validate.js.map +1 -0
  129. package/package.json +92 -0
@@ -0,0 +1,373 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Inbox CLI (WU-1474)
4
+ *
5
+ * Read coordination signals from other agents for real-time awareness
6
+ * of parallel agent progress. Filter by lane, WU, or time range.
7
+ * Supports watch mode for continuous monitoring.
8
+ *
9
+ * Includes audit logging to .beacon/telemetry/tools.ndjson.
10
+ *
11
+ * WU-2202: Added dependency validation before operations to prevent silent
12
+ * failures when node_modules is corrupted or incomplete.
13
+ *
14
+ * Usage:
15
+ * pnpm mem:inbox [--lane <name>] [--wu <id>] [--since <time>] [--watch]
16
+ *
17
+ * @see {@link tools/lib/mem-signal-core.mjs} - Core logic
18
+ * @see {@link tools/__tests__/mem-inbox.test.mjs} - Tests
19
+ */
20
+ import fs from 'node:fs/promises';
21
+ import path from 'node:path';
22
+ import ms from 'ms';
23
+ import { loadSignals, markSignalsAsRead } from '@lumenflow/memory/dist/mem-signal-core.js';
24
+ import { createWUParser, WU_OPTIONS } from '@lumenflow/core/dist/arg-parser.js';
25
+ import { EXIT_CODES } from '@lumenflow/core/dist/wu-constants.js';
26
+ import { validateInboxDependencies, formatDependencyError, } from '@lumenflow/core/dist/dependency-validator.js';
27
+ /**
28
+ * Log prefix for mem:inbox output
29
+ */
30
+ const LOG_PREFIX = '[mem:inbox]';
31
+ /**
32
+ * Tool name for audit logging
33
+ */
34
+ const TOOL_NAME = 'mem:inbox';
35
+ /**
36
+ * Audit log file path
37
+ */
38
+ const AUDIT_LOG_PATH = '.beacon/telemetry/tools.ndjson';
39
+ /**
40
+ * Watch mode polling interval in milliseconds
41
+ */
42
+ const WATCH_INTERVAL_MS = 1000;
43
+ /**
44
+ * CLI argument options specific to mem:inbox
45
+ */
46
+ const CLI_OPTIONS = {
47
+ since: {
48
+ name: 'since',
49
+ flags: '-s, --since <time>',
50
+ description: 'Filter signals since time (e.g., "1h", "30m", "2025-12-09")',
51
+ },
52
+ watch: {
53
+ name: 'watch',
54
+ flags: '-w, --watch',
55
+ description: 'Continuously monitor for new signals',
56
+ },
57
+ quiet: {
58
+ name: 'quiet',
59
+ flags: '-q, --quiet',
60
+ description: 'Suppress output except signal content',
61
+ },
62
+ noMark: {
63
+ name: 'noMark',
64
+ flags: '--no-mark',
65
+ description: 'Do not mark signals as read after display',
66
+ isNegated: true,
67
+ },
68
+ count: {
69
+ name: 'count',
70
+ flags: '-c, --count',
71
+ description: 'Output only signal count (lightweight polling for orchestrators)',
72
+ },
73
+ };
74
+ /**
75
+ * Write audit log entry for tool execution
76
+ *
77
+ * @param {string} baseDir - Base directory
78
+ * @param {object} entry - Audit log entry
79
+ */
80
+ async function writeAuditLog(baseDir, entry) {
81
+ try {
82
+ const logPath = path.join(baseDir, AUDIT_LOG_PATH);
83
+ const logDir = path.dirname(logPath);
84
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool creates known directory
85
+ await fs.mkdir(logDir, { recursive: true });
86
+ const line = `${JSON.stringify(entry)}\n`;
87
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool writes audit log
88
+ await fs.appendFile(logPath, line, 'utf-8');
89
+ }
90
+ catch {
91
+ // Audit logging is non-fatal - silently ignore errors
92
+ }
93
+ }
94
+ /**
95
+ * Format signal count for --count flag output
96
+ * WU-2401: Lightweight polling for orchestrators
97
+ *
98
+ * @param {number} count - Number of unread signals
99
+ * @returns {string} Formatted count string
100
+ */
101
+ export function formatCount(count) {
102
+ return `${count} unread signal(s)`;
103
+ }
104
+ /**
105
+ * Parse relative time string to Date object
106
+ * WU-1849: Replaced custom regex with ms package
107
+ *
108
+ * @param {string} timeStr - Time string like "1h", "30m", "2d", or ISO date
109
+ * @returns {Date} Parsed date
110
+ */
111
+ export function parseTimeString(timeStr) {
112
+ // Try using ms package for relative time parsing (e.g., "1h", "30m", "2d", "1d")
113
+ const msValue = ms(timeStr);
114
+ if (typeof msValue === 'number') {
115
+ return new Date(Date.now() - msValue);
116
+ }
117
+ // Try ISO date or other date format
118
+ const date = new Date(timeStr);
119
+ if (isNaN(date.getTime())) {
120
+ throw new Error(`Invalid time format: ${timeStr}. Use "1h", "30m", "2d", or ISO date.`);
121
+ }
122
+ return date;
123
+ }
124
+ /**
125
+ * Format a signal for display
126
+ *
127
+ * @param {object} signal - Signal object
128
+ * @returns {string} Formatted signal string
129
+ */
130
+ function formatSignal(signal) {
131
+ const timestamp = new Date(signal.created_at).toLocaleString();
132
+ const scope = [];
133
+ if (signal.wu_id) {
134
+ scope.push(signal.wu_id);
135
+ }
136
+ if (signal.lane) {
137
+ scope.push(signal.lane);
138
+ }
139
+ const scopeStr = scope.length > 0 ? ` [${scope.join(' | ')}]` : '';
140
+ const readIndicator = signal.read ? ' (read)' : '';
141
+ return `${timestamp}${scopeStr}${readIndicator}\n ${signal.id}: ${signal.message}`;
142
+ }
143
+ /**
144
+ * Display signals to console
145
+ *
146
+ * @param {object[]} signals - Array of signal objects
147
+ * @param {boolean} quiet - Suppress headers
148
+ */
149
+ function displaySignals(signals, quiet) {
150
+ if (signals.length === 0) {
151
+ if (!quiet) {
152
+ console.log(`${LOG_PREFIX} No signals found`);
153
+ }
154
+ return;
155
+ }
156
+ if (!quiet) {
157
+ console.log(`${LOG_PREFIX} ${signals.length} signal(s)\n`);
158
+ }
159
+ for (const signal of signals) {
160
+ console.log(formatSignal(signal));
161
+ console.log('');
162
+ }
163
+ }
164
+ /**
165
+ * Run inbox check once and optionally mark as read
166
+ *
167
+ * @param {string} baseDir - Project base directory
168
+ * @param {object} options - Filter options
169
+ * @param {boolean} markAsRead - Whether to mark signals as read
170
+ * @returns {Promise<object[]>} Signals found
171
+ */
172
+ async function checkInbox(baseDir, options, markAsRead) {
173
+ const signals = await loadSignals(baseDir, options);
174
+ if (markAsRead && signals.length > 0) {
175
+ const signalIds = signals.map((s) => s.id);
176
+ await markSignalsAsRead(baseDir, signalIds);
177
+ }
178
+ return signals;
179
+ }
180
+ /**
181
+ * Run watch mode - continuously poll for new signals
182
+ *
183
+ * @param {string} baseDir - Project base directory
184
+ * @param {object} filterOptions - Filter options
185
+ * @param {boolean} markAsRead - Whether to mark signals as read
186
+ * @param {boolean} quiet - Suppress headers
187
+ */
188
+ async function runWatchMode(baseDir, filterOptions, markAsRead, quiet) {
189
+ if (!quiet) {
190
+ console.log(`${LOG_PREFIX} Watch mode started (Ctrl+C to exit)\n`);
191
+ }
192
+ // Track the last check time to only show new signals
193
+ let lastCheckTime = new Date();
194
+ // Initial check with original filters
195
+ const initialSignals = await checkInbox(baseDir, filterOptions, markAsRead);
196
+ displaySignals(initialSignals, quiet);
197
+ // Poll for new signals
198
+ const poll = async () => {
199
+ try {
200
+ // Check for signals since last check, combined with original filters
201
+ const watchOptions = {
202
+ ...filterOptions,
203
+ since: lastCheckTime,
204
+ unreadOnly: true,
205
+ };
206
+ const newSignals = await checkInbox(baseDir, watchOptions, markAsRead);
207
+ if (newSignals.length > 0) {
208
+ console.log(`\n${LOG_PREFIX} ${newSignals.length} new signal(s)\n`);
209
+ displaySignals(newSignals, true);
210
+ }
211
+ lastCheckTime = new Date();
212
+ }
213
+ catch (error) {
214
+ console.error(`${LOG_PREFIX} Watch error: ${error.message}`);
215
+ }
216
+ };
217
+ // Set up polling interval
218
+ const intervalId = globalThis.setInterval(poll, WATCH_INTERVAL_MS);
219
+ // Handle graceful shutdown
220
+ const cleanup = () => {
221
+ globalThis.clearInterval(intervalId);
222
+ if (!quiet) {
223
+ console.log(`\n${LOG_PREFIX} Watch mode stopped`);
224
+ }
225
+ process.exit(EXIT_CODES.SUCCESS);
226
+ };
227
+ process.on('SIGINT', cleanup);
228
+ process.on('SIGTERM', cleanup);
229
+ }
230
+ /**
231
+ * Parse CLI arguments
232
+ *
233
+ * @returns {object} Parsed arguments
234
+ */
235
+ function parseArguments() {
236
+ return createWUParser({
237
+ name: 'mem-inbox',
238
+ description: 'Read coordination signals from other agents',
239
+ options: [
240
+ WU_OPTIONS.wu,
241
+ WU_OPTIONS.lane,
242
+ CLI_OPTIONS.since,
243
+ CLI_OPTIONS.watch,
244
+ CLI_OPTIONS.quiet,
245
+ CLI_OPTIONS.noMark,
246
+ CLI_OPTIONS.count,
247
+ ],
248
+ required: [],
249
+ allowPositionalId: false,
250
+ });
251
+ }
252
+ function buildFilterOptions(args) {
253
+ const filterOptions = {
254
+ unreadOnly: true, // Default to unread only
255
+ };
256
+ if (args.wu) {
257
+ filterOptions.wuId = args.wu;
258
+ }
259
+ if (args.lane) {
260
+ filterOptions.lane = args.lane;
261
+ }
262
+ if (args.since) {
263
+ filterOptions.since = parseTimeString(args.since);
264
+ }
265
+ return filterOptions;
266
+ }
267
+ /**
268
+ * WU-2401: Run count mode - output only signal count
269
+ *
270
+ * @param {string} baseDir - Project base directory
271
+ * @param {object} filterOptions - Filter options
272
+ * @returns {Promise<number>} Signal count
273
+ */
274
+ async function runCountMode(baseDir, filterOptions) {
275
+ const signals = await loadSignals(baseDir, filterOptions);
276
+ const count = signals.length;
277
+ console.log(formatCount(count));
278
+ return count;
279
+ }
280
+ /**
281
+ * Run standard check mode - display signals and optionally mark as read
282
+ *
283
+ * @param {string} baseDir - Project base directory
284
+ * @param {object} filterOptions - Filter options
285
+ * @param {boolean} markAsRead - Whether to mark signals as read
286
+ * @param {boolean} quiet - Suppress headers
287
+ * @returns {Promise<number>} Signal count
288
+ */
289
+ async function runStandardMode(baseDir, filterOptions, markAsRead, quiet) {
290
+ const signals = await checkInbox(baseDir, filterOptions, markAsRead);
291
+ displaySignals(signals, quiet);
292
+ return signals.length;
293
+ }
294
+ /**
295
+ * Main CLI entry point
296
+ */
297
+ async function main() {
298
+ // WU-2202: Validate dependencies BEFORE any other operation
299
+ const depResult = await validateInboxDependencies();
300
+ if (!depResult.valid) {
301
+ console.error(formatDependencyError('mem:inbox', depResult.missing));
302
+ process.exit(EXIT_CODES.ERROR);
303
+ }
304
+ const args = parseArguments();
305
+ const baseDir = process.cwd();
306
+ const startedAt = new Date().toISOString();
307
+ const startTime = Date.now();
308
+ // Build filter options
309
+ let filterOptions;
310
+ try {
311
+ filterOptions = buildFilterOptions(args);
312
+ }
313
+ catch (error) {
314
+ console.error(`${LOG_PREFIX} Error: ${error.message}`);
315
+ process.exit(EXIT_CODES.ERROR);
316
+ }
317
+ // Validate mode combinations
318
+ if (args.count && args.watch) {
319
+ console.error(`${LOG_PREFIX} Error: --count and --watch cannot be used together`);
320
+ process.exit(EXIT_CODES.ERROR);
321
+ }
322
+ // Handle negated --no-mark option (Commander sets mark=false when --no-mark is used)
323
+ // In count mode, we never mark signals as read (lightweight polling)
324
+ const markAsRead = args.count ? false : args.mark !== false;
325
+ let signalCount = 0;
326
+ let error = null;
327
+ try {
328
+ if (args.count) {
329
+ signalCount = await runCountMode(baseDir, filterOptions);
330
+ }
331
+ else if (args.watch) {
332
+ await runWatchMode(baseDir, filterOptions, markAsRead, args.quiet);
333
+ }
334
+ else {
335
+ signalCount = await runStandardMode(baseDir, filterOptions, markAsRead, args.quiet);
336
+ }
337
+ }
338
+ catch (err) {
339
+ error = err.message;
340
+ }
341
+ const durationMs = Date.now() - startTime;
342
+ // Log audit entry (only for non-watch mode since watch runs indefinitely)
343
+ if (!args.watch) {
344
+ await writeAuditLog(baseDir, {
345
+ tool: TOOL_NAME,
346
+ status: error ? 'failed' : 'success',
347
+ startedAt,
348
+ completedAt: new Date().toISOString(),
349
+ durationMs,
350
+ input: {
351
+ wuId: args.wu,
352
+ lane: args.lane,
353
+ since: args.since,
354
+ watch: args.watch,
355
+ quiet: args.quiet,
356
+ count: args.count,
357
+ markAsRead,
358
+ },
359
+ output: {
360
+ signalCount,
361
+ },
362
+ error: error ? { message: error } : null,
363
+ });
364
+ }
365
+ if (error) {
366
+ console.error(`${LOG_PREFIX} Error: ${error}`);
367
+ process.exit(EXIT_CODES.ERROR);
368
+ }
369
+ }
370
+ main().catch((e) => {
371
+ console.error(`${LOG_PREFIX} ${e.message}`);
372
+ process.exit(EXIT_CODES.ERROR);
373
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-inbox.js","sourceRoot":"","sources":["../src/mem-inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Init CLI (WU-1464)
4
+ *
5
+ * Initialize memory layer in the repository.
6
+ * Creates .beacon/memory/ directory with memory.jsonl and config.yaml.
7
+ *
8
+ * Includes audit logging to .beacon/telemetry/tools.ndjson.
9
+ *
10
+ * Usage:
11
+ * pnpm mem:init [--base-dir <path>] [--quiet]
12
+ *
13
+ * @see {@link tools/lib/mem-init-core.mjs} - Core logic
14
+ */
15
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-init.d.ts","sourceRoot":"","sources":["../src/mem-init.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Init CLI (WU-1464)
4
+ *
5
+ * Initialize memory layer in the repository.
6
+ * Creates .beacon/memory/ directory with memory.jsonl and config.yaml.
7
+ *
8
+ * Includes audit logging to .beacon/telemetry/tools.ndjson.
9
+ *
10
+ * Usage:
11
+ * pnpm mem:init [--base-dir <path>] [--quiet]
12
+ *
13
+ * @see {@link tools/lib/mem-init-core.mjs} - Core logic
14
+ */
15
+ import fs from 'node:fs/promises';
16
+ import path from 'node:path';
17
+ import { initMemory } from '@lumenflow/memory/dist/mem-init-core.js';
18
+ import { createWUParser } from '@lumenflow/core/dist/arg-parser.js';
19
+ import { EXIT_CODES, STRING_LITERALS } from '@lumenflow/core/dist/wu-constants.js';
20
+ /**
21
+ * Log prefix for mem:init output
22
+ */
23
+ const LOG_PREFIX = '[mem:init]';
24
+ /**
25
+ * Tool name for audit logging
26
+ */
27
+ const TOOL_NAME = 'mem:init';
28
+ /**
29
+ * Audit log file path
30
+ */
31
+ const AUDIT_LOG_PATH = '.beacon/telemetry/tools.ndjson';
32
+ /**
33
+ * Write audit log entry for tool execution
34
+ *
35
+ * @param {string} baseDir - Base directory
36
+ * @param {object} entry - Audit log entry
37
+ */
38
+ async function writeAuditLog(baseDir, entry) {
39
+ try {
40
+ const logPath = path.join(baseDir, AUDIT_LOG_PATH);
41
+ const logDir = path.dirname(logPath);
42
+ // Ensure telemetry directory exists
43
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool creates known directory
44
+ await fs.mkdir(logDir, { recursive: true });
45
+ // Append NDJSON entry
46
+ const line = `${JSON.stringify(entry)}\n`;
47
+ // eslint-disable-next-line security/detect-non-literal-fs-filename -- CLI tool writes audit log
48
+ await fs.appendFile(logPath, line, 'utf-8');
49
+ }
50
+ catch {
51
+ // Audit logging is non-fatal - silently ignore errors
52
+ }
53
+ }
54
+ /**
55
+ * CLI argument options
56
+ */
57
+ const CLI_OPTIONS = {
58
+ baseDir: {
59
+ name: 'baseDir',
60
+ flags: '-d, --base-dir <path>',
61
+ description: 'Base directory to initialize (defaults to current directory)',
62
+ },
63
+ quiet: {
64
+ name: 'quiet',
65
+ flags: '-q, --quiet',
66
+ description: 'Suppress output except errors',
67
+ },
68
+ };
69
+ /**
70
+ * Main CLI entry point
71
+ */
72
+ async function main() {
73
+ const args = createWUParser({
74
+ name: 'mem-init',
75
+ description: 'Initialize memory layer in repository',
76
+ options: [CLI_OPTIONS.baseDir, CLI_OPTIONS.quiet],
77
+ });
78
+ const baseDir = args.baseDir || process.cwd();
79
+ const startedAt = new Date().toISOString();
80
+ const startTime = Date.now();
81
+ let result;
82
+ let error = null;
83
+ try {
84
+ result = await initMemory(baseDir);
85
+ }
86
+ catch (err) {
87
+ error = err.message;
88
+ }
89
+ const durationMs = Date.now() - startTime;
90
+ // Write audit log entry
91
+ await writeAuditLog(baseDir, {
92
+ tool: TOOL_NAME,
93
+ status: error ? 'failed' : 'success',
94
+ startedAt,
95
+ completedAt: new Date().toISOString(),
96
+ durationMs,
97
+ input: { baseDir },
98
+ output: result
99
+ ? {
100
+ initialized: result.success,
101
+ alreadyInitialized: result.alreadyInitialized,
102
+ created: result.created,
103
+ }
104
+ : null,
105
+ error: error ? { message: error } : null,
106
+ });
107
+ if (error) {
108
+ console.error(`${LOG_PREFIX} Error: ${error}`);
109
+ process.exit(EXIT_CODES.ERROR);
110
+ }
111
+ if (args.quiet) {
112
+ process.exit(EXIT_CODES.SUCCESS);
113
+ }
114
+ // Output results
115
+ console.log(`${STRING_LITERALS.NEWLINE}${LOG_PREFIX} Memory layer initialization complete`);
116
+ console.log('');
117
+ if (result.alreadyInitialized) {
118
+ console.log('Status: Already initialized (no changes made)');
119
+ }
120
+ else {
121
+ console.log('Status: Initialized');
122
+ }
123
+ console.log('');
124
+ console.log('Paths:');
125
+ console.log(` Directory: ${result.paths.memoryDir}`);
126
+ console.log(` Memory file: ${result.paths.memoryJsonl}`);
127
+ console.log(` Config file: ${result.paths.configYaml}`);
128
+ if (!result.alreadyInitialized) {
129
+ console.log('');
130
+ console.log('Created:');
131
+ if (result.created.directory) {
132
+ console.log(' - .beacon/memory/ directory');
133
+ }
134
+ if (result.created.memoryJsonl) {
135
+ console.log(' - memory.jsonl (empty)');
136
+ }
137
+ if (result.created.configYaml) {
138
+ console.log(' - config.yaml (default settings)');
139
+ }
140
+ }
141
+ console.log('');
142
+ }
143
+ main().catch((e) => {
144
+ console.error(`${LOG_PREFIX} ${e.message}`);
145
+ process.exit(EXIT_CODES.ERROR);
146
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-init.js","sourceRoot":"","sources":["../src/mem-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Memory Ready CLI (WU-1468)
4
+ *
5
+ * Deterministic ready-work query for "what next?" oracle.
6
+ * Returns unblocked open nodes, ordered by priority then createdAt.
7
+ *
8
+ * Usage:
9
+ * pnpm mem:ready --wu WU-1234 [--type <type>] [--format <json|human>] [--quiet]
10
+ *
11
+ * Includes audit logging to .beacon/telemetry/tools.ndjson.
12
+ *
13
+ * @see {@link tools/lib/mem-ready-core.mjs} - Core logic
14
+ * @see {@link tools/__tests__/mem-ready.test.mjs} - Tests
15
+ */
16
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mem-ready.d.ts","sourceRoot":"","sources":["../src/mem-ready.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}