@nepopsx/cli 0.0.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 (90) hide show
  1. package/bin/opsx.mjs +2 -0
  2. package/dist/commands/activate.d.ts +6 -0
  3. package/dist/commands/activate.d.ts.map +1 -0
  4. package/dist/commands/activate.js +50 -0
  5. package/dist/commands/activate.js.map +1 -0
  6. package/dist/commands/decode.d.ts +2 -0
  7. package/dist/commands/decode.d.ts.map +1 -0
  8. package/dist/commands/decode.js +57 -0
  9. package/dist/commands/decode.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +6 -0
  11. package/dist/commands/doctor.d.ts.map +1 -0
  12. package/dist/commands/doctor.js +133 -0
  13. package/dist/commands/doctor.js.map +1 -0
  14. package/dist/commands/init.d.ts +6 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +385 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/install.d.ts +6 -0
  19. package/dist/commands/install.d.ts.map +1 -0
  20. package/dist/commands/install.js +29 -0
  21. package/dist/commands/install.js.map +1 -0
  22. package/dist/commands/server.d.ts +4 -0
  23. package/dist/commands/server.d.ts.map +1 -0
  24. package/dist/commands/server.js +35 -0
  25. package/dist/commands/server.js.map +1 -0
  26. package/dist/commands/sync.d.ts +8 -0
  27. package/dist/commands/sync.d.ts.map +1 -0
  28. package/dist/commands/sync.js +352 -0
  29. package/dist/commands/sync.js.map +1 -0
  30. package/dist/config/api-config.d.ts +12 -0
  31. package/dist/config/api-config.d.ts.map +1 -0
  32. package/dist/config/api-config.js +67 -0
  33. package/dist/config/api-config.js.map +1 -0
  34. package/dist/generator/builtin-templates.d.ts +12 -0
  35. package/dist/generator/builtin-templates.d.ts.map +1 -0
  36. package/dist/generator/builtin-templates.js +251 -0
  37. package/dist/generator/builtin-templates.js.map +1 -0
  38. package/dist/generator/philosophy.d.ts +12 -0
  39. package/dist/generator/philosophy.d.ts.map +1 -0
  40. package/dist/generator/philosophy.js +106 -0
  41. package/dist/generator/philosophy.js.map +1 -0
  42. package/dist/generator/render.d.ts +74 -0
  43. package/dist/generator/render.d.ts.map +1 -0
  44. package/dist/generator/render.js +229 -0
  45. package/dist/generator/render.js.map +1 -0
  46. package/dist/generator/writer.d.ts +19 -0
  47. package/dist/generator/writer.d.ts.map +1 -0
  48. package/dist/generator/writer.js +59 -0
  49. package/dist/generator/writer.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +61 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/licensing/fingerprint.d.ts +48 -0
  55. package/dist/licensing/fingerprint.d.ts.map +1 -0
  56. package/dist/licensing/fingerprint.js +163 -0
  57. package/dist/licensing/fingerprint.js.map +1 -0
  58. package/dist/licensing/index.d.ts +7 -0
  59. package/dist/licensing/index.d.ts.map +1 -0
  60. package/dist/licensing/index.js +7 -0
  61. package/dist/licensing/index.js.map +1 -0
  62. package/dist/licensing/license-manager.d.ts +44 -0
  63. package/dist/licensing/license-manager.d.ts.map +1 -0
  64. package/dist/licensing/license-manager.js +311 -0
  65. package/dist/licensing/license-manager.js.map +1 -0
  66. package/dist/licensing/template-fetch.d.ts +31 -0
  67. package/dist/licensing/template-fetch.d.ts.map +1 -0
  68. package/dist/licensing/template-fetch.js +92 -0
  69. package/dist/licensing/template-fetch.js.map +1 -0
  70. package/dist/security/agent-validator.d.ts +20 -0
  71. package/dist/security/agent-validator.d.ts.map +1 -0
  72. package/dist/security/agent-validator.js +67 -0
  73. package/dist/security/agent-validator.js.map +1 -0
  74. package/dist/security/index.d.ts +7 -0
  75. package/dist/security/index.d.ts.map +1 -0
  76. package/dist/security/index.js +7 -0
  77. package/dist/security/index.js.map +1 -0
  78. package/dist/security/integrity.d.ts +28 -0
  79. package/dist/security/integrity.d.ts.map +1 -0
  80. package/dist/security/integrity.js +87 -0
  81. package/dist/security/integrity.js.map +1 -0
  82. package/dist/security/scanner.d.ts +43 -0
  83. package/dist/security/scanner.d.ts.map +1 -0
  84. package/dist/security/scanner.js +172 -0
  85. package/dist/security/scanner.js.map +1 -0
  86. package/dist/utils/detect.d.ts +7 -0
  87. package/dist/utils/detect.d.ts.map +1 -0
  88. package/dist/utils/detect.js +227 -0
  89. package/dist/utils/detect.js.map +1 -0
  90. package/package.json +44 -0
