@helloworlkd/pam-cli 0.1.16

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 (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/commands/add.d.ts +3 -0
  4. package/dist/commands/add.d.ts.map +1 -0
  5. package/dist/commands/add.js +42 -0
  6. package/dist/commands/add.js.map +1 -0
  7. package/dist/commands/approve.d.ts +3 -0
  8. package/dist/commands/approve.d.ts.map +1 -0
  9. package/dist/commands/approve.js +16 -0
  10. package/dist/commands/approve.js.map +1 -0
  11. package/dist/commands/archive.d.ts +3 -0
  12. package/dist/commands/archive.d.ts.map +1 -0
  13. package/dist/commands/archive.js +16 -0
  14. package/dist/commands/archive.js.map +1 -0
  15. package/dist/commands/audit.d.ts +3 -0
  16. package/dist/commands/audit.d.ts.map +1 -0
  17. package/dist/commands/audit.js +62 -0
  18. package/dist/commands/audit.js.map +1 -0
  19. package/dist/commands/capture.d.ts +3 -0
  20. package/dist/commands/capture.d.ts.map +1 -0
  21. package/dist/commands/capture.js +39 -0
  22. package/dist/commands/capture.js.map +1 -0
  23. package/dist/commands/checkpoint.d.ts +3 -0
  24. package/dist/commands/checkpoint.d.ts.map +1 -0
  25. package/dist/commands/checkpoint.js +48 -0
  26. package/dist/commands/checkpoint.js.map +1 -0
  27. package/dist/commands/context.d.ts +3 -0
  28. package/dist/commands/context.d.ts.map +1 -0
  29. package/dist/commands/context.js +35 -0
  30. package/dist/commands/context.js.map +1 -0
  31. package/dist/commands/debug.d.ts +3 -0
  32. package/dist/commands/debug.d.ts.map +1 -0
  33. package/dist/commands/debug.js +58 -0
  34. package/dist/commands/debug.js.map +1 -0
  35. package/dist/commands/decay.d.ts +3 -0
  36. package/dist/commands/decay.d.ts.map +1 -0
  37. package/dist/commands/decay.js +73 -0
  38. package/dist/commands/decay.js.map +1 -0
  39. package/dist/commands/delete.d.ts +3 -0
  40. package/dist/commands/delete.d.ts.map +1 -0
  41. package/dist/commands/delete.js +31 -0
  42. package/dist/commands/delete.js.map +1 -0
  43. package/dist/commands/doctor.d.ts +3 -0
  44. package/dist/commands/doctor.d.ts.map +1 -0
  45. package/dist/commands/doctor.js +145 -0
  46. package/dist/commands/doctor.js.map +1 -0
  47. package/dist/commands/edit.d.ts +3 -0
  48. package/dist/commands/edit.d.ts.map +1 -0
  49. package/dist/commands/edit.js +35 -0
  50. package/dist/commands/edit.js.map +1 -0
  51. package/dist/commands/export-cmd.d.ts +3 -0
  52. package/dist/commands/export-cmd.d.ts.map +1 -0
  53. package/dist/commands/export-cmd.js +26 -0
  54. package/dist/commands/export-cmd.js.map +1 -0
  55. package/dist/commands/handoff.d.ts +3 -0
  56. package/dist/commands/handoff.d.ts.map +1 -0
  57. package/dist/commands/handoff.js +87 -0
  58. package/dist/commands/handoff.js.map +1 -0
  59. package/dist/commands/hook.d.ts +3 -0
  60. package/dist/commands/hook.d.ts.map +1 -0
  61. package/dist/commands/hook.js +92 -0
  62. package/dist/commands/hook.js.map +1 -0
  63. package/dist/commands/import-cmd.d.ts +3 -0
  64. package/dist/commands/import-cmd.d.ts.map +1 -0
  65. package/dist/commands/import-cmd.js +36 -0
  66. package/dist/commands/import-cmd.js.map +1 -0
  67. package/dist/commands/index-cmd.d.ts +3 -0
  68. package/dist/commands/index-cmd.d.ts.map +1 -0
  69. package/dist/commands/index-cmd.js +32 -0
  70. package/dist/commands/index-cmd.js.map +1 -0
  71. package/dist/commands/init.d.ts +3 -0
  72. package/dist/commands/init.d.ts.map +1 -0
  73. package/dist/commands/init.js +29 -0
  74. package/dist/commands/init.js.map +1 -0
  75. package/dist/commands/intelligence.d.ts +3 -0
  76. package/dist/commands/intelligence.d.ts.map +1 -0
  77. package/dist/commands/intelligence.js +165 -0
  78. package/dist/commands/intelligence.js.map +1 -0
  79. package/dist/commands/list.d.ts +3 -0
  80. package/dist/commands/list.d.ts.map +1 -0
  81. package/dist/commands/list.js +34 -0
  82. package/dist/commands/list.js.map +1 -0
  83. package/dist/commands/redact.d.ts +3 -0
  84. package/dist/commands/redact.d.ts.map +1 -0
  85. package/dist/commands/redact.js +25 -0
  86. package/dist/commands/redact.js.map +1 -0
  87. package/dist/commands/reject.d.ts +3 -0
  88. package/dist/commands/reject.d.ts.map +1 -0
  89. package/dist/commands/reject.js +16 -0
  90. package/dist/commands/reject.js.map +1 -0
  91. package/dist/commands/restore.d.ts +3 -0
  92. package/dist/commands/restore.d.ts.map +1 -0
  93. package/dist/commands/restore.js +16 -0
  94. package/dist/commands/restore.js.map +1 -0
  95. package/dist/commands/review.d.ts +3 -0
  96. package/dist/commands/review.d.ts.map +1 -0
  97. package/dist/commands/review.js +26 -0
  98. package/dist/commands/review.js.map +1 -0
  99. package/dist/commands/search.d.ts +3 -0
  100. package/dist/commands/search.d.ts.map +1 -0
  101. package/dist/commands/search.js +99 -0
  102. package/dist/commands/search.js.map +1 -0
  103. package/dist/commands/semantic.d.ts +3 -0
  104. package/dist/commands/semantic.d.ts.map +1 -0
  105. package/dist/commands/semantic.js +49 -0
  106. package/dist/commands/semantic.js.map +1 -0
  107. package/dist/commands/server.d.ts +3 -0
  108. package/dist/commands/server.d.ts.map +1 -0
  109. package/dist/commands/server.js +11 -0
  110. package/dist/commands/server.js.map +1 -0
  111. package/dist/commands/show.d.ts +3 -0
  112. package/dist/commands/show.d.ts.map +1 -0
  113. package/dist/commands/show.js +27 -0
  114. package/dist/commands/show.js.map +1 -0
  115. package/dist/commands/smoke-test.d.ts +3 -0
  116. package/dist/commands/smoke-test.d.ts.map +1 -0
  117. package/dist/commands/smoke-test.js +32 -0
  118. package/dist/commands/smoke-test.js.map +1 -0
  119. package/dist/commands/status.d.ts +3 -0
  120. package/dist/commands/status.d.ts.map +1 -0
  121. package/dist/commands/status.js +39 -0
  122. package/dist/commands/status.js.map +1 -0
  123. package/dist/commands/supersede.d.ts +3 -0
  124. package/dist/commands/supersede.d.ts.map +1 -0
  125. package/dist/commands/supersede.js +78 -0
  126. package/dist/commands/supersede.js.map +1 -0
  127. package/dist/commands/ui.d.ts +3 -0
  128. package/dist/commands/ui.d.ts.map +1 -0
  129. package/dist/commands/ui.js +159 -0
  130. package/dist/commands/ui.js.map +1 -0
  131. package/dist/commands/upgrade-state.d.ts +24 -0
  132. package/dist/commands/upgrade-state.d.ts.map +1 -0
  133. package/dist/commands/upgrade-state.js +52 -0
  134. package/dist/commands/upgrade-state.js.map +1 -0
  135. package/dist/commands/upgrade.d.ts +3 -0
  136. package/dist/commands/upgrade.d.ts.map +1 -0
  137. package/dist/commands/upgrade.js +78 -0
  138. package/dist/commands/upgrade.js.map +1 -0
  139. package/dist/index.d.ts +3 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +73 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/mcp/server.d.ts +2 -0
  144. package/dist/mcp/server.d.ts.map +1 -0
  145. package/dist/mcp/server.js +2 -0
  146. package/dist/mcp/server.js.map +1 -0
  147. package/dist/self-upgrade.d.ts +3 -0
  148. package/dist/self-upgrade.d.ts.map +1 -0
  149. package/dist/self-upgrade.js +203 -0
  150. package/dist/self-upgrade.js.map +1 -0
  151. package/dist/version.d.ts +2 -0
  152. package/dist/version.d.ts.map +1 -0
  153. package/dist/version.js +15 -0
  154. package/dist/version.js.map +1 -0
  155. package/package.json +61 -0
  156. package/scripts/postinstall.mjs +128 -0
@@ -0,0 +1,31 @@
1
+ import { backupMemory, deleteMemory, getProjectMemoryPath } from '@helloworlkd/pam-core';
2
+ export function registerDeleteCommand(program) {
3
+ program
4
+ .command('delete <id>')
5
+ .description('Delete a memory')
6
+ .option('--physical', 'Physically remove the Markdown file and index row')
7
+ .option('--yes', 'Confirm physical deletion in non-interactive runs')
8
+ .action(async (id, options) => {
9
+ const basePath = getProjectMemoryPath(process.cwd());
10
+ if (options.physical && !options.yes) {
11
+ console.error(`Physical deletion requires --yes. Memory not deleted: ${id}`);
12
+ process.exit(1);
13
+ }
14
+ const backupPath = options.physical
15
+ ? await backupMemory(basePath, id, 'physical-delete')
16
+ : null;
17
+ const deleted = await deleteMemory(basePath, id, {
18
+ physical: options.physical,
19
+ backup: !backupPath,
20
+ });
21
+ if (!deleted) {
22
+ console.error(`Memory not found: ${id}`);
23
+ process.exit(1);
24
+ }
25
+ console.log(options.physical ? `Memory physically deleted: ${id}` : `Memory deleted: ${id}`);
26
+ if (backupPath) {
27
+ console.log(`Backup written: ${backupPath}`);
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAExF,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,YAAY,EAAE,mDAAmD,CAAC;SACzE,MAAM,CAAC,OAAO,EAAE,mDAAmD,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,EAAE,CAAC,CAAA;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ;YACjC,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,iBAAiB,CAAC;YACrD,CAAC,CAAC,IAAI,CAAA;QACR,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,CAAC,UAAU;SACpB,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAC5F,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerDoctorCommand(program: Command): void;
3
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAqHrD"}
@@ -0,0 +1,145 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { MemoryIndex, checkIndexConsistency, findMemoryBase, getProjectMemoryPath, scanMemoryFileIssues, } from '@helloworlkd/pam-core';
5
+ export function registerDoctorCommand(program) {
6
+ const doctor = program.command('doctor').description('Diagnose memory system health');
7
+ doctor
8
+ .command('check')
9
+ .description('Check consistency between Markdown files and SQLite index')
10
+ .action(async () => {
11
+ const basePath = getProjectMemoryPath(process.cwd());
12
+ console.log('Checking index consistency...');
13
+ const report = await checkIndexConsistency(basePath);
14
+ const issues = await scanMemoryFileIssues(basePath);
15
+ console.log(`\nFiles found: ${report.totalFiles}`);
16
+ console.log(`Indexed: ${report.totalIndexed}`);
17
+ if (report.missingInIndex.length > 0) {
18
+ console.log(`\nMissing from index (${report.missingInIndex.length}):`);
19
+ for (const id of report.missingInIndex) {
20
+ console.log(` - ${id}`);
21
+ }
22
+ }
23
+ if (report.missingInFiles.length > 0) {
24
+ console.log(`\nMissing from files (${report.missingInFiles.length}):`);
25
+ for (const id of report.missingInFiles) {
26
+ console.log(` - ${id}`);
27
+ }
28
+ }
29
+ if (issues.length > 0) {
30
+ console.log(`\nInvalid Markdown files (${issues.length}):`);
31
+ for (const issue of issues) {
32
+ console.log(` - ${issue.path}: ${issue.error}`);
33
+ }
34
+ }
35
+ if (report.missingInIndex.length === 0 &&
36
+ report.missingInFiles.length === 0 &&
37
+ issues.length === 0) {
38
+ console.log('\nOK: Index and Markdown files are consistent');
39
+ }
40
+ });
41
+ doctor
42
+ .command('stats')
43
+ .description('Show memory statistics')
44
+ .action(() => {
45
+ const basePath = getProjectMemoryPath(process.cwd());
46
+ const index = new MemoryIndex(basePath);
47
+ const stats = index.getStats();
48
+ index.close();
49
+ console.log(`\nTotal memories: ${stats.total}`);
50
+ console.log(`Active: ${stats.active}`);
51
+ console.log(`Deleted: ${stats.deleted}`);
52
+ if (Object.keys(stats.byType).length > 0) {
53
+ console.log('\nBy type:');
54
+ for (const [type, count] of Object.entries(stats.byType)) {
55
+ console.log(` ${type}: ${count}`);
56
+ }
57
+ }
58
+ if (Object.keys(stats.byScope).length > 0) {
59
+ console.log('\nBy scope:');
60
+ for (const [scope, count] of Object.entries(stats.byScope)) {
61
+ console.log(` ${scope}: ${count}`);
62
+ }
63
+ }
64
+ if (Object.keys(stats.tags).length > 0) {
65
+ console.log('\nTags:');
66
+ for (const [tag, count] of Object.entries(stats.tags)) {
67
+ console.log(` ${tag}: ${count}`);
68
+ }
69
+ }
70
+ });
71
+ doctor
72
+ .command('integrations')
73
+ .description('Check local agent integration files and first-run readiness')
74
+ .action(async () => {
75
+ const cwd = process.cwd();
76
+ const memoryPath = findMemoryBase(cwd) ?? getProjectMemoryPath(cwd);
77
+ console.log('PAM integration doctor\n');
78
+ reportCheck('CLI command', 'pam server start');
79
+ reportCheck('.ai-memory store', existsSync(memoryPath) ? memoryPath : 'missing');
80
+ const checks = [
81
+ await checkTextFile(join(cwd, 'AGENTS.md'), ['PAM Memory', 'pam search']),
82
+ await checkTextFile(join(cwd, 'CLAUDE.md'), ['PAM Memory', 'pam search']),
83
+ await checkTextFile(join(cwd, '.github', 'copilot-instructions.md'), ['PAM Memory']),
84
+ await checkTextFile(join(cwd, '.cursor', 'rules', 'pam.mdc'), ['PAM Memory']),
85
+ await checkJsonFile(join(cwd, '.claude', 'settings.json'), ['pam hook record']),
86
+ await checkJsonFile(join(cwd, '.mcp.json'), ['server', 'start']),
87
+ await checkJsonFile(join(cwd, '.vscode', 'mcp.json'), ['server', 'start']),
88
+ await checkJsonFile(join(cwd, '.cursor', 'mcp.json'), ['server', 'start']),
89
+ ];
90
+ for (const check of checks) {
91
+ reportCheck(check.label, check.ok ? 'ok' : check.reason);
92
+ }
93
+ const failed = checks.filter((check) => !check.ok);
94
+ if (failed.length > 0) {
95
+ console.log('\nRun `pam init` to regenerate missing or stale project integrations.');
96
+ process.exitCode = 1;
97
+ return;
98
+ }
99
+ console.log('\nOK: Project integrations look ready. Reload your agent client if it was open.');
100
+ });
101
+ }
102
+ async function checkTextFile(filePath, required) {
103
+ if (!existsSync(filePath))
104
+ return { label: filePath, ok: false, reason: 'missing' };
105
+ const raw = await readFile(filePath, 'utf-8');
106
+ if (raw.includes('--project'))
107
+ return { label: filePath, ok: false, reason: 'uses --project' };
108
+ if (/Use [`']global[`']/.test(raw)) {
109
+ return { label: filePath, ok: false, reason: 'mentions unsupported global scope' };
110
+ }
111
+ const missing = required.filter((term) => !raw.includes(term));
112
+ return {
113
+ label: filePath,
114
+ ok: missing.length === 0,
115
+ reason: missing.length === 0 ? 'ok' : `missing ${missing.join(', ')}`,
116
+ };
117
+ }
118
+ async function checkJsonFile(filePath, required) {
119
+ if (!existsSync(filePath))
120
+ return { label: filePath, ok: false, reason: 'missing' };
121
+ try {
122
+ const raw = await readFile(filePath, 'utf-8');
123
+ JSON.parse(raw);
124
+ if (raw.includes('--project'))
125
+ return { label: filePath, ok: false, reason: 'uses --project' };
126
+ const missing = required.filter((term) => !raw.includes(term));
127
+ return {
128
+ label: filePath,
129
+ ok: missing.length === 0,
130
+ reason: missing.length === 0 ? 'ok' : `missing ${missing.join(', ')}`,
131
+ };
132
+ }
133
+ catch (error) {
134
+ return {
135
+ label: filePath,
136
+ ok: false,
137
+ reason: `invalid JSON: ${error instanceof Error ? error.message : String(error)}`,
138
+ };
139
+ }
140
+ }
141
+ function reportCheck(label, result) {
142
+ const ok = result !== 'missing' && result !== 'uses --project' && !result.startsWith('invalid');
143
+ console.log(`${ok ? 'OK' : 'FAIL'} ${label}: ${result}`);
144
+ }
145
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerEditCommand(program: Command): void;
3
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QAqCnD"}
@@ -0,0 +1,35 @@
1
+ import { updateMemory, getProjectMemoryPath, MEMORY_TYPES } from '@helloworlkd/pam-core';
2
+ export function registerEditCommand(program) {
3
+ program
4
+ .command('edit <id>')
5
+ .description('Edit a memory')
6
+ .option('-c, --content <content>', 'New content')
7
+ .option('--title <title>', 'New short display title')
8
+ .option('-t, --type <type>', `New type (${MEMORY_TYPES.join(', ')})`)
9
+ .option('--tags <tags>', 'New comma-separated tags')
10
+ .option('--concepts <concepts>', 'New comma-separated broad canonical concepts')
11
+ .action(async (id, options) => {
12
+ if (options.type && !MEMORY_TYPES.includes(options.type)) {
13
+ console.error(`Invalid type. Must be one of: ${MEMORY_TYPES.join(', ')}`);
14
+ process.exit(1);
15
+ }
16
+ const basePath = getProjectMemoryPath(process.cwd());
17
+ const tags = options.tags ? options.tags.split(',').map((t) => t.trim()) : undefined;
18
+ const concepts = options.concepts
19
+ ? options.concepts.split(',').map((concept) => concept.trim())
20
+ : undefined;
21
+ const memory = await updateMemory(basePath, id, {
22
+ content: options.content,
23
+ title: options.title,
24
+ type: options.type,
25
+ tags,
26
+ concepts,
27
+ });
28
+ if (!memory) {
29
+ console.error(`Memory not found: ${id}`);
30
+ process.exit(1);
31
+ }
32
+ console.log(`Memory updated: ${id}`);
33
+ });
34
+ }
35
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAExF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,yBAAyB,EAAE,aAAa,CAAC;SAChD,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,mBAAmB,EAAE,aAAa,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACpE,MAAM,CAAC,eAAe,EAAE,0BAA0B,CAAC;SACnD,MAAM,CAAC,uBAAuB,EAAE,8CAA8C,CAAC;SAC/E,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;QAC5B,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,iCAAiC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ;YAC/B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACtE,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI;YACJ,QAAQ;SACT,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerExportCommand(program: Command): void;
3
+ //# sourceMappingURL=export-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/export-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAwBrD"}
@@ -0,0 +1,26 @@
1
+ import { exportMemories, getProjectMemoryPath } from '@helloworlkd/pam-core';
2
+ import { resolve } from 'node:path';
3
+ export function registerExportCommand(program) {
4
+ program
5
+ .command('export <output>')
6
+ .description('Export memories to a file')
7
+ .option('-f, --format <format>', 'Export format (zip, json, markdown, sqlite)', 'zip')
8
+ .action(async (output, options) => {
9
+ const basePath = getProjectMemoryPath(process.cwd());
10
+ const outputPath = resolve(output);
11
+ console.log(`Exporting memories to ${outputPath}...`);
12
+ try {
13
+ await exportMemories({
14
+ format: options.format,
15
+ outputPath,
16
+ basePath,
17
+ });
18
+ console.log(`Export completed: ${outputPath}`);
19
+ }
20
+ catch (error) {
21
+ console.error(`Export failed: ${error}`);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ }
26
+ //# sourceMappingURL=export-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-cmd.js","sourceRoot":"","sources":["../../src/commands/export-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,uBAAuB,EAAE,6CAA6C,EAAE,KAAK,CAAC;SACrF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAElC,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,KAAK,CAAC,CAAA;QAErD,IAAI,CAAC;YACH,MAAM,cAAc,CAAC;gBACnB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU;gBACV,QAAQ;aACT,CAAC,CAAA;YAEF,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerHandoffCommand(program: Command): void;
3
+ //# sourceMappingURL=handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAsGtD"}
@@ -0,0 +1,87 @@
1
+ import { beginHandoff, acceptHandoff, getOpenHandoff, listHandoffs, getProjectMemoryPath, } from '@helloworlkd/pam-core';
2
+ export function registerHandoffCommand(program) {
3
+ const handoff = program.command('handoff').description('Cross-agent context transfer');
4
+ handoff
5
+ .command('begin')
6
+ .description('Begin a handoff for the next agent')
7
+ .option('-s, --summary <summary>', 'Summary of where you left off (required)')
8
+ .option('-a, --agent <agent>', 'Agent name (e.g. claude-code, codex)')
9
+ .option('-q, --questions <questions>', 'Open questions (comma-separated)')
10
+ .option('-n, --next-steps <steps>', 'Next steps (comma-separated)')
11
+ .action(async (options) => {
12
+ if (!options.summary) {
13
+ console.error('Error: --summary is required');
14
+ process.exit(1);
15
+ }
16
+ const projectPath = getProjectMemoryPath(process.cwd());
17
+ const basePath = projectPath;
18
+ const openQuestions = options.questions
19
+ ? options.questions.split(',').map((s) => s.trim())
20
+ : undefined;
21
+ const nextSteps = options.nextSteps
22
+ ? options.nextSteps.split(',').map((s) => s.trim())
23
+ : undefined;
24
+ const handoff = await beginHandoff(basePath, options.summary, options.agent, openQuestions, nextSteps, projectPath);
25
+ console.log(`Handoff created: ${handoff.id}`);
26
+ console.log(`\nSummary: ${handoff.summary}`);
27
+ if (handoff.open_questions && handoff.open_questions.length > 0) {
28
+ console.log(`\nOpen questions:`);
29
+ handoff.open_questions.forEach((q) => console.log(` - ${q}`));
30
+ }
31
+ if (handoff.next_steps && handoff.next_steps.length > 0) {
32
+ console.log(`\nNext steps:`);
33
+ handoff.next_steps.forEach((s) => console.log(` - ${s}`));
34
+ }
35
+ });
36
+ handoff
37
+ .command('accept')
38
+ .description('Accept an open handoff')
39
+ .option('-a, --agent <agent>', 'Agent name (e.g. claude-code, codex)')
40
+ .action(async (options) => {
41
+ const projectPath = getProjectMemoryPath(process.cwd());
42
+ const basePath = projectPath;
43
+ const openHandoff = await getOpenHandoff(basePath, projectPath);
44
+ if (!openHandoff) {
45
+ console.log('No open handoff found');
46
+ return;
47
+ }
48
+ const accepted = await acceptHandoff(basePath, openHandoff.id, options.agent);
49
+ if (!accepted) {
50
+ console.error('Failed to accept handoff');
51
+ process.exit(1);
52
+ }
53
+ console.log(`Handoff accepted: ${accepted.id}`);
54
+ console.log(`\nSummary: ${accepted.summary}`);
55
+ if (accepted.open_questions && accepted.open_questions.length > 0) {
56
+ console.log(`\nOpen questions:`);
57
+ accepted.open_questions.forEach((q) => console.log(` - ${q}`));
58
+ }
59
+ if (accepted.next_steps && accepted.next_steps.length > 0) {
60
+ console.log(`\nNext steps:`);
61
+ accepted.next_steps.forEach((s) => console.log(` - ${s}`));
62
+ }
63
+ });
64
+ handoff
65
+ .command('list')
66
+ .description('List all handoffs')
67
+ .option('--status <status>', 'Filter by status (open, accepted, expired)')
68
+ .action(async (options) => {
69
+ const projectPath = getProjectMemoryPath(process.cwd());
70
+ const basePath = projectPath;
71
+ const handoffs = await listHandoffs(basePath, options.status, projectPath);
72
+ if (handoffs.length === 0) {
73
+ console.log('No handoffs found');
74
+ return;
75
+ }
76
+ for (const h of handoffs) {
77
+ console.log(`${h.id} | ${h.status} | ${h.created_at}`);
78
+ console.log(` Summary: ${h.summary}`);
79
+ if (h.agent_from)
80
+ console.log(` From: ${h.agent_from}`);
81
+ if (h.agent_to)
82
+ console.log(` To: ${h.agent_to}`);
83
+ console.log('');
84
+ }
85
+ });
86
+ }
87
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerHookCommand(program: Command): void;
3
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAenC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+CnD"}
@@ -0,0 +1,92 @@
1
+ import { getProjectMemoryPath, recordHookEvent } from '@helloworlkd/pam-core';
2
+ const HOOK_EVENT_TYPES = [
3
+ 'session-start',
4
+ 'user-prompt',
5
+ 'pre-tool-use',
6
+ 'post-tool-use',
7
+ 'pre-compact',
8
+ 'notification',
9
+ 'stop',
10
+ 'session-end',
11
+ 'other',
12
+ ];
13
+ export function registerHookCommand(program) {
14
+ const hook = program.command('hook').description('Record agent lifecycle hook events');
15
+ hook
16
+ .command('record <type>')
17
+ .description('Record a lifecycle hook event for assisted capture workflows')
18
+ .option('--agent <agent>', 'Agent or tool name')
19
+ .option('--model <model>', 'Model name when known')
20
+ .option('--session-id <sessionId>', 'Agent session identifier')
21
+ .option('--data <json>', 'Additional event data as JSON')
22
+ .action(async (type, options) => {
23
+ if (!HOOK_EVENT_TYPES.includes(type)) {
24
+ console.error(`Invalid hook type. Must be one of: ${HOOK_EVENT_TYPES.join(', ')}`);
25
+ process.exit(1);
26
+ }
27
+ let data = {};
28
+ if (options.data) {
29
+ try {
30
+ const parsed = JSON.parse(options.data);
31
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
32
+ throw new Error('Hook data must be a JSON object');
33
+ }
34
+ data = parsed;
35
+ }
36
+ catch (error) {
37
+ console.error(error instanceof Error ? error.message : String(error));
38
+ process.exit(1);
39
+ }
40
+ }
41
+ else {
42
+ data = await readHookDataFromStdin();
43
+ }
44
+ if (options.model) {
45
+ data.model = options.model;
46
+ }
47
+ const basePath = getProjectMemoryPath(process.cwd());
48
+ const event = await recordHookEvent(basePath, {
49
+ type,
50
+ agent: options.agent,
51
+ session_id: options.sessionId,
52
+ project_path: process.cwd(),
53
+ data,
54
+ });
55
+ console.log(`Hook event recorded: ${event.id}`);
56
+ });
57
+ }
58
+ async function readHookDataFromStdin() {
59
+ if (process.stdin.isTTY)
60
+ return {};
61
+ const chunks = [];
62
+ for await (const chunk of process.stdin) {
63
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
64
+ }
65
+ const raw = Buffer.concat(chunks).toString('utf-8').trim();
66
+ if (!raw)
67
+ return {};
68
+ try {
69
+ const parsed = JSON.parse(raw);
70
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
71
+ return normalizeHookPayload(parsed);
72
+ }
73
+ }
74
+ catch {
75
+ // Fall through and treat stdin as plain prompt text.
76
+ }
77
+ return { text: raw };
78
+ }
79
+ function normalizeHookPayload(payload) {
80
+ const prompt = firstString(payload, ['text', 'prompt', 'user_prompt', 'message', 'content', 'transcript']) ??
81
+ firstString(payload, ['UserPrompt', 'userPrompt', 'prompt_text']);
82
+ return prompt ? { ...payload, text: prompt } : payload;
83
+ }
84
+ function firstString(payload, keys) {
85
+ for (const key of keys) {
86
+ const value = payload[key];
87
+ if (typeof value === 'string' && value.trim())
88
+ return value;
89
+ }
90
+ return undefined;
91
+ }
92
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerImportCommand(program: Command): void;
3
+ //# sourceMappingURL=import-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAuCrD"}
@@ -0,0 +1,36 @@
1
+ import { importMemories, getProjectMemoryPath } from '@helloworlkd/pam-core';
2
+ import { resolve } from 'node:path';
3
+ export function registerImportCommand(program) {
4
+ program
5
+ .command('import <input>')
6
+ .description('Import memories from a file')
7
+ .option('-f, --format <format>', 'Import format (zip, json, markdown)', 'json')
8
+ .option('--collision <mode>', 'Collision handling for existing IDs (skip, replace, rename, supersede)', 'skip')
9
+ .action(async (input, options) => {
10
+ const basePath = getProjectMemoryPath(process.cwd());
11
+ const inputPath = resolve(input);
12
+ console.log(`Importing memories from ${inputPath}...`);
13
+ try {
14
+ const result = await importMemories({
15
+ format: options.format,
16
+ inputPath,
17
+ basePath,
18
+ collision: options.collision,
19
+ });
20
+ console.log(`\nImport completed:`);
21
+ console.log(` Imported: ${result.imported}`);
22
+ console.log(` Skipped: ${result.skipped}`);
23
+ if (result.errors.length > 0) {
24
+ console.log(`\nErrors:`);
25
+ for (const error of result.errors) {
26
+ console.log(` - ${error}`);
27
+ }
28
+ }
29
+ }
30
+ catch (error) {
31
+ console.error(`Import failed: ${error}`);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ }
36
+ //# sourceMappingURL=import-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-cmd.js","sourceRoot":"","sources":["../../src/commands/import-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,uBAAuB,EAAE,qCAAqC,EAAE,MAAM,CAAC;SAC9E,MAAM,CACL,oBAAoB,EACpB,wEAAwE,EACxE,MAAM,CACP;SACA,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QACpD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAEhC,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,KAAK,CAAC,CAAA;QAEtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS;gBACT,QAAQ;gBACR,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAA;YAEF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAClC,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;YAE3C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBACxB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAA;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerIndexCommand(program: Command): void;
3
+ //# sourceMappingURL=index-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAmCpD"}
@@ -0,0 +1,32 @@
1
+ import { indexAllMemories, getProjectMemoryPath } from '@helloworlkd/pam-core';
2
+ export function registerIndexCommand(program) {
3
+ const index = program.command('index').description('Index management commands');
4
+ index
5
+ .command('build')
6
+ .description('Index all memories into SQLite')
7
+ .action(async () => {
8
+ const basePath = getProjectMemoryPath(process.cwd());
9
+ console.log('Indexing memories...');
10
+ const count = await indexAllMemories(basePath);
11
+ console.log(`Indexed ${count} memories`);
12
+ });
13
+ index
14
+ .command('rebuild')
15
+ .description('Rebuild the entire index from scratch')
16
+ .action(async () => {
17
+ const basePath = getProjectMemoryPath(process.cwd());
18
+ console.log('Rebuilding index...');
19
+ const count = await indexAllMemories(basePath);
20
+ console.log(`Rebuilt index with ${count} memories`);
21
+ });
22
+ program
23
+ .command('reindex')
24
+ .description('Rebuild the entire index from scratch')
25
+ .action(async () => {
26
+ const basePath = getProjectMemoryPath(process.cwd());
27
+ console.log('Rebuilding index...');
28
+ const count = await indexAllMemories(basePath);
29
+ console.log(`Rebuilt index with ${count} memories`);
30
+ });
31
+ }
32
+ //# sourceMappingURL=index-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cmd.js","sourceRoot":"","sources":["../../src/commands/index-cmd.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE9E,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAA;IAE/E,KAAK;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACnC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEJ,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,WAAW,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEJ,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;QAEpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAA;QAC9C,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,WAAW,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACN,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerInitCommand(program: Command): void;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAanC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA6BnD"}