thoth-agents 0.11.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/README.md +16 -5
  2. package/dist/agents/agent-config.d.ts +13 -0
  3. package/dist/agents/index.d.ts +1 -1
  4. package/dist/agents/orchestrator.d.ts +1 -1
  5. package/dist/{chunk-I5TXGNSG.js → chunk-5MYXVRZZ.js} +634 -366
  6. package/dist/chunk-6O4GKDS7.js +207 -0
  7. package/dist/{chunk-RWQPMWEM.js → chunk-JLU3FSBT.js} +17 -2
  8. package/dist/chunk-MIDGZE34.js +107 -0
  9. package/dist/{chunk-HACUJFKI.js → chunk-NOLDFT7O.js} +4 -230
  10. package/dist/{chunk-5WPP6IY7.js → chunk-VVYAQTYE.js} +2 -2
  11. package/dist/{chunk-DNPKVFOB.js → chunk-YCWGTDFE.js} +604 -315
  12. package/dist/cli/config-io.d.ts +2 -2
  13. package/dist/cli/index.js +94 -41
  14. package/dist/cli/install.d.ts +1 -0
  15. package/dist/cli/opencode-profiles.d.ts +10 -0
  16. package/dist/cli/opencode-skill-consent.d.ts +5 -0
  17. package/dist/cli/operations/opencode.d.ts +2 -1
  18. package/dist/cli/operations/types.d.ts +1 -0
  19. package/dist/cli/owned-skills.d.ts +16 -0
  20. package/dist/cli/paths.d.ts +1 -1
  21. package/dist/cli/providers.d.ts +1 -1
  22. package/dist/cli/system.d.ts +3 -1
  23. package/dist/cli/thoth-mem-install.d.ts +10 -10
  24. package/dist/cli/tui/index.js +53 -5
  25. package/dist/cli/tui/operations.d.ts +2 -0
  26. package/dist/cli/types.d.ts +2 -4
  27. package/dist/config/loader.d.ts +2 -5
  28. package/dist/config/schema.d.ts +0 -53
  29. package/dist/harness/adapters/opencode.d.ts +1 -1
  30. package/dist/hooks/delegate-task-retry/hook.d.ts +8 -8
  31. package/dist/hooks/foreground-fallback/index.d.ts +14 -69
  32. package/dist/hooks/index.d.ts +0 -2
  33. package/dist/hooks/json-error-recovery/hook.d.ts +2 -15
  34. package/dist/hooks/oracle-gate-verdict/hook.d.ts +4 -11
  35. package/dist/index.d.ts +7 -4
  36. package/dist/index.js +1603 -1408
  37. package/dist/opencode/agents.d.ts +3 -0
  38. package/dist/opencode/command.d.ts +3 -0
  39. package/dist/opencode/context.d.ts +36 -0
  40. package/dist/opencode/delegation-hooks.d.ts +3 -0
  41. package/dist/opencode/mcp.d.ts +3 -0
  42. package/dist/opencode/permission-rules.d.ts +9 -0
  43. package/dist/opencode/permissions.d.ts +3 -0
  44. package/dist/opencode/profile-rpc-handlers.d.ts +3 -0
  45. package/dist/opencode/profile-rpc.d.ts +688 -0
  46. package/dist/opencode/profile-runtime.d.ts +3 -0
  47. package/dist/opencode/profile-sessions.d.ts +18 -0
  48. package/dist/opencode/profiles/editor.d.ts +44 -0
  49. package/dist/opencode/profiles/index.d.ts +18 -0
  50. package/dist/opencode/profiles/resolver.d.ts +12 -0
  51. package/dist/opencode/profiles/store.d.ts +63 -0
  52. package/dist/opencode/profiles/types.d.ts +26 -0
  53. package/dist/opencode/session-hooks.d.ts +3 -0
  54. package/dist/opencode/session-state.d.ts +39 -0
  55. package/dist/opencode/skills.d.ts +3 -0
  56. package/dist/opencode/tool-overrides/evaluator.d.ts +13 -0
  57. package/dist/opencode/tool-overrides/index.d.ts +5 -0
  58. package/dist/opencode/tool-overrides/store.d.ts +38 -0
  59. package/dist/opencode/tool-overrides/types.d.ts +32 -0
  60. package/dist/opencode/tool-overrides/validation.d.ts +5 -0
  61. package/dist/opencode/tool-overrides/wildcard.d.ts +3 -0
  62. package/dist/opencode/tool-rpc-handlers.d.ts +3 -0
  63. package/dist/opencode/tool-rpc.d.ts +428 -0
  64. package/dist/opencode/tools.d.ts +3 -0
  65. package/dist/pi.js +3 -3
  66. package/dist/tools/ast-grep/cli.d.ts +1 -0
  67. package/dist/tools/ast-grep/index.d.ts +108 -2
  68. package/dist/tools/ast-grep/tools.d.ts +107 -3
  69. package/dist/tools/define-tool.d.ts +23 -0
  70. package/dist/tools/lsp/tools.d.ts +97 -5
  71. package/dist/tui/fixtures.d.ts +2 -0
  72. package/dist/tui/flow.d.ts +16 -0
  73. package/dist/tui/index.d.ts +7 -0
  74. package/dist/tui/index.js +1384 -0
  75. package/dist/tui/model.d.ts +84 -0
  76. package/dist/tui/tools/fixtures.d.ts +3 -0
  77. package/dist/tui/tools/flow.d.ts +11 -0
  78. package/dist/tui/tools/model.d.ts +97 -0
  79. package/dist/utils/index.d.ts +0 -1
  80. package/package.json +18 -3
  81. package/plugin/.claude-plugin/plugin.json +1 -1
  82. package/plugin/.codex-plugin/plugin.json +1 -1
  83. package/plugin/skills/thoth-sdd/SKILL.md +8 -2
  84. package/plugin/skills/thoth-sdd/scripts/validate-result.mjs +28 -2
  85. package/skills/thoth-sdd/SKILL.md +8 -2
  86. package/skills/thoth-sdd/scripts/validate-result.mjs +28 -2
  87. package/thoth-agents.schema.json +0 -96
  88. package/dist/chunk-62L3ORXN.js +0 -30
  89. package/dist/delegation/project-id.d.ts +0 -10
  90. package/dist/hooks/auto-update-checker/checker.d.ts +0 -23
  91. package/dist/hooks/auto-update-checker/constants.d.ts +0 -11
  92. package/dist/hooks/auto-update-checker/index.d.ts +0 -17
  93. package/dist/hooks/auto-update-checker/types.d.ts +0 -22
  94. package/dist/utils/tmux-session-manager.d.ts +0 -63
  95. package/dist/utils/tmux.d.ts +0 -32
