oh-my-opencode 3.5.3 → 3.5.4

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 (75) hide show
  1. package/README.md +3 -3
  2. package/dist/agents/builtin-agents/agent-overrides.d.ts +2 -2
  3. package/dist/agents/builtin-agents/atlas-agent.d.ts +1 -0
  4. package/dist/agents/builtin-agents/resolve-file-uri.d.ts +1 -0
  5. package/dist/cli/doctor/checks/config.d.ts +2 -8
  6. package/dist/cli/doctor/checks/dependencies.d.ts +1 -5
  7. package/dist/cli/doctor/checks/index.d.ts +4 -16
  8. package/dist/cli/doctor/checks/model-resolution.d.ts +4 -4
  9. package/dist/cli/doctor/checks/{opencode.d.ts → system-binary.d.ts} +6 -12
  10. package/dist/cli/doctor/checks/system-loaded-version.d.ts +9 -0
  11. package/dist/cli/doctor/checks/system-plugin.d.ts +15 -0
  12. package/dist/cli/doctor/checks/system.d.ts +3 -0
  13. package/dist/cli/doctor/checks/{gh.d.ts → tools-gh.d.ts} +0 -3
  14. package/dist/cli/doctor/checks/tools-lsp.d.ts +6 -0
  15. package/dist/cli/doctor/checks/tools-mcp.d.ts +3 -0
  16. package/dist/cli/doctor/checks/tools.d.ts +3 -0
  17. package/dist/cli/doctor/constants.d.ts +4 -17
  18. package/dist/cli/doctor/format-default.d.ts +2 -0
  19. package/dist/cli/doctor/format-shared.d.ts +6 -0
  20. package/dist/cli/doctor/format-status.d.ts +2 -0
  21. package/dist/cli/doctor/format-verbose.d.ts +2 -0
  22. package/dist/cli/doctor/formatter.d.ts +2 -11
  23. package/dist/cli/doctor/index.d.ts +1 -1
  24. package/dist/cli/doctor/runner.d.ts +1 -3
  25. package/dist/cli/doctor/types.d.ts +39 -6
  26. package/dist/cli/index.js +939 -1135
  27. package/dist/cli/run/runner.d.ts +1 -0
  28. package/dist/config/schema/background-task.d.ts +1 -0
  29. package/dist/config/schema/hooks.d.ts +0 -1
  30. package/dist/config/schema/oh-my-opencode-config.d.ts +11 -11
  31. package/dist/config/schema/skills.d.ts +10 -10
  32. package/dist/create-hooks.d.ts +0 -1
  33. package/dist/features/background-agent/constants.d.ts +1 -0
  34. package/dist/features/background-agent/index.d.ts +1 -0
  35. package/dist/features/background-agent/manager.d.ts +2 -0
  36. package/dist/features/background-agent/poll-running-tasks.d.ts +3 -1
  37. package/dist/features/background-agent/task-history.d.ts +18 -0
  38. package/dist/features/background-agent/task-poller.d.ts +4 -0
  39. package/dist/features/background-agent/types.d.ts +4 -0
  40. package/dist/features/claude-code-agent-loader/loader.d.ts +1 -1
  41. package/dist/features/claude-code-command-loader/loader.d.ts +3 -3
  42. package/dist/features/opencode-skill-loader/config-source-discovery.d.ts +7 -0
  43. package/dist/features/opencode-skill-loader/index.d.ts +1 -0
  44. package/dist/features/opencode-skill-loader/loader.d.ts +8 -5
  45. package/dist/features/opencode-skill-loader/merger.d.ts +1 -1
  46. package/dist/features/opencode-skill-loader/skill-resolution-options.d.ts +2 -0
  47. package/dist/features/tmux-subagent/grid-planning.d.ts +1 -1
  48. package/dist/features/tmux-subagent/pane-split-availability.d.ts +3 -3
  49. package/dist/features/tmux-subagent/spawn-action-decider.d.ts +1 -1
  50. package/dist/hooks/claude-code-hooks/transcript.d.ts +8 -13
  51. package/dist/hooks/compaction-context-injector/hook.d.ts +2 -1
  52. package/dist/hooks/index.d.ts +0 -1
  53. package/dist/hooks/keyword-detector/ultrawork/source-detector.d.ts +2 -5
  54. package/dist/hooks/think-mode/switcher.d.ts +1 -2
  55. package/dist/hooks/todo-continuation-enforcer/constants.d.ts +1 -0
  56. package/dist/hooks/todo-continuation-enforcer/session-state.d.ts +1 -0
  57. package/dist/hooks/todo-continuation-enforcer/types.d.ts +2 -0
  58. package/dist/index.js +1835 -1390
  59. package/dist/plugin/hooks/create-core-hooks.d.ts +0 -1
  60. package/dist/plugin/hooks/create-session-hooks.d.ts +1 -2
  61. package/dist/plugin/session-agent-resolver.d.ts +19 -0
  62. package/dist/plugin-config.d.ts +1 -0
  63. package/dist/plugin-handlers/command-config-handler.d.ts +3 -0
  64. package/dist/shared/session-tools-store.d.ts +3 -0
  65. package/dist/tools/call-omo-agent/sync-executor.d.ts +10 -1
  66. package/dist/tools/slashcommand/command-discovery.d.ts +1 -1
  67. package/package.json +8 -8
  68. package/dist/cli/doctor/checks/auth.d.ts +0 -7
  69. package/dist/cli/doctor/checks/lsp.d.ts +0 -8
  70. package/dist/cli/doctor/checks/mcp-oauth.d.ts +0 -15
  71. package/dist/cli/doctor/checks/mcp.d.ts +0 -6
  72. package/dist/cli/doctor/checks/plugin.d.ts +0 -4
  73. package/dist/cli/doctor/checks/version.d.ts +0 -4
  74. package/dist/hooks/subagent-question-blocker/hook.d.ts +0 -2
  75. package/dist/hooks/subagent-question-blocker/index.d.ts +0 -1
