opena2a-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/adapters/docker.d.ts +8 -0
  2. package/dist/adapters/docker.d.ts.map +1 -0
  3. package/dist/adapters/docker.js +60 -0
  4. package/dist/adapters/docker.js.map +1 -0
  5. package/dist/adapters/import.d.ts +12 -0
  6. package/dist/adapters/import.d.ts.map +1 -0
  7. package/dist/adapters/import.js +76 -0
  8. package/dist/adapters/import.js.map +1 -0
  9. package/dist/adapters/index.d.ts +9 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +40 -0
  12. package/dist/adapters/index.js.map +1 -0
  13. package/dist/adapters/python.d.ts +9 -0
  14. package/dist/adapters/python.d.ts.map +1 -0
  15. package/dist/adapters/python.js +73 -0
  16. package/dist/adapters/python.js.map +1 -0
  17. package/dist/adapters/registry.d.ts +6 -0
  18. package/dist/adapters/registry.d.ts.map +1 -0
  19. package/dist/adapters/registry.js +86 -0
  20. package/dist/adapters/registry.js.map +1 -0
  21. package/dist/adapters/spawn.d.ts +9 -0
  22. package/dist/adapters/spawn.d.ts.map +1 -0
  23. package/dist/adapters/spawn.js +63 -0
  24. package/dist/adapters/spawn.js.map +1 -0
  25. package/dist/adapters/types.d.ts +35 -0
  26. package/dist/adapters/types.d.ts.map +1 -0
  27. package/dist/adapters/types.js +3 -0
  28. package/dist/adapters/types.js.map +1 -0
  29. package/dist/branding.d.ts +3 -0
  30. package/dist/branding.d.ts.map +1 -0
  31. package/dist/branding.js +21 -0
  32. package/dist/branding.js.map +1 -0
  33. package/dist/commands/baselines.d.ts +14 -0
  34. package/dist/commands/baselines.d.ts.map +1 -0
  35. package/dist/commands/baselines.js +269 -0
  36. package/dist/commands/baselines.js.map +1 -0
  37. package/dist/commands/guard.d.ts +38 -0
  38. package/dist/commands/guard.d.ts.map +1 -0
  39. package/dist/commands/guard.js +307 -0
  40. package/dist/commands/guard.js.map +1 -0
  41. package/dist/commands/init.d.ts +14 -0
  42. package/dist/commands/init.d.ts.map +1 -0
  43. package/dist/commands/init.js +356 -0
  44. package/dist/commands/init.js.map +1 -0
  45. package/dist/commands/onepassword-migration.d.ts +23 -0
  46. package/dist/commands/onepassword-migration.d.ts.map +1 -0
  47. package/dist/commands/onepassword-migration.js +179 -0
  48. package/dist/commands/onepassword-migration.js.map +1 -0
  49. package/dist/commands/protect.d.ts +34 -0
  50. package/dist/commands/protect.d.ts.map +1 -0
  51. package/dist/commands/protect.js +642 -0
  52. package/dist/commands/protect.js.map +1 -0
  53. package/dist/commands/runtime.d.ts +28 -0
  54. package/dist/commands/runtime.d.ts.map +1 -0
  55. package/dist/commands/runtime.js +309 -0
  56. package/dist/commands/runtime.js.map +1 -0
  57. package/dist/commands/self-register.d.ts +39 -0
  58. package/dist/commands/self-register.d.ts.map +1 -0
  59. package/dist/commands/self-register.js +528 -0
  60. package/dist/commands/self-register.js.map +1 -0
  61. package/dist/commands/verify.d.ts +25 -0
  62. package/dist/commands/verify.d.ts.map +1 -0
  63. package/dist/commands/verify.js +300 -0
  64. package/dist/commands/verify.js.map +1 -0
  65. package/dist/contextual/advisor.d.ts +12 -0
  66. package/dist/contextual/advisor.d.ts.map +1 -0
  67. package/dist/contextual/advisor.js +94 -0
  68. package/dist/contextual/advisor.js.map +1 -0
  69. package/dist/contextual/index.d.ts +3 -0
  70. package/dist/contextual/index.d.ts.map +1 -0
  71. package/dist/contextual/index.js +7 -0
  72. package/dist/contextual/index.js.map +1 -0
  73. package/dist/guided/attack-walkthrough.d.ts +13 -0
  74. package/dist/guided/attack-walkthrough.d.ts.map +1 -0
  75. package/dist/guided/attack-walkthrough.js +113 -0
  76. package/dist/guided/attack-walkthrough.js.map +1 -0
  77. package/dist/guided/wizard.d.ts +2 -0
  78. package/dist/guided/wizard.d.ts.map +1 -0
  79. package/dist/guided/wizard.js +108 -0
  80. package/dist/guided/wizard.js.map +1 -0
  81. package/dist/index.d.ts +3 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +326 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/natural/index.d.ts +4 -0
  86. package/dist/natural/index.d.ts.map +1 -0
  87. package/dist/natural/index.js +9 -0
  88. package/dist/natural/index.js.map +1 -0
  89. package/dist/natural/intent-map.d.ts +7 -0
  90. package/dist/natural/intent-map.d.ts.map +1 -0
  91. package/dist/natural/intent-map.js +145 -0
  92. package/dist/natural/intent-map.js.map +1 -0
  93. package/dist/natural/llm-fallback.d.ts +8 -0
  94. package/dist/natural/llm-fallback.d.ts.map +1 -0
  95. package/dist/natural/llm-fallback.js +143 -0
  96. package/dist/natural/llm-fallback.js.map +1 -0
  97. package/dist/report/interactive-html.d.ts +51 -0
  98. package/dist/report/interactive-html.d.ts.map +1 -0
  99. package/dist/report/interactive-html.js +508 -0
  100. package/dist/report/interactive-html.js.map +1 -0
  101. package/dist/router.d.ts +23 -0
  102. package/dist/router.d.ts.map +1 -0
  103. package/dist/router.js +132 -0
  104. package/dist/router.js.map +1 -0
  105. package/dist/semantic/command-index.json +182 -0
  106. package/dist/semantic/index.d.ts +3 -0
  107. package/dist/semantic/index.d.ts.map +1 -0
  108. package/dist/semantic/index.js +28 -0
  109. package/dist/semantic/index.js.map +1 -0
  110. package/dist/semantic/search.d.ts +17 -0
  111. package/dist/semantic/search.d.ts.map +1 -0
  112. package/dist/semantic/search.js +123 -0
  113. package/dist/semantic/search.js.map +1 -0
  114. package/dist/util/action-prompt.d.ts +29 -0
  115. package/dist/util/action-prompt.d.ts.map +1 -0
  116. package/dist/util/action-prompt.js +126 -0
  117. package/dist/util/action-prompt.js.map +1 -0
  118. package/dist/util/advisories.d.ts +43 -0
  119. package/dist/util/advisories.d.ts.map +1 -0
  120. package/dist/util/advisories.js +229 -0
  121. package/dist/util/advisories.js.map +1 -0
  122. package/dist/util/colors.d.ts +9 -0
  123. package/dist/util/colors.d.ts.map +1 -0
  124. package/dist/util/colors.js +18 -0
  125. package/dist/util/colors.js.map +1 -0
  126. package/dist/util/credential-patterns.d.ts +38 -0
  127. package/dist/util/credential-patterns.d.ts.map +1 -0
  128. package/dist/util/credential-patterns.js +203 -0
  129. package/dist/util/credential-patterns.js.map +1 -0
  130. package/dist/util/detect.d.ts +11 -0
  131. package/dist/util/detect.d.ts.map +1 -0
  132. package/dist/util/detect.js +49 -0
  133. package/dist/util/detect.js.map +1 -0
  134. package/dist/util/format.d.ts +6 -0
  135. package/dist/util/format.d.ts.map +1 -0
  136. package/dist/util/format.js +49 -0
  137. package/dist/util/format.js.map +1 -0
  138. package/dist/util/report-submission.d.ts +64 -0
  139. package/dist/util/report-submission.d.ts.map +1 -0
  140. package/dist/util/report-submission.js +109 -0
  141. package/dist/util/report-submission.js.map +1 -0
  142. package/dist/util/spinner.d.ts +10 -0
  143. package/dist/util/spinner.d.ts.map +1 -0
  144. package/dist/util/spinner.js +38 -0
  145. package/dist/util/spinner.js.map +1 -0
  146. package/dist/util/version.d.ts +5 -0
  147. package/dist/util/version.d.ts.map +1 -0
  148. package/dist/util/version.js +24 -0
  149. package/dist/util/version.js.map +1 -0
  150. package/package.json +47 -0