@@ -9,7 +9,7 @@ import { type PluginConfig } from './schema';
9
9
  *
10
10
  * JSONC format is preferred over JSON (allows comments and trailing commas).
11
11
  * Project config takes precedence over user config. Nested objects (agents,
12
- * tmux, fallback, and harness generation options) are
12
+ * fallback, and harness generation options) are
13
13
  * deep-merged, while top-level arrays are replaced entirely
14
14
  * by project config.
15
15
  *
@@ -20,14 +20,11 @@ export declare function loadPluginConfig(directory: string): PluginConfig;
20
20
  /**
21
21
  * Load custom prompt for an agent from the prompts directory.
22
22
  * Checks for {agent}.md (replaces default) and {agent}_append.md (appends to default).
23
- * If preset is provided and safe for paths, it first checks {preset}/ subdirectory,
24
- * then falls back to the root prompts directory.
25
23
  *
26
24
  * @param agentName - Name of the agent (e.g., "orchestrator", "explorer")
27
- * @param preset - Optional preset name for preset-scoped prompt lookup
28
25
  * @returns Object with prompt and/or appendPrompt if files exist
29
26
  */
30
- export declare function loadAgentPrompt(agentName: string, preset?: string): {
27
+ export declare function loadAgentPrompt(agentName: string): {
31
28
  prompt?: string;
32
29
  appendPrompt?: string;
33
30
  };
@@ -59,43 +59,12 @@ export declare const AgentOverrideConfigSchema: z.ZodObject<{
59
59
  steps: z.ZodOptional<z.ZodNumber>;
60
60
  variant: z.ZodCatch<z.ZodOptional<z.ZodString>>;
61
61
  }, z.core.$strip>;
62
- export declare const TmuxLayoutSchema: z.ZodEnum<{
63
- "main-vertical": "main-vertical";
64
- "main-horizontal": "main-horizontal";
65
- tiled: "tiled";
66
- "even-horizontal": "even-horizontal";
67
- "even-vertical": "even-vertical";
68
- }>;
69
- export type TmuxLayout = z.infer<typeof TmuxLayoutSchema>;
70
- export declare const TmuxConfigSchema: z.ZodObject<{
71
- enabled: z.ZodDefault<z.ZodBoolean>;
72
- layout: z.ZodDefault<z.ZodEnum<{
73
- "main-vertical": "main-vertical";
74
- "main-horizontal": "main-horizontal";
75
- tiled: "tiled";
76
- "even-horizontal": "even-horizontal";
77
- "even-vertical": "even-vertical";
78
- }>>;
79
- main_pane_size: z.ZodDefault<z.ZodNumber>;
80
- }, z.core.$strip>;
81
- export type TmuxConfig = z.infer<typeof TmuxConfigSchema>;
82
62
  export type AgentOverrideConfig = z.infer<typeof AgentOverrideConfigSchema>;
83
63
  /** Normalized model entry with optional per-model variant. */
84
64
  export type ModelEntry = {
85
65
  id: string;
86
66
  variant?: string;
87
67
  };
88
- export declare const PresetSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
89
- model: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
90
- id: z.ZodString;
91
- variant: z.ZodOptional<z.ZodString>;
92
- }, z.core.$strip>]>>]>>;
93
- skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
94
- temperature: z.ZodOptional<z.ZodNumber>;
95
- steps: z.ZodOptional<z.ZodNumber>;
96
- variant: z.ZodCatch<z.ZodOptional<z.ZodString>>;
97
- }, z.core.$strip>>;
98
- export type Preset = z.infer<typeof PresetSchema>;
99
68
  export declare const AgentNameSchema: z.ZodEnum<{
100
69
  orchestrator: "orchestrator";
101
70
  explorer: "explorer";
@@ -131,7 +100,6 @@ export declare const FailoverConfigSchema: z.ZodObject<{
131
100
  export type FailoverConfig = z.infer<typeof FailoverConfigSchema>;
132
101
  export declare const PluginConfigSchema: z.ZodObject<{
133
102
  $schema: z.ZodOptional<z.ZodString>;
134
- preset: z.ZodOptional<z.ZodString>;
135
103
  setDefaultAgent: z.ZodOptional<z.ZodBoolean>;
136
104
  scoringEngineVersion: z.ZodOptional<z.ZodEnum<{
137
105
  v1: "v1";
@@ -177,16 +145,6 @@ export declare const PluginConfigSchema: z.ZodObject<{
177
145
  fallback3: z.ZodString;
178
146
  }, z.core.$strip>;
179
147
  }, z.core.$strict>>;
180
- presets: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{
181
- model: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
182
- id: z.ZodString;
183
- variant: z.ZodOptional<z.ZodString>;
184
- }, z.core.$strip>]>>]>>;
185
- skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
186
- temperature: z.ZodOptional<z.ZodNumber>;
187
- steps: z.ZodOptional<z.ZodNumber>;
188
- variant: z.ZodCatch<z.ZodOptional<z.ZodString>>;
189
- }, z.core.$strip>>>>;
190
148
  agents: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
