oh-my-opencode-slim 1.0.1 → 1.0.2

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.
package/README.md CHANGED
@@ -7,7 +7,8 @@
7
7
  <p>
8
8
  <a href="https://boringdystopia.ai/"><img src="https://img.shields.io/badge/boringdystopia.ai-111111?style=for-the-badge&logo=vercel&logoColor=white" alt="boringdystopia.ai"></a>&nbsp;
9
9
  <a href="https://x.com/alvinunreal"><img src="https://img.shields.io/badge/X-@alvinunreal-000000?style=for-the-badge&logo=x&logoColor=white" alt="X @alvinunreal"></a>&nbsp;
10
- <a href="https://t.me/boringdystopiadevelopment"><img src="https://img.shields.io/badge/Telegram-Join%20channel-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white" alt="Telegram Join channel"></a>
10
+ <a href="https://t.me/boringdystopiadevelopment"><img src="https://img.shields.io/badge/Telegram-Join%20channel-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white" alt="Telegram Join channel"></a>&nbsp;
11
+ <a href="https://deepwiki.com/alvinunreal/oh-my-opencode-slim"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
11
12
  </p>
12
13
  </div>
13
14
 
@@ -39,7 +40,7 @@ bunx oh-my-opencode-slim@latest install
39
40
 
40
41
  ### Getting Started
41
42
 
42
- The installer generates an OpenAI preset by default, using `openai/gpt-5.4` for the higher-judgment agents and `openai/gpt-5.4-mini` for the faster scoped agents.
43
+ The installer generates an OpenAI preset by default, using `openai/gpt-5.5` for the higher-judgment agents and `openai/gpt-5.4-mini` for the faster scoped agents.
43
44
 
44
45
  Then:
45
46
 
@@ -68,8 +69,8 @@ The default generated configuration looks like this:
68
69
  "preset": "openai",
69
70
  "presets": {
70
71
  "openai": {
71
- "orchestrator": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["*"], "mcps": ["*", "!context7"] },
72
- "oracle": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["simplify"], "mcps": [] },
72
+ "orchestrator": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["*"], "mcps": ["*", "!context7"] },
73
+ "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
73
74
  "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "grep_app"] },
74
75
  "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
75
76
  "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": ["agent-browser"], "mcps": [] },
@@ -79,6 +80,10 @@ The default generated configuration looks like this:
79
80
  }