@@ -0,0 +1,14 @@
1
+ /**
2
+ * opena2a init -- Initialize security posture assessment for a project.
3
+ *
4
+ * Detects project type, scans for credentials, checks hygiene,
5
+ * calculates trust score, and generates prioritized next steps.
6
+ */
7
+ export interface InitOptions {
8
+ targetDir?: string;
9
+ ci?: boolean;
10
+ format?: 'text' | 'json';
11
+ verbose?: boolean;
12
+ }
13
+ export declare function init(options: InitOptions): Promise<number>;
14
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA8BD,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAuGhE"}
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ /**
3
+ * opena2a init -- Initialize security posture assessment for a project.
4
+ *
5
+ * Detects project type, scans for credentials, checks hygiene,
6
+ * calculates trust score, and generates prioritized next steps.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.init = init;
43
+ const fs = __importStar(require("node:fs"));
44
+ const path = __importStar(require("node:path"));
45
+ const colors_js_1 = require("../util/colors.js");
46
+ const detect_js_1 = require("../util/detect.js");
47
+ const credential_patterns_js_1 = require("../util/credential-patterns.js");
48
+ const advisories_js_1 = require("../util/advisories.js");
49
+ const version_js_1 = require("../util/version.js");
50
+ // --- Core ---
51
+ async function init(options) {
52
+ const targetDir = path.resolve(options.targetDir ?? process.cwd());
53
+ if (!fs.existsSync(targetDir)) {
54
+ process.stderr.write((0, colors_js_1.red)(`Directory not found: ${targetDir}\n`));
55
+ return 1;
56
+ }
57
+ // 1. Detect project type
58
+ const project = (0, detect_js_1.detectProject)(targetDir);
59
+ // 2. Quick credential scan
60
+ const credentialMatches = (0, credential_patterns_js_1.quickCredentialScan)(targetDir);
61
+ const credsBySeverity = {};
62
+ for (const m of credentialMatches) {
63
+ credsBySeverity[m.severity] = (credsBySeverity[m.severity] || 0) + 1;
64
+ }
65
+ // 3. Security hygiene checks
66
+ const checks = runHygieneChecks(targetDir, project, credentialMatches.length);
67
+ // 4. Check advisories (non-blocking)
68
+ let advisoryCheck = { advisories: [], matchedPackages: [], total: 0, fromCache: false };
69
+ try {
70
+ advisoryCheck = await (0, advisories_js_1.checkAdvisories)(targetDir);
71
+ }
72
+ catch {
73
+ // Advisory check is best-effort, don't fail init
74
+ }
75
+ // 5. Calculate trust score
76
+ const { score, grade } = calculateTrustScore(credsBySeverity, checks, targetDir);
77
+ // 6. Generate next steps
78
+ const nextSteps = generateNextSteps(credentialMatches.length, credsBySeverity, checks);
79
+ // 7. Build report
80
+ const report = {
81
+ projectName: project.name,
82
+ projectVersion: project.version,
83
+ projectType: formatProjectType(project),
84
+ directory: targetDir,
85
+ credentialFindings: credentialMatches.length,
86
+ credentialsBySeverity: credsBySeverity,
87
+ hygieneChecks: checks,
88
+ trustScore: score,
89
+ grade,
90
+ nextSteps,
91
+ advisories: {
92
+ count: advisoryCheck.advisories.length,
93
+ matchedPackages: advisoryCheck.matchedPackages,
94
+ },
95
+ };
96
+ // 8. Output
97
+ if (options.format === 'json') {
98
+ process.stdout.write(JSON.stringify(report, null, 2) + '\n');
99
+ }
100
+ else {
101
+ printReport(report, options.verbose);
102
+ // Verbose: show individual credential findings
103
+ if (options.verbose && credentialMatches.length > 0) {
104
+ process.stdout.write((0, colors_js_1.bold)(' Credential Details') + '\n');
105
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
106
+ for (const m of credentialMatches) {
107
+ const sev = m.severity === 'critical' ? (0, colors_js_1.red)('[CRITICAL]')
108
+ : m.severity === 'high' ? (0, colors_js_1.yellow)('[HIGH]')
109
+ : (0, colors_js_1.cyan)('[MEDIUM]');
110
+ const relPath = path.relative(targetDir, m.filePath);
111
+ process.stdout.write(` ${sev} ${(0, colors_js_1.bold)(m.findingId)}: ${m.title}\n`);
112
+ process.stdout.write(` ${(0, colors_js_1.dim)(' File:')} ${relPath}:${m.line}\n`);
113
+ if (m.explanation) {
114
+ process.stdout.write(` ${(0, colors_js_1.dim)(' Why:')} ${m.explanation}\n`);
115
+ }
116
+ process.stdout.write('\n');
117
+ }
118
+ }
119
+ // Drift detection callout (always shown when drift findings exist)
120
+ const driftFindings = credentialMatches.filter(m => m.findingId.startsWith('DRIFT'));
121
+ if (driftFindings.length > 0) {
122
+ process.stdout.write((0, colors_js_1.yellow)((0, colors_js_1.bold)(' Scope Drift Detected')) + '\n');
123
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
124
+ for (const d of driftFindings) {
125
+ const relPath = path.relative(targetDir, d.filePath);
126
+ const driftType = d.findingId === 'DRIFT-001' ? 'Google Maps key may access Gemini AI' : 'AWS key may access Bedrock AI';
127
+ process.stdout.write(` ${(0, colors_js_1.yellow)(d.findingId)} ${driftType}\n`);
128
+ process.stdout.write(` ${(0, colors_js_1.dim)(' ' + relPath + ':' + d.line)}\n`);
129
+ }
130
+ process.stdout.write('\n');
131
+ process.stdout.write((0, colors_js_1.dim)(' Scope drift: keys provisioned for one service silently') + '\n');
132
+ process.stdout.write((0, colors_js_1.dim)(' gain access to AI services, expanding attack surface.') + '\n');
133
+ process.stdout.write((0, colors_js_1.dim)(' Run: opena2a protect') + '\n');
134
+ process.stdout.write('\n');
135
+ }
136
+ // Show advisory warnings after main report
137
+ if (advisoryCheck.advisories.length > 0) {
138
+ (0, advisories_js_1.printAdvisoryWarnings)(advisoryCheck);
139
+ }
140
+ }
141
+ const hasCritical = nextSteps.some(s => s.severity === 'critical');
142
+ return hasCritical ? 1 : 0;
143
+ }
144
+ // --- Hygiene checks ---
145
+ function runHygieneChecks(dir, project, credCount) {
146
+ const checks = [];
147
+ // Credential scan result
148
+ if (credCount === 0) {
149
+ checks.push({ label: 'Credential scan', status: 'pass', detail: 'no findings' });
150
+ }
151
+ else {
152
+ checks.push({
153
+ label: 'Credential scan',
154
+ status: 'fail',
155
+ detail: `${credCount} finding${credCount === 1 ? '' : 's'}`,
156
+ });
157
+ }
158
+ // .gitignore
159
+ const gitignorePath = path.join(dir, '.gitignore');
160
+ if (fs.existsSync(gitignorePath)) {
161
+ checks.push({ label: '.gitignore', status: 'pass', detail: 'present' });
162
+ // .env protection
163
+ const gitignoreContent = fs.readFileSync(gitignorePath, 'utf-8');
164
+ if (gitignoreContent.includes('.env')) {
165
+ checks.push({ label: '.env protection', status: 'pass', detail: 'in .gitignore' });
166
+ }
167
+ else {
168
+ checks.push({ label: '.env protection', status: 'warn', detail: 'NOT in .gitignore' });
169
+ }
170
+ }
171
+ else {
172
+ checks.push({ label: '.gitignore', status: 'warn', detail: 'missing' });
173
+ checks.push({ label: '.env protection', status: 'warn', detail: 'no .gitignore' });
174
+ }
175
+ // Lock file
176
+ const lockFiles = [
177
+ { file: 'package-lock.json', label: 'package-lock.json' },
178
+ { file: 'yarn.lock', label: 'yarn.lock' },
179
+ { file: 'pnpm-lock.yaml', label: 'pnpm-lock.yaml' },
180
+ { file: 'bun.lockb', label: 'bun.lockb' },
181
+ { file: 'go.sum', label: 'go.sum' },
182
+ { file: 'poetry.lock', label: 'poetry.lock' },
183
+ { file: 'Pipfile.lock', label: 'Pipfile.lock' },
184
+ ];
185
+ const foundLock = lockFiles.find(lf => fs.existsSync(path.join(dir, lf.file)));
186
+ if (foundLock) {
187
+ checks.push({ label: 'Lock file', status: 'pass', detail: foundLock.label });
188
+ }
189
+ else {
190
+ checks.push({ label: 'Lock file', status: 'warn', detail: 'none found' });
191
+ }
192
+ // Security config
193
+ const securityConfigs = ['.opena2a.yaml', '.opena2a.json', '.opena2a/guard/signatures.json'];
194
+ const foundConfig = securityConfigs.find(sc => fs.existsSync(path.join(dir, sc)));
195
+ if (foundConfig) {
196
+ checks.push({ label: 'Security config', status: 'pass', detail: foundConfig });
197
+ }
198
+ else {
199
+ checks.push({ label: 'Security config', status: 'info', detail: 'none' });
200
+ }
201
+ // MCP config
202
+ if (project.hasMcp) {
203
+ checks.push({ label: 'MCP config', status: 'info', detail: 'found' });
204
+ }
205
+ return checks;
206
+ }
207
+ // --- Trust score ---
208
+ function calculateTrustScore(credsBySeverity, checks, dir) {
209
+ let score = 100;
210
+ // Credential penalties
211
+ score -= (credsBySeverity['critical'] || 0) * 25;
212
+ score -= (credsBySeverity['high'] || 0) * 15;
213
+ score -= (credsBySeverity['medium'] || 0) * 8;
214
+ score -= (credsBySeverity['low'] || 0) * 3;
215
+ // Hygiene penalties
216
+ const gitignoreCheck = checks.find(c => c.label === '.gitignore');
217
+ if (gitignoreCheck?.status !== 'pass')
218
+ score -= 15;
219
+ const envCheck = checks.find(c => c.label === '.env protection');
220
+ if (envCheck?.status === 'warn')
221
+ score -= 10;
222
+ const lockCheck = checks.find(c => c.label === 'Lock file');
223
+ if (lockCheck?.status !== 'pass')
224
+ score -= 5;
225
+ // Bonus for security config
226
+ const secConfig = checks.find(c => c.label === 'Security config');
227
+ if (secConfig?.status === 'pass')
228
+ score += 5;
229
+ score = Math.max(0, Math.min(100, score));
230
+ let grade;
231
+ if (score >= 90)
232
+ grade = 'A';
233
+ else if (score >= 80)
234
+ grade = 'B';
235
+ else if (score >= 70)
236
+ grade = 'C';
237
+ else if (score >= 60)
238
+ grade = 'D';
239
+ else
240
+ grade = 'F';
241
+ return { score, grade };
242
+ }
243
+ // --- Next steps ---
244
+ function generateNextSteps(credCount, credsBySeverity, checks) {
245
+ const steps = [];
246
+ // Credentials -> protect
247
+ if (credCount > 0) {
248
+ steps.push({
249
+ severity: 'critical',
250
+ description: `Migrate ${credCount} hardcoded credential${credCount === 1 ? '' : 's'}`,
251
+ command: 'opena2a protect',
252
+ });
253
+ }
254
+ // .env protection
255
+ const envCheck = checks.find(c => c.label === '.env protection');
256
+ if (envCheck?.status === 'warn') {
257
+ steps.push({
258
+ severity: 'high',
259
+ description: 'Add .env to .gitignore',
260
+ command: "echo '.env' >> .gitignore",
261
+ });
262
+ }
263
+ // No .gitignore
264
+ const gitignoreCheck = checks.find(c => c.label === '.gitignore');
265
+ if (gitignoreCheck?.status !== 'pass') {
266
+ steps.push({
267
+ severity: 'high',
268
+ description: 'Create .gitignore',
269
+ command: 'npx gitignore node',
270
+ });
271
+ }
272
+ // Sign config files
273
+ steps.push({
274
+ severity: 'medium',
275
+ description: 'Sign config files for integrity',
276
+ command: 'opena2a guard sign',
277
+ });
278
+ // Runtime protection
279
+ steps.push({
280
+ severity: 'low',
281
+ description: 'Start runtime protection',
282
+ command: 'opena2a runtime start',
283
+ });
284
+ return steps;
285
+ }
286
+ // --- Output ---
287
+ function formatProjectType(project) {
288
+ const parts = [];
289
+ switch (project.type) {
290
+ case 'node':
291
+ parts.push('Node.js');
292
+ break;
293
+ case 'go':
294
+ parts.push('Go');
295
+ break;
296
+ case 'python':
297
+ parts.push('Python');
298
+ break;
299
+ default: parts.push('Unknown');
300
+ }
301
+ if (project.hasMcp)
302
+ parts.push('+ MCP server');
303
+ return parts.join(' ');
304
+ }
305
+ function printReport(report, _verbose) {
306
+ const VERSION = (0, version_js_1.getVersion)();
307
+ process.stdout.write('\n');
308
+ process.stdout.write((0, colors_js_1.bold)(' OpenA2A Security Initialization') + (0, colors_js_1.dim)(` v${VERSION}`) + '\n\n');
309
+ // Project info
310
+ const projectDisplay = report.projectName
311
+ ? `${report.projectName}${report.projectVersion ? ' v' + report.projectVersion : ''}`
312
+ : path.basename(report.directory);
313
+ process.stdout.write(` ${(0, colors_js_1.dim)('Project')} ${projectDisplay}\n`);
314
+ process.stdout.write(` ${(0, colors_js_1.dim)('Type')} ${report.projectType}\n`);
315
+ process.stdout.write(` ${(0, colors_js_1.dim)('Directory')} ${report.directory}\n`);
316
+ process.stdout.write('\n');
317
+ // Security posture
318
+ process.stdout.write((0, colors_js_1.bold)(' Security Posture') + '\n');
319
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
320
+ for (const check of report.hygieneChecks) {
321
+ const statusDisplay = check.status === 'pass' ? (0, colors_js_1.green)(check.detail)
322
+ : check.status === 'fail' ? (0, colors_js_1.red)(check.detail)
323
+ : check.status === 'warn' ? (0, colors_js_1.yellow)(check.detail)
324
+ : (0, colors_js_1.dim)(check.detail);
325
+ process.stdout.write(` ${(0, colors_js_1.dim)(check.label.padEnd(20))} ${statusDisplay}\n`);
326
+ }
327
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
328
+ // Trust score
329
+ const scoreColor = report.trustScore >= 80 ? colors_js_1.green
330
+ : report.trustScore >= 60 ? colors_js_1.yellow
331
+ : colors_js_1.red;
332
+ process.stdout.write(` ${(0, colors_js_1.dim)('Trust Score')} ${scoreColor(`${report.trustScore} / 100`)} ${(0, colors_js_1.dim)('[Grade:')} ${scoreColor(report.grade)}${(0, colors_js_1.dim)(']')}\n`);
333
+ process.stdout.write('\n');
334
+ // Next steps
335
+ if (report.nextSteps.length > 0) {
336
+ process.stdout.write((0, colors_js_1.bold)(' Next Steps') + '\n');
337
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
338
+ for (const step of report.nextSteps) {
339
+ const severityTag = step.severity === 'critical' ? (0, colors_js_1.red)(`[CRITICAL]`)
340
+ : step.severity === 'high' ? (0, colors_js_1.yellow)(`[HIGH]`)
341
+ : step.severity === 'medium' ? (0, colors_js_1.cyan)(`[MEDIUM]`)
342
+ : (0, colors_js_1.dim)(`[LOW]`);
343
+ process.stdout.write(` ${severityTag.padEnd(22)} ${step.description}\n`);
344
+ process.stdout.write(` ${' '.repeat(12)} ${(0, colors_js_1.dim)(step.command)}\n\n`);
345
+ }
346
+ process.stdout.write((0, colors_js_1.gray)(' ' + '-'.repeat(47)) + '\n');
347
+ }
348
+ process.stdout.write('\n');
349
+ // Quick start hints for new users
350
+ process.stdout.write((0, colors_js_1.dim)(' Tip: Try these commands to explore further:') + '\n');
351
+ process.stdout.write((0, colors_js_1.dim)(' opena2a ~<query> Search commands (e.g. opena2a ~drift)') + '\n');
352
+ process.stdout.write((0, colors_js_1.dim)(' opena2a ? Get smart recommendations') + '\n');
353
+ process.stdout.write((0, colors_js_1.dim)(' opena2a --help See all available commands') + '\n');
354
+ process.stdout.write('\n');
355
+ }
356
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CH,oBAuGC;AApJD,4CAA8B;AAC9B,gDAAkC;AAClC,iDAA8E;AAC9E,iDAAkD;AAClD,2EAAqE;AACrE,yDAAmG;AACnG,mDAAgD;AAqChD,eAAe;AAER,KAAK,UAAU,IAAI,CAAC,OAAoB;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,wBAAwB,SAAS,IAAI,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,IAAA,yBAAa,EAAC,SAAS,CAAC,CAAC;IAEzC,2BAA2B;IAC3B,MAAM,iBAAiB,GAAG,IAAA,4CAAmB,EAAC,SAAS,CAAC,CAAC;IACzD,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE9E,qCAAqC;IACrC,IAAI,aAAa,GAAkB,EAAE,UAAU,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACvG,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,IAAA,+BAAe,EAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,iDAAiD;IACnD,CAAC;IAED,2BAA2B;IAC3B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAEjF,yBAAyB;IACzB,MAAM,SAAS,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAEvF,kBAAkB;IAClB,MAAM,MAAM,GAAe;QACzB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,WAAW,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACvC,SAAS,EAAE,SAAS;QACpB,kBAAkB,EAAE,iBAAiB,CAAC,MAAM;QAC5C,qBAAqB,EAAE,eAAe;QACtC,aAAa,EAAE,MAAM;QACrB,UAAU,EAAE,KAAK;QACjB,KAAK;QACL,SAAS;QACT,UAAU,EAAE;YACV,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM;YACtC,eAAe,EAAE,aAAa,CAAC,eAAe;SAC/C;KACF,CAAC;IAEF,YAAY;IACZ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAErC,+CAA+C;QAC/C,IAAI,OAAO,CAAC,OAAO,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,sBAAsB,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAA,eAAG,EAAC,YAAY,CAAC;oBACvD,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAM,EAAC,QAAQ,CAAC;wBAC1C,CAAC,CAAC,IAAA,gBAAI,EAAC,UAAU,CAAC,CAAC;gBACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAA,gBAAI,EAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;gBACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,SAAS,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;gBACnE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QACrF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,kBAAM,EAAC,IAAA,gBAAI,EAAC,wBAAwB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,+BAA+B,CAAC;gBACzH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,kBAAM,EAAC,CAAC,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC;gBAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,0DAA0D,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,yDAAyD,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,CAAC;YAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,2CAA2C;QAC3C,IAAI,aAAa,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,IAAA,qCAAqB,EAAC,aAAa,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACnE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,yBAAyB;AAEzB,SAAS,gBAAgB,CACvB,GAAW,EACX,OAAyC,EACzC,SAAiB;IAEjB,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,yBAAyB;IACzB,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,GAAG,SAAS,WAAW,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,aAAa;IACb,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,kBAAkB;QAClB,MAAM,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACjE,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,YAAY;IACZ,MAAM,SAAS,GAAG;QAChB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;QACzD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;QACzC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACnD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;QACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACnC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;QAC7C,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;KAChD,CAAC;IACF,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB;IAClB,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,eAAe,EAAE,gCAAgC,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,aAAa;IACb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sBAAsB;AAEtB,SAAS,mBAAmB,CAC1B,eAAuC,EACvC,MAAsB,EACtB,GAAW;IAEX,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,uBAAuB;IACvB,KAAK,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IACjD,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAE3C,oBAAoB;IACpB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE,MAAM,KAAK,MAAM;QAAE,KAAK,IAAI,EAAE,CAAC;IAEnD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;IACjE,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM;QAAE,KAAK,IAAI,EAAE,CAAC;IAE7C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC;IAC5D,IAAI,SAAS,EAAE,MAAM,KAAK,MAAM;QAAE,KAAK,IAAI,CAAC,CAAC;IAE7C,4BAA4B;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;IAClE,IAAI,SAAS,EAAE,MAAM,KAAK,MAAM;QAAE,KAAK,IAAI,CAAC,CAAC;IAE7C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1C,IAAI,KAAa,CAAC;IAClB,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SACxB,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SAC7B,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;SAC7B,IAAI,KAAK,IAAI,EAAE;QAAE,KAAK,GAAG,GAAG,CAAC;;QAC7B,KAAK,GAAG,GAAG,CAAC;IAEjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,qBAAqB;AAErB,SAAS,iBAAiB,CACxB,SAAiB,EACjB,eAAuC,EACvC,MAAsB;IAEtB,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,yBAAyB;IACzB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,UAAU;YACpB,WAAW,EAAE,WAAW,SAAS,wBAAwB,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACrF,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,CAAC;IACjE,IAAI,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,wBAAwB;YACrC,OAAO,EAAE,2BAA2B;SACrC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;IAClE,IAAI,cAAc,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,oBAAoB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC;QACT,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IAEH,qBAAqB;IACrB,KAAK,CAAC,IAAI,CAAC;QACT,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iBAAiB;AAEjB,SAAS,iBAAiB,CAAC,OAAyC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAC,MAAM;QAC1C,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM;QACnC,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,MAAM;QAC3C,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB,EAAE,QAAkB;IACzD,MAAM,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;IAE7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,mCAAmC,CAAC,GAAG,IAAA,eAAG,EAAC,MAAM,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;IAEhG,eAAe;IACf,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;QACvC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;QACrF,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,SAAS,CAAC,SAAS,cAAc,IAAI,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,MAAM,CAAC,YAAY,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,WAAW,CAAC,OAAO,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,mBAAmB;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,iBAAK,EAAC,KAAK,CAAC,MAAM,CAAC;YACjE,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,eAAG,EAAC,KAAK,CAAC,MAAM,CAAC;gBAC7C,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAM,EAAC,KAAK,CAAC,MAAM,CAAC;oBAChD,CAAC,CAAC,IAAA,eAAG,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,aAAa,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzD,cAAc;IACd,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,iBAAK;QAChD,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,kBAAM;YAClC,CAAC,CAAC,eAAG,CAAC;IAER,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,eAAG,EAAC,aAAa,CAAC,SAAS,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,QAAQ,CAAC,KAAK,IAAA,eAAG,EAAC,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,eAAG,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7J,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,aAAa;IACb,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,cAAc,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,IAAA,eAAG,EAAC,YAAY,CAAC;gBAClE,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAA,kBAAM,EAAC,QAAQ,CAAC;oBAC7C,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,gBAAI,EAAC,UAAU,CAAC;wBAC/C,CAAC,CAAC,IAAA,eAAG,EAAC,OAAO,CAAC,CAAC;YAEjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAA,eAAG,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,gBAAI,EAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,+CAA+C,CAAC,GAAG,IAAI,CAAC,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,gEAAgE,CAAC,GAAG,IAAI,CAAC,CAAC;IACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,qDAAqD,CAAC,GAAG,IAAI,CAAC,CAAC;IACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAA,eAAG,EAAC,sDAAsD,CAAC,GAAG,IAAI,CAAC,CAAC;IACzF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Guided 1Password migration flow.
3
+ *
4
+ * Called from protect.ts after successful credential migration to local vault.
5
+ * Walks users through migrating secrets to 1Password for team sharing
6
+ * and audit trails. Uses the offerAction pattern for transparency.
7
+ *
8
+ * Secretless already has full 1Password backend, migration infrastructure,
9
+ * and CLI backend switching. This module provides the guided UX layer.
10
+ */
11
+ interface MigrationContext {
12
+ /** Number of credentials in local vault */
13
+ credentialCount: number;
14
+ /** Whether to skip interactive prompts */
15
+ ci?: boolean;
16
+ }
17
+ /**
18
+ * Offer to migrate local vault credentials to 1Password.
19
+ * Returns true if migration was performed successfully.
20
+ */
21
+ export declare function offer1PasswordMigration(ctx: MigrationContext): Promise<boolean>;
22
+ export {};
23
+ //# sourceMappingURL=onepassword-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onepassword-migration.d.ts","sourceRoot":"","sources":["../../src/commands/onepassword-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,UAAU,gBAAgB;IACxB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAkKrF"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /**
3
+ * Guided 1Password migration flow.
4
+ *
5
+ * Called from protect.ts after successful credential migration to local vault.
6
+ * Walks users through migrating secrets to 1Password for team sharing
7
+ * and audit trails. Uses the offerAction pattern for transparency.
8
+ *
9
+ * Secretless already has full 1Password backend, migration infrastructure,
10
+ * and CLI backend switching. This module provides the guided UX layer.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.offer1PasswordMigration = offer1PasswordMigration;
14
+ const colors_js_1 = require("../util/colors.js");
15
+ const spinner_js_1 = require("../util/spinner.js");
16
+ /**
17
+ * Offer to migrate local vault credentials to 1Password.
18
+ * Returns true if migration was performed successfully.
19
+ */
20
+ async function offer1PasswordMigration(ctx) {
21
+ // CI or non-TTY: skip silently
22
+ if (ctx.ci || !process.stdin.isTTY) {
23
+ return false;
24
+ }
25
+ // Check if user previously declined permanently
26
+ let rememberedChoice;
27
+ try {
28
+ const shared = await import('@opena2a/shared');
29
+ const mod = 'default' in shared ? shared.default : shared;
30
+ rememberedChoice = mod.getRememberedChoice('1password-skip');
31
+ }
32
+ catch {
33
+ // shared not available
34
+ }
35
+ if (rememberedChoice === true) {
36
+ // User said "don't ask again"
37
+ return false;
38
+ }
39
+ // Step 1: Offer
40
+ process.stdout.write('\n' + (0, colors_js_1.bold)('1Password Integration') + '\n\n');
41
+ process.stdout.write(`Your ${ctx.credentialCount} credential(s) are in the local encrypted vault.\n` +
42
+ 'Migrate to 1Password for team sharing and audit trails?\n\n');
43
+ let userChoice;
44
+ try {
45
+ const { select } = await import('@inquirer/prompts');
46
+ userChoice = await select({
47
+ message: 'Migrate to 1Password?',
48
+ choices: [
49
+ { name: 'Yes, set up 1Password', value: 'yes' },
50
+ { name: 'No, keep local vault', value: 'no' },
51
+ { name: 'No, and do not ask again', value: 'never' },
52
+ ],
53
+ });
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ if (userChoice === 'never') {
59
+ try {
60
+ const shared = await import('@opena2a/shared');
61
+ const mod = 'default' in shared ? shared.default : shared;
62
+ mod.setRememberedChoice('1password-skip', true);
63
+ }
64
+ catch {
65
+ // ignore
66
+ }
67
+ process.stdout.write((0, colors_js_1.dim)('Noted. Enable later: opena2a protect --1password') + '\n');
68
+ return false;
69
+ }
70
+ if (userChoice === 'no') {
71
+ return false;
72
+ }
73
+ // Step 2: Prerequisites
74
+ process.stdout.write('\n' + (0, colors_js_1.bold)('Prerequisites') + '\n\n');
75
+ process.stdout.write('Before migrating, you need:\n\n');
76
+ process.stdout.write(' 1. ' + (0, colors_js_1.bold)('1Password desktop app') + '\n');
77
+ process.stdout.write(' Download: ' + (0, colors_js_1.cyan)('https://1password.com/downloads') + '\n\n');
78
+ process.stdout.write(' 2. ' + (0, colors_js_1.bold)('Developer settings enabled') + '\n');
79
+ process.stdout.write(' 1Password > Settings > Developer > "Integrate with 1Password CLI"\n\n');
80
+ process.stdout.write(' 3. ' + (0, colors_js_1.bold)('1Password CLI') + '\n');
81
+ process.stdout.write(' Install: ' + (0, colors_js_1.cyan)('brew install 1password-cli') + '\n\n');
82
+ let ready = false;
83
+ try {
84
+ const { confirm } = await import('@inquirer/prompts');
85
+ ready = await confirm({ message: 'Ready?', default: true });
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ if (!ready) {
91
+ process.stdout.write((0, colors_js_1.dim)('Run this flow again after setup: opena2a protect .') + '\n');
92
+ return false;
93
+ }
94
+ // Step 3: Verify 1Password CLI
95
+ const spinner = new spinner_js_1.Spinner('Checking 1Password CLI...');
96
+ spinner.start();
97
+ const opAvailable = await check1PasswordCli();
98
+ spinner.stop();
99
+ if (!opAvailable) {
100
+ process.stdout.write((0, colors_js_1.red)('1Password CLI not found or not authenticated.') + '\n');
101
+ process.stdout.write((0, colors_js_1.dim)('Install: brew install 1password-cli') + '\n');
102
+ process.stdout.write((0, colors_js_1.dim)('Then: op signin') + '\n');
103
+ return false;
104
+ }
105
+ process.stdout.write((0, colors_js_1.green)('1Password CLI verified.') + '\n\n');
106
+ // Step 4: Show plan
107
+ process.stdout.write((0, colors_js_1.cyan)('What will happen:') + '\n');
108
+ process.stdout.write(` 1. Create a "Secretless" vault in 1Password (if needed)\n`);
109
+ process.stdout.write(` 2. Copy ${ctx.credentialCount} secret(s) from local vault to 1Password\n`);
110
+ process.stdout.write(` 3. Set 1Password as the default Secretless backend\n\n`);
111
+ process.stdout.write((0, colors_js_1.dim)('If anything goes wrong:') + '\n');
112
+ process.stdout.write(` - Your local vault is preserved (not deleted)\n`);
113
+ process.stdout.write(` - Run: ${(0, colors_js_1.cyan)('secretless-ai backend set local')} to revert\n\n`);
114
+ let proceed = false;
115
+ try {
116
+ const { confirm } = await import('@inquirer/prompts');
117
+ proceed = await confirm({ message: 'Proceed with migration?', default: true });
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ if (!proceed) {
123
+ return false;
124
+ }
125
+ // Step 5: Execute migration
126
+ spinner.update('Migrating secrets to 1Password...');
127
+ spinner.start();
128
+ try {
129
+ const secretless = await Function('return import("secretless-ai")')();
130
+ const mod = 'default' in secretless ? secretless.default : secretless;
131
+ // Attempt migration
132
+ if (mod.migrateSecrets) {
133
+ const result = await mod.migrateSecrets('local', '1password', {
134
+ deleteFromSource: false,
135
+ });
136
+ spinner.stop();
137
+ const migrated = result?.migrated ?? 0;
138
+ const failed = result?.failed ?? 0;
139
+ if (failed > 0) {
140
+ process.stdout.write((0, colors_js_1.yellow)(`Migrated ${migrated}, failed ${failed} secret(s).`) + '\n');
141
+ }
142
+ else {
143
+ process.stdout.write((0, colors_js_1.green)(`Successfully migrated ${migrated} secret(s) to 1Password.`) + '\n');
144
+ }
145
+ }
146
+ else {
147
+ spinner.stop();
148
+ process.stdout.write((0, colors_js_1.yellow)('Migration API not available in this version of secretless-ai.') + '\n');
149
+ process.stdout.write((0, colors_js_1.dim)('Update: npm install -g secretless-ai@latest') + '\n');
150
+ return false;
151
+ }
152
+ // Step 6: Set default backend
153
+ if (mod.setBackend) {
154
+ await mod.setBackend('1password');
155
+ process.stdout.write((0, colors_js_1.green)('Default backend set to 1Password.') + '\n');
156
+ }
157
+ return true;
158
+ }
159
+ catch (err) {
160
+ spinner.stop();
161
+ process.stderr.write((0, colors_js_1.red)('Migration failed: ') + (err instanceof Error ? err.message : String(err)) + '\n');
162
+ process.stdout.write((0, colors_js_1.dim)('Your local vault is unchanged. Run: secretless-ai backend set local') + '\n');
163
+ return false;
164
+ }
165
+ }
166
+ /**
167
+ * Check if 1Password CLI is installed and authenticated.
168
+ */
169
+ async function check1PasswordCli() {
170
+ try {
171
+ const { execSync } = await import('node:child_process');
172
+ execSync('op account get', { stdio: 'pipe', timeout: 5000 });
173
+ return true;
174
+ }
175
+ catch {
176
+ return false;
177
+ }
178
+ }
179
+ //# sourceMappingURL=onepassword-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onepassword-migration.js","sourceRoot":"","sources":["../../src/commands/onepassword-migration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * opena2a protect — Detect credentials and migrate to Secretless vault.
3
+ *
4
+ * Flow:
5
+ * 1. Run HMA CRED + DRIFT checks on the target directory
6
+ * 2. For each detected credential with a raw value:
7
+ * a. Store in Secretless SecretStore
8
+ * b. Replace in source file with environment variable reference
9
+ * c. Register broker policy (default: deny-all, must be explicitly allowed)
10
+ * d. Add to .env.example
11
+ * 3. Re-run scan to verify clean
12
+ * 4. Output migration report
13
+ */
14
+ export interface ProtectOptions {
15
+ /** Target directory to scan and protect */
16
+ targetDir: string;
17
+ /** Dry run mode (show what would change, don't modify) */
18
+ dryRun?: boolean;
19
+ /** Verbose output */
20
+ verbose?: boolean;
21
+ /** CI mode (no interactive prompts) */
22
+ ci?: boolean;
23
+ /** Output format */
24
+ format?: 'text' | 'json';
25
+ /** Skip verification re-scan */
26
+ skipVerify?: boolean;
27
+ /** Path to write interactive HTML report */
28
+ report?: string;
29
+ }
30
+ /**
31
+ * Main protect command. Scans for credentials, migrates to vault, verifies clean.
32
+ */
33
+ export declare function protect(options: ProtectOptions): Promise<number>;
34
+ //# sourceMappingURL=protect.d.ts.map