@nepopsx/cli 0.0.3 → 0.0.5

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 (168) hide show
  1. package/dist/agents/configuration.d.ts +9 -0
  2. package/dist/agents/configuration.d.ts.map +1 -0
  3. package/dist/agents/configuration.js +57 -0
  4. package/dist/agents/configuration.js.map +1 -0
  5. package/dist/agents/remote-config.d.ts +30 -0
  6. package/dist/agents/remote-config.d.ts.map +1 -0
  7. package/dist/agents/remote-config.js +102 -0
  8. package/dist/agents/remote-config.js.map +1 -0
  9. package/dist/commands/activate.d.ts.map +1 -1
  10. package/dist/commands/activate.js +4 -3
  11. package/dist/commands/activate.js.map +1 -1
  12. package/dist/commands/decode.js +2 -2
  13. package/dist/commands/decode.js.map +1 -1
  14. package/dist/commands/doctor.js +16 -16
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +353 -18
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +1 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +253 -25
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/login.d.ts +6 -0
  24. package/dist/commands/login.d.ts.map +1 -0
  25. package/dist/commands/login.js +108 -0
  26. package/dist/commands/login.js.map +1 -0
  27. package/dist/commands/push-learnings.d.ts +14 -0
  28. package/dist/commands/push-learnings.d.ts.map +1 -0
  29. package/dist/commands/push-learnings.js +186 -0
  30. package/dist/commands/push-learnings.js.map +1 -0
  31. package/dist/commands/scan.d.ts +2 -0
  32. package/dist/commands/scan.d.ts.map +1 -0
  33. package/dist/commands/scan.js +520 -0
  34. package/dist/commands/scan.js.map +1 -0
  35. package/dist/commands/sync.d.ts +2 -0
  36. package/dist/commands/sync.d.ts.map +1 -1
  37. package/dist/commands/sync.js +203 -234
  38. package/dist/commands/sync.js.map +1 -1
  39. package/dist/config/api-config.d.ts.map +1 -1
  40. package/dist/config/api-config.js +4 -0
  41. package/dist/config/api-config.js.map +1 -1
  42. package/dist/constants.d.ts +7 -0
  43. package/dist/constants.d.ts.map +1 -0
  44. package/dist/constants.js +7 -0
  45. package/dist/constants.js.map +1 -0
  46. package/dist/customs/instructions.d.ts +3 -0
  47. package/dist/customs/instructions.d.ts.map +1 -0
  48. package/dist/customs/instructions.js +51 -0
  49. package/dist/customs/instructions.js.map +1 -0
  50. package/dist/enrichment/confirm.d.ts +17 -0
  51. package/dist/enrichment/confirm.d.ts.map +1 -0
  52. package/dist/enrichment/confirm.js +44 -0
  53. package/dist/enrichment/confirm.js.map +1 -0
  54. package/dist/enrichment/state.d.ts +8 -0
  55. package/dist/enrichment/state.d.ts.map +1 -0
  56. package/dist/enrichment/state.js +107 -0
  57. package/dist/enrichment/state.js.map +1 -0
  58. package/dist/enrichment/types.d.ts +13 -0
  59. package/dist/enrichment/types.d.ts.map +1 -0
  60. package/dist/enrichment/types.js +2 -0
  61. package/dist/enrichment/types.js.map +1 -0
  62. package/dist/enrichment/workflow.d.ts +35 -0
  63. package/dist/enrichment/workflow.d.ts.map +1 -0
  64. package/dist/enrichment/workflow.js +305 -0
  65. package/dist/enrichment/workflow.js.map +1 -0
  66. package/dist/generator/builtin-templates.d.ts +2 -1
  67. package/dist/generator/builtin-templates.d.ts.map +1 -1
  68. package/dist/generator/builtin-templates.js +161 -2
  69. package/dist/generator/builtin-templates.js.map +1 -1
  70. package/dist/generator/package-renderer.d.ts +29 -0
  71. package/dist/generator/package-renderer.d.ts.map +1 -0
  72. package/dist/generator/package-renderer.js +123 -0
  73. package/dist/generator/package-renderer.js.map +1 -0
  74. package/dist/generator/render.d.ts +14 -63
  75. package/dist/generator/render.d.ts.map +1 -1
  76. package/dist/generator/render.js +30 -176
  77. package/dist/generator/render.js.map +1 -1
  78. package/dist/index.js +42 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/licensing/installer.d.ts +51 -0
  81. package/dist/licensing/installer.d.ts.map +1 -0
  82. package/dist/licensing/installer.js +112 -0
  83. package/dist/licensing/installer.js.map +1 -0
  84. package/dist/licensing/license-manager.d.ts +6 -0
  85. package/dist/licensing/license-manager.d.ts.map +1 -1
  86. package/dist/licensing/license-manager.js +12 -35
  87. package/dist/licensing/license-manager.js.map +1 -1
  88. package/dist/licensing/template-fetch.d.ts +3 -2
  89. package/dist/licensing/template-fetch.d.ts.map +1 -1
  90. package/dist/licensing/template-fetch.js +10 -41
  91. package/dist/licensing/template-fetch.js.map +1 -1
  92. package/dist/scan/__tests__/context-gatherer.test.d.ts +2 -0
  93. package/dist/scan/__tests__/context-gatherer.test.d.ts.map +1 -0
  94. package/dist/scan/__tests__/context-gatherer.test.js +111 -0
  95. package/dist/scan/__tests__/context-gatherer.test.js.map +1 -0
  96. package/dist/scan/__tests__/merge.test.d.ts +2 -0
  97. package/dist/scan/__tests__/merge.test.d.ts.map +1 -0
  98. package/dist/scan/__tests__/merge.test.js +163 -0
  99. package/dist/scan/__tests__/merge.test.js.map +1 -0
  100. package/dist/scan/auto-bootstrap.d.ts +3 -0
  101. package/dist/scan/auto-bootstrap.d.ts.map +1 -0
  102. package/dist/scan/auto-bootstrap.js +30 -0
  103. package/dist/scan/auto-bootstrap.js.map +1 -0
  104. package/dist/scan/config.d.ts +24 -0
  105. package/dist/scan/config.d.ts.map +1 -0
  106. package/dist/scan/config.js +77 -0
  107. package/dist/scan/config.js.map +1 -0
  108. package/dist/scan/context/gatherer.d.ts +13 -0
  109. package/dist/scan/context/gatherer.d.ts.map +1 -0
  110. package/dist/scan/context/gatherer.js +97 -0
  111. package/dist/scan/context/gatherer.js.map +1 -0
  112. package/dist/scan/context/gitignore.d.ts +9 -0
  113. package/dist/scan/context/gitignore.d.ts.map +1 -0
  114. package/dist/scan/context/gitignore.js +50 -0
  115. package/dist/scan/context/gitignore.js.map +1 -0
  116. package/dist/scan/context/patterns.d.ts +14 -0
  117. package/dist/scan/context/patterns.d.ts.map +1 -0
  118. package/dist/scan/context/patterns.js +159 -0
  119. package/dist/scan/context/patterns.js.map +1 -0
  120. package/dist/scan/customs/writer.d.ts +6 -0
  121. package/dist/scan/customs/writer.d.ts.map +1 -0
  122. package/dist/scan/customs/writer.js +149 -0
  123. package/dist/scan/customs/writer.js.map +1 -0
  124. package/dist/scan/llm/anthropic.d.ts +11 -0
  125. package/dist/scan/llm/anthropic.d.ts.map +1 -0
  126. package/dist/scan/llm/anthropic.js +89 -0
  127. package/dist/scan/llm/anthropic.js.map +1 -0
  128. package/dist/scan/llm/factory.d.ts +4 -0
  129. package/dist/scan/llm/factory.d.ts.map +1 -0
  130. package/dist/scan/llm/factory.js +20 -0
  131. package/dist/scan/llm/factory.js.map +1 -0
  132. package/dist/scan/llm/ollama.d.ts +11 -0
  133. package/dist/scan/llm/ollama.d.ts.map +1 -0
  134. package/dist/scan/llm/ollama.js +64 -0
  135. package/dist/scan/llm/ollama.js.map +1 -0
  136. package/dist/scan/llm/openai.d.ts +12 -0
  137. package/dist/scan/llm/openai.d.ts.map +1 -0
  138. package/dist/scan/llm/openai.js +78 -0
  139. package/dist/scan/llm/openai.js.map +1 -0
  140. package/dist/scan/llm/types.d.ts +23 -0
  141. package/dist/scan/llm/types.d.ts.map +1 -0
  142. package/dist/scan/llm/types.js +3 -0
  143. package/dist/scan/llm/types.js.map +1 -0
  144. package/dist/scan/merge/diff-display.d.ts +11 -0
  145. package/dist/scan/merge/diff-display.d.ts.map +1 -0
  146. package/dist/scan/merge/diff-display.js +72 -0
  147. package/dist/scan/merge/diff-display.js.map +1 -0
  148. package/dist/scan/prompt/agent.d.ts +23 -0
  149. package/dist/scan/prompt/agent.d.ts.map +1 -0
  150. package/dist/scan/prompt/agent.js +95 -0
  151. package/dist/scan/prompt/agent.js.map +1 -0
  152. package/dist/scan/prompt/builder.d.ts +16 -0
  153. package/dist/scan/prompt/builder.d.ts.map +1 -0
  154. package/dist/scan/prompt/builder.js +64 -0
  155. package/dist/scan/prompt/builder.js.map +1 -0
  156. package/dist/scan/prompt/schema.d.ts +7 -0
  157. package/dist/scan/prompt/schema.d.ts.map +1 -0
  158. package/dist/scan/prompt/schema.js +52 -0
  159. package/dist/scan/prompt/schema.js.map +1 -0
  160. package/dist/security/scanner.d.ts +3 -40
  161. package/dist/security/scanner.d.ts.map +1 -1
  162. package/dist/security/scanner.js +3 -169
  163. package/dist/security/scanner.js.map +1 -1
  164. package/dist/utils/fetch.d.ts +9 -0
  165. package/dist/utils/fetch.d.ts.map +1 -0
  166. package/dist/utils/fetch.js +18 -0
  167. package/dist/utils/fetch.js.map +1 -0
  168. package/package.json +15 -12
