flavor-code 1.2.13 → 1.2.15

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 (136) hide show
  1. package/README.md +9 -1
  2. package/README.zh-CN.md +9 -1
  3. package/dist/agent/planner.d.ts +2 -0
  4. package/dist/{app-Z3YWFIBB.js → app-3KW2FTVJ.js} +2 -2
  5. package/dist/astgraph/db.mjs +237 -237
  6. package/dist/astgraph/extract.mjs +239 -239
  7. package/dist/astgraph/flavor-plugin.json +25 -25
  8. package/dist/astgraph/grammars.mjs +68 -68
  9. package/dist/astgraph/index.js +301 -301
  10. package/dist/astgraph/indexer.mjs +175 -175
  11. package/dist/astgraph/query.mjs +165 -165
  12. package/dist/astgraph/resolve.mjs +93 -93
  13. package/dist/astgraph/vendor/tree-sitter.js +3980 -3980
  14. package/dist/astgraph/vendor/zod/LICENSE +21 -21
  15. package/dist/astgraph/vendor/zod/index.js +4 -4
  16. package/dist/astgraph/vendor/zod/locales/index.js +1 -1
  17. package/dist/astgraph/vendor/zod/locales/package.json +7 -7
  18. package/dist/astgraph/vendor/zod/package.json +135 -135
  19. package/dist/astgraph/vendor/zod/v4/classic/checks.js +1 -1
  20. package/dist/astgraph/vendor/zod/v4/classic/coerce.js +17 -17
  21. package/dist/astgraph/vendor/zod/v4/classic/compat.js +31 -31
  22. package/dist/astgraph/vendor/zod/v4/classic/errors.js +48 -48
  23. package/dist/astgraph/vendor/zod/v4/classic/external.js +20 -20
  24. package/dist/astgraph/vendor/zod/v4/classic/from-json-schema.js +599 -599
  25. package/dist/astgraph/vendor/zod/v4/classic/index.js +4 -4
  26. package/dist/astgraph/vendor/zod/v4/classic/iso.js +30 -30
  27. package/dist/astgraph/vendor/zod/v4/classic/package.json +7 -7
  28. package/dist/astgraph/vendor/zod/v4/classic/parse.js +15 -15
  29. package/dist/astgraph/vendor/zod/v4/classic/schemas.js +1395 -1395
  30. package/dist/astgraph/vendor/zod/v4/core/api.js +1087 -1087
  31. package/dist/astgraph/vendor/zod/v4/core/checks.js +575 -575
  32. package/dist/astgraph/vendor/zod/v4/core/core.js +78 -78
  33. package/dist/astgraph/vendor/zod/v4/core/doc.js +35 -35
  34. package/dist/astgraph/vendor/zod/v4/core/errors.js +185 -185
  35. package/dist/astgraph/vendor/zod/v4/core/index.js +16 -16
  36. package/dist/astgraph/vendor/zod/v4/core/json-schema-generator.js +95 -95
  37. package/dist/astgraph/vendor/zod/v4/core/json-schema-processors.js +601 -601
  38. package/dist/astgraph/vendor/zod/v4/core/json-schema.js +1 -1
  39. package/dist/astgraph/vendor/zod/v4/core/package.json +7 -7
  40. package/dist/astgraph/vendor/zod/v4/core/parse.js +93 -93
  41. package/dist/astgraph/vendor/zod/v4/core/regexes.js +139 -139
  42. package/dist/astgraph/vendor/zod/v4/core/registries.js +51 -51
  43. package/dist/astgraph/vendor/zod/v4/core/schemas.js +2239 -2239
  44. package/dist/astgraph/vendor/zod/v4/core/standard-schema.js +1 -1
  45. package/dist/astgraph/vendor/zod/v4/core/to-json-schema.js +448 -448
  46. package/dist/astgraph/vendor/zod/v4/core/util.js +674 -674
  47. package/dist/astgraph/vendor/zod/v4/core/versions.js +5 -5
  48. package/dist/astgraph/vendor/zod/v4/index.js +3 -3
  49. package/dist/astgraph/vendor/zod/v4/locales/ar.js +106 -106
  50. package/dist/astgraph/vendor/zod/v4/locales/az.js +105 -105
  51. package/dist/astgraph/vendor/zod/v4/locales/be.js +156 -156
  52. package/dist/astgraph/vendor/zod/v4/locales/bg.js +120 -120
  53. package/dist/astgraph/vendor/zod/v4/locales/ca.js +107 -107
  54. package/dist/astgraph/vendor/zod/v4/locales/cs.js +111 -111
  55. package/dist/astgraph/vendor/zod/v4/locales/da.js +115 -115
  56. package/dist/astgraph/vendor/zod/v4/locales/de.js +108 -108
  57. package/dist/astgraph/vendor/zod/v4/locales/el.js +109 -109
  58. package/dist/astgraph/vendor/zod/v4/locales/en.js +113 -113
  59. package/dist/astgraph/vendor/zod/v4/locales/eo.js +109 -109
  60. package/dist/astgraph/vendor/zod/v4/locales/es.js +132 -132
  61. package/dist/astgraph/vendor/zod/v4/locales/fa.js +114 -114
  62. package/dist/astgraph/vendor/zod/v4/locales/fi.js +112 -112
  63. package/dist/astgraph/vendor/zod/v4/locales/fr-CA.js +107 -107
  64. package/dist/astgraph/vendor/zod/v4/locales/fr.js +125 -125
  65. package/dist/astgraph/vendor/zod/v4/locales/he.js +214 -214
  66. package/dist/astgraph/vendor/zod/v4/locales/hr.js +122 -122
  67. package/dist/astgraph/vendor/zod/v4/locales/hu.js +108 -108
  68. package/dist/astgraph/vendor/zod/v4/locales/hy.js +147 -147
  69. package/dist/astgraph/vendor/zod/v4/locales/id.js +106 -106
  70. package/dist/astgraph/vendor/zod/v4/locales/index.js +52 -52
  71. package/dist/astgraph/vendor/zod/v4/locales/is.js +109 -109
  72. package/dist/astgraph/vendor/zod/v4/locales/it.js +108 -108
  73. package/dist/astgraph/vendor/zod/v4/locales/ja.js +107 -107
  74. package/dist/astgraph/vendor/zod/v4/locales/ka.js +112 -112
  75. package/dist/astgraph/vendor/zod/v4/locales/kh.js +5 -5
  76. package/dist/astgraph/vendor/zod/v4/locales/km.js +110 -110
  77. package/dist/astgraph/vendor/zod/v4/locales/ko.js +111 -111
  78. package/dist/astgraph/vendor/zod/v4/locales/lt.js +203 -203
  79. package/dist/astgraph/vendor/zod/v4/locales/mk.js +109 -109
  80. package/dist/astgraph/vendor/zod/v4/locales/ms.js +107 -107
  81. package/dist/astgraph/vendor/zod/v4/locales/nl.js +110 -110
  82. package/dist/astgraph/vendor/zod/v4/locales/no.js +108 -108
  83. package/dist/astgraph/vendor/zod/v4/locales/ota.js +109 -109
  84. package/dist/astgraph/vendor/zod/v4/locales/package.json +7 -7
  85. package/dist/astgraph/vendor/zod/v4/locales/pl.js +109 -109
  86. package/dist/astgraph/vendor/zod/v4/locales/ps.js +114 -114
  87. package/dist/astgraph/vendor/zod/v4/locales/pt.js +108 -108
  88. package/dist/astgraph/vendor/zod/v4/locales/ro.js +119 -119
  89. package/dist/astgraph/vendor/zod/v4/locales/ru.js +156 -156
  90. package/dist/astgraph/vendor/zod/v4/locales/sl.js +109 -109
  91. package/dist/astgraph/vendor/zod/v4/locales/sv.js +110 -110
  92. package/dist/astgraph/vendor/zod/v4/locales/ta.js +110 -110
  93. package/dist/astgraph/vendor/zod/v4/locales/th.js +110 -110
  94. package/dist/astgraph/vendor/zod/v4/locales/tr.js +105 -105
  95. package/dist/astgraph/vendor/zod/v4/locales/ua.js +5 -5
  96. package/dist/astgraph/vendor/zod/v4/locales/uk.js +108 -108
  97. package/dist/astgraph/vendor/zod/v4/locales/ur.js +110 -110
  98. package/dist/astgraph/vendor/zod/v4/locales/uz.js +110 -110
  99. package/dist/astgraph/vendor/zod/v4/locales/vi.js +108 -108
  100. package/dist/astgraph/vendor/zod/v4/locales/yo.js +107 -107
  101. package/dist/astgraph/vendor/zod/v4/locales/zh-CN.js +109 -109
  102. package/dist/astgraph/vendor/zod/v4/locales/zh-TW.js +107 -107
  103. package/dist/astgraph/vendor/zod/v4/mini/checks.js +1 -1
  104. package/dist/astgraph/vendor/zod/v4/mini/coerce.js +22 -22
  105. package/dist/astgraph/vendor/zod/v4/mini/external.js +14 -14
  106. package/dist/astgraph/vendor/zod/v4/mini/index.js +3 -3
  107. package/dist/astgraph/vendor/zod/v4/mini/iso.js +34 -34
  108. package/dist/astgraph/vendor/zod/v4/mini/package.json +7 -7
  109. package/dist/astgraph/vendor/zod/v4/mini/parse.js +1 -1
  110. package/dist/astgraph/vendor/zod/v4/mini/schemas.js +961 -961
  111. package/dist/astgraph/vendor/zod/v4/package.json +7 -7
  112. package/dist/{chunk-Y5MZDG7I.js → chunk-5TG3E2EJ.js} +3253 -1909
  113. package/dist/{chunk-G6Q2Y2A7.js → chunk-BKARQJQZ.js} +1 -1
  114. package/dist/{chunk-XFCJXRJ2.js → chunk-IG4Z23CL.js} +6 -0
  115. package/dist/cli.js +80 -18
  116. package/dist/config/schema.d.ts +6 -0
  117. package/dist/desktop/main.js +6216 -4807
  118. package/dist/desktop-renderer/assets/{index-CCnSpff0.js → index-BCJjMvbX.js} +1 -1
  119. package/dist/desktop-renderer/index.html +1 -1
  120. package/dist/evolve/loader.d.ts +21 -0
  121. package/dist/evolve/service.d.ts +37 -0
  122. package/dist/evolve/store.d.ts +117 -0
  123. package/dist/git/insights.d.ts +52 -0
  124. package/dist/git/service.d.ts +43 -0
  125. package/dist/git/tools.d.ts +9 -0
  126. package/dist/hooks/types.d.ts +5 -1
  127. package/dist/{load-6ZMEBHSG.js → load-GKA7P6RJ.js} +1 -1
  128. package/dist/plugins/host.d.ts +9 -0
  129. package/dist/plugins/types.d.ts +1 -0
  130. package/dist/sdk/index.js +3 -3
  131. package/dist/session/store.d.ts +1 -0
  132. package/dist/tools/shell.d.ts +13 -0
  133. package/dist/ui/commands.d.ts +11 -2
  134. package/dist/ui/session.d.ts +3 -0
  135. package/package.json +1 -1
  136. package//346/212/200/346/234/257/346/226/271/346/241/210/346/212/245/345/221/212.md +303 -1