@@ -1,4 +1,5 @@
1
1
  import type { RunOptions } from "./types";
2
2
  import { resolveRunAgent } from "./agent-resolver";
3
3
  export { resolveRunAgent };
4
+ export declare function waitForEventProcessorShutdown(eventProcessor: Promise<void>, timeoutMs?: number): Promise<void>;
4
5
  export declare function run(options: RunOptions): Promise<number>;
@@ -4,5 +4,6 @@ export declare const BackgroundTaskConfigSchema: z.ZodObject<{
4
4
  providerConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
5
5
  modelConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
6
6
  staleTimeoutMs: z.ZodOptional<z.ZodNumber>;
7
+ messageStalenessTimeoutMs: z.ZodOptional<z.ZodNumber>;
7
8
  }, z.core.$strip>;
8
9
  export type BackgroundTaskConfig = z.infer<typeof BackgroundTaskConfigSchema>;
@@ -15,7 +15,6 @@ export declare const HookNameSchema: z.ZodEnum<{
15
15
  "directory-readme-injector": "directory-readme-injector";
16
16
  "empty-task-response-detector": "empty-task-response-detector";
17
17
  "think-mode": "think-mode";
18
- "subagent-question-blocker": "subagent-question-blocker";
19
18
  "anthropic-context-window-limit-recovery": "anthropic-context-window-limit-recovery";
20
19
  "preemptive-compaction": "preemptive-compaction";
21
20
  "rules-injector": "rules-injector";
@@ -39,7 +39,6 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
39
39
  "directory-readme-injector": "directory-readme-injector";
40
40
  "empty-task-response-detector": "empty-task-response-detector";
41
41
  "think-mode": "think-mode";
42
- "subagent-question-blocker": "subagent-question-blocker";
43
42
  "anthropic-context-window-limit-recovery": "anthropic-context-window-limit-recovery";
44
43
  "preemptive-compaction": "preemptive-compaction";
45
44
  "rules-injector": "rules-injector";
@@ -1214,7 +1213,15 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
1214
1213
  safe_hook_creation: z.ZodOptional<z.ZodBoolean>;
1215
1214
  }, z.core.$strip>>;