@@ -1,66 +1,81 @@
1
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
2
- import { resolve, join, relative } from 'node:path';
3
- import { parse } from 'yaml';
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { parse, stringify } from 'yaml';
4
4
  import chalk from 'chalk';
5
5
  import { validateWorkspaceConfig, scanConfigSecrets } from '@nepopsx/core';
6
- import { renderTemplate, registerAgentPartialsFromMap, clearPartialNames, setPhilosophyBlock, setCustomInstructions, setWatermarkData, applyLicenseWatermark } from '../generator/render.js';
6
+ import { DOWNLOAD_TIMEOUT_MS } from '../constants.js';
7
+ import { renderTemplate, setPhilosophyBlock, setCustomInstructions, setWatermarkData, applyLicenseWatermark } from '../generator/render.js';
8
+ import { renderAgentBundle } from '../generator/package-renderer.js';
7
9
  import { writeGeneratedFiles, printWriteResult } from '../generator/writer.js';
8
10
  import { getBuiltinTemplates } from '../generator/builtin-templates.js';
9
11
  import { philosophyToInstructions } from '../generator/philosophy.js';
12
+ import { getAgentConfigPath, getAgentSupportOperations } from '../agents/configuration.js';
13
+ import { fetchRemoteAgentConfigs, loadLocalAgentConfig, fetchApprovedLearnings } from '../agents/remote-config.js';
14
+ import { loadCustomInstructions } from '../customs/instructions.js';
15
+ import { checkAgentEnrichmentGate, checkEnrichmentGate } from '../enrichment/workflow.js';
10
16
  import { scanCustomInstructions, scanPhilosophyCustom, formatThreats, generateManifest } from '../security/index.js';