80
81
  ```
81
82
 
83
+ Session management is enabled by default even though it is not shown in the
84
+ starter config. See **[Session Management](docs/session-management.md)** if you
85
+ want to customize how many resumable child-agent sessions are remembered.
86
+
82
87
  ### For Alternative Providers
83
88
 
84
89
  To use Kimi, GitHub Copilot, ZAI Coding Plan, or a mixed-provider setup, use **[Configuration](docs/configuration.md)** for the full reference. If you want a ready-made starting point, check the **[Author's Preset](docs/authors-preset.md)** and **[$30 Preset](docs/thirty-dollars-preset.md)** - the `$30` preset is the best cheap setup.
@@ -140,12 +145,12 @@ If any agent fails to respond, check your provider authentication and config fil
140
145
  </tr>
141
146
  <tr>
142
147
  <td colspan="2">
143
- <b>Default Model:</b> <code>openai/gpt-5.4</code>
148
+ <b>Default Model:</b> <code>openai/gpt-5.5</code>
144
149
  </td>
145
150
  </tr>
146
151
  <tr>
147
152
  <td colspan="2">
148
- <b>Recommended Models:</b> <code>openai/gpt-5.4</code> <code>anthropic/claude-opus-4.6</code>
153
+ <b>Recommended Models:</b> <code>openai/gpt-5.5</code> <code>anthropic/claude-opus-4.6</code>
149
154
  </td>
150
155
  </tr>
151
156
  <tr>
@@ -222,12 +227,12 @@ If any agent fails to respond, check your provider authentication and config fil
222
227
  </tr>
223
228
  <tr>
224
229
  <td colspan="2">
225
- <b>Default Model:</b> <code>openai/gpt-5.4 (high)</code>
230
+ <b>Default Model:</b> <code>openai/gpt-5.5 (high)</code>
226
231
  </td>
227
232
  </tr>
228
233
  <tr>
229
234
  <td colspan="2">
230
- <b>Recommended Models:</b> <code>openai/gpt-5.4 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
235
+ <b>Recommended Models:</b> <code>openai/gpt-5.5 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
231
236
  </td>
232
237
  </tr>
233
238
  <tr>
@@ -251,7 +256,7 @@ If any agent fails to respond, check your provider authentication and config fil
251
256
  <br><sub><i>Many minds, one verdict.</i></sub>
252
257
  </td>
253
258
  <td width="70%" valign="top">
254
- The Council is not a lone being but a chamber of minds summoned when one answer is not enough. It sends your question to multiple models in parallel, gathers their competing judgments, and places them before a master who distills the strongest ideas into a single verdict. Where a solitary agent may miss a path, the Council cross-examines possibility itself.
259
+ The Council is not a lone being but a chamber of minds summoned when one answer is not enough. It sends your question to multiple models in parallel, gathers their competing judgments, and then the Council agent itself distills the strongest ideas into a single verdict. Where a solitary agent may miss a path, the Council cross-examines possibility itself.
255
260
  </td>
256
261
  </tr>
257
262
  <tr>
@@ -271,17 +276,17 @@ If any agent fails to respond, check your provider authentication and config fil
271
276
  </tr>
272
277
  <tr>
273
278
  <td colspan="2">
274
- <b>Default Setup:</b> <code>Config-driven</code> — councillors are chosen from your configured preset and the council agent synthesizes their responses
279
+ <b>Default Setup:</b> <code>Config-driven</code> — councillors come from <code>council.presets</code> and the Council agent model comes from your normal <code>council</code> agent config
275
280
  </td>
276
281
  </tr>
277
282
  <tr>
278
283
  <td colspan="2">
279
- <b>Recommended Setup:</b> <code>Strong master</code> + <code>diverse councillors</code> across providers
284
+ <b>Recommended Setup:</b> <code>Strong Council model</code> + <code>diverse councillors</code> across providers
280
285
  </td>
281
286
  </tr>
282
287
  <tr>
283
288
  <td colspan="2">
284
- <b>Model Guidance:</b> Use a strong synthesis model as the master and diverse models as councillors. The value of Council comes from comparing different model perspectives, not just picking the single strongest model everywhere.
289
+ <b>Model Guidance:</b> Use a strong synthesis model for the Council agent and diverse models as councillors. The value of Council comes from comparing different model perspectives, not just picking the single strongest model everywhere.
285
290
  </td>
286
291
  </tr>
287
292
  </table>
@@ -472,6 +477,7 @@ Use this section as a map: start with installation, then jump to features, confi
472
477
  | **[Council](docs/council.md)** | Run multiple models in parallel and synthesize a single answer with `@council` |
473
478
  | **[Interview](docs/interview.md)** | Turn rough ideas into a structured markdown spec through a browser-based Q&A flow |
474
479
  | **[Multiplexer Integration](docs/multiplexer-integration.md)** | Watch agents work live in Tmux or Zellij panes |
480
+ | **[Session Management](docs/session-management.md)** | Reuse recent child-agent sessions with short aliases instead of starting over |
475
481
  | **[Todo Continuation](docs/todo-continuation.md)** | Auto-continue orchestrator sessions with cooldowns and safety checks |
476
482
  | **[Preset Switching](docs/preset-switching.md)** | Switch agent model presets at runtime with `/preset` |
477
483
  | **[Codemap](docs/codemap.md)** | Generate hierarchical codemaps to understand large codebases faster |
@@ -502,7 +508,7 @@ Use this section as a map: start with installation, then jump to features, confi
502
508
  <p><sub>Every merged contribution leaves a mark on the realm.</sub></p>
503
509
 
504
510
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
505
- [![All Contributors](https://img.shields.io/badge/all_contributors-41-orange.svg?style=flat-square)](#contributors-)
511
+ [![All Contributors](https://img.shields.io/badge/all_contributors-44-orange.svg?style=flat-square)](#contributors-)
506
512
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
507
513
  </div>
508
514
 
@@ -567,6 +573,11 @@ Use this section as a map: start with installation, then jump to features, confi
567
573
  <td align="center" valign="top" width="16.66%"><a href="https://zenstudio.cv/"><img src="https://avatars.githubusercontent.com/u/10528635?v=4?s=100" width="100px;" alt="Nguyen Canh Toan"/><br /><sub><b>Nguyen Canh Toan</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=ZenStudioLab" title="Code">💻</a></td>
568
574
  <td align="center" valign="top" width="16.66%"><a href="https://github.com/tom-dyar"><img src="https://avatars.githubusercontent.com/u/8899513?v=4?s=100" width="100px;" alt="Thomas Dyar"/><br /><sub><b>Thomas Dyar</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=tom-dyar" title="Code">💻</a></td>
569
575
  <td align="center" valign="top" width="16.66%"><a href="https://github.com/zuuky"><img src="https://avatars.githubusercontent.com/u/6713415?v=4?s=100" width="100px;" alt="zero"/><br /><sub><b>zero</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=zuuky" title="Code">💻</a></td>
576
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/DenisBalan"><img src="https://avatars.githubusercontent.com/u/33955091?v=4?s=100" width="100px;" alt="Denis Balan"/><br /><sub><b>Denis Balan</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=DenisBalan" title="Code">💻</a></td>
577
+ </tr>
578
+ <tr>
579
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/gustavocaiano"><img src="https://avatars.githubusercontent.com/u/104129313?v=4?s=100" width="100px;" alt="Gustavo Caiano"/><br /><sub><b>Gustavo Caiano</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=gustavocaiano" title="Code">💻</a></td>
580
+ <td align="center" valign="top" width="16.66%"><a href="https://github.com/ThomasMldr"><img src="https://avatars.githubusercontent.com/u/6631765?v=4?s=100" width="100px;" alt="Thomas Mulder"/><br /><sub><b>Thomas Mulder</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=ThomasMldr" title="Code">💻</a></td>
570
581
  </tr>
571
582
  </tbody>
572
583
  </table>
package/dist/cli/index.js CHANGED
@@ -259,6 +259,9 @@ var InterviewConfigSchema = z2.object({
259
259
  port: z2.number().int().min(0).max(65535).default(0),
260
260
  dashboard: z2.boolean().default(false)
261
261
  });
262
+ var SessionManagerConfigSchema = z2.object({
263
+ maxSessionsPerAgent: z2.number().int().min(1).max(10).default(2)
264
+ });
262
265
  var TodoContinuationConfigSchema = z2.object({
263
266
  maxContinuations: z2.number().int().min(1).max(50).default(5).describe("Maximum consecutive auto-continuations before stopping to ask user"),
264
267
  cooldownMs: z2.number().int().min(0).max(30000).default(3000).describe("Delay in ms before auto-continuing (gives user time to abort)"),
@@ -300,6 +303,7 @@ var PluginConfigSchema = z2.object({
300
303
  scoringEngineVersion: z2.enum(["v1", "v2-shadow", "v2"]).optional(),
301
304
  balanceProviderUsage: z2.boolean().optional(),
302
305
  showStartupToast: z2.boolean().optional().describe("Show the startup activation toast when OpenCode starts. Defaults to true."),
306
+ autoUpdate: z2.boolean().optional().describe("Disable automatic installation of plugin updates when false. Defaults to true."),
303
307
  manualPlan: ManualPlanSchema.optional(),
304
308
  presets: z2.record(z2.string(), PresetSchema).optional(),
305
309
  agents: z2.record(z2.string(), AgentOverrideConfigSchema).optional(),
@@ -309,6 +313,7 @@ var PluginConfigSchema = z2.object({
309
313
  tmux: TmuxConfigSchema.optional(),
310
314
  websearch: WebsearchConfigSchema.optional(),
311
315
  interview: InterviewConfigSchema.optional(),
316
+ sessionManager: SessionManagerConfigSchema.optional(),
312
317
  todoContinuation: TodoContinuationConfigSchema.optional(),
313
318
  fallback: FailoverConfigSchema.optional(),
314
319
  council: CouncilConfigSchema.optional()
@@ -453,8 +458,8 @@ function installSkill(skill) {
453
458
  var SCHEMA_URL = "https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json";
454
459
  var MODEL_MAPPINGS = {
455
460
  openai: {
456
- orchestrator: { model: "openai/gpt-5.4" },
457
- oracle: { model: "openai/gpt-5.4", variant: "high" },
461
+ orchestrator: { model: "openai/gpt-5.5" },
462
+ oracle: { model: "openai/gpt-5.5", variant: "high" },
458
463
  librarian: { model: "openai/gpt-5.4-mini", variant: "low" },
459
464
  explorer: { model: "openai/gpt-5.4-mini", variant: "low" },
460
465
  designer: { model: "openai/gpt-5.4-mini", variant: "medium" },
@@ -1135,7 +1140,7 @@ ${JSON.stringify(liteConfig, null, 2)}
1135
1140
  console.log(" 5. Verify the agents are responding:");
1136
1141
  console.log(` ${BLUE}> ping all agents${RESET}`);
1137
1142
  console.log();
1138
- const modelsInfo = "Default configuration uses OpenAI models (gpt-5.4 / gpt-5.4-mini).";
1143
+ const modelsInfo = "Default configuration uses OpenAI models (gpt-5.5 / gpt-5.4-mini).";
1139
1144
  console.log(`${modelsInfo}`);
1140
1145
  const altProviders = "For the full configuration reference, see:";
1141
1146
  console.log(altProviders);
@@ -1,2 +1,2 @@
1
- import type { InstallArgs } from './types';
1
+ import type { InstallArgs } from "./types";
2
2
  export declare function install(args: InstallArgs): Promise<number>;
@@ -1,11 +1,11 @@
1
- import type { InstallConfig } from './types';
1
+ import type { InstallConfig } from "./types";
2
2
  export declare const MODEL_MAPPINGS: {
3
3
  readonly openai: {
4
4
  readonly orchestrator: {
5
- readonly model: "openai/gpt-5.4";
5
+ readonly model: "openai/gpt-5.5";
6
6
  };
7
7
  readonly oracle: {
8
- readonly model: "openai/gpt-5.4";
8
+ readonly model: "openai/gpt-5.5";
9
9
  readonly variant: "high";
10
10
  };
11
11
  readonly librarian: {
@@ -75,7 +75,7 @@ export declare const MODEL_MAPPINGS: {
75
75
  readonly variant: "low";
76
76
  };
77
77
  };
78
- readonly 'zai-plan': {
78
+ readonly "zai-plan": {
79
79
  readonly orchestrator: {
80
80
  readonly model: "zai-coding-plan/glm-5";
81
81
  };
@@ -20,7 +20,7 @@ export declare const DEFAULT_TIMEOUT_MS: number;
20
20
  export declare const MAX_POLL_TIME_MS: number;
21
21
  export declare const FALLBACK_FAILOVER_TIMEOUT_MS = 15000;
22
22
  export declare const DEFAULT_MAX_SUBAGENT_DEPTH = 3;
23
- export declare const PHASE_REMINDER_TEXT = "!IMPORTANT! Recall the workflow rules:\nUnderstand \u2192 choose the best parallelized path based on your agents delegation rules \u2192 don't prefer solo \u2192 execute \u2192 verify.\nIf delegating, launch the specialist in the same turn you mention it !END!";
23
+ export declare const PHASE_REMINDER_TEXT = "!IMPORTANT! Recall the workflow rules:\nUnderstand \u2192 choose the best parallelized path based on your capabilities and agents delegation rules \u2192 execute \u2192 verify.\nIf delegating, launch the specialist in the same turn you mention it !END!";
24
24
  export declare const TMUX_SPAWN_DELAY_MS = 500;
25
25
  export declare const COUNCILLOR_STAGGER_MS = 250;
26
26
  export declare const STABLE_POLLS_THRESHOLD = 3;
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from "zod";
2
2
  /**
3
3
  * Configuration for a single councillor within a preset.
4
4
  * Each councillor is an independent LLM that processes the same prompt.
@@ -120,7 +120,7 @@ export interface CouncilResult {
120
120
  councillorResults: Array<{
121
121
  name: string;
122
122
  model: string;
123
- status: 'completed' | 'failed' | 'timed_out';
123
+ status: "completed" | "failed" | "timed_out";
124
124
  result?: string;
125
125
  error?: string;
126
126
  }>;
@@ -158,6 +158,10 @@ export declare const InterviewConfigSchema: z.ZodObject<{
158
158
  dashboard: z.ZodDefault<z.ZodBoolean>;
159
159
  }, z.core.$strip>;
160
160
  export type InterviewConfig = z.infer<typeof InterviewConfigSchema>;
161
+ export declare const SessionManagerConfigSchema: z.ZodObject<{
162
+ maxSessionsPerAgent: z.ZodDefault<z.ZodNumber>;
163
+ }, z.core.$strip>;
164
+ export type SessionManagerConfig = z.infer<typeof SessionManagerConfigSchema>;
161
165
  export declare const TodoContinuationConfigSchema: z.ZodObject<{
162
166
  maxContinuations: z.ZodDefault<z.ZodNumber>;
163
167
  cooldownMs: z.ZodDefault<z.ZodNumber>;
@@ -190,6 +194,7 @@ export declare const PluginConfigSchema: z.ZodObject<{
190
194
  }>>;
191
195
  balanceProviderUsage: z.ZodOptional<z.ZodBoolean>;
192
196
  showStartupToast: z.ZodOptional<z.ZodBoolean>;
197
+ autoUpdate: z.ZodOptional<z.ZodBoolean>;
193
198
  manualPlan: z.ZodOptional<z.ZodObject<{
194
199
  orchestrator: z.ZodObject<{
195
200
  primary: z.ZodString;
@@ -298,6 +303,9 @@ export declare const PluginConfigSchema: z.ZodObject<{
298
303
  port: z.ZodDefault<z.ZodNumber>;
299
304
  dashboard: z.ZodDefault<z.ZodBoolean>;
300
305
  }, z.core.$strip>>;
306
+ sessionManager: z.ZodOptional<z.ZodObject<{
307
+ maxSessionsPerAgent: z.ZodDefault<z.ZodNumber>;
308
+ }, z.core.$strip>>;
301
309
  todoContinuation: z.ZodOptional<z.ZodObject<{
302
310
  maxContinuations: z.ZodDefault<z.ZodNumber>;
303
311
  cooldownMs: z.ZodDefault<z.ZodNumber>;
@@ -9,4 +9,5 @@ export { processImageAttachments } from './image-hook';
9
9
  export { createJsonErrorRecoveryHook } from './json-error-recovery';
10
10
  export { createPhaseReminderHook } from './phase-reminder';
11
11
  export { createPostFileToolNudgeHook } from './post-file-tool-nudge';
12
+ export { createTaskSessionManagerHook } from './task-session-manager';
12
13
  export { createTodoContinuationHook } from './todo-continuation';
@@ -1,4 +1,4 @@
1
- export declare const PHASE_REMINDER = "<reminder>!IMPORTANT! Recall the workflow rules:\nUnderstand \u2192 choose the best parallelized path based on your agents delegation rules \u2192 don't prefer solo \u2192 execute \u2192 verify.\nIf delegating, launch the specialist in the same turn you mention it !END!</reminder>";
1
+ export declare const PHASE_REMINDER = "<reminder>!IMPORTANT! Recall the workflow rules:\nUnderstand \u2192 choose the best parallelized path based on your capabilities and agents delegation rules \u2192 execute \u2192 verify.\nIf delegating, launch the specialist in the same turn you mention it !END!</reminder>";
2
2
  interface MessageInfo {
3
3
  role: string;
4
4
  agent?: string;
@@ -0,0 +1,36 @@
1
+ import type { PluginInput } from '@opencode-ai/plugin';
2
+ export declare function createTaskSessionManagerHook(_ctx: PluginInput, options: {
3
+ maxSessionsPerAgent: number;
4
+ shouldManageSession: (sessionID: string) => boolean;
5
+ }): {
6
+ 'tool.execute.before': (input: {
7
+ tool: string;
8
+ sessionID?: string;
9
+ callID?: string;
10
+ }, output: {
11
+ args?: unknown;
12
+ }) => Promise<void>;
13
+ 'tool.execute.after': (input: {
14
+ tool: string;
15
+ sessionID?: string;
16
+ callID?: string;
17
+ }, output: {
18
+ output: unknown;
19
+ }) => Promise<void>;
20
+ 'experimental.chat.system.transform': (input: {
21
+ sessionID?: string;
22
+ }, output: {
23
+ system: string[];
24
+ }) => Promise<void>;
25
+ event: (input: {
26
+ event: {
27
+ type: string;
28
+ properties?: {
29
+ info?: {
30
+ id?: string;
31
+ };
32
+ sessionID?: string;
33
+ };
34
+ };
35
+ }) => Promise<void>;
36
+ };