@@ -0,0 +1,385 @@
1
+ import { input, select, confirm, checkbox } from '@inquirer/prompts';
2
+ import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { stringify } from 'yaml';
5
+ import chalk from 'chalk';
6
+ import { detectServices } from '../utils/detect.js';
7
+ export async function initCommand(options) {
8
+ const cwd = process.cwd();
9
+ const configDir = join(cwd, '.opsx');
10
+ const configPath = join(configDir, 'workspace.yaml');
11
+ if (existsSync(configPath)) {
12
+ const overwrite = await confirm({
13
+ message: `.opsx/workspace.yaml already exists. Overwrite?`,
14
+ default: false,
15
+ });
16
+ if (!overwrite) {
17
+ console.log(chalk.yellow('Aborted.'));
18
+ return;
19
+ }
20
+ }
21
+ console.log(chalk.bold.cyan('\n🔧 OPSX Workspace Setup\n'));
22
+ // ── Step 1: Organization ──────────────────────────────────
23
+ console.log(chalk.bold('Step 1/5: Organization'));
24
+ const orgName = await input({
25
+ message: 'Organization name:',
26
+ validate: (v) => v.trim().length > 0 || 'Required',
27
+ });
28
+ const githubOrg = await input({
29
+ message: 'GitHub org/user (optional):',
30
+ });
31
+ // ── Step 2: Workspace ─────────────────────────────────────
32
+ console.log(chalk.bold('\nStep 2/5: Workspace'));
33
+ const dirName = cwd.split('/').pop() ?? 'my-project';
34
+ const workspaceName = await input({
35
+ message: 'Project name:',
36
+ default: dirName,
37
+ });
38
+ const workspaceDesc = await input({
39
+ message: 'Brief project description:',
40
+ });
41
+ const repo = await input({
42
+ message: 'GitHub repo (owner/name, optional):',
43
+ default: githubOrg ? `${githubOrg.trim()}/${dirName}` : '',
44
+ });
45
+ // ── Step 3: Auto-detect services ─────────────────────────
46
+ console.log(chalk.bold('\nStep 3/5: Services'));
47
+ console.log(chalk.dim('Scanning workspace for services...\n'));
48
+ const detected = detectServices(cwd);
49
+ let services = [];
50
+ if (detected.length > 0) {
51
+ console.log(chalk.green(`Found ${detected.length} service(s):`));
52
+ for (const s of detected) {
53
+ console.log(` ${chalk.bold(s.name)} — ${s.language}/${s.framework ?? 'unknown'} at ${s.path}`);
54
+ }
55
+ const useDetected = await confirm({
56
+ message: 'Use detected services?',
57
+ default: true,
58
+ });
59
+ if (useDetected) {
60
+ services = detected;
61
+ }
62
+ }
63
+ else {
64
+ console.log(chalk.yellow('No services auto-detected.'));
65
+ }
66
+ const addMore = await confirm({
67
+ message: services.length > 0 ? 'Add more services manually?' : 'Add services manually?',
68
+ default: services.length === 0,
69
+ });
70
+ if (addMore) {
71
+ let adding = true;
72
+ while (adding) {
73
+ const svc = await promptService();
74
+ services.push(svc);
75
+ adding = await confirm({ message: 'Add another service?', default: false });
76
+ }
77
+ }
78
+ if (services.length === 0) {
79
+ console.log(chalk.red('At least one service is required.'));
80
+ return;
81
+ }
82
+ // ── Step 4: Execution order ───────────────────────────────
83
+ console.log(chalk.bold('\nStep 4/7: Execution Order'));
84
+ console.log(chalk.dim('For multi-service changes, which order should agents modify services?\n'));
85
+ let executionOrder;
86
+ if (services.length > 1) {
87
+ const ordered = await checkbox({
88
+ message: 'Select services in order (upstream → downstream):',
89
+ choices: services.map((s) => ({ name: `${s.name} (${s.language})`, value: s.name })),
90
+ });
91
+ if (ordered.length > 0) {
92
+ executionOrder = ordered;
93
+ }
94
+ }
95
+ // ── Step 5: Coding Philosophy ─────────────────────────────
96
+ console.log(chalk.bold('\nStep 5/7: Coding Philosophy'));
97
+ console.log(chalk.dim('Set your team\'s coding preferences. Agents will follow these as directives.\n'));
98
+ const wantPhilosophy = await confirm({
99
+ message: 'Configure coding philosophy? (can be added later in workspace.yaml)',
100
+ default: true,
101
+ });
102
+ let philosophy;
103
+ if (wantPhilosophy) {
104
+ philosophy = await promptPhilosophy();
105
+ }
106
+ // ── Step 6: Agents ────────────────────────────────────────
107
+ console.log(chalk.bold('\nStep 6/7: Agents'));
108
+ const agentChoices = [
109
+ { name: 'feature-factory — End-to-end feature development (discovery → deploy)', value: 'feature-factory' },
110
+ { name: 'sdlc-orchestrator — Spec-driven planning & implementation', value: 'sdlc-orchestrator' },
111
+ { name: 'qa-commander — Automated QA & testing', value: 'qa-commander' },
112
+ { name: 'code-review-guardian — Deep PR reviews', value: 'code-review-guardian' },
113
+ ];
114
+ const selectedAgents = await checkbox({
115
+ message: 'Which agents do you want to install?',
116
+ choices: agentChoices,
117
+ });
118
+ const agents = {};
119
+ for (const a of selectedAgents) {
120
+ agents[a] = { enabled: true };
121
+ }
122
+ // ── Build config ──────────────────────────────────────────
123
+ const config = {
124
+ version: 1,
125
+ org: {
126
+ name: orgName.trim(),
127
+ ...(githubOrg.trim() ? { github_org: githubOrg.trim() } : {}),
128
+ },
129
+ workspace: {
130
+ name: workspaceName.trim(),
131
+ ...(workspaceDesc.trim() ? { description: workspaceDesc.trim() } : {}),
132
+ ...(repo.trim() ? { repo: repo.trim() } : {}),
133
+ },
134
+ services,
135
+ ...(executionOrder ? { execution_order: executionOrder } : {}),
136
+ conventions: {
137
+ branching: 'feat/*,fix/*,chore/*',
138
+ commits: 'conventional',
139
+ pr_required: true,
140
+ default_branch: 'main',
141
+ test_required: true,
142
+ },
143
+ ...(Object.keys(agents).length > 0 ? { agents } : {}),
144
+ safety: {
145
+ branch_isolation: true,
146
+ checkpoint_before_destructive: true,
147
+ confirm_destructive: true,
148
+ scope_restriction: true,
149
+ },
150
+ ...(philosophy ? { philosophy } : {}),
151
+ customs_dir: 'customs/',
152
+ };
153
+ // ── Step 7: Custom Instructions ───────────────────────────
154
+ console.log(chalk.bold('\nStep 7/7: Custom Instructions'));
155
+ const customsDir = join(cwd, 'customs');
156
+ const customsAutoDir = join(customsDir, 'auto');
157
+ if (!existsSync(customsDir)) {
158
+ const createCustoms = await confirm({
159
+ message: 'Create customs/ directory for freeform team instructions?',
160
+ default: true,
161
+ });
162
+ if (createCustoms) {
163
+ mkdirSync(customsAutoDir, { recursive: true });
164
+ // Seed with a README explaining the customs directory
165
+ writeFileSync(join(customsDir, 'README.md'), `# Custom Instructions
166
+
167
+ Place \`.md\` files here to inject freeform instructions into Feature Factory agents.
168
+
169
+ ## How It Works
170
+
171
+ - Each \`.md\` file in this directory is injected into relevant agent contexts during \`opsx sync\`
172
+ - Use YAML frontmatter to control scoping:
173
+
174
+ \`\`\`markdown
175
+ ---
176
+ applies_to: [ff-developer, ff-developer-reviewer] # optional: limit to specific agents
177
+ scope: typescript # optional: only for services using this language
178
+ ---
179
+
180
+ Your instructions here...
181
+ \`\`\`
182
+
183
+ ## Directory Structure
184
+
185
+ \`\`\`
186
+ customs/
187
+ ├── README.md # This file
188
+ ├── coding-standards.md # Your team's coding rules
189
+ ├── api-conventions.md # API design patterns
190
+ ├── forbidden-patterns.md # Things to avoid
191
+ ├── service-quirks.md # Known gotchas
192
+ └── auto/ # Machine-generated (by ff-reflector)
193
+ └── ... # Don't edit — auto-managed
194
+ \`\`\`
195
+
196
+ ## Tips
197
+
198
+ - Keep files focused — one topic per file
199
+ - Be specific — "Never use default exports" is better than "Follow best practices"
200
+ - The \`auto/\` subdirectory is managed by the Reflector agent — don't edit manually
201
+ `, 'utf-8');
202
+ console.log(chalk.green(' Created customs/ directory with README'));
203
+ console.log(chalk.dim(' Add .md files with your team rules. They\'ll be injected into agent context.'));
204
+ }
205
+ }
206
+ // ── Write ─────────────────────────────────────────────────
207
+ mkdirSync(configDir, { recursive: true });
208
+ writeFileSync(configPath, stringify(config, { lineWidth: 120 }), 'utf-8');
209
+ console.log(chalk.bold.green(`\n✅ Created .opsx/workspace.yaml`));
210
+ console.log(chalk.dim(`\nNext steps:`));
211
+ console.log(` 1. Review the config: ${chalk.cyan('cat .opsx/workspace.yaml')}`);
212
+ console.log(` 2. Generate workspace files: ${chalk.cyan('npx @nepopsx/cli sync')}`);
213
+ console.log(` 3. Commit: ${chalk.cyan('git add .opsx/ .github/ && git commit -m "chore: init opsx workspace"')}`);
214
+ }
215
+ async function promptService() {
216
+ const name = await input({
217
+ message: 'Service name (kebab-case):',
218
+ validate: (v) => /^[a-z][a-z0-9-]*$/.test(v) || 'Must be kebab-case (e.g., web-app)',
219
+ });
220
+ const path = await input({
221
+ message: 'Path (relative to repo root):',
222
+ validate: (v) => v.trim().length > 0 || 'Required',
223
+ });
224
+ const language = await select({
225
+ message: 'Language:',
226
+ choices: [
227
+ { name: 'TypeScript', value: 'typescript' },
228
+ { name: 'JavaScript', value: 'javascript' },
229
+ { name: 'Python', value: 'python' },
230
+ { name: 'Go', value: 'go' },
231
+ { name: 'Rust', value: 'rust' },
232
+ { name: 'Java', value: 'java' },
233
+ { name: 'Kotlin', value: 'kotlin' },
234
+ { name: 'Ruby', value: 'ruby' },
235
+ { name: 'PHP', value: 'php' },
236
+ { name: 'C#', value: 'csharp' },
237
+ ],
238
+ });
239
+ const framework = await input({
240
+ message: 'Framework (e.g., nextjs, nestjs, fastapi, gin):',
241
+ });
242
+ const maturity = await select({
243
+ message: 'Maturity:',
244
+ choices: [
245
+ { name: 'Prototype — early stage, breaking changes expected', value: 'prototype' },
246
+ { name: 'Evolving — active development, mostly stable', value: 'evolving' },
247
+ { name: 'Production — stable, careful changes only', value: 'production' },
248
+ { name: 'Legacy — maintenance mode', value: 'legacy' },
249
+ ],
250
+ default: 'evolving',
251
+ });
252
+ const svc = {
253
+ name,
254
+ path: path.trim(),
255
+ language,
256
+ maturity,
257
+ ...(framework.trim() ? { framework: framework.trim() } : {}),
258
+ };
259
+ return svc;
260
+ }
261
+ async function promptPhilosophy() {
262
+ const philosophy = {};
263
+ philosophy.error_handling = await select({
264
+ message: 'Error handling approach:',
265
+ choices: [
266
+ { name: 'Result types — errors as values (Result/Either)', value: 'result-types' },
267
+ { name: 'Try-catch — standard exception handling', value: 'try-catch' },
268
+ { name: 'Error boundaries — boundary-level catching', value: 'error-boundaries' },
269
+ { name: 'Mixed — context-dependent', value: 'mixed' },
270
+ ],
271
+ default: 'try-catch',
272
+ });
273
+ philosophy.testing_philosophy = await select({
274
+ message: 'Testing approach:',
275
+ choices: [
276
+ { name: 'TDD — write tests first', value: 'tdd' },
277
+ { name: 'Test after — write tests after implementation', value: 'test-after' },
278
+ { name: 'Integration-first — prioritize integration tests', value: 'integration-first' },
279
+ { name: 'Minimal — only critical paths', value: 'minimal' },
280
+ ],
281
+ default: 'test-after',
282
+ });
283
+ philosophy.abstraction_level = await select({
284
+ message: 'Code style preference:',
285
+ choices: [
286
+ { name: 'Explicit — verbose, readable, avoid abstractions', value: 'explicit' },
287
+ { name: 'DRY — extract shared logic aggressively', value: 'dry' },
288
+ { name: 'Pragmatic — Rule of Three', value: 'pragmatic' },
289
+ ],
290
+ default: 'pragmatic',
291
+ });
292
+ philosophy.documentation = await select({
293
+ message: 'Documentation level:',
294
+ choices: [
295
+ { name: 'All exports — document everything public', value: 'jsdoc-all' },
296
+ { name: 'Public API only — interfaces and exported functions', value: 'jsdoc-on-public' },
297
+ { name: 'Minimal — only non-obvious behavior', value: 'minimal' },
298
+ { name: 'None — code is the documentation', value: 'none' },
299
+ ],
300
+ default: 'jsdoc-on-public',
301
+ });
302
+ philosophy.pr_size = await select({
303
+ message: 'Preferred PR size:',
304
+ choices: [
305
+ { name: 'Small — <300 lines, many small PRs', value: 'small' },
306
+ { name: 'Medium — <800 lines, one task per PR', value: 'medium' },
307
+ { name: 'Large — no limit, full feature per PR', value: 'large' },
308
+ ],
309
+ default: 'small',
310
+ });
311
+ const wantAdvanced = await confirm({
312
+ message: 'Configure advanced preferences? (API style, ORM, DI, state management, components)',
313
+ default: false,
314
+ });
315
+ if (wantAdvanced) {
316
+ philosophy.api_style = await select({
317
+ message: 'API design style:',
318
+ choices: [
319
+ { name: 'REST (resource-based) — /users, /orders, standard verbs', value: 'rest-resource' },
320
+ { name: 'REST (RPC-style) — /calculatePrice, /sendNotification', value: 'rest-rpc' },
321
+ { name: 'GraphQL — schema-first with types and resolvers', value: 'graphql' },
322
+ ],
323
+ default: 'rest-resource',
324
+ });
325
+ philosophy.orm_usage = await select({
326
+ message: 'Database access pattern:',
327
+ choices: [
328
+ { name: 'Repository — separate data access layer', value: 'repository' },
329
+ { name: 'Active Record — models contain queries', value: 'active-record' },
330
+ { name: 'Raw SQL — manual parameterized queries', value: 'raw-sql' },
331
+ { name: 'Query Builder — type-safe query construction', value: 'query-builder' },
332
+ ],
333
+ default: 'repository',
334
+ });
335
+ philosophy.dependency_injection = await select({
336
+ message: 'Dependency injection:',
337
+ choices: [
338
+ { name: 'Constructor injection — explicit parameters', value: 'constructor' },
339
+ { name: 'IoC Container — decorators/central registration', value: 'container' },
340
+ { name: 'None — direct imports, mock in tests', value: 'none' },
341
+ ],
342
+ default: 'constructor',
343
+ });
344
+ philosophy.state_management = await select({
345
+ message: 'State management preference:',
346
+ choices: [
347
+ { name: 'Immutable — never mutate, use spreads/copies', value: 'immutable' },
348
+ { name: 'Mutable — direct mutation is acceptable', value: 'mutable' },
349
+ { name: 'Mixed — context-dependent', value: 'mixed' },
350
+ ],
351
+ default: 'immutable',
352
+ });
353
+ philosophy.component_pattern = await select({
354
+ message: 'Frontend component pattern:',
355
+ choices: [
356
+ { name: 'Functional — hooks, composition', value: 'functional' },
357
+ { name: 'Class — lifecycle methods, inheritance', value: 'class' },
358
+ { name: 'Mixed — whichever fits better', value: 'mixed' },
359
+ ],
360
+ default: 'functional',
361
+ });
362
+ }
363
+ // Custom freeform rules
364
+ const wantCustom = await confirm({
365
+ message: 'Add custom freeform rules? (e.g., "Never use default exports")',
366
+ default: false,
367
+ });
368
+ if (wantCustom) {
369
+ const customRules = [];
370
+ let adding = true;
371
+ while (adding) {
372
+ const rule = await input({
373
+ message: 'Custom rule:',
374
+ validate: (v) => v.trim().length > 0 || 'Required',
375
+ });
376
+ customRules.push(rule.trim());
377
+ adding = await confirm({ message: 'Add another rule?', default: false });
378
+ }
379
+ if (customRules.length > 0) {
380
+ philosophy.custom = customRules;
381
+ }
382
+ }
383
+ return philosophy;
384
+ }
385
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface InstallOptions {
2
+ version?: string;
3
+ }
4
+ export declare function installCommand(agent: string, options: InstallOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAEA,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B1F"}
@@ -0,0 +1,29 @@
1
+ import chalk from 'chalk';
2
+ export async function installCommand(agent, options) {
3
+ const knownAgents = {
4
+ 'feature-factory': '@nepopsx/agent-feature-factory',
5
+ 'sdlc-orchestrator': '@nepopsx/agent-sdlc-orchestrator',
6
+ 'qa-commander': '@nepopsx/agent-qa-commander',
7
+ 'code-review-guardian': '@nepopsx/agent-code-review-guardian',
8
+ };
9
+ const pkg = knownAgents[agent];
10
+ if (!pkg) {
11
+ console.log(chalk.red(`Unknown agent: "${agent}"`));
12
+ console.log(chalk.dim(`Available agents: ${Object.keys(knownAgents).join(', ')}`));
13
+ process.exit(1);
14
+ }
15
+ const version = options.version ?? 'latest';
16
+ console.log(chalk.cyan(`\nInstalling ${pkg}@${version}...`));
17
+ // TODO: In full implementation, this will:
18
+ // 1. npm install / download the agent package
19
+ // 2. Add the agent to .opsx/workspace.yaml
20
+ // 3. Run opsx sync to generate files
21
+ console.log(chalk.yellow('\n⚠ Agent registry not yet connected. For now, add the agent manually to .opsx/workspace.yaml:'));
22
+ console.log(chalk.dim(`
23
+ agents:
24
+ ${agent}:
25
+ enabled: true
26
+ `));
27
+ console.log(chalk.dim(`Then run: ${chalk.cyan('opsx sync')}\n`));
28
+ }
29
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa,EAAE,OAAuB;IACzE,MAAM,WAAW,GAA2B;QAC1C,iBAAiB,EAAE,gCAAgC;QACnD,mBAAmB,EAAE,kCAAkC;QACvD,cAAc,EAAE,6BAA6B;QAC7C,sBAAsB,EAAE,qCAAqC;KAC9D,CAAC;IAEF,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC;IAE7D,2CAA2C;IAC3C,8CAA8C;IAC9C,2CAA2C;IAC3C,qCAAqC;IAErC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gGAAgG,CAAC,CAAC,CAAC;IAC5H,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;;MAElB,KAAK;;CAEV,CAAC,CAAC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function serverShowCommand(): void;
2
+ export declare function serverSetCommand(rawUrl: string): void;
3
+ export declare function serverClearCommand(): void;
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AASA,wBAAgB,iBAAiB,IAAI,IAAI,CAiBxC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQrD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC"}
@@ -0,0 +1,35 @@
1
+ import chalk from 'chalk';
2
+ import { clearApiBase, getLocalConfigPath, readLocalConfig, resolveApiBase, setApiBase, } from '../config/api-config.js';
3
+ export function serverShowCommand() {
4
+ const cwd = process.cwd();
5
+ const localConfig = readLocalConfig(cwd);
6
+ const effectiveApiBase = resolveApiBase(cwd);
7
+ console.log(chalk.bold.cyan('\n🌐 OPSX Server Configuration\n'));
8
+ console.log(` Effective API base: ${chalk.bold(effectiveApiBase)}`);
9
+ if (process.env.OPSX_API_URL) {
10
+ console.log(` Source: ${chalk.bold('OPSX_API_URL environment override')}`);
11
+ }
12
+ else if (localConfig.api_url) {
13
+ console.log(` Source: ${chalk.bold(getLocalConfigPath(cwd))}`);
14
+ }
15
+ else {
16
+ console.log(` Source: ${chalk.bold('built-in default')}`);
17
+ }
18
+ console.log('');
19
+ }
20
+ export function serverSetCommand(rawUrl) {
21
+ const cwd = process.cwd();
22
+ const normalizedApiBase = setApiBase(cwd, rawUrl);
23
+ console.log(chalk.green('\n✅ OPSX server saved\n'));
24
+ console.log(` API base: ${chalk.bold(normalizedApiBase)}`);
25
+ console.log(` Config: ${chalk.dim(getLocalConfigPath(cwd))}`);
26
+ console.log('');
27
+ }
28
+ export function serverClearCommand() {
29
+ const cwd = process.cwd();
30
+ clearApiBase(cwd);
31
+ console.log(chalk.green('\n✅ OPSX server override cleared\n'));
32
+ console.log(` Effective API base: ${chalk.bold(resolveApiBase(cwd))}`);
33
+ console.log('');
34
+ }
35
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,gBAAgB,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAE7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAErE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;SAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,YAAY,CAAC,GAAG,CAAC,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ interface SyncOptions {
2
+ config: string;
3
+ dryRun?: boolean;
4
+ dev?: boolean;
5
+ }
6
+ export declare function syncCommand(options: SyncOptions): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiLrE"}