191
149
  model: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
192
150
  id: z.ZodString;
@@ -198,17 +156,6 @@ export declare const PluginConfigSchema: z.ZodObject<{
198
156
  variant: z.ZodCatch<z.ZodOptional<z.ZodString>>;
199
157
  }, z.core.$strip>>>;
200
158
  disabled_mcps: z.ZodOptional<z.ZodArray<z.ZodString>>;
201
- tmux: z.ZodOptional<z.ZodObject<{
202
- enabled: z.ZodDefault<z.ZodBoolean>;
203
- layout: z.ZodDefault<z.ZodEnum<{
204
- "main-vertical": "main-vertical";
205
- "main-horizontal": "main-horizontal";
206
- tiled: "tiled";
207
- "even-horizontal": "even-horizontal";
208
- "even-vertical": "even-vertical";
209
- }>>;
210
- main_pane_size: z.ZodDefault<z.ZodNumber>;
211
- }, z.core.$strip>>;
212
159
  fallback: z.ZodOptional<z.ZodObject<{
213
160
  enabled: z.ZodDefault<z.ZodBoolean>;
214
161
  timeoutMs: z.ZodDefault<z.ZodNumber>;
@@ -1,4 +1,4 @@
1
- import type { AgentConfig } from '@opencode-ai/sdk/v2';
1
+ import type { AgentConfig } from '../../agents/agent-config';
2
2
  import type { PluginConfig } from '../../config';
3
3
  import type { HarnessAdapter, HarnessCapabilities, HarnessRenderContext } from '../types';
4
4
  export type OpenCodeAgentConfigs = Record<string, AgentConfig>;
@@ -1,8 +1,8 @@
1
- import type { PluginInput } from '@opencode-ai/plugin';
2
- export declare function createDelegateTaskRetryHook(_ctx: PluginInput): {
3
- 'tool.execute.after': (input: {
4
- tool: string;
5
- }, output: {
6
- output: unknown;
7
- }) => Promise<void>;
8
- };
1
+ import type { Plugin } from '@opencode/plugin';
2
+ export type DelegationToolEvent = Extract<Parameters<Parameters<Plugin.Context['tool']['hook']>[1]>[0], {
3
+ status: 'completed' | 'error';
4
+ }>;
5
+ export declare function appendErrorGuidance(event: DelegationToolEvent & {
6
+ status: 'error';
7
+ }, guidance: string): void;
8
+ export declare function createDelegateTaskRetryHook(): (event: DelegationToolEvent) => Promise<void>;
@@ -1,73 +1,18 @@
1
- /**
2
- * Runtime model fallback for foreground (interactive) agent sessions.
3
- *
4
- * When OpenCode fires a session.error, message.updated, or session.status
5
- * event containing a rate-limit signal, this manager:
6
- * 1. Looks up the next untried model in the agent's configured chain
7
- * 2. Aborts the rate-limited prompt via client.session.abort()
8
- * 3. Re-queues the last user message via client.session.promptAsync()
9
- * with the new model — promptAsync returns immediately so we never
10
- * block the event handler waiting for a full LLM response.
11
- *
12
- * This mirrors the task fallback loop but operates
13
- * reactively through the event system instead of wrapping prompt() in a
14
- * try/catch, which is not possible for interactive (foreground) sessions.
15
- */
16
- import type { PluginInput } from '@opencode-ai/plugin';
17
- type OpencodeClient = PluginInput['client'];
1
+ import type { Plugin } from '@opencode/plugin';
2
+ import type { SessionRetry } from '@opencode/plugin/promise/session';
3
+ /** Retained public detection helper; v2 uses structured provider errors. */
18
4
  export declare function isRateLimitError(error: unknown): boolean;
19
- /**
20
- * Manages runtime model fallback for foreground agent sessions.
21
- *
22
- * Constructed at plugin init with the ordered fallback chains for each agent
23
- * (built from _modelArray entries merged with fallback.chains config).
24
- */
5
+ /** Retry state is isolated by session AND agent; no event replay or timers. */
25
6
  export declare class ForegroundFallbackManager {
26
- private readonly client;
27
- /**
28
- * Ordered fallback chains per agent.
29
- * e.g. { orchestrator: ['anthropic/claude-opus-4-5', 'openai/gpt-4o'] }
30
- * The first model that hasn't been tried yet is selected on each fallback.
31
- */
7
+ private readonly session;
32
8
  private readonly chains;
33
- private readonly enabled;
34
- /** sessionID → last observed model string ("providerID/modelID") */
35
- private readonly sessionModel;
36
- /** sessionID → agent name (populated from message.updated info.agent field) */
37
- private readonly sessionAgent;
38
- /** sessionID → set of models already attempted this session */
39
- private readonly sessionTried;
40
- /** Sessions with an active fallback switch in flight */
41
- private readonly inProgress;
42
- /** sessionID → timestamp of last trigger (for deduplication) */
43
- private readonly lastTrigger;
44
- constructor(client: OpencodeClient,
45
- /**
46
- * Ordered fallback chains per agent.
47
- * e.g. { orchestrator: ['anthropic/claude-opus-4-5', 'openai/gpt-4o'] }
48
- * The first model that hasn't been tried yet is selected on each fallback.
49
- */
50
- chains: Record<string, string[]>, enabled: boolean);
51
- /**
52
- * Process an OpenCode plugin event.
53
- * Call this from the plugin's `event` hook for every event received.
54
- */
55
- handleEvent(rawEvent: unknown): Promise<void>;
56
- getSessionModel(sessionId: string): string | undefined;
57
- private tryFallback;
58
- /**
59
- * Determine the fallback chain to use for a session.
60
- *
61
- * Priority:
62
- * 1. Agent name known AND has a configured chain → return it directly
63
- * 2. Agent name known but NO chain configured → return [] (no fallback;
64
- * do NOT bleed into other agents' chains which would re-prompt the
65
- * session with a model belonging to a completely different agent)
66
- * 3. Agent name unknown, current model known → search all chains for
67
- * the model to infer which chain to use
68
- * 4. Nothing matches → flatten all chains as a last resort (only
69
- * reached when both agent name and current model are unavailable)
70
- */
71
- private resolveChain;
9
+ private readonly models;
10
+ private readonly tried;
11
+ private readonly switching;
12
+ constructor(session: Pick<Plugin.Context['session'], 'switchModel'>, chains: Record<string, string[]>, models?: Record<string, {
13
+ id: string;
14
+ variant?: string;
15
+ }[]>);
16
+ forget(sessionID: string): void;
17
+ retry(input: SessionRetry): Promise<void>;
72
18
  }
73
- export {};
@@ -1,5 +1,3 @@
1
- export type { AutoUpdateCheckerOptions } from './auto-update-checker';
2
- export { createAutoUpdateCheckerHook } from './auto-update-checker';
3
1
  export { createDelegateTaskRetryHook } from './delegate-task-retry';
4
2
  export { ForegroundFallbackManager, isRateLimitError, } from './foreground-fallback';
5
3
  export { createJsonErrorRecoveryHook } from './json-error-recovery';
@@ -1,18 +1,5 @@
1
- import type { PluginInput } from '@opencode-ai/plugin';
1
+ import { type DelegationToolEvent } from '../delegate-task-retry/hook';
2
2
  export declare const JSON_ERROR_TOOL_EXCLUDE_LIST: readonly ["bash", "read", "glob", "webfetch", "grep_app_searchgithub", "exa_web_search_exa"];
3
3
  export declare const JSON_ERROR_PATTERNS: readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp];
