@nepopsx/cli 0.0.4 → 0.0.6

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 (103) 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 +3 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +215 -19
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/login.d.ts +0 -1
  24. package/dist/commands/login.d.ts.map +1 -1
  25. package/dist/commands/login.js +3 -3
  26. package/dist/commands/login.js.map +1 -1
  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.map +1 -1
  32. package/dist/commands/scan.js +130 -15
  33. package/dist/commands/scan.js.map +1 -1
  34. package/dist/commands/sync.d.ts.map +1 -1
  35. package/dist/commands/sync.js +159 -138
  36. package/dist/commands/sync.js.map +1 -1
  37. package/dist/config/api-config.d.ts.map +1 -1
  38. package/dist/config/api-config.js +4 -0
  39. package/dist/config/api-config.js.map +1 -1
  40. package/dist/constants.d.ts +7 -0
  41. package/dist/constants.d.ts.map +1 -0
  42. package/dist/constants.js +7 -0
  43. package/dist/constants.js.map +1 -0
  44. package/dist/customs/instructions.d.ts +3 -0
  45. package/dist/customs/instructions.d.ts.map +1 -0
  46. package/dist/customs/instructions.js +51 -0
  47. package/dist/customs/instructions.js.map +1 -0
  48. package/dist/enrichment/confirm.d.ts +17 -0
  49. package/dist/enrichment/confirm.d.ts.map +1 -0
  50. package/dist/enrichment/confirm.js +44 -0
  51. package/dist/enrichment/confirm.js.map +1 -0
  52. package/dist/enrichment/state.d.ts +8 -0
  53. package/dist/enrichment/state.d.ts.map +1 -0
  54. package/dist/enrichment/state.js +107 -0
  55. package/dist/enrichment/state.js.map +1 -0
  56. package/dist/enrichment/types.d.ts +13 -0
  57. package/dist/enrichment/types.d.ts.map +1 -0
  58. package/dist/enrichment/types.js +2 -0
  59. package/dist/enrichment/types.js.map +1 -0
  60. package/dist/enrichment/workflow.d.ts +41 -0
  61. package/dist/enrichment/workflow.d.ts.map +1 -0
  62. package/dist/enrichment/workflow.js +354 -0
  63. package/dist/enrichment/workflow.js.map +1 -0
  64. package/dist/generator/package-renderer.d.ts +4 -12
  65. package/dist/generator/package-renderer.d.ts.map +1 -1
  66. package/dist/generator/package-renderer.js +41 -61
  67. package/dist/generator/package-renderer.js.map +1 -1
  68. package/dist/generator/render.d.ts +5 -11
  69. package/dist/generator/render.d.ts.map +1 -1
  70. package/dist/generator/render.js +13 -3
  71. package/dist/generator/render.js.map +1 -1
  72. package/dist/index.js +15 -4
  73. package/dist/index.js.map +1 -1
  74. package/dist/licensing/installer.d.ts +9 -1
  75. package/dist/licensing/installer.d.ts.map +1 -1
  76. package/dist/licensing/installer.js +36 -22
  77. package/dist/licensing/installer.js.map +1 -1
  78. package/dist/licensing/license-manager.d.ts +6 -0
  79. package/dist/licensing/license-manager.d.ts.map +1 -1
  80. package/dist/licensing/license-manager.js +12 -35
  81. package/dist/licensing/license-manager.js.map +1 -1
  82. package/dist/licensing/template-fetch.d.ts +3 -2
  83. package/dist/licensing/template-fetch.d.ts.map +1 -1
  84. package/dist/licensing/template-fetch.js +10 -41
  85. package/dist/licensing/template-fetch.js.map +1 -1
  86. package/dist/scan/auto-bootstrap.d.ts +3 -0
  87. package/dist/scan/auto-bootstrap.d.ts.map +1 -0
  88. package/dist/scan/auto-bootstrap.js +30 -0
  89. package/dist/scan/auto-bootstrap.js.map +1 -0
  90. package/dist/scan/llm/anthropic.d.ts.map +1 -1
  91. package/dist/scan/llm/anthropic.js +1 -10
  92. package/dist/scan/llm/anthropic.js.map +1 -1
  93. package/dist/scan/llm/ollama.d.ts.map +1 -1
  94. package/dist/scan/llm/ollama.js +1 -10
  95. package/dist/scan/llm/ollama.js.map +1 -1
  96. package/dist/scan/llm/openai.d.ts.map +1 -1
  97. package/dist/scan/llm/openai.js +1 -10
  98. package/dist/scan/llm/openai.js.map +1 -1
  99. package/dist/utils/fetch.d.ts +9 -0
  100. package/dist/utils/fetch.d.ts.map +1 -0
  101. package/dist/utils/fetch.js +18 -0
  102. package/dist/utils/fetch.js.map +1 -0
  103. package/package.json +2 -2