1216
1215
  auto_update: z.ZodOptional<z.ZodBoolean>;
1217
- skills: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodIntersection<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
1216
+ skills: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodObject<{
1217
+ sources: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1218
+ path: z.ZodString;
1219
+ recursive: z.ZodOptional<z.ZodBoolean>;
1220
+ glob: z.ZodOptional<z.ZodString>;
1221
+ }, z.core.$strip>]>>>;
1222
+ enable: z.ZodOptional<z.ZodArray<z.ZodString>>;
1223
+ disable: z.ZodOptional<z.ZodArray<z.ZodString>>;
1224
+ }, z.core.$catchall<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
1218
1225
  description: z.ZodOptional<z.ZodString>;
1219
1226
  template: z.ZodOptional<z.ZodString>;
1220
1227
  from: z.ZodOptional<z.ZodString>;
@@ -1227,15 +1234,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
1227
1234
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1228
1235
  "allowed-tools": z.ZodOptional<z.ZodArray<z.ZodString>>;
1229
1236
  disable: z.ZodOptional<z.ZodBoolean>;
1230
- }, z.core.$strip>]>>, z.ZodObject<{
1231
- sources: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
1232
- path: z.ZodString;
1233
- recursive: z.ZodOptional<z.ZodBoolean>;
1234
- glob: z.ZodOptional<z.ZodString>;
1235
- }, z.core.$strip>]>>>>;
1236
- enable: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
1237
- disable: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
1238
- }, z.core.$strip>>]>>;
1237
+ }, z.core.$strip>]>>>]>>;
1239
1238
  ralph_loop: z.ZodOptional<z.ZodObject<{
1240
1239
  enabled: z.ZodDefault<z.ZodBoolean>;
1241
1240
  default_max_iterations: z.ZodDefault<z.ZodNumber>;
@@ -1246,6 +1245,7 @@ export declare const OhMyOpenCodeConfigSchema: z.ZodObject<{
1246
1245
  providerConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
1247
1246
  modelConcurrency: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNumber>>;
1248
1247
  staleTimeoutMs: z.ZodOptional<z.ZodNumber>;
1248
+ messageStalenessTimeoutMs: z.ZodOptional<z.ZodNumber>;
1249
1249
  }, z.core.$strip>>;
1250
1250
  notification: z.ZodOptional<z.ZodObject<{
1251
1251
  force_enable: z.ZodOptional<z.ZodBoolean>;
@@ -32,7 +32,15 @@ export declare const SkillEntrySchema: z.ZodUnion<readonly [z.ZodBoolean, z.ZodO
32
32
  "allowed-tools": z.ZodOptional<z.ZodArray<z.ZodString>>;
33
33
  disable: z.ZodOptional<z.ZodBoolean>;
34
34
  }, z.core.$strip>]>;
35
- export declare const SkillsConfigSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodIntersection<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
35
+ export declare const SkillsConfigSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodObject<{
36
+ sources: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
37
+ path: z.ZodString;
38
+ recursive: z.ZodOptional<z.ZodBoolean>;
39
+ glob: z.ZodOptional<z.ZodString>;
40
+ }, z.core.$strip>]>>>;
41
+ enable: z.ZodOptional<z.ZodArray<z.ZodString>>;
42
+ disable: z.ZodOptional<z.ZodArray<z.ZodString>>;
43
+ }, z.core.$catchall<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
36
44
  description: z.ZodOptional<z.ZodString>;
37
45
  template: z.ZodOptional<z.ZodString>;
38
46
  from: z.ZodOptional<z.ZodString>;
