flavor-code 1.2.11 → 1.2.13
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 +36 -35
- package/README.zh-CN.md +36 -35
- package/dist/{app-MXWPZBEU.js → app-Z3YWFIBB.js} +5 -3
- package/dist/astgraph/db.mjs +237 -0
- package/dist/astgraph/extract.mjs +239 -0
- package/dist/astgraph/flavor-plugin.json +25 -0
- package/dist/astgraph/grammars.mjs +68 -0
- package/dist/astgraph/index.js +301 -0
- package/dist/astgraph/indexer.mjs +175 -0
- package/dist/astgraph/query.mjs +165 -0
- package/dist/astgraph/resolve.mjs +93 -0
- package/dist/astgraph/vendor/tree-sitter-javascript.wasm +0 -0
- package/dist/astgraph/vendor/tree-sitter-tsx.wasm +0 -0
- package/dist/astgraph/vendor/tree-sitter-typescript.wasm +0 -0
- package/dist/astgraph/vendor/tree-sitter.js +3980 -0
- package/dist/astgraph/vendor/tree-sitter.wasm +0 -0
- package/dist/astgraph/vendor/zod/LICENSE +21 -0
- package/dist/astgraph/vendor/zod/index.js +4 -0
- package/dist/astgraph/vendor/zod/locales/index.js +1 -0
- package/dist/astgraph/vendor/zod/locales/package.json +7 -0
- package/dist/astgraph/vendor/zod/package.json +135 -0
- package/dist/astgraph/vendor/zod/v4/classic/checks.js +1 -0
- package/dist/astgraph/vendor/zod/v4/classic/coerce.js +17 -0
- package/dist/astgraph/vendor/zod/v4/classic/compat.js +31 -0
- package/dist/astgraph/vendor/zod/v4/classic/errors.js +48 -0
- package/dist/astgraph/vendor/zod/v4/classic/external.js +20 -0
- package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +599 -0
- package/dist/astgraph/vendor/zod/v4/classic/index.js +4 -0
- package/dist/astgraph/vendor/zod/v4/classic/iso.js +30 -0
- package/dist/astgraph/vendor/zod/v4/classic/package.json +7 -0
- package/dist/astgraph/vendor/zod/v4/classic/parse.js +15 -0
- package/dist/astgraph/vendor/zod/v4/classic/schemas.js +1395 -0
- package/dist/astgraph/vendor/zod/v4/core/api.js +1087 -0
- package/dist/astgraph/vendor/zod/v4/core/checks.js +575 -0
- package/dist/astgraph/vendor/zod/v4/core/core.js +78 -0
- package/dist/astgraph/vendor/zod/v4/core/doc.js +35 -0
- package/dist/astgraph/vendor/zod/v4/core/errors.js +185 -0
- package/dist/astgraph/vendor/zod/v4/core/index.js +16 -0
- package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +95 -0
- package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +601 -0
- package/dist/astgraph/vendor/zod/v4/core/json-schema.js +1 -0
- package/dist/astgraph/vendor/zod/v4/core/package.json +7 -0
- package/dist/astgraph/vendor/zod/v4/core/parse.js +93 -0
- package/dist/astgraph/vendor/zod/v4/core/regexes.js +139 -0
- package/dist/astgraph/vendor/zod/v4/core/registries.js +51 -0
- package/dist/astgraph/vendor/zod/v4/core/schemas.js +2239 -0
- package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +1 -0
- package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +448 -0
- package/dist/astgraph/vendor/zod/v4/core/util.js +674 -0
- package/dist/astgraph/vendor/zod/v4/core/versions.js +5 -0
- package/dist/astgraph/vendor/zod/v4/index.js +3 -0
- package/dist/astgraph/vendor/zod/v4/locales/ar.js +106 -0
- package/dist/astgraph/vendor/zod/v4/locales/az.js +105 -0
- package/dist/astgraph/vendor/zod/v4/locales/be.js +156 -0
- package/dist/astgraph/vendor/zod/v4/locales/bg.js +120 -0
- package/dist/astgraph/vendor/zod/v4/locales/ca.js +107 -0
- package/dist/astgraph/vendor/zod/v4/locales/cs.js +111 -0
- package/dist/astgraph/vendor/zod/v4/locales/da.js +115 -0
- package/dist/astgraph/vendor/zod/v4/locales/de.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/el.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/en.js +113 -0
- package/dist/astgraph/vendor/zod/v4/locales/eo.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/es.js +132 -0
- package/dist/astgraph/vendor/zod/v4/locales/fa.js +114 -0
- package/dist/astgraph/vendor/zod/v4/locales/fi.js +112 -0
- package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +107 -0
- package/dist/astgraph/vendor/zod/v4/locales/fr.js +125 -0
- package/dist/astgraph/vendor/zod/v4/locales/he.js +214 -0
- package/dist/astgraph/vendor/zod/v4/locales/hr.js +122 -0
- package/dist/astgraph/vendor/zod/v4/locales/hu.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/hy.js +147 -0
- package/dist/astgraph/vendor/zod/v4/locales/id.js +106 -0
- package/dist/astgraph/vendor/zod/v4/locales/index.js +52 -0
- package/dist/astgraph/vendor/zod/v4/locales/is.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/it.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/ja.js +107 -0
- package/dist/astgraph/vendor/zod/v4/locales/ka.js +112 -0
- package/dist/astgraph/vendor/zod/v4/locales/kh.js +5 -0
- package/dist/astgraph/vendor/zod/v4/locales/km.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/ko.js +111 -0
- package/dist/astgraph/vendor/zod/v4/locales/lt.js +203 -0
- package/dist/astgraph/vendor/zod/v4/locales/mk.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/ms.js +107 -0
- package/dist/astgraph/vendor/zod/v4/locales/nl.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/no.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/ota.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/package.json +7 -0
- package/dist/astgraph/vendor/zod/v4/locales/pl.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/ps.js +114 -0
- package/dist/astgraph/vendor/zod/v4/locales/pt.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/ro.js +119 -0
- package/dist/astgraph/vendor/zod/v4/locales/ru.js +156 -0
- package/dist/astgraph/vendor/zod/v4/locales/sl.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/sv.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/ta.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/th.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/tr.js +105 -0
- package/dist/astgraph/vendor/zod/v4/locales/ua.js +5 -0
- package/dist/astgraph/vendor/zod/v4/locales/uk.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/ur.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/uz.js +110 -0
- package/dist/astgraph/vendor/zod/v4/locales/vi.js +108 -0
- package/dist/astgraph/vendor/zod/v4/locales/yo.js +107 -0
- package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +109 -0
- package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +107 -0
- package/dist/astgraph/vendor/zod/v4/mini/checks.js +1 -0
- package/dist/astgraph/vendor/zod/v4/mini/coerce.js +22 -0
- package/dist/astgraph/vendor/zod/v4/mini/external.js +14 -0
- package/dist/astgraph/vendor/zod/v4/mini/index.js +3 -0
- package/dist/astgraph/vendor/zod/v4/mini/iso.js +34 -0
- package/dist/astgraph/vendor/zod/v4/mini/package.json +7 -0
- package/dist/astgraph/vendor/zod/v4/mini/parse.js +1 -0
- package/dist/astgraph/vendor/zod/v4/mini/schemas.js +961 -0
- package/dist/astgraph/vendor/zod/v4/package.json +7 -0
- package/dist/{chunk-EY6KE7L2.js → chunk-G6Q2Y2A7.js} +1 -1
- package/dist/{chunk-OT5XIN6G.js → chunk-Y5MZDG7I.js} +161 -18
- package/dist/cli.js +3 -3
- package/dist/desktop/main.js +161 -18
- package/dist/desktop-renderer/assets/{index-sgEm4kjf.js → index-CCnSpff0.js} +1 -1
- package/dist/desktop-renderer/index.html +1 -1
- package/dist/init/project.d.ts +8 -0
- package/dist/models/structured.d.ts +14 -0
- package/dist/permissions/engine.d.ts +2 -0
- package/dist/plugins/types.d.ts +2 -2
- package/dist/sdk/index.js +2 -2
- package/dist/tools/shell.d.ts +1 -1
- package/dist/tools/types.d.ts +2 -0
- package/dist/ui/session.d.ts +4 -1
- package/package.json +5 -3
package/dist/desktop/main.js
CHANGED
|
@@ -5791,6 +5791,7 @@ function withStructuredOutput(options) {
|
|
|
5791
5791
|
}
|
|
5792
5792
|
const tool = modelToolFromZod(options.name, options.description, options.schema);
|
|
5793
5793
|
const maxAttempts = retry.maxRetries + 1;
|
|
5794
|
+
const jsonSchema = tool.inputSchema;
|
|
5794
5795
|
const model = {
|
|
5795
5796
|
async *stream(request) {
|
|
5796
5797
|
let candidate;
|
|
@@ -5824,6 +5825,7 @@ function withStructuredOutput(options) {
|
|
|
5824
5825
|
candidate = void 0;
|
|
5825
5826
|
rawCandidate = void 0;
|
|
5826
5827
|
let candidateCount = 0;
|
|
5828
|
+
let textCandidate = "";
|
|
5827
5829
|
let attemptError;
|
|
5828
5830
|
let usage;
|
|
5829
5831
|
for await (const event of adapter.stream(modelRequest)) {
|
|
@@ -5841,6 +5843,8 @@ function withStructuredOutput(options) {
|
|
|
5841
5843
|
rawCandidate = event.rawInput;
|
|
5842
5844
|
secrets.add(event.rawInput);
|
|
5843
5845
|
attemptError = event.error;
|
|
5846
|
+
} else if (event.type === "text") {
|
|
5847
|
+
textCandidate += event.text;
|
|
5844
5848
|
} else if (event.type === "usage") {
|
|
5845
5849
|
usage = { inputTokens: event.inputTokens, outputTokens: event.outputTokens };
|
|
5846
5850
|
} else if (event.type === "done") {
|
|
@@ -5851,6 +5855,17 @@ function withStructuredOutput(options) {
|
|
|
5851
5855
|
}
|
|
5852
5856
|
if (usage !== void 0) yield { type: "usage", ...usage };
|
|
5853
5857
|
if (attemptError === void 0) {
|
|
5858
|
+
if (candidateCount === 0 && textCandidate.trim() !== "") {
|
|
5859
|
+
const extracted = extractJsonObject(textCandidate);
|
|
5860
|
+
if (extracted !== void 0) {
|
|
5861
|
+
candidate = extracted;
|
|
5862
|
+
candidateCount = 1;
|
|
5863
|
+
rawCandidate = textCandidate;
|
|
5864
|
+
}
|
|
5865
|
+
}
|
|
5866
|
+
if (candidateCount === 1 && candidate !== null && typeof candidate === "object") {
|
|
5867
|
+
candidate = coerceByJsonSchema(candidate, jsonSchema);
|
|
5868
|
+
}
|
|
5854
5869
|
if (candidateCount !== 1) {
|
|
5855
5870
|
attemptError = {
|
|
5856
5871
|
code: "invalid_tool_arguments",
|
|
@@ -5923,6 +5938,86 @@ function withStructuredOutput(options) {
|
|
|
5923
5938
|
function strictJsonSchema(schema) {
|
|
5924
5939
|
return ensureStrictSchema(z12.toJSONSchema(schema));
|
|
5925
5940
|
}
|
|
5941
|
+
function extractJsonObject(text) {
|
|
5942
|
+
const trimmed = text.trim();
|
|
5943
|
+
const fenced = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/u);
|
|
5944
|
+
const candidates = fenced !== null && fenced[1] !== void 0 ? [fenced[1].trim(), trimmed] : [trimmed];
|
|
5945
|
+
for (const candidate of candidates) {
|
|
5946
|
+
try {
|
|
5947
|
+
const parsed = JSON.parse(candidate);
|
|
5948
|
+
if (parsed !== null && typeof parsed === "object") return parsed;
|
|
5949
|
+
} catch {
|
|
5950
|
+
}
|
|
5951
|
+
}
|
|
5952
|
+
const start = trimmed.indexOf("{");
|
|
5953
|
+
if (start >= 0) {
|
|
5954
|
+
let depth = 0;
|
|
5955
|
+
let inString = false;
|
|
5956
|
+
let escaped = false;
|
|
5957
|
+
for (let index = start; index < trimmed.length; index += 1) {
|
|
5958
|
+
const char = trimmed[index];
|
|
5959
|
+
if (inString) {
|
|
5960
|
+
if (escaped) escaped = false;
|
|
5961
|
+
else if (char === "\\") escaped = true;
|
|
5962
|
+
else if (char === '"') inString = false;
|
|
5963
|
+
continue;
|
|
5964
|
+
}
|
|
5965
|
+
if (char === '"') inString = true;
|
|
5966
|
+
else if (char === "{") depth += 1;
|
|
5967
|
+
else if (char === "}") {
|
|
5968
|
+
depth -= 1;
|
|
5969
|
+
if (depth === 0) {
|
|
5970
|
+
try {
|
|
5971
|
+
const parsed = JSON.parse(trimmed.slice(start, index + 1));
|
|
5972
|
+
if (parsed !== null && typeof parsed === "object") return parsed;
|
|
5973
|
+
} catch {
|
|
5974
|
+
return void 0;
|
|
5975
|
+
}
|
|
5976
|
+
}
|
|
5977
|
+
}
|
|
5978
|
+
}
|
|
5979
|
+
}
|
|
5980
|
+
return void 0;
|
|
5981
|
+
}
|
|
5982
|
+
function coerceByJsonSchema(value, schema) {
|
|
5983
|
+
if (schema === null || schema === void 0 || typeof schema !== "object") return value;
|
|
5984
|
+
const node = schema;
|
|
5985
|
+
const branches = [
|
|
5986
|
+
...Array.isArray(node.anyOf) ? node.anyOf : [],
|
|
5987
|
+
...Array.isArray(node.allOf) ? node.allOf : []
|
|
5988
|
+
].filter((branch) => branch !== null && typeof branch === "object");
|
|
5989
|
+
const types = [];
|
|
5990
|
+
const pushTypes = (candidate) => {
|
|
5991
|
+
if (typeof candidate.type === "string") types.push(candidate.type);
|
|
5992
|
+
else if (Array.isArray(candidate.type)) types.push(...candidate.type);
|
|
5993
|
+
};
|
|
5994
|
+
pushTypes(node);
|
|
5995
|
+
for (const branch of branches) pushTypes(branch);
|
|
5996
|
+
if (types.includes("null") && (value === null || value === void 0)) return value;
|
|
5997
|
+
if ((types.includes("number") || types.includes("integer")) && typeof value === "string" && value.trim() !== "") {
|
|
5998
|
+
const numeric = Number(value);
|
|
5999
|
+
if (Number.isFinite(numeric)) return numeric;
|
|
6000
|
+
}
|
|
6001
|
+
if (types.includes("boolean") && typeof value === "string") {
|
|
6002
|
+
const lowered = value.trim().toLowerCase();
|
|
6003
|
+
if (lowered === "true") return true;
|
|
6004
|
+
if (lowered === "false") return false;
|
|
6005
|
+
}
|
|
6006
|
+
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
6007
|
+
const properties = node.properties ?? branches.find((branch) => branch.properties)?.properties;
|
|
6008
|
+
if (properties !== void 0) {
|
|
6009
|
+
const output = {};
|
|
6010
|
+
for (const [key, child] of Object.entries(value)) {
|
|
6011
|
+
output[key] = properties[key] !== void 0 ? coerceByJsonSchema(child, properties[key]) : child;
|
|
6012
|
+
}
|
|
6013
|
+
return output;
|
|
6014
|
+
}
|
|
6015
|
+
}
|
|
6016
|
+
if (types.includes("array") && Array.isArray(value) && node.items !== void 0) {
|
|
6017
|
+
return value.map((item) => coerceByJsonSchema(item, node.items));
|
|
6018
|
+
}
|
|
6019
|
+
return value;
|
|
6020
|
+
}
|
|
5926
6021
|
function modelToolFromZod(name, description, schema) {
|
|
5927
6022
|
return { name, description, inputSchema: strictJsonSchema(schema) };
|
|
5928
6023
|
}
|
|
@@ -6285,6 +6380,14 @@ var AgentLoop = class {
|
|
|
6285
6380
|
toolCalls.push({ id: collected.id, name: collected.name, input: validation.input });
|
|
6286
6381
|
continue;
|
|
6287
6382
|
}
|
|
6383
|
+
if (collected.kind === "valid") {
|
|
6384
|
+
const coerced = coerceByJsonSchema(collected.input, strictJsonSchema(definition.inputSchema));
|
|
6385
|
+
const revalidation = this.#options.runtime.validate({ ...collected, input: coerced });
|
|
6386
|
+
if (revalidation.ok) {
|
|
6387
|
+
toolCalls.push({ id: collected.id, name: collected.name, input: revalidation.input });
|
|
6388
|
+
continue;
|
|
6389
|
+
}
|
|
6390
|
+
}
|
|
6288
6391
|
const repairModelId = this.#options.fallbackModelId ?? this.#options.modelId;
|
|
6289
6392
|
const invalidOutput = collected.kind === "invalid" ? collected.rawInput : serializeToolInput(collected.input);
|
|
6290
6393
|
const structured = withStructuredOutput({
|
|
@@ -6652,11 +6755,12 @@ var PermissionEngine = class {
|
|
|
6652
6755
|
}
|
|
6653
6756
|
}
|
|
6654
6757
|
const inside = paths.every((path) => classifyPath(this.#lexicalWorkspace, this.#workspace, path).inside);
|
|
6758
|
+
const isRead = READ_TOOLS.has(request.tool) || request.readOnly === true;
|
|
6655
6759
|
if (this.#profile === "d2c") return this.#d2cDecision(request, inside);
|
|
6656
6760
|
if (this.#mode === "plan") {
|
|
6657
|
-
return
|
|
6761
|
+
return isRead ? { decision: "allow" } : { decision: "deny", reason: "Plan mode is read-only" };
|
|
6658
6762
|
}
|
|
6659
|
-
if (
|
|
6763
|
+
if (isRead) {
|
|
6660
6764
|
return { decision: "allow" };
|
|
6661
6765
|
}
|
|
6662
6766
|
if (DESTRUCTIVE_TOOLS.has(request.tool)) {
|
|
@@ -6679,7 +6783,7 @@ var PermissionEngine = class {
|
|
|
6679
6783
|
if ((request.paths?.length ?? 0) > 0 && !inside) {
|
|
6680
6784
|
return { decision: "deny", reason: "D2C tools must remain in the workspace" };
|
|
6681
6785
|
}
|
|
6682
|
-
if (READ_TOOLS.has(request.tool)) return { decision: "allow" };
|
|
6786
|
+
if (READ_TOOLS.has(request.tool) || request.readOnly === true) return { decision: "allow" };
|
|
6683
6787
|
if (isDeletionTool(request.tool)) {
|
|
6684
6788
|
return { decision: "ask", reason: "Deletion requires approval", allowAlways: false };
|
|
6685
6789
|
}
|
|
@@ -7218,7 +7322,8 @@ var ToolRuntime = class {
|
|
|
7218
7322
|
const request = {
|
|
7219
7323
|
agent: context.agent,
|
|
7220
7324
|
tool: tool.name,
|
|
7221
|
-
...tool.permissions?.(input) ?? { paths: tool.paths(input) }
|
|
7325
|
+
...tool.permissions?.(input) ?? { paths: tool.paths(input) },
|
|
7326
|
+
...tool.readOnly === true ? { readOnly: true } : {}
|
|
7222
7327
|
};
|
|
7223
7328
|
let permission = this.#permissions.decide(request);
|
|
7224
7329
|
const nonCacheableApproval = request.allowAlways === false || permission.allowAlways === false;
|
|
@@ -7926,7 +8031,7 @@ function createIncidentReporter(options) {
|
|
|
7926
8031
|
|
|
7927
8032
|
// src/init/project.ts
|
|
7928
8033
|
import { lstat as lstat3, mkdir as mkdir7, readdir as readdir2, readFile as readFile7, realpath as realpath5, writeFile as writeFile4 } from "fs/promises";
|
|
7929
|
-
import { readFileSync } from "fs";
|
|
8034
|
+
import { copyFileSync, mkdirSync, readdirSync, readFileSync } from "fs";
|
|
7930
8035
|
import { basename as basename4, dirname as dirname7, isAbsolute as isAbsolute6, join as join8, relative as relative6, sep as sep6 } from "path";
|
|
7931
8036
|
import { fileURLToPath } from "url";
|
|
7932
8037
|
var GENERATED_START = "<!-- flavor-code:start -->";
|
|
@@ -8191,6 +8296,7 @@ async function inspectProject(cwd) {
|
|
|
8191
8296
|
languages.add("Python");
|
|
8192
8297
|
}
|
|
8193
8298
|
const gitignorePath = await pathKind(join8(cwd, ".gitignore"), root) === "file" ? ".gitignore" : void 0;
|
|
8299
|
+
const hasCodeGraph = await pathKind(join8(cwd, ".flavor", "astgraph", "index.db"), root) === "file";
|
|
8194
8300
|
return {
|
|
8195
8301
|
cwd,
|
|
8196
8302
|
projectName,
|
|
@@ -8206,6 +8312,7 @@ async function inspectProject(cwd) {
|
|
|
8206
8312
|
instructionFiles,
|
|
8207
8313
|
configFiles,
|
|
8208
8314
|
...gitignorePath === void 0 ? {} : { gitignorePath },
|
|
8315
|
+
hasCodeGraph,
|
|
8209
8316
|
cautions
|
|
8210
8317
|
};
|
|
8211
8318
|
}
|
|
@@ -8226,6 +8333,12 @@ function renderGeneratedSection(facts, newline) {
|
|
|
8226
8333
|
"Do not inspect dependency directories or generated output unless explicitly required.",
|
|
8227
8334
|
...facts.cautions
|
|
8228
8335
|
];
|
|
8336
|
+
const searchSection = facts.hasCodeGraph ? [
|
|
8337
|
+
"",
|
|
8338
|
+
"## Search",
|
|
8339
|
+
"",
|
|
8340
|
+
"- A code graph index is available (`.flavor/astgraph/index.db`): pair `ast_search` with `grep`/`glob` to locate symbols, and use `ast_callers`/`ast_callees`/`ast_impact`/`ast_context` to trace reachability instead of reading files broadly."
|
|
8341
|
+
] : [];
|
|
8229
8342
|
return [
|
|
8230
8343
|
GENERATED_START,
|
|
8231
8344
|
"## Overview",
|
|
@@ -8237,6 +8350,7 @@ function renderGeneratedSection(facts, newline) {
|
|
|
8237
8350
|
"## Layout",
|
|
8238
8351
|
"",
|
|
8239
8352
|
bulletList(facts.sourceDirectories, "No conventional source directories detected.", true, newline),
|
|
8353
|
+
...searchSection,
|
|
8240
8354
|
"",
|
|
8241
8355
|
"## Build",
|
|
8242
8356
|
"",
|
|
@@ -8386,9 +8500,30 @@ async function copyCodeIslandPlugin(cwd) {
|
|
|
8386
8500
|
await writeFile4(join8(pluginDir, name), content);
|
|
8387
8501
|
}
|
|
8388
8502
|
}
|
|
8503
|
+
var ASTGRAPH_SRC_DIR = join8(dirname7(fileURLToPath(import.meta.url)), "astgraph");
|
|
8504
|
+
async function copyAstgraphPlugin(cwd) {
|
|
8505
|
+
const pluginDir = join8(cwd, ".flavor", "plugins", "astgraph");
|
|
8506
|
+
try {
|
|
8507
|
+
await lstat3(pluginDir);
|
|
8508
|
+
return;
|
|
8509
|
+
} catch (error) {
|
|
8510
|
+
if (!isMissingPathError(error)) throw error;
|
|
8511
|
+
}
|
|
8512
|
+
copyDirectory(ASTGRAPH_SRC_DIR, pluginDir);
|
|
8513
|
+
}
|
|
8514
|
+
function copyDirectory(from, to) {
|
|
8515
|
+
mkdirSync(to, { recursive: true, mode: 448 });
|
|
8516
|
+
for (const entry2 of readdirSync(from, { withFileTypes: true })) {
|
|
8517
|
+
const source = join8(from, entry2.name);
|
|
8518
|
+
const target = join8(to, entry2.name);
|
|
8519
|
+
if (entry2.isDirectory()) copyDirectory(source, target);
|
|
8520
|
+
else if (entry2.isFile()) copyFileSync(source, target);
|
|
8521
|
+
}
|
|
8522
|
+
}
|
|
8389
8523
|
async function initializeFlavor(cwd) {
|
|
8390
8524
|
await ensureFlavorDirectories(cwd);
|
|
8391
8525
|
await copyCodeIslandPlugin(cwd);
|
|
8526
|
+
await copyAstgraphPlugin(cwd);
|
|
8392
8527
|
await createExampleFlavorConfig(cwd);
|
|
8393
8528
|
const facts = await inspectProject(cwd);
|
|
8394
8529
|
const path = join8(cwd, "FLAVOR.md");
|
|
@@ -9797,7 +9932,9 @@ var ShellInput = z19.object({
|
|
|
9797
9932
|
args: z19.array(z19.string()),
|
|
9798
9933
|
cwd: z19.string().min(1).nullable().optional(),
|
|
9799
9934
|
timeoutMs: z19.coerce.number().int().positive().max(864e5).nullable().optional(),
|
|
9800
|
-
|
|
9935
|
+
// Accepts booleans and their string forms (weak-typed models emit "true");
|
|
9936
|
+
// kept transform-free so the schema converts to JSON Schema for providers.
|
|
9937
|
+
background: z19.union([z19.boolean(), z19.string().refine((value) => value === "true" || value === "false")]).optional()
|
|
9801
9938
|
});
|
|
9802
9939
|
function createShellTool(workspace, options = {}) {
|
|
9803
9940
|
const root = resolve11(workspace);
|
|
@@ -9813,7 +9950,7 @@ function createShellTool(workspace, options = {}) {
|
|
|
9813
9950
|
inputSchema: ShellInput,
|
|
9814
9951
|
paths: (input) => [workingDirectory(root, input.cwd ?? void 0)],
|
|
9815
9952
|
summarize: (input) => [input.command, ...input.args].join(" "),
|
|
9816
|
-
presentCall: (input) => ({ kind: "terminal", variant: "command", title: input.background ? "Starting background command" : "Running command", command: [input.command, ...input.args].join(" "), state: "running" }),
|
|
9953
|
+
presentCall: (input) => ({ kind: "terminal", variant: "command", title: backgroundFlag(input.background) ? "Starting background command" : "Running command", command: [input.command, ...input.args].join(" "), state: "running" }),
|
|
9817
9954
|
permissions: (input) => ({
|
|
9818
9955
|
paths: [workingDirectory(root, input.cwd ?? void 0)],
|
|
9819
9956
|
command: input.command,
|
|
@@ -9830,7 +9967,7 @@ function createShellTool(workspace, options = {}) {
|
|
|
9830
9967
|
} : { kind: "terminal", variant: "command", title: [input.command, ...input.args].join(" "), command: [input.command, ...input.args].join(" "), stdout: output.stdout, stderr: output.stderr, exitCode: output.exitCode, state: output.terminationReason === "cancelled" ? "cancelled" : output.exitCode === 0 ? "completed" : "failed", truncated: output.truncated },
|
|
9831
9968
|
execute: async (input, signal, context) => {
|
|
9832
9969
|
const timeoutMs = input.timeoutMs ?? defaultTimeoutMs;
|
|
9833
|
-
if (input.background
|
|
9970
|
+
if (backgroundFlag(input.background)) {
|
|
9834
9971
|
if (options.jobs === void 0) throw new Error("Background shell requires a JobRegistry");
|
|
9835
9972
|
const cancellation = new AbortController();
|
|
9836
9973
|
const job = options.jobs.create({
|
|
@@ -10080,6 +10217,9 @@ var AdaptiveOutputDecoder = class {
|
|
|
10080
10217
|
return text;
|
|
10081
10218
|
}
|
|
10082
10219
|
};
|
|
10220
|
+
function backgroundFlag(value) {
|
|
10221
|
+
return value === true || value === "true";
|
|
10222
|
+
}
|
|
10083
10223
|
function workingDirectory(root, cwd = ".") {
|
|
10084
10224
|
const candidate = resolve11(root, cwd);
|
|
10085
10225
|
const delta = relative10(root, candidate);
|
|
@@ -11999,7 +12139,7 @@ var PluginHost = class {
|
|
|
11999
12139
|
return writeFile6(allowed, data2);
|
|
12000
12140
|
}
|
|
12001
12141
|
}) }),
|
|
12002
|
-
registerCommand: (name, value) => register("command", name, [value]),
|
|
12142
|
+
registerCommand: (name, value, description) => register("command", name, [value, description]),
|
|
12003
12143
|
registerTool: (name, value) => register("tool", name, [value]),
|
|
12004
12144
|
registerHook: (name, value, options) => register("hook", name, [value, options]),
|
|
12005
12145
|
registerSkillRoot: (name, root) => {
|
|
@@ -17949,7 +18089,7 @@ var FlavorSession = class {
|
|
|
17949
18089
|
} catch {
|
|
17950
18090
|
}
|
|
17951
18091
|
}
|
|
17952
|
-
const command = parseSlashCommand(prompt, this.#services.pluginCommands(), skillNames);
|
|
18092
|
+
const command = parseSlashCommand(prompt, this.#services.pluginCommands().map(({ name }) => name), skillNames);
|
|
17953
18093
|
if (command !== null) await this.#dispatch(command, controller2.signal);
|
|
17954
18094
|
else for await (const event of this.#services.run(prompt, controller2.signal, {
|
|
17955
18095
|
getSteeringMessages: () => this.#drainMessages("steer").map((item) => item.text),
|
|
@@ -20428,7 +20568,8 @@ import { z as z34 } from "zod";
|
|
|
20428
20568
|
import { resolve as resolve28 } from "path";
|
|
20429
20569
|
var Id = z34.string().regex(/^term-[a-f0-9-]+$/);
|
|
20430
20570
|
var OpenInput = z34.object({ cwd: z34.string().optional(), shell: z34.string().optional(), args: z34.array(z34.string()).optional(), columns: z34.coerce.number().int().min(10).max(500).optional(), rows: z34.coerce.number().int().min(2).max(300).optional() });
|
|
20431
|
-
var
|
|
20571
|
+
var OptionalBoolean = z34.union([z34.boolean(), z34.string().refine((value) => value === "true" || value === "false")]);
|
|
20572
|
+
var WriteInput2 = z34.object({ id: Id, data: z34.string().max(1e5), enter: OptionalBoolean.optional() });
|
|
20432
20573
|
var ReadInput3 = z34.object({ id: Id, cursor: z34.coerce.number().int().min(0).optional() });
|
|
20433
20574
|
var ResizeInput = z34.object({ id: Id, columns: z34.coerce.number().int().min(10).max(500), rows: z34.coerce.number().int().min(2).max(300) });
|
|
20434
20575
|
var CloseInput = z34.object({ id: Id });
|
|
@@ -20457,8 +20598,9 @@ function createTerminalTools(terminals, workspace = process.cwd()) {
|
|
|
20457
20598
|
paths: () => [],
|
|
20458
20599
|
permissions: (input) => ({ paths: [], command: input.data, args: [] }),
|
|
20459
20600
|
execute: async (input, _signal, context) => {
|
|
20460
|
-
|
|
20461
|
-
|
|
20601
|
+
const enter = input.enter === true || input.enter === "true";
|
|
20602
|
+
terminals.write(input.id, owner(context), input.data + (enter ? "\r" : ""));
|
|
20603
|
+
return { id: input.id, written: input.data.length + (enter ? 1 : 0) };
|
|
20462
20604
|
}
|
|
20463
20605
|
},
|
|
20464
20606
|
{
|
|
@@ -21532,15 +21674,16 @@ async function createProductionRuntime(options) {
|
|
|
21532
21674
|
projectPluginDirs: [join26(workspace, ".flavor", "plugins")],
|
|
21533
21675
|
config,
|
|
21534
21676
|
registrations: {
|
|
21535
|
-
command(name, handler) {
|
|
21677
|
+
command(name, handler, description) {
|
|
21536
21678
|
if (typeof handler !== "function") throw new Error(`Plugin command "${name}" must be a function.`);
|
|
21537
21679
|
if (name !== name.toLowerCase()) throw new Error(`Plugin command "${name}" must be lowercase.`);
|
|
21538
21680
|
if (MVP_COMMANDS.includes(name) || name === "ide" || pluginCommands.has(name)) {
|
|
21539
21681
|
throw new Error(`Plugin command "${name}" conflicts with a built-in or registered command.`);
|
|
21540
21682
|
}
|
|
21541
|
-
|
|
21683
|
+
const desc = typeof description === "string" && description.trim().length > 0 ? description.trim() : void 0;
|
|
21684
|
+
pluginCommands.set(name, desc === void 0 ? { handler } : { handler, description: desc });
|
|
21542
21685
|
return () => {
|
|
21543
|
-
if (pluginCommands.get(name) === handler) pluginCommands.delete(name);
|
|
21686
|
+
if (pluginCommands.get(name)?.handler === handler) pluginCommands.delete(name);
|
|
21544
21687
|
};
|
|
21545
21688
|
},
|
|
21546
21689
|
tool(name, tool) {
|
|
@@ -22637,9 +22780,9 @@ ${renderMemoryDocument(entries)}`;
|
|
|
22637
22780
|
return removed === 0 ? "No cold long-term memories to remove." : `Forgot ${removed} cold memory ${removed === 1 ? "entry" : "entries"} and removed ${filesRemoved} task ${filesRemoved === 1 ? "file" : "files"}.`;
|
|
22638
22781
|
},
|
|
22639
22782
|
finishTask: () => finalizeMemoryTask(true),
|
|
22640
|
-
pluginCommands: () => [...pluginCommands.
|
|
22783
|
+
pluginCommands: () => [...pluginCommands.entries()].map(([name, entry2]) => entry2.description === void 0 ? { name } : { name, description: entry2.description }).sort((left, right) => left.name.localeCompare(right.name)),
|
|
22641
22784
|
runPluginCommand: async (name, args, signal) => {
|
|
22642
|
-
const handler = pluginCommands.get(name);
|
|
22785
|
+
const handler = pluginCommands.get(name)?.handler;
|
|
22643
22786
|
if (handler === void 0) throw new Error(`Plugin command /${name} is no longer registered.`);
|
|
22644
22787
|
signal.throwIfAborted();
|
|
22645
22788
|
return awaitWithSignal3(Promise.resolve(handler(args, { workspace, signal })), signal);
|
|
@@ -69,7 +69,7 @@ ${e}</tr>
|
|
|
69
69
|
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?`th`:`td`;return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
|
|
70
70
|
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${Nt(e,!0)}</code>`}br(e){return`<br>`}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=Pt(e);if(i===null)return r;e=i;let a=`<a href="`+e+`"`;return t&&(a+=` title="`+Nt(t)+`"`),a+=`>`+r+`</a>`,a}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=Pt(e);if(i===null)return Nt(n);e=i;let a=`<img src="${e}" alt="${n}"`;return t&&(a+=` title="${Nt(t)}"`),a+=`>`,a}text(e){return`tokens`in e&&e.tokens?this.parser.parseInline(e.tokens):`escaped`in e&&e.escaped?e.text:Nt(e.text)}},Ut=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return``+e}image({text:e}){return``+e}br(){return``}},Wt=class e{options;renderer;textRenderer;constructor(e){this.options=e||Ee,this.options.renderer=this.options.renderer||new Ht,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new Ut}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=i,t=this.options.extensions.renderers[e.type].call({parser:this},e);if(t!==!1||![`space`,`hr`,`heading`,`code`,`table`,`blockquote`,`list`,`html`,`def`,`paragraph`,`text`].includes(e.type)){n+=t||``;continue}}let a=i;switch(a.type){case`space`:n+=this.renderer.space(a);continue;case`hr`:n+=this.renderer.hr(a);continue;case`heading`:n+=this.renderer.heading(a);continue;case`code`:n+=this.renderer.code(a);continue;case`table`:n+=this.renderer.table(a);continue;case`blockquote`:n+=this.renderer.blockquote(a);continue;case`list`:n+=this.renderer.list(a);continue;case`html`:n+=this.renderer.html(a);continue;case`def`:n+=this.renderer.def(a);continue;case`paragraph`:n+=this.renderer.paragraph(a);continue;case`text`:{let i=a,o=this.renderer.text(i);for(;r+1<e.length&&e[r+1].type===`text`;)i=e[++r],o+=`
|
|
71
71
|
`+this.renderer.text(i);t?n+=this.renderer.paragraph({type:`paragraph`,raw:o,text:o,tokens:[{type:`text`,raw:o,text:o,escaped:!0}]}):n+=o;continue}default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}parseInline(e,t=this.renderer){let n=``;for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let e=this.options.extensions.renderers[i.type].call({parser:this},i);if(e!==!1||![`escape`,`html`,`link`,`image`,`strong`,`em`,`codespan`,`br`,`del`,`text`].includes(i.type)){n+=e||``;continue}}let a=i;switch(a.type){case`escape`:n+=t.text(a);break;case`html`:n+=t.html(a);break;case`link`:n+=t.link(a);break;case`image`:n+=t.image(a);break;case`strong`:n+=t.strong(a);break;case`em`:n+=t.em(a);break;case`codespan`:n+=t.codespan(a);break;case`br`:n+=t.br(a);break;case`del`:n+=t.del(a);break;case`text`:n+=t.text(a);break;default:{let e=`Token with "`+a.type+`" type was not found.`;if(this.options.silent)return console.error(e),``;throw Error(e)}}}return n}},Gt=class{options;block;constructor(e){this.options=e||Ee}static passThroughHooks=new Set([`preprocess`,`postprocess`,`processAllTokens`,`emStrongMask`]);static passThroughHooksRespectAsync=new Set([`preprocess`,`postprocess`,`processAllTokens`]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?Vt.lex:Vt.lexInline}provideParser(){return this.block?Wt.parse:Wt.parseInline}},Kt=new class{defaults=Te();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=Wt;Renderer=Ht;TextRenderer=Ut;Lexer=Vt;Tokenizer=Bt;Hooks=Gt;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case`table`:{let e=r;for(let r of e.header)n=n.concat(this.walkTokens(r.tokens,t));for(let r of e.rows)for(let e of r)n=n.concat(this.walkTokens(e.tokens,t));break}case`list`:{let e=r;n=n.concat(this.walkTokens(e.items,t));break}default:{let e=r;this.defaults.extensions?.childTokens?.[e.type]?this.defaults.extensions.childTokens[e.type].forEach(r=>{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new Ht(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if([`options`,`parser`].includes(n))continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new Bt(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Gt;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if([`options`,`block`].includes(n))continue;let r=n,i=e.hooks[r],a=t[r];Gt.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async&&Gt.passThroughHooksRespectAsync.has(n))return(async()=>{let n=await i.call(t,e);return a.call(t,n)})();let r=i.call(t,e);return a.call(t,r)}:t[r]=(...e)=>{if(this.defaults.async)return(async()=>{let n=await i.apply(t,e);return n===!1&&(n=await a.apply(t,e)),n})();let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Vt.lex(e,t??this.defaults)}parser(e,t){return Wt.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},i={...this.defaults,...r},a=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return a(Error(`marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.`));if(typeof t>`u`||t===null)return a(Error(`marked(): input parameter is undefined or null`));if(typeof t!=`string`)return a(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(t)+`, string expected`));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let n=i.hooks?await i.hooks.preprocess(t):t,r=await(i.hooks?await i.hooks.provideLexer():e?Vt.lex:Vt.lexInline)(n,i),a=i.hooks?await i.hooks.processAllTokens(r):r;i.walkTokens&&await Promise.all(this.walkTokens(a,i.walkTokens));let o=await(i.hooks?await i.hooks.provideParser():e?Wt.parse:Wt.parseInline)(a,i);return i.hooks?await i.hooks.postprocess(o):o})().catch(a);try{i.hooks&&(t=i.hooks.preprocess(t));let n=(i.hooks?i.hooks.provideLexer():e?Vt.lex:Vt.lexInline)(t,i);i.hooks&&(n=i.hooks.processAllTokens(n)),i.walkTokens&&this.walkTokens(n,i.walkTokens);let r=(i.hooks?i.hooks.provideParser():e?Wt.parse:Wt.parseInline)(n,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return a(e)}}}onError(e,t){return n=>{if(n.message+=`
|
|
72
|
-
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Nt(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function N(e,t){return Kt.parse(e,t)}N.options=N.setOptions=function(e){return Kt.setOptions(e),N.defaults=Kt.defaults,De(N.defaults),N},N.getDefaults=Te,N.defaults=Ee,N.use=function(...e){return Kt.use(...e),N.defaults=Kt.defaults,De(N.defaults),N},N.walkTokens=function(e,t){return Kt.walkTokens(e,t)},N.parseInline=Kt.parseInline,N.Parser=Wt,N.parser=Wt.parse,N.Renderer=Ht,N.TextRenderer=Ut,N.Lexer=Vt,N.lexer=Vt.lex,N.Tokenizer=Bt,N.Hooks=Gt,N.parse=N,N.options,N.setOptions,N.use,N.walkTokens,N.parseInline,Wt.parse,Vt.lex;var qt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),P=o(((e,t)=>{t.exports=qt()}))();function Jt(e){try{return N.lexer(e,{gfm:!0,async:!1}).filter(e=>e.type!==`html`)}catch{return[{type:`text`,raw:e,text:e}]}}function Yt({text:e}){return(0,P.jsx)(`div`,{className:`markdown-content`,children:(0,_.useMemo)(()=>Jt(e),[e]).map((e,t)=>(0,P.jsx)(Xt,{token:e},`${e.type}-${t}`))})}function Xt({token:e}){if(e.type===`space`)return null;if(e.type===`heading`){let t=e;return(0,P.jsx)(`h${Math.min(6,t.depth)}`,{children:(0,P.jsx)(Zt,{tokens:t.tokens})})}if(e.type===`paragraph`)return(0,P.jsx)(`p`,{children:(0,P.jsx)(Zt,{tokens:e.tokens??[]})});if(e.type===`code`){let t=e;return(0,P.jsxs)(`div`,{className:`markdown-code`,children:[(0,P.jsx)(`span`,{children:t.lang?.trim()||`code`}),(0,P.jsx)(`pre`,{children:(0,P.jsx)(`code`,{children:t.text})})]})}if(e.type===`blockquote`)return(0,P.jsx)(`blockquote`,{children:e.tokens.map((e,t)=>(0,P.jsx)(Xt,{token:e},t))});if(e.type===`list`){let t=e;return(0,P.jsx)(t.ordered?`ol`:`ul`,{start:t.ordered&&typeof t.start==`number`?t.start:void 0,children:t.items.map((e,t)=>(0,P.jsx)(`li`,{children:e.tokens.map((e,t)=>(0,P.jsx)(Xt,{token:e},t))},t))})}if(e.type===`hr`)return(0,P.jsx)(`hr`,{});if(e.type===`table`){let t=e;return(0,P.jsx)(`div`,{className:`markdown-table-wrap`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`thead`,{children:(0,P.jsx)(`tr`,{children:t.header.map((e,t)=>(0,P.jsx)(`th`,{style:{textAlign:e.align??void 0},children:(0,P.jsx)(Zt,{tokens:e.tokens})},t))})}),(0,P.jsx)(`tbody`,{children:t.rows.map((e,n)=>(0,P.jsx)(`tr`,{children:e.map((e,n)=>(0,P.jsx)(`td`,{style:{textAlign:t.align[n]??void 0},children:(0,P.jsx)(Zt,{tokens:e.tokens})},n))},n))})]})})}return`tokens`in e&&Array.isArray(e.tokens)?(0,P.jsx)(`p`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})}):`text`in e&&typeof e.text==`string`?(0,P.jsx)(`p`,{children:e.text}):null}function Zt({tokens:e}){return(0,P.jsx)(P.Fragment,{children:e.map((e,t)=>(0,P.jsx)(Qt,{token:e},t))})}function Qt({token:e}){if(e.type===`text`){let t=e;return t.tokens?.length?(0,P.jsx)(Zt,{tokens:t.tokens}):t.text}if(e.type===`strong`)return(0,P.jsx)(`strong`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`em`)return(0,P.jsx)(`em`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`del`)return(0,P.jsx)(`del`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`codespan`)return(0,P.jsx)(`code`,{children:e.text});if(e.type===`br`)return(0,P.jsx)(`br`,{});if(e.type===`escape`)return e.text;if(e.type===`link`){let t=e;return(0,P.jsx)(`a`,{href:t.href,target:`_blank`,rel:`noreferrer`,children:(0,P.jsx)(Zt,{tokens:t.tokens})})}return e.type===`image`?(0,P.jsxs)(`span`,{className:`markdown-image-label`,children:[`[图片:`,e.text,`]`]}):e.type===`html`?null:`text`in e&&typeof e.text==`string`?e.text:null}function $t(e,t,n){let r=new Map;for(let t of e)r.set(t.name,{name:t.name,kind:`command`,description:t.description});for(let e of t)r.has(e)||r.set(e,{name:e,kind:`plugin`});for(let e of n)r.has(e.name)||r.set(e.name,{name:e.name,kind:`skill`,description:e.description,source:e.source});return[...r.values()]}function en(e,t,n){if(n)return 0;let r=[...e];if(r[0]!==`/`)return 0;let i=r.findIndex(e=>/\s/u.test(e)),a=i<0?r.length:i,o=r.slice(1,a).join(``);return t.some(e=>e.name===o)?a:0}function tn(e,t,n,r,i=6){let a=[...e],o=Math.max(0,Math.min(a.length,t));if(a[0]!==`/`)return null;let s=a.findIndex(e=>/\s/u.test(e)),c=s<0?a.length:s;if(o<1||o>c)return null;let l=a.slice(1,c).join(``),u=l.toLowerCase(),d=n.filter(({name:e})=>e.toLowerCase().includes(u)).sort((e,t)=>{let n=e.name.toLowerCase().startsWith(u);return n===t.name.toLowerCase().startsWith(u)?e.name.localeCompare(t.name):n?-1:1});if(d.length===0)return null;let f=Math.max(0,Math.min(d.length-1,r)),p=Math.max(1,i);return{query:l,items:d,selectedIndex:f,windowStart:Math.max(0,Math.min(f,d.length-p))}}function nn(e,t,n){return n<=0?0:(e+t+n)%n}function rn(e,t,n){let r=[...e],i=Math.max(0,Math.min(r.length,t)),a=r.slice(i).findIndex(e=>/\s/u.test(e)),o=a<0?r.length:i+a,s=r.slice(o).join(``).replace(/^\s*/u,``),c=`/${n} `;return{text:c+s,cursor:[...c].length}}function an(e,t,n){if(t<=0)return null;let r=[...e],i=Math.min(r.length,t),a=Math.max(i,Math.min(r.length,n)),o=r.slice(i,a).join(``);return/^\s*$/u.test(o)?{text:r.slice(a).join(``),cursor:0}:null}function on(e,t){if(t.length===0)return[];let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0;for(;a<n.length;){let e=n.indexOf(r,a);if(e<0)break;i.push([e,e+r.length]),a=e+r.length}return i}var sn={command:`命令`,plugin:`插件`,skill:`技能`},cn={command:`slash-kind-command`,plugin:`slash-kind-plugin`,skill:`slash-kind-skill`};function ln({completion:e,onSelect:t,onDismiss:n}){let r=e.items.slice(e.windowStart,e.windowStart+6);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`slash-dropdown-backdrop`,onClick:n}),(0,P.jsxs)(`div`,{className:`slash-dropdown`,role:`listbox`,"aria-label":`命令补全`,children:[(0,P.jsxs)(`div`,{className:`slash-dropdown-header`,children:[(0,P.jsx)(`span`,{children:`可用命令`}),(0,P.jsx)(`kbd`,{children:`↑↓ 选择`}),(0,P.jsx)(`kbd`,{children:`Tab 确认`}),(0,P.jsx)(`kbd`,{children:`Esc 关闭`})]}),(0,P.jsx)(`div`,{className:`slash-dropdown-list`,children:r.map(n=>{let r=e.items.indexOf(n)===e.selectedIndex,i=on(n.name,e.query);return(0,P.jsxs)(`button`,{className:`slash-item${r?` slash-item-selected`:``}`,role:`option`,"aria-selected":r,onMouseDown:e=>{e.preventDefault(),t(n.name)},children:[(0,P.jsx)(`span`,{className:`slash-item-marker`,children:r?`›`:` `}),(0,P.jsx)(`span`,{className:cn[n.kind],children:sn[n.kind]}),(0,P.jsx)(`span`,{className:`slash-item-name`,children:un(n.name,i)}),n.description&&(0,P.jsx)(`span`,{className:`slash-item-desc`,children:n.description})]},n.name)})}),(0,P.jsx)(`div`,{className:`slash-dropdown-footer`,children:e.items.length>6&&(0,P.jsxs)(`span`,{className:`slash-count`,children:[e.selectedIndex+1,` / `,e.items.length]})})]})]})}function un(e,t){if(t.length===0)return(0,P.jsx)(P.Fragment,{children:e});let n=[],r=0;for(let[i,a]of t)i>r&&n.push((0,P.jsx)(`span`,{children:e.slice(r,i)},`text-${r}`)),n.push((0,P.jsx)(`mark`,{children:e.slice(i,a)},`mark-${i}`)),r=a;return r<e.length&&n.push((0,P.jsx)(`span`,{children:e.slice(r)},`text-${r}`)),(0,P.jsx)(P.Fragment,{children:n})}function dn(e,t){if(t.length===0)return(0,P.jsx)(P.Fragment,{children:e});let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0;for(;a<n.length;){let e=n.indexOf(r,a);if(e<0)break;i.push([e,e+r.length]),a=e+r.length}if(i.length===0)return(0,P.jsx)(P.Fragment,{children:e});let o=[],s=0;for(let[t,n]of i)t>s&&o.push((0,P.jsx)(`span`,{children:e.slice(s,t)},`text-${s}`)),o.push((0,P.jsx)(`mark`,{children:e.slice(t,n)},`mark-${t}`)),s=n;return s<e.length&&o.push((0,P.jsx)(`span`,{children:e.slice(s)},`text-${s}`)),(0,P.jsx)(P.Fragment,{children:o})}function fn({completion:e,onSelect:t,onDismiss:n}){let r=e.items.slice(e.windowStart,e.windowStart+6);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`mention-dropdown-backdrop`,onClick:n}),(0,P.jsxs)(`div`,{className:`mention-dropdown`,role:`listbox`,"aria-label":`文件补全`,children:[(0,P.jsxs)(`div`,{className:`mention-dropdown-header`,children:[(0,P.jsx)(`span`,{children:`项目文件`}),(0,P.jsx)(`kbd`,{children:`↑↓ 选择`}),(0,P.jsx)(`kbd`,{children:`Tab 确认`}),(0,P.jsx)(`kbd`,{children:`Esc 关闭`})]}),(0,P.jsx)(`div`,{className:`mention-dropdown-list`,children:r.map(n=>{let r=e.items.indexOf(n)===e.selectedIndex;return(0,P.jsxs)(`button`,{className:`mention-item${r?` mention-item-selected`:``}`,role:`option`,"aria-selected":r,onMouseDown:e=>{e.preventDefault(),t(n)},children:[(0,P.jsx)(`span`,{className:`mention-item-marker`,children:r?`›`:` `}),(0,P.jsx)(`span`,{className:`mention-item-icon`,children:`📄`}),(0,P.jsx)(`span`,{className:`mention-item-path`,children:dn(n,e.query)})]},n)})}),(0,P.jsx)(`div`,{className:`mention-dropdown-footer`,children:e.items.length>6&&(0,P.jsxs)(`span`,{className:`mention-count`,children:[e.selectedIndex+1,` / `,e.items.length]})})]})]})}function pn(e){let t=e.replaceAll(`\\`,`/`),n=t.lastIndexOf(`/`);return n<0?e:t.slice(n+1)}function mn(e){return[...new Set(e.map(e=>e.replaceAll(`\\`,`/`)))].sort(Sn)}function hn(e,t,n,r,i=6){let a=vn(e,t);if(a===null)return null;let o=a.query.toLowerCase(),s=n.filter(e=>e.toLowerCase().includes(o)).sort((e,t)=>xn(e,o)-xn(t,o)||Sn(e,t));if(s.length===0)return null;let c=Math.max(0,Math.min(s.length-1,r)),l=Math.max(1,i),u=Math.max(0,Math.min(c,s.length-l));return{query:a.query,items:s,selectedIndex:c,windowStart:u}}function gn(e,t,n){return n<=0?0:(e+t+n)%n}function _n(e,t,n){let r=[...e],i=vn(e,t),a=Math.max(0,Math.min(r.length,t));if(i===null)return{text:e,cursor:a};let o=`@${n.replaceAll(`\\`,`/`).replaceAll(` `,`\\ `)} `,s=r.slice(0,i.start).join(``),c=r.slice(i.end).join(``).replace(/^\s*/u,``);return{text:s+o+c,cursor:[...s+o].length,span:{start:[...s].length,end:[...s+o].length}}}function vn(e,t){let n=[...e],r=Math.max(0,Math.min(n.length,t)),i=r;for(;i>0&&!yn(n,i-1);)--i;if(n[i]!==`@`||r<=i)return null;let a=r;for(;a<n.length&&!yn(n,a);)a+=1;return{start:i,end:a,query:bn(n.slice(i+1,a).join(``))}}function yn(e,t){if(!/\s/u.test(e[t]??``))return!1;let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==0}function bn(e){return e.replace(/\\(\s)/gu,`$1`)}function xn(e,t){let n=e.toLowerCase();return pn(n).startsWith(t)?0:n.startsWith(t)?1:2}function Sn(e,t){return e.localeCompare(t,`en`)}var Cn;function F(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;e<a.length;e++){let t=a[e];t in n||(n[t]=i[t].bind(n))}}let i=n?.Parent??Object;class a extends i{}Object.defineProperty(a,"name",{value:e});function o(e){var t;let i=n?.Parent?new a:this;r(i,e),(t=i._zod).deferred??(t.deferred=[]);for(let e of i._zod.deferred)e();return i}return Object.defineProperty(o,"init",{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:t=>n?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var wn=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},Tn=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Cn=globalThis).__zod_globalConfig??(Cn.__zod_globalConfig={});var En=globalThis.__zod_globalConfig;function Dn(e){return e&&Object.assign(En,e),En}function On(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function kn(e,t){return typeof t==`bigint`?t.toString():t}function An(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}throw Error(`cached value already set`)}}}function jn(e){return e==null}function Mn(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Nn(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}var Pn=Symbol(`evaluating`);function I(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==Pn)return r===void 0&&(r=Pn,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function Fn(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function In(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function Ln(e){return JSON.stringify(e)}function Rn(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var zn=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Bn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Vn=An(()=>{if(En.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function Hn(e){if(Bn(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return!(Bn(n)===!1||Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)===!1)}function Un(e){return Hn(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var Wn=new Set([`string`,`number`,`symbol`]);function Gn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Kn(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function L(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function qn(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var Jn={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Yn(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Kn(e,In(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return Fn(this,`shape`,e),e},checks:[]}))}function Xn(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Kn(e,In(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return Fn(this,`shape`,r),r},checks:[]}))}function Zn(e,t){if(!Hn(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Fn(this,`shape`,n),n}}))}function Qn(e,t){if(!Hn(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Fn(this,`shape`,n),n}}))}function $n(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return Fn(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function er(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Kn(t,In(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return Fn(this,`shape`,i),i},checks:[]}))}function tr(e,t,n){return Kn(t,In(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return Fn(this,`shape`,i),i}}))}function nr(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function rr(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function ir(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function ar(e){return typeof e==`string`?e:e?.message}function or(e,t,n){let r=e.message?e.message:ar(e.inst?._zod.def?.error?.(e))??ar(t?.error?.(e))??ar(n.customError?.(e))??ar(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function sr(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function cr(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var lr=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,kn,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},ur=F(`$ZodError`,lr),dr=F(`$ZodError`,lr,{Parent:Error});function fr(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function pr(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i];i===e.length-1?(r[n]=r[n]||{_errors:[]},r[n]._errors.push(t(a))):r[n]=r[n]||{_errors:[]},r=r[n],i++}}}};return r(e),n}var mr=e=>(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new wn;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>or(e,a,Dn())));throw zn(t,i?.callee),t}return o.value},hr=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>or(e,a,Dn())));throw zn(t,i?.callee),t}return o.value},gr=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new wn;return a.issues.length?{success:!1,error:new(e??ur)(a.issues.map(e=>or(e,i,Dn())))}:{success:!0,data:a.value}},_r=gr(dr),vr=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>or(e,i,Dn())))}:{success:!0,data:a.value}},yr=vr(dr),br=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return mr(e)(t,n,i)},xr=e=>(t,n,r)=>mr(e)(t,n,r),Sr=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return hr(e)(t,n,i)},Cr=e=>async(t,n,r)=>hr(e)(t,n,r),wr=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return gr(e)(t,n,i)},Tr=e=>(t,n,r)=>gr(e)(t,n,r),Er=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return vr(e)(t,n,i)},Dr=e=>async(t,n,r)=>vr(e)(t,n,r),Or=/^[cC][0-9a-z]{6,}$/,kr=/^[0-9a-z]+$/,Ar=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,jr=/^[0-9a-vA-V]{20}$/,Mr=/^[A-Za-z0-9]{27}$/,Nr=/^[a-zA-Z0-9_-]{21}$/,Pr=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Fr=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ir=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Lr=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Rr=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function zr(){return new RegExp(Rr,`u`)}var Br=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Vr=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Hr=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Ur=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Wr=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Gr=/^[A-Za-z0-9_-]*$/,Kr=/^https?$/,qr=/^\+[1-9]\d{6,14}$/,Jr=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Yr=RegExp(`^${Jr}$`);function Xr(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Zr(e){return RegExp(`^${Xr(e)}$`)}function Qr(e){let t=Xr({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${Jr}T(?:${r})$`)}var $r=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},ei=/^-?\d+$/,ti=/^-?\d+(?:\.\d+)?$/,ni=/^(?:true|false)$/i,ri=/^[^A-Z]*$/,ii=/^[^a-z]*$/,ai=F(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),oi={number:`number`,bigint:`bigint`,object:`date`},si=F(`$ZodCheckLessThan`,(e,t)=>{ai.init(e,t);let n=oi[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value<r&&(t.inclusive?n.maximum=t.value:n.exclusiveMaximum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),ci=F(`$ZodCheckGreaterThan`,(e,t)=>{ai.init(e,t);let n=oi[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),li=F(`$ZodCheckMultipleOf`,(e,t)=>{ai.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):Nn(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),ui=F(`$ZodCheckNumberFormat`,(e,t)=>{ai.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=Jn[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=ei)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),di=F(`$ZodCheckMaxLength`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum<n&&(e._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{let r=n.value;if(r.length<=t.maximum)return;let i=sr(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),fi=F(`$ZodCheckMinLength`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=sr(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),pi=F(`$ZodCheckLengthEquals`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=sr(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),mi=F(`$ZodCheckStringFormat`,(e,t)=>{var n,r;ai.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),hi=F(`$ZodCheckRegex`,(e,t)=>{mi.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),gi=F(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=ri,mi.init(e,t)}),_i=F(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=ii,mi.init(e,t)}),vi=F(`$ZodCheckIncludes`,(e,t)=>{ai.init(e,t);let n=Gn(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),yi=F(`$ZodCheckStartsWith`,(e,t)=>{ai.init(e,t);let n=RegExp(`^${Gn(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),bi=F(`$ZodCheckEndsWith`,(e,t)=>{ai.init(e,t);let n=RegExp(`.*${Gn(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),xi=F(`$ZodCheckOverwrite`,(e,t)=>{ai.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),Si=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
72
|
+
Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error occurred:</p><pre>`+Nt(n.message+``,!0)+`</pre>`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function N(e,t){return Kt.parse(e,t)}N.options=N.setOptions=function(e){return Kt.setOptions(e),N.defaults=Kt.defaults,De(N.defaults),N},N.getDefaults=Te,N.defaults=Ee,N.use=function(...e){return Kt.use(...e),N.defaults=Kt.defaults,De(N.defaults),N},N.walkTokens=function(e,t){return Kt.walkTokens(e,t)},N.parseInline=Kt.parseInline,N.Parser=Wt,N.parser=Wt.parse,N.Renderer=Ht,N.TextRenderer=Ut,N.Lexer=Vt,N.lexer=Vt.lex,N.Tokenizer=Bt,N.Hooks=Gt,N.parse=N,N.options,N.setOptions,N.use,N.walkTokens,N.parseInline,Wt.parse,Vt.lex;var qt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),P=o(((e,t)=>{t.exports=qt()}))();function Jt(e){try{return N.lexer(e,{gfm:!0,async:!1}).filter(e=>e.type!==`html`)}catch{return[{type:`text`,raw:e,text:e}]}}function Yt({text:e}){return(0,P.jsx)(`div`,{className:`markdown-content`,children:(0,_.useMemo)(()=>Jt(e),[e]).map((e,t)=>(0,P.jsx)(Xt,{token:e},`${e.type}-${t}`))})}function Xt({token:e}){if(e.type===`space`)return null;if(e.type===`heading`){let t=e;return(0,P.jsx)(`h${Math.min(6,t.depth)}`,{children:(0,P.jsx)(Zt,{tokens:t.tokens})})}if(e.type===`paragraph`)return(0,P.jsx)(`p`,{children:(0,P.jsx)(Zt,{tokens:e.tokens??[]})});if(e.type===`code`){let t=e;return(0,P.jsxs)(`div`,{className:`markdown-code`,children:[(0,P.jsx)(`span`,{children:t.lang?.trim()||`code`}),(0,P.jsx)(`pre`,{children:(0,P.jsx)(`code`,{children:t.text})})]})}if(e.type===`blockquote`)return(0,P.jsx)(`blockquote`,{children:e.tokens.map((e,t)=>(0,P.jsx)(Xt,{token:e},t))});if(e.type===`list`){let t=e;return(0,P.jsx)(t.ordered?`ol`:`ul`,{start:t.ordered&&typeof t.start==`number`?t.start:void 0,children:t.items.map((e,t)=>(0,P.jsx)(`li`,{children:e.tokens.map((e,t)=>(0,P.jsx)(Xt,{token:e},t))},t))})}if(e.type===`hr`)return(0,P.jsx)(`hr`,{});if(e.type===`table`){let t=e;return(0,P.jsx)(`div`,{className:`markdown-table-wrap`,children:(0,P.jsxs)(`table`,{children:[(0,P.jsx)(`thead`,{children:(0,P.jsx)(`tr`,{children:t.header.map((e,t)=>(0,P.jsx)(`th`,{style:{textAlign:e.align??void 0},children:(0,P.jsx)(Zt,{tokens:e.tokens})},t))})}),(0,P.jsx)(`tbody`,{children:t.rows.map((e,n)=>(0,P.jsx)(`tr`,{children:e.map((e,n)=>(0,P.jsx)(`td`,{style:{textAlign:t.align[n]??void 0},children:(0,P.jsx)(Zt,{tokens:e.tokens})},n))},n))})]})})}return`tokens`in e&&Array.isArray(e.tokens)?(0,P.jsx)(`p`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})}):`text`in e&&typeof e.text==`string`?(0,P.jsx)(`p`,{children:e.text}):null}function Zt({tokens:e}){return(0,P.jsx)(P.Fragment,{children:e.map((e,t)=>(0,P.jsx)(Qt,{token:e},t))})}function Qt({token:e}){if(e.type===`text`){let t=e;return t.tokens?.length?(0,P.jsx)(Zt,{tokens:t.tokens}):t.text}if(e.type===`strong`)return(0,P.jsx)(`strong`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`em`)return(0,P.jsx)(`em`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`del`)return(0,P.jsx)(`del`,{children:(0,P.jsx)(Zt,{tokens:e.tokens})});if(e.type===`codespan`)return(0,P.jsx)(`code`,{children:e.text});if(e.type===`br`)return(0,P.jsx)(`br`,{});if(e.type===`escape`)return e.text;if(e.type===`link`){let t=e;return(0,P.jsx)(`a`,{href:t.href,target:`_blank`,rel:`noreferrer`,children:(0,P.jsx)(Zt,{tokens:t.tokens})})}return e.type===`image`?(0,P.jsxs)(`span`,{className:`markdown-image-label`,children:[`[图片:`,e.text,`]`]}):e.type===`html`?null:`text`in e&&typeof e.text==`string`?e.text:null}function $t(e,t,n){let r=new Map;for(let t of e)r.set(t.name,{name:t.name,kind:`command`,description:t.description});for(let e of t)r.has(e.name)||r.set(e.name,e.description===void 0?{name:e.name,kind:`plugin`}:{name:e.name,kind:`plugin`,description:e.description});for(let e of n)r.has(e.name)||r.set(e.name,{name:e.name,kind:`skill`,description:e.description,source:e.source});return[...r.values()]}function en(e,t,n){if(n)return 0;let r=[...e];if(r[0]!==`/`)return 0;let i=r.findIndex(e=>/\s/u.test(e)),a=i<0?r.length:i,o=r.slice(1,a).join(``);return t.some(e=>e.name===o)?a:0}function tn(e,t,n,r,i=6){let a=[...e],o=Math.max(0,Math.min(a.length,t));if(a[0]!==`/`)return null;let s=a.findIndex(e=>/\s/u.test(e)),c=s<0?a.length:s;if(o<1||o>c)return null;let l=a.slice(1,c).join(``),u=l.toLowerCase(),d=n.filter(({name:e})=>e.toLowerCase().includes(u)).sort((e,t)=>{let n=e.name.toLowerCase().startsWith(u);return n===t.name.toLowerCase().startsWith(u)?e.name.localeCompare(t.name):n?-1:1});if(d.length===0)return null;let f=Math.max(0,Math.min(d.length-1,r)),p=Math.max(1,i);return{query:l,items:d,selectedIndex:f,windowStart:Math.max(0,Math.min(f,d.length-p))}}function nn(e,t,n){return n<=0?0:(e+t+n)%n}function rn(e,t,n){let r=[...e],i=Math.max(0,Math.min(r.length,t)),a=r.slice(i).findIndex(e=>/\s/u.test(e)),o=a<0?r.length:i+a,s=r.slice(o).join(``).replace(/^\s*/u,``),c=`/${n} `;return{text:c+s,cursor:[...c].length}}function an(e,t,n){if(t<=0)return null;let r=[...e],i=Math.min(r.length,t),a=Math.max(i,Math.min(r.length,n)),o=r.slice(i,a).join(``);return/^\s*$/u.test(o)?{text:r.slice(a).join(``),cursor:0}:null}function on(e,t){if(t.length===0)return[];let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0;for(;a<n.length;){let e=n.indexOf(r,a);if(e<0)break;i.push([e,e+r.length]),a=e+r.length}return i}var sn={command:`命令`,plugin:`插件`,skill:`技能`},cn={command:`slash-kind-command`,plugin:`slash-kind-plugin`,skill:`slash-kind-skill`};function ln({completion:e,onSelect:t,onDismiss:n}){let r=e.items.slice(e.windowStart,e.windowStart+6);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`slash-dropdown-backdrop`,onClick:n}),(0,P.jsxs)(`div`,{className:`slash-dropdown`,role:`listbox`,"aria-label":`命令补全`,children:[(0,P.jsxs)(`div`,{className:`slash-dropdown-header`,children:[(0,P.jsx)(`span`,{children:`可用命令`}),(0,P.jsx)(`kbd`,{children:`↑↓ 选择`}),(0,P.jsx)(`kbd`,{children:`Tab 确认`}),(0,P.jsx)(`kbd`,{children:`Esc 关闭`})]}),(0,P.jsx)(`div`,{className:`slash-dropdown-list`,children:r.map(n=>{let r=e.items.indexOf(n)===e.selectedIndex,i=on(n.name,e.query);return(0,P.jsxs)(`button`,{className:`slash-item${r?` slash-item-selected`:``}`,role:`option`,"aria-selected":r,onMouseDown:e=>{e.preventDefault(),t(n.name)},children:[(0,P.jsx)(`span`,{className:`slash-item-marker`,children:r?`›`:` `}),(0,P.jsx)(`span`,{className:cn[n.kind],children:sn[n.kind]}),(0,P.jsx)(`span`,{className:`slash-item-name`,children:un(n.name,i)}),n.description&&(0,P.jsx)(`span`,{className:`slash-item-desc`,children:n.description})]},n.name)})}),(0,P.jsx)(`div`,{className:`slash-dropdown-footer`,children:e.items.length>6&&(0,P.jsxs)(`span`,{className:`slash-count`,children:[e.selectedIndex+1,` / `,e.items.length]})})]})]})}function un(e,t){if(t.length===0)return(0,P.jsx)(P.Fragment,{children:e});let n=[],r=0;for(let[i,a]of t)i>r&&n.push((0,P.jsx)(`span`,{children:e.slice(r,i)},`text-${r}`)),n.push((0,P.jsx)(`mark`,{children:e.slice(i,a)},`mark-${i}`)),r=a;return r<e.length&&n.push((0,P.jsx)(`span`,{children:e.slice(r)},`text-${r}`)),(0,P.jsx)(P.Fragment,{children:n})}function dn(e,t){if(t.length===0)return(0,P.jsx)(P.Fragment,{children:e});let n=e.toLowerCase(),r=t.toLowerCase(),i=[],a=0;for(;a<n.length;){let e=n.indexOf(r,a);if(e<0)break;i.push([e,e+r.length]),a=e+r.length}if(i.length===0)return(0,P.jsx)(P.Fragment,{children:e});let o=[],s=0;for(let[t,n]of i)t>s&&o.push((0,P.jsx)(`span`,{children:e.slice(s,t)},`text-${s}`)),o.push((0,P.jsx)(`mark`,{children:e.slice(t,n)},`mark-${t}`)),s=n;return s<e.length&&o.push((0,P.jsx)(`span`,{children:e.slice(s)},`text-${s}`)),(0,P.jsx)(P.Fragment,{children:o})}function fn({completion:e,onSelect:t,onDismiss:n}){let r=e.items.slice(e.windowStart,e.windowStart+6);return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`div`,{className:`mention-dropdown-backdrop`,onClick:n}),(0,P.jsxs)(`div`,{className:`mention-dropdown`,role:`listbox`,"aria-label":`文件补全`,children:[(0,P.jsxs)(`div`,{className:`mention-dropdown-header`,children:[(0,P.jsx)(`span`,{children:`项目文件`}),(0,P.jsx)(`kbd`,{children:`↑↓ 选择`}),(0,P.jsx)(`kbd`,{children:`Tab 确认`}),(0,P.jsx)(`kbd`,{children:`Esc 关闭`})]}),(0,P.jsx)(`div`,{className:`mention-dropdown-list`,children:r.map(n=>{let r=e.items.indexOf(n)===e.selectedIndex;return(0,P.jsxs)(`button`,{className:`mention-item${r?` mention-item-selected`:``}`,role:`option`,"aria-selected":r,onMouseDown:e=>{e.preventDefault(),t(n)},children:[(0,P.jsx)(`span`,{className:`mention-item-marker`,children:r?`›`:` `}),(0,P.jsx)(`span`,{className:`mention-item-icon`,children:`📄`}),(0,P.jsx)(`span`,{className:`mention-item-path`,children:dn(n,e.query)})]},n)})}),(0,P.jsx)(`div`,{className:`mention-dropdown-footer`,children:e.items.length>6&&(0,P.jsxs)(`span`,{className:`mention-count`,children:[e.selectedIndex+1,` / `,e.items.length]})})]})]})}function pn(e){let t=e.replaceAll(`\\`,`/`),n=t.lastIndexOf(`/`);return n<0?e:t.slice(n+1)}function mn(e){return[...new Set(e.map(e=>e.replaceAll(`\\`,`/`)))].sort(Sn)}function hn(e,t,n,r,i=6){let a=vn(e,t);if(a===null)return null;let o=a.query.toLowerCase(),s=n.filter(e=>e.toLowerCase().includes(o)).sort((e,t)=>xn(e,o)-xn(t,o)||Sn(e,t));if(s.length===0)return null;let c=Math.max(0,Math.min(s.length-1,r)),l=Math.max(1,i),u=Math.max(0,Math.min(c,s.length-l));return{query:a.query,items:s,selectedIndex:c,windowStart:u}}function gn(e,t,n){return n<=0?0:(e+t+n)%n}function _n(e,t,n){let r=[...e],i=vn(e,t),a=Math.max(0,Math.min(r.length,t));if(i===null)return{text:e,cursor:a};let o=`@${n.replaceAll(`\\`,`/`).replaceAll(` `,`\\ `)} `,s=r.slice(0,i.start).join(``),c=r.slice(i.end).join(``).replace(/^\s*/u,``);return{text:s+o+c,cursor:[...s+o].length,span:{start:[...s].length,end:[...s+o].length}}}function vn(e,t){let n=[...e],r=Math.max(0,Math.min(n.length,t)),i=r;for(;i>0&&!yn(n,i-1);)--i;if(n[i]!==`@`||r<=i)return null;let a=r;for(;a<n.length&&!yn(n,a);)a+=1;return{start:i,end:a,query:bn(n.slice(i+1,a).join(``))}}function yn(e,t){if(!/\s/u.test(e[t]??``))return!1;let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==0}function bn(e){return e.replace(/\\(\s)/gu,`$1`)}function xn(e,t){let n=e.toLowerCase();return pn(n).startsWith(t)?0:n.startsWith(t)?1:2}function Sn(e,t){return e.localeCompare(t,`en`)}var Cn;function F(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;e<a.length;e++){let t=a[e];t in n||(n[t]=i[t].bind(n))}}let i=n?.Parent??Object;class a extends i{}Object.defineProperty(a,"name",{value:e});function o(e){var t;let i=n?.Parent?new a:this;r(i,e),(t=i._zod).deferred??(t.deferred=[]);for(let e of i._zod.deferred)e();return i}return Object.defineProperty(o,"init",{value:r}),Object.defineProperty(o,Symbol.hasInstance,{value:t=>n?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var wn=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},Tn=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Cn=globalThis).__zod_globalConfig??(Cn.__zod_globalConfig={});var En=globalThis.__zod_globalConfig;function Dn(e){return e&&Object.assign(En,e),En}function On(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function kn(e,t){return typeof t==`bigint`?t.toString():t}function An(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}throw Error(`cached value already set`)}}}function jn(e){return e==null}function Mn(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function Nn(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r)<i?0:n-r}var Pn=Symbol(`evaluating`);function I(e,t,n){let r;Object.defineProperty(e,t,{get(){if(r!==Pn)return r===void 0&&(r=Pn,r=n()),r},set(n){Object.defineProperty(e,t,{value:n})},configurable:!0})}function Fn(e,t,n){Object.defineProperty(e,t,{value:n,writable:!0,enumerable:!0,configurable:!0})}function In(...e){let t={};for(let n of e){let e=Object.getOwnPropertyDescriptors(n);Object.assign(t,e)}return Object.defineProperties({},t)}function Ln(e){return JSON.stringify(e)}function Rn(e){return e.toLowerCase().trim().replace(/[^\w\s-]/g,``).replace(/[\s_-]+/g,`-`).replace(/^-+|-+$/g,``)}var zn=`captureStackTrace`in Error?Error.captureStackTrace:(...e)=>{};function Bn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Vn=An(()=>{if(En.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function Hn(e){if(Bn(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return!(Bn(n)===!1||Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)===!1)}function Un(e){return Hn(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var Wn=new Set([`string`,`number`,`symbol`]);function Gn(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Kn(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function L(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function qn(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var Jn={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Yn(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Kn(e,In(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return Fn(this,`shape`,e),e},checks:[]}))}function Xn(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Kn(e,In(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return Fn(this,`shape`,r),r},checks:[]}))}function Zn(e,t){if(!Hn(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Fn(this,`shape`,n),n}}))}function Qn(e,t){if(!Hn(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return Fn(this,`shape`,n),n}}))}function $n(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Kn(e,In(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return Fn(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function er(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Kn(t,In(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return Fn(this,`shape`,i),i},checks:[]}))}function tr(e,t,n){return Kn(t,In(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return Fn(this,`shape`,i),i}}))}function nr(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue!==!0)return!0;return!1}function rr(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n<e.issues.length;n++)if(e.issues[n]?.continue===!1)return!0;return!1}function ir(e,t){return t.map(t=>{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function ar(e){return typeof e==`string`?e:e?.message}function or(e,t,n){let r=e.message?e.message:ar(e.inst?._zod.def?.error?.(e))??ar(t?.error?.(e))??ar(n.customError?.(e))??ar(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function sr(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function cr(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var lr=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,kn,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},ur=F(`$ZodError`,lr),dr=F(`$ZodError`,lr,{Parent:Error});function fr(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function pr(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i<e.length;){let n=e[i];i===e.length-1?(r[n]=r[n]||{_errors:[]},r[n]._errors.push(t(a))):r[n]=r[n]||{_errors:[]},r=r[n],i++}}}};return r(e),n}var mr=e=>(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new wn;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>or(e,a,Dn())));throw zn(t,i?.callee),t}return o.value},hr=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>or(e,a,Dn())));throw zn(t,i?.callee),t}return o.value},gr=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new wn;return a.issues.length?{success:!1,error:new(e??ur)(a.issues.map(e=>or(e,i,Dn())))}:{success:!0,data:a.value}},_r=gr(dr),vr=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>or(e,i,Dn())))}:{success:!0,data:a.value}},yr=vr(dr),br=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return mr(e)(t,n,i)},xr=e=>(t,n,r)=>mr(e)(t,n,r),Sr=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return hr(e)(t,n,i)},Cr=e=>async(t,n,r)=>hr(e)(t,n,r),wr=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return gr(e)(t,n,i)},Tr=e=>(t,n,r)=>gr(e)(t,n,r),Er=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return vr(e)(t,n,i)},Dr=e=>async(t,n,r)=>vr(e)(t,n,r),Or=/^[cC][0-9a-z]{6,}$/,kr=/^[0-9a-z]+$/,Ar=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,jr=/^[0-9a-vA-V]{20}$/,Mr=/^[A-Za-z0-9]{27}$/,Nr=/^[a-zA-Z0-9_-]{21}$/,Pr=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Fr=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,Ir=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,Lr=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,Rr=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function zr(){return new RegExp(Rr,`u`)}var Br=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Vr=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,Hr=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Ur=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Wr=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,Gr=/^[A-Za-z0-9_-]*$/,Kr=/^https?$/,qr=/^\+[1-9]\d{6,14}$/,Jr=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Yr=RegExp(`^${Jr}$`);function Xr(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Zr(e){return RegExp(`^${Xr(e)}$`)}function Qr(e){let t=Xr({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${Jr}T(?:${r})$`)}var $r=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},ei=/^-?\d+$/,ti=/^-?\d+(?:\.\d+)?$/,ni=/^(?:true|false)$/i,ri=/^[^A-Z]*$/,ii=/^[^a-z]*$/,ai=F(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),oi={number:`number`,bigint:`bigint`,object:`date`},si=F(`$ZodCheckLessThan`,(e,t)=>{ai.init(e,t);let n=oi[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value<r&&(t.inclusive?n.maximum=t.value:n.exclusiveMaximum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value<=t.value:r.value<t.value)||r.issues.push({origin:n,code:`too_big`,maximum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),ci=F(`$ZodCheckGreaterThan`,(e,t)=>{ai.init(e,t);let n=oi[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),li=F(`$ZodCheckMultipleOf`,(e,t)=>{ai.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):Nn(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),ui=F(`$ZodCheckNumberFormat`,(e,t)=>{ai.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=Jn[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=ei)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}s<i&&o.issues.push({origin:`number`,input:s,code:`too_small`,minimum:i,inclusive:!0,inst:e,continue:!t.abort}),s>a&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),di=F(`$ZodCheckMaxLength`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum<n&&(e._zod.bag.maximum=t.maximum)}),e._zod.check=n=>{let r=n.value;if(r.length<=t.maximum)return;let i=sr(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),fi=F(`$ZodCheckMinLength`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=sr(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),pi=F(`$ZodCheckLengthEquals`,(e,t)=>{var n;ai.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!jn(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=sr(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),mi=F(`$ZodCheckStringFormat`,(e,t)=>{var n,r;ai.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),hi=F(`$ZodCheckRegex`,(e,t)=>{mi.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),gi=F(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=ri,mi.init(e,t)}),_i=F(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=ii,mi.init(e,t)}),vi=F(`$ZodCheckIncludes`,(e,t)=>{ai.init(e,t);let n=Gn(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),yi=F(`$ZodCheckStartsWith`,(e,t)=>{ai.init(e,t);let n=RegExp(`^${Gn(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),bi=F(`$ZodCheckEndsWith`,(e,t)=>{ai.init(e,t);let n=RegExp(`.*${Gn(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),xi=F(`$ZodCheckOverwrite`,(e,t)=>{ai.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),Si=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(`
|
|
73
73
|
`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(`
|
|
74
74
|
`))}},Ci={major:4,minor:4,patch:3},R=F(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=Ci;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=nr(e),i;for(let a of t){if(a._zod.def.when){if(rr(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new wn;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=nr(e,t))});else{if(e.issues.length===t)continue;r||=nr(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(nr(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new wn;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new wn;return o.then(e=>t(e,r,a))}return t(o,r,a)}}I(e,`~standard`,()=>({validate:t=>{try{let n=_r(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return yr(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),wi=F(`$ZodString`,(e,t)=>{R.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??$r(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),z=F(`$ZodStringFormat`,(e,t)=>{mi.init(e,t),wi.init(e,t)}),Ti=F(`$ZodGUID`,(e,t)=>{t.pattern??=Fr,z.init(e,t)}),Ei=F(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=Ir(e)}else t.pattern??=Ir();z.init(e,t)}),Di=F(`$ZodEmail`,(e,t)=>{t.pattern??=Lr,z.init(e,t)}),Oi=F(`$ZodURL`,(e,t)=>{z.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Kr.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),t.normalize?n.value=i.href:n.value=r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ki=F(`$ZodEmoji`,(e,t)=>{t.pattern??=zr(),z.init(e,t)}),Ai=F(`$ZodNanoID`,(e,t)=>{t.pattern??=Nr,z.init(e,t)}),ji=F(`$ZodCUID`,(e,t)=>{t.pattern??=Or,z.init(e,t)}),Mi=F(`$ZodCUID2`,(e,t)=>{t.pattern??=kr,z.init(e,t)}),Ni=F(`$ZodULID`,(e,t)=>{t.pattern??=Ar,z.init(e,t)}),B=F(`$ZodXID`,(e,t)=>{t.pattern??=jr,z.init(e,t)}),Pi=F(`$ZodKSUID`,(e,t)=>{t.pattern??=Mr,z.init(e,t)}),Fi=F(`$ZodISODateTime`,(e,t)=>{t.pattern??=Qr(t),z.init(e,t)}),Ii=F(`$ZodISODate`,(e,t)=>{t.pattern??=Yr,z.init(e,t)}),Li=F(`$ZodISOTime`,(e,t)=>{t.pattern??=Zr(t),z.init(e,t)}),Ri=F(`$ZodISODuration`,(e,t)=>{t.pattern??=Pr,z.init(e,t)}),zi=F(`$ZodIPv4`,(e,t)=>{t.pattern??=Br,z.init(e,t),e._zod.bag.format=`ipv4`}),Bi=F(`$ZodIPv6`,(e,t)=>{t.pattern??=Vr,z.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Vi=F(`$ZodCIDRv4`,(e,t)=>{t.pattern??=Hr,z.init(e,t)}),Hi=F(`$ZodCIDRv6`,(e,t)=>{t.pattern??=Ur,z.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function Ui(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Wi=F(`$ZodBase64`,(e,t)=>{t.pattern??=Wr,z.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{Ui(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Gi(e){if(!Gr.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return Ui(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ki=F(`$ZodBase64URL`,(e,t)=>{t.pattern??=Gr,z.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Gi(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),qi=F(`$ZodE164`,(e,t)=>{t.pattern??=qr,z.init(e,t)});function Ji(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var Yi=F(`$ZodJWT`,(e,t)=>{z.init(e,t),e._zod.check=n=>{Ji(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),Xi=F(`$ZodNumber`,(e,t)=>{R.init(e,t),e._zod.pattern=e._zod.bag.pattern??ti,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Zi=F(`$ZodNumberFormat`,(e,t)=>{ui.init(e,t),Xi.init(e,t)}),Qi=F(`$ZodBoolean`,(e,t)=>{R.init(e,t),e._zod.pattern=ni,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),$i=F(`$ZodUnknown`,(e,t)=>{R.init(e,t),e._zod.parse=e=>e}),ea=F(`$ZodNever`,(e,t)=>{R.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function ta(e,t,n){e.issues.length&&t.issues.push(...ir(n,e.issues)),t.value[n]=e.value}var na=F(`$ZodArray`,(e,t)=>{R.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;e<i.length;e++){let o=i[e],s=t.element._zod.run({value:o,issues:[]},r);s instanceof Promise?a.push(s.then(t=>ta(t,n,e))):ta(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function ra(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...ir(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function ia(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=qn(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function aa(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>ra(e,n,i,t,u,d))):ra(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var oa=F(`$ZodObject`,(e,t)=>{if(R.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=An(()=>ia(t));I(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=Bn,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>ra(n,t,e,s,r,i))):ra(a,t,e,s,r,i)}return i?aa(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),sa=F(`$ZodObjectJIT`,(e,t)=>{oa.init(e,t);let n=e._zod.parse,r=An(()=>ia(t)),i=e=>{let t=new Si([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=Ln(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=Ln(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(`
|
|
75
75
|
if (${n}.issues.length) {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="color-scheme" content="light" />
|
|
7
7
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self' http://127.0.0.1:* http://localhost:* ws://127.0.0.1:* ws://localhost:*; frame-src http://127.0.0.1:* http://localhost:*" />
|
|
8
8
|
<title>Flavor Code</title>
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-CCnSpff0.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="./assets/index-CPxt3vFY.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
package/dist/init/project.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface ProjectFacts {
|
|
|
13
13
|
instructionFiles: string[];
|
|
14
14
|
configFiles: string[];
|
|
15
15
|
gitignorePath?: string;
|
|
16
|
+
/** True when an astgraph code-graph index (`.flavor/astgraph/index.db`) exists. */
|
|
17
|
+
hasCodeGraph: boolean;
|
|
16
18
|
cautions: string[];
|
|
17
19
|
}
|
|
18
20
|
export interface InitResult {
|
|
@@ -22,4 +24,10 @@ export interface InitResult {
|
|
|
22
24
|
facts: ProjectFacts;
|
|
23
25
|
}
|
|
24
26
|
export declare function inspectProject(cwd: string): Promise<ProjectFacts>;
|
|
27
|
+
/**
|
|
28
|
+
* Copy the astgraph plugin (runtime + vendored WASM grammars + zod) into the
|
|
29
|
+
* workspace's project plugin directory. Mirrors the codeisland distribution
|
|
30
|
+
* pattern: an existing installation is never overwritten.
|
|
31
|
+
*/
|
|
32
|
+
export declare function copyAstgraphPlugin(cwd: string): Promise<void>;
|
|
25
33
|
export declare function initializeFlavor(cwd: string): Promise<InitResult>;
|
|
@@ -72,4 +72,18 @@ export declare class StructuredOutputError extends Error {
|
|
|
72
72
|
}
|
|
73
73
|
export declare function withStructuredOutput<T>(options: StructuredOutputOptions<T>): StructuredModel<T>;
|
|
74
74
|
export declare function strictJsonSchema(schema: z.ZodType<unknown>): Record<string, unknown>;
|
|
75
|
+
/**
|
|
76
|
+
* Extract the first JSON object or array from free-form model text (plain JSON,
|
|
77
|
+
* fenced ```json blocks, or JSON embedded in prose). Returns undefined when no
|
|
78
|
+
* parseable object is found.
|
|
79
|
+
*/
|
|
80
|
+
export declare function extractJsonObject(text: string): unknown;
|
|
81
|
+
/**
|
|
82
|
+
* Best-effort type coercion guided by a JSON schema. Some providers serialize
|
|
83
|
+
* typed fields as strings (`"10"` for an integer). This rewrites string→number /
|
|
84
|
+
* string→boolean where the schema demands those types, recursing into object
|
|
85
|
+
* properties and anyOf branches. Values already matching the schema are
|
|
86
|
+
* returned unchanged, so a valid payload is a no-op.
|
|
87
|
+
*/
|
|
88
|
+
export declare function coerceByJsonSchema(value: unknown, schema: unknown): unknown;
|
|
75
89
|
export declare function modelToolFromZod(name: string, description: string, schema: z.ZodType<unknown>): ModelTool;
|
|
@@ -15,6 +15,8 @@ export interface PermissionRequest {
|
|
|
15
15
|
args?: readonly string[];
|
|
16
16
|
cwd?: string;
|
|
17
17
|
allowAlways?: false;
|
|
18
|
+
/** Declared read-only by the tool definition; granted the same treatment as READ_TOOLS. */
|
|
19
|
+
readOnly?: boolean;
|
|
18
20
|
}
|
|
19
21
|
export interface PermissionEngineOptions {
|
|
20
22
|
workspace: string;
|
package/dist/plugins/types.d.ts
CHANGED
|
@@ -81,7 +81,7 @@ export interface PluginContext {
|
|
|
81
81
|
readonly config: unknown;
|
|
82
82
|
readonly logger: PluginLogger;
|
|
83
83
|
readonly services: PluginServices;
|
|
84
|
-
registerCommand(name: string, command: PluginCommandHandler): PluginDisposer;
|
|
84
|
+
registerCommand(name: string, command: PluginCommandHandler, description?: string): PluginDisposer;
|
|
85
85
|
registerTool(name: string, tool: ToolDefinition<unknown>): PluginDisposer;
|
|
86
86
|
registerHook(name: HookEventName, hook: HookHandler, options?: HookHandlerOptions): PluginDisposer;
|
|
87
87
|
registerSkillRoot(name: string, root: string): PluginDisposer;
|
|
@@ -108,7 +108,7 @@ export interface LoadedPlugin {
|
|
|
108
108
|
readonly root: string;
|
|
109
109
|
}
|
|
110
110
|
export interface PluginRegistrationCallbacks {
|
|
111
|
-
command(name: string, command: PluginCommandHandler): PluginDisposer;
|
|
111
|
+
command(name: string, command: PluginCommandHandler, description?: string): PluginDisposer;
|
|
112
112
|
tool(name: string, tool: ToolDefinition<unknown>): PluginDisposer;
|
|
113
113
|
hook(name: HookEventName, hook: HookHandler, options?: HookHandlerOptions): PluginDisposer;
|
|
114
114
|
/** Consumers must revalidate identity before access, or delegate reading to SkillRegistry. */
|