@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
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { registerInitCommand } from './commands/init.js';
4
+ import { registerAddCommand } from './commands/add.js';
5
+ import { registerListCommand } from './commands/list.js';
6
+ import { registerShowCommand } from './commands/show.js';
7
+ import { registerEditCommand } from './commands/edit.js';
8
+ import { registerDeleteCommand } from './commands/delete.js';
9
+ import { registerArchiveCommand } from './commands/archive.js';
10
+ import { registerIndexCommand } from './commands/index-cmd.js';
11
+ import { registerSearchCommand } from './commands/search.js';
12
+ import { registerDoctorCommand } from './commands/doctor.js';
13
+ import { registerRedactCommand } from './commands/redact.js';
14
+ import { registerRestoreCommand } from './commands/restore.js';
15
+ import { registerApproveCommand } from './commands/approve.js';
16
+ import { registerRejectCommand } from './commands/reject.js';
17
+ import { registerCaptureCommand } from './commands/capture.js';
18
+ import { registerCheckpointCommand } from './commands/checkpoint.js';
19
+ import { registerAuditCommand } from './commands/audit.js';
20
+ import { registerExportCommand } from './commands/export-cmd.js';
21
+ import { registerImportCommand } from './commands/import-cmd.js';
22
+ import { registerContextCommand } from './commands/context.js';
23
+ import { registerSemanticCommand } from './commands/semantic.js';
24
+ import { registerServerCommand } from './commands/server.js';
25
+ import { registerUiCommand } from './commands/ui.js';
26
+ import { registerStatusCommand } from './commands/status.js';
27
+ import { registerReviewCommand } from './commands/review.js';
28
+ import { registerSmokeTestCommand } from './commands/smoke-test.js';
29
+ import { registerHandoffCommand } from './commands/handoff.js';
30
+ import { registerDecayCommand } from './commands/decay.js';
31
+ import { registerSupersedeCommand } from './commands/supersede.js';
32
+ import { registerDebugCommand } from './commands/debug.js';
33
+ import { registerHookCommand } from './commands/hook.js';
34
+ import { registerIntelligenceCommand } from './commands/intelligence.js';
35
+ import { registerUpgradeCommand } from './commands/upgrade.js';
36
+ import { getCliVersion } from './version.js';
37
+ const program = new Command();
38
+ program.name('pam').description('Portable AI Memory CLI').version(getCliVersion());
39
+ registerInitCommand(program);
40
+ registerAddCommand(program);
41
+ registerListCommand(program);
42
+ registerShowCommand(program);
43
+ registerEditCommand(program);
44
+ registerDeleteCommand(program);
45
+ registerArchiveCommand(program);
46
+ registerIndexCommand(program);
47
+ registerSearchCommand(program);
48
+ registerDoctorCommand(program);
49
+ registerRedactCommand(program);
50
+ registerRestoreCommand(program);
51
+ registerApproveCommand(program);
52
+ registerRejectCommand(program);
53
+ registerCaptureCommand(program);
54
+ registerCheckpointCommand(program);
55
+ registerAuditCommand(program);
56
+ registerExportCommand(program);
57
+ registerImportCommand(program);
58
+ registerContextCommand(program);
59
+ registerSemanticCommand(program);
60
+ registerServerCommand(program);
61
+ registerUiCommand(program);
62
+ registerStatusCommand(program);
63
+ registerReviewCommand(program);
64
+ registerSmokeTestCommand(program);
65
+ registerHandoffCommand(program);
66
+ registerDecayCommand(program);
67
+ registerSupersedeCommand(program);
68
+ registerDebugCommand(program);
69
+ registerHookCommand(program);
70
+ registerIntelligenceCommand(program);
71
+ registerUpgradeCommand(program);
72
+ program.parse();
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { createPamMcpServer, startPamMcpServer, type McpToolContext, } from '@helloworlkd/pam-protocol';
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { createPamMcpServer, startPamMcpServer, } from '@helloworlkd/pam-protocol';
2
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,GAElB,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=self-upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-upgrade.d.ts","sourceRoot":"","sources":["../src/self-upgrade.ts"],"names":[],"mappings":""}
@@ -0,0 +1,203 @@
1
+ #!/usr/bin/env node
2
+ import { execFile, spawn } from 'node:child_process';
3
+ import { setTimeout as delay } from 'node:timers/promises';
4
+ import { appendUpgradeLog, getUpgradeStatePaths, writeUpgradeStatus, } from './commands/upgrade-state.js';
5
+ const ownPid = process.pid;
6
+ main().catch((error) => {
7
+ console.error(error instanceof Error ? error.message : String(error));
8
+ process.exit(1);
9
+ });
10
+ async function main() {
11
+ const options = parseArgs(process.argv.slice(2));
12
+ try {
13
+ recordProgress(options, 'waiting', 'Waiting for the launcher process to exit.');
14
+ if (options.waitMs > 0) {
15
+ await delay(options.waitMs);
16
+ }
17
+ recordProgress(options, 'stopping-services', 'Stopping running PAM UI/MCP services.');
18
+ const stopped = await stopRunningPAMServices(options.dryRun);
19
+ recordProgress(options, 'stopping-services', `Stopped ${stopped.length} running PAM service${stopped.length === 1 ? '' : 's'}.`, { stoppedServices: stopped.length });
20
+ const args = ['install', '-g', options.packageSpec];
21
+ recordProgress(options, 'installing', `Running: ${options.npmCommand} ${args.join(' ')}`, {
22
+ stoppedServices: stopped.length,
23
+ });
24
+ if (options.dryRun) {
25
+ recordProgress(options, 'succeeded', 'Dry run complete.', { stoppedServices: stopped.length });
26
+ return;
27
+ }
28
+ await execFileLogged(options.npmCommand, args, options);
29
+ recordProgress(options, 'succeeded', 'PAM upgrade completed.', {
30
+ stoppedServices: stopped.length,
31
+ exitCode: 0,
32
+ });
33
+ }
34
+ catch (error) {
35
+ recordProgress(options, 'failed', error instanceof Error ? error.message : String(error), {
36
+ exitCode: 1,
37
+ });
38
+ throw error;
39
+ }
40
+ }
41
+ function parseArgs(args) {
42
+ const options = {
43
+ packageSpec: '@helloworlkd/pam-cli@latest',
44
+ npmCommand: process.platform === 'win32' ? 'npm.cmd' : 'npm',
45
+ waitMs: 1000,
46
+ dryRun: false,
47
+ runId: `upgrade-${Date.now()}`,
48
+ logPath: '',
49
+ startedAt: new Date().toISOString(),
50
+ };
51
+ for (let index = 0; index < args.length; index += 1) {
52
+ const arg = args[index];
53
+ if (arg === '--package' && args[index + 1]) {
54
+ options.packageSpec = args[index + 1];
55
+ index += 1;
56
+ }
57
+ else if (arg === '--npm' && args[index + 1]) {
58
+ options.npmCommand = args[index + 1];
59
+ index += 1;
60
+ }
61
+ else if (arg === '--wait-ms' && args[index + 1]) {
62
+ const waitMs = Number.parseInt(args[index + 1], 10);
63
+ if (Number.isFinite(waitMs) && waitMs >= 0)
64
+ options.waitMs = waitMs;
65
+ index += 1;
66
+ }
67
+ else if (arg === '--dry-run') {
68
+ options.dryRun = true;
69
+ }
70
+ else if (arg === '--run-id' && args[index + 1]) {
71
+ options.runId = args[index + 1];
72
+ index += 1;
73
+ }
74
+ else if (arg === '--log-path' && args[index + 1]) {
75
+ options.logPath = args[index + 1];
76
+ index += 1;
77
+ }
78
+ else if (arg === '--started-at' && args[index + 1]) {
79
+ options.startedAt = args[index + 1];
80
+ index += 1;
81
+ }
82
+ }
83
+ if (!options.logPath) {
84
+ options.logPath = getUpgradeStatePaths(options.runId).logPath;
85
+ }
86
+ return options;
87
+ }
88
+ function recordProgress(options, phase, message, extra = {}) {
89
+ const status = createStatus(options, phase, message, extra);
90
+ writeUpgradeStatus(status);
91
+ const line = `[${status.updatedAt}] ${phase}: ${message}\n`;
92
+ appendUpgradeLog(options.logPath, line);
93
+ console.log(message);
94
+ }
95
+ function createStatus(options, phase, message, extra = {}) {
96
+ return {
97
+ runId: options.runId,
98
+ phase,
99
+ message,
100
+ packageSpec: options.packageSpec,
101
+ npmCommand: options.npmCommand,
102
+ startedAt: options.startedAt,
103
+ updatedAt: new Date().toISOString(),
104
+ logPath: options.logPath,
105
+ ...extra,
106
+ };
107
+ }
108
+ async function stopRunningPAMServices(dryRun) {
109
+ if (process.platform === 'win32') {
110
+ return stopWindowsPAMServices(dryRun);
111
+ }
112
+ return stopUnixPAMServices(dryRun);
113
+ }
114
+ function stopWindowsPAMServices(dryRun) {
115
+ const command = `
116
+ $ownPid = ${ownPid}
117
+ $processes = Get-CimInstance Win32_Process -Filter "name = 'node.exe'" |
118
+ Where-Object {
119
+ $_.ProcessId -ne $ownPid -and
120
+ $_.CommandLine -match 'pam-cli[\\\\/]dist[\\\\/]index\\.js' -and
121
+ ($_.CommandLine -match '\\sui(\\s|$)' -or $_.CommandLine -match '\\sserver\\s+start(\\s|$)')
122
+ }
123
+ $ids = @($processes | ForEach-Object { $_.ProcessId })
124
+ if (${dryRun ? '$false' : '$true'} -and $ids.Count -gt 0) {
125
+ Stop-Process -Id $ids -Force -ErrorAction SilentlyContinue
126
+ }
127
+ $ids -join ','
128
+ `;
129
+ return new Promise((resolve) => {
130
+ execFile('powershell', ['-NoProfile', '-Command', command], (error, stdout) => {
131
+ if (error) {
132
+ resolve([]);
133
+ return;
134
+ }
135
+ resolve(parsePidList(stdout));
136
+ });
137
+ });
138
+ }
139
+ function stopUnixPAMServices(dryRun) {
140
+ const script = `
141
+ set -e
142
+ ids="$(ps -eo pid=,args= | awk '/pam-cli\\/dist\\/index\\.js/ && (/ ui( |$)/ || / server start( |$)/) {print $1}' | grep -v "^${ownPid}$" || true)"
143
+ if [ -n "$ids" ] && [ "${dryRun ? '0' : '1'}" = "1" ]; then
144
+ kill $ids 2>/dev/null || true
145
+ fi
146
+ printf "%s" "$ids" | tr '\\n' ','
147
+ `;
148
+ return new Promise((resolve) => {
149
+ execFile('sh', ['-c', script], (error, stdout) => {
150
+ if (error) {
151
+ resolve([]);
152
+ return;
153
+ }
154
+ resolve(parsePidList(stdout));
155
+ });
156
+ });
157
+ }
158
+ function parsePidList(value) {
159
+ return value
160
+ .split(/[,\s]+/)
161
+ .map((item) => Number.parseInt(item, 10))
162
+ .filter((pid) => Number.isFinite(pid));
163
+ }
164
+ function execFileLogged(command, args, options) {
165
+ return new Promise((resolve, reject) => {
166
+ const invocation = getSpawnInvocation(command, args);
167
+ const child = spawn(invocation.command, invocation.args, {
168
+ stdio: ['ignore', 'pipe', 'pipe'],
169
+ windowsHide: false,
170
+ });
171
+ child.stdout.on('data', (chunk) => {
172
+ process.stdout.write(chunk);
173
+ appendUpgradeLog(options.logPath, chunk.toString('utf-8'));
174
+ });
175
+ child.stderr.on('data', (chunk) => {
176
+ process.stderr.write(chunk);
177
+ appendUpgradeLog(options.logPath, chunk.toString('utf-8'));
178
+ });
179
+ child.on('error', reject);
180
+ child.on('exit', (code, signal) => {
181
+ if (code === 0) {
182
+ resolve();
183
+ return;
184
+ }
185
+ reject(new Error(`${command} exited with ${signal ?? `code ${code ?? 1}`}`));
186
+ });
187
+ });
188
+ }
189
+ function getSpawnInvocation(command, args) {
190
+ if (process.platform === 'win32' && /\.(?:cmd|bat)$/i.test(command)) {
191
+ return {
192
+ command: process.env.ComSpec ?? 'cmd.exe',
193
+ args: ['/d', '/s', '/c', [command, ...args].map(quoteWindowsCommandArg).join(' ')],
194
+ };
195
+ }
196
+ return { command, args };
197
+ }
198
+ function quoteWindowsCommandArg(value) {
199
+ if (!/[\s"&()<>^|]/.test(value))
200
+ return value;
201
+ return `"${value.replace(/"/g, '\\"')}"`;
202
+ }
203
+ //# sourceMappingURL=self-upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-upgrade.js","sourceRoot":"","sources":["../src/self-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function getCliVersion(): string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,IAAI,MAAM,CAQtC"}
@@ -0,0 +1,15 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { VERSION as CORE_VERSION } from '@helloworlkd/pam-core';
5
+ export function getCliVersion() {
6
+ try {
7
+ const packageJsonPath = join(dirname(fileURLToPath(import.meta.url)), '../package.json');
8
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
9
+ return packageJson.version ?? CORE_VERSION;
10
+ }
11
+ catch {
12
+ return CORE_VERSION;
13
+ }
14
+ }
15
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAE/D,MAAM,UAAU,aAAa;IAC3B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAyB,CAAA;QAC7F,OAAO,WAAW,CAAC,OAAO,IAAI,YAAY,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAA;IACrB,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@helloworlkd/pam-cli",
3
+ "version": "0.1.16",
4
+ "description": "PAM CLI - Command line interface for PAM",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/supersekai64/pam.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "homepage": "https://github.com/supersekai64/pam#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/supersekai64/pam/issues"
15
+ },
16
+ "keywords": [
17
+ "ai",
18
+ "memory",
19
+ "llm",
20
+ "mcp",
21
+ "cli"
22
+ ],
23
+ "bin": {
24
+ "pam": "dist/index.js"
25
+ },
26
+ "main": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js"
32
+ }
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "scripts"
37
+ ],
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "engines": {
42
+ "node": ">=20.0.0"
43
+ },
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.29.0",
46
+ "commander": "^15.0.0",
47
+ "zod": "^4.4.3",
48
+ "@helloworlkd/pam-core": "^0.1.9",
49
+ "@helloworlkd/pam-protocol": "^0.1.10",
50
+ "@helloworlkd/pam-api": "^0.1.15"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^25.9.3"
54
+ },
55
+ "scripts": {
56
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
57
+ "build": "pnpm run clean && tsc",
58
+ "postinstall": "node scripts/postinstall.mjs",
59
+ "dev": "tsc --watch"
60
+ }
61
+ }
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env node
2
+ /* global console, process, setTimeout */
3
+
4
+ import { spawn } from 'node:child_process'
5
+ import { existsSync, readFileSync } from 'node:fs'
6
+ import { resolve } from 'node:path'
7
+ import { fileURLToPath } from 'node:url'
8
+
9
+ const PACKAGE_NAME = '@helloworlkd/pam-cli'
10
+ const DEFAULT_DEFER_TIMEOUT_MS = 15_000
11
+ const DEFAULT_DEFER_POLL_MS = 500
12
+
13
+ async function main() {
14
+ const [command, projectPathArg] = process.argv.slice(2)
15
+ if (command === '--deferred') {
16
+ await runDeferredInit(resolve(projectPathArg || process.env.INIT_CWD || process.cwd()))
17
+ return
18
+ }
19
+
20
+ if (process.env.PAM_SKIP_PROJECT_INIT === '1') return
21
+ if (isGlobalInstall()) {
22
+ console.log('[PAM] Global CLI installed. Run `pam init` inside a project to bootstrap it.')
23
+ return
24
+ }
25
+
26
+ const projectPath = resolve(process.env.INIT_CWD || process.cwd())
27
+ const packageJsonPath = resolve(projectPath, 'package.json')
28
+ if (!existsSync(packageJsonPath)) return
29
+
30
+ const packageJson = readPackageJson(packageJsonPath)
31
+ if (!packageJson || packageJson.name === PACKAGE_NAME) return
32
+ if (!declaresDirectDependency(packageJson, PACKAGE_NAME)) {
33
+ scheduleDeferredInit(projectPath)
34
+ return
35
+ }
36
+
37
+ await initializeProject(projectPath)
38
+ }
39
+
40
+ async function runDeferredInit(projectPath) {
41
+ const deadline =
42
+ Date.now() + readPositiveIntEnv('PAM_POSTINSTALL_TIMEOUT_MS', DEFAULT_DEFER_TIMEOUT_MS)
43
+ const pollMs = readPositiveIntEnv('PAM_POSTINSTALL_POLL_MS', DEFAULT_DEFER_POLL_MS)
44
+
45
+ while (Date.now() <= deadline) {
46
+ const packageJson = readPackageJson(resolve(projectPath, 'package.json'))
47
+ if (packageJson?.name === PACKAGE_NAME) return
48
+ if (packageJson && declaresDirectDependency(packageJson, PACKAGE_NAME)) {
49
+ await initializeProject(projectPath)
50
+ return
51
+ }
52
+ await sleep(pollMs)
53
+ }
54
+ }
55
+
56
+ function scheduleDeferredInit(projectPath) {
57
+ const child = spawn(
58
+ process.execPath,
59
+ [fileURLToPath(import.meta.url), '--deferred', projectPath],
60
+ {
61
+ detached: true,
62
+ env: process.env,
63
+ stdio: 'ignore',
64
+ windowsHide: true,
65
+ }
66
+ )
67
+ child.unref()
68
+ }
69
+
70
+ async function initializeProject(projectPath) {
71
+ try {
72
+ const { configureProjectIntegrations, initAutoCaptureConfig, initProjectMemory } =
73
+ await import('@helloworlkd/pam-core')
74
+ const memoryPath = await initProjectMemory(projectPath)
75
+ await initAutoCaptureConfig(memoryPath)
76
+ const { results } = await configureProjectIntegrations(projectPath)
77
+ const changed = results.filter(
78
+ (result) => result.status === 'created' || result.status === 'updated'
79
+ )
80
+
81
+ console.log(`[PAM] Project memory initialized at ${memoryPath}`)
82
+ if (changed.length > 0) {
83
+ console.log(`[PAM] Wrote ${changed.length} agent/IDE integration file(s).`)
84
+ }
85
+ console.log(
86
+ '[PAM] Reload VS Code/Cursor, start a new Claude Code/OpenCode session, or restart/open a new Codex session.'
87
+ )
88
+ } catch (error) {
89
+ console.warn(
90
+ `[PAM] Project memory auto-init skipped: ${error instanceof Error ? error.message : String(error)}`
91
+ )
92
+ console.warn('[PAM] You can run `pam init` manually inside the project.')
93
+ }
94
+ }
95
+
96
+ function isGlobalInstall() {
97
+ return (
98
+ process.env.npm_config_global === 'true' ||
99
+ process.env.npm_config_location === 'global' ||
100
+ process.env.npm_lifecycle_event === 'globalinstall'
101
+ )
102
+ }
103
+
104
+ function readPackageJson(path) {
105
+ try {
106
+ return JSON.parse(readFileSync(path, 'utf-8').replace(/^\uFEFF/, ''))
107
+ } catch {
108
+ return null
109
+ }
110
+ }
111
+
112
+ function declaresDirectDependency(packageJson, packageName) {
113
+ return ['dependencies', 'devDependencies', 'optionalDependencies'].some((field) => {
114
+ const dependencies = packageJson[field]
115
+ return Boolean(dependencies && typeof dependencies === 'object' && dependencies[packageName])
116
+ })
117
+ }
118
+
119
+ function readPositiveIntEnv(name, fallback) {
120
+ const value = Number.parseInt(process.env[name] || '', 10)
121
+ return Number.isFinite(value) && value > 0 ? value : fallback
122
+ }
123
+
124
+ function sleep(ms) {
125
+ return new Promise((resolve) => setTimeout(resolve, ms))
126
+ }
127
+
128
+ await main()