@@ -1,13 +1,18 @@
1
- import { existsSync, readFileSync, readdirSync, statSync, writeFileSync, mkdirSync } 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 { DOWNLOAD_TIMEOUT_MS } from '../constants.js';
6
7
  import { renderTemplate, setPhilosophyBlock, setCustomInstructions, setWatermarkData, applyLicenseWatermark } from '../generator/render.js';
7
8
  import { renderAgentBundle } from '../generator/package-renderer.js';
8
9
  import { writeGeneratedFiles, printWriteResult } from '../generator/writer.js';
9
10
  import { getBuiltinTemplates } from '../generator/builtin-templates.js';
10
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';
11
16
  import { scanCustomInstructions, scanPhilosophyCustom, formatThreats, generateManifest } from '../security/index.js';
12
17
  import { validateLicense, enforceTierLimits, fetchRemoteTemplates, isDevMode, readLicense } from '../licensing/index.js';
13
18
  import { resolveApiBase } from '../config/api-config.js';
@@ -16,20 +21,18 @@ export async function syncCommand(options) {
16
21
  const configPath = resolve(cwd, options.config);
17
22
  const dryRun = options.dryRun ?? false;
18
23
  const devMode = options.dev ?? isDevMode();
24
+ const bootstrapLicense = readLicense(cwd);
19
25
  console.log(chalk.bold.cyan('\n🔄 NEPOPSX Sync\n'));
20
26
  if (dryRun) {
21
- 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'));
22
28
  }
23
29
  if (devMode) {
24
- console.log(chalk.yellow(' [dev mode — license checks bypassed]\n'));
30
+ console.warn(chalk.yellow(' [dev mode — license checks bypassed]\n'));
25
31
  }
26
- // 1. Load and validate config
27
32
  let raw;
28
33
  if (options.remote) {
29
- // Remote mode: fetch config from backend API using license key
30
34
  console.log(chalk.dim('Fetching workspace config from backend...'));
31
35
  raw = await fetchRemoteConfig(cwd, options.workspace);
32
- // Also write to disk so subsequent local syncs work
33
36
  const configDir = resolve(cwd, '.nepopsx');
34
37
  if (!existsSync(configDir))
35
38
  mkdirSync(configDir, { recursive: true });
@@ -39,7 +42,7 @@ export async function syncCommand(options) {
39
42
  }
40
43
  else {
41
44
  if (!existsSync(configPath)) {
42
- console.log(chalk.red(`Config not found: ${options.config}`));
45
+ console.error(chalk.red(`Config not found: ${options.config}`));
43
46
  console.log(chalk.dim(`Run ${chalk.cyan('nepopsx init')} first, or use ${chalk.cyan('--remote')} to fetch from backend.\n`));
44
47
  process.exit(1);
45
48
  }
@@ -47,37 +50,32 @@ export async function syncCommand(options) {
47
50
  }
48
51
  const validation = validateWorkspaceConfig(raw);
49
52
  if (!validation.valid) {
50
- console.log(chalk.red('Invalid workspace config:'));
53
+ console.error(chalk.red('Invalid workspace config:'));
51
54
  for (const err of validation.errors) {
52
- console.log(chalk.red(` ✗ ${err}`));
55
+ console.error(chalk.red(` ✗ ${err}`));
53
56
  }
54
57
  console.log(chalk.dim(`\nRun ${chalk.cyan('nepopsx doctor')} for details.\n`));
55
58
  process.exit(1);
56
59
  }
57
- const config = validation.config;
58
- console.log(chalk.dim(`Workspace: ${config.workspace.name}`));
59
- console.log(chalk.dim(`Services: ${config.services.map((s) => s.name).join(', ')}`));
60
+ let config = validation.config;
60
61
  let activeLicense = null;
61
- // 1b. License validation (skip in dev mode)
62
62
  if (!devMode) {
63
63
  const licenseStatus = await validateLicense(cwd, config);
64
64
  if (!licenseStatus.valid) {
65
- console.log(chalk.red(`\n🔒 ${licenseStatus.message}`));
65
+ console.error(chalk.red(`\n🔒 ${licenseStatus.message}`));
66
66
  process.exit(1);
67
67
  }
68
- // Tier enforcement
69
68
  const violations = enforceTierLimits(config, licenseStatus.tier);
70
69
  if (violations.length > 0) {
71
- console.log(chalk.red('\n🔒 Workspace exceeds license tier limits:'));
72
- for (const v of violations) {
73
- 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)`));
74
73
  }
75
- 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'));
76
75
  process.exit(1);
77
76
  }
78
77
  console.log(chalk.dim(`License: ${licenseStatus.org} (${licenseStatus.tier}) — ${licenseStatus.days_remaining}d remaining`));
79
78
  activeLicense = readLicense(cwd);
80
- // Set up watermarking for all generated files
81
79
  const watermarkData = {
82
80
  version: '0.1.0',
83
81
  org: licenseStatus.org,
@@ -90,179 +88,202 @@ export async function syncCommand(options) {
90
88
  else {
91
89
  setWatermarkData(null);
92
90
  }
93
- // 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(', ')}`));
94
129
  const secretWarnings = scanConfigSecrets(config);
95
130
  if (secretWarnings.length > 0) {
96
- console.log(chalk.yellow('\n⚠ Possible secrets detected in workspace config:'));
97
- for (const w of secretWarnings) {
98
- 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}`));
99
134
  }
100
135
  console.log(chalk.dim(' Remove secrets from workspace.yaml — use environment variables instead.\n'));
101
136
  }
102
- // 2. Collect all write operations
103
137
  const operations = [];
104
- // 2a. Load philosophy + custom instructions
105
- const philoBlock = philosophyToInstructions(config.philosophy);
106
- setPhilosophyBlock(philoBlock);
107
- if (philoBlock) {
108
- 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`));
109
145
  }
110
- // 2a-security: scan philosophy.custom[] for injection
111
146
  if (config.philosophy?.custom && config.philosophy.custom.length > 0) {
112
- const philoScan = scanPhilosophyCustom(config.philosophy.custom);
113
- if (!philoScan.safe) {
114
- const hasCritical = philoScan.threats.some((t) => t.severity === 'critical');
115
- console.log(chalk.red('\n🛡️ Security scan found threats in philosophy.custom[]:'));
116
- 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));
117
152
  if (hasCritical) {
118
- console.log(chalk.red('\n Critical threats found — aborting sync.'));
153
+ console.error(chalk.red('\n Critical threats found — aborting sync.'));
119
154
  console.log(chalk.dim(' Remove or rewrite the flagged philosophy.custom entries.\n'));
120
155
  process.exit(1);
121
156
  }
122
- 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'));
123
158
  }
