thoth-agents 0.13.0 → 0.13.1

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.
@@ -19,7 +19,7 @@ import {
19
19
  renderAgentRoutingDescription,
20
20
  renderPromptSection,
21
21
  renderRolePrompt
22
- } from "./chunk-YCWGTDFE.js";
22
+ } from "./chunk-HFBCW4MD.js";
23
23
 
24
24
  // src/harness/writers/pi-agent.ts
25
25
  var PI_MANAGED_OWNER = "thoth-agents";
@@ -17,7 +17,7 @@ import {
17
17
  savePiModelConfig,
18
18
  syncPiSpecialists,
19
19
  writePiManagedText
20
- } from "./chunk-VVYAQTYE.js";
20
+ } from "./chunk-422L76R5.js";
21
21
  import {
22
22
  ALL_AGENT_NAMES,
23
23
  CLAUDE_CODE_PROMPT_DIALECT,
@@ -57,7 +57,7 @@ import {
57
57
  withoutLegacyPresets,
58
58
  writeConfig,
59
59
  writeLiteConfig
60
- } from "./chunk-YCWGTDFE.js";
60
+ } from "./chunk-HFBCW4MD.js";
61
61
 
62
62
  // src/cli/model-effort.ts
63
63
  function normalizeEffortSelection(value) {
@@ -950,6 +950,17 @@ function detectCurrentConfig() {
950
950
 
951
951
  // src/config/loader.ts
952
952
  var PROMPTS_DIR_NAME = "thoth-agents";
953
+ function withoutInjectedDefaults(parsed, raw) {
954
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed) || raw === null || typeof raw !== "object") {
955
+ return parsed;
956
+ }
957
+ return Object.fromEntries(
958
+ Object.entries(parsed).filter(([key]) => Object.hasOwn(raw, key)).map(([key, value]) => [
959
+ key,
960
+ withoutInjectedDefaults(value, raw[key])
961
+ ])
962
+ );
963
+ }
953
964
  function loadConfigFromPath(configPath, unsupportedKeyPaths) {
954
965
  try {
955
966
  const content = fs2.readFileSync(configPath, "utf-8");
@@ -963,7 +974,7 @@ function loadConfigFromPath(configPath, unsupportedKeyPaths) {
963
974
  console.warn(result.error.format());
964
975
  return null;
965
976
  }
966
- return result.data;
977
+ return withoutInjectedDefaults(result.data, rawConfig);
967
978
  } catch (error) {
968
979
  if (error instanceof Error && "code" in error && error.code !== "ENOENT") {
969
980
  console.warn(
@@ -988,9 +999,9 @@ function findConfigPath(basePath) {
988
999
  function deepMerge(base, override) {
989
1000
  if (!base) return override;
990
1001
  if (!override) return base;
991
- const result = { ...base };
1002
+ const result = Object.assign(/* @__PURE__ */ Object.create(null), base);
992
1003
  for (const key of Object.keys(override)) {
993
- const baseVal = base[key];
1004
+ const baseVal = Object.hasOwn(base, key) ? base[key] : void 0;
994
1005
  const overrideVal = override[key];
995
1006
  if (typeof baseVal === "object" && baseVal !== null && typeof overrideVal === "object" && overrideVal !== null && !Array.isArray(baseVal) && !Array.isArray(overrideVal)) {
996
1007
  result[key] = deepMerge(
@@ -1030,7 +1041,16 @@ function loadPluginConfig(directory) {
1030
1041
  `[thoth-agents] Config keys preset/presets are unsupported and ignored (${[...unsupportedKeyPaths].join(", ")}).`
1031
1042
  );
1032
1043
  }
1033
- return config;
1044
+ const result = PluginConfigSchema.safeParse(config);
1045
+ if (!result.success) {
1046
+ const sourcePaths = [userConfigPath, projectConfigPath].filter(Boolean);
1047
+ console.warn(
1048
+ `[thoth-agents] Invalid merged config from ${sourcePaths.join(", ")}:`
1049
+ );
1050
+ console.warn(result.error.format());
1051
+ return {};
1052
+ }
1053
+ return result.data;
1034
1054
  }
1035
1055
  function loadAgentPrompt(agentName) {
1036
1056
  const promptsDir = path2.join(getConfigDir(), PROMPTS_DIR_NAME);
@@ -16,7 +16,7 @@ import {
16
16
  loadAgentPrompt,
17
17
  renderAgentRoutingDescription,
18
18
  renderRolePrompt
19
- } from "./chunk-YCWGTDFE.js";
19
+ } from "./chunk-HFBCW4MD.js";
20
20
 
21
21
  // src/agents/designer.ts
22
22
  var DESIGNER_PROMPT = renderRolePrompt(
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  opencodeAdapter
4
- } from "../chunk-NOLDFT7O.js";
4
+ } from "../chunk-KUA3F4D6.js";
5
5
  import {
6
6
  CODEX_PLUGIN_ID,
7
7
  CODEX_ROLE_NAMES,
@@ -80,11 +80,11 @@ import {
80
80
  safeAtomicWriteFileSync,
81
81
  scalarLocation,
82
82
  syncOpenCodeOwnedSkills
83
- } from "../chunk-5MYXVRZZ.js";
83
+ } from "../chunk-A7IGKE4R.js";
84
84
  import "../chunk-MIDGZE34.js";
85
85
  import {
86
86
  piAdapter
87
- } from "../chunk-VVYAQTYE.js";
87
+ } from "../chunk-422L76R5.js";
88
88
  import {
89
89
  ALL_AGENT_NAMES,
90
90
  detectCurrentConfig,
@@ -95,7 +95,7 @@ import {
95
95
  resolveExecutingPackageVersion,
96
96
  updateOpenCodeMainConfig,
97
97
  writeLiteConfig
98
- } from "../chunk-YCWGTDFE.js";
98
+ } from "../chunk-HFBCW4MD.js";
99
99
 
100
100
  // src/cli/index.ts
101
101
  import { pathToFileURL } from "url";
@@ -2,10 +2,10 @@ import {
2
2
  defaultTuiOperations,
3
3
  effortChoicesForModel,
4
4
  listOperationHarnesses
5
- } from "../../chunk-5MYXVRZZ.js";
5
+ } from "../../chunk-A7IGKE4R.js";
6
6
  import "../../chunk-MIDGZE34.js";
7
- import "../../chunk-VVYAQTYE.js";
8
- import "../../chunk-YCWGTDFE.js";
7
+ import "../../chunk-422L76R5.js";
8
+ import "../../chunk-HFBCW4MD.js";
9
9
 
10
10
  // src/cli/tui/index.tsx
11
11
  import { render } from "ink";
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  createAgents,
11
11
  renderOpenCodeAgentConfigs
12
- } from "./chunk-NOLDFT7O.js";
12
+ } from "./chunk-KUA3F4D6.js";
13
13
  import {
14
14
  context7,
15
15
  exa,
@@ -26,7 +26,7 @@ import {
26
26
  mergeProfileModelChain,
27
27
  resolveRoleProfile,
28
28
  validateProfileName
29
- } from "./chunk-YCWGTDFE.js";
29
+ } from "./chunk-HFBCW4MD.js";
30
30
 
31
31
  // src/opencode/permission-rules.ts
32
32
  var ACTIONS = {
@@ -449,7 +449,7 @@ function loadOpenCodeDependencies(ctx) {
449
449
  } else {
450
450
  const chain = mergeProfileModelChain(
451
451
  profileState.roles[role],
452
- configuredChains[name]
452
+ config.fallback?.enabled === false && !modelArrayMap[name] ? [] : configuredChains[name]
453
453
  );
454
454
  effectiveModelArrays[name] = chain;
455
455
  runtimeChains[name] = chain.map(({ id }) => id);
package/dist/pi.js CHANGED
@@ -8,10 +8,10 @@ import {
8
8
  createPiToolsPanelAdapter,
9
9
  renderPiRootInstructions,
10
10
  syncPiSpecialists
11
- } from "./chunk-VVYAQTYE.js";
11
+ } from "./chunk-422L76R5.js";
12
12
  import {
13
13
  findPackageRoot
14
- } from "./chunk-YCWGTDFE.js";
14
+ } from "./chunk-HFBCW4MD.js";
15
15
 
16
16
  // src/pi.ts
17
17
  import { homedir } from "os";
package/dist/tui/index.js CHANGED
@@ -110,7 +110,8 @@ function variantsOf(state, modelId) {
110
110
  function searchOptions(query, options) {
111
111
  const words = query.toLowerCase().split(/\s+/).filter(Boolean);
112
112
  return options.filter((option) => {
113
- const text = `${option.title} ${option.description ?? ""}`.toLowerCase();
113
+ const id = typeof option.value === "string" ? option.value : "";
114
+ const text = `${option.title} ${id} ${option.description ?? ""}`.toLowerCase();
114
115
  return words.every((word) => text.includes(word));
115
116
  });
116
117
  }
@@ -258,10 +259,11 @@ async function runModelProfilesFlow(ports) {
258
259
  placeholder: "Search models",
259
260
  current,
260
261
  options: provider.models.map((model) => ({
261
- title: model.name,
262
+ // Names can collide across Codex/API models and dated snapshots. Put
263
+ // the exact local ID first; a non-shrinking footer crowds it out.
264
+ title: model.id.slice(provider.id.length + 1),
262
265
  value: model.id,
263
- description: model.id,
264
- footer: model.variants.length ? `variants: ${model.variants.join(", ")}` : void 0
266
+ description: model.variants.length ? `${model.name} \xB7 variants: ${model.variants.join(", ")}` : model.name
265
267
  })),
266
268
  search: searchOptions
267
269
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thoth-agents",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "Adaptive multi-harness orchestration with six roles, runtime-autonomous AI-first execution routes, and external provider boundaries.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thoth-agents",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "Adaptive multi-harness agent pack with six roles and proportional SDD governance for Claude Code.",
5
5
  "author": {
6
6
  "name": "thoth-agents"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thoth-agents",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "description": "Bundled AI-first work skills and MCP configuration; the six-role global Codex layer requires thoth-agents CLI setup.",
5
5
  "skills": "./skills/",
6
6
  "mcpServers": "./codex.mcp.json",