@ai-dossier/cli 0.2.1

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 (144) hide show
  1. package/README.md +419 -0
  2. package/bin/ai-dossier +3 -0
  3. package/bin/dossier-verify +435 -0
  4. package/dist/cli.d.ts +6 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +77 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/cache.d.ts +3 -0
  9. package/dist/commands/cache.d.ts.map +1 -0
  10. package/dist/commands/cache.js +239 -0
  11. package/dist/commands/cache.js.map +1 -0
  12. package/dist/commands/checksum.d.ts +3 -0
  13. package/dist/commands/checksum.d.ts.map +1 -0
  14. package/dist/commands/checksum.js +116 -0
  15. package/dist/commands/checksum.js.map +1 -0
  16. package/dist/commands/config-cmd.d.ts +3 -0
  17. package/dist/commands/config-cmd.d.ts.map +1 -0
  18. package/dist/commands/config-cmd.js +117 -0
  19. package/dist/commands/config-cmd.js.map +1 -0
  20. package/dist/commands/create.d.ts +3 -0
  21. package/dist/commands/create.d.ts.map +1 -0
  22. package/dist/commands/create.js +130 -0
  23. package/dist/commands/create.js.map +1 -0
  24. package/dist/commands/export.d.ts +3 -0
  25. package/dist/commands/export.d.ts.map +1 -0
  26. package/dist/commands/export.js +55 -0
  27. package/dist/commands/export.js.map +1 -0
  28. package/dist/commands/format.d.ts +3 -0
  29. package/dist/commands/format.d.ts.map +1 -0
  30. package/dist/commands/format.js +66 -0
  31. package/dist/commands/format.js.map +1 -0
  32. package/dist/commands/from-file.d.ts +3 -0
  33. package/dist/commands/from-file.d.ts.map +1 -0
  34. package/dist/commands/from-file.js +136 -0
  35. package/dist/commands/from-file.js.map +1 -0
  36. package/dist/commands/get.d.ts +3 -0
  37. package/dist/commands/get.d.ts.map +1 -0
  38. package/dist/commands/get.js +65 -0
  39. package/dist/commands/get.js.map +1 -0
  40. package/dist/commands/info.d.ts +3 -0
  41. package/dist/commands/info.d.ts.map +1 -0
  42. package/dist/commands/info.js +159 -0
  43. package/dist/commands/info.js.map +1 -0
  44. package/dist/commands/init.d.ts +3 -0
  45. package/dist/commands/init.d.ts.map +1 -0
  46. package/dist/commands/init.js +98 -0
  47. package/dist/commands/init.js.map +1 -0
  48. package/dist/commands/install-skill.d.ts +3 -0
  49. package/dist/commands/install-skill.d.ts.map +1 -0
  50. package/dist/commands/install-skill.js +131 -0
  51. package/dist/commands/install-skill.js.map +1 -0
  52. package/dist/commands/keys.d.ts +3 -0
  53. package/dist/commands/keys.d.ts.map +1 -0
  54. package/dist/commands/keys.js +170 -0
  55. package/dist/commands/keys.js.map +1 -0
  56. package/dist/commands/lint.d.ts +3 -0
  57. package/dist/commands/lint.d.ts.map +1 -0
  58. package/dist/commands/lint.js +105 -0
  59. package/dist/commands/lint.js.map +1 -0
  60. package/dist/commands/list.d.ts +3 -0
  61. package/dist/commands/list.d.ts.map +1 -0
  62. package/dist/commands/list.js +173 -0
  63. package/dist/commands/list.js.map +1 -0
  64. package/dist/commands/login.d.ts +3 -0
  65. package/dist/commands/login.d.ts.map +1 -0
  66. package/dist/commands/login.js +33 -0
  67. package/dist/commands/login.js.map +1 -0
  68. package/dist/commands/logout.d.ts +3 -0
  69. package/dist/commands/logout.d.ts.map +1 -0
  70. package/dist/commands/logout.js +19 -0
  71. package/dist/commands/logout.js.map +1 -0
  72. package/dist/commands/prompt-hook.d.ts +3 -0
  73. package/dist/commands/prompt-hook.d.ts.map +1 -0
  74. package/dist/commands/prompt-hook.js +101 -0
  75. package/dist/commands/prompt-hook.js.map +1 -0
  76. package/dist/commands/publish.d.ts +3 -0
  77. package/dist/commands/publish.d.ts.map +1 -0
  78. package/dist/commands/publish.js +142 -0
  79. package/dist/commands/publish.js.map +1 -0
  80. package/dist/commands/pull.d.ts +3 -0
  81. package/dist/commands/pull.d.ts.map +1 -0
  82. package/dist/commands/pull.js +69 -0
  83. package/dist/commands/pull.js.map +1 -0
  84. package/dist/commands/remove.d.ts +3 -0
  85. package/dist/commands/remove.d.ts.map +1 -0
  86. package/dist/commands/remove.js +65 -0
  87. package/dist/commands/remove.js.map +1 -0
  88. package/dist/commands/reset-hooks.d.ts +3 -0
  89. package/dist/commands/reset-hooks.d.ts.map +1 -0
  90. package/dist/commands/reset-hooks.js +52 -0
  91. package/dist/commands/reset-hooks.js.map +1 -0
  92. package/dist/commands/run.d.ts +3 -0
  93. package/dist/commands/run.d.ts.map +1 -0
  94. package/dist/commands/run.js +281 -0
  95. package/dist/commands/run.js.map +1 -0
  96. package/dist/commands/search.d.ts +3 -0
  97. package/dist/commands/search.d.ts.map +1 -0
  98. package/dist/commands/search.js +137 -0
  99. package/dist/commands/search.js.map +1 -0
  100. package/dist/commands/sign.d.ts +3 -0
  101. package/dist/commands/sign.d.ts.map +1 -0
  102. package/dist/commands/sign.js +143 -0
  103. package/dist/commands/sign.js.map +1 -0
  104. package/dist/commands/validate.d.ts +3 -0
  105. package/dist/commands/validate.d.ts.map +1 -0
  106. package/dist/commands/validate.js +152 -0
  107. package/dist/commands/validate.js.map +1 -0
  108. package/dist/commands/verify.d.ts +3 -0
  109. package/dist/commands/verify.d.ts.map +1 -0
  110. package/dist/commands/verify.js +41 -0
  111. package/dist/commands/verify.js.map +1 -0
  112. package/dist/commands/whoami.d.ts +3 -0
  113. package/dist/commands/whoami.d.ts.map +1 -0
  114. package/dist/commands/whoami.js +28 -0
  115. package/dist/commands/whoami.js.map +1 -0
  116. package/dist/config.d.ts +35 -0
  117. package/dist/config.d.ts.map +1 -0
  118. package/dist/config.js +87 -0
  119. package/dist/config.js.map +1 -0
  120. package/dist/credentials.d.ts +29 -0
  121. package/dist/credentials.d.ts.map +1 -0
  122. package/dist/credentials.js +98 -0
  123. package/dist/credentials.js.map +1 -0
  124. package/dist/github-url.d.ts +22 -0
  125. package/dist/github-url.d.ts.map +1 -0
  126. package/dist/github-url.js +34 -0
  127. package/dist/github-url.js.map +1 -0
  128. package/dist/helpers.d.ts +145 -0
  129. package/dist/helpers.d.ts.map +1 -0
  130. package/dist/helpers.js +597 -0
  131. package/dist/helpers.js.map +1 -0
  132. package/dist/hooks.d.ts +38 -0
  133. package/dist/hooks.d.ts.map +1 -0
  134. package/dist/hooks.js +155 -0
  135. package/dist/hooks.js.map +1 -0
  136. package/dist/oauth.d.ts +22 -0
  137. package/dist/oauth.d.ts.map +1 -0
  138. package/dist/oauth.js +118 -0
  139. package/dist/oauth.js.map +1 -0
  140. package/dist/registry-client.d.ts +86 -0
  141. package/dist/registry-client.d.ts.map +1 -0
  142. package/dist/registry-client.js +225 -0
  143. package/dist/registry-client.js.map +1 -0
  144. package/package.json +58 -0
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.registerRunCommand = registerRunCommand;
40
+ const node_child_process_1 = require("node:child_process");
41
+ const node_fs_1 = __importDefault(require("node:fs"));
42
+ const node_os_1 = __importDefault(require("node:os"));
43
+ const node_path_1 = __importDefault(require("node:path"));
44
+ const config = __importStar(require("../config"));
45
+ const helpers_1 = require("../helpers");
46
+ const registry_client_1 = require("../registry-client");
47
+ function registerRunCommand(program) {
48
+ program
49
+ .command('run')
50
+ .description('Verify, audit, and execute dossier')
51
+ .argument('<file>', 'Dossier file, URL, or registry name to run')
52
+ .option('--llm <name>', 'LLM to use (claude-code, auto)')
53
+ .option('--headless', 'Run in headless mode (non-interactive, for CI/CD)')
54
+ .option('--dry-run', 'Show plan without executing')
55
+ .option('--force', 'Skip risk warnings')
56
+ .option('--no-prompt', "Don't ask for confirmation")
57
+ .option('--fresh', 'Skip cache, fetch fresh from registry')
58
+ .option('--pull', 'Update cache before running')
59
+ .option('--skip-checksum', 'Skip checksum verification (DANGEROUS)')
60
+ .option('--skip-signature', 'Skip signature verification')
61
+ .option('--skip-author-check', 'Skip author whitelist/blacklist')
62
+ .option('--skip-dossier-check', 'Skip dossier whitelist/blacklist')
63
+ .option('--skip-risk-assessment', 'Skip risk level checks')
64
+ .option('--skip-review', 'Skip review dossier execution')
65
+ .option('--skip-all-checks', 'Skip ALL verifications (VERY DANGEROUS)')
66
+ .option('--review-dossier <file>', 'Custom review dossier')
67
+ .option('--review-llm <name>', 'LLM for review step')
68
+ .action(async (file, options) => {
69
+ let resolvedFile = file;
70
+ const isUrl = file.startsWith('http://') || file.startsWith('https://');
71
+ const isLocalFile = !isUrl && node_fs_1.default.existsSync(node_path_1.default.resolve(file));
72
+ const isNested = process.env.CLAUDE_CODE === '1' || process.env.CLAUDECODE === '1';
73
+ const log = isNested
74
+ ? (...args) => console.error(...args)
75
+ : (...args) => console.log(...args);
76
+ // If not a URL or local file, treat as a registry name
77
+ if (!isUrl && !isLocalFile) {
78
+ const [dossierName, version] = (0, registry_client_1.parseNameVersion)(file);
79
+ const cacheDir = node_path_1.default.join(node_os_1.default.homedir(), '.dossier', 'cache');
80
+ let cached = false;
81
+ if (!options.fresh) {
82
+ const dossierCacheDir = (0, helpers_1.safeDossierPath)(cacheDir, dossierName);
83
+ if (node_fs_1.default.existsSync(dossierCacheDir)) {
84
+ const metaFiles = node_fs_1.default
85
+ .readdirSync(dossierCacheDir)
86
+ .filter((f) => f.endsWith('.meta.json'));
87
+ for (const mf of metaFiles) {
88
+ const ver = mf.replace('.meta.json', '');
89
+ if (version && ver !== version)
90
+ continue;
91
+ const contentFile = node_path_1.default.join(dossierCacheDir, `${ver}.ds.md`);
92
+ if (node_fs_1.default.existsSync(contentFile)) {
93
+ if (!options.pull) {
94
+ resolvedFile = contentFile;
95
+ cached = true;
96
+ log(`📦 Using cached: ${dossierName}@${ver}\n`);
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ if (!cached) {
104
+ try {
105
+ const client = (0, registry_client_1.getClient)();
106
+ let resolvedVersion = version;
107
+ if (!resolvedVersion) {
108
+ const meta = (await client.getDossier(dossierName));
109
+ resolvedVersion = meta.version || 'latest';
110
+ }
111
+ const result = await client.getDossierContent(dossierName, resolvedVersion);
112
+ if (!options.fresh) {
113
+ const dossierCacheDir = (0, helpers_1.safeDossierPath)(cacheDir, dossierName);
114
+ node_fs_1.default.mkdirSync(dossierCacheDir, { recursive: true, mode: 0o700 });
115
+ const contentFile = node_path_1.default.join(dossierCacheDir, `${resolvedVersion}.ds.md`);
116
+ node_fs_1.default.writeFileSync(contentFile, result.content, 'utf8');
117
+ node_fs_1.default.writeFileSync(node_path_1.default.join(dossierCacheDir, `${resolvedVersion}.meta.json`), JSON.stringify({
118
+ cached_at: new Date().toISOString(),
119
+ version: resolvedVersion,
120
+ source_registry_url: client.baseUrl.replace(/\/api\/v1$/, ''),
121
+ }, null, 2), 'utf8');
122
+ resolvedFile = contentFile;
123
+ log(`📥 Fetched: ${dossierName}@${resolvedVersion}\n`);
124
+ }
125
+ else {
126
+ const tmpFile = node_path_1.default.join(node_os_1.default.tmpdir(), `dossier-${Date.now()}.ds.md`);
127
+ node_fs_1.default.writeFileSync(tmpFile, result.content, 'utf8');
128
+ resolvedFile = tmpFile;
129
+ log(`📥 Fetched: ${dossierName}@${resolvedVersion} (not cached)\n`);
130
+ }
131
+ }
132
+ catch (err) {
133
+ if (err.statusCode === 404) {
134
+ console.error(`\n❌ Not found: ${file}`);
135
+ console.error(' Not a local file and not found in registry\n');
136
+ }
137
+ else {
138
+ console.error(`\n❌ Failed to fetch: ${err.message}\n`);
139
+ }
140
+ process.exit(1);
141
+ }
142
+ }
143
+ }
144
+ // Show metadata summary
145
+ try {
146
+ const content = node_fs_1.default.readFileSync(node_path_1.default.resolve(resolvedFile), 'utf8');
147
+ const jsonMatch = content.match(/^---dossier\s*\n([\s\S]*?)\n---\n?/);
148
+ const yamlMatch = !jsonMatch && content.match(/^---\n([\s\S]*?)\n---\n?/);
149
+ let fm = null;
150
+ if (jsonMatch) {
151
+ try {
152
+ fm = JSON.parse(jsonMatch[1]);
153
+ }
154
+ catch { }
155
+ }
156
+ else if (yamlMatch) {
157
+ fm = {};
158
+ for (const line of yamlMatch[1].split('\n')) {
159
+ const kv = line.match(/^(\w[\w_-]*):\s*(.+)$/);
160
+ if (kv)
161
+ fm[kv[1]] = kv[2].trim();
162
+ }
163
+ }
164
+ if (fm && (fm.title || fm.risk_level || fm.objective)) {
165
+ log('📄 Dossier Summary:');
166
+ if (fm.title)
167
+ log(` Title: ${fm.title}`);
168
+ if (fm.version)
169
+ log(` Version: ${fm.version}`);
170
+ if (fm.risk_level)
171
+ log(` Risk Level: ${fm.risk_level}`);
172
+ if (fm.objective || fm.description) {
173
+ const obj = fm.objective || fm.description;
174
+ const snippet = obj.length > 100 ? obj.slice(0, 100) + '...' : obj;
175
+ log(` Objective: ${snippet}`);
176
+ }
177
+ log('');
178
+ }
179
+ }
180
+ catch {
181
+ // Non-fatal
182
+ }
183
+ // Nested session detection
184
+ if (process.env.CLAUDE_CODE === '1' || process.env.CLAUDECODE === '1') {
185
+ console.error('ℹ️ Running inside Claude Code — outputting dossier content\n');
186
+ try {
187
+ const content = node_fs_1.default.readFileSync(node_path_1.default.resolve(resolvedFile), 'utf8');
188
+ process.stdout.write(content);
189
+ process.exit(0);
190
+ }
191
+ catch (err) {
192
+ console.error(`\n❌ Failed to read dossier: ${err.message}\n`);
193
+ process.exit(1);
194
+ }
195
+ }
196
+ const result = await (0, helpers_1.runVerification)(resolvedFile, options);
197
+ if (!result.passed) {
198
+ console.log('❌ Verification failed - cannot execute\n');
199
+ process.exit(1);
200
+ }
201
+ const llmOption = options.llm || config.getConfig('defaultLlm') || 'auto';
202
+ console.log('📝 Audit Log:');
203
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
204
+ console.log(` Timestamp: ${new Date().toISOString()}`);
205
+ console.log(` Dossier: ${file}`);
206
+ console.log(` User: ${process.env.USER}@${node_os_1.default.hostname()}`);
207
+ console.log(` LLM: ${llmOption}`);
208
+ console.log(` Action: RUN`);
209
+ console.log(' Status: VERIFIED');
210
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
211
+ console.log('📋 [MVP: Audit log printed to console]');
212
+ console.log('📋 [Future: Would send to audit server]\n');
213
+ // If resolvedFile is still a URL, download it to a temp file first
214
+ const isResolvedUrl = resolvedFile.startsWith('http://') || resolvedFile.startsWith('https://');
215
+ let tmpUrlFile = null;
216
+ if (isResolvedUrl) {
217
+ try {
218
+ tmpUrlFile = (0, helpers_1.downloadUrlToTempFile)(resolvedFile);
219
+ resolvedFile = tmpUrlFile;
220
+ }
221
+ catch (err) {
222
+ console.error(`\n❌ Failed to download: ${err.message}\n`);
223
+ process.exit(1);
224
+ }
225
+ }
226
+ const cleanupTmpFile = () => {
227
+ if (tmpUrlFile)
228
+ try {
229
+ node_fs_1.default.unlinkSync(tmpUrlFile);
230
+ }
231
+ catch { }
232
+ };
233
+ if (options.dryRun) {
234
+ console.log('🧪 DRY RUN MODE - No execution\n');
235
+ console.log('Would execute:');
236
+ console.log(` File: ${resolvedFile}`);
237
+ console.log(` LLM: ${llmOption}`);
238
+ const llmToUse = (0, helpers_1.detectLlm)(llmOption, true);
239
+ const descriptor = llmToUse
240
+ ? (0, helpers_1.buildLlmCommand)(llmToUse, resolvedFile, options.headless)
241
+ : null;
242
+ console.log(` Command: ${descriptor ? descriptor.description : 'No LLM detected - would show error'}\n`);
243
+ console.log('✅ All verifications passed - ready to execute');
244
+ cleanupTmpFile();
245
+ process.exit(0);
246
+ }
247
+ console.log('🤖 Executing Dossier...\n');
248
+ const llmToUse = (0, helpers_1.detectLlm)(llmOption);
249
+ if (!llmToUse) {
250
+ cleanupTmpFile();
251
+ process.exit(2);
252
+ }
253
+ const descriptor = (0, helpers_1.buildLlmCommand)(llmToUse, resolvedFile, options.headless);
254
+ if (!descriptor) {
255
+ console.log(`❌ Unknown LLM: ${llmToUse}\n`);
256
+ console.log('Supported: claude-code, auto\n');
257
+ cleanupTmpFile();
258
+ process.exit(2);
259
+ }
260
+ try {
261
+ const mode = options.headless ? 'headless' : 'interactive';
262
+ console.log(` Mode: ${mode}`);
263
+ console.log(` Executing: ${descriptor.description}\n`);
264
+ const result = (0, node_child_process_1.spawnSync)(descriptor.cmd, descriptor.args, {
265
+ stdio: descriptor.stdin ? ['pipe', 'inherit', 'inherit'] : 'inherit',
266
+ input: descriptor.stdin,
267
+ });
268
+ if (result.status !== 0) {
269
+ throw { status: result.status };
270
+ }
271
+ console.log('\n✅ Execution completed');
272
+ }
273
+ catch (error) {
274
+ console.log('\n❌ Execution failed');
275
+ cleanupTmpFile();
276
+ process.exit(error.status || 2);
277
+ }
278
+ cleanupTmpFile();
279
+ });
280
+ }
281
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,gDA2PC;AA1QD,2DAA+C;AAC/C,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAE7B,kDAAoC;AACpC,wCAMoB;AACpB,wDAAiE;AAEjE,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC;SACjD,QAAQ,CAAC,QAAQ,EAAE,4CAA4C,CAAC;SAChE,MAAM,CAAC,cAAc,EAAE,gCAAgC,CAAC;SACxD,MAAM,CAAC,YAAY,EAAE,mDAAmD,CAAC;SACzE,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACvC,MAAM,CAAC,aAAa,EAAE,4BAA4B,CAAC;SACnD,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACnE,MAAM,CAAC,kBAAkB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,iCAAiC,CAAC;SAChE,MAAM,CAAC,sBAAsB,EAAE,kCAAkC,CAAC;SAClE,MAAM,CAAC,wBAAwB,EAAE,wBAAwB,CAAC;SAC1D,MAAM,CAAC,eAAe,EAAE,+BAA+B,CAAC;SACxD,MAAM,CAAC,mBAAmB,EAAE,yCAAyC,CAAC;SACtE,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC;SAC1D,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAY,EAAE,EAAE;QAC3C,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,iBAAE,CAAC,UAAU,CAAC,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC;QACnF,MAAM,GAAG,GAAG,QAAQ;YAClB,CAAC,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC5C,CAAC,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAE7C,uDAAuD;QACvD,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,IAAA,kCAAgB,EAAC,IAAI,CAAC,CAAC;YAEtD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,MAAM,GAAG,KAAK,CAAC;YAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,eAAe,GAAG,IAAA,yBAAe,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAC/D,IAAI,iBAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACnC,MAAM,SAAS,GAAG,iBAAE;yBACjB,WAAW,CAAC,eAAe,CAAC;yBAC5B,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;oBACnD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;wBAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;wBACzC,IAAI,OAAO,IAAI,GAAG,KAAK,OAAO;4BAAE,SAAS;wBACzC,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC;wBAC/D,IAAI,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;4BAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gCAClB,YAAY,GAAG,WAAW,CAAC;gCAC3B,MAAM,GAAG,IAAI,CAAC;gCACd,GAAG,CAAC,oBAAoB,WAAW,IAAI,GAAG,IAAI,CAAC,CAAC;gCAChD,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAA,2BAAS,GAAE,CAAC;oBAC3B,IAAI,eAAe,GAAG,OAAO,CAAC;oBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;wBACrB,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAQ,CAAC;wBAC3D,eAAe,GAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC;oBAC7C,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;oBAE5E,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnB,MAAM,eAAe,GAAG,IAAA,yBAAe,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;wBAC/D,iBAAE,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;wBAChE,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,eAAe,QAAQ,CAAC,CAAC;wBAC3E,iBAAE,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBACtD,iBAAE,CAAC,aAAa,CACd,mBAAI,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,eAAe,YAAY,CAAC,EAC1D,IAAI,CAAC,SAAS,CACZ;4BACE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,OAAO,EAAE,eAAe;4BACxB,mBAAmB,EAAG,MAAc,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;yBACvE,EACD,IAAI,EACJ,CAAC,CACF,EACD,MAAM,CACP,CAAC;wBACF,YAAY,GAAG,WAAW,CAAC;wBAC3B,GAAG,CAAC,eAAe,WAAW,IAAI,eAAe,IAAI,CAAC,CAAC;oBACzD,CAAC;yBAAM,CAAC;wBACN,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,MAAM,EAAE,EAAE,WAAW,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;wBACtE,iBAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;wBAClD,YAAY,GAAG,OAAO,CAAC;wBACvB,GAAG,CAAC,eAAe,WAAW,IAAI,eAAe,iBAAiB,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;wBAC3B,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;wBACxC,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBACnE,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;oBACzD,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACtE,MAAM,SAAS,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC1E,IAAI,EAAE,GAAQ,IAAI,CAAC;YAEnB,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC;oBACH,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,EAAE,GAAG,EAAE,CAAC;gBACR,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;oBAC/C,IAAI,EAAE;wBAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtD,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,KAAK;oBAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;gBAChD,IAAI,EAAE,CAAC,OAAO;oBAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,CAAC,UAAU;oBAAE,GAAG,CAAC,kBAAkB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC1D,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,WAAW,CAAC;oBAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;oBACnE,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QAED,2BAA2B;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAC/E,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,iBAAE,CAAC,YAAY,CAAC,mBAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;gBACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAe,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC;QAE1E,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,iBAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QAEzD,mEAAmE;QACnE,MAAM,aAAa,GACjB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAA,+BAAqB,EAAC,YAAY,CAAC,CAAC;gBACjD,YAAY,GAAG,UAAU,CAAC;YAC5B,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,IAAI,UAAU;gBACZ,IAAI,CAAC;oBACH,iBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;QACd,CAAC,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;YAEpC,MAAM,QAAQ,GAAG,IAAA,mBAAS,EAAC,SAAmB,EAAE,IAAI,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,QAAQ;gBACzB,CAAC,CAAC,IAAA,yBAAe,EAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC;gBAC3D,CAAC,CAAC,IAAI,CAAC;YAET,OAAO,CAAC,GAAG,CACT,eAAe,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAoC,IAAI,CAC9F,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAA,mBAAS,EAAC,SAAmB,CAAC,CAAC;QAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,yBAAe,EAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,IAAA,8BAAS,EAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE;gBACxD,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;gBACpE,KAAK,EAAE,UAAU,CAAC,KAAK;aACxB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,cAAc,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSearchCommand(program: Command): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoK5D"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSearchCommand = registerSearchCommand;
4
+ const registry_client_1 = require("../registry-client");
5
+ function registerSearchCommand(program) {
6
+ program
7
+ .command('search')
8
+ .description('Search the registry for dossiers')
9
+ .argument('<query>', 'Search keywords')
10
+ .option('--category <category>', 'Filter by category (devops, database, development, security, etc.)')
11
+ .option('--page <number>', 'Page number', '1')
12
+ .option('--per-page <number>', 'Results per page', '20')
13
+ .option('--limit <number>', 'Maximum total results')
14
+ .option('-c, --content', 'Also search dossier body content')
15
+ .option('--json', 'Output as JSON')
16
+ .action(async (query, options) => {
17
+ const page = parseInt(options.page, 10) || 1;
18
+ const perPage = parseInt(options.perPage, 10) || 20;
19
+ const limit = options.limit ? parseInt(options.limit, 10) : undefined;
20
+ let allDossiers;
21
+ try {
22
+ const client = (0, registry_client_1.getClient)();
23
+ const result = (await client.listDossiers({
24
+ category: options.category,
25
+ page: 1,
26
+ perPage: 100,
27
+ }));
28
+ allDossiers = result.dossiers || [];
29
+ }
30
+ catch (err) {
31
+ console.error(`\n❌ Search failed: ${err.message}\n`);
32
+ process.exit(1);
33
+ return;
34
+ }
35
+ const queryLower = query.toLowerCase();
36
+ const terms = queryLower.split(/\s+/).filter(Boolean);
37
+ let matched = allDossiers.filter((d) => {
38
+ const fields = [
39
+ d.name || '',
40
+ d.title || '',
41
+ d.description || d.objective || '',
42
+ ...(Array.isArray(d.category) ? d.category : [d.category || '']),
43
+ ...(d.tags || []),
44
+ ]
45
+ .map((f) => String(f).toLowerCase())
46
+ .join(' ');
47
+ return terms.every((term) => fields.includes(term) || fields.indexOf(term) !== -1);
48
+ });
49
+ // Content search: fetch body and filter by content match
50
+ if (options.content) {
51
+ const client = (0, registry_client_1.getClient)();
52
+ const CONCURRENCY = 5;
53
+ const contentMatches = new Map();
54
+ // Process in batches for concurrency limiting
55
+ for (let i = 0; i < matched.length; i += CONCURRENCY) {
56
+ const batch = matched.slice(i, i + CONCURRENCY);
57
+ const results = await Promise.all(batch.map(async (d) => {
58
+ try {
59
+ const { content } = await client.getDossierContent(d.name, d.version || null);
60
+ const bodyLower = content.toLowerCase();
61
+ if (terms.some((term) => bodyLower.includes(term))) {
62
+ // Extract snippet around first match
63
+ const firstTerm = terms.find((t) => bodyLower.includes(t));
64
+ const idx = bodyLower.indexOf(firstTerm);
65
+ const start = Math.max(0, idx - 50);
66
+ const end = Math.min(content.length, idx + firstTerm.length + 50);
67
+ const snippet = (start > 0 ? '...' : '') +
68
+ content.slice(start, end).replace(/\n/g, ' ') +
69
+ (end < content.length ? '...' : '');
70
+ contentMatches.set(d.name, snippet);
71
+ return d;
72
+ }
73
+ return null;
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ }));
79
+ // We don't filter here yet; we collect results
80
+ for (const r of results) {
81
+ if (r === null) {
82
+ // Mark for removal
83
+ }
84
+ }
85
+ }
86
+ // Keep only dossiers that matched in content
87
+ matched = matched.filter((d) => contentMatches.has(d.name));
88
+ // Attach snippets for display
89
+ for (const d of matched) {
90
+ d._contentSnippet = contentMatches.get(d.name);
91
+ }
92
+ }
93
+ if (limit && limit > 0) {
94
+ matched = matched.slice(0, limit);
95
+ }
96
+ const total = matched.length;
97
+ const start = (page - 1) * perPage;
98
+ const dossiers = matched.slice(start, start + perPage);
99
+ if (options.json) {
100
+ console.log(JSON.stringify({ dossiers, total, page, perPage }, null, 2));
101
+ process.exit(0);
102
+ }
103
+ if (dossiers.length === 0) {
104
+ console.log(`\nNo dossiers found matching "${query}".\n`);
105
+ process.exit(0);
106
+ }
107
+ console.log(`\n🔍 Found ${total} dossier(s) matching "${query}":\n`);
108
+ for (const d of dossiers) {
109
+ const name = d.name || '';
110
+ const version = d.version || '';
111
+ const title = d.title || '';
112
+ const category = Array.isArray(d.category) ? d.category.join(', ') : d.category || '';
113
+ const description = d.description || d.objective || '';
114
+ console.log(` ${name} (v${version})${category ? ' [' + category + ']' : ''}`);
115
+ if (title) {
116
+ console.log(` ${title}`);
117
+ }
118
+ if (description) {
119
+ const snippet = description.length > 100 ? description.slice(0, 100) + '...' : description;
120
+ console.log(` ${snippet}`);
121
+ }
122
+ if (d._contentSnippet) {
123
+ console.log(` Content match: ${d._contentSnippet}`);
124
+ }
125
+ console.log('');
126
+ }
127
+ const totalPages = Math.ceil(total / perPage);
128
+ if (totalPages > 1) {
129
+ console.log(`Page ${page}/${totalPages} (${perPage} per page)`);
130
+ if (page < totalPages) {
131
+ console.log(`Use --page ${page + 1} to see more results`);
132
+ }
133
+ console.log('');
134
+ }
135
+ });
136
+ }
137
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerSignCommand(program: Command): void;
3
+ //# sourceMappingURL=sign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4J1D"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerSignCommand = registerSignCommand;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const node_os_1 = __importDefault(require("node:os"));
10
+ const node_path_1 = __importDefault(require("node:path"));
11
+ const helpers_1 = require("../helpers");
12
+ function registerSignCommand(program) {
13
+ program
14
+ .command('sign')
15
+ .description('Sign dossier with cryptographic key (supports any AWS KMS key)')
16
+ .argument('<file>', 'Dossier file to sign')
17
+ .option('--method <type>', 'Signing method: kms (AWS KMS) or ed25519 (local key)', 'kms')
18
+ .option('--key <name-or-path>', 'Key name from ~/.dossier/ or path to Ed25519 private key (required for ed25519 method)')
19
+ .option('--key-id <id>', 'KMS key alias/ARN (e.g., alias/my-key or arn:aws:kms:...) or ed25519 key ID')
20
+ .option('--region <region>', 'AWS region for KMS (default: us-east-1 or AWS_REGION env)')
21
+ .option('--signed-by <name>', 'Signer identity (e.g., "Name <email@example.com>")')
22
+ .option('--dry-run', 'Calculate checksum only, do not sign')
23
+ .option('--force', 'Bypass official key restriction (not recommended)')
24
+ .action(async (file, options) => {
25
+ const dossierFile = node_path_1.default.resolve(file);
26
+ if (!node_fs_1.default.existsSync(dossierFile)) {
27
+ console.log(`❌ File not found: ${dossierFile}`);
28
+ process.exit(1);
29
+ }
30
+ console.log('\n🔐 Dossier Signing Tool\n');
31
+ console.log(` File: ${dossierFile}`);
32
+ console.log(` Method: ${options.method}`);
33
+ const toolsDir = node_path_1.default.join(helpers_1.REPO_ROOT, 'tools');
34
+ let signTool;
35
+ const signArgs = [dossierFile];
36
+ if (options.method === 'kms') {
37
+ signTool = node_path_1.default.join(toolsDir, 'sign-dossier-kms.js');
38
+ const effectiveKeyId = options.keyId || 'alias/dossier-official-prod';
39
+ const isOfficialKey = helpers_1.OFFICIAL_KMS_KEYS.some((key) => effectiveKeyId === key || effectiveKeyId.includes(key));
40
+ if (isOfficialKey && !options.force && !options.dryRun) {
41
+ console.log(`\n⚠️ Official Dossier Key Detected: ${effectiveKeyId}\n`);
42
+ console.log(' Official dossier signatures should be created through CI/CD,');
43
+ console.log(' not directly via the CLI. This ensures:');
44
+ console.log(' - Only merged PRs from authorized contributors are signed');
45
+ console.log(' - Audit trail via GitHub Actions');
46
+ console.log(' - Consistent signing identity\n');
47
+ console.log(' To sign official dossiers:');
48
+ console.log(' 1. Create a PR in the imboard-ai/ai-dossier repository');
49
+ console.log(' 2. Get approval from a maintainer');
50
+ console.log(' 3. Merge to main - CI will sign automatically\n');
51
+ console.log(' For your own organization, use your own KMS key:');
52
+ console.log(` dossier sign ${file} --key-id alias/your-org-key\n`);
53
+ console.log(' Or use Ed25519 local signing:');
54
+ console.log(` dossier sign ${file} --method ed25519 --key your-key.pem\n`);
55
+ console.log(' To bypass this check (not recommended):');
56
+ console.log(` dossier sign ${file} --force\n`);
57
+ process.exit(1);
58
+ }
59
+ if (isOfficialKey && options.force && !options.dryRun) {
60
+ console.log(`\n⚠️ WARNING: Using official key with --force`);
61
+ console.log(' This should only be done by authorized maintainers.\n');
62
+ }
63
+ if (options.keyId)
64
+ signArgs.push('--key-id', options.keyId);
65
+ if (options.region)
66
+ signArgs.push('--region', options.region);
67
+ if (options.signedBy)
68
+ signArgs.push('--signed-by', options.signedBy);
69
+ if (options.dryRun)
70
+ signArgs.push('--dry-run');
71
+ console.log(` KMS Key: ${effectiveKeyId}`);
72
+ console.log(` Region: ${options.region || process.env.AWS_REGION || 'us-east-1'}`);
73
+ }
74
+ else if (options.method === 'ed25519') {
75
+ signTool = node_path_1.default.join(toolsDir, 'sign-dossier.js');
76
+ if (!options.key && !options.dryRun) {
77
+ console.log('\n❌ Error: --key is required for ed25519 signing');
78
+ console.log('\nGenerate a key pair with:');
79
+ console.log(' dossier keys generate --name my-key');
80
+ console.log('\nThen sign with:');
81
+ console.log(` dossier sign ${file} --method ed25519 --key my-key`);
82
+ console.log(` dossier sign ${file} --method ed25519 --key /path/to/key.pem`);
83
+ process.exit(1);
84
+ }
85
+ if (options.key) {
86
+ let keyPath = node_path_1.default.resolve(options.key);
87
+ // Support name-based lookup from ~/.dossier/
88
+ if (!node_fs_1.default.existsSync(keyPath)) {
89
+ const namedPath = node_path_1.default.join(node_os_1.default.homedir(), '.dossier', `${options.key}.pem`);
90
+ if (node_fs_1.default.existsSync(namedPath)) {
91
+ keyPath = namedPath;
92
+ }
93
+ else {
94
+ console.log(`\n❌ Key not found: ${options.key}`);
95
+ console.log(` Checked: ${keyPath}`);
96
+ console.log(` Checked: ${namedPath}`);
97
+ process.exit(1);
98
+ }
99
+ }
100
+ signArgs.push('--key', keyPath);
101
+ console.log(` Key: ${keyPath}`);
102
+ }
103
+ if (options.keyId)
104
+ signArgs.push('--key-id', options.keyId);
105
+ if (options.signedBy)
106
+ signArgs.push('--signed-by', options.signedBy);
107
+ if (options.dryRun)
108
+ signArgs.push('--dry-run');
109
+ }
110
+ else {
111
+ console.log(`\n❌ Unknown signing method: ${options.method}`);
112
+ console.log('\nSupported methods:');
113
+ console.log(' kms - AWS KMS signing (requires AWS credentials)');
114
+ console.log(' ed25519 - Local Ed25519 key signing');
115
+ process.exit(1);
116
+ }
117
+ if (!node_fs_1.default.existsSync(signTool)) {
118
+ console.log(`\n❌ Signing tool not found: ${signTool}`);
119
+ console.log('\nThis may be a package installation issue.');
120
+ console.log('Please report at: https://github.com/imboard-ai/ai-dossier/issues');
121
+ process.exit(1);
122
+ }
123
+ if (options.signedBy)
124
+ console.log(` Signed by: ${options.signedBy}`);
125
+ if (options.dryRun)
126
+ console.log('\n [DRY RUN - will not sign]');
127
+ console.log('');
128
+ try {
129
+ const result = (0, node_child_process_1.spawnSync)('node', [signTool, ...signArgs], {
130
+ stdio: 'inherit',
131
+ cwd: helpers_1.REPO_ROOT,
132
+ });
133
+ if (result.status !== 0) {
134
+ process.exit(result.status || 1);
135
+ }
136
+ }
137
+ catch (err) {
138
+ console.log(`\n❌ Signing failed: ${err.message}`);
139
+ process.exit(1);
140
+ }
141
+ });
142
+ }
143
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/commands/sign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerValidateCommand(program: Command): void;
3
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8K9D"}