124
159
  }
125
- const customsPath = resolve(cwd, config.customs_dir ?? 'customs');
126
- const customs = loadCustomInstructions(customsPath);
127
- // 2a-security: scan customs for injection + secrets
128
160
  if (customs.length > 0) {
129
161
  const customsScan = scanCustomInstructions(customs);
130
162
  if (!customsScan.safe) {
131
- const hasCritical = customsScan.threats.some((t) => t.severity === 'critical');
132
- 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:'));
133
165
  console.log(formatThreats(customsScan.threats));
134
166
  if (hasCritical) {
135
- console.log(chalk.red('\n Critical threats found — aborting sync.'));
167
+ console.error(chalk.red('\n Critical threats found — aborting sync.'));
136
168
  console.log(chalk.dim(' Remove or rewrite the flagged customs/ files.\n'));
137
169
  process.exit(1);
138
170
  }
139
- 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'));
140
172
  }
141
173
  }
142
174
  setCustomInstructions(customs);
143
175
  if (customs.length > 0) {
144
176
  console.log(chalk.dim(`Custom instructions: ${customs.length} file(s) from ${config.customs_dir ?? 'customs/'}`));
145
177
  }
146
- // 2b. Builtin templates (copilot-instructions.md, AGENTS.md, CLAUDE.md, Makefile, per-language instructions)
147
178
  console.log(chalk.dim('\nRendering base templates...'));