@@ -45,14 +53,6 @@ export declare const SkillsConfigSchema: z.ZodUnion<readonly [z.ZodArray<z.ZodSt
45
53
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
46
54
  "allowed-tools": z.ZodOptional<z.ZodArray<z.ZodString>>;
47
55
  disable: z.ZodOptional<z.ZodBoolean>;
48
- }, z.core.$strip>]>>, z.ZodObject<{
49
- sources: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
50
- path: z.ZodString;
51
- recursive: z.ZodOptional<z.ZodBoolean>;
52
- glob: z.ZodOptional<z.ZodString>;
53
- }, z.core.$strip>]>>>>;
54
- enable: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
55
- disable: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
56
- }, z.core.$strip>>]>;
56
+ }, z.core.$strip>]>>>]>;
57
57
  export type SkillsConfig = z.infer<typeof SkillsConfigSchema>;
58
58
  export type SkillDefinition = z.infer<typeof SkillDefinitionSchema>;
@@ -51,7 +51,6 @@ export declare function createHooks(args: {
51
51
  prometheusMdOnly: ReturnType<typeof import("./hooks").createPrometheusMdOnlyHook> | null;
52
52
  sisyphusJuniorNotepad: ReturnType<typeof import("./hooks").createSisyphusJuniorNotepadHook> | null;
53
53
  questionLabelTruncator: ReturnType<typeof import("./hooks").createQuestionLabelTruncatorHook>;
54
- subagentQuestionBlocker: ReturnType<typeof import("./hooks").createSubagentQuestionBlockerHook>;
55
54
  taskResumeInfo: ReturnType<typeof import("./hooks").createTaskResumeInfoHook>;
56
55
  anthropicEffort: ReturnType<typeof import("./hooks/anthropic-effort").createAnthropicEffortHook> | null;
57
56
  };
@@ -3,6 +3,7 @@ import type { BackgroundTask, LaunchInput } from "./types";
3
3
  export declare const TASK_TTL_MS: number;
4
4
  export declare const MIN_STABILITY_TIME_MS: number;
5
5
  export declare const DEFAULT_STALE_TIMEOUT_MS = 180000;
6
+ export declare const DEFAULT_MESSAGE_STALENESS_TIMEOUT_MS = 600000;
6
7
  export declare const MIN_RUNTIME_BEFORE_STALE_MS = 30000;
7
8
  export declare const MIN_IDLE_TIME_MS = 5000;
8
9
  export declare const POLLING_INTERVAL_MS = 3000;
@@ -1,4 +1,5 @@
1
1
  export * from "./types";
2
2
  export { BackgroundManager, type SubagentSessionCreatedEvent, type OnSubagentSessionCreated } from "./manager";
3
+ export { TaskHistory, type TaskHistoryEntry } from "./task-history";
3
4
  export { ConcurrencyManager } from "./concurrency";
4
5
  export { TaskStateManager } from "./state";
@@ -1,5 +1,6 @@
1
1
  import type { PluginInput } from "@opencode-ai/plugin";
2
2
  import type { BackgroundTask, LaunchInput, ResumeInput } from "./types";
3
+ import { TaskHistory } from "./task-history";
3
4
  import type { BackgroundTaskConfig, TmuxConfig } from "../../config/schema";
4
5
  interface EventProperties {
5
6
  sessionID?: string;
@@ -39,6 +40,7 @@ export declare class BackgroundManager {
39
40
  private completionTimers;
40
41
  private idleDeferralTimers;
41
42
  private notificationQueueByParent;
43
+ readonly taskHistory: TaskHistory;
42
44
  constructor(ctx: PluginInput, config?: BackgroundTaskConfig, options?: {
43
45
  tmuxConfig?: TmuxConfig;
44
46
  onSubagentSessionCreated?: OnSubagentSessionCreated;
@@ -4,7 +4,9 @@ export declare function pollRunningTasks(args: {
4
4
  tasks: Iterable<BackgroundTask>;
5
5
  client: OpencodeClient;
6
6
  pruneStaleTasksAndNotifications: () => void;
7
- checkAndInterruptStaleTasks: () => Promise<void>;
7
+ checkAndInterruptStaleTasks: (statuses: Record<string, {
8
+ type: string;
9
+ }>) => Promise<void>;
8
10
  validateSessionHasOutput: (sessionID: string) => Promise<boolean>;
9
11
  checkSessionTodos: (sessionID: string) => Promise<boolean>;
10
12
  tryCompleteTask: (task: BackgroundTask, source: string) => Promise<boolean>;
@@ -0,0 +1,18 @@
1
+ import type { BackgroundTaskStatus } from "./types";
2
+ export interface TaskHistoryEntry {
3
+ id: string;
4
+ sessionID?: string;
5
+ agent: string;
6
+ description: string;
7
+ status: BackgroundTaskStatus;
8
+ category?: string;
9
+ startedAt?: Date;
10
+ completedAt?: Date;
11
+ }
12
+ export declare class TaskHistory {
13
+ private entries;
14
+ record(parentSessionID: string | undefined, entry: TaskHistoryEntry): void;
15
+ getByParentSession(parentSessionID: string): TaskHistoryEntry[];
16
+ clearSession(parentSessionID: string): void;
17
+ formatForCompaction(parentSessionID: string): string | null;
18
+ }
@@ -7,10 +7,14 @@ export declare function pruneStaleTasksAndNotifications(args: {
7
7
  notifications: Map<string, BackgroundTask[]>;
8
8
  onTaskPruned: (taskId: string, task: BackgroundTask, errorMessage: string) => void;
9
9
  }): void;
10
+ export type SessionStatusMap = Record<string, {
11
+ type: string;
12
+ }>;
10
13
  export declare function checkAndInterruptStaleTasks(args: {
11
14
  tasks: Iterable<BackgroundTask>;
12
15
  client: OpencodeClient;
13
16
  config: BackgroundTaskConfig | undefined;
14
17
  concurrencyManager: ConcurrencyManager;
15
18
  notifyParentSession: (task: BackgroundTask) => Promise<void>;
19
+ sessionStatuses?: SessionStatusMap;
16
20
  }): Promise<void>;
@@ -36,6 +36,8 @@ export interface BackgroundTask {
36
36
  concurrencyGroup?: string;
37
37
  /** Parent session's agent name for notification */
38
38
  parentAgent?: string;
39
+ /** Parent session's tool restrictions for notification prompts */
40
+ parentTools?: Record<string, boolean>;
39
41
  /** Marks if the task was launched from an unstable agent/category */
40
42
  isUnstableAgent?: boolean;
41
43
  /** Category used for this task (e.g., 'quick', 'visual-engineering') */
@@ -56,6 +58,7 @@ export interface LaunchInput {
56
58
  modelID: string;
57
59
  };
58
60
  parentAgent?: string;
61
+ parentTools?: Record<string, boolean>;
59
62
  model?: {
60
63
  providerID: string;
61
64
  modelID: string;
@@ -76,4 +79,5 @@ export interface ResumeInput {
76
79
  modelID: string;
77
80
  };
78
81
  parentAgent?: string;
82
+ parentTools?: Record<string, boolean>;
79
83
  }
@@ -1,3 +1,3 @@
1
1
  import type { AgentConfig } from "@opencode-ai/sdk";
2
2
  export declare function loadUserAgents(): Record<string, AgentConfig>;
3
- export declare function loadProjectAgents(): Record<string, AgentConfig>;
3
+ export declare function loadProjectAgents(directory?: string): Record<string, AgentConfig>;
@@ -1,6 +1,6 @@
1
1
  import type { CommandDefinition } from "./types";
2
2
  export declare function loadUserCommands(): Promise<Record<string, CommandDefinition>>;
3
- export declare function loadProjectCommands(): Promise<Record<string, CommandDefinition>>;
3
+ export declare function loadProjectCommands(directory?: string): Promise<Record<string, CommandDefinition>>;
4
4
  export declare function loadOpencodeGlobalCommands(): Promise<Record<string, CommandDefinition>>;
5
- export declare function loadOpencodeProjectCommands(): Promise<Record<string, CommandDefinition>>;
6
- export declare function loadAllCommands(): Promise<Record<string, CommandDefinition>>;
5
+ export declare function loadOpencodeProjectCommands(directory?: string): Promise<Record<string, CommandDefinition>>;
6
+ export declare function loadAllCommands(directory?: string): Promise<Record<string, CommandDefinition>>;
@@ -0,0 +1,7 @@
1
+ import type { SkillsConfig } from "../../config/schema";
2
+ import type { LoadedSkill } from "./types";
3
+ export declare function normalizePathForGlob(path: string): string;
4
+ export declare function discoverConfigSourceSkills(options: {
5
+ config: SkillsConfig | undefined;
6
+ configDir: string;
7
+ }): Promise<LoadedSkill[]>;
@@ -12,3 +12,4 @@ export * from "./skill-discovery";
12
12
  export * from "./skill-resolution-options";
13
13
  export * from "./loaded-skill-template-extractor";
14
14
  export * from "./skill-template-resolver";
15
+ export * from "./config-source-discovery";
@@ -1,16 +1,19 @@
1
1
  import type { CommandDefinition } from "../claude-code-command-loader/types";
2
2
  import type { LoadedSkill } from "./types";
3
3
  export declare function loadUserSkills(): Promise<Record<string, CommandDefinition>>;
4
- export declare function loadProjectSkills(): Promise<Record<string, CommandDefinition>>;
4
+ export declare function loadProjectSkills(directory?: string): Promise<Record<string, CommandDefinition>>;
5
5
  export declare function loadOpencodeGlobalSkills(): Promise<Record<string, CommandDefinition>>;
6
- export declare function loadOpencodeProjectSkills(): Promise<Record<string, CommandDefinition>>;
6
+ export declare function loadOpencodeProjectSkills(directory?: string): Promise<Record<string, CommandDefinition>>;
7
7
  export interface DiscoverSkillsOptions {
8
8
  includeClaudeCodePaths?: boolean;
9
+ directory?: string;
9
10
  }
10
- export declare function discoverAllSkills(): Promise<LoadedSkill[]>;
11
+ export declare function discoverAllSkills(directory?: string): Promise<LoadedSkill[]>;
11
12
  export declare function discoverSkills(options?: DiscoverSkillsOptions): Promise<LoadedSkill[]>;
12
13
  export declare function getSkillByName(name: string, options?: DiscoverSkillsOptions): Promise<LoadedSkill | undefined>;
13
14
  export declare function discoverUserClaudeSkills(): Promise<LoadedSkill[]>;
14
- export declare function discoverProjectClaudeSkills(): Promise<LoadedSkill[]>;
15
+ export declare function discoverProjectClaudeSkills(directory?: string): Promise<LoadedSkill[]>;
15
16
  export declare function discoverOpencodeGlobalSkills(): Promise<LoadedSkill[]>;
16
- export declare function discoverOpencodeProjectSkills(): Promise<LoadedSkill[]>;
17
+ export declare function discoverOpencodeProjectSkills(directory?: string): Promise<LoadedSkill[]>;
18
+ export declare function discoverProjectAgentsSkills(directory?: string): Promise<LoadedSkill[]>;
19
+ export declare function discoverGlobalAgentsSkills(): Promise<LoadedSkill[]>;
@@ -4,4 +4,4 @@ import type { BuiltinSkill } from "../builtin-skills/types";
4
4
  export interface MergeSkillsOptions {
5
5
  configDir?: string;
6
6
  }
7
- export declare function mergeSkills(builtinSkills: BuiltinSkill[], config: SkillsConfig | undefined, userClaudeSkills: LoadedSkill[], userOpencodeSkills: LoadedSkill[], projectClaudeSkills: LoadedSkill[], projectOpencodeSkills: LoadedSkill[], options?: MergeSkillsOptions): LoadedSkill[];
7
+ export declare function mergeSkills(builtinSkills: BuiltinSkill[], config: SkillsConfig | undefined, configSourceSkills: LoadedSkill[], userClaudeSkills: LoadedSkill[], userOpencodeSkills: LoadedSkill[], projectClaudeSkills: LoadedSkill[], projectOpencodeSkills: LoadedSkill[], options?: MergeSkillsOptions): LoadedSkill[];
@@ -3,4 +3,6 @@ export interface SkillResolutionOptions {
3
3
  gitMasterConfig?: GitMasterConfig;
4
4
  browserProvider?: BrowserAutomationProvider;
5
5
  disabledSkills?: Set<string>;
6
+ /** Project directory to discover project-level skills from. Falls back to process.cwd() if not provided. */
7
+ directory?: string;
6
8
  }
@@ -14,6 +14,6 @@ export interface GridPlan {
14
14
  slotWidth: number;
15
15
  slotHeight: number;
16
16
  }
17
- export declare function calculateCapacity(windowWidth: number, windowHeight: number): GridCapacity;
17
+ export declare function calculateCapacity(windowWidth: number, windowHeight: number, minPaneWidth?: number): GridCapacity;
18
18
  export declare function computeGridPlan(windowWidth: number, windowHeight: number, paneCount: number): GridPlan;
19
19
  export declare function mapPaneToSlot(pane: TmuxPaneInfo, plan: GridPlan, mainPaneWidth: number): GridSlot;
@@ -1,8 +1,8 @@
1
1
  import type { SplitDirection, TmuxPaneInfo } from "./types";
2
2
  export declare function getColumnCount(paneCount: number): number;
3
3
  export declare function getColumnWidth(agentAreaWidth: number, paneCount: number): number;
4
- export declare function isSplittableAtCount(agentAreaWidth: number, paneCount: number): boolean;
5
- export declare function findMinimalEvictions(agentAreaWidth: number, currentCount: number): number | null;
6
- export declare function canSplitPane(pane: TmuxPaneInfo, direction: SplitDirection): boolean;
4
+ export declare function isSplittableAtCount(agentAreaWidth: number, paneCount: number, minPaneWidth?: number): boolean;
5
+ export declare function findMinimalEvictions(agentAreaWidth: number, currentCount: number, minPaneWidth?: number): number | null;
6
+ export declare function canSplitPane(pane: TmuxPaneInfo, direction: SplitDirection, minPaneWidth?: number): boolean;
7
7
  export declare function canSplitPaneAnyDirection(pane: TmuxPaneInfo): boolean;
8
8
  export declare function getBestSplitDirection(pane: TmuxPaneInfo): SplitDirection | null;
@@ -1,4 +1,4 @@
1
1
  import type { CapacityConfig, PaneAction, SpawnDecision, WindowState } from "./types";
2
2
  import { type SessionMapping } from "./oldest-agent-pane";
3
- export declare function decideSpawnActions(state: WindowState, sessionId: string, description: string, _config: CapacityConfig, sessionMappings: SessionMapping[]): SpawnDecision;
3
+ export declare function decideSpawnActions(state: WindowState, sessionId: string, description: string, config: CapacityConfig, sessionMappings: SessionMapping[]): SpawnDecision;
4
4
  export declare function decideCloseAction(state: WindowState, sessionId: string, sessionMappings: SessionMapping[]): PaneAction | null;
@@ -2,17 +2,14 @@ import type { TranscriptEntry } from "./types";
2
2
  export declare function getTranscriptPath(sessionId: string): string;
3
3
  export declare function appendTranscriptEntry(sessionId: string, entry: TranscriptEntry): void;
4
4
  /**
5
- * Build Claude Code compatible transcript from session messages
6
- *
7
- * PORT FROM DISABLED: This calls client.session.messages() API to fetch
8
- * the full session history and builds a JSONL file in Claude Code format.
9
- *
10
- * @param client OpenCode client instance
11
- * @param sessionId Session ID
12
- * @param directory Working directory
13
- * @param currentToolName Current tool being executed (added as last entry)
14
- * @param currentToolInput Current tool input
15
- * @returns Temp file path (caller must call deleteTempTranscript!)
5
+ * Clear transcript cache for a specific session or all sessions.
6
+ * Call on session.deleted to prevent memory accumulation.
7
+ */
8
+ export declare function clearTranscriptCache(sessionId?: string): void;
9
+ /**
10
+ * Build Claude Code compatible transcript from session messages.
11
+ * Uses per-session cache to avoid redundant session.messages() API calls.
12
+ * First call fetches and caches; subsequent calls reuse cached base entries.
16
13
  */
17
14
  export declare function buildTranscriptFromSession(client: {
18
15
  session: {
@@ -28,7 +25,5 @@ export declare function buildTranscriptFromSession(client: {
28
25
  }, sessionId: string, directory: string, currentToolName: string, currentToolInput: Record<string, unknown>): Promise<string | null>;
29
26
  /**
30
27
  * Delete temp transcript file (call in finally block)
31
- *
32
- * PORT FROM DISABLED: Cleanup mechanism to avoid disk accumulation
33
28
  */
34
29
  export declare function deleteTempTranscript(path: string | null): void;
@@ -1 +1,2 @@
1
- export declare function createCompactionContextInjector(): () => string;
1
+ import type { BackgroundManager } from "../../features/background-agent";
2
+ export declare function createCompactionContextInjector(backgroundManager?: BackgroundManager): (sessionID?: string) => string;
@@ -33,7 +33,6 @@ export { createStartWorkHook } from "./start-work";
33
33
  export { createAtlasHook } from "./atlas";
34
34
  export { createDelegateTaskRetryHook } from "./delegate-task-retry";
35
35
  export { createQuestionLabelTruncatorHook } from "./question-label-truncator";
36
- export { createSubagentQuestionBlockerHook } from "./subagent-question-blocker";
37
36
  export { createStopContinuationGuardHook, type StopContinuationGuard } from "./stop-continuation-guard";
38
37
  export { createCompactionContextInjector } from "./compaction-context-injector";
39
38
  export { createCompactionTodoPreserverHook } from "./compaction-todo-preserver";
@@ -6,16 +6,13 @@
6
6
  * 2. GPT 5.2 models → gpt5.2.ts
7
7
  * 3. Everything else (Claude, etc.) → default.ts
8
8
  */
9
+ import { isGptModel } from "../../../agents/types";
9
10
  /**
10
11
  * Checks if agent is a planner-type agent.
11
12
  * Planners don't need ultrawork injection (they ARE the planner).
12
13
  */
13
14
  export declare function isPlannerAgent(agentName?: string): boolean;
14
- /**
15
- * Checks if model is GPT 5.2 series.
16
- * GPT models benefit from specific prompting patterns.
17
- */
18
- export declare function isGptModel(modelID?: string): boolean;
15
+ export { isGptModel };
19
16
  /** Ultrawork message source type */
20
17
  export type UltraworkSource = "planner" | "gpt" | "default";
21
18
  /**
@@ -56,8 +56,7 @@ export declare const THINKING_CONFIGS: {
56
56
  readonly "zai-coding-plan": {
57
57
  readonly extra_body: {
58
58
  readonly thinking: {
59
- readonly type: "enabled";
60
- readonly clear_thinking: false;
59
+ readonly type: "disabled";
61
60
  };
62
61
  };
63
62
  };
@@ -5,3 +5,4 @@ export declare const COUNTDOWN_SECONDS = 2;
5
5
  export declare const TOAST_DURATION_MS = 900;
6
6
  export declare const COUNTDOWN_GRACE_PERIOD_MS = 500;
7
7
  export declare const ABORT_WINDOW_MS = 3000;
8
+ export declare const CONTINUATION_COOLDOWN_MS = 30000;
@@ -5,5 +5,6 @@ export interface SessionStateStore {
5
5
  cancelCountdown: (sessionID: string) => void;
6
6
  cleanup: (sessionID: string) => void;
7
7
  cancelAllCountdowns: () => void;
8
+ shutdown: () => void;
8
9
  }
9
10
  export declare function createSessionStateStore(): SessionStateStore;
@@ -28,6 +28,8 @@ export interface SessionState {
28
28
  isRecovering?: boolean;
29
29
  countdownStartedAt?: number;
30
30
  abortDetectedAt?: number;
31
+ lastInjectedAt?: number;
32
+ inFlight?: boolean;
31
33
  }
32
34
  export interface MessageInfo {
33
35
  id?: string;