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.
Files changed (129) hide show
  1. package/README.md +36 -35
  2. package/README.zh-CN.md +36 -35
  3. package/dist/{app-MXWPZBEU.js → app-Z3YWFIBB.js} +5 -3
  4. package/dist/astgraph/db.mjs +237 -0
  5. package/dist/astgraph/extract.mjs +239 -0
  6. package/dist/astgraph/flavor-plugin.json +25 -0
  7. package/dist/astgraph/grammars.mjs +68 -0
  8. package/dist/astgraph/index.js +301 -0
  9. package/dist/astgraph/indexer.mjs +175 -0
  10. package/dist/astgraph/query.mjs +165 -0
  11. package/dist/astgraph/resolve.mjs +93 -0
  12. package/dist/astgraph/vendor/tree-sitter-javascript.wasm +0 -0
  13. package/dist/astgraph/vendor/tree-sitter-tsx.wasm +0 -0
  14. package/dist/astgraph/vendor/tree-sitter-typescript.wasm +0 -0
  15. package/dist/astgraph/vendor/tree-sitter.js +3980 -0
  16. package/dist/astgraph/vendor/tree-sitter.wasm +0 -0
  17. package/dist/astgraph/vendor/zod/LICENSE +21 -0
  18. package/dist/astgraph/vendor/zod/index.js +4 -0
  19. package/dist/astgraph/vendor/zod/locales/index.js +1 -0
  20. package/dist/astgraph/vendor/zod/locales/package.json +7 -0
  21. package/dist/astgraph/vendor/zod/package.json +135 -0
  22. package/dist/astgraph/vendor/zod/v4/classic/checks.js +1 -0
  23. package/dist/astgraph/vendor/zod/v4/classic/coerce.js +17 -0
  24. package/dist/astgraph/vendor/zod/v4/classic/compat.js +31 -0
  25. package/dist/astgraph/vendor/zod/v4/classic/errors.js +48 -0
  26. package/dist/astgraph/vendor/zod/v4/classic/external.js +20 -0
  27. package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +599 -0
  28. package/dist/astgraph/vendor/zod/v4/classic/index.js +4 -0
  29. package/dist/astgraph/vendor/zod/v4/classic/iso.js +30 -0
  30. package/dist/astgraph/vendor/zod/v4/classic/package.json +7 -0
  31. package/dist/astgraph/vendor/zod/v4/classic/parse.js +15 -0
  32. package/dist/astgraph/vendor/zod/v4/classic/schemas.js +1395 -0
  33. package/dist/astgraph/vendor/zod/v4/core/api.js +1087 -0
  34. package/dist/astgraph/vendor/zod/v4/core/checks.js +575 -0
  35. package/dist/astgraph/vendor/zod/v4/core/core.js +78 -0
  36. package/dist/astgraph/vendor/zod/v4/core/doc.js +35 -0
  37. package/dist/astgraph/vendor/zod/v4/core/errors.js +185 -0
  38. package/dist/astgraph/vendor/zod/v4/core/index.js +16 -0
  39. package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +95 -0
  40. package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +601 -0
  41. package/dist/astgraph/vendor/zod/v4/core/json-schema.js +1 -0
  42. package/dist/astgraph/vendor/zod/v4/core/package.json +7 -0
  43. package/dist/astgraph/vendor/zod/v4/core/parse.js +93 -0
  44. package/dist/astgraph/vendor/zod/v4/core/regexes.js +139 -0
  45. package/dist/astgraph/vendor/zod/v4/core/registries.js +51 -0
  46. package/dist/astgraph/vendor/zod/v4/core/schemas.js +2239 -0
  47. package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +1 -0
  48. package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +448 -0
  49. package/dist/astgraph/vendor/zod/v4/core/util.js +674 -0
  50. package/dist/astgraph/vendor/zod/v4/core/versions.js +5 -0
  51. package/dist/astgraph/vendor/zod/v4/index.js +3 -0
  52. package/dist/astgraph/vendor/zod/v4/locales/ar.js +106 -0
  53. package/dist/astgraph/vendor/zod/v4/locales/az.js +105 -0
  54. package/dist/astgraph/vendor/zod/v4/locales/be.js +156 -0
  55. package/dist/astgraph/vendor/zod/v4/locales/bg.js +120 -0
  56. package/dist/astgraph/vendor/zod/v4/locales/ca.js +107 -0
  57. package/dist/astgraph/vendor/zod/v4/locales/cs.js +111 -0
  58. package/dist/astgraph/vendor/zod/v4/locales/da.js +115 -0
  59. package/dist/astgraph/vendor/zod/v4/locales/de.js +108 -0
  60. package/dist/astgraph/vendor/zod/v4/locales/el.js +109 -0
  61. package/dist/astgraph/vendor/zod/v4/locales/en.js +113 -0
  62. package/dist/astgraph/vendor/zod/v4/locales/eo.js +109 -0
  63. package/dist/astgraph/vendor/zod/v4/locales/es.js +132 -0
  64. package/dist/astgraph/vendor/zod/v4/locales/fa.js +114 -0
  65. package/dist/astgraph/vendor/zod/v4/locales/fi.js +112 -0
  66. package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +107 -0
  67. package/dist/astgraph/vendor/zod/v4/locales/fr.js +125 -0
  68. package/dist/astgraph/vendor/zod/v4/locales/he.js +214 -0
  69. package/dist/astgraph/vendor/zod/v4/locales/hr.js +122 -0
  70. package/dist/astgraph/vendor/zod/v4/locales/hu.js +108 -0
  71. package/dist/astgraph/vendor/zod/v4/locales/hy.js +147 -0
  72. package/dist/astgraph/vendor/zod/v4/locales/id.js +106 -0
  73. package/dist/astgraph/vendor/zod/v4/locales/index.js +52 -0
  74. package/dist/astgraph/vendor/zod/v4/locales/is.js +109 -0
  75. package/dist/astgraph/vendor/zod/v4/locales/it.js +108 -0
  76. package/dist/astgraph/vendor/zod/v4/locales/ja.js +107 -0
  77. package/dist/astgraph/vendor/zod/v4/locales/ka.js +112 -0
  78. package/dist/astgraph/vendor/zod/v4/locales/kh.js +5 -0
  79. package/dist/astgraph/vendor/zod/v4/locales/km.js +110 -0
  80. package/dist/astgraph/vendor/zod/v4/locales/ko.js +111 -0
  81. package/dist/astgraph/vendor/zod/v4/locales/lt.js +203 -0
  82. package/dist/astgraph/vendor/zod/v4/locales/mk.js +109 -0
  83. package/dist/astgraph/vendor/zod/v4/locales/ms.js +107 -0
  84. package/dist/astgraph/vendor/zod/v4/locales/nl.js +110 -0
  85. package/dist/astgraph/vendor/zod/v4/locales/no.js +108 -0
  86. package/dist/astgraph/vendor/zod/v4/locales/ota.js +109 -0
  87. package/dist/astgraph/vendor/zod/v4/locales/package.json +7 -0
  88. package/dist/astgraph/vendor/zod/v4/locales/pl.js +109 -0
  89. package/dist/astgraph/vendor/zod/v4/locales/ps.js +114 -0
  90. package/dist/astgraph/vendor/zod/v4/locales/pt.js +108 -0
  91. package/dist/astgraph/vendor/zod/v4/locales/ro.js +119 -0
  92. package/dist/astgraph/vendor/zod/v4/locales/ru.js +156 -0
  93. package/dist/astgraph/vendor/zod/v4/locales/sl.js +109 -0
  94. package/dist/astgraph/vendor/zod/v4/locales/sv.js +110 -0
  95. package/dist/astgraph/vendor/zod/v4/locales/ta.js +110 -0
  96. package/dist/astgraph/vendor/zod/v4/locales/th.js +110 -0
  97. package/dist/astgraph/vendor/zod/v4/locales/tr.js +105 -0
  98. package/dist/astgraph/vendor/zod/v4/locales/ua.js +5 -0
  99. package/dist/astgraph/vendor/zod/v4/locales/uk.js +108 -0
  100. package/dist/astgraph/vendor/zod/v4/locales/ur.js +110 -0
  101. package/dist/astgraph/vendor/zod/v4/locales/uz.js +110 -0
  102. package/dist/astgraph/vendor/zod/v4/locales/vi.js +108 -0
  103. package/dist/astgraph/vendor/zod/v4/locales/yo.js +107 -0
  104. package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +109 -0
  105. package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +107 -0
  106. package/dist/astgraph/vendor/zod/v4/mini/checks.js +1 -0
  107. package/dist/astgraph/vendor/zod/v4/mini/coerce.js +22 -0
  108. package/dist/astgraph/vendor/zod/v4/mini/external.js +14 -0
  109. package/dist/astgraph/vendor/zod/v4/mini/index.js +3 -0
  110. package/dist/astgraph/vendor/zod/v4/mini/iso.js +34 -0
  111. package/dist/astgraph/vendor/zod/v4/mini/package.json +7 -0
  112. package/dist/astgraph/vendor/zod/v4/mini/parse.js +1 -0
  113. package/dist/astgraph/vendor/zod/v4/mini/schemas.js +961 -0
  114. package/dist/astgraph/vendor/zod/v4/package.json +7 -0
  115. package/dist/{chunk-EY6KE7L2.js → chunk-G6Q2Y2A7.js} +1 -1
  116. package/dist/{chunk-OT5XIN6G.js → chunk-Y5MZDG7I.js} +161 -18
  117. package/dist/cli.js +3 -3
  118. package/dist/desktop/main.js +161 -18
  119. package/dist/desktop-renderer/assets/{index-sgEm4kjf.js → index-CCnSpff0.js} +1 -1
  120. package/dist/desktop-renderer/index.html +1 -1
  121. package/dist/init/project.d.ts +8 -0
  122. package/dist/models/structured.d.ts +14 -0
  123. package/dist/permissions/engine.d.ts +2 -0
  124. package/dist/plugins/types.d.ts +2 -2
  125. package/dist/sdk/index.js +2 -2
  126. package/dist/tools/shell.d.ts +1 -1
  127. package/dist/tools/types.d.ts +2 -0
  128. package/dist/ui/session.d.ts +4 -1
  129. package/package.json +5 -3
@@ -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 READ_TOOLS.has(request.tool) ? { decision: "allow" } : { decision: "deny", reason: "Plan mode is read-only" };
6761
+ return isRead ? { decision: "allow" } : { decision: "deny", reason: "Plan mode is read-only" };
6658
6762
  }
6659
- if (READ_TOOLS.has(request.tool)) {
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
- background: z19.boolean().optional()
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 === true) {
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 WriteInput2 = z34.object({ id: Id, data: z34.string().max(1e5), enter: z34.boolean().optional() });
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
- terminals.write(input.id, owner(context), input.data + (input.enter ? "\r" : ""));
20461
- return { id: input.id, written: input.data.length + (input.enter ? 1 : 0) };
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
- pluginCommands.set(name, handler);
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.keys()].sort(),
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-sgEm4kjf.js"></script>
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>
@@ -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;
@@ -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. */