148
- const builtins = getBuiltinTemplates(config);
149
- for (const { outputPath, template, source } of builtins) {
150
- const content = renderTemplate(template, config);
151
- 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
+ }
152
193
  }
153
- // 2c. Agent templates
154
194
  if (config.agents) {
155
195
  for (const [agentName, agentCfg] of Object.entries(config.agents)) {
156
196
  if (!agentCfg.enabled)
157
197
  continue;
158
198
  console.log(chalk.dim(`Loading agent: ${agentName}...`));
159
- // Security: validate agent package before loading
160
- 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);
161
207
  operations.push(...agentOps);
162
208
  }
163
209
  }
164
- // 3. Apply license watermark + fingerprint to all generated files
165
- for (const op of operations) {
166
- op.content = applyLicenseWatermark(op.content);
210
+ for (const operation of operations) {
211
+ operation.content = applyLicenseWatermark(operation.content, operation.path);
167
212
  }
168
- // 4. Write files
169
213
  console.log(chalk.dim(`\nWriting ${operations.length} file(s)...`));
170
214
  const result = writeGeneratedFiles(cwd, operations, dryRun);
171
215
  printWriteResult(result, dryRun);
172
- // 5. Generate integrity manifest
173
216
  if (!dryRun) {
174
- const allFiles = operations.map((op) => ({ path: op.path, content: op.content }));
217
+ const allFiles = operations.map((operation) => ({ path: operation.path, content: operation.content }));
175
218
  const manifest = generateManifest(cwd, allFiles);
176
219
  console.log(chalk.dim(`Integrity manifest: ${manifest.length} file(s) hashed → .nepopsx/manifest.sha256`));
177
- }
178
- 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
+ }
179
262
  console.log(chalk.bold.green('\n✅ Sync complete.\n'));
180
263
  }
181
264
  }
182
- /**
183
- * Load and render templates from an agent package.
184
- */
185
- async function loadAgentTemplates(rootDir, agentName, agentCfg, config, license) {
265
+ async function loadAgentTemplates(rootDir, agentName, agentCfg, license, customs) {
186
266
  const requestedVersion = agentCfg.version ?? '0.0.1';
187
- const agentMeta = { name: agentName, version: requestedVersion };
188
267
  if (!license) {
189
- 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.`));
190
269
  return [];
191
270
  }
192
- const remoteBundle = await fetchRemoteTemplates(rootDir, license, agentName, requestedVersion);
271
+ const remoteBundle = await fetchRemoteTemplates(rootDir, license, agentName, requestedVersion, customs);
193
272
  if (!remoteBundle) {
194
- 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.`));
195
274
  console.log(chalk.dim(' Check that the NEPOPSX backend is reachable: nepopsx server show'));
196
275
  return [];
197
276
  }
198
277
  console.log(chalk.dim(` ↳ using remote template bundle (${remoteBundle.version})`));