4
4
  export declare const JSON_ERROR_REMINDER = "\n[JSON PARSE ERROR - IMMEDIATE ACTION REQUIRED]\n\nYou sent invalid JSON arguments. The system could not parse your tool call.\nSTOP and do this NOW:\n\n1. LOOK at the error message above to see what was expected vs what you sent.\n2. CORRECT your JSON syntax (missing braces, unescaped quotes, trailing commas, etc).\n3. RETRY the tool call with valid JSON.\n\nDO NOT repeat the exact same invalid call.\n";
5
- interface ToolExecuteAfterInput {
6
- tool: string;
7
- sessionID: string;
8
- callID: string;
9
- }
10
- interface ToolExecuteAfterOutput {
11
- title: string;
12
- output: unknown;
13
- metadata: unknown;
14
- }
15
- export declare function createJsonErrorRecoveryHook(_ctx: PluginInput): {
16
- 'tool.execute.after': (input: ToolExecuteAfterInput, output: ToolExecuteAfterOutput) => Promise<void>;
17
- };
18
- export {};
5
+ export declare function createJsonErrorRecoveryHook(): (event: DelegationToolEvent) => Promise<void>;
@@ -1,11 +1,4 @@
1
- import type { PluginInput } from '@opencode-ai/plugin';
2
- export declare function createOracleGateVerdictHook(ctx: PluginInput): {
3
- 'tool.execute.after': (input: {
4
- tool: string;
5
- args?: {
6
- subagent_type?: unknown;
7
- };
8
- }, output: {
9
- output: unknown;
10
- }) => Promise<void>;
11
- };
1
+ import type { DelegationToolEvent } from '../delegate-task-retry/hook';
2
+ export declare function createOracleGateVerdictHook(ctx: {
3
+ directory: string;
4
+ }): (event: DelegationToolEvent) => Promise<void>;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,8 @@
1
- import type { Plugin } from '@opencode-ai/plugin';
2
- declare const ThothAgents: Plugin;
3
- export default ThothAgents;
4
- export type { AgentName, AgentOverrideConfig, McpName, PluginConfig, TmuxConfig, TmuxLayout, } from './config';
1
+ import type { Plugin } from '@opencode/plugin';
2
+ declare const plugin: {
3
+ id: string;
4
+ setup(ctx: Plugin.Context): Promise<void>;
5
+ };
6
+ export default plugin;
7
+ export type { AgentName, AgentOverrideConfig, McpName, PluginConfig, } from './config';
5
8
  export type { RemoteMcpConfig } from './mcp';