oh-my-opencode 5.0.0-beta.63 → 5.0.0-beta.65

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 (115) hide show
  1. package/dist/cli/index.js +28 -23
  2. package/dist/cli-node/index.js +28 -23
  3. package/dist/hooks/plan-format-validator/hook.d.ts +19 -0
  4. package/dist/index.js +149 -86
  5. package/dist/oh-my-opencode.schema.json +4 -4
  6. package/dist/skills/ulw-plan/references/full-workflow.md +1 -0
  7. package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  8. package/dist/tui.js +13 -8
  9. package/package.json +14 -14
  10. package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
  11. package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8 -3
  12. package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
  13. package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
  14. package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
  15. package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
  16. package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
  17. package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
  18. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
  19. package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
  20. package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
  21. package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
  22. package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
  23. package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
  24. package/packages/omo-codex/plugin/components/rules/package.json +1 -1
  25. package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
  26. package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
  27. package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
  28. package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
  29. package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
  30. package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
  31. package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
  32. package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  33. package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
  34. package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
  35. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +7 -5
  36. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +7 -2
  37. package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +2 -0
  38. package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +364 -135
  39. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +6 -0
  40. package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +20 -12
  41. package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +3 -0
  42. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
  43. package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
  44. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
  45. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
  46. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
  47. package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +8 -0
  48. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
  49. package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +6 -0
  50. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +4 -1
  51. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +6 -3
  52. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
  53. package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
  54. package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +8 -4
  55. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +17 -8
  56. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +335 -0
  57. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +109 -10
  58. package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +3 -0
  59. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
  60. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
  61. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
  62. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
  63. package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +6 -6
  64. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
  65. package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
  66. package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
  67. package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
  68. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +15 -3
  69. package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -0
  70. package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -14
  71. package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +3 -0
  72. package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
  73. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
  74. package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +7 -0
  75. package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +7 -0
  76. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +9 -3
  77. package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
  78. package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +8 -4
  79. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +17 -7
  80. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +124 -10
  81. package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +3 -0
  82. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
  83. package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
  84. package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +7 -6
  85. package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
  86. package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +37 -1
  87. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +33 -4
  88. package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
  89. package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
  90. package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
  91. package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
  92. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
  93. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
  94. package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
  95. package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
  96. package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
  97. package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
  98. package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
  99. package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
  100. package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
  101. package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
  102. package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
  103. package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
  104. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
  105. package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
  106. package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
  107. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
  108. package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
  109. package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
  110. package/packages/omo-codex/plugin/package-lock.json +12 -12
  111. package/packages/omo-codex/plugin/package.json +1 -1
  112. package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
  113. package/packages/omo-codex/scripts/install-dist/install-local.mjs +10 -5
  114. package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -0
  115. package/packages/shared-skills/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
package/dist/index.js CHANGED
@@ -12422,7 +12422,6 @@ async function listActiveTeams(config) {
12422
12422
  }
12423
12423
  var STATE_FILE_NAME = "state.json", STALE_DELETING_TTL_MS = 60000, ALLOWED_RUNTIME_TRANSITIONS, RuntimeStateError, InvalidTransitionError;
12424
12424
  var init_store = __esm(() => {
12425
- init_src();
12426
12425
  init_types2();
12427
12426
  init_paths();
12428
12427
  init_locks();
@@ -22703,8 +22702,8 @@ var OmoGitMasterSettingsShape = {
22703
22702
  };
22704
22703
  var OmoGitMasterSettingsLayerSchema = z5.object(OmoGitMasterSettingsShape).partial().strict();
22705
22704
  var OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
22706
- commit_footer: z5.union([z5.boolean(), z5.string()]).default(true),
22707
- include_co_authored_by: z5.boolean().default(true)
22705
+ commit_footer: z5.union([z5.boolean(), z5.string()]).default(false),
22706
+ include_co_authored_by: z5.boolean().default(false)
22708
22707
  }).strict();
22709
22708
 
22710
22709
  // packages/omo-config-core/src/schema/harness.ts