199
- return renderAgentBundle(remoteBundle, config, {
200
- name: agentName,
201
- version: remoteBundle.version,
202
- });
203
- }
204
- /**
205
- * Load custom instruction files from the customs/ directory.
206
- * Supports YAML frontmatter for scoping (applies_to, scope).
207
- */
208
- function loadCustomInstructions(customsDir) {
209
- const instructions = [];
210
- if (!existsSync(customsDir))
211
- return instructions;
212
- const scanDir = (dir) => {
213
- for (const entry of readdirSync(dir)) {
214
- const fullPath = join(dir, entry);
215
- const stat = statSync(fullPath);
216
- if (stat.isDirectory()) {
217
- scanDir(fullPath); // recurse into auto/ and subdirectories
218
- continue;
219
- }
220
- if (!entry.endsWith('.md') || entry === 'README.md')
221
- continue;
222
- const raw = readFileSync(fullPath, 'utf-8');
223
- const parsed = parseFrontmatter(raw);
224
- instructions.push({
225
- content: parsed.content,
226
- applies_to: parsed.frontmatter?.applies_to,
227
- scope: parsed.frontmatter?.scope,
228
- source: relative(customsDir, fullPath),
229
- });
230
- }
231
- };
232
- scanDir(customsDir);
233
- return instructions;
234
- }
235
- /**
236
- * Parse optional YAML frontmatter from a markdown file.
237
- */
238
- function parseFrontmatter(raw) {
239
- const fmRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
240
- const match = raw.match(fmRegex);
241
- if (!match) {
242
- return { content: raw.trim() };
243
- }
244
- try {
245
- const fm = parse(match[1]);
246
- return {
247
- content: match[2].trim(),
248
- frontmatter: {
249
- applies_to: Array.isArray(fm?.applies_to) ? fm.applies_to : undefined,
250
- scope: typeof fm?.scope === 'string' ? fm.scope : undefined,
251
- },
252
- };
253
- }
254
- catch {
255
- // Invalid frontmatter — treat entire file as content
256
- return { content: raw.trim() };
257
- }
278
+ return [
279
+ ...getAgentSupportOperations(rootDir, remoteBundle, agentName, agentCfg),
280
+ ...renderAgentBundle(remoteBundle),
281
+ ];
258
282
  }
