@nepopsx/cli 0.0.24 → 0.0.26
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/remote-config.d.ts +12 -0
- package/dist/agents/remote-config.d.ts.map +1 -1
- package/dist/agents/remote-config.js +19 -0
- package/dist/agents/remote-config.js.map +1 -1
- package/dist/commands/guard.d.ts +10 -0
- package/dist/commands/guard.d.ts.map +1 -0
- package/dist/commands/guard.js +63 -0
- package/dist/commands/guard.js.map +1 -0
- package/dist/commands/import-agents.d.ts +17 -0
- package/dist/commands/import-agents.d.ts.map +1 -0
- package/dist/commands/import-agents.js +192 -0
- package/dist/commands/import-agents.js.map +1 -0
- package/dist/commands/import.d.ts +19 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +182 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +12 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +15 -37
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push-learnings.d.ts.map +1 -1
- package/dist/commands/push-learnings.js +8 -1
- package/dist/commands/push-learnings.js.map +1 -1
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +17 -0
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +29 -4
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +92 -9
- package/dist/commands/up.js.map +1 -1
- package/dist/config/api-config.d.ts +5 -7
- package/dist/config/api-config.d.ts.map +1 -1
- package/dist/config/api-config.js +2 -3
- package/dist/config/api-config.js.map +1 -1
- package/dist/config/global-config.d.ts +52 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +161 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config/global-config.test.d.ts +2 -0
- package/dist/config/global-config.test.d.ts.map +1 -0
- package/dist/config/global-config.test.js +62 -0
- package/dist/config/global-config.test.js.map +1 -0
- package/dist/enrichment/workflow.d.ts.map +1 -1
- package/dist/enrichment/workflow.js +8 -1
- package/dist/enrichment/workflow.js.map +1 -1
- package/dist/guard/policy.d.ts +38 -0
- package/dist/guard/policy.d.ts.map +1 -0
- package/dist/guard/policy.js +62 -0
- package/dist/guard/policy.js.map +1 -0
- package/dist/guard/policy.test.d.ts +2 -0
- package/dist/guard/policy.test.d.ts.map +1 -0
- package/dist/guard/policy.test.js +47 -0
- package/dist/guard/policy.test.js.map +1 -0
- package/dist/hooks/capture-hooks.d.ts.map +1 -1
- package/dist/hooks/capture-hooks.js +36 -1
- package/dist/hooks/capture-hooks.js.map +1 -1
- package/dist/import/adapter.d.ts +82 -0
- package/dist/import/adapter.d.ts.map +1 -0
- package/dist/import/adapter.js +111 -0
- package/dist/import/adapter.js.map +1 -0
- package/dist/import/adapter.test.d.ts +2 -0
- package/dist/import/adapter.test.d.ts.map +1 -0
- package/dist/import/adapter.test.js +100 -0
- package/dist/import/adapter.test.js.map +1 -0
- package/dist/import/agents/agent-adapter.d.ts +83 -0
- package/dist/import/agents/agent-adapter.d.ts.map +1 -0
- package/dist/import/agents/agent-adapter.js +66 -0
- package/dist/import/agents/agent-adapter.js.map +1 -0
- package/dist/import/agents/agent-adapter.test.d.ts +2 -0
- package/dist/import/agents/agent-adapter.test.d.ts.map +1 -0
- package/dist/import/agents/agent-adapter.test.js +99 -0
- package/dist/import/agents/agent-adapter.test.js.map +1 -0
- package/dist/import/agents/artifact-parser.d.ts +26 -0
- package/dist/import/agents/artifact-parser.d.ts.map +1 -0
- package/dist/import/agents/artifact-parser.js +40 -0
- package/dist/import/agents/artifact-parser.js.map +1 -0
- package/dist/import/agents/assembler.d.ts +32 -0
- package/dist/import/agents/assembler.d.ts.map +1 -0
- package/dist/import/agents/assembler.js +0 -0
- package/dist/import/agents/assembler.js.map +1 -0
- package/dist/import/agents/assembler.test.d.ts +2 -0
- package/dist/import/agents/assembler.test.d.ts.map +1 -0
- package/dist/import/agents/assembler.test.js +115 -0
- package/dist/import/agents/assembler.test.js.map +1 -0
- package/dist/import/agents/claude-code-adapter.d.ts +11 -0
- package/dist/import/agents/claude-code-adapter.d.ts.map +1 -0
- package/dist/import/agents/claude-code-adapter.js +84 -0
- package/dist/import/agents/claude-code-adapter.js.map +1 -0
- package/dist/import/agents/copilot-agent-adapter.d.ts +12 -0
- package/dist/import/agents/copilot-agent-adapter.d.ts.map +1 -0
- package/dist/import/agents/copilot-agent-adapter.js +89 -0
- package/dist/import/agents/copilot-agent-adapter.js.map +1 -0
- package/dist/import/agents/scanner.d.ts +15 -0
- package/dist/import/agents/scanner.d.ts.map +1 -0
- package/dist/import/agents/scanner.js +87 -0
- package/dist/import/agents/scanner.js.map +1 -0
- package/dist/import/agents/secret-scan.d.ts +14 -0
- package/dist/import/agents/secret-scan.d.ts.map +1 -0
- package/dist/import/agents/secret-scan.js +64 -0
- package/dist/import/agents/secret-scan.js.map +1 -0
- package/dist/import/agents/secret-scan.test.d.ts +2 -0
- package/dist/import/agents/secret-scan.test.d.ts.map +1 -0
- package/dist/import/agents/secret-scan.test.js +41 -0
- package/dist/import/agents/secret-scan.test.js.map +1 -0
- package/dist/import/claude-memory-adapter.d.ts +20 -0
- package/dist/import/claude-memory-adapter.d.ts.map +1 -0
- package/dist/import/claude-memory-adapter.js +87 -0
- package/dist/import/claude-memory-adapter.js.map +1 -0
- package/dist/import/copilot-adapter.d.ts +13 -0
- package/dist/import/copilot-adapter.d.ts.map +1 -0
- package/dist/import/copilot-adapter.js +75 -0
- package/dist/import/copilot-adapter.js.map +1 -0
- package/dist/index.js +61 -2
- package/dist/index.js.map +1 -1
- package/dist/learnings/memory-index.d.ts +17 -0
- package/dist/learnings/memory-index.d.ts.map +1 -0
- package/dist/learnings/memory-index.js +73 -0
- package/dist/learnings/memory-index.js.map +1 -0
- package/dist/licensing/installer.d.ts.map +1 -1
- package/dist/licensing/installer.js +3 -5
- package/dist/licensing/installer.js.map +1 -1
- package/dist/licensing/license-manager.d.ts +6 -5
- package/dist/licensing/license-manager.d.ts.map +1 -1
- package/dist/licensing/license-manager.js +10 -8
- package/dist/licensing/license-manager.js.map +1 -1
- package/dist/licensing/workspace-name.d.ts +1 -1
- package/dist/licensing/workspace-name.js +1 -1
- package/dist/utils/fetch.d.ts +8 -0
- package/dist/utils/fetch.d.ts.map +1 -1
- package/dist/utils/fetch.js +35 -0
- package/dist/utils/fetch.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `.nepopsx/MEMORY.md` — a generated, git-committed, human-scannable index of the
|
|
3
|
+
* local learning store, modeled on `~/.claude/MEMORY.md`.
|
|
4
|
+
*
|
|
5
|
+
* One line per learning (title → status → one-line hook → link), so the store is
|
|
6
|
+
* reviewable in a PR diff. Regenerated by `nepopsx import` and `nepopsx sync`. It
|
|
7
|
+
* scans both the hand-authored `learnings/` dir and the imported provenance dir.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
10
|
+
import { relative, resolve } from 'node:path';
|
|
11
|
+
import { loadLearningFiles } from './yaml-learnings.js';
|
|
12
|
+
const NEPOPSX_DIR = '.nepopsx';
|
|
13
|
+
/** First non-empty content line, trimmed to a short hook for the index. */
|
|
14
|
+
function hook(content) {
|
|
15
|
+
const line = content
|
|
16
|
+
.split(/\r?\n/)
|
|
17
|
+
.map((l) => l.replace(/^[#>*\-\s]+/, '').trim())
|
|
18
|
+
.find((l) => l.length > 0);
|
|
19
|
+
if (!line)
|
|
20
|
+
return '';
|
|
21
|
+
return line.length > 100 ? `${line.slice(0, 97)}…` : line;
|
|
22
|
+
}
|
|
23
|
+
function titleFromSlug(slug) {
|
|
24
|
+
return slug.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Regenerate `<rootDir>/.nepopsx/MEMORY.md`. Returns the count of indexed learnings
|
|
28
|
+
* and the index path. Best-effort: never throws.
|
|
29
|
+
*/
|
|
30
|
+
export function regenerateMemoryIndex(rootDir) {
|
|
31
|
+
const base = resolve(rootDir, NEPOPSX_DIR);
|
|
32
|
+
const indexPath = resolve(base, 'MEMORY.md');
|
|
33
|
+
const files = [
|
|
34
|
+
...loadLearningFiles(resolve(base, 'learnings')),
|
|
35
|
+
...loadLearningFiles(resolve(base, 'imported')),
|
|
36
|
+
];
|
|
37
|
+
// De-dupe by slug (a learning may exist both locally and as an import record);
|
|
38
|
+
// keep the first seen (learnings/ is scanned first).
|
|
39
|
+
const bySlug = new Map();
|
|
40
|
+
for (const f of files) {
|
|
41
|
+
if (!bySlug.has(f.learning.slug))
|
|
42
|
+
bySlug.set(f.learning.slug, f);
|
|
43
|
+
}
|
|
44
|
+
const entries = [...bySlug.values()].sort((a, b) => a.learning.slug.localeCompare(b.learning.slug));
|
|
45
|
+
const lines = [
|
|
46
|
+
'# NEPOPSX Memory Index',
|
|
47
|
+
'',
|
|
48
|
+
'<!-- Generated by `nepopsx import` / `nepopsx sync`. Do not edit by hand. -->',
|
|
49
|
+
'',
|
|
50
|
+
];
|
|
51
|
+
if (entries.length === 0) {
|
|
52
|
+
lines.push('_No local learnings yet. Run `nepopsx import` or let the reflector capture some._', '');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
for (const { learning, filePath } of entries) {
|
|
56
|
+
const rel = relative(base, filePath);
|
|
57
|
+
const h = hook(learning.content);
|
|
58
|
+
const tags = [learning.status, learning.type].filter(Boolean).join(' · ');
|
|
59
|
+
lines.push(`- [${titleFromSlug(learning.slug)}](${rel}) — ${tags}${h ? ` — ${h}` : ''}`);
|
|
60
|
+
}
|
|
61
|
+
lines.push('');
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
if (!existsSync(base))
|
|
65
|
+
mkdirSync(base, { recursive: true });
|
|
66
|
+
writeFileSync(indexPath, lines.join('\n'), 'utf-8');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
/* best-effort */
|
|
70
|
+
}
|
|
71
|
+
return { count: entries.length, path: indexPath };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=memory-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-index.js","sourceRoot":"","sources":["../../src/learnings/memory-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/licensing/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAID;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,kBAAkB,GAAE,iBAAiB,EAAO,EAC5C,SAAS,GAAE,cAAc,EAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/licensing/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAID;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,kBAAkB,GAAE,iBAAiB,EAAO,EAC5C,SAAS,GAAE,cAAc,EAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAwB1B;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,kBAAkB,GAAE,iBAAiB,EAAO,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CA0B/B;AAID;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnF;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAOhF;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,aAAa,EAAE,CAmBjB"}
|
|
@@ -12,7 +12,7 @@ import { createHash } from "node:crypto";
|
|
|
12
12
|
import { existsSync, mkdirSync, renameSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { dirname, join } from "node:path";
|
|
14
14
|
import { resolveApiBase } from "../config/api-config.js";
|
|
15
|
-
import { fetchWithTimeout } from "../utils/fetch.js";
|
|
15
|
+
import { fetchWithTimeout, friendlyHttpError } from "../utils/fetch.js";
|
|
16
16
|
import { DOWNLOAD_TIMEOUT_MS } from "../constants.js";
|
|
17
17
|
import { resolveWorkspaceName } from "./workspace-name.js";
|
|
18
18
|
// ─── Download ───────────────────────────────────────────────
|
|
@@ -37,8 +37,7 @@ export async function downloadBundle(cwd, license, agent, version, customInstruc
|
|
|
37
37
|
}),
|
|
38
38
|
}, DOWNLOAD_TIMEOUT_MS);
|
|
39
39
|
if (!response.ok) {
|
|
40
|
-
|
|
41
|
-
throw new Error(`Bundle download failed (${response.status}): ${body || response.statusText}`);
|
|
40
|
+
throw new Error(await friendlyHttpError(response, "Couldn't download the agent bundle"));
|
|
42
41
|
}
|
|
43
42
|
return response.json();
|
|
44
43
|
}
|
|
@@ -58,8 +57,7 @@ export async function downloadBootstrapConfig(cwd, license, agent, version, cust
|
|
|
58
57
|
}),
|
|
59
58
|
}, DOWNLOAD_TIMEOUT_MS);
|
|
60
59
|
if (!response.ok) {
|
|
61
|
-
|
|
62
|
-
throw new Error(`Bootstrap config download failed (${response.status}): ${body || response.statusText}`);
|
|
60
|
+
throw new Error(await friendlyHttpError(response, "Couldn't prepare the agent config"));
|
|
63
61
|
}
|
|
64
62
|
return response.json();
|
|
65
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/licensing/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/licensing/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth/session helpers. Post-migration the CLI has ONE credential: the opaque
|
|
3
|
-
* device token from `nepopsx login`, stored in
|
|
4
|
-
* `License` shape is kept as a thin
|
|
5
|
-
* token — so existing commands send the
|
|
6
|
-
* and entitlement are server-authoritative
|
|
7
|
-
* no license.json, no machine binding, and no
|
|
3
|
+
* device token from `nepopsx login`, stored in the GLOBAL `~/.nepopsx/config.json`
|
|
4
|
+
* (never in the repo — see {@link readAuth}). The `License` shape is kept as a thin
|
|
5
|
+
* compatibility view — `.key` IS the device token — so existing commands send the
|
|
6
|
+
* right Bearer credential unchanged. Auth and entitlement are server-authoritative
|
|
7
|
+
* now (the backend 401/402s); there is no license.json, no machine binding, and no
|
|
8
|
+
* online validate/refresh.
|
|
8
9
|
*/
|
|
9
10
|
import { type License, type LicenseStatus, type LicenseTier, type WorkspaceConfig, type Entitlement } from '@nepopsx/core';
|
|
10
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license-manager.d.ts","sourceRoot":"","sources":["../../src/licensing/license-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"license-manager.d.ts","sourceRoot":"","sources":["../../src/licensing/license-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAIjB,MAAM,eAAe,CAAC;AAQvB;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAe3D;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,OAAO,GAAG,IAAI,EAChE,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,GACT,CAAC,CAEH;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAEtE;AAID;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CA0BxB;AAID;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,CActB;AAID,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,WAAW,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,WAAW,GAChB,aAAa,EAAE,CA4BjB;AAID,8EAA8E;AAC9E,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth/session helpers. Post-migration the CLI has ONE credential: the opaque
|
|
3
|
-
* device token from `nepopsx login`, stored in
|
|
4
|
-
* `License` shape is kept as a thin
|
|
5
|
-
* token — so existing commands send the
|
|
6
|
-
* and entitlement are server-authoritative
|
|
7
|
-
* no license.json, no machine binding, and no
|
|
3
|
+
* device token from `nepopsx login`, stored in the GLOBAL `~/.nepopsx/config.json`
|
|
4
|
+
* (never in the repo — see {@link readAuth}). The `License` shape is kept as a thin
|
|
5
|
+
* compatibility view — `.key` IS the device token — so existing commands send the
|
|
6
|
+
* right Bearer credential unchanged. Auth and entitlement are server-authoritative
|
|
7
|
+
* now (the backend 401/402s); there is no license.json, no machine binding, and no
|
|
8
|
+
* online validate/refresh.
|
|
8
9
|
*/
|
|
9
10
|
import { TIER_LIMITS, generateMachineId, generateFingerprint, } from '@nepopsx/core';
|
|
10
|
-
import {
|
|
11
|
+
import { readAuth, resolveOrgForPath } from '../config/global-config.js';
|
|
11
12
|
import { fetchPlanManifest } from '../utils/fetch-plan-manifest.js';
|
|
12
13
|
import { readWorkspaceNameFromDisk } from './workspace-name.js';
|
|
13
14
|
import { getCachedEntitlement } from './entitlement-cache.js';
|
|
@@ -19,12 +20,13 @@ import { getCachedEntitlement } from './entitlement-cache.js';
|
|
|
19
20
|
* logged in. (No license.json — the device token in config.json is the credential.)
|
|
20
21
|
*/
|
|
21
22
|
export function readLicense(rootDir) {
|
|
22
|
-
const auth =
|
|
23
|
+
const auth = readAuth(rootDir);
|
|
23
24
|
if (!auth?.token)
|
|
24
25
|
return null;
|
|
25
26
|
return {
|
|
26
27
|
key: auth.token,
|
|
27
|
-
|
|
28
|
+
// Project-specific org (registry) wins over the machine default from login.
|
|
29
|
+
org: resolveOrgForPath(rootDir, auth.org),
|
|
28
30
|
tier: auth.plan ?? 'free',
|
|
29
31
|
valid_until: '',
|
|
30
32
|
refresh_token: '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"license-manager.js","sourceRoot":"","sources":["../../src/licensing/license-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"license-manager.js","sourceRoot":"","sources":["../../src/licensing/license-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Workspace-name resolution.
|
|
3
3
|
*
|
|
4
4
|
* The license file (`.nepopsx/license.json`) carries a `workspace` field that is
|
|
5
|
-
* written ONCE at `nepopsx login`
|
|
5
|
+
* written ONCE at `nepopsx login` time. At first run the
|
|
6
6
|
* workspace config doesn't exist yet, so it is stored as the literal `"unknown"`.
|
|
7
7
|
* `nepopsx up` later creates `.nepopsx/workspace.yaml` with the real name, but the
|
|
8
8
|
* license file is not rewritten — so any command that sends `license.workspace`
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Workspace-name resolution.
|
|
3
3
|
*
|
|
4
4
|
* The license file (`.nepopsx/license.json`) carries a `workspace` field that is
|
|
5
|
-
* written ONCE at `nepopsx login`
|
|
5
|
+
* written ONCE at `nepopsx login` time. At first run the
|
|
6
6
|
* workspace config doesn't exist yet, so it is stored as the literal `"unknown"`.
|
|
7
7
|
* `nepopsx up` later creates `.nepopsx/workspace.yaml` with the real name, but the
|
|
8
8
|
* license file is not rewritten — so any command that sends `license.workspace`
|
package/dist/utils/fetch.d.ts
CHANGED
|
@@ -6,4 +6,12 @@
|
|
|
6
6
|
* @param ms Timeout in milliseconds
|
|
7
7
|
*/
|
|
8
8
|
export declare function fetchWithTimeout(url: string, init: RequestInit, ms: number): Promise<Response>;
|
|
9
|
+
/**
|
|
10
|
+
* Turn a failed Response into a human-readable one-liner. The backend sends
|
|
11
|
+
* `{ "message": "...", "statusError": "...", "statusCode": N }`; we surface just the
|
|
12
|
+
* message (or a sensible default per status) instead of dumping the raw JSON blob at
|
|
13
|
+
* the user. The raw body is kept only when NEPOPSX_DEBUG=1. `context` prefixes the line
|
|
14
|
+
* (e.g. "Couldn't download the agent").
|
|
15
|
+
*/
|
|
16
|
+
export declare function friendlyHttpError(response: Response, context: string): Promise<string>;
|
|
9
17
|
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,QAAQ,CAAC,CAQnB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB5F"}
|
package/dist/utils/fetch.js
CHANGED
|
@@ -15,4 +15,39 @@ export async function fetchWithTimeout(url, init, ms) {
|
|
|
15
15
|
clearTimeout(timer);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Turn a failed Response into a human-readable one-liner. The backend sends
|
|
20
|
+
* `{ "message": "...", "statusError": "...", "statusCode": N }`; we surface just the
|
|
21
|
+
* message (or a sensible default per status) instead of dumping the raw JSON blob at
|
|
22
|
+
* the user. The raw body is kept only when NEPOPSX_DEBUG=1. `context` prefixes the line
|
|
23
|
+
* (e.g. "Couldn't download the agent").
|
|
24
|
+
*/
|
|
25
|
+
export async function friendlyHttpError(response, context) {
|
|
26
|
+
const raw = await response.text().catch(() => "");
|
|
27
|
+
let message = "";
|
|
28
|
+
try {
|
|
29
|
+
const parsed = JSON.parse(raw);
|
|
30
|
+
if (typeof parsed.message === "string")
|
|
31
|
+
message = parsed.message;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// not JSON — leave message empty, fall through to status defaults
|
|
35
|
+
}
|
|
36
|
+
if (!message) {
|
|
37
|
+
if (response.status === 401 || response.status === 403) {
|
|
38
|
+
message = "not authorized — run `nepopsx login`";
|
|
39
|
+
}
|
|
40
|
+
else if (response.status === 404) {
|
|
41
|
+
message = "not found on the server";
|
|
42
|
+
}
|
|
43
|
+
else if (response.status >= 500) {
|
|
44
|
+
message = "the server had an error; try again shortly";
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
message = response.statusText || `HTTP ${response.status}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const detail = process.env.NEPOPSX_DEBUG === "1" && raw ? `\n (raw: ${raw})` : "";
|
|
51
|
+
return `${context}: ${message}${detail}`;
|
|
52
|
+
}
|
|
18
53
|
//# sourceMappingURL=fetch.js.map
|
package/dist/utils/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,IAAiB,EACjB,EAAU;IAEV,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/utils/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,IAAiB,EACjB,EAAU;IAEV,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAkB,EAAE,OAAe;IACzE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAClD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0B,CAAC;QACxD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;IACpE,CAAC;IACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO,GAAG,sCAAsC,CAAC;QACnD,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACnC,OAAO,GAAG,yBAAyB,CAAC;QACtC,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YAClC,OAAO,GAAG,4CAA4C,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC7D,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnF,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,MAAM,EAAE,CAAC;AAC3C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nepopsx/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"description": "NEPOPSX CLI — generate AI agent workspaces from configuration",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"inquirer": "^12.3.2",
|
|
29
29
|
"ora": "^8.2.0",
|
|
30
30
|
"yaml": "^2.7.0",
|
|
31
|
-
"@nepopsx/core": "^0.0.
|
|
31
|
+
"@nepopsx/core": "^0.0.13"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/archiver": "^7.0.0",
|