@@ -4,7 +4,7 @@ import {
4
4
  message,
5
5
  redactErrorText,
6
6
  redactSecrets
7
- } from "./chunk-Y5MZDG7I.js";
7
+ } from "./chunk-5TG3E2EJ.js";
8
8
 
9
9
  // src/rpc/server.ts
10
10
  import { createInterface } from "readline";
@@ -147,6 +147,12 @@ var FlavorConfigSchema = z.object({
147
147
  incidents: z.object({
148
148
  enabled: z.boolean().default(false),
149
149
  webhookUrl: z.string().url().optional()
150
+ }).prefault({}),
151
+ evolve: z.object({
152
+ promptTop: z.number().int().min(1).max(10).default(3),
153
+ minRepeats: z.number().int().min(2).max(100).default(2),
154
+ testCommand: z.string().trim().min(1).default("npm test"),
155
+ testTimeoutMs: z.number().int().min(1e3).max(6e5).default(12e4)
150
156
  }).prefault({})
151
157
  });
152
158
 
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import { createRequire } from "node:module"; const require = createRequire(impor
3
3
  import {
4
4
  FlavorRpcServer,
5
5
  TraceRecorder
6
- } from "./chunk-G6Q2Y2A7.js";
6
+ } from "./chunk-BKARQJQZ.js";
7
7
  import {
8
8
  staticTaskLines
9
9
  } from "./chunk-KKIBYDJI.js";