259
- /**
260
- * Fetch workspace config from the backend API using the local license key.
261
- */
262
283
  async function fetchRemoteConfig(rootDir, workspaceSlug) {
263
284
  const license = readLicense(rootDir);
264
285
  if (!license) {
265
- console.log(chalk.red('No license found. Run nepopsx activate first.'));
286
+ console.error(chalk.red('No license found. Run nepopsx activate first.'));
266
287
  process.exit(1);
267
288
  }
268
289
  const apiBase = resolveApiBase(rootDir);
@@ -270,7 +291,7 @@ async function fetchRemoteConfig(rootDir, workspaceSlug) {
270
291
  if (workspaceSlug)
271
292
  url.searchParams.set('workspace', workspaceSlug);
272
293
  const controller = new AbortController();
273
- const timeout = setTimeout(() => controller.abort(), 15_000);
294
+ const timeout = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS);
274
295
  try {
275
296
  const res = await fetch(url.toString(), {
276
297
  headers: { Authorization: `Bearer ${license.key}` },
@@ -278,18 +299,18 @@ async function fetchRemoteConfig(rootDir, workspaceSlug) {
278
299
  });
279
300
  if (!res.ok) {
280
301
  const body = await res.text().catch(() => '');
281
- console.log(chalk.red(`Backend returned ${res.status}: ${body}`));
302
+ console.error(chalk.red(`Backend returned ${res.status}: ${body}`));
282
303
  process.exit(1);
283
304
  }
284
305
  return await res.json();
285
306
  }
286
307
  catch (err) {
287
308
  if (err instanceof Error && err.name === 'AbortError') {
288
- console.log(chalk.red('Request timed out. Is the backend reachable?'));
309
+ console.error(chalk.red('Request timed out. Is the backend reachable?'));
289
310
  console.log(chalk.dim(` URL: ${url.toString()}`));
290
311
  }
291
312
  else {
292
- console.log(chalk.red(`Failed to fetch remote config: ${err instanceof Error ? err.message : String(err)}`));
313
+ console.error(chalk.red(`Failed to fetch remote config: ${err instanceof Error ? err.message : String(err)}`));
293
314
  }
294
315
  process.exit(1);
295
316
  }
@@ -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":"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"}
@@ -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';
@@ -1 +1 @@
1
- {"version":3,"file":"api-config.js","sourceRoot":"","sources":["../../src/config/api-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-config.js","sourceRoot":"","sources":["../../src/config/api-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,WAAW,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC;AAM7D,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,OAAO,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAuB,CAAC;QAChF,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAA0B;IAC1E,MAAM,UAAU,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACtC,sDAAsD;IACtD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,QAAQ,wCAAwC,CAAC,CAAC;IAClG,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAExD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,MAAc;IACxD,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,gBAAgB,CAAC,OAAO,EAAE;QACxB,GAAG,QAAQ;QACX,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAuB,EAAE,GAAG,QAAQ,EAAE,CAAC;IACjD,OAAO,IAAI,CAAC,OAAO,CAAC;IACpB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Timeout for lightweight API calls (login, license validate/refresh). */
2
+ export declare const API_TIMEOUT_MS = 10000;
3
+ /** Timeout for heavier API calls (bundle download, template fetch). */
4
+ export declare const DOWNLOAD_TIMEOUT_MS = 30000;
5
+ /** Default frontend dashboard port for `open` command. */
6
+ export declare const DASHBOARD_PORT = 3002;
7
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,0DAA0D;AAC1D,eAAO,MAAM,cAAc,OAAO,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Timeout for lightweight API calls (login, license validate/refresh). */
2
+ export const API_TIMEOUT_MS = 10_000;
3
+ /** Timeout for heavier API calls (bundle download, template fetch). */
4
+ export const DOWNLOAD_TIMEOUT_MS = 30_000;
5
+ /** Default frontend dashboard port for `open` command. */
6
+ export const DASHBOARD_PORT = 3002;
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,uEAAuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CustomInstruction } from '../generator/render.js';
2
+ export declare function loadCustomInstructions(customsDir: string): CustomInstruction[];
3
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/customs/instructions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA+B9E"}
@@ -0,0 +1,51 @@
1
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, relative } from 'node:path';
3
+ import { parse } from 'yaml';
4
+ export function loadCustomInstructions(customsDir) {
5
+ const instructions = [];
6
+ if (!existsSync(customsDir))
7
+ return instructions;
8
+ const scanDir = (dir) => {
9
+ for (const entry of readdirSync(dir)) {
10
+ const fullPath = join(dir, entry);
11
+ const stat = statSync(fullPath);
12
+ if (stat.isDirectory()) {
13
+ scanDir(fullPath);
14
+ continue;
15
+ }
16
+ if (!entry.endsWith('.md') || entry === 'README.md')
17
+ continue;
18
+ const raw = readFileSync(fullPath, 'utf-8');
19
+ const parsed = parseFrontmatter(raw);
20
+ instructions.push({
21
+ content: parsed.content,
22
+ applies_to: parsed.frontmatter?.applies_to,
23
+ scope: parsed.frontmatter?.scope,
24
+ source: relative(customsDir, fullPath),
25
+ });
26
+ }
27
+ };
28
+ scanDir(customsDir);
29
+ return instructions;
30
+ }
31
+ function parseFrontmatter(raw) {
32
+ const frontmatterRegex = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
33
+ const match = raw.match(frontmatterRegex);
34
+ if (!match) {
35
+ return { content: raw.trim() };
36
+ }
37
+ try {
38
+ const frontmatter = parse(match[1]);
39
+ return {
40
+ content: match[2].trim(),
41
+ frontmatter: {
42
+ applies_to: Array.isArray(frontmatter?.applies_to) ? frontmatter.applies_to : undefined,
43
+ scope: typeof frontmatter?.scope === 'string' ? frontmatter.scope : undefined,
44
+ },
45
+ };
46
+ }
47
+ catch {
48
+ return { content: raw.trim() };
49
+ }
50
+ }
51
+ //# sourceMappingURL=instructions.js.map