pi-kot 0.1.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 +30 -0
- package/bin/pi-kot.mjs +125 -0
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/index-UJgsBs6a.js +361 -0
- package/dist/client/assets/index-UJgsBs6a.js.map +1 -0
- package/dist/client/assets/index-ZuTc_0YY.css +1 -0
- package/dist/client/index.html +14 -0
- package/dist/server/ask-user-question/envelope.d.ts +11 -0
- package/dist/server/ask-user-question/envelope.d.ts.map +1 -0
- package/dist/server/ask-user-question/envelope.js +41 -0
- package/dist/server/ask-user-question/envelope.js.map +1 -0
- package/dist/server/ask-user-question/prompt-strings.d.ts +4 -0
- package/dist/server/ask-user-question/prompt-strings.d.ts.map +1 -0
- package/dist/server/ask-user-question/prompt-strings.js +18 -0
- package/dist/server/ask-user-question/prompt-strings.js.map +1 -0
- package/dist/server/ask-user-question/registry.d.ts +39 -0
- package/dist/server/ask-user-question/registry.d.ts.map +1 -0
- package/dist/server/ask-user-question/registry.js +124 -0
- package/dist/server/ask-user-question/registry.js.map +1 -0
- package/dist/server/ask-user-question/tool.d.ts +4 -0
- package/dist/server/ask-user-question/tool.d.ts.map +1 -0
- package/dist/server/ask-user-question/tool.js +68 -0
- package/dist/server/ask-user-question/tool.js.map +1 -0
- package/dist/server/ask-user-question/types.d.ts +50 -0
- package/dist/server/ask-user-question/types.d.ts.map +1 -0
- package/dist/server/ask-user-question/types.js +7 -0
- package/dist/server/ask-user-question/types.js.map +1 -0
- package/dist/server/ask-user-question/validate.d.ts +3 -0
- package/dist/server/ask-user-question/validate.d.ts.map +1 -0
- package/dist/server/ask-user-question/validate.js +67 -0
- package/dist/server/ask-user-question/validate.js.map +1 -0
- package/dist/server/config-manager.d.ts +47 -0
- package/dist/server/config-manager.d.ts.map +1 -0
- package/dist/server/config-manager.js +182 -0
- package/dist/server/config-manager.js.map +1 -0
- package/dist/server/config.d.ts +20 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +58 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/extension-manager.d.ts +70 -0
- package/dist/server/extension-manager.d.ts.map +1 -0
- package/dist/server/extension-manager.js +401 -0
- package/dist/server/extension-manager.js.map +1 -0
- package/dist/server/extension-ui-bridge.d.ts +35 -0
- package/dist/server/extension-ui-bridge.d.ts.map +1 -0
- package/dist/server/extension-ui-bridge.js +228 -0
- package/dist/server/extension-ui-bridge.js.map +1 -0
- package/dist/server/file-manager.d.ts +79 -0
- package/dist/server/file-manager.d.ts.map +1 -0
- package/dist/server/file-manager.js +526 -0
- package/dist/server/file-manager.js.map +1 -0
- package/dist/server/file-searcher.d.ts +29 -0
- package/dist/server/file-searcher.d.ts.map +1 -0
- package/dist/server/file-searcher.js +318 -0
- package/dist/server/file-searcher.js.map +1 -0
- package/dist/server/git-clone.d.ts +56 -0
- package/dist/server/git-clone.d.ts.map +1 -0
- package/dist/server/git-clone.js +173 -0
- package/dist/server/git-clone.js.map +1 -0
- package/dist/server/index.d.ts +22 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +196 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/lifecycle-notifications.d.ts +28 -0
- package/dist/server/lifecycle-notifications.d.ts.map +1 -0
- package/dist/server/lifecycle-notifications.js +38 -0
- package/dist/server/lifecycle-notifications.js.map +1 -0
- package/dist/server/orchestration/config.d.ts +5 -0
- package/dist/server/orchestration/config.d.ts.map +1 -0
- package/dist/server/orchestration/config.js +35 -0
- package/dist/server/orchestration/config.js.map +1 -0
- package/dist/server/orchestration/event-bridge.d.ts +32 -0
- package/dist/server/orchestration/event-bridge.d.ts.map +1 -0
- package/dist/server/orchestration/event-bridge.js +110 -0
- package/dist/server/orchestration/event-bridge.js.map +1 -0
- package/dist/server/orchestration/inbox.d.ts +9 -0
- package/dist/server/orchestration/inbox.d.ts.map +1 -0
- package/dist/server/orchestration/inbox.js +186 -0
- package/dist/server/orchestration/inbox.js.map +1 -0
- package/dist/server/orchestration/init.d.ts +2 -0
- package/dist/server/orchestration/init.d.ts.map +1 -0
- package/dist/server/orchestration/init.js +22 -0
- package/dist/server/orchestration/init.js.map +1 -0
- package/dist/server/orchestration/store.d.ts +33 -0
- package/dist/server/orchestration/store.d.ts.map +1 -0
- package/dist/server/orchestration/store.js +331 -0
- package/dist/server/orchestration/store.js.map +1 -0
- package/dist/server/orchestration/tools.d.ts +15 -0
- package/dist/server/orchestration/tools.d.ts.map +1 -0
- package/dist/server/orchestration/tools.js +621 -0
- package/dist/server/orchestration/tools.js.map +1 -0
- package/dist/server/orchestration/types.d.ts +68 -0
- package/dist/server/orchestration/types.d.ts.map +1 -0
- package/dist/server/orchestration/types.js +43 -0
- package/dist/server/orchestration/types.js.map +1 -0
- package/dist/server/orchestration/worker-lifecycle.d.ts +15 -0
- package/dist/server/orchestration/worker-lifecycle.d.ts.map +1 -0
- package/dist/server/orchestration/worker-lifecycle.js +45 -0
- package/dist/server/orchestration/worker-lifecycle.js.map +1 -0
- package/dist/server/project-manager.d.ts +25 -0
- package/dist/server/project-manager.d.ts.map +1 -0
- package/dist/server/project-manager.js +157 -0
- package/dist/server/project-manager.js.map +1 -0
- package/dist/server/routes/_schemas.d.ts +16 -0
- package/dist/server/routes/_schemas.d.ts.map +1 -0
- package/dist/server/routes/_schemas.js +12 -0
- package/dist/server/routes/_schemas.js.map +1 -0
- package/dist/server/routes/ask-user-question.d.ts +3 -0
- package/dist/server/routes/ask-user-question.d.ts.map +1 -0
- package/dist/server/routes/ask-user-question.js +105 -0
- package/dist/server/routes/ask-user-question.js.map +1 -0
- package/dist/server/routes/auth.d.ts +7 -0
- package/dist/server/routes/auth.d.ts.map +1 -0
- package/dist/server/routes/auth.js +126 -0
- package/dist/server/routes/auth.js.map +1 -0
- package/dist/server/routes/config.d.ts +3 -0
- package/dist/server/routes/config.d.ts.map +1 -0
- package/dist/server/routes/config.js +203 -0
- package/dist/server/routes/config.js.map +1 -0
- package/dist/server/routes/control.d.ts +3 -0
- package/dist/server/routes/control.d.ts.map +1 -0
- package/dist/server/routes/control.js +180 -0
- package/dist/server/routes/control.js.map +1 -0
- package/dist/server/routes/extension-commands.d.ts +22 -0
- package/dist/server/routes/extension-commands.d.ts.map +1 -0
- package/dist/server/routes/extension-commands.js +178 -0
- package/dist/server/routes/extension-commands.js.map +1 -0
- package/dist/server/routes/extensions.d.ts +8 -0
- package/dist/server/routes/extensions.d.ts.map +1 -0
- package/dist/server/routes/extensions.js +169 -0
- package/dist/server/routes/extensions.js.map +1 -0
- package/dist/server/routes/files.d.ts +3 -0
- package/dist/server/routes/files.d.ts.map +1 -0
- package/dist/server/routes/files.js +549 -0
- package/dist/server/routes/files.js.map +1 -0
- package/dist/server/routes/orchestration.d.ts +3 -0
- package/dist/server/routes/orchestration.d.ts.map +1 -0
- package/dist/server/routes/orchestration.js +251 -0
- package/dist/server/routes/orchestration.js.map +1 -0
- package/dist/server/routes/projects.d.ts +3 -0
- package/dist/server/routes/projects.d.ts.map +1 -0
- package/dist/server/routes/projects.js +412 -0
- package/dist/server/routes/projects.js.map +1 -0
- package/dist/server/routes/prompt.d.ts +3 -0
- package/dist/server/routes/prompt.d.ts.map +1 -0
- package/dist/server/routes/prompt.js +192 -0
- package/dist/server/routes/prompt.js.map +1 -0
- package/dist/server/routes/sessions.d.ts +3 -0
- package/dist/server/routes/sessions.d.ts.map +1 -0
- package/dist/server/routes/sessions.js +581 -0
- package/dist/server/routes/sessions.js.map +1 -0
- package/dist/server/routes/stream.d.ts +3 -0
- package/dist/server/routes/stream.d.ts.map +1 -0
- package/dist/server/routes/stream.js +109 -0
- package/dist/server/routes/stream.js.map +1 -0
- package/dist/server/session-registry.d.ts +151 -0
- package/dist/server/session-registry.d.ts.map +1 -0
- package/dist/server/session-registry.js +655 -0
- package/dist/server/session-registry.js.map +1 -0
- package/dist/server/sse-bridge.d.ts +31 -0
- package/dist/server/sse-bridge.d.ts.map +1 -0
- package/dist/server/sse-bridge.js +126 -0
- package/dist/server/sse-bridge.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAoEpE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { RESERVED_LABELS, MAX_HEADER_LENGTH, MAX_LABEL_LENGTH, MAX_OPTIONS, MAX_QUESTIONS, MIN_OPTIONS, } from "./types.js";
|
|
2
|
+
export function validateQuestionnaire(raw) {
|
|
3
|
+
if (typeof raw !== "object" || raw === null) {
|
|
4
|
+
return { ok: false, error: "invalid_input", message: "Expected an object" };
|
|
5
|
+
}
|
|
6
|
+
const input = raw;
|
|
7
|
+
const questions = input.questions;
|
|
8
|
+
if (!Array.isArray(questions)) {
|
|
9
|
+
return { ok: false, error: "no_questions", message: "Missing questions array" };
|
|
10
|
+
}
|
|
11
|
+
if (questions.length < 1) {
|
|
12
|
+
return { ok: false, error: "no_questions", message: "At least one question required" };
|
|
13
|
+
}
|
|
14
|
+
if (questions.length > MAX_QUESTIONS) {
|
|
15
|
+
return { ok: false, error: "too_many_questions", message: `Max ${MAX_QUESTIONS} questions` };
|
|
16
|
+
}
|
|
17
|
+
for (const q of questions) {
|
|
18
|
+
if (typeof q !== "object" || q === null) {
|
|
19
|
+
return { ok: false, error: "invalid_question", message: "Question must be an object" };
|
|
20
|
+
}
|
|
21
|
+
const qq = q;
|
|
22
|
+
if (typeof qq.question !== "string" || qq.question.length === 0) {
|
|
23
|
+
return { ok: false, error: "missing_question_text", message: "Question text required" };
|
|
24
|
+
}
|
|
25
|
+
if (typeof qq.header !== "string" || qq.header.length === 0) {
|
|
26
|
+
return { ok: false, error: "missing_header", message: "Header required" };
|
|
27
|
+
}
|
|
28
|
+
if (qq.header.length > MAX_HEADER_LENGTH) {
|
|
29
|
+
return { ok: false, error: "header_too_long", message: `Header max ${MAX_HEADER_LENGTH} chars` };
|
|
30
|
+
}
|
|
31
|
+
const options = qq.options;
|
|
32
|
+
if (!Array.isArray(options)) {
|
|
33
|
+
return { ok: false, error: "too_few_options", message: "Options array required" };
|
|
34
|
+
}
|
|
35
|
+
if (options.length < MIN_OPTIONS) {
|
|
36
|
+
return { ok: false, error: "too_few_options", message: `Min ${MIN_OPTIONS} options` };
|
|
37
|
+
}
|
|
38
|
+
if (options.length > MAX_OPTIONS) {
|
|
39
|
+
return { ok: false, error: "too_many_options", message: `Max ${MAX_OPTIONS} options` };
|
|
40
|
+
}
|
|
41
|
+
const seenLabels = new Set();
|
|
42
|
+
for (const opt of options) {
|
|
43
|
+
if (typeof opt !== "object" || opt === null) {
|
|
44
|
+
return { ok: false, error: "invalid_option", message: "Option must be an object" };
|
|
45
|
+
}
|
|
46
|
+
const oo = opt;
|
|
47
|
+
if (typeof oo.label !== "string" || oo.label.length === 0) {
|
|
48
|
+
return { ok: false, error: "missing_label", message: "Option label required" };
|
|
49
|
+
}
|
|
50
|
+
if (oo.label.length > MAX_LABEL_LENGTH) {
|
|
51
|
+
return { ok: false, error: "label_too_long", message: `Label max ${MAX_LABEL_LENGTH} chars` };
|
|
52
|
+
}
|
|
53
|
+
if (typeof oo.description !== "string" || oo.description.length === 0) {
|
|
54
|
+
return { ok: false, error: "missing_description", message: "Option description required" };
|
|
55
|
+
}
|
|
56
|
+
if (RESERVED_LABELS.includes(oo.label)) {
|
|
57
|
+
return { ok: false, error: "reserved_label", message: `Label "${oo.label}" is reserved` };
|
|
58
|
+
}
|
|
59
|
+
if (seenLabels.has(oo.label)) {
|
|
60
|
+
return { ok: false, error: "duplicate_label", message: `Duplicate label "${oo.label}"` };
|
|
61
|
+
}
|
|
62
|
+
seenLabels.add(oo.label);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return { ok: true, params: input };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/ask-user-question/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,WAAW,GAGZ,MAAM,YAAY,CAAC;AAEpB,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAC9E,CAAC;IACD,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,aAAa,YAAY,EAAE,CAAC;IAC/F,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;QACzF,CAAC;QACD,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC5E,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,iBAAiB,QAAQ,EAAE,CAAC;QACnG,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;QACpF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,EAAE,CAAC;QACxF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACjC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,WAAW,UAAU,EAAE,CAAC;QACzF,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;YACrF,CAAC;YACD,MAAM,EAAE,GAAG,GAA8B,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC;YACjF,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;gBACvC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,gBAAgB,QAAQ,EAAE,CAAC;YAChG,CAAC;YACD,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;YAC7F,CAAC;YACD,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAuC,CAAC,EAAE,CAAC;gBACzE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,KAAK,eAAe,EAAE,CAAC;YAC5F,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;YAC3F,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAyC,EAAE,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare class AuthProviderNotFoundError extends Error {
|
|
2
|
+
constructor(provider: string);
|
|
3
|
+
}
|
|
4
|
+
export interface AuthPresence {
|
|
5
|
+
configured: boolean;
|
|
6
|
+
source?: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AuthSummary {
|
|
10
|
+
providers: Record<string, AuthPresence>;
|
|
11
|
+
}
|
|
12
|
+
export declare function readAuthSummary(): AuthSummary;
|
|
13
|
+
export declare function writeApiKey(provider: string, apiKey: string): void;
|
|
14
|
+
export declare function removeApiKey(provider: string): void;
|
|
15
|
+
export declare function readSettings(): Record<string, unknown>;
|
|
16
|
+
export declare function updateSettings(patch: Record<string, unknown>): Record<string, unknown>;
|
|
17
|
+
export interface ModelsJson {
|
|
18
|
+
providers: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Read models.json, redacting secret fields (apiKey, apiKeyCommand).
|
|
22
|
+
*/
|
|
23
|
+
export declare function readModelsJsonRedacted(): Promise<ModelsJson>;
|
|
24
|
+
export declare function writeModelsJson(data: ModelsJson): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Write settings.json atomically. Used by the per-session setModel route
|
|
27
|
+
* to restore the global default after the SDK mutates it as a side effect
|
|
28
|
+
* of session.setModel().
|
|
29
|
+
* Pattern from pi-forge's config-manager.ts writeSettings().
|
|
30
|
+
*/
|
|
31
|
+
export declare function writeSettings(settings: Record<string, unknown>): Promise<void>;
|
|
32
|
+
export declare function liveProvidersListing(): {
|
|
33
|
+
providers: Array<{
|
|
34
|
+
provider: string;
|
|
35
|
+
models: Array<{
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
contextWindow: number;
|
|
39
|
+
maxTokens: number;
|
|
40
|
+
reasoning: boolean;
|
|
41
|
+
input: string[];
|
|
42
|
+
hasAuth: boolean;
|
|
43
|
+
supportedThinkingLevels: string[];
|
|
44
|
+
}>;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"AAyBA,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,QAAQ,EAAE,MAAM;CAI7B;AAID,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGlE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMnD;AAID,wBAAgB,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGtD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCtF;AAID,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,UAAU,CAAC,CA6BlE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAkBD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpF;AAID,wBAAgB,oBAAoB,IAAI;IACtC,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YACZ,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,aAAa,EAAE,MAAM,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,OAAO,CAAC;YACnB,KAAK,EAAE,MAAM,EAAE,CAAC;YAChB,OAAO,EAAE,OAAO,CAAC;YACjB,uBAAuB,EAAE,MAAM,EAAE,CAAC;SACnC,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAgDA"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Manager — wraps SDK config files (auth.json, settings.json, models.json).
|
|
3
|
+
*
|
|
4
|
+
* Ported from pi-forge/packages/server/src/config-manager.ts
|
|
5
|
+
* Simplified for pi-kot: no prompt/skill/tool overrides, no export/import.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile, writeFile, rename, unlink, mkdir } from "node:fs/promises";
|
|
8
|
+
import { join, dirname } from "node:path";
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
import { getSupportedThinkingLevels } from "@earendil-works/pi-ai";
|
|
11
|
+
import { AuthStorage, SettingsManager, ModelRegistry, } from "@earendil-works/pi-coding-agent";
|
|
12
|
+
import { config } from "./config.js";
|
|
13
|
+
// ── Paths ─────────────────────────────────────────────────────────────────
|
|
14
|
+
const PI_CONFIG_DIR = config.piConfigDir;
|
|
15
|
+
const AUTH_PATH = join(PI_CONFIG_DIR, "auth.json");
|
|
16
|
+
const MODELS_PATH = join(PI_CONFIG_DIR, "models.json");
|
|
17
|
+
// ── Errors ─────────────────────────────────────────────────────────────────
|
|
18
|
+
export class AuthProviderNotFoundError extends Error {
|
|
19
|
+
constructor(provider) {
|
|
20
|
+
super(`Auth provider "${provider}" not found`);
|
|
21
|
+
this.name = "AuthProviderNotFoundError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function readAuthSummary() {
|
|
25
|
+
const store = AuthStorage.create(AUTH_PATH);
|
|
26
|
+
const providers = {};
|
|
27
|
+
for (const name of store.list()) {
|
|
28
|
+
providers[name] = {
|
|
29
|
+
configured: store.has(name),
|
|
30
|
+
source: "stored",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return { providers };
|
|
34
|
+
}
|
|
35
|
+
export function writeApiKey(provider, apiKey) {
|
|
36
|
+
const store = AuthStorage.create(AUTH_PATH);
|
|
37
|
+
store.set(provider, { type: "api_key", key: apiKey });
|
|
38
|
+
}
|
|
39
|
+
export function removeApiKey(provider) {
|
|
40
|
+
const store = AuthStorage.create(AUTH_PATH);
|
|
41
|
+
if (!store.has(provider)) {
|
|
42
|
+
throw new AuthProviderNotFoundError(provider);
|
|
43
|
+
}
|
|
44
|
+
store.remove(provider);
|
|
45
|
+
}
|
|
46
|
+
// ── Settings (settings.json) ──────────────────────────────────────────────
|
|
47
|
+
export function readSettings() {
|
|
48
|
+
const mgr = SettingsManager.create(PI_CONFIG_DIR);
|
|
49
|
+
return mgr.getGlobalSettings();
|
|
50
|
+
}
|
|
51
|
+
export function updateSettings(patch) {
|
|
52
|
+
const mgr = SettingsManager.create(PI_CONFIG_DIR);
|
|
53
|
+
// Apply overrides for the fields that have individual setters
|
|
54
|
+
if (patch.defaultProvider !== undefined && patch.defaultProvider !== null) {
|
|
55
|
+
mgr.setDefaultProvider(String(patch.defaultProvider));
|
|
56
|
+
}
|
|
57
|
+
if (patch.defaultModel !== undefined && patch.defaultModel !== null) {
|
|
58
|
+
mgr.setDefaultModel(String(patch.defaultModel));
|
|
59
|
+
}
|
|
60
|
+
if (patch.defaultThinkingLevel !== undefined && patch.defaultThinkingLevel !== null) {
|
|
61
|
+
mgr.setDefaultThinkingLevel(patch.defaultThinkingLevel);
|
|
62
|
+
}
|
|
63
|
+
if (patch.skills !== undefined) {
|
|
64
|
+
mgr.setSkillPaths(patch.skills === null ? [] : patch.skills);
|
|
65
|
+
}
|
|
66
|
+
if (patch.enableSkillCommands !== undefined) {
|
|
67
|
+
mgr.setEnableSkillCommands(patch.enableSkillCommands === null ? false : Boolean(patch.enableSkillCommands));
|
|
68
|
+
}
|
|
69
|
+
mgr.flush();
|
|
70
|
+
// Handle orchestrator model fields (not managed by SDK SettingsManager)
|
|
71
|
+
const raw = mgr.getGlobalSettings();
|
|
72
|
+
if (patch.orchProvider !== undefined) {
|
|
73
|
+
raw.orchProvider = patch.orchProvider === null ? undefined : String(patch.orchProvider);
|
|
74
|
+
}
|
|
75
|
+
if (patch.orchModel !== undefined) {
|
|
76
|
+
raw.orchModel = patch.orchModel === null ? undefined : String(patch.orchModel);
|
|
77
|
+
}
|
|
78
|
+
// Write back to persist the extra fields
|
|
79
|
+
writeSettings(raw).catch(() => undefined);
|
|
80
|
+
return raw;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read models.json, redacting secret fields (apiKey, apiKeyCommand).
|
|
84
|
+
*/
|
|
85
|
+
export async function readModelsJsonRedacted() {
|
|
86
|
+
try {
|
|
87
|
+
const raw = await readFile(MODELS_PATH, "utf-8");
|
|
88
|
+
const parsed = JSON.parse(raw);
|
|
89
|
+
// Redact secrets in every provider config
|
|
90
|
+
const redacted = { providers: {} };
|
|
91
|
+
for (const [key, val] of Object.entries(parsed.providers ?? {})) {
|
|
92
|
+
if (typeof val === "object" && val !== null) {
|
|
93
|
+
const v = val;
|
|
94
|
+
const redactedVal = {};
|
|
95
|
+
for (const [k, vv] of Object.entries(v)) {
|
|
96
|
+
if ((k === "apiKey" || k === "apiKeyCommand") && vv !== undefined) {
|
|
97
|
+
redactedVal[k] = "***REDACTED***";
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
redactedVal[k] = vv;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
redacted.providers[key] = redactedVal;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
redacted.providers[key] = val;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return redacted;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err.code === "ENOENT") {
|
|
113
|
+
return { providers: {} };
|
|
114
|
+
}
|
|
115
|
+
throw err;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function writeModelsJson(data) {
|
|
119
|
+
await mkdir(dirname(MODELS_PATH), { recursive: true });
|
|
120
|
+
await writeFile(MODELS_PATH, JSON.stringify(data, null, 2), "utf-8");
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Atomic JSON write (tmp + rename) for config files.
|
|
124
|
+
* Pattern from pi-forge's config-manager.ts — crash-safe, no partial writes.
|
|
125
|
+
*/
|
|
126
|
+
async function atomicWriteJson(path, data) {
|
|
127
|
+
await mkdir(dirname(path), { recursive: true });
|
|
128
|
+
const tmp = `${path}.${randomUUID()}.tmp`;
|
|
129
|
+
await writeFile(tmp, JSON.stringify(data, null, 2), "utf8");
|
|
130
|
+
try {
|
|
131
|
+
await rename(tmp, path);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
await unlink(tmp).catch(() => undefined);
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Write settings.json atomically. Used by the per-session setModel route
|
|
140
|
+
* to restore the global default after the SDK mutates it as a side effect
|
|
141
|
+
* of session.setModel().
|
|
142
|
+
* Pattern from pi-forge's config-manager.ts writeSettings().
|
|
143
|
+
*/
|
|
144
|
+
export async function writeSettings(settings) {
|
|
145
|
+
const SETTINGS_FILE = join(PI_CONFIG_DIR, "settings.json");
|
|
146
|
+
await atomicWriteJson(SETTINGS_FILE, settings);
|
|
147
|
+
}
|
|
148
|
+
// ── Live providers listing (from SDK ModelRegistry) ──────────────────────
|
|
149
|
+
export function liveProvidersListing() {
|
|
150
|
+
const store = AuthStorage.create(AUTH_PATH);
|
|
151
|
+
const registry = ModelRegistry.create(store, MODELS_PATH);
|
|
152
|
+
const all = registry.getAll();
|
|
153
|
+
console.log("[config] total models:", all.length);
|
|
154
|
+
const grouped = new Map();
|
|
155
|
+
for (const m of all) {
|
|
156
|
+
let entry = grouped.get(m.provider);
|
|
157
|
+
if (entry === undefined) {
|
|
158
|
+
entry = { provider: m.provider, models: [] };
|
|
159
|
+
grouped.set(m.provider, entry);
|
|
160
|
+
}
|
|
161
|
+
const supportedThinkingLevels = (() => {
|
|
162
|
+
try {
|
|
163
|
+
return getSupportedThinkingLevels(m);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
})();
|
|
169
|
+
entry.models.push({
|
|
170
|
+
id: m.id,
|
|
171
|
+
name: m.name,
|
|
172
|
+
contextWindow: m.contextWindow,
|
|
173
|
+
maxTokens: m.maxTokens,
|
|
174
|
+
reasoning: m.reasoning,
|
|
175
|
+
input: m.input,
|
|
176
|
+
hasAuth: registry.hasConfiguredAuth(m),
|
|
177
|
+
supportedThinkingLevels,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return { providers: Array.from(grouped.values()) };
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../src/config-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6EAA6E;AAE7E,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAEvD,8EAA8E;AAE9E,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,QAAgB;QAC1B,KAAK,CAAC,kBAAkB,QAAQ,aAAa,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAcD,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAiC,EAAE,CAAC;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,SAAS,CAAC,IAAI,CAAC,GAAG;YAChB,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,QAAgB,EAAE,MAAc;IAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC,iBAAiB,EAAwC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAA8B;IAC3D,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClD,8DAA8D;IAC9D,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QAC1E,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;QACpE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,IAAI,KAAK,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;QACpF,GAAG,CAAC,uBAAuB,CACzB,KAAK,CAAC,oBAA+E,CACtF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,KAAK,CAAC,MAAmB,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;QAC5C,GAAG,CAAC,sBAAsB,CAAC,KAAK,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9G,CAAC;IACD,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,wEAAwE;IACxE,MAAM,GAAG,GAAG,GAAG,CAAC,iBAAiB,EAA6B,CAAC;IAC/D,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACrC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAClC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjF,CAAC;IACD,yCAAyC;IACzC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAE1C,OAAO,GAAG,CAAC;AACb,CAAC;AAQD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;QAC7C,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,EAAE,SAAS,EAAE,EAA6B,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;YAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,GAA8B,CAAC;gBACzC,MAAM,WAAW,GAA4B,EAAE,CAAC;gBAChD,KAAK,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,eAAe,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;wBAClE,WAAW,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;oBACtB,CAAC;gBACH,CAAC;gBACD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAChC,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAgB;IACpD,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAa;IACxD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAC;IAC1C,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAiC;IACnE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC3D,MAAM,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,4EAA4E;AAE5E,MAAM,UAAU,oBAAoB;IAelC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,IAAI,GAAG,EAYnB,CAAC;IAEL,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,uBAAuB,GAAa,CAAC,GAAG,EAAE;YAC9C,IAAI,CAAC;gBACH,OAAO,0BAA0B,CAAC,CAAqD,CAAC,CAAC;YAC3F,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACtC,uBAAuB;SACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const config: Readonly<{
|
|
2
|
+
readonly port: number;
|
|
3
|
+
readonly host: string;
|
|
4
|
+
readonly logLevel: string;
|
|
5
|
+
readonly isTest: boolean;
|
|
6
|
+
readonly trustProxy: boolean;
|
|
7
|
+
readonly workspacePath: string;
|
|
8
|
+
readonly piConfigDir: string;
|
|
9
|
+
readonly forgeDataDir: string;
|
|
10
|
+
readonly sessionDir: string;
|
|
11
|
+
readonly uiPassword: string | undefined;
|
|
12
|
+
readonly apiKey: string | undefined;
|
|
13
|
+
readonly clientDistPath: string;
|
|
14
|
+
readonly serveClient: boolean;
|
|
15
|
+
readonly corsOrigin: string | true;
|
|
16
|
+
readonly orchestrationEnabled: boolean;
|
|
17
|
+
readonly orchestrationMaxWorkersPerSupervisor: number;
|
|
18
|
+
readonly minimalUi: boolean;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;EA0BR,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
function readEnv(key) {
|
|
5
|
+
const v = process.env[key];
|
|
6
|
+
return v === undefined || v === "" ? undefined : v;
|
|
7
|
+
}
|
|
8
|
+
function readInt(key, fallback) {
|
|
9
|
+
const v = readEnv(key);
|
|
10
|
+
if (v === undefined)
|
|
11
|
+
return fallback;
|
|
12
|
+
const n = Number.parseInt(v, 10);
|
|
13
|
+
if (!Number.isFinite(n) || n < 0 || String(n) !== v.trim()) {
|
|
14
|
+
throw new Error(`config: ${key} must be a non-negative integer (got ${v})`);
|
|
15
|
+
}
|
|
16
|
+
return n;
|
|
17
|
+
}
|
|
18
|
+
function readBool(key, fallback) {
|
|
19
|
+
const v = readEnv(key)?.toLowerCase();
|
|
20
|
+
if (v === undefined)
|
|
21
|
+
return fallback;
|
|
22
|
+
return ["1", "true", "yes", "on"].includes(v);
|
|
23
|
+
}
|
|
24
|
+
const HOME = homedir();
|
|
25
|
+
if (HOME === "/" || HOME === "") {
|
|
26
|
+
throw new Error("config: os.homedir() returned empty path. " +
|
|
27
|
+
"Set HOME / USERPROFILE to a real user account.");
|
|
28
|
+
}
|
|
29
|
+
const WORKSPACE_PATH = resolve(readEnv("WORKSPACE_PATH") ?? resolve(HOME, ".pi-kot", "workspace", "default"));
|
|
30
|
+
const SESSION_DIR = resolve(readEnv("SESSION_DIR") ?? resolve(HOME, ".pi-kot", "sessions"));
|
|
31
|
+
const FORGE_DATA_DIR = resolve(readEnv("FORGE_DATA_DIR") ?? resolve(HOME, ".pi-kot"));
|
|
32
|
+
/** Path to built client dist (Vite output). Resolved relative to server dist/ */
|
|
33
|
+
const CLIENT_DIST_PATH = resolve(readEnv("CLIENT_DIST_PATH") ??
|
|
34
|
+
join(dirname(fileURLToPath(import.meta.url)), "..", "..", "client", "dist"));
|
|
35
|
+
export const config = Object.freeze({
|
|
36
|
+
port: readInt("PORT", 3333),
|
|
37
|
+
host: readEnv("HOST") ?? "0.0.0.0",
|
|
38
|
+
logLevel: readEnv("LOG_LEVEL") ?? "info",
|
|
39
|
+
isTest: (readEnv("NODE_ENV") ?? "") === "test",
|
|
40
|
+
trustProxy: readBool("TRUST_PROXY", false),
|
|
41
|
+
workspacePath: WORKSPACE_PATH,
|
|
42
|
+
piConfigDir: resolve(readEnv("PI_CONFIG_DIR") ?? resolve(HOME, ".pi", "agent")),
|
|
43
|
+
forgeDataDir: FORGE_DATA_DIR,
|
|
44
|
+
sessionDir: SESSION_DIR,
|
|
45
|
+
// Auth
|
|
46
|
+
uiPassword: readEnv("UI_PASSWORD"),
|
|
47
|
+
apiKey: readEnv("API_KEY"),
|
|
48
|
+
// Static client (production)
|
|
49
|
+
clientDistPath: CLIENT_DIST_PATH,
|
|
50
|
+
serveClient: readBool("SERVE_CLIENT", true),
|
|
51
|
+
// CORS
|
|
52
|
+
corsOrigin: readEnv("CORS_ORIGIN") ?? true,
|
|
53
|
+
// Orchestration
|
|
54
|
+
orchestrationEnabled: readBool("ORCHESTRATION_ENABLED", true),
|
|
55
|
+
orchestrationMaxWorkersPerSupervisor: readInt("ORCHESTRATION_MAX_WORKERS", 8),
|
|
56
|
+
minimalUi: readBool("MINIMAL_UI", false),
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension manager — runtime discovery + install for pi.dev extensions.
|
|
3
|
+
* Scans ~/.pi/agent/ for installed extensions, agents, and packages,
|
|
4
|
+
* and exposes a curated recommendation catalog optimised for pi-kot.
|
|
5
|
+
*
|
|
6
|
+
* Architecture adapted from pi-forge's extension dynamic detection pattern:
|
|
7
|
+
* detect → activate — UI features light up based on what's installed.
|
|
8
|
+
*/
|
|
9
|
+
export interface DiscoveredExtension {
|
|
10
|
+
/** Package / extension name */
|
|
11
|
+
name: string;
|
|
12
|
+
/** Where it was found: 'extensions_dir' | 'agents_dir' | 'package' | 'builtin' */
|
|
13
|
+
source: "extensions_dir" | "agents_dir" | "package" | "builtin";
|
|
14
|
+
/** Human description */
|
|
15
|
+
description: string;
|
|
16
|
+
/** Version string if available */
|
|
17
|
+
version?: string;
|
|
18
|
+
/** Original package identifier (e.g. "npm:@ayulab/pi-rewind"). Only set for package source. */
|
|
19
|
+
package?: string;
|
|
20
|
+
/** The agent type definitions this extension provides (e.g. scout, planner) */
|
|
21
|
+
agentTypes?: string[];
|
|
22
|
+
/** What UI features this extension enables */
|
|
23
|
+
enablesFeatures?: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface RecommendedExtension {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
description: string;
|
|
29
|
+
/** npm package name (including npm: prefix for pi) */
|
|
30
|
+
package: string;
|
|
31
|
+
/** Category for grouping in UI */
|
|
32
|
+
category: "orchestration" | "tools" | "ui" | "integration" | "productivity";
|
|
33
|
+
/** Whether this extension is already installed */
|
|
34
|
+
installed: boolean;
|
|
35
|
+
/** True when this extension has been tested and verified to work with pi-kot */
|
|
36
|
+
verified?: boolean;
|
|
37
|
+
/** What agent types this extension provides */
|
|
38
|
+
providesAgentTypes?: string[];
|
|
39
|
+
/** What UI features this enables */
|
|
40
|
+
enablesFeatures?: string[];
|
|
41
|
+
/** Icon emoji */
|
|
42
|
+
icon: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ExtensionsResponse {
|
|
45
|
+
/** Extensions currently detected in the pi agent directory */
|
|
46
|
+
detected: DiscoveredExtension[];
|
|
47
|
+
/** Curated recommendations optimised for pi-kot */
|
|
48
|
+
recommended: RecommendedExtension[];
|
|
49
|
+
/** Agent definitions found (scout, planner, etc.) */
|
|
50
|
+
agents: AgentDef[];
|
|
51
|
+
}
|
|
52
|
+
export interface AgentDef {
|
|
53
|
+
name: string;
|
|
54
|
+
description: string;
|
|
55
|
+
model?: string;
|
|
56
|
+
tools?: string[];
|
|
57
|
+
source: "file" | "builtin";
|
|
58
|
+
}
|
|
59
|
+
export declare function discoverExtensions(): Promise<ExtensionsResponse>;
|
|
60
|
+
export declare function uninstallExtension(packageName: string): Promise<{
|
|
61
|
+
success: boolean;
|
|
62
|
+
error?: string;
|
|
63
|
+
}>;
|
|
64
|
+
export declare function installExtension(packageName: string): Promise<{
|
|
65
|
+
success: boolean;
|
|
66
|
+
error?: string;
|
|
67
|
+
}>;
|
|
68
|
+
/** Built-in agent definitions (builtin defaults like pi-subagents examples) */
|
|
69
|
+
export declare const builtinAgentDefs: AgentDef[];
|
|
70
|
+
//# sourceMappingURL=extension-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-manager.d.ts","sourceRoot":"","sources":["../src/extension-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,mBAAmB;IAClC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,MAAM,EAAE,gBAAgB,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IAChE,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,QAAQ,EAAE,eAAe,GAAG,OAAO,GAAG,IAAI,GAAG,aAAa,GAAG,cAAc,CAAC;IAC5E,kDAAkD;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,8DAA8D;IAC9D,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,mDAAmD;IACnD,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,qDAAqD;IACrD,MAAM,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AA2QD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAqDtE;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC/C;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkC/C;AAED,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EA6BtC,CAAC"}
|