@ai-pack-cli/shared 1.0.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/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +44 -0
- package/dist/constants.js.map +1 -0
- package/dist/detect.d.ts +14 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +121 -0
- package/dist/detect.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +65 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +157 -0
- package/dist/logger.js.map +1 -0
- package/dist/npmrc.d.ts +16 -0
- package/dist/npmrc.d.ts.map +1 -0
- package/dist/npmrc.js +68 -0
- package/dist/npmrc.js.map +1 -0
- package/dist/project-config.d.ts +75 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +212 -0
- package/dist/project-config.js.map +1 -0
- package/dist/registry.d.ts +102 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +186 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +28 -0
- package/dist/types.js.map +1 -0
- package/package.json +22 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AiPackRole, DefaultConfig, IdeType } from "./types";
|
|
2
|
+
declare const FALLBACK_GIT_URL = "http://10.96.105.158/gitlab/ZhiHuiNongShang/XinFaDi/base-framework/project-initializer/ai-pack.git";
|
|
3
|
+
/** ai-pack 克隆分支(写死,不可通过环境变量覆盖) */
|
|
4
|
+
export declare const AI_PACK_BRANCH = "zhibiaojiance";
|
|
5
|
+
/** 读取默认配置,环境变量优先级最高 */
|
|
6
|
+
export declare function getDefaultConfig(): DefaultConfig;
|
|
7
|
+
export declare function parseRole(value: string | undefined): AiPackRole | undefined;
|
|
8
|
+
export declare function parseIdeType(value: string | undefined): IdeType | undefined;
|
|
9
|
+
export { FALLBACK_GIT_URL };
|
|
10
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElE,QAAA,MAAM,gBAAgB,uGACgF,CAAC;AAEvG,kCAAkC;AAClC,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAe9C,uBAAuB;AACvB,wBAAgB,gBAAgB,IAAI,aAAa,CAOhD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAI3E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAI3E;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FALLBACK_GIT_URL = exports.AI_PACK_BRANCH = void 0;
|
|
4
|
+
exports.getDefaultConfig = getDefaultConfig;
|
|
5
|
+
exports.parseRole = parseRole;
|
|
6
|
+
exports.parseIdeType = parseIdeType;
|
|
7
|
+
const FALLBACK_GIT_URL = "http://10.96.105.158/gitlab/ZhiHuiNongShang/XinFaDi/base-framework/project-initializer/ai-pack.git";
|
|
8
|
+
exports.FALLBACK_GIT_URL = FALLBACK_GIT_URL;
|
|
9
|
+
/** ai-pack 克隆分支(写死,不可通过环境变量覆盖) */
|
|
10
|
+
exports.AI_PACK_BRANCH = "zhibiaojiance";
|
|
11
|
+
const VALID_ROLES = new Set(["backend", "frontend", "testing"]);
|
|
12
|
+
const VALID_IDE_TYPES = new Set([
|
|
13
|
+
"cursor",
|
|
14
|
+
"claude",
|
|
15
|
+
"codex",
|
|
16
|
+
"opencode",
|
|
17
|
+
"qoder",
|
|
18
|
+
"trae",
|
|
19
|
+
"windsurf",
|
|
20
|
+
"vscode",
|
|
21
|
+
"jetbrains",
|
|
22
|
+
]);
|
|
23
|
+
/** 读取默认配置,环境变量优先级最高 */
|
|
24
|
+
function getDefaultConfig() {
|
|
25
|
+
var _a, _b, _c;
|
|
26
|
+
const role = (_a = parseRole(process.env.AI_PACK_ROLE)) !== null && _a !== void 0 ? _a : "backend";
|
|
27
|
+
const branch = exports.AI_PACK_BRANCH;
|
|
28
|
+
const gitUrl = ((_b = process.env.AI_PACK_GIT_URL) === null || _b === void 0 ? void 0 : _b.trim()) || FALLBACK_GIT_URL;
|
|
29
|
+
const ideType = (_c = parseIdeType(process.env.AI_PACK_IDE)) !== null && _c !== void 0 ? _c : "cursor";
|
|
30
|
+
return { role, branch, gitUrl, ideType };
|
|
31
|
+
}
|
|
32
|
+
function parseRole(value) {
|
|
33
|
+
if (!(value === null || value === void 0 ? void 0 : value.trim()))
|
|
34
|
+
return undefined;
|
|
35
|
+
const r = value.trim();
|
|
36
|
+
return VALID_ROLES.has(r) ? r : undefined;
|
|
37
|
+
}
|
|
38
|
+
function parseIdeType(value) {
|
|
39
|
+
if (!(value === null || value === void 0 ? void 0 : value.trim()))
|
|
40
|
+
return undefined;
|
|
41
|
+
const ide = value.trim();
|
|
42
|
+
return VALID_IDE_TYPES.has(ide) ? ide : undefined;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAsBA,4CAOC;AAED,8BAIC;AAED,oCAIC;AAvCD,MAAM,gBAAgB,GACpB,oGAAoG,CAAC;AAwC9F,4CAAgB;AAtCzB,kCAAkC;AACrB,QAAA,cAAc,GAAG,eAAe,CAAC;AAE9C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAa,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAU;IACvC,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,UAAU;IACV,OAAO;IACP,MAAM;IACN,UAAU;IACV,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAEH,uBAAuB;AACvB,SAAgB,gBAAgB;;IAC9B,MAAM,IAAI,GAAG,MAAA,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,mCAAI,SAAS,CAAC;IAC9D,MAAM,MAAM,GAAG,sBAAc,CAAC;IAC9B,MAAM,MAAM,GAAG,CAAA,MAAA,OAAO,CAAC,GAAG,CAAC,eAAe,0CAAE,IAAI,EAAE,KAAI,gBAAgB,CAAC;IACvE,MAAM,OAAO,GAAG,MAAA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,mCAAI,QAAQ,CAAC;IAElE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,SAAS,CAAC,KAAyB;IACjD,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAA;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAgB,CAAC;IACrC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,SAAgB,YAAY,CAAC,KAAyB;IACpD,IAAI,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAA;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,EAAa,CAAC;IACpC,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC"}
|
package/dist/detect.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AiPackRole, IdeType, InstallableIdeType } from "./types";
|
|
2
|
+
export interface AgentConfigSnapshot {
|
|
3
|
+
ideType: IdeType;
|
|
4
|
+
configDir: string;
|
|
5
|
+
exists: boolean;
|
|
6
|
+
role?: AiPackRole;
|
|
7
|
+
roleSourceFile?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveTargetDir(input?: string): string;
|
|
10
|
+
export declare function readInstalledRole(targetDir: string): AiPackRole | undefined;
|
|
11
|
+
export declare function readAgentConfigSnapshots(targetDir: string): AgentConfigSnapshot[];
|
|
12
|
+
export declare function readInstalledIdeTypes(targetDir: string): InstallableIdeType[];
|
|
13
|
+
export declare function isInteractive(): boolean;
|
|
14
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAwBvE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAS3E;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAkBjF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAW7E;AAOD,wBAAgB,aAAa,IAAI,OAAO,CAMvC"}
|
package/dist/detect.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.resolveTargetDir = resolveTargetDir;
|
|
7
|
+
exports.readInstalledRole = readInstalledRole;
|
|
8
|
+
exports.readAgentConfigSnapshots = readAgentConfigSnapshots;
|
|
9
|
+
exports.readInstalledIdeTypes = readInstalledIdeTypes;
|
|
10
|
+
exports.isInteractive = isInteractive;
|
|
11
|
+
const fs_1 = __importDefault(require("fs"));
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const IDE_CONFIG_DIRS = {
|
|
14
|
+
cursor: ".cursor",
|
|
15
|
+
claude: ".claude",
|
|
16
|
+
codex: ".codex",
|
|
17
|
+
opencode: ".opencode",
|
|
18
|
+
qoder: ".qoder",
|
|
19
|
+
trae: ".trae",
|
|
20
|
+
windsurf: ".windsurf",
|
|
21
|
+
vscode: ".vscode",
|
|
22
|
+
jetbrains: ".jetbrains",
|
|
23
|
+
};
|
|
24
|
+
const ROLE_MANIFEST_FILES = ["ai-pack-manifest.json", "ai-pack-role.json"];
|
|
25
|
+
const INSTALLABLE_IDE_TYPES = new Set([
|
|
26
|
+
"cursor",
|
|
27
|
+
"claude",
|
|
28
|
+
"codex",
|
|
29
|
+
"opencode",
|
|
30
|
+
"qoder",
|
|
31
|
+
"trae",
|
|
32
|
+
]);
|
|
33
|
+
function resolveTargetDir(input) {
|
|
34
|
+
const dir = path_1.default.resolve((input === null || input === void 0 ? void 0 : input.trim()) || process.cwd());
|
|
35
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
36
|
+
throw new Error(`Target directory does not exist: ${dir}`);
|
|
37
|
+
}
|
|
38
|
+
if (!fs_1.default.statSync(dir).isDirectory()) {
|
|
39
|
+
throw new Error(`Target path is not a directory: ${dir}`);
|
|
40
|
+
}
|
|
41
|
+
return dir;
|
|
42
|
+
}
|
|
43
|
+
function readInstalledRole(targetDir) {
|
|
44
|
+
for (const configDir of Object.values(IDE_CONFIG_DIRS)) {
|
|
45
|
+
const resolved = readRoleFromConfigDir(targetDir, configDir);
|
|
46
|
+
if (resolved === null || resolved === void 0 ? void 0 : resolved.role) {
|
|
47
|
+
return resolved.role;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function readAgentConfigSnapshots(targetDir) {
|
|
53
|
+
const snapshots = [];
|
|
54
|
+
for (const [ideType, configDir] of Object.entries(IDE_CONFIG_DIRS)) {
|
|
55
|
+
const abs = path_1.default.join(targetDir, configDir);
|
|
56
|
+
const exists = fs_1.default.existsSync(abs) && fs_1.default.statSync(abs).isDirectory();
|
|
57
|
+
const resolved = readRoleFromConfigDir(targetDir, configDir);
|
|
58
|
+
snapshots.push({
|
|
59
|
+
ideType,
|
|
60
|
+
configDir,
|
|
61
|
+
exists,
|
|
62
|
+
role: resolved === null || resolved === void 0 ? void 0 : resolved.role,
|
|
63
|
+
roleSourceFile: resolved === null || resolved === void 0 ? void 0 : resolved.sourceFile,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return snapshots;
|
|
67
|
+
}
|
|
68
|
+
function readInstalledIdeTypes(targetDir) {
|
|
69
|
+
const installed = [];
|
|
70
|
+
for (const snapshot of readAgentConfigSnapshots(targetDir)) {
|
|
71
|
+
if (!snapshot.exists) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (INSTALLABLE_IDE_TYPES.has(snapshot.ideType)) {
|
|
75
|
+
installed.push(snapshot.ideType);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return installed;
|
|
79
|
+
}
|
|
80
|
+
function isCiEnvironment() {
|
|
81
|
+
var _a;
|
|
82
|
+
const ci = (_a = process.env.CI) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase();
|
|
83
|
+
return ci === "1" || ci === "true";
|
|
84
|
+
}
|
|
85
|
+
function isInteractive() {
|
|
86
|
+
if (isCiEnvironment()) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
90
|
+
}
|
|
91
|
+
function parseAiPackRole(value) {
|
|
92
|
+
if (!(value === null || value === void 0 ? void 0 : value.trim())) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const role = value.trim();
|
|
96
|
+
if (role === "backend" || role === "frontend" || role === "testing") {
|
|
97
|
+
return role;
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
function readRoleFromConfigDir(targetDir, configDir) {
|
|
102
|
+
var _a;
|
|
103
|
+
for (const file of ROLE_MANIFEST_FILES) {
|
|
104
|
+
const candidate = path_1.default.join(targetDir, configDir, file);
|
|
105
|
+
if (!fs_1.default.existsSync(candidate)) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const raw = JSON.parse(fs_1.default.readFileSync(candidate, "utf-8"));
|
|
110
|
+
const role = (_a = parseAiPackRole(raw.installed_role)) !== null && _a !== void 0 ? _a : parseAiPackRole(raw.role);
|
|
111
|
+
if (role) {
|
|
112
|
+
return { role, sourceFile: candidate };
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (_b) {
|
|
116
|
+
// 忽略坏数据,继续扫描。
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./constants"), exports);
|
|
19
|
+
__exportStar(require("./detect"), exports);
|
|
20
|
+
__exportStar(require("./npmrc"), exports);
|
|
21
|
+
__exportStar(require("./registry"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,0CAAwB;AACxB,6CAA2B"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type LogLevel = "info" | "warn" | "error" | "success";
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
/** 日志时间 */
|
|
4
|
+
timestamp: string;
|
|
5
|
+
/** 日志级别 */
|
|
6
|
+
level: LogLevel;
|
|
7
|
+
/** 日志消息 */
|
|
8
|
+
message: string;
|
|
9
|
+
/** 额外数据 */
|
|
10
|
+
data?: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface UpdateLogEntry extends LogEntry {
|
|
13
|
+
/** 更新类型 */
|
|
14
|
+
type: "silent-update" | "task-execution";
|
|
15
|
+
/** 更新结果 */
|
|
16
|
+
result: {
|
|
17
|
+
/** 总项目数 */
|
|
18
|
+
total: number;
|
|
19
|
+
/** 成功数 */
|
|
20
|
+
success: number;
|
|
21
|
+
/** 失败数 */
|
|
22
|
+
failed: number;
|
|
23
|
+
/** 跳过数 */
|
|
24
|
+
skipped?: number;
|
|
25
|
+
};
|
|
26
|
+
/** 项目详情 */
|
|
27
|
+
projects?: Array<{
|
|
28
|
+
path: string;
|
|
29
|
+
status: "success" | "error" | "skipped";
|
|
30
|
+
error?: string;
|
|
31
|
+
duration?: number;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export interface TaskExecutionLog extends LogEntry {
|
|
35
|
+
/** 任务名称 */
|
|
36
|
+
taskName: string;
|
|
37
|
+
/** 执行状态 */
|
|
38
|
+
executionStatus: "success" | "error" | "timeout";
|
|
39
|
+
/** 执行时长(毫秒) */
|
|
40
|
+
duration?: number;
|
|
41
|
+
/** 错误信息 */
|
|
42
|
+
error?: string;
|
|
43
|
+
}
|
|
44
|
+
/** 记录静默更新日志 */
|
|
45
|
+
export declare function logSilentUpdate(entry: UpdateLogEntry): void;
|
|
46
|
+
/** 记录任务执行日志 */
|
|
47
|
+
export declare function logTaskExecution(entry: TaskExecutionLog): void;
|
|
48
|
+
/** 记录通用日志 */
|
|
49
|
+
export declare function log(level: LogLevel, message: string, data?: Record<string, unknown>): void;
|
|
50
|
+
/** 读取指定日期的日志 */
|
|
51
|
+
export declare function readLogs(type: string, date?: Date): LogEntry[];
|
|
52
|
+
/** 读取最近N天的日志 */
|
|
53
|
+
export declare function readRecentLogs(type: string, days?: number): LogEntry[];
|
|
54
|
+
/** 获取日志文件列表 */
|
|
55
|
+
export declare function listLogFiles(): Array<{
|
|
56
|
+
name: string;
|
|
57
|
+
path: string;
|
|
58
|
+
size: number;
|
|
59
|
+
date: string;
|
|
60
|
+
}>;
|
|
61
|
+
/** 清理旧日志(保留最近N天) */
|
|
62
|
+
export declare function cleanOldLogs(keepDays?: number): number;
|
|
63
|
+
/** 获取日志目录路径 */
|
|
64
|
+
export declare function getLogsDirectory(): string;
|
|
65
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,QAAQ;IACvB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,WAAW;IACX,IAAI,EAAE,eAAe,GAAG,gBAAgB,CAAC;IACzC,WAAW;IACX,MAAM,EAAE;QACN,WAAW;QACX,KAAK,EAAE,MAAM,CAAC;QACd,UAAU;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU;QACV,MAAM,EAAE,MAAM,CAAC;QACf,UAAU;QACV,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACxC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,WAAW;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,eAAe,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACjD,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAwCD,eAAe;AACf,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAG3D;AAED,eAAe;AACf,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAG9D;AAED,aAAa;AACb,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU1F;AAED,gBAAgB;AAChB,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,CAW9D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,QAAQ,EAAE,CAYzE;AAED,eAAe;AACf,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BhG;AAED,oBAAoB;AACpB,wBAAgB,YAAY,CAAC,QAAQ,GAAE,MAAW,GAAG,MAAM,CA4B1D;AAED,eAAe;AACf,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logSilentUpdate = logSilentUpdate;
|
|
7
|
+
exports.logTaskExecution = logTaskExecution;
|
|
8
|
+
exports.log = log;
|
|
9
|
+
exports.readLogs = readLogs;
|
|
10
|
+
exports.readRecentLogs = readRecentLogs;
|
|
11
|
+
exports.listLogFiles = listLogFiles;
|
|
12
|
+
exports.cleanOldLogs = cleanOldLogs;
|
|
13
|
+
exports.getLogsDirectory = getLogsDirectory;
|
|
14
|
+
const fs_1 = __importDefault(require("fs"));
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const os_1 = __importDefault(require("os"));
|
|
17
|
+
const CONFIG_DIR_NAME = ".config";
|
|
18
|
+
const AI_PACK_DIR_NAME = "ai-pack";
|
|
19
|
+
const LOGS_DIR_NAME = "logs";
|
|
20
|
+
function getLogsDir() {
|
|
21
|
+
return path_1.default.join(os_1.default.homedir(), CONFIG_DIR_NAME, AI_PACK_DIR_NAME, LOGS_DIR_NAME);
|
|
22
|
+
}
|
|
23
|
+
function getLogFileName(type, date) {
|
|
24
|
+
const d = date || new Date();
|
|
25
|
+
const dateStr = d.toISOString().split("T")[0]; // YYYY-MM-DD
|
|
26
|
+
return `${type}-${dateStr}.json`;
|
|
27
|
+
}
|
|
28
|
+
function getLogFilePath(type, date) {
|
|
29
|
+
return path_1.default.join(getLogsDir(), getLogFileName(type, date));
|
|
30
|
+
}
|
|
31
|
+
/** 确保日志目录存在 */
|
|
32
|
+
function ensureLogsDir() {
|
|
33
|
+
const logsDir = getLogsDir();
|
|
34
|
+
fs_1.default.mkdirSync(logsDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
/** 写入日志条目 */
|
|
37
|
+
function writeLogEntry(filePath, entry) {
|
|
38
|
+
ensureLogsDir();
|
|
39
|
+
let logs = [];
|
|
40
|
+
try {
|
|
41
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
42
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
43
|
+
logs = JSON.parse(content);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (_a) {
|
|
47
|
+
// 文件不存在或解析错误,使用空数组
|
|
48
|
+
}
|
|
49
|
+
logs.push(entry);
|
|
50
|
+
fs_1.default.writeFileSync(filePath, JSON.stringify(logs, null, 2), "utf-8");
|
|
51
|
+
}
|
|
52
|
+
/** 记录静默更新日志 */
|
|
53
|
+
function logSilentUpdate(entry) {
|
|
54
|
+
const filePath = getLogFilePath("silent-update");
|
|
55
|
+
writeLogEntry(filePath, entry);
|
|
56
|
+
}
|
|
57
|
+
/** 记录任务执行日志 */
|
|
58
|
+
function logTaskExecution(entry) {
|
|
59
|
+
const filePath = getLogFilePath("task-execution");
|
|
60
|
+
writeLogEntry(filePath, entry);
|
|
61
|
+
}
|
|
62
|
+
/** 记录通用日志 */
|
|
63
|
+
function log(level, message, data) {
|
|
64
|
+
const entry = {
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
level,
|
|
67
|
+
message,
|
|
68
|
+
data,
|
|
69
|
+
};
|
|
70
|
+
const filePath = getLogFilePath("general");
|
|
71
|
+
writeLogEntry(filePath, entry);
|
|
72
|
+
}
|
|
73
|
+
/** 读取指定日期的日志 */
|
|
74
|
+
function readLogs(type, date) {
|
|
75
|
+
const filePath = getLogFilePath(type, date);
|
|
76
|
+
try {
|
|
77
|
+
if (fs_1.default.existsSync(filePath)) {
|
|
78
|
+
const content = fs_1.default.readFileSync(filePath, "utf-8");
|
|
79
|
+
return JSON.parse(content);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (_a) {
|
|
83
|
+
// 忽略错误
|
|
84
|
+
}
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
/** 读取最近N天的日志 */
|
|
88
|
+
function readRecentLogs(type, days = 7) {
|
|
89
|
+
const logs = [];
|
|
90
|
+
const now = new Date();
|
|
91
|
+
for (let i = 0; i < days; i++) {
|
|
92
|
+
const date = new Date(now);
|
|
93
|
+
date.setDate(date.getDate() - i);
|
|
94
|
+
const dayLogs = readLogs(type, date);
|
|
95
|
+
logs.push(...dayLogs);
|
|
96
|
+
}
|
|
97
|
+
return logs;
|
|
98
|
+
}
|
|
99
|
+
/** 获取日志文件列表 */
|
|
100
|
+
function listLogFiles() {
|
|
101
|
+
const logsDir = getLogsDir();
|
|
102
|
+
try {
|
|
103
|
+
if (!fs_1.default.existsSync(logsDir)) {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
const files = fs_1.default.readdirSync(logsDir);
|
|
107
|
+
return files
|
|
108
|
+
.filter((f) => f.endsWith(".json"))
|
|
109
|
+
.map((f) => {
|
|
110
|
+
const filePath = path_1.default.join(logsDir, f);
|
|
111
|
+
const stat = fs_1.default.statSync(filePath);
|
|
112
|
+
const dateMatch = f.match(/(\d{4}-\d{2}-\d{2})/);
|
|
113
|
+
return {
|
|
114
|
+
name: f,
|
|
115
|
+
path: filePath,
|
|
116
|
+
size: stat.size,
|
|
117
|
+
date: dateMatch ? dateMatch[1] : "",
|
|
118
|
+
};
|
|
119
|
+
})
|
|
120
|
+
.sort((a, b) => b.date.localeCompare(a.date));
|
|
121
|
+
}
|
|
122
|
+
catch (_a) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** 清理旧日志(保留最近N天) */
|
|
127
|
+
function cleanOldLogs(keepDays = 30) {
|
|
128
|
+
const logsDir = getLogsDir();
|
|
129
|
+
try {
|
|
130
|
+
if (!fs_1.default.existsSync(logsDir)) {
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
const files = fs_1.default.readdirSync(logsDir);
|
|
134
|
+
const cutoffDate = new Date();
|
|
135
|
+
cutoffDate.setDate(cutoffDate.getDate() - keepDays);
|
|
136
|
+
const cutoffStr = cutoffDate.toISOString().split("T")[0];
|
|
137
|
+
let deletedCount = 0;
|
|
138
|
+
for (const f of files) {
|
|
139
|
+
if (!f.endsWith(".json"))
|
|
140
|
+
continue;
|
|
141
|
+
const dateMatch = f.match(/(\d{4}-\d{2}-\d{2})/);
|
|
142
|
+
if (dateMatch && dateMatch[1] < cutoffStr) {
|
|
143
|
+
fs_1.default.unlinkSync(path_1.default.join(logsDir, f));
|
|
144
|
+
deletedCount++;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return deletedCount;
|
|
148
|
+
}
|
|
149
|
+
catch (_a) {
|
|
150
|
+
return 0;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/** 获取日志目录路径 */
|
|
154
|
+
function getLogsDirectory() {
|
|
155
|
+
return getLogsDir();
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/npmrc.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AiPackRole } from "./types";
|
|
2
|
+
/** 用户级 AI Pack 配置目录(~/.config/ai-pack) */
|
|
3
|
+
export declare function getUserAiPackConfigDir(): string;
|
|
4
|
+
/** 用户级 AI Pack 配置文件(~/.config/ai-pack/ai-pack.json) */
|
|
5
|
+
export declare function getUserAiPackConfigPath(): string;
|
|
6
|
+
/** 从 ~/.config/ai-pack/ai-pack.json 读取角色;缺失或非法时返回 undefined */
|
|
7
|
+
export declare function readRoleFromUserConfig(): AiPackRole | undefined;
|
|
8
|
+
/** 将角色写入 ~/.config/ai-pack/ai-pack.json(存在则更新,不存在则创建) */
|
|
9
|
+
export declare function writeRoleToUserConfig(role: AiPackRole): void;
|
|
10
|
+
/**
|
|
11
|
+
* 兼容旧 API:角色读取已迁移到 ~/.config/ai-pack/ai-pack.json。
|
|
12
|
+
*/
|
|
13
|
+
export declare function readRoleFromNpmrc(): AiPackRole | undefined;
|
|
14
|
+
/** 兼容旧 API:角色持久化改为写入 ~/.config/ai-pack/ai-pack.json。 */
|
|
15
|
+
export declare function writeRoleToNpmrc(role: AiPackRole): void;
|
|
16
|
+
//# sourceMappingURL=npmrc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npmrc.d.ts","sourceRoot":"","sources":["../src/npmrc.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,0CAA0C;AAC1C,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,uDAAuD;AACvD,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,IAAI,UAAU,GAAG,SAAS,CAY/D;AAED,yDAAyD;AACzD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAmB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,GAAG,SAAS,CAE1D;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAEvD"}
|
package/dist/npmrc.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getUserAiPackConfigDir = getUserAiPackConfigDir;
|
|
7
|
+
exports.getUserAiPackConfigPath = getUserAiPackConfigPath;
|
|
8
|
+
exports.readRoleFromUserConfig = readRoleFromUserConfig;
|
|
9
|
+
exports.writeRoleToUserConfig = writeRoleToUserConfig;
|
|
10
|
+
exports.readRoleFromNpmrc = readRoleFromNpmrc;
|
|
11
|
+
exports.writeRoleToNpmrc = writeRoleToNpmrc;
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const os_1 = __importDefault(require("os"));
|
|
14
|
+
const path_1 = __importDefault(require("path"));
|
|
15
|
+
const constants_1 = require("./constants");
|
|
16
|
+
/** 用户级 AI Pack 配置目录(~/.config/ai-pack) */
|
|
17
|
+
function getUserAiPackConfigDir() {
|
|
18
|
+
return path_1.default.join(os_1.default.homedir(), ".config", "ai-pack");
|
|
19
|
+
}
|
|
20
|
+
/** 用户级 AI Pack 配置文件(~/.config/ai-pack/ai-pack.json) */
|
|
21
|
+
function getUserAiPackConfigPath() {
|
|
22
|
+
return path_1.default.join(getUserAiPackConfigDir(), "ai-pack.json");
|
|
23
|
+
}
|
|
24
|
+
/** 从 ~/.config/ai-pack/ai-pack.json 读取角色;缺失或非法时返回 undefined */
|
|
25
|
+
function readRoleFromUserConfig() {
|
|
26
|
+
const configPath = getUserAiPackConfigPath();
|
|
27
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(fs_1.default.readFileSync(configPath, "utf-8"));
|
|
32
|
+
return (0, constants_1.parseRole)(parsed.role);
|
|
33
|
+
}
|
|
34
|
+
catch (_a) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** 将角色写入 ~/.config/ai-pack/ai-pack.json(存在则更新,不存在则创建) */
|
|
39
|
+
function writeRoleToUserConfig(role) {
|
|
40
|
+
const configDir = getUserAiPackConfigDir();
|
|
41
|
+
const configPath = getUserAiPackConfigPath();
|
|
42
|
+
let content = {};
|
|
43
|
+
if (fs_1.default.existsSync(configPath)) {
|
|
44
|
+
try {
|
|
45
|
+
const parsed = JSON.parse(fs_1.default.readFileSync(configPath, "utf-8"));
|
|
46
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
47
|
+
content = parsed;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (_a) {
|
|
51
|
+
// ignore broken json and overwrite with valid content
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const updated = Object.assign(Object.assign({}, content), { role });
|
|
55
|
+
fs_1.default.mkdirSync(configDir, { recursive: true });
|
|
56
|
+
fs_1.default.writeFileSync(configPath, `${JSON.stringify(updated, null, 2)}\n`, "utf-8");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 兼容旧 API:角色读取已迁移到 ~/.config/ai-pack/ai-pack.json。
|
|
60
|
+
*/
|
|
61
|
+
function readRoleFromNpmrc() {
|
|
62
|
+
return readRoleFromUserConfig();
|
|
63
|
+
}
|
|
64
|
+
/** 兼容旧 API:角色持久化改为写入 ~/.config/ai-pack/ai-pack.json。 */
|
|
65
|
+
function writeRoleToNpmrc(role) {
|
|
66
|
+
writeRoleToUserConfig(role);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=npmrc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npmrc.js","sourceRoot":"","sources":["../src/npmrc.ts"],"names":[],"mappings":";;;;;AAOA,wDAEC;AAGD,0DAEC;AAGD,wDAYC;AAGD,sDAmBC;AAKD,8CAEC;AAGD,4CAEC;AA/DD,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,2CAAwC;AAGxC,0CAA0C;AAC1C,SAAgB,sBAAsB;IACpC,OAAO,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,uDAAuD;AACvD,SAAgB,uBAAuB;IACrC,OAAO,cAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC;AAED,+DAA+D;AAC/D,SAAgB,sBAAsB;IACpC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;IAC7C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAsB,CAAC;QACrF,OAAO,IAAA,qBAAS,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,SAAgB,qBAAqB,CAAC,IAAgB;IACpD,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAC;IAC7C,IAAI,OAAO,GAA4B,EAAE,CAAC;IAE1C,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAA4B,CAAC;YAC3F,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,WAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,mCAAiC,OAAO,KAAE,IAAI,GAAE,CAAC;IAC9D,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,OAAO,sBAAsB,EAAE,CAAC;AAClC,CAAC;AAED,wDAAwD;AACxD,SAAgB,gBAAgB,CAAC,IAAgB;IAC/C,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|