@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.
- package/dist/agents/configuration.d.ts +9 -0
- package/dist/agents/configuration.d.ts.map +1 -0
- package/dist/agents/configuration.js +57 -0
- package/dist/agents/configuration.js.map +1 -0
- package/dist/agents/remote-config.d.ts +30 -0
- package/dist/agents/remote-config.d.ts.map +1 -0
- package/dist/agents/remote-config.js +102 -0
- package/dist/agents/remote-config.js.map +1 -0
- package/dist/commands/activate.d.ts.map +1 -1
- package/dist/commands/activate.js +4 -3
- package/dist/commands/activate.js.map +1 -1
- package/dist/commands/decode.js +2 -2
- package/dist/commands/decode.js.map +1 -1
- package/dist/commands/doctor.js +16 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +353 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +3 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +215 -19
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +0 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +3 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push-learnings.d.ts +14 -0
- package/dist/commands/push-learnings.d.ts.map +1 -0
- package/dist/commands/push-learnings.js +186 -0
- package/dist/commands/push-learnings.js.map +1 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +130 -15
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +159 -138
- package/dist/commands/sync.js.map +1 -1
- package/dist/config/api-config.d.ts.map +1 -1
- package/dist/config/api-config.js +4 -0
- package/dist/config/api-config.js.map +1 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/customs/instructions.d.ts +3 -0
- package/dist/customs/instructions.d.ts.map +1 -0
- package/dist/customs/instructions.js +51 -0
- package/dist/customs/instructions.js.map +1 -0
- package/dist/enrichment/confirm.d.ts +17 -0
- package/dist/enrichment/confirm.d.ts.map +1 -0
- package/dist/enrichment/confirm.js +44 -0
- package/dist/enrichment/confirm.js.map +1 -0
- package/dist/enrichment/state.d.ts +8 -0
- package/dist/enrichment/state.d.ts.map +1 -0
- package/dist/enrichment/state.js +107 -0
- package/dist/enrichment/state.js.map +1 -0
- package/dist/enrichment/types.d.ts +13 -0
- package/dist/enrichment/types.d.ts.map +1 -0
- package/dist/enrichment/types.js +2 -0
- package/dist/enrichment/types.js.map +1 -0
- package/dist/enrichment/workflow.d.ts +41 -0
- package/dist/enrichment/workflow.d.ts.map +1 -0
- package/dist/enrichment/workflow.js +354 -0
- package/dist/enrichment/workflow.js.map +1 -0
- package/dist/generator/package-renderer.d.ts +4 -12
- package/dist/generator/package-renderer.d.ts.map +1 -1
- package/dist/generator/package-renderer.js +41 -61
- package/dist/generator/package-renderer.js.map +1 -1
- package/dist/generator/render.d.ts +5 -11
- package/dist/generator/render.d.ts.map +1 -1
- package/dist/generator/render.js +13 -3
- package/dist/generator/render.js.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/licensing/installer.d.ts +9 -1
- package/dist/licensing/installer.d.ts.map +1 -1
- package/dist/licensing/installer.js +36 -22
- package/dist/licensing/installer.js.map +1 -1
- package/dist/licensing/license-manager.d.ts +6 -0
- package/dist/licensing/license-manager.d.ts.map +1 -1
- package/dist/licensing/license-manager.js +12 -35
- package/dist/licensing/license-manager.js.map +1 -1
- package/dist/licensing/template-fetch.d.ts +3 -2
- package/dist/licensing/template-fetch.d.ts.map +1 -1
- package/dist/licensing/template-fetch.js +10 -41
- package/dist/licensing/template-fetch.js.map +1 -1
- package/dist/scan/auto-bootstrap.d.ts +3 -0
- package/dist/scan/auto-bootstrap.d.ts.map +1 -0
- package/dist/scan/auto-bootstrap.js +30 -0
- package/dist/scan/auto-bootstrap.js.map +1 -0
- package/dist/scan/llm/anthropic.d.ts.map +1 -1
- package/dist/scan/llm/anthropic.js +1 -10
- package/dist/scan/llm/anthropic.js.map +1 -1
- package/dist/scan/llm/ollama.d.ts.map +1 -1
- package/dist/scan/llm/ollama.js +1 -10
- package/dist/scan/llm/ollama.js.map +1 -1
- package/dist/scan/llm/openai.d.ts.map +1 -1
- package/dist/scan/llm/openai.js +1 -10
- package/dist/scan/llm/openai.js.map +1 -1
- package/dist/utils/fetch.d.ts +9 -0
- package/dist/utils/fetch.d.ts.map +1 -0
- package/dist/utils/fetch.js +18 -0
- package/dist/utils/fetch.js.map +1 -0
- package/package.json +2 -2
package/dist/commands/sync.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { existsSync, readFileSync,
|
|
2
|
-
import { resolve
|
|
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.
|
|
27
|
+
console.warn(chalk.yellow(' [dry-run mode — no files will be written]\n'));
|
|
22
28
|
}
|
|
23
29
|
if (devMode) {
|
|
24
|
-
console.
|
|
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.
|
|
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.
|
|
53
|
+
console.error(chalk.red('Invalid workspace config:'));
|
|
51
54
|
for (const err of validation.errors) {
|
|
52
|
-
console.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
72
|
-
for (const
|
|
73
|
-
console.
|
|
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(
|
|
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
|
-
|
|
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.
|
|
97
|
-
for (const
|
|
98
|
-
console.
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
113
|
-
if (!
|
|
114
|
-
const hasCritical =
|
|
115
|
-
console.
|
|
116
|
-
console.log(formatThreats(
|
|
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.
|
|
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.
|
|
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((
|
|
132
|
-
console.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
|
-
|
|
165
|
-
|
|
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((
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
200
|
-
|
|
201
|
-
|
|
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.
|
|
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(),
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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
|