@ai-dossier/cli 0.4.1 → 0.5.0
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/README.md +147 -25
- package/bin/dossier-verify +6 -440
- package/dist/cli.js +82 -21
- package/dist/cli.js.map +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/checksum.js.map +1 -1
- package/dist/commands/commands.d.ts.map +1 -1
- package/dist/commands/commands.js +4 -2
- package/dist/commands/commands.js.map +1 -1
- package/dist/commands/config-cmd.d.ts.map +1 -1
- package/dist/commands/config-cmd.js +229 -69
- package/dist/commands/config-cmd.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +17 -8
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +24 -8
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/format.d.ts.map +1 -1
- package/dist/commands/format.js.map +1 -1
- package/dist/commands/get.d.ts.map +1 -1
- package/dist/commands/get.js +18 -6
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/history.d.ts +6 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +80 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +19 -6
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/install-skill.d.ts.map +1 -1
- package/dist/commands/install-skill.js +16 -9
- package/dist/commands/install-skill.js.map +1 -1
- package/dist/commands/lint.d.ts.map +1 -1
- package/dist/commands/lint.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +55 -41
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +25 -5
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +22 -5
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/prompt-hook.d.ts.map +1 -1
- package/dist/commands/prompt-hook.js +4 -13
- package/dist/commands/prompt-hook.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +22 -55
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +31 -14
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +17 -43
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/reset-hooks.js +1 -1
- package/dist/commands/reset-hooks.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +192 -48
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +33 -29
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/sign.js.map +1 -1
- package/dist/commands/skill-export.d.ts +3 -0
- package/dist/commands/skill-export.d.ts.map +1 -0
- package/dist/commands/skill-export.js +179 -0
- package/dist/commands/skill-export.js.map +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +1 -8
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +108 -25
- package/dist/commands/whoami.js.map +1 -1
- package/dist/config.d.ts +29 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +133 -3
- package/dist/config.js.map +1 -1
- package/dist/credentials.d.ts +14 -9
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +122 -54
- package/dist/credentials.js.map +1 -1
- package/dist/help.d.ts +7 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +86 -0
- package/dist/help.js.map +1 -0
- package/dist/helpers.d.ts +10 -10
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +25 -28
- package/dist/helpers.js.map +1 -1
- package/dist/multi-registry.d.ts +71 -0
- package/dist/multi-registry.d.ts.map +1 -0
- package/dist/multi-registry.js +136 -0
- package/dist/multi-registry.js.map +1 -0
- package/dist/registry-client.d.ts +62 -15
- package/dist/registry-client.d.ts.map +1 -1
- package/dist/registry-client.js +11 -14
- package/dist/registry-client.js.map +1 -1
- package/dist/run-log.d.ts +37 -0
- package/dist/run-log.d.ts.map +1 -0
- package/dist/run-log.js +78 -0
- package/dist/run-log.js.map +1 -0
- package/dist/verify-dossier.d.ts +28 -0
- package/dist/verify-dossier.d.ts.map +1 -0
- package/dist/verify-dossier.js +329 -0
- package/dist/verify-dossier.js.map +1 -0
- package/dist/write-auth.d.ts +24 -0
- package/dist/write-auth.d.ts.map +1 -0
- package/dist/write-auth.js +85 -0
- package/dist/write-auth.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../src/registry-client.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"registry-client.js","sourceRoot":"","sources":["../src/registry-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent run log for dossier executions.
|
|
3
|
+
* Append-only JSONL at ~/.dossier/runs.jsonl.
|
|
4
|
+
*/
|
|
5
|
+
export interface RunLogEntry {
|
|
6
|
+
timestamp: string;
|
|
7
|
+
dossier: string;
|
|
8
|
+
resolved_version: string;
|
|
9
|
+
source: 'cache' | 'registry' | 'local' | 'url';
|
|
10
|
+
registry?: string;
|
|
11
|
+
verification: 'passed' | 'failed' | 'skipped' | 'nested-skip';
|
|
12
|
+
llm: string;
|
|
13
|
+
user: string;
|
|
14
|
+
cwd: string;
|
|
15
|
+
nested: boolean;
|
|
16
|
+
update_available?: string;
|
|
17
|
+
}
|
|
18
|
+
declare const LOG_FILE: string;
|
|
19
|
+
/**
|
|
20
|
+
* Append one JSONL line to ~/.dossier/runs.jsonl.
|
|
21
|
+
* Respects auditLog config flag. Never crashes the run.
|
|
22
|
+
*/
|
|
23
|
+
export declare function appendRunLog(entry: RunLogEntry): void;
|
|
24
|
+
/**
|
|
25
|
+
* Read the run log, filter, return most-recent-first.
|
|
26
|
+
* Skips malformed lines.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readRunLog(opts?: {
|
|
29
|
+
limit?: number;
|
|
30
|
+
dossier?: string;
|
|
31
|
+
}): RunLogEntry[];
|
|
32
|
+
/**
|
|
33
|
+
* Clear the run log file.
|
|
34
|
+
*/
|
|
35
|
+
export declare function clearRunLog(): void;
|
|
36
|
+
export { LOG_FILE };
|
|
37
|
+
//# sourceMappingURL=run-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-log.d.ts","sourceRoot":"","sources":["../src/run-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,QAAA,MAAM,QAAQ,QAAsC,CAAC;AAErD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAQrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CAuBrF;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAQlC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/run-log.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Persistent run log for dossier executions.
|
|
4
|
+
* Append-only JSONL at ~/.dossier/runs.jsonl.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.LOG_FILE = void 0;
|
|
11
|
+
exports.appendRunLog = appendRunLog;
|
|
12
|
+
exports.readRunLog = readRunLog;
|
|
13
|
+
exports.clearRunLog = clearRunLog;
|
|
14
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
15
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
16
|
+
const config_1 = require("./config");
|
|
17
|
+
const LOG_FILE = node_path_1.default.join(config_1.CONFIG_DIR, 'runs.jsonl');
|
|
18
|
+
exports.LOG_FILE = LOG_FILE;
|
|
19
|
+
/**
|
|
20
|
+
* Append one JSONL line to ~/.dossier/runs.jsonl.
|
|
21
|
+
* Respects auditLog config flag. Never crashes the run.
|
|
22
|
+
*/
|
|
23
|
+
function appendRunLog(entry) {
|
|
24
|
+
try {
|
|
25
|
+
if ((0, config_1.getConfig)('auditLog') === false)
|
|
26
|
+
return;
|
|
27
|
+
(0, config_1.ensureConfigDir)();
|
|
28
|
+
node_fs_1.default.appendFileSync(LOG_FILE, `${JSON.stringify(entry)}\n`, { mode: 0o600 });
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Never crash the run
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read the run log, filter, return most-recent-first.
|
|
36
|
+
* Skips malformed lines.
|
|
37
|
+
*/
|
|
38
|
+
function readRunLog(opts) {
|
|
39
|
+
try {
|
|
40
|
+
if (!node_fs_1.default.existsSync(LOG_FILE))
|
|
41
|
+
return [];
|
|
42
|
+
const lines = node_fs_1.default.readFileSync(LOG_FILE, 'utf8').split('\n').filter(Boolean);
|
|
43
|
+
let entries = [];
|
|
44
|
+
for (const line of lines) {
|
|
45
|
+
try {
|
|
46
|
+
entries.push(JSON.parse(line));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Skip malformed lines
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (opts?.dossier) {
|
|
53
|
+
entries = entries.filter((e) => e.dossier === opts.dossier);
|
|
54
|
+
}
|
|
55
|
+
entries.reverse();
|
|
56
|
+
if (opts?.limit) {
|
|
57
|
+
entries = entries.slice(0, opts.limit);
|
|
58
|
+
}
|
|
59
|
+
return entries;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Clear the run log file.
|
|
67
|
+
*/
|
|
68
|
+
function clearRunLog() {
|
|
69
|
+
try {
|
|
70
|
+
if (node_fs_1.default.existsSync(LOG_FILE)) {
|
|
71
|
+
node_fs_1.default.writeFileSync(LOG_FILE, '', { mode: 0o600 });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Silently fail
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=run-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-log.js","sourceRoot":"","sources":["../src/run-log.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AA0BH,oCAQC;AAMD,gCAuBC;AAKD,kCAQC;AA1ED,sDAAyB;AACzB,0DAA6B;AAC7B,qCAAkE;AAgBlE,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,mBAAU,EAAE,YAAY,CAAC,CAAC;AA0D5C,4BAAQ;AAxDjB;;;GAGG;AACH,SAAgB,YAAY,CAAC,KAAkB;IAC7C,IAAI,CAAC;QACH,IAAI,IAAA,kBAAS,EAAC,UAAU,CAAC,KAAK,KAAK;YAAE,OAAO;QAC5C,IAAA,wBAAe,GAAE,CAAC;QAClB,iBAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,UAAU,CAAC,IAA2C;IACpE,IAAI,CAAC;QACH,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,OAAO,GAAkB,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;YAClB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,iBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,iBAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dossier verification module.
|
|
3
|
+
*
|
|
4
|
+
* Provides integrity (checksum), authenticity (signature), and risk
|
|
5
|
+
* assessment for local files and remote URLs.
|
|
6
|
+
*/
|
|
7
|
+
import type { DossierFrontmatter } from '@ai-dossier/core';
|
|
8
|
+
export interface VerifyOptions {
|
|
9
|
+
verbose: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function downloadFile(url: string, redirectCount?: number): Promise<string>;
|
|
12
|
+
export interface SignatureCheckResult {
|
|
13
|
+
present: boolean;
|
|
14
|
+
verified: boolean;
|
|
15
|
+
trusted: boolean;
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function checkSignature(body: string, frontmatter: DossierFrontmatter): Promise<SignatureCheckResult>;
|
|
19
|
+
export declare function verifyDossier(input: string, options: VerifyOptions): Promise<boolean>;
|
|
20
|
+
export interface ParsedArgs {
|
|
21
|
+
verbose: boolean;
|
|
22
|
+
help: boolean;
|
|
23
|
+
input: string | null;
|
|
24
|
+
}
|
|
25
|
+
export declare function parseArgs(): ParsedArgs;
|
|
26
|
+
export declare function showHelp(): void;
|
|
27
|
+
export declare function main(): Promise<void>;
|
|
28
|
+
//# sourceMappingURL=verify-dossier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-dossier.d.ts","sourceRoot":"","sources":["../src/verify-dossier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAEV,kBAAkB,EAInB,MAAM,kBAAkB,CAAC;AAgD1B,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;CAClB;AAQD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAkClF;AAMD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAmD/B;AAMD,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAsI3F;AAMD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,wBAAgB,SAAS,IAAI,UAAU,CAmBtC;AAED,wBAAgB,QAAQ,IAAI,IAAI,CAsC/B;AAMD,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAe1C"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dossier verification module.
|
|
4
|
+
*
|
|
5
|
+
* Provides integrity (checksum), authenticity (signature), and risk
|
|
6
|
+
* assessment for local files and remote URLs.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.downloadFile = downloadFile;
|
|
13
|
+
exports.checkSignature = checkSignature;
|
|
14
|
+
exports.verifyDossier = verifyDossier;
|
|
15
|
+
exports.parseArgs = parseArgs;
|
|
16
|
+
exports.showHelp = showHelp;
|
|
17
|
+
exports.main = main;
|
|
18
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
19
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
20
|
+
const node_https_1 = __importDefault(require("node:https"));
|
|
21
|
+
const core_1 = require("@ai-dossier/core");
|
|
22
|
+
const github_url_1 = require("./github-url");
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Terminal colors
|
|
25
|
+
// ============================================================================
|
|
26
|
+
const colors = {
|
|
27
|
+
reset: '\x1b[0m',
|
|
28
|
+
bright: '\x1b[1m',
|
|
29
|
+
red: '\x1b[31m',
|
|
30
|
+
green: '\x1b[32m',
|
|
31
|
+
yellow: '\x1b[33m',
|
|
32
|
+
cyan: '\x1b[36m',
|
|
33
|
+
};
|
|
34
|
+
function log(message, color = 'reset') {
|
|
35
|
+
console.log(`${colors[color]}${message}${colors.reset}`);
|
|
36
|
+
}
|
|
37
|
+
function error(message) {
|
|
38
|
+
log(`\u274C ${message}`, 'red');
|
|
39
|
+
}
|
|
40
|
+
function success(message) {
|
|
41
|
+
log(`\u2705 ${message}`, 'green');
|
|
42
|
+
}
|
|
43
|
+
function warning(message) {
|
|
44
|
+
log(`\u26A0\uFE0F ${message}`, 'yellow');
|
|
45
|
+
}
|
|
46
|
+
function info(message) {
|
|
47
|
+
log(`\u2139\uFE0F ${message}`, 'cyan');
|
|
48
|
+
}
|
|
49
|
+
// ============================================================================
|
|
50
|
+
// Download with redirect depth limit
|
|
51
|
+
// ============================================================================
|
|
52
|
+
const MAX_REDIRECTS = 10;
|
|
53
|
+
async function downloadFile(url, redirectCount = 0) {
|
|
54
|
+
if (redirectCount >= MAX_REDIRECTS) {
|
|
55
|
+
throw new Error(`Too many redirects (max ${MAX_REDIRECTS})`);
|
|
56
|
+
}
|
|
57
|
+
const resolvedUrl = redirectCount === 0 ? (0, github_url_1.convertGitHubBlobToRaw)(url) : url;
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
const protocol = resolvedUrl.startsWith('https://') ? node_https_1.default : node_http_1.default;
|
|
60
|
+
protocol
|
|
61
|
+
.get(resolvedUrl, (res) => {
|
|
62
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
63
|
+
const location = res.headers.location;
|
|
64
|
+
if (!location) {
|
|
65
|
+
return reject(new Error(`Redirect without Location header from ${resolvedUrl}`));
|
|
66
|
+
}
|
|
67
|
+
return downloadFile(location, redirectCount + 1)
|
|
68
|
+
.then(resolve)
|
|
69
|
+
.catch(reject);
|
|
70
|
+
}
|
|
71
|
+
if (res.statusCode !== 200) {
|
|
72
|
+
return reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
|
|
73
|
+
}
|
|
74
|
+
let data = '';
|
|
75
|
+
res.on('data', (chunk) => {
|
|
76
|
+
data += chunk;
|
|
77
|
+
});
|
|
78
|
+
res.on('end', () => resolve(data));
|
|
79
|
+
})
|
|
80
|
+
.on('error', reject);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
async function checkSignature(body, frontmatter) {
|
|
84
|
+
if (!frontmatter.signature) {
|
|
85
|
+
return {
|
|
86
|
+
present: false,
|
|
87
|
+
verified: false,
|
|
88
|
+
trusted: false,
|
|
89
|
+
message: 'No signature present',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const signature = frontmatter.signature;
|
|
93
|
+
const trustedKeys = (0, core_1.loadTrustedKeys)();
|
|
94
|
+
const isTrusted = (signature.key_id != null && trustedKeys.has(signature.key_id)) ||
|
|
95
|
+
(signature.public_key != null && trustedKeys.has(signature.public_key));
|
|
96
|
+
const result = await (0, core_1.verifySignature)(body, signature);
|
|
97
|
+
if (result.valid) {
|
|
98
|
+
let trustedName = '';
|
|
99
|
+
if (isTrusted) {
|
|
100
|
+
trustedName =
|
|
101
|
+
(signature.key_id ? trustedKeys.get(signature.key_id) : undefined) ||
|
|
102
|
+
(signature.public_key ? trustedKeys.get(signature.public_key) : undefined) ||
|
|
103
|
+
'';
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
present: true,
|
|
107
|
+
verified: true,
|
|
108
|
+
trusted: isTrusted,
|
|
109
|
+
message: isTrusted
|
|
110
|
+
? `Verified signature from trusted source: ${trustedName}`
|
|
111
|
+
: 'Valid signature but key is not in trusted list',
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (result.error) {
|
|
115
|
+
return {
|
|
116
|
+
present: true,
|
|
117
|
+
verified: false,
|
|
118
|
+
trusted: false,
|
|
119
|
+
message: `Verification error: ${result.error}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
present: true,
|
|
124
|
+
verified: false,
|
|
125
|
+
trusted: isTrusted,
|
|
126
|
+
message: 'Signature verification FAILED',
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
// ============================================================================
|
|
130
|
+
// Main verification
|
|
131
|
+
// ============================================================================
|
|
132
|
+
async function verifyDossier(input, options) {
|
|
133
|
+
try {
|
|
134
|
+
log(`\n${colors.bright}\uD83D\uDD10 Dossier Verification Tool${colors.reset}\n`);
|
|
135
|
+
const isUrl = input.startsWith('http://') || input.startsWith('https://');
|
|
136
|
+
let content;
|
|
137
|
+
if (isUrl) {
|
|
138
|
+
info(`Downloading: ${input}`);
|
|
139
|
+
content = await downloadFile(input);
|
|
140
|
+
success('Downloaded successfully');
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
info(`Reading: ${input}`);
|
|
144
|
+
content = node_fs_1.default.readFileSync(input, 'utf8');
|
|
145
|
+
success('File read successfully');
|
|
146
|
+
}
|
|
147
|
+
// Parse dossier (using core directly)
|
|
148
|
+
info('Parsing dossier...');
|
|
149
|
+
const parsed = (0, core_1.parseDossierContent)(content);
|
|
150
|
+
const { frontmatter, body } = parsed;
|
|
151
|
+
success(`Parsed: ${frontmatter.title} v${frontmatter.version}`);
|
|
152
|
+
if (options.verbose) {
|
|
153
|
+
console.log(`\n${colors.bright}Dossier Metadata:${colors.reset}`);
|
|
154
|
+
console.log(` Title: ${frontmatter.title}`);
|
|
155
|
+
console.log(` Version: ${frontmatter.version}`);
|
|
156
|
+
console.log(` Risk Level: ${frontmatter.risk_level ?? 'not specified'}`);
|
|
157
|
+
}
|
|
158
|
+
// Verify checksum (using core directly)
|
|
159
|
+
console.log(`\n${colors.bright}\uD83D\uDCCA Integrity Check:${colors.reset}`);
|
|
160
|
+
const integrityResult = (0, core_1.verifyIntegrity)(body, frontmatter.checksum?.hash);
|
|
161
|
+
const checksumPassed = integrityResult.status === 'valid';
|
|
162
|
+
if (checksumPassed) {
|
|
163
|
+
success('Checksum VALID - content has not been tampered with');
|
|
164
|
+
if (options.verbose) {
|
|
165
|
+
console.log(` Hash: ${integrityResult.actualHash}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
error('Checksum INVALID - content has been modified!');
|
|
170
|
+
if (options.verbose) {
|
|
171
|
+
console.log(` Declared: ${integrityResult.expectedHash}`);
|
|
172
|
+
console.log(` Actual: ${integrityResult.actualHash}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Verify signature
|
|
176
|
+
console.log(`\n${colors.bright}\uD83D\uDD0F Authenticity Check:${colors.reset}`);
|
|
177
|
+
const signatureResult = await checkSignature(body, frontmatter);
|
|
178
|
+
if (signatureResult.present) {
|
|
179
|
+
if (signatureResult.verified && signatureResult.trusted) {
|
|
180
|
+
success('Signature VERIFIED - from trusted author');
|
|
181
|
+
}
|
|
182
|
+
else if (signatureResult.verified && !signatureResult.trusted) {
|
|
183
|
+
warning(signatureResult.message);
|
|
184
|
+
if (frontmatter.signature?.signed_by) {
|
|
185
|
+
console.log(` Signed by: ${frontmatter.signature.signed_by}`);
|
|
186
|
+
}
|
|
187
|
+
console.log(`\n ${colors.cyan}To trust this signer, run:${colors.reset}`);
|
|
188
|
+
const sig = frontmatter.signature;
|
|
189
|
+
const publicKey = sig?.public_key || sig?.key_id;
|
|
190
|
+
const identifier = sig?.signed_by
|
|
191
|
+
? sig.signed_by.split('<')[0].trim().toLowerCase().replace(/\s+/g, '-')
|
|
192
|
+
: 'unknown-signer';
|
|
193
|
+
console.log(` ${colors.bright}dossier keys add "${publicKey}" "${identifier}"${colors.reset}\n`);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
warning(signatureResult.message);
|
|
197
|
+
if (frontmatter.signature?.signed_by) {
|
|
198
|
+
console.log(` Signed by: ${frontmatter.signature.signed_by}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
warning('No signature present (dossier is unsigned)');
|
|
204
|
+
}
|
|
205
|
+
// Assess risk (using core function)
|
|
206
|
+
console.log(`\n${colors.bright}\uD83D\uDD34 Risk Assessment:${colors.reset}`);
|
|
207
|
+
const checksumStatus = { passed: checksumPassed };
|
|
208
|
+
const signatureStatus = {
|
|
209
|
+
present: signatureResult.present,
|
|
210
|
+
verified: signatureResult.verified,
|
|
211
|
+
trusted: signatureResult.trusted,
|
|
212
|
+
};
|
|
213
|
+
const risk = (0, core_1.assessVerificationRisk)(frontmatter.risk_level, checksumStatus, signatureStatus);
|
|
214
|
+
const riskColors = {
|
|
215
|
+
low: 'green',
|
|
216
|
+
medium: 'yellow',
|
|
217
|
+
high: 'yellow',
|
|
218
|
+
critical: 'red',
|
|
219
|
+
};
|
|
220
|
+
log(` Risk Level: ${risk.level.toUpperCase()}`, riskColors[risk.level] || 'reset');
|
|
221
|
+
if (risk.issues.length > 0) {
|
|
222
|
+
console.log(`\n Issues Found:`);
|
|
223
|
+
risk.issues.forEach((issue) => {
|
|
224
|
+
console.log(` - ${issue}`);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Recommendation
|
|
228
|
+
console.log(`\n${colors.bright}Recommendation:${colors.reset}`, risk.recommendation);
|
|
229
|
+
if (risk.recommendation === 'BLOCK') {
|
|
230
|
+
error('\nDO NOT EXECUTE this dossier');
|
|
231
|
+
console.log(' Security verification failed.');
|
|
232
|
+
console.log(' This dossier may have been tampered with or is from an untrusted source.\n');
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
else if (risk.level === 'medium' || risk.level === 'high') {
|
|
236
|
+
warning('\nProceed with CAUTION');
|
|
237
|
+
console.log(' Review the dossier code before executing.');
|
|
238
|
+
console.log(' Consider the risk level and your trust in the source.\n');
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
success('\nSafe to execute');
|
|
243
|
+
console.log(' Dossier passed security verification.\n');
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
error(`\nVerification failed: ${err.message}`);
|
|
249
|
+
if (options.verbose) {
|
|
250
|
+
console.error(err);
|
|
251
|
+
}
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
function parseArgs() {
|
|
256
|
+
const args = process.argv.slice(2);
|
|
257
|
+
const options = {
|
|
258
|
+
verbose: false,
|
|
259
|
+
help: false,
|
|
260
|
+
input: null,
|
|
261
|
+
};
|
|
262
|
+
for (const arg of args) {
|
|
263
|
+
if (arg === '--verbose' || arg === '-v') {
|
|
264
|
+
options.verbose = true;
|
|
265
|
+
}
|
|
266
|
+
else if (arg === '--help' || arg === '-h') {
|
|
267
|
+
options.help = true;
|
|
268
|
+
}
|
|
269
|
+
else if (!options.input) {
|
|
270
|
+
options.input = arg;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return options;
|
|
274
|
+
}
|
|
275
|
+
function showHelp() {
|
|
276
|
+
console.log(`
|
|
277
|
+
${colors.bright}Dossier Verification CLI${colors.reset}
|
|
278
|
+
|
|
279
|
+
${colors.bright}Usage:${colors.reset}
|
|
280
|
+
dossier-verify <file-or-url> Verify dossier security
|
|
281
|
+
dossier-verify --verbose <file-or-url> Show detailed verification
|
|
282
|
+
|
|
283
|
+
${colors.bright}Exit Codes:${colors.reset}
|
|
284
|
+
0 - Verification passed (safe to execute)
|
|
285
|
+
1 - Verification failed (do not execute)
|
|
286
|
+
2 - Error occurred (cannot verify)
|
|
287
|
+
|
|
288
|
+
${colors.bright}Examples:${colors.reset}
|
|
289
|
+
# Verify local file
|
|
290
|
+
dossier-verify path/to/dossier.ds.md
|
|
291
|
+
|
|
292
|
+
# Verify remote dossier
|
|
293
|
+
dossier-verify https://example.com/dossier.ds.md
|
|
294
|
+
|
|
295
|
+
# Use in shell script
|
|
296
|
+
if dossier-verify "$URL"; then
|
|
297
|
+
claude-code "run $URL"
|
|
298
|
+
else
|
|
299
|
+
echo "Security verification failed"
|
|
300
|
+
fi
|
|
301
|
+
|
|
302
|
+
${colors.bright}Security Checks:${colors.reset}
|
|
303
|
+
\u2713 SHA256 checksum verification (required)
|
|
304
|
+
\u2713 Signature verification (if present)
|
|
305
|
+
\u2713 Trusted keys check
|
|
306
|
+
\u2713 Risk level assessment
|
|
307
|
+
|
|
308
|
+
${colors.bright}More Information:${colors.reset}
|
|
309
|
+
Documentation: https://github.com/imboard/ai-dossier
|
|
310
|
+
Security: SECURITY_STATUS.md
|
|
311
|
+
Protocol: PROTOCOL.md
|
|
312
|
+
`);
|
|
313
|
+
}
|
|
314
|
+
// ============================================================================
|
|
315
|
+
// CLI entry point
|
|
316
|
+
// ============================================================================
|
|
317
|
+
async function main() {
|
|
318
|
+
const options = parseArgs();
|
|
319
|
+
if (options.help || !options.input) {
|
|
320
|
+
showHelp();
|
|
321
|
+
process.exit(options.help ? 0 : 2);
|
|
322
|
+
}
|
|
323
|
+
const passed = await verifyDossier(options.input, options);
|
|
324
|
+
if (!passed) {
|
|
325
|
+
process.exit(1);
|
|
326
|
+
}
|
|
327
|
+
process.exit(0);
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=verify-dossier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-dossier.js","sourceRoot":"","sources":["../src/verify-dossier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ResolvedRegistry } from './config';
|
|
2
|
+
import type { Credentials } from './credentials';
|
|
3
|
+
export interface WriteAuthResult {
|
|
4
|
+
targetRegistry: ResolvedRegistry;
|
|
5
|
+
credentials: Credentials;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the write registry and validate credentials.
|
|
9
|
+
* Exits with appropriate error messages on failure.
|
|
10
|
+
*/
|
|
11
|
+
export declare function requireWriteAuth(options: {
|
|
12
|
+
registryFlag?: string;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
jsonResultKey?: string;
|
|
15
|
+
}): WriteAuthResult;
|
|
16
|
+
/**
|
|
17
|
+
* Handle registry write operation errors with consistent messages.
|
|
18
|
+
*/
|
|
19
|
+
export declare function handleRegistryWriteError(err: unknown, options: {
|
|
20
|
+
json?: boolean;
|
|
21
|
+
jsonResultKey?: string;
|
|
22
|
+
actionLabel: string;
|
|
23
|
+
}): never;
|
|
24
|
+
//# sourceMappingURL=write-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-auth.d.ts","sourceRoot":"","sources":["../src/write-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,gBAAgB,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,GAAG,eAAe,CAmDlB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE;IACP,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB,GACA,KAAK,CAkCP"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireWriteAuth = requireWriteAuth;
|
|
4
|
+
exports.handleRegistryWriteError = handleRegistryWriteError;
|
|
5
|
+
const config_1 = require("./config");
|
|
6
|
+
const credentials_1 = require("./credentials");
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the write registry and validate credentials.
|
|
9
|
+
* Exits with appropriate error messages on failure.
|
|
10
|
+
*/
|
|
11
|
+
function requireWriteAuth(options) {
|
|
12
|
+
let targetRegistry;
|
|
13
|
+
try {
|
|
14
|
+
targetRegistry = (0, config_1.resolveWriteRegistry)(options.registryFlag);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
console.error(`\n❌ ${err.message}\n`);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const credentials = (0, credentials_1.loadCredentials)(targetRegistry.name);
|
|
21
|
+
if (!credentials) {
|
|
22
|
+
if (options.json) {
|
|
23
|
+
console.log(JSON.stringify({
|
|
24
|
+
[options.jsonResultKey || 'success']: false,
|
|
25
|
+
error: 'Not logged in',
|
|
26
|
+
code: 'not_logged_in',
|
|
27
|
+
}, null, 2));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error(`\n❌ Not logged in to registry '${targetRegistry.name}'. Run \`dossier login --registry ${targetRegistry.name}\` first.\n`);
|
|
31
|
+
}
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
if ((0, credentials_1.isExpired)(credentials)) {
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(JSON.stringify({
|
|
37
|
+
[options.jsonResultKey || 'success']: false,
|
|
38
|
+
error: 'Credentials expired',
|
|
39
|
+
code: 'expired',
|
|
40
|
+
}, null, 2));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.error('\n❌ Credentials expired. Run `dossier login` to re-authenticate.\n');
|
|
44
|
+
}
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
return { targetRegistry, credentials };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handle registry write operation errors with consistent messages.
|
|
51
|
+
*/
|
|
52
|
+
function handleRegistryWriteError(err, options) {
|
|
53
|
+
const e = err;
|
|
54
|
+
if (options.json) {
|
|
55
|
+
console.log(JSON.stringify({
|
|
56
|
+
[options.jsonResultKey || 'success']: false,
|
|
57
|
+
error: e.message,
|
|
58
|
+
code: e.code || `${options.actionLabel.toLowerCase()}_failed`,
|
|
59
|
+
}, null, 2));
|
|
60
|
+
}
|
|
61
|
+
else if (e.statusCode === 401) {
|
|
62
|
+
console.error('\n❌ Session expired. Run `dossier login` to re-authenticate.\n');
|
|
63
|
+
}
|
|
64
|
+
else if (e.statusCode === 403) {
|
|
65
|
+
console.error(`\n❌ Permission denied: ${e.message}\n`);
|
|
66
|
+
}
|
|
67
|
+
else if (e.statusCode === 409) {
|
|
68
|
+
console.error(`\n❌ Version conflict: ${e.message}\n`);
|
|
69
|
+
}
|
|
70
|
+
else if (e.statusCode === 404) {
|
|
71
|
+
console.error(`\n❌ Not found: ${e.message}\n`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.error(`\n❌ ${options.actionLabel} failed: ${e.message}`);
|
|
75
|
+
if (e.statusCode) {
|
|
76
|
+
console.error(` Status: ${e.statusCode}`);
|
|
77
|
+
}
|
|
78
|
+
if (e.code) {
|
|
79
|
+
console.error(` Code: ${e.code}`);
|
|
80
|
+
}
|
|
81
|
+
console.error('');
|
|
82
|
+
}
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=write-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-auth.js","sourceRoot":"","sources":["../src/write-auth.ts"],"names":[],"mappings":";;AAcA,4CAuDC;AAKD,4DAyCC;AAlHD,qCAAgD;AAEhD,+CAA2D;AAO3D;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,OAIhC;IACC,IAAI,cAAgC,CAAC;IACrC,IAAI,CAAC;QACH,cAAc,GAAG,IAAA,6BAAoB,EAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,OAAQ,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,6BAAe,EAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE,KAAK;gBAC3C,KAAK,EAAE,eAAe;gBACtB,IAAI,EAAE,eAAe;aACtB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,kCAAkC,cAAc,CAAC,IAAI,qCAAqC,cAAc,CAAC,IAAI,aAAa,CAC3H,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAA,uBAAS,EAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;gBACE,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE,KAAK;gBAC3C,KAAK,EAAE,qBAAqB;gBAC5B,IAAI,EAAE,SAAS;aAChB,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,GAAY,EACZ,OAIC;IAED,MAAM,CAAC,GAAG,GAA8D,CAAC;IAEzE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;YACE,CAAC,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE,KAAK;YAC3C,KAAK,EAAE,CAAC,CAAC,OAAO;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,SAAS;SAC9D,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACJ,CAAC;SAAM,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAClF,CAAC;SAAM,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IACxD,CAAC;SAAM,IAAI,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,WAAW,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|