@@ -22,7 +22,7 @@ import {
22
22
  packageVersion,
23
23
  redactErrorText,
24
24
  runPalBroker
25
- } from "./chunk-Y5MZDG7I.js";
25
+ } from "./chunk-5TG3E2EJ.js";
26
26
  import {
27
27
  McpServerConfigSchema,
28
28
  McpServerNameSchema,
@@ -31,7 +31,7 @@ import {
31
31
  readRecoverableFile,
32
32
  setProjectSkillDisabled,
33
33
  updateProtectedFile
34
- } from "./chunk-XFCJXRJ2.js";
34
+ } from "./chunk-IG4Z23CL.js";
35
35
  import "./chunk-RQTYHUMK.js";
36
36
  import "./chunk-S32JRDZK.js";
37
37
 
@@ -43,10 +43,71 @@ import { posix, resolve as resolve3 } from "path";
43
43
  import { fileURLToPath } from "url";
44
44
  import { Command, Option } from "commander";
45
45
 
46
+ // src/utils/crash-guard.ts
47
+ import { mkdirSync, writeFileSync } from "fs";
48
+ import { join } from "path";
49
+ var installed = false;
50
+ function installCrashGuard(options = {}) {
51
+ if (installed) return;
52
+ installed = true;
53
+ const crashLogDir = () => {
54
+ try {
55
+ return join((options.workspace ?? process.cwd)(), ".flavor");
56
+ } catch {
57
+ return process.cwd();
58
+ }
59
+ };
60
+ const writeCrashLog = (kind, detail) => {
61
+ try {
62
+ const dir = crashLogDir();
63
+ mkdirSync(dir, { recursive: true });
64
+ const path = join(dir, `crash-${(/* @__PURE__ */ new Date()).toISOString().replace(/[^0-9]/g, "")}-${process.pid}.log`);
65
+ writeFileSync(path, [
66
+ `kind: ${kind}`,
67
+ `version: ${process.version}`,
68
+ `platform: ${process.platform}`,
69
+ `time: ${(/* @__PURE__ */ new Date()).toISOString()}`,
70
+ "",
71
+ detail
72
+ ].join("\n"), { encoding: "utf8", mode: 384 });
73
+ return path;
74
+ } catch {
75
+ return void 0;
76
+ }
77
+ };
78
+ const restoreTerminal = () => {
79
+ try {
80
+ if (process.stdout.isTTY === true) process.stdout.write("\x1B[?25h\x1B[?1049l");
81
+ } catch {
82
+ }
83
+ };
84
+ const describe = (reason) => {
85
+ if (reason instanceof Error) return `${reason.name}: ${reason.message}
86
+ ${reason.stack ?? ""}`;
87
+ return String(reason);
88
+ };
89
+ const crash = (kind, reason) => {
90
+ const detail = describe(reason);
91
+ const logPath = writeCrashLog(kind, detail);
92
+ restoreTerminal();
93
+ try {
94
+ const safe = redactErrorText(detail.split("\n").slice(0, 3).join("\n"));
95
+ process.stderr.write(`flavor crashed (${kind}): ${safe}
96
+ `);
97
+ if (logPath !== void 0) process.stderr.write(`crash log: ${logPath}
98
+ `);
99
+ } catch {
100
+ }
101
+ process.exit(1);
102
+ };
103
+ process.on("unhandledRejection", (reason) => crash("unhandledRejection", reason));
104
+ process.on("uncaughtException", (error) => crash("uncaughtException", error));
105
+ }
106
+
46
107
  // src/skills/manager.ts