@@ -23115,6 +23114,7 @@ var OmoFormatOnMutationSchema = OmoFormatOnMutationLayerSchema.extend({
23115
23114
 
23116
23115
  // packages/omo-config-core/src/schema/config.ts
23117
23116
  var OmoOpenCodeHarnessConfigSchema = z14.record(z14.string(), z14.unknown());
23117
+ var OmoDisabledSkillsSchema = z14.array(z14.string());
23118
23118
  var OmoTypedHarnessConfigSchema = z14.object({
23119
23119
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
23120
23120
  categories: OmoCategoriesConfigSchema.optional(),
@@ -23126,7 +23126,8 @@ var OmoTypedHarnessConfigSchema = z14.object({
23126
23126
  model_profiles: OmoModelProfilesLayerSchema.optional(),
23127
23127
  model_profile: z14.string().optional(),
23128
23128
  memory: OmoMemorySettingsLayerSchema.optional(),
23129
- telemetry: OmoTelemetrySettingsLayerSchema.optional()
23129
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
23130
+ disabled_skills: OmoDisabledSkillsSchema.optional()
23130
23131
  }).strict();
23131
23132
  var OmoConfigProfileSchema = z14.object({
23132
23133
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -23140,6 +23141,7 @@ var OmoConfigProfileSchema = z14.object({
23140
23141
  model_profile: z14.string().optional(),
23141
23142
  memory: OmoMemorySettingsLayerSchema.optional(),
23142
23143
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
23144
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
23143
23145
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
23144
23146
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
23145
23147
  "[codex]": OmoTypedHarnessConfigSchema.optional()
@@ -23157,6 +23159,7 @@ var OmoConfigSchema = z14.object({
23157
23159
  model_profile: z14.string().optional(),
23158
23160
  memory: OmoMemorySettingsSchema.optional(),
23159
23161
  telemetry: OmoTelemetrySettingsSchema.optional(),
23162
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
23160
23163
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
23161
23164
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
23162
23165
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -23177,6 +23180,7 @@ var OmoConfigLayerSchema = z14.object({
23177
23180
  model_profile: z14.string().optional(),
23178
23181
  memory: OmoMemorySettingsLayerSchema.optional(),
23179
23182
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
23183
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
23180
23184
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
23181
23185
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
23182
23186
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -25210,8 +25214,8 @@ var GitEnvPrefixSchema = z30.string().refine(isValidGitEnvPrefix, { message: GIT
25210
25214
  // packages/omo-opencode/src/config/schema/git-master.ts
25211
25215
  import { z as z31 } from "zod";
25212
25216
  var GitMasterConfigSchema = z31.object({
25213
- commit_footer: z31.union([z31.boolean(), z31.string()]).default(true),
25214
- include_co_authored_by: z31.boolean().default(true),
25217
+ commit_footer: z31.union([z31.boolean(), z31.string()]).default(false),
25218
+ include_co_authored_by: z31.boolean().default(false),
25215
25219
  git_env_prefix: GitEnvPrefixSchema
25216
25220
  });
25217
25221
  // packages/omo-opencode/src/config/schema/hooks.ts
@@ -25518,8 +25522,8 @@ var OhMyOpenCodeConfigSchema = z50.object({
25518
25522
  keyword_detector: KeywordDetectorConfigSchema.optional(),
25519
25523
  babysitting: BabysittingConfigSchema.optional(),
25520
25524
  git_master: GitMasterConfigSchema.default({
25521
- commit_footer: true,
25522
- include_co_authored_by: true,
25525
+ commit_footer: false,
25526
+ include_co_authored_by: false,
25523
25527
  git_env_prefix: "GIT_MASTER=1"
25524
25528
  }),
25525
25529
  browser_automation_engine: BrowserAutomationConfigSchema.optional(),
@@ -96511,7 +96515,7 @@ function getCachedVersion(options = {}) {
96511
96515
  // package.json
96512
96516
  var package_default = {
96513
96517
  name: "oh-my-opencode",
96514
- version: "5.0.0-beta.63",
96518
+ version: "5.0.0-beta.65",
96515
96519
  description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
96516
96520
  main: "./dist/index.js",
96517
96521
  types: "dist/index.d.ts",
@@ -96693,7 +96697,7 @@ var package_default = {
96693
96697
  zod: "^4.4.3"
96694
96698
  },
96695
96699
  devDependencies: {
96696
- "@code-yeongyu/senpi": "2026.9.15-2",
96700
+ "@code-yeongyu/senpi": "2026.9.16",
96697
96701
  "@oh-my-opencode/agents-md-core": "workspace:*",
96698
96702
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
96699
96703
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -96732,18 +96736,18 @@ var package_default = {
96732
96736
  typescript: "^7.0.2"
96733
96737
  },
96734
96738
  optionalDependencies: {
96735
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.63",
96736
- "oh-my-opencode-darwin-x64": "5.0.0-beta.63",
96737
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.63",
96738
- "oh-my-opencode-linux-arm64": "5.0.0-beta.63",
96739
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.63",
96740
- "oh-my-opencode-linux-x64": "5.0.0-beta.63",
96741
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.63",
96742
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.63",
96743
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.63",
96744
- "oh-my-opencode-windows-arm64": "5.0.0-beta.63",
96745
- "oh-my-opencode-windows-x64": "5.0.0-beta.63",
96746
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.63"
96739
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.65",
96740
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.65",
96741
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.65",
96742
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.65",
96743
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.65",
96744
+ "oh-my-opencode-linux-x64": "5.0.0-beta.65",
96745
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.65",
96746
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.65",
96747
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.65",
96748
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.65",
96749
+ "oh-my-opencode-windows-x64": "5.0.0-beta.65",
96750
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.65"
96747
96751
  },
96748
96752
  overrides: {
96749
96753
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -109143,16 +109147,15 @@ function buildShellAwareGitPrefix(bashPrefix, shellType) {
109143
109147
  return buildEnvPrefix2(envRecord, resolvedShellType);
109144
109148
  }
109145
109149
  function injectGitMasterConfig(template, config) {
109146
- const commitFooter = config?.commit_footer ?? true;
109147
- const includeCoAuthoredBy = config?.include_co_authored_by ?? true;
109150
+ const commitFooter = config?.commit_footer ?? false;
109148
109151
  const gitEnvPrefix = assertValidGitEnvPrefix(config?.git_env_prefix ?? "GIT_MASTER=1");
109149
109152
  const shellType = detectShellType2();
109150
109153
  const shellPrefix = gitEnvPrefix ? buildShellAwareGitPrefix(gitEnvPrefix, shellType) : "";
109151
109154
  const codeBlockLang = shellType === "powershell" ? "pwsh" : shellType === "csh" ? "csh" : "bash";
109152
109155
  const skipBashBlockPrefixing = shellType === "powershell" || shellType === "cmd" || shellType === "csh";
109153
109156
  let result = gitEnvPrefix ? injectGitEnvPrefix(template, shellPrefix, codeBlockLang) : template;
109154
- if (commitFooter || includeCoAuthoredBy) {
109155
- const injection = buildCommitFooterInjection(commitFooter, includeCoAuthoredBy, shellPrefix);
109157
+ if (commitFooter) {
109158
+ const injection = buildCommitFooterInjection(commitFooter, shellPrefix);
109156
109159
  const insertionPoint = result.indexOf("```\n</execution>");
109157
109160
  result = insertionPoint !== -1 ? result.slice(0, insertionPoint) + "```\n\n" + injection + `
109158
109161
  </execution>` + result.slice(insertionPoint + "```\n</execution>".length) : result + `
@@ -109216,47 +109219,26 @@ function prefixGitCommandsInCodeBlock(codeBlock, prefix) {
109216
109219
  }).join(`
109217
109220
  `);
109218
109221
  }
109219
- function buildCommitFooterInjection(commitFooter, includeCoAuthoredBy, gitEnvPrefix) {
109220
- const sections = [];
109222
+ function buildCommitFooterInjection(commitFooter, gitEnvPrefix) {
109221
109223
  const cmdPrefix = gitEnvPrefix ? `${gitEnvPrefix} ` : "";
109222
- sections.push("### 5.5 Commit Footer & Co-Author");
109223
- sections.push("");
109224
- sections.push("Add Sisyphus attribution to EVERY commit:");
109225
- sections.push("");
109226
- if (commitFooter) {
109227
- const footerText = typeof commitFooter === "string" ? commitFooter : "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)";
109228
- sections.push("1. **Footer in commit body:**");
109229
- sections.push("```");
109230
- sections.push(footerText);
109231
- sections.push("```");
109232
- sections.push("");
109233
- }
109234
- if (includeCoAuthoredBy) {
109235
- sections.push(`${commitFooter ? "2" : "1"}. **Co-authored-by trailer:**`);
109236
- sections.push("```");
109237
- sections.push("Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>");
109238
- sections.push("```");
109239
- sections.push("");
109240
- }
109241
- if (commitFooter && includeCoAuthoredBy) {
109242
- const footerText = typeof commitFooter === "string" ? commitFooter : "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)";
109243
- sections.push("**Example (both enabled):**");
109244
- sections.push("```bash");
109245
- sections.push(`${cmdPrefix}git commit -m "{Commit Message}" -m "${footerText}" -m "Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>"`);
109246
- sections.push("```");
109247
- } else if (commitFooter) {
109248
- const footerText = typeof commitFooter === "string" ? commitFooter : "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)";
109249
- sections.push("**Example:**");
109250
- sections.push("```bash");
109251
- sections.push(`${cmdPrefix}git commit -m "{Commit Message}" -m "${footerText}"`);
109252
- sections.push("```");
109253
- } else if (includeCoAuthoredBy) {
109254
- sections.push("**Example:**");
109255
- sections.push("```bash");
109256
- sections.push(`${cmdPrefix}git commit -m "{Commit Message}" -m "Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>"`);
109257
- sections.push("```");
109258
- }
109259
- return sections.join(`
109224
+ const footerText = typeof commitFooter === "string" ? commitFooter : "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)";
109225
+ return [
109226
+ "### 5.5 Commit Footer",
109227
+ "",
109228
+ "Add Sisyphus attribution to EVERY commit:",
109229
+ "",
109230
+ "1. **Footer in commit body:**",
109231
+ "```",
109232
+ footerText,
109233
+ "```",
109234
+ "",
109235
+ "Do NOT add a Co-authored-by trailer.",
109236
+ "",
109237
+ "**Example:**",
109238
+ "```bash",
109239
+ `${cmdPrefix}git commit -m "{Commit Message}" -m "${footerText}"`,
109240
+ "```"
109241
+ ].join(`
109260
109242
  `);
109261
109243
  }
109262
109244
  // packages/skills-loader-core/src/features/opencode-skill-loader/skill-template-resolver.ts
@@ -122113,7 +122095,7 @@ function createNotepadWriteGuardHook() {
122113
122095
  };
122114
122096
  }
122115
122097
  // packages/omo-opencode/src/hooks/plan-format-validator/hook.ts
122116
- import { existsSync as existsSync83, readFileSync as readFileSync56 } from "fs";
122098
+ import { existsSync as existsSync83, readFileSync as readFileSync56, writeFileSync as writeFileSync21 } from "fs";
122117
122099
  import { resolve as resolve24 } from "path";
122118
122100
  init_logger2();
122119
122101
  var WRITE_TOOLS = new Set(["Write", "Edit", "write", "edit"]);
@@ -122124,6 +122106,79 @@ var TOPLEVEL_CHECKBOX = /^[-*]\s*\[[ xX]?\]/;
122124
122106
  var TODO_TASK = /^- \[[ xX]\] [1-9]\d*\. .+$/;
122125
122107
  var FINAL_WAVE_TASK = /^- \[[ xX]\] F[1-9]\d*\. .+$/i;
122126
122108
  var FENCE_PATTERN2 = /^[ \t]{0,3}(`{3,}|~{3,})(.*)$/;
122109
+ var EFFORT_LINE = /^(\*\*Effort:\*\*[ \t]*)(.*)$/;
122110
+ var DURATION_VALUE = /(\d+(?:[.,]\d+)?)\s*(?:-|\u2013|to)?\s*(\d+(?:[.,]\d+)?)?\s*(min(?:ute)?s?|h(?:ou)?rs?|d(?:ay)?s?|w(?:ee)?ks?|mo(?:nth)?s?)\b/i;
122111
+ var HOURS_PER_UNIT = {
122112
+ min: 1 / 60,
122113
+ h: 1,
122114
+ d: 8,
122115
+ w: 40,
122116
+ mo: 160
122117
+ };
122118
+ var BAND_UPPER_BOUND_HOURS = [
122119
+ ["Quick", 1],
122120
+ ["Short", 4],
122121
+ ["Medium", 16],
122122
+ ["Large", 40]
122123
+ ];
122124
+ function unitKey(unit) {
122125
+ const lower = unit.toLowerCase();
122126
+ if (lower.startsWith("mi"))
122127
+ return "min";
122128
+ if (lower.startsWith("mo"))
122129
+ return "mo";
122130
+ return lower.charAt(0);
122131
+ }
122132
+ function effortBandForDuration(value) {
122133
+ const match = value.match(DURATION_VALUE);
122134
+ if (match === null)
122135
+ return null;
122136
+ const upper = (match[2] ?? match[1] ?? "").replace(",", ".");
122137
+ const unit = match[3] ?? "";
122138
+ const hours = Number.parseFloat(upper) * (HOURS_PER_UNIT[unitKey(unit)] ?? 1);
122139
+ if (!Number.isFinite(hours))
122140
+ return null;
122141
+ for (const [band, bound] of BAND_UPPER_BOUND_HOURS) {
122142
+ if (hours <= bound)
122143
+ return band;
122144
+ }
122145
+ return "XL";
122146
+ }
122147
+ function normalizePlanEffort(content) {
122148
+ const lines = content.split(/\r?\n/);
122149
+ for (let index = 0;index < lines.length; index += 1) {
122150
+ const line = lines[index] ?? "";
122151
+ const match = line.match(EFFORT_LINE);
122152
+ if (match === null)
122153
+ continue;
122154
+ const prefix = match[1] ?? "";
122155
+ const value = (match[2] ?? "").trim();
122156
+ const band = effortBandForDuration(value);
122157
+ if (band === null)
122158
+ return null;
122159
+ lines[index] = `${prefix}${band}`;
122160
+ const newline = content.includes(`\r
122161
+ `) ? `\r
122162
+ ` : `
122163
+ `;
122164
+ return { content: lines.join(newline), original: value, band };
122165
+ }
122166
+ return null;
122167
+ }
122168
+ function buildEffortWarning(normalized) {
122169
+ return [
122170
+ "",
122171
+ "<plan-format-warning>",
122172
+ `Effort was written as a duration (\`${normalized.original}\`) and has been replaced with the band \`${normalized.band}\`.`,
122173
+ "Effort is a size band, never a wall-clock estimate. Use exactly one of:",
122174
+ " Quick (single edit, minutes of agent work) | Short (one focused change, a few files)",
122175
+ " | Medium (multi-file feature in one session) | Large (several waves, one long session)",
122176
+ " | XL (multi-session or architectural work).",
122177
+ "Size is communicated by the counted todo rows; do not write hours or days.",
122178
+ "</plan-format-warning>"
122179
+ ].join(`
122180
+ `);
122181
+ }
122127
122182
  function analyzeStructuredSections(content) {
122128
122183
  const lines = content.split(/\r?\n/);
122129
122184
  const sections = [];
@@ -122240,7 +122295,17 @@ function createPlanFormatValidatorHook(_ctx) {
122240
122295
  const resolvedPath = resolve24(_ctx.directory, filePath);
122241
122296
  if (!existsSync83(resolvedPath))
122242
122297
  return;
122243
- const content = readFileSync56(resolvedPath, "utf-8");
122298
+ let content = readFileSync56(resolvedPath, "utf-8");
122299
+ const effort = normalizePlanEffort(content);
122300
+ if (effort !== null) {
122301
+ content = effort.content;
122302
+ writeFileSync21(resolvedPath, content, "utf-8");
122303
+ log2(`[plan-format-validator] Plan ${filePath}: Effort "${effort.original}" normalized to ${effort.band}`, {
122304
+ sessionID: input.sessionID,
122305
+ filePath
122306
+ });
122307
+ output.output = `${output.output}${buildEffortWarning(effort)}`;
122308
+ }
122244
122309
  const formatStats = analyzeStructuredSections(content);
122245
122310
  if (!formatStats.recognized)
122246
122311
  return;
@@ -127067,7 +127132,7 @@ import { pathToFileURL } from "url";
127067
127132
 
127068
127133
  // packages/omo-opencode/src/tools/look-at/image-converter.ts
127069
127134
  import * as childProcess2 from "child_process";
127070
- import { existsSync as existsSync93, mkdtempSync, readFileSync as readFileSync60, rmSync as rmSync5, unlinkSync as unlinkSync15, writeFileSync as writeFileSync21 } from "fs";
127135
+ import { existsSync as existsSync93, mkdtempSync, readFileSync as readFileSync60, rmSync as rmSync5, unlinkSync as unlinkSync15, writeFileSync as writeFileSync22 } from "fs";
127071
127136
  import { tmpdir as tmpdir7 } from "os";
127072
127137
  import { dirname as dirname41, join as join112 } from "path";
127073
127138
  var SUPPORTED_FORMATS = new Set([
@@ -127192,7 +127257,7 @@ function convertBase64ImageToJpeg(base64Data, mimeType) {
127192
127257
  try {
127193
127258
  const cleanBase64 = base64Data.replace(/^data:[^;]+;base64,/, "");
127194
127259
  const buffer = Buffer.from(cleanBase64, "base64");
127195
- writeFileSync21(inputPath, buffer);
127260
+ writeFileSync22(inputPath, buffer);
127196
127261
  log2(`[image-converter] Converting Base64 ${mimeType} to JPEG`);
127197
127262
  const outputPath = convertImageToJpeg(inputPath, mimeType);
127198
127263
  tempFiles.push(outputPath);
@@ -131513,7 +131578,7 @@ var TaskDeleteInputSchema = z54.object({
131513
131578
 
131514
131579
  // packages/omo-opencode/src/features/claude-tasks/storage.ts
131515
131580
  import { join as join113, dirname as dirname42, basename as basename18, isAbsolute as isAbsolute17 } from "path";
131516
- import { existsSync as existsSync94, mkdirSync as mkdirSync20, readFileSync as readFileSync62, writeFileSync as writeFileSync22, renameSync as renameSync8, unlinkSync as unlinkSync16, readdirSync as readdirSync25 } from "fs";
131581
+ import { existsSync as existsSync94, mkdirSync as mkdirSync20, readFileSync as readFileSync62, writeFileSync as writeFileSync23, renameSync as renameSync8, unlinkSync as unlinkSync16, readdirSync as readdirSync25 } from "fs";
131517
131582
  import { randomUUID as randomUUID9 } from "crypto";
131518
131583
  function ignoreClaudeTaskStorageError(error) {
131519
131584
  if (error instanceof Error)
@@ -131572,7 +131637,7 @@ function writeJsonAtomic(filePath, data) {
131572
131637
  ensureDir(dir);
131573
131638
  const tempPath = `${filePath}.tmp.${Date.now()}`;
131574
131639
  try {
131575
- writeFileSync22(tempPath, JSON.stringify(data, null, 2), "utf-8");
131640
+ writeFileSync23(tempPath, JSON.stringify(data, null, 2), "utf-8");
131576
131641
  renameSync8(tempPath, filePath);
131577
131642
  } catch (error) {
131578
131643
  try {
@@ -131612,7 +131677,7 @@ async function acquireLock2(dirPath, options = {}) {
131612
131677
  const waitTimeoutMs = options.waitTimeoutMs ?? resolveLockWaitTimeoutMs();
131613
131678
  const baseRetryDelayMs = options.retryDelayMs ?? DEFAULT_LOCK_RETRY_DELAY_MS;
131614
131679
  const createLock = (timestamp) => {
131615
- writeFileSync22(lockPath, JSON.stringify({ id: lockId, timestamp }), {
131680
+ writeFileSync23(lockPath, JSON.stringify({ id: lockId, timestamp }), {
131616
131681
  encoding: "utf-8",
131617
131682
  flag: "wx"
131618
131683
  });
@@ -140781,7 +140846,7 @@ import {
140781
140846
  readFileSync as readFileSync65,
140782
140847
  renameSync as renameSync10,
140783
140848
  unlinkSync as unlinkSync17,
140784
- writeFileSync as writeFileSync24
140849
+ writeFileSync as writeFileSync25
140785
140850
  } from "fs";
140786
140851
  import { basename as basename19, dirname as dirname43, join as join122 } from "path";
140787
140852
 
@@ -140811,7 +140876,7 @@ function getOpenCodeCliConfigDir(env = process.env) {
140811
140876
  }
140812
140877
 
140813
140878
  // packages/mcp-client-core/src/mcp-oauth/storage-index.ts
140814
- import { chmodSync as chmodSync3, existsSync as existsSync97, readFileSync as readFileSync64, renameSync as renameSync9, writeFileSync as writeFileSync23 } from "fs";
140879
+ import { chmodSync as chmodSync3, existsSync as existsSync97, readFileSync as readFileSync64, renameSync as renameSync9, writeFileSync as writeFileSync24 } from "fs";
140815
140880
  import { join as join121 } from "path";
140816
140881
  var INDEX_FILE_NAME = "index.json";
140817
140882
  function isTokenIndex(value) {
@@ -140839,7 +140904,7 @@ function writeTokenIndex(storageDir, index) {
140839
140904
  try {
140840
140905
  const indexPath = getIndexPath(storageDir);
140841
140906
  const tempPath = `${indexPath}.tmp.${Date.now()}`;
140842
- writeFileSync23(tempPath, JSON.stringify(index, null, 2), { encoding: "utf-8", mode: 384 });
140907
+ writeFileSync24(tempPath, JSON.stringify(index, null, 2), { encoding: "utf-8", mode: 384 });
140843
140908
  chmodSync3(tempPath, 384);
140844
140909
  renameSync9(tempPath, indexPath);
140845
140910
  return true;
@@ -140965,7 +141030,7 @@ function writeTokenFile(filePath, token) {
140965
141030
  mkdirSync21(dir, { recursive: true });
140966
141031
  }
140967
141032
  const tempPath = `${filePath}.tmp.${Date.now()}`;
140968
- writeFileSync24(tempPath, JSON.stringify(token, null, 2), { encoding: "utf-8", mode: 384 });
141033
+ writeFileSync25(tempPath, JSON.stringify(token, null, 2), { encoding: "utf-8", mode: 384 });
140969
141034
  chmodSync4(tempPath, 384);
140970
141035
  renameSync10(tempPath, filePath);
140971
141036
  return true;
@@ -149357,7 +149422,7 @@ import {
149357
149422
  renameSync as renameSync11,
149358
149423
  statSync as statSync14,
149359
149424
  unlinkSync as unlinkSync18,
149360
- writeFileSync as writeFileSync25
149425
+ writeFileSync as writeFileSync26
149361
149426
  } from "fs";
149362
149427
 
149363
149428
  // packages/openclaw-core/src/reply-listener-paths.ts
@@ -149399,7 +149464,7 @@ function ignoreReplyListenerLogError(error) {
149399
149464
  }
149400
149465
  function writeSecureReplyListenerFile(filePath, content) {
149401
149466
  ensureReplyListenerStateDir();
149402
- writeFileSync25(filePath, content, { mode: REPLY_LISTENER_SECURE_FILE_MODE });
149467
+ writeFileSync26(filePath, content, { mode: REPLY_LISTENER_SECURE_FILE_MODE });
149403
149468
  try {
149404
149469
  chmodSync5(filePath, REPLY_LISTENER_SECURE_FILE_MODE);
149405
149470
  } catch (error) {
@@ -149475,7 +149540,7 @@ import { constants as constants23, closeSync as closeSync4, existsSync as exists
149475
149540
  import { randomUUID as randomUUID12 } from "crypto";
149476
149541
 
149477
149542
  // packages/openclaw-core/src/session-registry-storage.ts
149478
- import { existsSync as existsSync101, mkdirSync as mkdirSync24, readFileSync as readFileSync68, writeFileSync as writeFileSync26 } from "fs";
149543
+ import { existsSync as existsSync101, mkdirSync as mkdirSync24, readFileSync as readFileSync68, writeFileSync as writeFileSync27 } from "fs";
149479
149544
  import { dirname as dirname45 } from "path";
149480
149545
  function isSessionMapping(value) {
149481
149546
  if (typeof value !== "object" || value === null)
@@ -149529,13 +149594,13 @@ function rewriteRegistryUnsafe(mappings) {
149529
149594
  ensureRegistryDir();
149530
149595
  const registryPath = getRegistryPath();
149531
149596
  if (mappings.length === 0) {
149532
- writeFileSync26(registryPath, "", { mode: SECURE_FILE_MODE });
149597
+ writeFileSync27(registryPath, "", { mode: SECURE_FILE_MODE });
149533
149598
  return;
149534
149599
  }
149535
149600
  const content = mappings.map((mapping) => JSON.stringify(mapping)).join(`
149536
149601
  `) + `
149537
149602
  `;
149538
- writeFileSync26(registryPath, content, { mode: SECURE_FILE_MODE });
149603
+ writeFileSync27(registryPath, content, { mode: SECURE_FILE_MODE });
149539
149604
  }
149540
149605
 
149541
149606
  // packages/openclaw-core/src/session-registry-lock.ts
@@ -172376,9 +172441,7 @@ async function ackMessages(teamRunId, memberName, messageIds, config) {
172376
172441
  }
172377
172442
  // packages/omo-opencode/src/hooks/team-session-events/team-idle-wake-hint.ts
172378
172443
  init_store2();
172379
-
172380
172444
  // packages/team-core/src/team-mailbox/pending-delivery-recovery.ts
172381
- init_src();
172382
172445
  function getMessagesData2(response) {
172383
172446
  if (isRecord(response) && Array.isArray(response.data)) {
172384
172447
  return response.data;
@@ -174180,7 +174243,7 @@ var OMO_CODEX_PLUGIN_CACHE_PUBLISHERS = new Set(["sisyphuslabs"]);
174180
174243
  import { join as join135 } from "path";
174181
174244
 
174182
174245
  // packages/utils/src/process-sweep/family-sweeper.ts
174183
- import { existsSync as existsSync109, mkdirSync as mkdirSync25, statSync as statSync16, utimesSync, writeFileSync as writeFileSync27 } from "fs";
174246
+ import { existsSync as existsSync109, mkdirSync as mkdirSync25, statSync as statSync16, utimesSync, writeFileSync as writeFileSync28 } from "fs";
174184
174247
  import { dirname as dirname48 } from "path";
174185
174248
  var DEFAULT_GRACE_MS = 2000;
174186
174249
  var DEFAULT_THROTTLE_MS = 60 * 60 * 1000;
@@ -174278,7 +174341,7 @@ function isSweepThrottled(stampFile, nowMs, throttleMs) {
174278
174341
  }
174279
174342
  function writeSweepStamp(stampFile, nowMs) {
174280
174343
  mkdirSync25(dirname48(stampFile), { recursive: true });
174281
- writeFileSync27(stampFile, `${new Date(nowMs).toISOString()}
174344
+ writeFileSync28(stampFile, `${new Date(nowMs).toISOString()}
174282
174345
  `);
174283
174346
  const stampDate = new Date(nowMs);
174284
174347
  utimesSync(stampFile, stampDate, stampDate);
@@ -9671,14 +9671,14 @@
9671
9671
  },
9672
9672
  "git_master": {
9673
9673
  "default": {
9674
- "commit_footer": true,
9675
- "include_co_authored_by": true,
9674
+ "commit_footer": false,
9675
+ "include_co_authored_by": false,
9676
9676
  "git_env_prefix": "GIT_MASTER=1"
9677
9677
  },
9678
9678
  "type": "object",
9679
9679
  "properties": {
9680
9680
  "commit_footer": {
9681
- "default": true,
9681
+ "default": false,
9682
9682
  "anyOf": [
9683
9683
  {
9684
9684
  "type": "boolean"
@@ -9689,7 +9689,7 @@
9689
9689
  ]
9690
9690
  },
9691
9691
  "include_co_authored_by": {
9692
- "default": true,
9692
+ "default": false,
9693
9693
  "type": "boolean"
9694
9694
  },
9695
9695
  "git_env_prefix": {
@@ -146,6 +146,7 @@ No Metis, no plan file, no execution until the user approves. The UNCLEAR path a
146
146
  # <slug> - Work Plan
147
147
  ## TL;DR (For humans)
148
148
  (What you'll get / Why this approach / What it will NOT do / Effort / Risk / Decisions)
149
+ > Effort is exactly one band - Quick (single edit, minutes of agent work), Short (one focused change, a few files), Medium (multi-file feature in one session), Large (several waves, one long session), XL (multi-session or architectural work). NEVER write hours or days: the counted todo rows are the size signal, and a written duration is rewritten to a band before the user sees the plan.
149
150
  ## Scope
150
151
  ## Verification strategy
151
152
  ## Execution strategy
@@ -238,6 +238,7 @@ export function buildPlanSkeleton(slug, intent) {
238
238
  **What it will NOT do:** <fill last - 1-3 plain lines mirroring Must NOT have>
239
239
 
240
240
  **Effort:** <Quick | Short | Medium | Large | XL>
241
+ <!-- Effort is exactly ONE band, never hours/days. Quick = single edit, minutes of agent work; Short = one focused change, a few files; Medium = multi-file feature in one session; Large = several waves, one long session; XL = multi-session or architectural work. A written duration is rewritten to a band. -->
241
242
  **Risk:** <Low | Medium | High> - <one-line driver>
242
243
  ${decisionsLine}
243
244
 
package/dist/tui.js CHANGED
@@ -68008,8 +68008,8 @@ var init_git_master = __esm(() => {
68008
68008
  };
68009
68009
  OmoGitMasterSettingsLayerSchema = object(OmoGitMasterSettingsShape).partial().strict();
68010
68010
  OmoGitMasterSettingsSchema = OmoGitMasterSettingsLayerSchema.extend({
68011
- commit_footer: union([boolean2(), string2()]).default(true),
68012
- include_co_authored_by: boolean2().default(true)
68011
+ commit_footer: union([boolean2(), string2()]).default(false),
68012
+ include_co_authored_by: boolean2().default(false)
68013
68013
  }).strict();
68014
68014
  });
68015
68015
 
@@ -68446,7 +68446,7 @@ var init_format_on_mutation = __esm(() => {
68446
68446
  });
68447
68447
 
68448
68448
  // packages/omo-config-core/src/schema/config.ts
68449
- var OmoOpenCodeHarnessConfigSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
68449
+ var OmoOpenCodeHarnessConfigSchema, OmoDisabledSkillsSchema, OmoTypedHarnessConfigSchema, OmoConfigProfileSchema, OmoConfigSchema, OmoConfigLayerSchema;
68450
68450
  var init_config = __esm(() => {
68451
68451
  init_zod();
68452
68452
  init_agent();
@@ -68460,6 +68460,7 @@ var init_config = __esm(() => {
68460
68460
  init_telemetry();
68461
68461
  init_format_on_mutation();
68462
68462
  OmoOpenCodeHarnessConfigSchema = record(string2(), unknown());
68463
+ OmoDisabledSkillsSchema = array(string2());
68463
68464
  OmoTypedHarnessConfigSchema = object({
68464
68465
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
68465
68466
  categories: OmoCategoriesConfigSchema.optional(),
@@ -68471,7 +68472,8 @@ var init_config = __esm(() => {
68471
68472
  model_profiles: OmoModelProfilesLayerSchema.optional(),
68472
68473
  model_profile: string2().optional(),
68473
68474
  memory: OmoMemorySettingsLayerSchema.optional(),
68474
- telemetry: OmoTelemetrySettingsLayerSchema.optional()
68475
+ telemetry: OmoTelemetrySettingsLayerSchema.optional(),
68476
+ disabled_skills: OmoDisabledSkillsSchema.optional()
68475
68477
  }).strict();
68476
68478
  OmoConfigProfileSchema = object({
68477
68479
  formatOnMutation: OmoFormatOnMutationLayerSchema.optional(),
@@ -68485,6 +68487,7 @@ var init_config = __esm(() => {
68485
68487
  model_profile: string2().optional(),
68486
68488
  memory: OmoMemorySettingsLayerSchema.optional(),
68487
68489
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
68490
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
68488
68491
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
68489
68492
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
68490
68493
  "[codex]": OmoTypedHarnessConfigSchema.optional()
@@ -68502,6 +68505,7 @@ var init_config = __esm(() => {
68502
68505
  model_profile: string2().optional(),
68503
68506
  memory: OmoMemorySettingsSchema.optional(),
68504
68507
  telemetry: OmoTelemetrySettingsSchema.optional(),
68508
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
68505
68509
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
68506
68510
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
68507
68511
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -68522,6 +68526,7 @@ var init_config = __esm(() => {
68522
68526
  model_profile: string2().optional(),
68523
68527
  memory: OmoMemorySettingsLayerSchema.optional(),
68524
68528
  telemetry: OmoTelemetrySettingsLayerSchema.optional(),
68529
+ disabled_skills: OmoDisabledSkillsSchema.optional(),
68525
68530
  "[opencode]": OmoOpenCodeHarnessConfigSchema.optional(),
68526
68531
  "[senpi]": OmoTypedHarnessConfigSchema.optional(),
68527
68532
  "[codex]": OmoTypedHarnessConfigSchema.optional(),
@@ -69891,8 +69896,8 @@ var init_git_master2 = __esm(() => {
69891
69896
  init_zod();
69892
69897
  init_git_env_prefix2();
69893
69898
  GitMasterConfigSchema = object({
69894
- commit_footer: union([boolean2(), string2()]).default(true),
69895
- include_co_authored_by: boolean2().default(true),
69899
+ commit_footer: union([boolean2(), string2()]).default(false),
69900
+ include_co_authored_by: boolean2().default(false),
69896
69901
  git_env_prefix: GitEnvPrefixSchema
69897
69902
  });
69898
69903
  });
@@ -70295,8 +70300,8 @@ var init_oh_my_opencode_config = __esm(() => {
70295
70300
  keyword_detector: KeywordDetectorConfigSchema.optional(),
70296
70301
  babysitting: BabysittingConfigSchema.optional(),
70297
70302
  git_master: GitMasterConfigSchema.default({
70298
- commit_footer: true,
70299
- include_co_authored_by: true,
70303
+ commit_footer: false,
70304
+ include_co_authored_by: false,
70300
70305
  git_env_prefix: "GIT_MASTER=1"
70301
70306
  }),
70302
70307
  browser_automation_engine: BrowserAutomationConfigSchema.optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode",
3
- "version": "5.0.0-beta.63",
3
+ "version": "5.0.0-beta.65",
4
4
  "description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
5
5
  "main": "./dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -182,7 +182,7 @@
182
182
  "zod": "^4.4.3"
183
183
  },
184
184
  "devDependencies": {
185
- "@code-yeongyu/senpi": "2026.9.15-2",
185
+ "@code-yeongyu/senpi": "2026.9.16",
186
186
  "@oh-my-opencode/agents-md-core": "workspace:*",
187
187
  "@oh-my-opencode/ast-grep-mcp": "workspace:*",
188
188
  "@oh-my-opencode/boulder-state": "workspace:*",
@@ -221,18 +221,18 @@
221
221
  "typescript": "^7.0.2"
222
222
  },
223
223
  "optionalDependencies": {
224
- "oh-my-opencode-darwin-arm64": "5.0.0-beta.63",
225
- "oh-my-opencode-darwin-x64": "5.0.0-beta.63",
226
- "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.63",
227
- "oh-my-opencode-linux-arm64": "5.0.0-beta.63",
228
- "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.63",
229
- "oh-my-opencode-linux-x64": "5.0.0-beta.63",
230
- "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.63",
231
- "oh-my-opencode-linux-x64-musl": "5.0.0-beta.63",
232
- "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.63",
233
- "oh-my-opencode-windows-arm64": "5.0.0-beta.63",
234
- "oh-my-opencode-windows-x64": "5.0.0-beta.63",
235
- "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.63"
224
+ "oh-my-opencode-darwin-arm64": "5.0.0-beta.65",
225
+ "oh-my-opencode-darwin-x64": "5.0.0-beta.65",
226
+ "oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.65",
227
+ "oh-my-opencode-linux-arm64": "5.0.0-beta.65",
228
+ "oh-my-opencode-linux-arm64-musl": "5.0.0-beta.65",
229
+ "oh-my-opencode-linux-x64": "5.0.0-beta.65",
230
+ "oh-my-opencode-linux-x64-baseline": "5.0.0-beta.65",
231
+ "oh-my-opencode-linux-x64-musl": "5.0.0-beta.65",
232
+ "oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.65",
233
+ "oh-my-opencode-windows-arm64": "5.0.0-beta.65",
234
+ "oh-my-opencode-windows-x64": "5.0.0-beta.65",
235
+ "oh-my-opencode-windows-x64-baseline": "5.0.0-beta.65"
236
236
  },
237
237
  "overrides": {
238
238
  "@earendil-works/pi-agent-core": "0.84.2",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "omo",
3
- "version": "5.0.0-beta.63",
3
+ "version": "5.0.0-beta.65",
4
4
  "description": "One Codex plugin namespace for Yeongyu's local Codex components.",
5
5
  "author": {
6
6
  "name": "Yeongyu Kim",