11
17
  import { validateLicense, enforceTierLimits, fetchRemoteTemplates, isDevMode, readLicense } from '../licensing/index.js';
18
+ import { resolveApiBase } from '../config/api-config.js';
12
19
  export async function syncCommand(options) {
13
20
  const cwd = process.cwd();
14
21
  const configPath = resolve(cwd, options.config);
15
22
  const dryRun = options.dryRun ?? false;
16
23
  const devMode = options.dev ?? isDevMode();
24
+ const bootstrapLicense = readLicense(cwd);
17
25
  console.log(chalk.bold.cyan('\n🔄 NEPOPSX Sync\n'));
18
26
  if (dryRun) {
19
- console.log(chalk.yellow(' [dry-run mode — no files will be written]\n'));
27
+ console.warn(chalk.yellow(' [dry-run mode — no files will be written]\n'));
20
28
  }
21
29
  if (devMode) {
22
- console.log(chalk.yellow(' [dev mode — license checks bypassed]\n'));
30
+ console.warn(chalk.yellow(' [dev mode — license checks bypassed]\n'));
23
31
  }
24
- // 1. Load and validate config
25
- if (!existsSync(configPath)) {
26
- console.log(chalk.red(`Config not found: ${options.config}`));
27
- console.log(chalk.dim(`Run ${chalk.cyan('nepopsx init')} first.\n`));
28
- process.exit(1);
32
+ let raw;
33
+ if (options.remote) {
34
+ console.log(chalk.dim('Fetching workspace config from backend...'));
35
+ raw = await fetchRemoteConfig(cwd, options.workspace);
36
+ const configDir = resolve(cwd, '.nepopsx');
37
+ if (!existsSync(configDir))
38
+ mkdirSync(configDir, { recursive: true });
39
+ const { stringify } = await import('yaml');
40
+ writeFileSync(configPath, stringify(raw), 'utf-8');
41
+ console.log(chalk.dim(`Config saved to ${options.config}`));
42
+ }
43
+ else {
44
+ if (!existsSync(configPath)) {
45
+ console.error(chalk.red(`Config not found: ${options.config}`));
46
+ console.log(chalk.dim(`Run ${chalk.cyan('nepopsx init')} first, or use ${chalk.cyan('--remote')} to fetch from backend.\n`));
47
+ process.exit(1);
48
+ }
49
+ raw = parse(readFileSync(configPath, 'utf-8'));
29
50
  }
30
- const raw = parse(readFileSync(configPath, 'utf-8'));
31
51
  const validation = validateWorkspaceConfig(raw);
32
52
  if (!validation.valid) {
33
- console.log(chalk.red('Invalid workspace config:'));
53
+ console.error(chalk.red('Invalid workspace config:'));
34
54
  for (const err of validation.errors) {
35
- console.log(chalk.red(` ✗ ${err}`));
55
+ console.error(chalk.red(` ✗ ${err}`));
36
56
  }
37
57
  console.log(chalk.dim(`\nRun ${chalk.cyan('nepopsx doctor')} for details.\n`));
38
58
  process.exit(1);
39
59
  }
40
- const config = validation.config;
41
- console.log(chalk.dim(`Workspace: ${config.workspace.name}`));
42
- console.log(chalk.dim(`Services: ${config.services.map((s) => s.name).join(', ')}`));
60
+ let config = validation.config;
43
61
  let activeLicense = null;
44
- // 1b. License validation (skip in dev mode)
45
62
  if (!devMode) {
46
63
  const licenseStatus = await validateLicense(cwd, config);
47
64
  if (!licenseStatus.valid) {
48
- console.log(chalk.red(`\n🔒 ${licenseStatus.message}`));
65
+ console.error(chalk.red(`\n🔒 ${licenseStatus.message}`));
49
66
  process.exit(1);
50
67
  }
51
- // Tier enforcement
52
68
  const violations = enforceTierLimits(config, licenseStatus.tier);
53
69
  if (violations.length > 0) {
54
- console.log(chalk.red('\n🔒 Workspace exceeds license tier limits:'));
55
- for (const v of violations) {
56
- console.log(chalk.red(` ✗ ${v.feature}: ${v.actual} (limit: ${v.limit}, requires ${v.required_tier} tier)`));
70
+ console.error(chalk.red('\n🔒 Workspace exceeds license tier limits:'));
71
+ for (const violation of violations) {
72
+ console.error(chalk.red(` ✗ ${violation.feature}: ${violation.actual} (limit: ${violation.limit}, requires ${violation.required_tier} tier)`));
57
73
  }
58
- console.log(chalk.dim(`\n Upgrade at nepopsx.dev to unlock more features.\n`));
74
+ console.log(chalk.dim('\n Upgrade at nepopsx.dev to unlock more features.\n'));
59
75
  process.exit(1);
60
76
  }
61
77
  console.log(chalk.dim(`License: ${licenseStatus.org} (${licenseStatus.tier}) — ${licenseStatus.days_remaining}d remaining`));
62
78
  activeLicense = readLicense(cwd);
63
- // Set up watermarking for all generated files
64
79
  const watermarkData = {
65
80
  version: '0.1.0',
66
81
  org: licenseStatus.org,
@@ -73,280 +88,234 @@ export async function syncCommand(options) {
73
88
  else {
74
89
  setWatermarkData(null);
75
90
  }
76
- // 1c. Security: scan config for secrets
91
+ let customs = loadCustomInstructions(resolve(cwd, config.customs_dir ?? 'customs'));
92
+ // --remote mode bypasses enrichment entirely (backend config is already enriched)
93
+ if (activeLicense && !options.remote) {
94
+ const gateResult = checkEnrichmentGate(cwd);
95
+ if (!gateResult.ready) {
96
+ console.error(chalk.red(`\n🔍 ${gateResult.reason}`));
97
+ console.log(chalk.dim('\n Sync requires an enriched workspace config.'));
98
+ console.log(chalk.dim(' The scan command enriches your workspace using LLM analysis.\n'));
99
+ console.log(` Run: ${chalk.cyan('nepopsx scan')}\n`);
100
+ process.exit(1);
101
+ }
102
+ config = gateResult.config;
103
+ customs = loadCustomInstructions(resolve(cwd, config.customs_dir ?? 'customs'));
104
+ // Sync is render-only. All installed local agents must still match their last scan.
105
+ const localState = gateResult.localState;
106
+ for (const [agentName, agentCfg] of Object.entries(config.agents ?? {})) {
107
+ if (!agentCfg.enabled)
108
+ continue;
109
+ const localAgentConfig = loadLocalAgentConfig(cwd, agentName, agentCfg);
110
+ if (!localAgentConfig) {
111
+ console.error(chalk.red(`\n🔍 Agent "${agentName}" config is missing locally.`));
112
+ console.log(chalk.dim('\n Sync only renders installed agent packages that still have a local config file.'));
113
+ console.log(chalk.dim(' Reinstall the agent to restore its config before syncing.\n'));
114
+ console.log(` Run: ${chalk.cyan(`nepopsx install ${agentName}`)}\n`);
115
+ process.exit(1);
116
+ }
117
+ const agentGate = checkAgentEnrichmentGate(localState, agentName, localAgentConfig);
118
+ if (!agentGate.ready) {
119
+ console.error(chalk.red(`\n🔍 ${agentGate.reason}`));
120
+ console.log(chalk.dim('\n Sync only renders already-enriched agent configs.'));
121
+ console.log(chalk.dim(' Re-run scan so the backend and local agent YAML stay in sync.\n'));
122
+ console.log(` Run: ${chalk.cyan('nepopsx scan')}\n`);
123
+ process.exit(1);
124
+ }
125
+ }
126
+ }
127
+ console.log(chalk.dim(`Workspace: ${config.workspace.name}`));
128
+ console.log(chalk.dim(`Services: ${config.services.map((service) => service.name).join(', ')}`));
77
129
  const secretWarnings = scanConfigSecrets(config);
78
130
  if (secretWarnings.length > 0) {
79
- console.log(chalk.yellow('\n⚠ Possible secrets detected in workspace config:'));
80
- for (const w of secretWarnings) {
81
- console.log(chalk.yellow(` • ${w}`));
131
+ console.warn(chalk.yellow('\n⚠ Possible secrets detected in workspace config:'));
132
+ for (const warning of secretWarnings) {
133
+ console.warn(chalk.yellow(` • ${warning}`));
82
134
  }
83
135
  console.log(chalk.dim(' Remove secrets from workspace.yaml — use environment variables instead.\n'));
84
136
  }
85
- // 2. Collect all write operations
86
137
  const operations = [];
87
- // 2a. Load philosophy + custom instructions
88
- const philoBlock = philosophyToInstructions(config.philosophy);
89
- setPhilosophyBlock(philoBlock);
90
- if (philoBlock) {
91
- console.log(chalk.dim(`Philosophy: ${Object.keys(config.philosophy ?? {}).filter((k) => k !== 'custom').length} axes configured`));
138
+ const remoteAgentConfigs = options.remote && activeLicense
139
+ ? await fetchRemoteAgentConfigs(cwd, activeLicense.key, options.workspace ?? activeLicense.workspace)
140
+ : null;
141
+ const philosophyBlock = philosophyToInstructions(config.philosophy);
142
+ setPhilosophyBlock(philosophyBlock);
143
+ if (philosophyBlock) {
144
+ console.log(chalk.dim(`Philosophy: ${Object.keys(config.philosophy ?? {}).filter((key) => key !== 'custom').length} axes configured`));
92
145
  }
93
- // 2a-security: scan philosophy.custom[] for injection
94
146
  if (config.philosophy?.custom && config.philosophy.custom.length > 0) {
95
- const philoScan = scanPhilosophyCustom(config.philosophy.custom);
96
- if (!philoScan.safe) {
97
- const hasCritical = philoScan.threats.some((t) => t.severity === 'critical');
98
- console.log(chalk.red('\n🛡️ Security scan found threats in philosophy.custom[]:'));
99
- console.log(formatThreats(philoScan.threats));
147
+ const philosophyScan = scanPhilosophyCustom(config.philosophy.custom);
148
+ if (!philosophyScan.safe) {
149
+ const hasCritical = philosophyScan.threats.some((threat) => threat.severity === 'critical');
150
+ console.error(chalk.red('\n🛡️ Security scan found threats in philosophy.custom[]:'));
151
+ console.log(formatThreats(philosophyScan.threats));
100
152
  if (hasCritical) {
101
- console.log(chalk.red('\n Critical threats found — aborting sync.'));
153
+ console.error(chalk.red('\n Critical threats found — aborting sync.'));
102
154
  console.log(chalk.dim(' Remove or rewrite the flagged philosophy.custom entries.\n'));
103
155
  process.exit(1);
104
156
  }
105
- console.log(chalk.yellow(' Proceeding with warnings — review the flagged entries.\n'));
157
+ console.warn(chalk.yellow(' Proceeding with warnings — review the flagged entries.\n'));
106
158
  }
107
159
  }
108
- const customsPath = resolve(cwd, config.customs_dir ?? 'customs');
109
- const customs = loadCustomInstructions(customsPath);
110
- // 2a-security: scan customs for injection + secrets
111
160
  if (customs.length > 0) {
112
161
  const customsScan = scanCustomInstructions(customs);
113
162
  if (!customsScan.safe) {
114
- const hasCritical = customsScan.threats.some((t) => t.severity === 'critical');
115
- console.log(chalk.red('\n🛡️ Security scan found threats in custom instructions:'));
163
+ const hasCritical = customsScan.threats.some((threat) => threat.severity === 'critical');
164
+ console.error(chalk.red('\n🛡️ Security scan found threats in custom instructions:'));
116
165
  console.log(formatThreats(customsScan.threats));
117
166
  if (hasCritical) {
118
- console.log(chalk.red('\n Critical threats found — aborting sync.'));
167
+ console.error(chalk.red('\n Critical threats found — aborting sync.'));
119
168
  console.log(chalk.dim(' Remove or rewrite the flagged customs/ files.\n'));
120
169
  process.exit(1);
121
170
  }
122
- console.log(chalk.yellow(' Proceeding with warnings — review the flagged files.\n'));
171
+ console.warn(chalk.yellow(' Proceeding with warnings — review the flagged files.\n'));
123
172
  }
124
173
  }
125
174
  setCustomInstructions(customs);
126
175
  if (customs.length > 0) {
127
176
  console.log(chalk.dim(`Custom instructions: ${customs.length} file(s) from ${config.customs_dir ?? 'customs/'}`));
128
177
  }
129
- // 2b. Builtin templates (copilot-instructions.md, AGENTS.md, Makefile)
130
178
  console.log(chalk.dim('\nRendering base templates...'));
131
- const builtins = getBuiltinTemplates();
132
- for (const { outputPath, template, source } of builtins) {
133
- const content = renderTemplate(template, config);
134
- operations.push({ path: outputPath, content, source });
179
+ if (activeLicense) {
180
+ const builtinBundle = await fetchRemoteTemplates(cwd, activeLicense, 'workspace-core', 'latest', customs);
181
+ if (!builtinBundle) {
182
+ console.error(chalk.red(' ✗ Builtin workspace bundle could not be fetched from the backend.'));
183
+ process.exit(1);
184
+ }
185
+ operations.push(...renderAgentBundle(builtinBundle));
186
+ }
187
+ else {
188
+ const builtins = getBuiltinTemplates(config);
189
+ for (const { outputPath, template, source } of builtins) {
190
+ const content = renderTemplate(template, config);
191
+ operations.push({ path: outputPath, content, source });
192
+ }
135
193
  }
136
- // 2c. Agent templates
137
194
  if (config.agents) {
138
195
  for (const [agentName, agentCfg] of Object.entries(config.agents)) {
139
196
  if (!agentCfg.enabled)
140
197
  continue;
141
198
  console.log(chalk.dim(`Loading agent: ${agentName}...`));
142
- // Security: validate agent package before loading
143
- const agentOps = await loadAgentTemplates(cwd, agentName, agentCfg, config, activeLicense);
199
+ if (remoteAgentConfigs && remoteAgentConfigs[agentName]) {
200
+ operations.push({
201
+ path: getAgentConfigPath(agentName, agentCfg),
202
+ content: stringify(remoteAgentConfigs[agentName], { lineWidth: 120 }).trimEnd(),
203
+ source: `remote-config:${agentName}`,
204
+ });
205
+ }
206
+ const agentOps = await loadAgentTemplates(cwd, agentName, agentCfg, activeLicense, customs);
144
207
  operations.push(...agentOps);
145
208
  }
146
209
  }
147
- // 3. Apply license watermark + fingerprint to all generated files
148
- for (const op of operations) {
149
- op.content = applyLicenseWatermark(op.content);
210
+ for (const operation of operations) {
211
+ operation.content = applyLicenseWatermark(operation.content, operation.path);
150
212
  }
151
- // 4. Write files
152
213
  console.log(chalk.dim(`\nWriting ${operations.length} file(s)...`));
153
214
  const result = writeGeneratedFiles(cwd, operations, dryRun);
154
215
  printWriteResult(result, dryRun);
155
- // 5. Generate integrity manifest
156
216
  if (!dryRun) {
157
- const allFiles = operations.map((op) => ({ path: op.path, content: op.content }));
217
+ const allFiles = operations.map((operation) => ({ path: operation.path, content: operation.content }));
158
218
  const manifest = generateManifest(cwd, allFiles);
159
219
  console.log(chalk.dim(`Integrity manifest: ${manifest.length} file(s) hashed → .nepopsx/manifest.sha256`));
160
- }
161
- if (!dryRun) {
220
+ // Pull approved learnings from backend during --remote sync
221
+ if (options.remote && activeLicense) {
222
+ try {
223
+ const learnings = await fetchApprovedLearnings(cwd, activeLicense.key, options.workspace ?? activeLicense.workspace);
224
+ let learningCount = 0;
225
+ const customsDir = resolve(cwd, config.customs_dir ?? 'customs');
226
+ const autoDir = resolve(customsDir, 'auto');
227
+ // Write approved custom instructions
228
+ if (learnings.customs && Object.keys(learnings.customs).length > 0) {
229
+ mkdirSync(autoDir, { recursive: true });
230
+ for (const [slug, custom] of Object.entries(learnings.customs)) {
231
+ const frontmatter = [
232
+ '---',
233
+ `name: ${slug}`,
234
+ `applies_to: [${custom.applies_to.join(', ')}]`,
235
+ `confidence: high`,
236
+ `agent: ${custom.agent}`,
237
+ '---',
238
+ ].join('\n');
239
+ const filePath = resolve(autoDir, `${slug}.md`);
240
+ writeFileSync(filePath, `${frontmatter}\n${custom.content}\n`, 'utf-8');
241
+ learningCount++;
242
+ }
243
+ }
244
+ // Write approved skills
245
+ if (learnings.skills && Object.keys(learnings.skills).length > 0) {
246
+ for (const [slug, skill] of Object.entries(learnings.skills)) {
247
+ const skillDir = resolve(cwd, '.github', 'skills', slug);
248
+ mkdirSync(skillDir, { recursive: true });
249
+ writeFileSync(resolve(skillDir, 'SKILL.md'), skill.content, 'utf-8');
250
+ learningCount++;
251
+ }
252
+ }
253
+ if (learningCount > 0) {
254
+ console.log(chalk.dim(`Team learnings: ${learningCount} approved learning(s) pulled from backend`));
255
+ }
256
+ }
257
+ catch (err) {
258
+ // Non-fatal — learnings are optional during sync
259
+ console.warn(chalk.yellow(` ⚠ Could not pull learnings: ${err instanceof Error ? err.message : String(err)}`));
260
+ }
261
+ }
162
262
  console.log(chalk.bold.green('\n✅ Sync complete.\n'));
163
263
  }
164
264
  }
165
- /**
166
- * Load and render templates from an agent package.
167
- */
168
- async function loadAgentTemplates(rootDir, agentName, agentCfg, config, license) {
265
+ async function loadAgentTemplates(rootDir, agentName, agentCfg, license, customs) {
169
266
  const requestedVersion = agentCfg.version ?? '0.0.1';
170
- const agentMeta = { name: agentName, version: requestedVersion };
171
267
  if (!license) {
172
- console.log(chalk.red(` ✗ Agent "${agentName}" requires an active license. Run nepopsx activate first.`));
268
+ console.error(chalk.red(` ✗ Agent "${agentName}" requires an active license. Run nepopsx activate first.`));
173
269
  return [];
174
270
  }
175
- const remoteBundle = await fetchRemoteTemplates(rootDir, license, agentName, requestedVersion);
271
+ const remoteBundle = await fetchRemoteTemplates(rootDir, license, agentName, requestedVersion, customs);
176
272
  if (!remoteBundle) {
177
- console.log(chalk.red(` ✗ Agent "${agentName}" — could not fetch template bundle from backend.`));
273
+ console.error(chalk.red(` ✗ Agent "${agentName}" — could not fetch template bundle from backend.`));
178
274
  console.log(chalk.dim(' Check that the NEPOPSX backend is reachable: nepopsx server show'));
179
275
  return [];
180
276
  }
181
277
  console.log(chalk.dim(` ↳ using remote template bundle (${remoteBundle.version})`));
182
- return loadAgentTemplatesFromBundle(remoteBundle, config, {
183
- name: agentName,
184
- version: remoteBundle.version,
185
- });
186
- }
187
- function loadAgentTemplatesFromBundle(bundle, config, agentMeta) {
188
- const operations = [];
189
- const partialNames = registerAgentPartialsFromMap(bundle.templates, config, agentMeta);
190
- const templateDirs = [
191
- { prefix: 'agents/', output: '.github/agents' },
192
- { prefix: 'prompts/', output: '.github/prompts' },
193
- { prefix: 'instructions/', output: '.github/instructions' },
278
+ return [
279
+ ...getAgentSupportOperations(rootDir, remoteBundle, agentName, agentCfg),
280
+ ...renderAgentBundle(remoteBundle),
194
281
  ];
195
- for (const { prefix, output } of templateDirs) {
196
- for (const [relativePath, templateSource] of Object.entries(bundle.templates)) {
197
- if (!relativePath.startsWith(prefix) || !relativePath.endsWith('.hbs'))
198
- continue;
199
- const outputFileName = relativePath.slice(prefix.length).replace(/\.hbs$/, '');
200
- const content = renderTemplate(templateSource, config, agentMeta);
201
- if (content.trim().length === 0)
202
- continue;
203
- operations.push({
204
- path: join(output, outputFileName),
205
- content,
206
- source: `remote:${bundle.agent}/${relativePath}`,
207
- });
208
- }
209
- }
210
- copySchemaFilesFromBundle(bundle.templates, config, agentMeta, operations);
211
- clearPartialNames(partialNames);
212
- return operations;
213
282
  }
214
- function copySchemaFilesFromBundle(templateMap, config, agentMeta, operations) {
215
- const schemaContent = templateMap['schemas/schema.yaml'];
216
- if (schemaContent) {
217
- operations.push({
218
- path: `openspec/schemas/${agentMeta.name}/schema.yaml`,
219
- content: renderTemplate(schemaContent, config, agentMeta),
220
- source: `remote:${agentMeta.name}/schemas/schema.yaml`,
221
- });
222
- }
223
- for (const [relativePath, rawContent] of Object.entries(templateMap)) {
224
- if (!relativePath.startsWith('schemas/templates/'))
225
- continue;
226
- const outputName = relativePath.slice('schemas/templates/'.length).replace(/\.hbs$/, '');
227
- const content = relativePath.endsWith('.hbs')
228
- ? renderTemplate(rawContent, config, agentMeta)
229
- : rawContent;
230
- operations.push({
231
- path: `openspec/schemas/${agentMeta.name}/templates/${outputName}`,
232
- content,
233
- source: `remote:${agentMeta.name}/${relativePath}`,
234
- });
283
+ async function fetchRemoteConfig(rootDir, workspaceSlug) {
284
+ const license = readLicense(rootDir);
285
+ if (!license) {
286
+ console.error(chalk.red('No license found. Run nepopsx activate first.'));
287
+ process.exit(1);
235
288
  }
236
- const configTemplate = `schema: {{agent.name}}
237
- context: |
238
- {{config.workspace.name}} platform services:
239
- {{#each config.services}}
240
- - {{name}} ({{language}}{{#if framework}}/{{framework}}{{/if}}) — {{path}}/ {{maturityBadge maturity}}
241
- {{/each}}
242
- {{#if config.execution_order}}
243
- Change order: {{join config.execution_order " → "}}
244
- {{/if}}
245
- `;
246
- operations.push({
247
- path: 'openspec/config.yaml',
248
- content: renderTemplate(configTemplate, config, agentMeta),
249
- source: `remote:${agentMeta.name}/openspec-config`,
250
- });
251
- }
252
- function copySchemaFiles(schemasDir, config, agentMeta, operations) {
253
- // Copy schema.yaml
254
- const schemaFile = join(schemasDir, 'schema.yaml');
255
- if (existsSync(schemaFile)) {
256
- const content = renderTemplate(readFileSync(schemaFile, 'utf-8'), config, agentMeta);
257
- operations.push({
258
- path: `openspec/schemas/${agentMeta.name}/schema.yaml`,
259
- content,
260
- source: `agent:${agentMeta.name}/schemas/schema.yaml`,
289
+ const apiBase = resolveApiBase(rootDir);
290
+ const url = new URL(`${apiBase}/workspaces/config`);
291
+ if (workspaceSlug)
292
+ url.searchParams.set('workspace', workspaceSlug);
293
+ const controller = new AbortController();
294
+ const timeout = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);
295
+ try {
296
+ const res = await fetch(url.toString(), {
297
+ headers: { Authorization: `Bearer ${license.key}` },
298
+ signal: controller.signal,
261
299
  });
262
- }
263
- // Copy templates
264
- const templatesDir = join(schemasDir, 'templates');
265
- if (existsSync(templatesDir)) {
266
- for (const file of readdirSync(templatesDir)) {
267
- const src = join(templatesDir, file);
268
- const isTemplate = file.endsWith('.hbs');
269
- const outputName = isTemplate ? file.replace('.hbs', '') : file;
270
- const content = isTemplate
271
- ? renderTemplate(readFileSync(src, 'utf-8'), config, agentMeta)
272
- : readFileSync(src, 'utf-8');
273
- operations.push({
274
- path: `openspec/schemas/${agentMeta.name}/templates/${outputName}`,
275
- content,
276
- source: `agent:${agentMeta.name}/schemas/templates/${file}`,
277
- });
300
+ if (!res.ok) {
301
+ const body = await res.text().catch(() => '');
302
+ console.error(chalk.red(`Backend returned ${res.status}: ${body}`));
303
+ process.exit(1);
278
304
  }
305
+ return await res.json();
279
306
  }
280
- // Generate openspec/config.yaml
281
- const configTemplate = `schema: {{agent.name}}
282
- context: |
283
- {{config.workspace.name}} platform services:
284
- {{#each config.services}}
285
- - {{name}} ({{language}}{{#if framework}}/{{framework}}{{/if}}) — {{path}}/ {{maturityBadge maturity}}
286
- {{/each}}
287
- {{#if config.execution_order}}
288
- Change order: {{join config.execution_order " → "}}
289
- {{/if}}
290
- `;
291
- operations.push({
292
- path: 'openspec/config.yaml',
293
- content: renderTemplate(configTemplate, config, agentMeta),
294
- source: `agent:${agentMeta.name}/openspec-config`,
295
- });
296
- }
297
- /**
298
- * Load custom instruction files from the customs/ directory.
299
- * Supports YAML frontmatter for scoping (applies_to, scope).
300
- */
301
- function loadCustomInstructions(customsDir) {
302
- const instructions = [];
303
- if (!existsSync(customsDir))
304
- return instructions;
305
- const scanDir = (dir) => {
306
- for (const entry of readdirSync(dir)) {
307
- const fullPath = join(dir, entry);
308
- const stat = statSync(fullPath);
309
- if (stat.isDirectory()) {
310
- scanDir(fullPath); // recurse into auto/ and subdirectories
311
- continue;
312
- }
313
- if (!entry.endsWith('.md') || entry === 'README.md')
314
- continue;
315
- const raw = readFileSync(fullPath, 'utf-8');
316
- const parsed = parseFrontmatter(raw);
317
- instructions.push({
318
- content: parsed.content,
319
- applies_to: parsed.frontmatter?.applies_to,
320
- scope: parsed.frontmatter?.scope,
321
- source: relative(customsDir, fullPath),
322
- });
307
+ catch (err) {
308
+ if (err instanceof Error && err.name === 'AbortError') {
309
+ console.error(chalk.red('Request timed out. Is the backend reachable?'));
310
+ console.log(chalk.dim(` URL: ${url.toString()}`));
323
311
  }
324
- };
325
- scanDir(customsDir);
326
- return instructions;
327
- }
328
- /**
329
- * Parse optional YAML frontmatter from a markdown file.
330
- */
331
- function parseFrontmatter(raw) {
332
- const fmRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
333
- const match = raw.match(fmRegex);
334
- if (!match) {
335
- return { content: raw.trim() };
336
- }
337
- try {
338
- const fm = parse(match[1]);
339
- return {
340
- content: match[2].trim(),
341
- frontmatter: {
342
- applies_to: Array.isArray(fm?.applies_to) ? fm.applies_to : undefined,
343
- scope: typeof fm?.scope === 'string' ? fm.scope : undefined,
344
- },
345
- };
312
+ else {
313
+ console.error(chalk.red(`Failed to fetch remote config: ${err instanceof Error ? err.message : String(err)}`));
314
+ }
315
+ process.exit(1);
346
316
  }
347
- catch {
348
- // Invalid frontmatter — treat entire file as content
349
- return { content: raw.trim() };
317
+ finally {
318
+ clearTimeout(timeout);
350
319
  }
351
320
  }
352
321
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAA4E,MAAM,eAAe,CAAC;AACrJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,qBAAqB,EAA0B,MAAM,wBAAwB,CAAC;AACpK,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAuB,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACnH,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAUzD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;IAC3C,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEpD,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,GAAY,CAAC;IAEjB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,GAAG,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,aAAa,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,kBAAkB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC,CAAC;YAC7H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,UAAU,CAAC,MAAO,CAAC;IAEhC,IAAI,aAAa,GAAmB,IAAI,CAAC;IAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACxE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,MAAM,YAAY,SAAS,CAAC,KAAK,cAAc,SAAS,CAAC,aAAa,QAAQ,CAAC,CAAC,CAAC;YAClJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,aAAa,CAAC,GAAG,KAAK,aAAa,CAAC,IAAI,OAAO,aAAa,CAAC,cAAc,aAAa,CAAC,CAAC,CAAC;QAC7H,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAEjC,MAAM,aAAa,GAAkB;YACnC,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,aAAa,CAAC,GAAG;YACtB,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,cAAc,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvG,WAAW,EAAE,aAAa,CAAC,WAAW;SACvC,CAAC;QACF,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC;IAEpF,kFAAkF;IAClF,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC3B,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC;QAEhF,oFAAoF;QACpF,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACzC,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YACxE,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAAE,SAAS;YAEhC,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,SAAS,8BAA8B,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;gBAC9G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;gBACxF,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;gBACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,SAAS,GAAG,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;YACpF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;gBAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC,CAAC;gBAC5F,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEjG,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oDAAoD,CAAC,CAAC,CAAC;QACjF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC,CAAC;IACxG,CAAC;IAED,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa;QACxD,CAAC,CAAC,MAAM,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC;QACrG,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,eAAe,GAAG,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpE,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpC,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,MAAM,kBAAkB,CAAC,CAAC,CAAC;IACzI,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YAC5F,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACnD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,4DAA4D,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;YACzF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;YAChD,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;gBAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,MAAM,iBAAiB,MAAM,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;IACpH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACxD,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAC9C,GAAG,EACH,aAAa,EACb,gBAAgB,EAChB,QAAQ,EACR,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAAE,SAAS;YAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,SAAS,KAAK,CAAC,CAAC,CAAC;YAEzD,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxD,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;oBAC7C,OAAO,EAAE,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;oBAC/E,MAAM,EAAE,iBAAiB,SAAS,EAAE;iBACrC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAC5F,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,SAAS,CAAC,OAAO,GAAG,qBAAqB,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,UAAU,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC5D,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,MAAM,4CAA4C,CAAC,CAAC,CAAC;QAE3G,4DAA4D;QAC5D,IAAI,OAAO,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAC5C,GAAG,EACH,aAAa,CAAC,GAAG,EACjB,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,CAC7C,CAAC;gBAEF,IAAI,aAAa,GAAG,CAAC,CAAC;gBACtB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAG,MAAM,CAAC,WAAsB,IAAI,SAAS,CAAC,CAAC;gBAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAE5C,qCAAqC;gBACrC,IAAI,SAAS,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACxC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/D,MAAM,WAAW,GAAG;4BAClB,KAAK;4BACL,SAAS,IAAI,EAAE;4BACf,gBAAgB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;4BAC/C,kBAAkB;4BAClB,UAAU,MAAM,CAAC,KAAK,EAAE;4BACxB,KAAK;yBACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACb,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;wBAChD,aAAa,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;wBACxE,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,wBAAwB;gBACxB,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACjE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;wBACzD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBACzC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wBACrE,aAAa,EAAE,CAAC;oBAClB,CAAC;gBACH,CAAC;gBAED,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,aAAa,2CAA2C,CAAC,CAAC,CAAC;gBACtG,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iDAAiD;gBACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,SAAiB,EACjB,QAAqB,EACrB,OAAuB,EACvB,OAA4B;IAE5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC;IAErD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,SAAS,2DAA2D,CAAC,CAAC,CAAC;QAC7G,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAC7C,OAAO,EACP,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,OAAO,CACR,CAAC;IAEF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,SAAS,mDAAmD,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;QAC/F,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qCAAqC,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACrF,OAAO;QACL,GAAG,yBAAyB,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;QACxE,GAAG,iBAAiB,CAAC,YAAY,CAAC;KACnC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,aAAsB;IACtE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;IACpD,IAAI,aAAa;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAE1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACtC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,GAAG,EAAE,EAAE;YACnD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-config.d.ts","sourceRoot":"","sources":["../../src/config/api-config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAYnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIlF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASlE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CASlD"}
1
+ {"version":3,"file":"api-config.d.ts","sourceRoot":"","sources":["../../src/config/api-config.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,+BAA+B,CAAC;AAE7D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAYnE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAIlF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAevD;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASlE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CASlD"}
@@ -26,6 +26,10 @@ export function writeLocalConfig(rootDir, config) {
26
26
  }
27
27
  export function normalizeApiBase(rawUrl) {
28
28
  const parsed = new URL(rawUrl.trim());
29
+ // Only allow http: and https: schemes to prevent SSRF
30
+ if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
31
+ throw new Error(`Invalid URL scheme "${parsed.protocol}" — only http: and https: are allowed.`);
32
+ }
29
33
  const trimmedPath = parsed.pathname.replace(/\/+$/, '');
30
34
  if (trimmedPath.length === 0) {
31
35
  parsed.pathname = '/v1';