47
108
  import { lstat, mkdir, readFile, readdir, realpath, rm, writeFile } from "fs/promises";
48
109
  import { homedir } from "os";
49
- import { isAbsolute, join, relative, resolve, sep } from "path";
110
+ import { isAbsolute, join as join2, relative, resolve, sep } from "path";
50
111
  import { stringify } from "yaml";
51
112
  var SkillManager = class {
52
113
  #workspace;
@@ -69,7 +130,7 @@ var SkillManager = class {
69
130
  async create(draft) {
70
131
  const value = parseDraft(draft);
71
132
  const projectRoot = this.#projectRoot();
72
- const directory = join(projectRoot, value.name);
133
+ const directory = join2(projectRoot, value.name);
73
134
  await mkdir(projectRoot, { recursive: true, mode: 448 });
74
135
  try {
75
136
  await mkdir(directory, { mode: 448 });
@@ -78,7 +139,7 @@ var SkillManager = class {
78
139
  throw error;
79
140
  }
80
141
  try {
81
- await writeFile(join(directory, "SKILL.md"), renderSkill(value), { encoding: "utf8", flag: "wx", mode: 384 });
142
+ await writeFile(join2(directory, "SKILL.md"), renderSkill(value), { encoding: "utf8", flag: "wx", mode: 384 });
82
143
  await this.#persistEnabled(value.name, true);
83
144
  return this.get(value.name);
84
145
  } catch (error) {
@@ -96,7 +157,7 @@ var SkillManager = class {
96
157
  throw error;
97
158
  });
98
159
  if (!info.isDirectory() || info.isSymbolicLink()) throw new Error(`Project skill path is not a real directory: ${validName}`);
99
- const skillFile = join(directory, "SKILL.md");
160
+ const skillFile = join2(directory, "SKILL.md");
100
161
  const fileInfo = await lstat(skillFile);
101
162
  if (!fileInfo.isFile() || fileInfo.isSymbolicLink()) throw new Error(`Project skill file is not a real file: ${validName}`);
102
163
  await writeFile(skillFile, renderSkill(value), { encoding: "utf8", mode: 384 });
@@ -128,12 +189,12 @@ var SkillManager = class {
128
189
  async #registry() {
129
190
  const loaded = await loadConfig({ cwd: this.#workspace, home: this.#home });
130
191
  const [globalPluginRoots, projectPluginRoots] = await Promise.all([
131
- discoverPluginSkillRoots(join(this.#home, ".flavor-code", "plugins")),
132
- discoverPluginSkillRoots(join(this.#workspace, ".flavor", "plugins"))
192
+ discoverPluginSkillRoots(join2(this.#home, ".flavor-code", "plugins")),
193
+ discoverPluginSkillRoots(join2(this.#workspace, ".flavor", "plugins"))
133
194
  ]);
134
195
  return {
135
196
  registry: new SkillRegistry({
136
- globalRoots: [join(this.#home, ".flavor-code", "skills"), ...globalPluginRoots],
197
+ globalRoots: [join2(this.#home, ".flavor-code", "skills"), ...globalPluginRoots],
137
198
  projectRoots: [this.#projectRoot(), ...projectPluginRoots]
138
199
  }),
139
200
  disabled: new Set(loaded.config.skills.disabled)
@@ -149,10 +210,10 @@ var SkillManager = class {
149
210
  };
150
211
  }
151
212
  #projectRoot() {
152
- return join(this.#workspace, ".flavor", "skills");
213
+ return join2(this.#workspace, ".flavor", "skills");
153
214
  }
154
215
  #projectSkillDirectory(name) {
155
- return join(this.#projectRoot(), name);
216
+ return join2(this.#projectRoot(), name);
156
217
  }
157
218
  };
158
219
  function parseName(value) {
@@ -193,9 +254,9 @@ async function discoverPluginSkillRoots(directory) {
193
254
  const roots = [];
194
255
  for (const entry of entries) {
195
256
  if (!entry.isDirectory() || entry.isSymbolicLink()) continue;
196
- const pluginRoot = await realpath(join(directory, entry.name));
257
+ const pluginRoot = await realpath(join2(directory, entry.name));
197
258
  try {
198
- const manifest = PluginManifestSchema.parse(JSON.parse(await readFile(join(pluginRoot, "flavor-plugin.json"), "utf8")));
259
+ const manifest = PluginManifestSchema.parse(JSON.parse(await readFile(join2(pluginRoot, "flavor-plugin.json"), "utf8")));
199
260
  for (const contribution of manifest.contributes.skillRoots) {
200
261
  const candidate = resolve(pluginRoot, contribution.path);
201
262
  const info = await lstat(candidate);
@@ -312,11 +373,11 @@ function parseMemoryType(value) {
312
373
  }
313
374
 
314
375
  // src/mcp/config-manager.ts
315
- import { join as join2 } from "path";
376
+ import { join as join3 } from "path";
316
377
  var ProjectMcpConfigManager = class {
317
378
  path;
318
379
  constructor(workspace) {
319
- this.path = join2(workspace, ".flavor", "flavor.json");
380
+ this.path = join3(workspace, ".flavor", "flavor.json");
320
381
  }
321
382
  async list() {
322
383
  const document = await readRecoverableFile(this.path, (raw) => parseDocument(this.path, raw));
@@ -673,7 +734,7 @@ async function runEvaluationFile(path, outputPath) {
673
734
  })),
674
735
  ...parsed.maxTokens === void 0 ? {} : { maxTokens: parsed.maxTokens }
675
736
  };
676
- const configured = await import("./load-6ZMEBHSG.js").then(({ loadConfig: loadConfig2 }) => loadConfig2({ cwd: workspace, home: process.env.USERPROFILE ?? process.env.HOME ?? workspace }));
737
+ const configured = await import("./load-GKA7P6RJ.js").then(({ loadConfig: loadConfig2 }) => loadConfig2({ cwd: workspace, home: process.env.USERPROFILE ?? process.env.HOME ?? workspace }));
677
738
  const environment = createExecutionEnvironment(workspace, configured.config.execution) ?? new LocalExecutionEnvironment();
678
739
  let report;
679
740
  try {
@@ -800,7 +861,7 @@ async function runInteractiveCli(props) {
800
861
  const [{ render, AlternateScreen }, { createElement }, { App }] = await Promise.all([
801
862
  import("./claude-ink-ORUA7GWG.js"),
802
863
  import("react"),
803
- import("./app-Z3YWFIBB.js")
864
+ import("./app-3KW2FTVJ.js")
804
865
  ]);
805
866
  const instance = await render(createElement(
806
867
  AlternateScreen,
@@ -936,6 +997,7 @@ function safeError(error) {
936
997
  if (process.argv[1]) {
937
998
  const scriptPath = fileURLToPath(import.meta.url);
938
999
  if (realpathSync(scriptPath) === realpathSync(process.argv[1])) {
1000
+ installCrashGuard();
939
1001
  try {
940
1002
  await createProgram().parseAsync(process.argv);
941
1003
  } catch (error) {
@@ -169,6 +169,12 @@ export declare const FlavorConfigSchema: z.ZodObject<{
169
169
  enabled: z.ZodDefault<z.ZodBoolean>;
170
170
  webhookUrl: z.ZodOptional<z.ZodString>;
171
171
  }, z.core.$strip>>;
172
+ evolve: z.ZodPrefault<z.ZodObject<{
173
+ promptTop: z.ZodDefault<z.ZodNumber>;
174
+ minRepeats: z.ZodDefault<z.ZodNumber>;
175
+ testCommand: z.ZodDefault<z.ZodString>;
176
+ testTimeoutMs: z.ZodDefault<z.ZodNumber>;
177
+ }, z.core.$strip>>;
172
178
  }, z.core.$strip>;
173
179
  export type FlavorConfig = z.infer<typeof FlavorConfigSchema>;
174
180
  export type ProviderConfig = z.infer<typeof ProviderConfigSchema>;