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.
- package/dist/cli/index.js +28 -23
- package/dist/cli-node/index.js +28 -23
- package/dist/hooks/plan-format-validator/hook.d.ts +19 -0
- package/dist/index.js +149 -86
- package/dist/oh-my-opencode.schema.json +4 -4
- package/dist/skills/ulw-plan/references/full-workflow.md +1 -0
- package/dist/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
- package/dist/tui.js +13 -8
- package/package.json +14 -14
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +8 -3
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.d.ts +7 -5
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint-codex-validation.js +7 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/checkpoint.js +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/cli.js +364 -135
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.d.ts +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/codex-goal-snapshot.js +20 -12
- package/packages/omo-codex/plugin/components/ulw-loop/dist/domain-types.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.d.ts +4 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/driver-objective-ack.js +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence-artifacts.js +37 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/evidence.js +8 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.d.ts +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/paths.js +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.d.ts +4 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-crud.js +6 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.d.ts +10 -3
- package/packages/omo-codex/plugin/components/ulw-loop/dist/plan-goal-factory.js +38 -31
- package/packages/omo-codex/plugin/components/ulw-loop/dist/review-blockers.js +8 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/factory.js +17 -8
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.d.ts +335 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/manifest.js +109 -10
- package/packages/omo-codex/plugin/components/ulw-loop/dist/sdk/types.d.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.d.ts +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-mutations.js +4 -4
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering-types.d.ts +9 -1
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.d.ts +3 -2
- package/packages/omo-codex/plugin/components/ulw-loop/dist/steering.js +6 -6
- package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.d.ts +9 -0
- package/packages/omo-codex/plugin/components/ulw-loop/dist/success-criteria-input.js +41 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint-codex-validation.ts +15 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +2 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +26 -14
- package/packages/omo-codex/plugin/components/ulw-loop/src/domain-types.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/driver-objective-ack.ts +20 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/evidence-artifacts.ts +45 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +9 -3
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-goal-factory.ts +63 -31
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +8 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/factory.ts +17 -7
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/manifest.ts +124 -10
- package/packages/omo-codex/plugin/components/ulw-loop/src/sdk/types.ts +3 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-mutations.ts +5 -4
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering-types.ts +13 -1
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +7 -6
- package/packages/omo-codex/plugin/components/ulw-loop/src/success-criteria-input.ts +56 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +37 -1
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-driver-states.test.ts +33 -4
- package/packages/omo-codex/plugin/components/ulw-loop/test/sdk-dx.test.ts +219 -0
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/ulw-plan/scripts/scaffold-plan.mjs +1 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +10 -5
- package/packages/shared-skills/skills/ulw-plan/references/full-workflow.md +1 -0
- 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(
|
|
22707
|
-
include_co_authored_by: z5.boolean().default(
|
|
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(
|
|
25214
|
-
include_co_authored_by: z31.boolean().default(
|
|
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:
|
|
25522
|
-
include_co_authored_by:
|
|
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.
|
|
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.
|
|
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.
|
|
96736
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
96737
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
96738
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
96739
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
96740
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
96741
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
96742
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
96743
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
96744
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
96745
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
96746
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
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 ??
|
|
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
|
|
109155
|
-
const injection = buildCommitFooterInjection(commitFooter,
|
|
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,
|
|
109220
|
-
const sections = [];
|
|
109222
|
+
function buildCommitFooterInjection(commitFooter, gitEnvPrefix) {
|
|
109221
109223
|
const cmdPrefix = gitEnvPrefix ? `${gitEnvPrefix} ` : "";
|
|
109222
|
-
|
|
109223
|
-
|
|
109224
|
-
|
|
109225
|
-
|
|
109226
|
-
|
|
109227
|
-
|
|
109228
|
-
|
|
109229
|
-
|
|
109230
|
-
|
|
109231
|
-
|
|
109232
|
-
|
|
109233
|
-
|
|
109234
|
-
|
|
109235
|
-
|
|
109236
|
-
|
|
109237
|
-
|
|
109238
|
-
|
|
109239
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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":
|
|
9675
|
-
"include_co_authored_by":
|
|
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":
|
|
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":
|
|
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(
|
|
68012
|
-
include_co_authored_by: boolean2().default(
|
|
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(
|
|
69895
|
-
include_co_authored_by: boolean2().default(
|
|
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:
|
|
70299
|
-
include_co_authored_by:
|
|
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.
|
|
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.
|
|
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.
|
|
225
|
-
"oh-my-opencode-darwin-x64": "5.0.0-beta.
|
|
226
|
-
"oh-my-opencode-darwin-x64-baseline": "5.0.0-beta.
|
|
227
|
-
"oh-my-opencode-linux-arm64": "5.0.0-beta.
|
|
228
|
-
"oh-my-opencode-linux-arm64-musl": "5.0.0-beta.
|
|
229
|
-
"oh-my-opencode-linux-x64": "5.0.0-beta.
|
|
230
|
-
"oh-my-opencode-linux-x64-baseline": "5.0.0-beta.
|
|
231
|
-
"oh-my-opencode-linux-x64-musl": "5.0.0-beta.
|
|
232
|
-
"oh-my-opencode-linux-x64-musl-baseline": "5.0.0-beta.
|
|
233
|
-
"oh-my-opencode-windows-arm64": "5.0.0-beta.
|
|
234
|
-
"oh-my-opencode-windows-x64": "5.0.0-beta.
|
|
235
|
-
"oh-my-opencode-windows-x64-baseline": "5.0.0-beta.
|
|
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",
|