opencode-matrixx 1.0.3 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -7
- package/dist/agents/architect/default.d.ts +1 -1
- package/dist/agents/architect/gpt.d.ts +1 -1
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/mouse/agent.d.ts +1 -1
- package/dist/agents/oracle/behavioral-summary.d.ts +1 -1
- package/dist/agents/oracle/high-accuracy-mode.d.ts +1 -1
- package/dist/agents/oracle/identity-constraints.d.ts +1 -1
- package/dist/agents/oracle/interview-mode.d.ts +1 -1
- package/dist/agents/oracle/plan-generation.d.ts +1 -1
- package/dist/agents/oracle/plan-template.d.ts +1 -1
- package/dist/agents/oracle/system-prompt.d.ts +1 -1
- package/dist/agents/smith.d.ts +1 -1
- package/dist/agents/types.d.ts +1 -1
- package/dist/agents/zion.d.ts +7 -0
- package/dist/cli/doctor/constants.d.ts +2 -0
- package/dist/cli/index.js +734 -183
- package/dist/config/index.d.ts +2 -2
- package/dist/config/schema/agent-definitions.d.ts +4 -0
- package/dist/config/schema/agent-names.d.ts +7 -0
- package/dist/config/schema/categories.d.ts +2 -0
- package/dist/config/schema/hooks.d.ts +6 -0
- package/dist/config/schema/matrixx-config.d.ts +30 -0
- package/dist/config/schema/model-capabilities.d.ts +8 -0
- package/dist/config/schema/runtime-fallback.d.ts +10 -0
- package/dist/config/schema/tdd-enforcer.d.ts +5 -0
- package/dist/config/schema.d.ts +4 -0
- package/dist/create-hooks.d.ts +6 -0
- package/dist/features/builtin-commands/templates/handoff.d.ts +1 -1
- package/dist/features/builtin-commands/templates/pickup.d.ts +1 -1
- package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
- package/dist/features/builtin-skills/skills/crypto-market-analysis.d.ts +4 -0
- package/dist/features/builtin-skills/skills/crypto-onchain.d.ts +4 -0
- package/dist/features/builtin-skills/skills/crypto-trading.d.ts +4 -0
- package/dist/features/builtin-skills/skills/index.d.ts +5 -0
- package/dist/features/builtin-skills/skills/review-work.d.ts +4 -0
- package/dist/features/builtin-skills/skills/tdd-enforcer.d.ts +4 -0
- package/dist/features/mission-state/constants.d.ts +4 -4
- package/dist/features/mission-state/storage.d.ts +1 -1
- package/dist/features/run-continuation-state/constants.d.ts +1 -0
- package/dist/features/run-continuation-state/index.d.ts +3 -0
- package/dist/features/run-continuation-state/storage.d.ts +6 -0
- package/dist/features/run-continuation-state/types.d.ts +12 -0
- package/dist/features/team-mode/index.d.ts +2 -0
- package/dist/features/team-mode/team-layout-tmux/index.d.ts +1 -0
- package/dist/features/team-mode/team-layout-tmux/layout.d.ts +15 -0
- package/dist/features/team-mode/team-worktree/cleanup.d.ts +3 -0
- package/dist/features/team-mode/team-worktree/index.d.ts +2 -0
- package/dist/features/team-mode/team-worktree/manager.d.ts +15 -0
- package/dist/features/team-mode/types.d.ts +210 -0
- package/dist/hooks/auto-update-checker/constants.d.ts +3 -2
- package/dist/hooks/handoff-injector/constants.d.ts +2 -2
- package/dist/hooks/hashline-edit-diff-enhancer/hook.d.ts +28 -0
- package/dist/hooks/hashline-edit-diff-enhancer/index.d.ts +1 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/keyword-detector/ultrawork/planner.d.ts +1 -1
- package/dist/hooks/matrix-loop/constants.d.ts +1 -1
- package/dist/hooks/mouse-notepad/constants.d.ts +1 -1
- package/dist/hooks/preemptive-compaction-degradation-monitor.d.ts +55 -0
- package/dist/hooks/preemptive-compaction-no-text-tail.d.ts +18 -0
- package/dist/hooks/preemptive-compaction-trigger.d.ts +13 -0
- package/dist/hooks/preemptive-compaction-types.d.ts +53 -0
- package/dist/hooks/preemptive-compaction.d.ts +5 -13
- package/dist/hooks/prometheus-md-only/constants.d.ts +1 -1
- package/dist/hooks/prometheus-md-only/path-policy.d.ts +3 -3
- package/dist/hooks/read-image-resizer/hook.d.ts +12 -0
- package/dist/hooks/read-image-resizer/image-dimensions.d.ts +2 -0
- package/dist/hooks/read-image-resizer/image-resizer.d.ts +5 -0
- package/dist/hooks/read-image-resizer/index.d.ts +1 -0
- package/dist/hooks/read-image-resizer/png-fallback-resizer.d.ts +2 -0
- package/dist/hooks/read-image-resizer/types.d.ts +14 -0
- package/dist/hooks/runtime-fallback/agent-resolver.d.ts +6 -0
- package/dist/hooks/runtime-fallback/auto-retry-signal.d.ts +4 -0
- package/dist/hooks/runtime-fallback/auto-retry.d.ts +10 -0
- package/dist/hooks/runtime-fallback/chat-message-handler.d.ts +20 -0
- package/dist/hooks/runtime-fallback/constants.d.ts +4 -0
- package/dist/hooks/runtime-fallback/error-classifier.d.ts +13 -0
- package/dist/hooks/runtime-fallback/event-handler.d.ts +8 -0
- package/dist/hooks/runtime-fallback/fallback-bootstrap-model.d.ts +10 -0
- package/dist/hooks/runtime-fallback/fallback-models.d.ts +2 -0
- package/dist/hooks/runtime-fallback/fallback-retry-dispatcher.d.ts +11 -0
- package/dist/hooks/runtime-fallback/fallback-state.d.ts +6 -0
- package/dist/hooks/runtime-fallback/hook.d.ts +2 -0
- package/dist/hooks/runtime-fallback/index.d.ts +3 -0
- package/dist/hooks/runtime-fallback/is-abort-error.d.ts +1 -0
- package/dist/hooks/runtime-fallback/last-user-retry-parts.d.ts +4 -0
- package/dist/hooks/runtime-fallback/message-update-handler.d.ts +4 -0
- package/dist/hooks/runtime-fallback/model-utils.d.ts +7 -0
- package/dist/hooks/runtime-fallback/retry-model-payload.d.ts +11 -0
- package/dist/hooks/runtime-fallback/retry-status-utils.d.ts +2 -0
- package/dist/hooks/runtime-fallback/session-category-registry.d.ts +6 -0
- package/dist/hooks/runtime-fallback/session-messages.d.ts +9 -0
- package/dist/hooks/runtime-fallback/session-status-handler.d.ts +3 -0
- package/dist/hooks/runtime-fallback/types.d.ts +113 -0
- package/dist/hooks/runtime-fallback/visible-assistant-response.d.ts +3 -0
- package/dist/hooks/shared/compaction-model-resolver.d.ts +5 -0
- package/dist/hooks/todo-description-override/description.d.ts +1 -0
- package/dist/hooks/todo-description-override/hook.d.ts +8 -0
- package/dist/hooks/todo-description-override/index.d.ts +1 -0
- package/dist/hooks/tool-pair-validator/hook.d.ts +28 -0
- package/dist/hooks/tool-pair-validator/index.d.ts +1 -0
- package/dist/hooks/webfetch-redirect-guard/constants.d.ts +6 -0
- package/dist/hooks/webfetch-redirect-guard/hook.d.ts +19 -0
- package/dist/hooks/webfetch-redirect-guard/index.d.ts +1 -0
- package/dist/hooks/webfetch-redirect-guard/redirect-resolution.d.ts +16 -0
- package/dist/index.js +5564 -794
- package/dist/plugin/hooks/create-core-hooks.d.ts +6 -0
- package/dist/plugin/hooks/create-session-hooks.d.ts +2 -1
- package/dist/plugin/hooks/create-tool-guard-hooks.d.ts +5 -1
- package/dist/plugin/hooks/create-transform-hooks.d.ts +2 -1
- package/dist/plugin/tool-definition.d.ts +9 -0
- package/dist/shared/context-limit-resolver.d.ts +5 -0
- package/dist/shared/session-model-state.d.ts +7 -0
- package/dist/shared/tmux/tmux-utils/spawn-process.d.ts +1 -0
- package/dist/tools/ast-grep/pattern-hints.d.ts +4 -0
- package/dist/tools/ast-grep/tool-descriptions.d.ts +3 -0
- package/dist/tools/delegate-task/constants.d.ts +2 -3
- package/dist/tools/delegate-task/prompt-builder.d.ts +1 -0
- package/package.json +10 -10
package/dist/cli/index.js
CHANGED
|
@@ -1019,7 +1019,7 @@ Expecting one of '${allowedValues.join("', '")}'`);
|
|
|
1019
1019
|
this._exitCallback = (err) => {
|
|
1020
1020
|
if (err.code !== "commander.executeSubCommandAsync") {
|
|
1021
1021
|
throw err;
|
|
1022
|
-
}
|
|
1022
|
+
}
|
|
1023
1023
|
};
|
|
1024
1024
|
}
|
|
1025
1025
|
return this;
|
|
@@ -6775,158 +6775,136 @@ var init_model_requirements = __esm(() => {
|
|
|
6775
6775
|
morpheus: {
|
|
6776
6776
|
fallbackChain: [
|
|
6777
6777
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6778
|
-
{ providers: ["
|
|
6779
|
-
{ providers: ["opencode"], model: "big-pickle" }
|
|
6778
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6780
6779
|
],
|
|
6781
6780
|
requiresAnyModel: true
|
|
6782
6781
|
},
|
|
6783
6782
|
keymaker: {
|
|
6784
6783
|
fallbackChain: [
|
|
6785
|
-
{ providers: ["
|
|
6786
|
-
{ providers: ["github-copilot"
|
|
6787
|
-
]
|
|
6788
|
-
requiresProvider: ["openai", "github-copilot", "venice", "opencode"]
|
|
6784
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6785
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6786
|
+
]
|
|
6789
6787
|
},
|
|
6790
6788
|
merovingian: {
|
|
6791
6789
|
fallbackChain: [
|
|
6792
|
-
{ providers: ["
|
|
6793
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" },
|
|
6790
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6794
6791
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6795
6792
|
]
|
|
6796
6793
|
},
|
|
6797
6794
|
operator: {
|
|
6798
6795
|
fallbackChain: [
|
|
6799
|
-
{ providers: ["opencode"], model: "
|
|
6800
|
-
{ providers: ["opencode"], model: "minimax-m2.5-free" },
|
|
6796
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" },
|
|
6801
6797
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6802
6798
|
]
|
|
6803
6799
|
},
|
|
6804
6800
|
trinity: {
|
|
6805
6801
|
fallbackChain: [
|
|
6806
|
-
{ providers: ["github-copilot"], model: "
|
|
6807
|
-
{ providers: ["opencode"], model: "
|
|
6808
|
-
{ providers: ["anthropic", "opencode"], model: "claude-haiku-4-5" },
|
|
6809
|
-
{ providers: ["opencode"], model: "gpt-5-nano" }
|
|
6802
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" },
|
|
6803
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6810
6804
|
]
|
|
6811
6805
|
},
|
|
6812
6806
|
construct: {
|
|
6813
6807
|
fallbackChain: [
|
|
6814
|
-
{ providers: ["
|
|
6815
|
-
{ providers: ["
|
|
6816
|
-
{ providers: ["zai-coding-plan"], model: "glm-4.6v" },
|
|
6817
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5-nano" }
|
|
6808
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6809
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6818
6810
|
]
|
|
6819
6811
|
},
|
|
6820
6812
|
oracle: {
|
|
6821
6813
|
fallbackChain: [
|
|
6822
6814
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6823
|
-
{ providers: ["
|
|
6824
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
|
6825
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }
|
|
6815
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6826
6816
|
]
|
|
6827
6817
|
},
|
|
6828
6818
|
seraph: {
|
|
6829
6819
|
fallbackChain: [
|
|
6830
6820
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6831
|
-
{ providers: ["
|
|
6832
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" }
|
|
6821
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6833
6822
|
]
|
|
6834
6823
|
},
|
|
6835
6824
|
smith: {
|
|
6836
6825
|
fallbackChain: [
|
|
6837
|
-
{ providers: ["
|
|
6838
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6839
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro", variant: "high" }
|
|
6826
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6827
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6840
6828
|
]
|
|
6841
6829
|
},
|
|
6842
6830
|
architect: {
|
|
6843
6831
|
fallbackChain: [
|
|
6844
6832
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6845
|
-
{ providers: ["
|
|
6833
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" }
|
|
6846
6834
|
]
|
|
6847
6835
|
},
|
|
6848
6836
|
cipher: {
|
|
6849
6837
|
fallbackChain: [
|
|
6850
6838
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6851
|
-
{ providers: ["
|
|
6852
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
|
6853
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }
|
|
6839
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6854
6840
|
]
|
|
6855
6841
|
},
|
|
6856
6842
|
niobe: {
|
|
6857
6843
|
fallbackChain: [
|
|
6858
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-
|
|
6859
|
-
{ providers: ["
|
|
6860
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.2", variant: "high" },
|
|
6861
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }
|
|
6844
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6845
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6862
6846
|
]
|
|
6863
6847
|
},
|
|
6864
6848
|
sentinel: {
|
|
6865
6849
|
fallbackChain: [
|
|
6866
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-
|
|
6867
|
-
{ providers: ["
|
|
6868
|
-
|
|
6869
|
-
|
|
6850
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6851
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6852
|
+
]
|
|
6853
|
+
},
|
|
6854
|
+
zion: {
|
|
6855
|
+
fallbackChain: [
|
|
6856
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6857
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6870
6858
|
]
|
|
6871
6859
|
}
|
|
6872
6860
|
};
|
|
6873
6861
|
CATEGORY_MODEL_REQUIREMENTS = {
|
|
6874
6862
|
construct: {
|
|
6875
6863
|
fallbackChain: [
|
|
6876
|
-
{ providers: ["
|
|
6877
|
-
{ providers: ["zai-coding-plan", "opencode"], model: "glm-5" },
|
|
6864
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6878
6865
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6879
6866
|
]
|
|
6880
6867
|
},
|
|
6881
6868
|
source: {
|
|
6882
6869
|
fallbackChain: [
|
|
6883
|
-
{ providers: ["
|
|
6884
|
-
{ providers: ["
|
|
6885
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6870
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6871
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6886
6872
|
]
|
|
6887
6873
|
},
|
|
6888
6874
|
"deep-jack": {
|
|
6889
6875
|
fallbackChain: [
|
|
6890
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.3-codex", variant: "medium" },
|
|
6891
6876
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6892
|
-
{ providers: ["
|
|
6893
|
-
]
|
|
6894
|
-
requiresModel: "gpt-5.3-codex"
|
|
6877
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6878
|
+
]
|
|
6895
6879
|
},
|
|
6896
6880
|
"matrix-bend": {
|
|
6897
6881
|
fallbackChain: [
|
|
6898
|
-
{ providers: ["
|
|
6899
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6900
|
-
|
|
6901
|
-
],
|
|
6902
|
-
requiresModel: "gemini-3.1-pro"
|
|
6882
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6883
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" }
|
|
6884
|
+
]
|
|
6903
6885
|
},
|
|
6904
6886
|
"bullet-time": {
|
|
6905
6887
|
fallbackChain: [
|
|
6906
|
-
{ providers: ["openai", "github-copilot", "opencode"], model: "gpt-5.4-mini" },
|
|
6907
6888
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" },
|
|
6908
|
-
{ providers: ["
|
|
6909
|
-
{ providers: ["opencode"], model: "gpt-5-nano" }
|
|
6889
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6910
6890
|
]
|
|
6911
6891
|
},
|
|
6912
6892
|
"blue-pill": {
|
|
6913
6893
|
fallbackChain: [
|
|
6914
6894
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6915
|
-
{ providers: ["
|
|
6916
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3-flash" }
|
|
6895
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" }
|
|
6917
6896
|
]
|
|
6918
6897
|
},
|
|
6919
6898
|
"red-pill": {
|
|
6920
6899
|
fallbackChain: [
|
|
6921
6900
|
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-opus-4-6", variant: "max" },
|
|
6922
|
-
{ providers: ["
|
|
6923
|
-
{ providers: ["google", "github-copilot", "opencode"], model: "gemini-3.1-pro" }
|
|
6901
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" }
|
|
6924
6902
|
]
|
|
6925
6903
|
},
|
|
6926
6904
|
broadcast: {
|
|
6927
6905
|
fallbackChain: [
|
|
6928
|
-
{ providers: ["
|
|
6929
|
-
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-
|
|
6906
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-sonnet-4-6" },
|
|
6907
|
+
{ providers: ["anthropic", "github-copilot", "opencode"], model: "claude-haiku-4-5" }
|
|
6930
6908
|
]
|
|
6931
6909
|
}
|
|
6932
6910
|
};
|
|
@@ -7366,7 +7344,7 @@ async function getPluginNameWithVersion(currentVersion) {
|
|
|
7366
7344
|
}
|
|
7367
7345
|
return `${PACKAGE_NAME}@${currentVersion}`;
|
|
7368
7346
|
}
|
|
7369
|
-
var PACKAGE_NAME = "matrixx", PRIORITIZED_TAGS;
|
|
7347
|
+
var PACKAGE_NAME = "opencode-matrixx", PRIORITIZED_TAGS;
|
|
7370
7348
|
var init_plugin_name_with_version = __esm(() => {
|
|
7371
7349
|
PRIORITIZED_TAGS = ["latest", "beta", "next"];
|
|
7372
7350
|
});
|
|
@@ -7465,6 +7443,9 @@ var init_parse_opencode_config_file = __esm(() => {
|
|
|
7465
7443
|
|
|
7466
7444
|
// src/cli/config-manager/add-plugin-to-opencode-config.ts
|
|
7467
7445
|
import { readFileSync as readFileSync5, writeFileSync as writeFileSync3 } from "fs";
|
|
7446
|
+
function isManagedPluginEntry(entry) {
|
|
7447
|
+
return entry === PACKAGE_NAME2 || entry.startsWith(`${PACKAGE_NAME2}@`) || entry === LEGACY_PACKAGE_NAME || entry.startsWith(`${LEGACY_PACKAGE_NAME}@`);
|
|
7448
|
+
}
|
|
7468
7449
|
async function addPluginToOpenCodeConfig(currentVersion) {
|
|
7469
7450
|
try {
|
|
7470
7451
|
ensureConfigDirectoryExists();
|
|
@@ -7494,7 +7475,7 @@ async function addPluginToOpenCodeConfig(currentVersion) {
|
|
|
7494
7475
|
}
|
|
7495
7476
|
const config = parseResult.config;
|
|
7496
7477
|
const plugins = config.plugin ?? [];
|
|
7497
|
-
const existingIndex = plugins.findIndex((p) => p
|
|
7478
|
+
const existingIndex = plugins.findIndex((p) => isManagedPluginEntry(p));
|
|
7498
7479
|
if (existingIndex !== -1) {
|
|
7499
7480
|
if (plugins[existingIndex] === pluginEntry) {
|
|
7500
7481
|
return { success: true, configPath: path3 };
|
|
@@ -7533,7 +7514,7 @@ async function addPluginToOpenCodeConfig(currentVersion) {
|
|
|
7533
7514
|
};
|
|
7534
7515
|
}
|
|
7535
7516
|
}
|
|
7536
|
-
var PACKAGE_NAME2 = "matrixx";
|
|
7517
|
+
var PACKAGE_NAME2 = "opencode-matrixx", LEGACY_PACKAGE_NAME = "matrixx";
|
|
7537
7518
|
var init_add_plugin_to_opencode_config = __esm(() => {
|
|
7538
7519
|
init_config_context();
|
|
7539
7520
|
init_ensure_config_directory_exists();
|
|
@@ -8127,7 +8108,7 @@ function detectCurrentConfig() {
|
|
|
8127
8108
|
}
|
|
8128
8109
|
const openCodeConfig = parseResult.config;
|
|
8129
8110
|
const plugins = openCodeConfig.plugin ?? [];
|
|
8130
|
-
result.isInstalled = plugins.some((p) => p.startsWith("matrixx"));
|
|
8111
|
+
result.isInstalled = plugins.some((p) => p.startsWith("opencode-matrixx") || p === "matrixx" || p.startsWith("matrixx@"));
|
|
8131
8112
|
if (!result.isInstalled) {
|
|
8132
8113
|
return result;
|
|
8133
8114
|
}
|
|
@@ -8268,6 +8249,462 @@ var require_src = __commonJS((exports, module) => {
|
|
|
8268
8249
|
module.exports = { cursor, scroll, erase, beep };
|
|
8269
8250
|
});
|
|
8270
8251
|
|
|
8252
|
+
// node_modules/isexe/windows.js
|
|
8253
|
+
var require_windows = __commonJS((exports, module) => {
|
|
8254
|
+
module.exports = isexe;
|
|
8255
|
+
isexe.sync = sync;
|
|
8256
|
+
var fs4 = __require("fs");
|
|
8257
|
+
function checkPathExt(path4, options) {
|
|
8258
|
+
var pathext = options.pathExt !== undefined ? options.pathExt : process.env.PATHEXT;
|
|
8259
|
+
if (!pathext) {
|
|
8260
|
+
return true;
|
|
8261
|
+
}
|
|
8262
|
+
pathext = pathext.split(";");
|
|
8263
|
+
if (pathext.indexOf("") !== -1) {
|
|
8264
|
+
return true;
|
|
8265
|
+
}
|
|
8266
|
+
for (var i2 = 0;i2 < pathext.length; i2++) {
|
|
8267
|
+
var p2 = pathext[i2].toLowerCase();
|
|
8268
|
+
if (p2 && path4.substr(-p2.length).toLowerCase() === p2) {
|
|
8269
|
+
return true;
|
|
8270
|
+
}
|
|
8271
|
+
}
|
|
8272
|
+
return false;
|
|
8273
|
+
}
|
|
8274
|
+
function checkStat(stat, path4, options) {
|
|
8275
|
+
if (!stat.isSymbolicLink() && !stat.isFile()) {
|
|
8276
|
+
return false;
|
|
8277
|
+
}
|
|
8278
|
+
return checkPathExt(path4, options);
|
|
8279
|
+
}
|
|
8280
|
+
function isexe(path4, options, cb) {
|
|
8281
|
+
fs4.stat(path4, function(er, stat) {
|
|
8282
|
+
cb(er, er ? false : checkStat(stat, path4, options));
|
|
8283
|
+
});
|
|
8284
|
+
}
|
|
8285
|
+
function sync(path4, options) {
|
|
8286
|
+
return checkStat(fs4.statSync(path4), path4, options);
|
|
8287
|
+
}
|
|
8288
|
+
});
|
|
8289
|
+
|
|
8290
|
+
// node_modules/isexe/mode.js
|
|
8291
|
+
var require_mode = __commonJS((exports, module) => {
|
|
8292
|
+
module.exports = isexe;
|
|
8293
|
+
isexe.sync = sync;
|
|
8294
|
+
var fs4 = __require("fs");
|
|
8295
|
+
function isexe(path4, options, cb) {
|
|
8296
|
+
fs4.stat(path4, function(er, stat) {
|
|
8297
|
+
cb(er, er ? false : checkStat(stat, options));
|
|
8298
|
+
});
|
|
8299
|
+
}
|
|
8300
|
+
function sync(path4, options) {
|
|
8301
|
+
return checkStat(fs4.statSync(path4), options);
|
|
8302
|
+
}
|
|
8303
|
+
function checkStat(stat, options) {
|
|
8304
|
+
return stat.isFile() && checkMode(stat, options);
|
|
8305
|
+
}
|
|
8306
|
+
function checkMode(stat, options) {
|
|
8307
|
+
var mod = stat.mode;
|
|
8308
|
+
var uid = stat.uid;
|
|
8309
|
+
var gid = stat.gid;
|
|
8310
|
+
var myUid = options.uid !== undefined ? options.uid : process.getuid && process.getuid();
|
|
8311
|
+
var myGid = options.gid !== undefined ? options.gid : process.getgid && process.getgid();
|
|
8312
|
+
var u2 = parseInt("100", 8);
|
|
8313
|
+
var g2 = parseInt("010", 8);
|
|
8314
|
+
var o2 = parseInt("001", 8);
|
|
8315
|
+
var ug = u2 | g2;
|
|
8316
|
+
var ret = mod & o2 || mod & g2 && gid === myGid || mod & u2 && uid === myUid || mod & ug && myUid === 0;
|
|
8317
|
+
return ret;
|
|
8318
|
+
}
|
|
8319
|
+
});
|
|
8320
|
+
|
|
8321
|
+
// node_modules/isexe/index.js
|
|
8322
|
+
var require_isexe = __commonJS((exports, module) => {
|
|
8323
|
+
var fs4 = __require("fs");
|
|
8324
|
+
var core3;
|
|
8325
|
+
if (process.platform === "win32" || global.TESTING_WINDOWS) {
|
|
8326
|
+
core3 = require_windows();
|
|
8327
|
+
} else {
|
|
8328
|
+
core3 = require_mode();
|
|
8329
|
+
}
|
|
8330
|
+
module.exports = isexe;
|
|
8331
|
+
isexe.sync = sync;
|
|
8332
|
+
function isexe(path4, options, cb) {
|
|
8333
|
+
if (typeof options === "function") {
|
|
8334
|
+
cb = options;
|
|
8335
|
+
options = {};
|
|
8336
|
+
}
|
|
8337
|
+
if (!cb) {
|
|
8338
|
+
if (typeof Promise !== "function") {
|
|
8339
|
+
throw new TypeError("callback not provided");
|
|
8340
|
+
}
|
|
8341
|
+
return new Promise(function(resolve2, reject) {
|
|
8342
|
+
isexe(path4, options || {}, function(er, is) {
|
|
8343
|
+
if (er) {
|
|
8344
|
+
reject(er);
|
|
8345
|
+
} else {
|
|
8346
|
+
resolve2(is);
|
|
8347
|
+
}
|
|
8348
|
+
});
|
|
8349
|
+
});
|
|
8350
|
+
}
|
|
8351
|
+
core3(path4, options || {}, function(er, is) {
|
|
8352
|
+
if (er) {
|
|
8353
|
+
if (er.code === "EACCES" || options && options.ignoreErrors) {
|
|
8354
|
+
er = null;
|
|
8355
|
+
is = false;
|
|
8356
|
+
}
|
|
8357
|
+
}
|
|
8358
|
+
cb(er, is);
|
|
8359
|
+
});
|
|
8360
|
+
}
|
|
8361
|
+
function sync(path4, options) {
|
|
8362
|
+
try {
|
|
8363
|
+
return core3.sync(path4, options || {});
|
|
8364
|
+
} catch (er) {
|
|
8365
|
+
if (options && options.ignoreErrors || er.code === "EACCES") {
|
|
8366
|
+
return false;
|
|
8367
|
+
} else {
|
|
8368
|
+
throw er;
|
|
8369
|
+
}
|
|
8370
|
+
}
|
|
8371
|
+
}
|
|
8372
|
+
});
|
|
8373
|
+
|
|
8374
|
+
// node_modules/which/which.js
|
|
8375
|
+
var require_which = __commonJS((exports, module) => {
|
|
8376
|
+
var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys";
|
|
8377
|
+
var path4 = __require("path");
|
|
8378
|
+
var COLON = isWindows ? ";" : ":";
|
|
8379
|
+
var isexe = require_isexe();
|
|
8380
|
+
var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" });
|
|
8381
|
+
var getPathInfo = (cmd, opt) => {
|
|
8382
|
+
const colon = opt.colon || COLON;
|
|
8383
|
+
const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [""] : [
|
|
8384
|
+
...isWindows ? [process.cwd()] : [],
|
|
8385
|
+
...(opt.path || process.env.PATH || "").split(colon)
|
|
8386
|
+
];
|
|
8387
|
+
const pathExtExe = isWindows ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : "";
|
|
8388
|
+
const pathExt = isWindows ? pathExtExe.split(colon) : [""];
|
|
8389
|
+
if (isWindows) {
|
|
8390
|
+
if (cmd.indexOf(".") !== -1 && pathExt[0] !== "")
|
|
8391
|
+
pathExt.unshift("");
|
|
8392
|
+
}
|
|
8393
|
+
return {
|
|
8394
|
+
pathEnv,
|
|
8395
|
+
pathExt,
|
|
8396
|
+
pathExtExe
|
|
8397
|
+
};
|
|
8398
|
+
};
|
|
8399
|
+
var which = (cmd, opt, cb) => {
|
|
8400
|
+
if (typeof opt === "function") {
|
|
8401
|
+
cb = opt;
|
|
8402
|
+
opt = {};
|
|
8403
|
+
}
|
|
8404
|
+
if (!opt)
|
|
8405
|
+
opt = {};
|
|
8406
|
+
const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
|
|
8407
|
+
const found = [];
|
|
8408
|
+
const step = (i2) => new Promise((resolve2, reject) => {
|
|
8409
|
+
if (i2 === pathEnv.length)
|
|
8410
|
+
return opt.all && found.length ? resolve2(found) : reject(getNotFoundError(cmd));
|
|
8411
|
+
const ppRaw = pathEnv[i2];
|
|
8412
|
+
const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
|
|
8413
|
+
const pCmd = path4.join(pathPart, cmd);
|
|
8414
|
+
const p2 = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
|
|
8415
|
+
resolve2(subStep(p2, i2, 0));
|
|
8416
|
+
});
|
|
8417
|
+
const subStep = (p2, i2, ii) => new Promise((resolve2, reject) => {
|
|
8418
|
+
if (ii === pathExt.length)
|
|
8419
|
+
return resolve2(step(i2 + 1));
|
|
8420
|
+
const ext = pathExt[ii];
|
|
8421
|
+
isexe(p2 + ext, { pathExt: pathExtExe }, (er, is) => {
|
|
8422
|
+
if (!er && is) {
|
|
8423
|
+
if (opt.all)
|
|
8424
|
+
found.push(p2 + ext);
|
|
8425
|
+
else
|
|
8426
|
+
return resolve2(p2 + ext);
|
|
8427
|
+
}
|
|
8428
|
+
return resolve2(subStep(p2, i2, ii + 1));
|
|
8429
|
+
});
|
|
8430
|
+
});
|
|
8431
|
+
return cb ? step(0).then((res) => cb(null, res), cb) : step(0);
|
|
8432
|
+
};
|
|
8433
|
+
var whichSync = (cmd, opt) => {
|
|
8434
|
+
opt = opt || {};
|
|
8435
|
+
const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
|
|
8436
|
+
const found = [];
|
|
8437
|
+
for (let i2 = 0;i2 < pathEnv.length; i2++) {
|
|
8438
|
+
const ppRaw = pathEnv[i2];
|
|
8439
|
+
const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
|
|
8440
|
+
const pCmd = path4.join(pathPart, cmd);
|
|
8441
|
+
const p2 = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
|
|
8442
|
+
for (let j2 = 0;j2 < pathExt.length; j2++) {
|
|
8443
|
+
const cur = p2 + pathExt[j2];
|
|
8444
|
+
try {
|
|
8445
|
+
const is = isexe.sync(cur, { pathExt: pathExtExe });
|
|
8446
|
+
if (is) {
|
|
8447
|
+
if (opt.all)
|
|
8448
|
+
found.push(cur);
|
|
8449
|
+
else
|
|
8450
|
+
return cur;
|
|
8451
|
+
}
|
|
8452
|
+
} catch (ex) {}
|
|
8453
|
+
}
|
|
8454
|
+
}
|
|
8455
|
+
if (opt.all && found.length)
|
|
8456
|
+
return found;
|
|
8457
|
+
if (opt.nothrow)
|
|
8458
|
+
return null;
|
|
8459
|
+
throw getNotFoundError(cmd);
|
|
8460
|
+
};
|
|
8461
|
+
module.exports = which;
|
|
8462
|
+
which.sync = whichSync;
|
|
8463
|
+
});
|
|
8464
|
+
|
|
8465
|
+
// node_modules/path-key/index.js
|
|
8466
|
+
var require_path_key = __commonJS((exports, module) => {
|
|
8467
|
+
var pathKey = (options = {}) => {
|
|
8468
|
+
const environment = options.env || process.env;
|
|
8469
|
+
const platform = options.platform || process.platform;
|
|
8470
|
+
if (platform !== "win32") {
|
|
8471
|
+
return "PATH";
|
|
8472
|
+
}
|
|
8473
|
+
return Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path";
|
|
8474
|
+
};
|
|
8475
|
+
module.exports = pathKey;
|
|
8476
|
+
module.exports.default = pathKey;
|
|
8477
|
+
});
|
|
8478
|
+
|
|
8479
|
+
// node_modules/cross-spawn/lib/util/resolveCommand.js
|
|
8480
|
+
var require_resolveCommand = __commonJS((exports, module) => {
|
|
8481
|
+
var path4 = __require("path");
|
|
8482
|
+
var which = require_which();
|
|
8483
|
+
var getPathKey = require_path_key();
|
|
8484
|
+
function resolveCommandAttempt(parsed, withoutPathExt) {
|
|
8485
|
+
const env = parsed.options.env || process.env;
|
|
8486
|
+
const cwd = process.cwd();
|
|
8487
|
+
const hasCustomCwd = parsed.options.cwd != null;
|
|
8488
|
+
const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;
|
|
8489
|
+
if (shouldSwitchCwd) {
|
|
8490
|
+
try {
|
|
8491
|
+
process.chdir(parsed.options.cwd);
|
|
8492
|
+
} catch (err) {}
|
|
8493
|
+
}
|
|
8494
|
+
let resolved;
|
|
8495
|
+
try {
|
|
8496
|
+
resolved = which.sync(parsed.command, {
|
|
8497
|
+
path: env[getPathKey({ env })],
|
|
8498
|
+
pathExt: withoutPathExt ? path4.delimiter : undefined
|
|
8499
|
+
});
|
|
8500
|
+
} catch (e2) {} finally {
|
|
8501
|
+
if (shouldSwitchCwd) {
|
|
8502
|
+
process.chdir(cwd);
|
|
8503
|
+
}
|
|
8504
|
+
}
|
|
8505
|
+
if (resolved) {
|
|
8506
|
+
resolved = path4.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved);
|
|
8507
|
+
}
|
|
8508
|
+
return resolved;
|
|
8509
|
+
}
|
|
8510
|
+
function resolveCommand(parsed) {
|
|
8511
|
+
return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
|
|
8512
|
+
}
|
|
8513
|
+
module.exports = resolveCommand;
|
|
8514
|
+
});
|
|
8515
|
+
|
|
8516
|
+
// node_modules/cross-spawn/lib/util/escape.js
|
|
8517
|
+
var require_escape = __commonJS((exports, module) => {
|
|
8518
|
+
var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g;
|
|
8519
|
+
function escapeCommand(arg) {
|
|
8520
|
+
arg = arg.replace(metaCharsRegExp, "^$1");
|
|
8521
|
+
return arg;
|
|
8522
|
+
}
|
|
8523
|
+
function escapeArgument(arg, doubleEscapeMetaChars) {
|
|
8524
|
+
arg = `${arg}`;
|
|
8525
|
+
arg = arg.replace(/(?=(\\+?)?)\1"/g, "$1$1\\\"");
|
|
8526
|
+
arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1");
|
|
8527
|
+
arg = `"${arg}"`;
|
|
8528
|
+
arg = arg.replace(metaCharsRegExp, "^$1");
|
|
8529
|
+
if (doubleEscapeMetaChars) {
|
|
8530
|
+
arg = arg.replace(metaCharsRegExp, "^$1");
|
|
8531
|
+
}
|
|
8532
|
+
return arg;
|
|
8533
|
+
}
|
|
8534
|
+
exports.command = escapeCommand;
|
|
8535
|
+
exports.argument = escapeArgument;
|
|
8536
|
+
});
|
|
8537
|
+
|
|
8538
|
+
// node_modules/shebang-regex/index.js
|
|
8539
|
+
var require_shebang_regex = __commonJS((exports, module) => {
|
|
8540
|
+
module.exports = /^#!(.*)/;
|
|
8541
|
+
});
|
|
8542
|
+
|
|
8543
|
+
// node_modules/shebang-command/index.js
|
|
8544
|
+
var require_shebang_command = __commonJS((exports, module) => {
|
|
8545
|
+
var shebangRegex = require_shebang_regex();
|
|
8546
|
+
module.exports = (string4 = "") => {
|
|
8547
|
+
const match = string4.match(shebangRegex);
|
|
8548
|
+
if (!match) {
|
|
8549
|
+
return null;
|
|
8550
|
+
}
|
|
8551
|
+
const [path4, argument] = match[0].replace(/#! ?/, "").split(" ");
|
|
8552
|
+
const binary2 = path4.split("/").pop();
|
|
8553
|
+
if (binary2 === "env") {
|
|
8554
|
+
return argument;
|
|
8555
|
+
}
|
|
8556
|
+
return argument ? `${binary2} ${argument}` : binary2;
|
|
8557
|
+
};
|
|
8558
|
+
});
|
|
8559
|
+
|
|
8560
|
+
// node_modules/cross-spawn/lib/util/readShebang.js
|
|
8561
|
+
var require_readShebang = __commonJS((exports, module) => {
|
|
8562
|
+
var fs4 = __require("fs");
|
|
8563
|
+
var shebangCommand = require_shebang_command();
|
|
8564
|
+
function readShebang(command) {
|
|
8565
|
+
const size = 150;
|
|
8566
|
+
const buffer = Buffer.alloc(size);
|
|
8567
|
+
let fd;
|
|
8568
|
+
try {
|
|
8569
|
+
fd = fs4.openSync(command, "r");
|
|
8570
|
+
fs4.readSync(fd, buffer, 0, size, 0);
|
|
8571
|
+
fs4.closeSync(fd);
|
|
8572
|
+
} catch (e2) {}
|
|
8573
|
+
return shebangCommand(buffer.toString());
|
|
8574
|
+
}
|
|
8575
|
+
module.exports = readShebang;
|
|
8576
|
+
});
|
|
8577
|
+
|
|
8578
|
+
// node_modules/cross-spawn/lib/parse.js
|
|
8579
|
+
var require_parse = __commonJS((exports, module) => {
|
|
8580
|
+
var path4 = __require("path");
|
|
8581
|
+
var resolveCommand = require_resolveCommand();
|
|
8582
|
+
var escape = require_escape();
|
|
8583
|
+
var readShebang = require_readShebang();
|
|
8584
|
+
var isWin = process.platform === "win32";
|
|
8585
|
+
var isExecutableRegExp = /\.(?:com|exe)$/i;
|
|
8586
|
+
var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
|
|
8587
|
+
function detectShebang(parsed) {
|
|
8588
|
+
parsed.file = resolveCommand(parsed);
|
|
8589
|
+
const shebang = parsed.file && readShebang(parsed.file);
|
|
8590
|
+
if (shebang) {
|
|
8591
|
+
parsed.args.unshift(parsed.file);
|
|
8592
|
+
parsed.command = shebang;
|
|
8593
|
+
return resolveCommand(parsed);
|
|
8594
|
+
}
|
|
8595
|
+
return parsed.file;
|
|
8596
|
+
}
|
|
8597
|
+
function parseNonShell(parsed) {
|
|
8598
|
+
if (!isWin) {
|
|
8599
|
+
return parsed;
|
|
8600
|
+
}
|
|
8601
|
+
const commandFile = detectShebang(parsed);
|
|
8602
|
+
const needsShell = !isExecutableRegExp.test(commandFile);
|
|
8603
|
+
if (parsed.options.forceShell || needsShell) {
|
|
8604
|
+
const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile);
|
|
8605
|
+
parsed.command = path4.normalize(parsed.command);
|
|
8606
|
+
parsed.command = escape.command(parsed.command);
|
|
8607
|
+
parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars));
|
|
8608
|
+
const shellCommand = [parsed.command].concat(parsed.args).join(" ");
|
|
8609
|
+
parsed.args = ["/d", "/s", "/c", `"${shellCommand}"`];
|
|
8610
|
+
parsed.command = process.env.comspec || "cmd.exe";
|
|
8611
|
+
parsed.options.windowsVerbatimArguments = true;
|
|
8612
|
+
}
|
|
8613
|
+
return parsed;
|
|
8614
|
+
}
|
|
8615
|
+
function parse7(command, args, options) {
|
|
8616
|
+
if (args && !Array.isArray(args)) {
|
|
8617
|
+
options = args;
|
|
8618
|
+
args = null;
|
|
8619
|
+
}
|
|
8620
|
+
args = args ? args.slice(0) : [];
|
|
8621
|
+
options = Object.assign({}, options);
|
|
8622
|
+
const parsed = {
|
|
8623
|
+
command,
|
|
8624
|
+
args,
|
|
8625
|
+
options,
|
|
8626
|
+
file: undefined,
|
|
8627
|
+
original: {
|
|
8628
|
+
command,
|
|
8629
|
+
args
|
|
8630
|
+
}
|
|
8631
|
+
};
|
|
8632
|
+
return options.shell ? parsed : parseNonShell(parsed);
|
|
8633
|
+
}
|
|
8634
|
+
module.exports = parse7;
|
|
8635
|
+
});
|
|
8636
|
+
|
|
8637
|
+
// node_modules/cross-spawn/lib/enoent.js
|
|
8638
|
+
var require_enoent = __commonJS((exports, module) => {
|
|
8639
|
+
var isWin = process.platform === "win32";
|
|
8640
|
+
function notFoundError(original, syscall) {
|
|
8641
|
+
return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), {
|
|
8642
|
+
code: "ENOENT",
|
|
8643
|
+
errno: "ENOENT",
|
|
8644
|
+
syscall: `${syscall} ${original.command}`,
|
|
8645
|
+
path: original.command,
|
|
8646
|
+
spawnargs: original.args
|
|
8647
|
+
});
|
|
8648
|
+
}
|
|
8649
|
+
function hookChildProcess(cp, parsed) {
|
|
8650
|
+
if (!isWin) {
|
|
8651
|
+
return;
|
|
8652
|
+
}
|
|
8653
|
+
const originalEmit = cp.emit;
|
|
8654
|
+
cp.emit = function(name, arg1) {
|
|
8655
|
+
if (name === "exit") {
|
|
8656
|
+
const err = verifyENOENT(arg1, parsed);
|
|
8657
|
+
if (err) {
|
|
8658
|
+
return originalEmit.call(cp, "error", err);
|
|
8659
|
+
}
|
|
8660
|
+
}
|
|
8661
|
+
return originalEmit.apply(cp, arguments);
|
|
8662
|
+
};
|
|
8663
|
+
}
|
|
8664
|
+
function verifyENOENT(status, parsed) {
|
|
8665
|
+
if (isWin && status === 1 && !parsed.file) {
|
|
8666
|
+
return notFoundError(parsed.original, "spawn");
|
|
8667
|
+
}
|
|
8668
|
+
return null;
|
|
8669
|
+
}
|
|
8670
|
+
function verifyENOENTSync(status, parsed) {
|
|
8671
|
+
if (isWin && status === 1 && !parsed.file) {
|
|
8672
|
+
return notFoundError(parsed.original, "spawnSync");
|
|
8673
|
+
}
|
|
8674
|
+
return null;
|
|
8675
|
+
}
|
|
8676
|
+
module.exports = {
|
|
8677
|
+
hookChildProcess,
|
|
8678
|
+
verifyENOENT,
|
|
8679
|
+
verifyENOENTSync,
|
|
8680
|
+
notFoundError
|
|
8681
|
+
};
|
|
8682
|
+
});
|
|
8683
|
+
|
|
8684
|
+
// node_modules/cross-spawn/index.js
|
|
8685
|
+
var require_cross_spawn = __commonJS((exports, module) => {
|
|
8686
|
+
var cp = __require("child_process");
|
|
8687
|
+
var parse7 = require_parse();
|
|
8688
|
+
var enoent = require_enoent();
|
|
8689
|
+
function spawn(command, args, options) {
|
|
8690
|
+
const parsed = parse7(command, args, options);
|
|
8691
|
+
const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
|
|
8692
|
+
enoent.hookChildProcess(spawned, parsed);
|
|
8693
|
+
return spawned;
|
|
8694
|
+
}
|
|
8695
|
+
function spawnSync(command, args, options) {
|
|
8696
|
+
const parsed = parse7(command, args, options);
|
|
8697
|
+
const result = cp.spawnSync(parsed.command, parsed.args, parsed.options);
|
|
8698
|
+
result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
|
|
8699
|
+
return result;
|
|
8700
|
+
}
|
|
8701
|
+
module.exports = spawn;
|
|
8702
|
+
module.exports.spawn = spawn;
|
|
8703
|
+
module.exports.sync = spawnSync;
|
|
8704
|
+
module.exports._parse = parse7;
|
|
8705
|
+
module.exports._enoent = enoent;
|
|
8706
|
+
});
|
|
8707
|
+
|
|
8271
8708
|
// src/hooks/auto-update-checker/constants.ts
|
|
8272
8709
|
import * as path4 from "path";
|
|
8273
8710
|
import * as os3 from "os";
|
|
@@ -8282,7 +8719,7 @@ function getWindowsAppdataDir() {
|
|
|
8282
8719
|
return null;
|
|
8283
8720
|
return process.env.APPDATA ?? path4.join(os3.homedir(), "AppData", "Roaming");
|
|
8284
8721
|
}
|
|
8285
|
-
var PACKAGE_NAME3 = "matrixx", NPM_REGISTRY_URL, NPM_FETCH_TIMEOUT = 5000, CACHE_DIR, VERSION_FILE, USER_CONFIG_DIR, USER_OPENCODE_CONFIG, USER_OPENCODE_CONFIG_JSONC, INSTALLED_PACKAGE_JSON;
|
|
8722
|
+
var PACKAGE_NAME3 = "opencode-matrixx", NPM_REGISTRY_URL, NPM_FETCH_TIMEOUT = 5000, CACHE_DIR, VERSION_FILE, USER_CONFIG_DIR, USER_OPENCODE_CONFIG, USER_OPENCODE_CONFIG_JSONC, INSTALLED_PACKAGE_JSON;
|
|
8286
8723
|
var init_constants3 = __esm(() => {
|
|
8287
8724
|
init_shared();
|
|
8288
8725
|
NPM_REGISTRY_URL = `https://registry.npmjs.org/-/package/${PACKAGE_NAME3}/dist-tags`;
|
|
@@ -9040,7 +9477,7 @@ var {
|
|
|
9040
9477
|
// package.json
|
|
9041
9478
|
var package_default = {
|
|
9042
9479
|
name: "opencode-matrixx",
|
|
9043
|
-
version: "1.
|
|
9480
|
+
version: "1.1.1",
|
|
9044
9481
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
9045
9482
|
main: "dist/index.js",
|
|
9046
9483
|
types: "dist/index.d.ts",
|
|
@@ -9109,8 +9546,8 @@ var package_default = {
|
|
|
9109
9546
|
"@clack/prompts": "^0.11.0",
|
|
9110
9547
|
"@code-yeongyu/comment-checker": "^0.6.1",
|
|
9111
9548
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
9112
|
-
"@opencode-ai/plugin": "
|
|
9113
|
-
"@opencode-ai/sdk": "
|
|
9549
|
+
"@opencode-ai/plugin": "1.3.15",
|
|
9550
|
+
"@opencode-ai/sdk": "1.3.15",
|
|
9114
9551
|
commander: "^14.0.2",
|
|
9115
9552
|
"detect-libc": "^2.0.0",
|
|
9116
9553
|
"js-yaml": "^4.1.1",
|
|
@@ -9128,13 +9565,13 @@ var package_default = {
|
|
|
9128
9565
|
typescript: "^5.7.3"
|
|
9129
9566
|
},
|
|
9130
9567
|
optionalDependencies: {
|
|
9131
|
-
"opencode-matrixx-darwin-arm64": "1.
|
|
9132
|
-
"opencode-matrixx-darwin-x64": "1.
|
|
9133
|
-
"opencode-matrixx-linux-arm64": "1.
|
|
9134
|
-
"opencode-matrixx-linux-arm64-musl": "1.
|
|
9135
|
-
"opencode-matrixx-linux-x64": "1.
|
|
9136
|
-
"opencode-matrixx-linux-x64-musl": "1.
|
|
9137
|
-
"opencode-matrixx-windows-x64": "1.
|
|
9568
|
+
"opencode-matrixx-darwin-arm64": "1.1.1",
|
|
9569
|
+
"opencode-matrixx-darwin-x64": "1.1.1",
|
|
9570
|
+
"opencode-matrixx-linux-arm64": "1.1.1",
|
|
9571
|
+
"opencode-matrixx-linux-arm64-musl": "1.1.1",
|
|
9572
|
+
"opencode-matrixx-linux-x64": "1.1.1",
|
|
9573
|
+
"opencode-matrixx-linux-x64-musl": "1.1.1",
|
|
9574
|
+
"opencode-matrixx-windows-x64": "1.1.1"
|
|
9138
9575
|
},
|
|
9139
9576
|
trustedDependencies: [
|
|
9140
9577
|
"@ast-grep/cli",
|
|
@@ -10517,92 +10954,86 @@ import * as path3 from "path";
|
|
|
10517
10954
|
|
|
10518
10955
|
// src/config/profiles.ts
|
|
10519
10956
|
var PROFILE_NAMES = ["budget", "economy", "balanced", "performance"];
|
|
10520
|
-
var OPUS = "
|
|
10521
|
-
var SONNET = "
|
|
10522
|
-
var HAIKU = "
|
|
10523
|
-
var GEMINI_PRO = "google-vertex/gemini-3.1-pro-preview";
|
|
10524
|
-
var GEMINI_FLASH = "google-vertex/gemini-3-flash-preview";
|
|
10525
|
-
var GEMINI_FAST = "google-vertex/gemini-2.5-flash";
|
|
10957
|
+
var OPUS = "anthropic/claude-opus-4-6";
|
|
10958
|
+
var SONNET = "anthropic/claude-sonnet-4-6";
|
|
10959
|
+
var HAIKU = "anthropic/claude-haiku-4-5";
|
|
10526
10960
|
var PROFILES = {
|
|
10527
10961
|
budget: {
|
|
10528
10962
|
agents: {
|
|
10529
10963
|
morpheus: { model: SONNET },
|
|
10530
|
-
oracle: { model: GEMINI_PRO },
|
|
10531
|
-
cipher: { model: GEMINI_PRO },
|
|
10532
|
-
niobe: { model: GEMINI_PRO },
|
|
10533
|
-
sentinel: { model: GEMINI_PRO },
|
|
10534
|
-
seraph: { model: GEMINI_PRO },
|
|
10535
|
-
merovingian: { model: GEMINI_PRO },
|
|
10536
|
-
smith: { model: GEMINI_PRO },
|
|
10537
|
-
architect: { model: GEMINI_FAST },
|
|
10538
|
-
construct: { model: GEMINI_FAST },
|
|
10539
|
-
trinity: { model: GEMINI_FAST },
|
|
10540
|
-
operator: { model: GEMINI_FAST }
|
|
10541
|
-
},
|
|
10542
|
-
categories: {
|
|
10543
|
-
source: { model: GEMINI_PRO },
|
|
10544
|
-
"dsl-engineering": { model: GEMINI_PRO },
|
|
10545
|
-
"deep-jack": { model: GEMINI_FAST },
|
|
10546
|
-
"matrix-bend": { model: GEMINI_FAST },
|
|
10547
|
-
construct: { model: GEMINI_FAST },
|
|
10548
|
-
"red-pill": { model: GEMINI_FAST },
|
|
10549
|
-
"blue-pill": { model: GEMINI_FAST },
|
|
10550
|
-
broadcast: { model: GEMINI_FAST },
|
|
10551
|
-
"bullet-time": { model: GEMINI_FAST }
|
|
10552
|
-
}
|
|
10553
|
-
},
|
|
10554
|
-
economy: {
|
|
10555
|
-
agents: {
|
|
10556
|
-
morpheus: { model: HAIKU },
|
|
10557
10964
|
oracle: { model: HAIKU },
|
|
10558
10965
|
cipher: { model: HAIKU },
|
|
10559
10966
|
niobe: { model: HAIKU },
|
|
10560
10967
|
sentinel: { model: HAIKU },
|
|
10561
10968
|
seraph: { model: HAIKU },
|
|
10562
|
-
merovingian: { model:
|
|
10563
|
-
smith: { model:
|
|
10564
|
-
architect: { model:
|
|
10565
|
-
construct: { model:
|
|
10566
|
-
trinity: { model:
|
|
10567
|
-
operator: { model:
|
|
10969
|
+
merovingian: { model: HAIKU },
|
|
10970
|
+
smith: { model: HAIKU },
|
|
10971
|
+
architect: { model: HAIKU },
|
|
10972
|
+
construct: { model: HAIKU },
|
|
10973
|
+
trinity: { model: HAIKU },
|
|
10974
|
+
operator: { model: HAIKU }
|
|
10568
10975
|
},
|
|
10569
10976
|
categories: {
|
|
10570
|
-
source: { model:
|
|
10571
|
-
"
|
|
10572
|
-
"
|
|
10573
|
-
|
|
10574
|
-
|
|
10575
|
-
"red-pill": { model: GEMINI_PRO },
|
|
10977
|
+
source: { model: SONNET },
|
|
10978
|
+
"deep-jack": { model: HAIKU },
|
|
10979
|
+
"matrix-bend": { model: HAIKU },
|
|
10980
|
+
construct: { model: HAIKU },
|
|
10981
|
+
"red-pill": { model: SONNET },
|
|
10576
10982
|
"blue-pill": { model: HAIKU },
|
|
10577
|
-
broadcast: { model:
|
|
10578
|
-
"bullet-time": { model:
|
|
10983
|
+
broadcast: { model: HAIKU },
|
|
10984
|
+
"bullet-time": { model: HAIKU }
|
|
10579
10985
|
}
|
|
10580
10986
|
},
|
|
10581
|
-
|
|
10987
|
+
economy: {
|
|
10582
10988
|
agents: {
|
|
10583
|
-
morpheus: { model:
|
|
10989
|
+
morpheus: { model: SONNET },
|
|
10584
10990
|
oracle: { model: SONNET },
|
|
10585
10991
|
cipher: { model: SONNET },
|
|
10586
10992
|
niobe: { model: SONNET },
|
|
10587
10993
|
sentinel: { model: SONNET },
|
|
10588
10994
|
seraph: { model: SONNET },
|
|
10589
|
-
merovingian: { model:
|
|
10590
|
-
smith: { model:
|
|
10591
|
-
architect: { model:
|
|
10592
|
-
construct: { model:
|
|
10593
|
-
trinity: { model:
|
|
10594
|
-
operator: { model:
|
|
10995
|
+
merovingian: { model: SONNET },
|
|
10996
|
+
smith: { model: SONNET },
|
|
10997
|
+
architect: { model: HAIKU },
|
|
10998
|
+
construct: { model: HAIKU },
|
|
10999
|
+
trinity: { model: HAIKU },
|
|
11000
|
+
operator: { model: HAIKU }
|
|
10595
11001
|
},
|
|
10596
11002
|
categories: {
|
|
10597
11003
|
source: { model: SONNET },
|
|
10598
|
-
"
|
|
10599
|
-
"
|
|
10600
|
-
|
|
10601
|
-
|
|
10602
|
-
"red-pill": { model: GEMINI_PRO },
|
|
11004
|
+
"deep-jack": { model: SONNET },
|
|
11005
|
+
"matrix-bend": { model: SONNET },
|
|
11006
|
+
construct: { model: SONNET },
|
|
11007
|
+
"red-pill": { model: SONNET },
|
|
10603
11008
|
"blue-pill": { model: SONNET },
|
|
10604
|
-
broadcast: { model:
|
|
10605
|
-
"bullet-time": { model:
|
|
11009
|
+
broadcast: { model: HAIKU },
|
|
11010
|
+
"bullet-time": { model: HAIKU }
|
|
11011
|
+
}
|
|
11012
|
+
},
|
|
11013
|
+
balanced: {
|
|
11014
|
+
agents: {
|
|
11015
|
+
morpheus: { model: OPUS },
|
|
11016
|
+
oracle: { model: SONNET },
|
|
11017
|
+
cipher: { model: SONNET },
|
|
11018
|
+
niobe: { model: SONNET },
|
|
11019
|
+
sentinel: { model: SONNET },
|
|
11020
|
+
seraph: { model: OPUS },
|
|
11021
|
+
merovingian: { model: SONNET },
|
|
11022
|
+
smith: { model: SONNET },
|
|
11023
|
+
architect: { model: SONNET },
|
|
11024
|
+
construct: { model: SONNET },
|
|
11025
|
+
trinity: { model: HAIKU },
|
|
11026
|
+
operator: { model: HAIKU }
|
|
11027
|
+
},
|
|
11028
|
+
categories: {
|
|
11029
|
+
source: { model: OPUS },
|
|
11030
|
+
"deep-jack": { model: SONNET },
|
|
11031
|
+
"matrix-bend": { model: SONNET },
|
|
11032
|
+
construct: { model: SONNET },
|
|
11033
|
+
"red-pill": { model: OPUS },
|
|
11034
|
+
"blue-pill": { model: SONNET },
|
|
11035
|
+
broadcast: { model: SONNET },
|
|
11036
|
+
"bullet-time": { model: HAIKU }
|
|
10606
11037
|
}
|
|
10607
11038
|
},
|
|
10608
11039
|
performance: {
|
|
@@ -10612,24 +11043,23 @@ var PROFILES = {
|
|
|
10612
11043
|
cipher: { model: OPUS },
|
|
10613
11044
|
niobe: { model: OPUS },
|
|
10614
11045
|
sentinel: { model: OPUS },
|
|
10615
|
-
seraph: { model:
|
|
10616
|
-
merovingian: { model:
|
|
10617
|
-
smith: { model:
|
|
10618
|
-
architect: { model:
|
|
10619
|
-
construct: { model:
|
|
10620
|
-
trinity: { model:
|
|
10621
|
-
operator: { model:
|
|
11046
|
+
seraph: { model: OPUS },
|
|
11047
|
+
merovingian: { model: SONNET },
|
|
11048
|
+
smith: { model: SONNET },
|
|
11049
|
+
architect: { model: SONNET },
|
|
11050
|
+
construct: { model: SONNET },
|
|
11051
|
+
trinity: { model: HAIKU },
|
|
11052
|
+
operator: { model: SONNET }
|
|
10622
11053
|
},
|
|
10623
11054
|
categories: {
|
|
10624
11055
|
source: { model: OPUS },
|
|
10625
|
-
"
|
|
10626
|
-
"
|
|
10627
|
-
|
|
10628
|
-
|
|
10629
|
-
"red-pill": { model: GEMINI_PRO },
|
|
11056
|
+
"deep-jack": { model: OPUS },
|
|
11057
|
+
"matrix-bend": { model: OPUS },
|
|
11058
|
+
construct: { model: OPUS },
|
|
11059
|
+
"red-pill": { model: OPUS },
|
|
10630
11060
|
"blue-pill": { model: SONNET },
|
|
10631
|
-
broadcast: { model:
|
|
10632
|
-
"bullet-time": { model:
|
|
11061
|
+
broadcast: { model: SONNET },
|
|
11062
|
+
"bullet-time": { model: HAIKU }
|
|
10633
11063
|
}
|
|
10634
11064
|
}
|
|
10635
11065
|
};
|
|
@@ -21367,7 +21797,7 @@ class JSONSchemaGenerator {
|
|
|
21367
21797
|
if (val === undefined) {
|
|
21368
21798
|
if (this.unrepresentable === "throw") {
|
|
21369
21799
|
throw new Error("Literal `undefined` cannot be represented in JSON Schema");
|
|
21370
|
-
}
|
|
21800
|
+
}
|
|
21371
21801
|
} else if (typeof val === "bigint") {
|
|
21372
21802
|
if (this.unrepresentable === "throw") {
|
|
21373
21803
|
throw new Error("BigInt literals cannot be represented in JSON Schema");
|
|
@@ -22965,7 +23395,8 @@ var BuiltinAgentNameSchema = exports_external.enum([
|
|
|
22965
23395
|
"architect",
|
|
22966
23396
|
"cipher",
|
|
22967
23397
|
"niobe",
|
|
22968
|
-
"sentinel"
|
|
23398
|
+
"sentinel",
|
|
23399
|
+
"zion"
|
|
22969
23400
|
]);
|
|
22970
23401
|
var BuiltinSkillNameSchema = exports_external.enum([
|
|
22971
23402
|
"playwright",
|
|
@@ -23004,7 +23435,11 @@ var BuiltinSkillNameSchema = exports_external.enum([
|
|
|
23004
23435
|
"security-api",
|
|
23005
23436
|
"security-crypto",
|
|
23006
23437
|
"security-infra",
|
|
23007
|
-
"security-review"
|
|
23438
|
+
"security-review",
|
|
23439
|
+
"crypto-market-analysis",
|
|
23440
|
+
"crypto-trading",
|
|
23441
|
+
"crypto-onchain",
|
|
23442
|
+
"tdd-enforcer"
|
|
23008
23443
|
]);
|
|
23009
23444
|
var OverridableAgentNameSchema = exports_external.enum([
|
|
23010
23445
|
"build",
|
|
@@ -23023,7 +23458,8 @@ var OverridableAgentNameSchema = exports_external.enum([
|
|
|
23023
23458
|
"architect",
|
|
23024
23459
|
"cipher",
|
|
23025
23460
|
"niobe",
|
|
23026
|
-
"sentinel"
|
|
23461
|
+
"sentinel",
|
|
23462
|
+
"zion"
|
|
23027
23463
|
]);
|
|
23028
23464
|
// src/config/schema/internal/permission.ts
|
|
23029
23465
|
var PermissionValueSchema = exports_external.enum(["ask", "allow", "deny"]);
|
|
@@ -23135,7 +23571,8 @@ var CategoryConfigSchema = exports_external.object({
|
|
|
23135
23571
|
tools: exports_external.record(exports_external.string(), exports_external.boolean()).optional(),
|
|
23136
23572
|
prompt_append: exports_external.string().optional(),
|
|
23137
23573
|
is_unstable_agent: exports_external.boolean().optional(),
|
|
23138
|
-
disable: exports_external.boolean().optional()
|
|
23574
|
+
disable: exports_external.boolean().optional(),
|
|
23575
|
+
fallback_models: exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]).optional()
|
|
23139
23576
|
});
|
|
23140
23577
|
var BuiltinCategoryNameSchema = exports_external.enum([
|
|
23141
23578
|
"construct",
|
|
@@ -23220,6 +23657,10 @@ var GitMasterConfigSchema = exports_external.object({
|
|
|
23220
23657
|
commit_footer: exports_external.union([exports_external.boolean(), exports_external.string()]).default(false),
|
|
23221
23658
|
include_co_authored_by: exports_external.boolean().default(false)
|
|
23222
23659
|
});
|
|
23660
|
+
// src/config/schema/tdd-enforcer.ts
|
|
23661
|
+
var TddEnforcerConfigSchema = exports_external.object({
|
|
23662
|
+
enabled: exports_external.boolean().default(false)
|
|
23663
|
+
});
|
|
23223
23664
|
// src/config/schema/hooks.ts
|
|
23224
23665
|
var HookNameSchema = exports_external.enum([
|
|
23225
23666
|
"todo-continuation-enforcer",
|
|
@@ -23268,7 +23709,13 @@ var HookNameSchema = exports_external.enum([
|
|
|
23268
23709
|
"secret-leak-guard",
|
|
23269
23710
|
"env-file-write-guard",
|
|
23270
23711
|
"json-error-recovery",
|
|
23271
|
-
"bash-file-read-guard"
|
|
23712
|
+
"bash-file-read-guard",
|
|
23713
|
+
"todo-description-override",
|
|
23714
|
+
"runtime-fallback",
|
|
23715
|
+
"read-image-resizer",
|
|
23716
|
+
"webfetch-redirect-guard",
|
|
23717
|
+
"hashline-edit-diff-enhancer",
|
|
23718
|
+
"tool-pair-validator"
|
|
23272
23719
|
]);
|
|
23273
23720
|
// src/config/schema/notification.ts
|
|
23274
23721
|
var NotificationConfigSchema = exports_external.object({
|
|
@@ -23396,6 +23843,28 @@ var WebsearchConfigSchema = exports_external.object({
|
|
|
23396
23843
|
provider: WebsearchProviderSchema.optional()
|
|
23397
23844
|
});
|
|
23398
23845
|
|
|
23846
|
+
// src/config/schema/runtime-fallback.ts
|
|
23847
|
+
var RuntimeFallbackConfigSchema = exports_external.object({
|
|
23848
|
+
enabled: exports_external.boolean().optional().default(false),
|
|
23849
|
+
retry_on_errors: exports_external.array(exports_external.number()).optional().default([429, 500, 502, 503, 504]),
|
|
23850
|
+
max_fallback_attempts: exports_external.number().optional().default(3),
|
|
23851
|
+
cooldown_seconds: exports_external.number().optional().default(60),
|
|
23852
|
+
timeout_seconds: exports_external.number().optional().default(30),
|
|
23853
|
+
notify_on_fallback: exports_external.boolean().optional().default(true)
|
|
23854
|
+
});
|
|
23855
|
+
|
|
23856
|
+
// src/config/schema/agent-definitions.ts
|
|
23857
|
+
var AgentDefinitionPathSchema = exports_external.string().min(1);
|
|
23858
|
+
var AgentDefinitionsConfigSchema = exports_external.array(AgentDefinitionPathSchema).optional();
|
|
23859
|
+
|
|
23860
|
+
// src/config/schema/model-capabilities.ts
|
|
23861
|
+
var ModelCapabilitiesConfigSchema = exports_external.object({
|
|
23862
|
+
enabled: exports_external.boolean().optional(),
|
|
23863
|
+
auto_refresh_on_start: exports_external.boolean().optional(),
|
|
23864
|
+
refresh_timeout_ms: exports_external.number().int().positive().optional(),
|
|
23865
|
+
source_url: exports_external.string().url().optional()
|
|
23866
|
+
});
|
|
23867
|
+
|
|
23399
23868
|
// src/config/schema/matrixx-config.ts
|
|
23400
23869
|
var MatrixxConfigSchema = exports_external.object({
|
|
23401
23870
|
$schema: exports_external.string().optional(),
|
|
@@ -23421,11 +23890,15 @@ var MatrixxConfigSchema = exports_external.object({
|
|
|
23421
23890
|
notification: NotificationConfigSchema.optional(),
|
|
23422
23891
|
babysitting: BabysittingConfigSchema.optional(),
|
|
23423
23892
|
git_master: GitMasterConfigSchema.optional(),
|
|
23893
|
+
tdd_enforcer: TddEnforcerConfigSchema.optional(),
|
|
23424
23894
|
browser_automation_engine: BrowserAutomationConfigSchema.optional(),
|
|
23425
23895
|
websearch: WebsearchConfigSchema.optional(),
|
|
23426
23896
|
tmux: TmuxConfigSchema.optional(),
|
|
23427
23897
|
morpheus: MorpheusConfigSchema.optional(),
|
|
23428
23898
|
security: SecurityConfigSchema.optional(),
|
|
23899
|
+
runtime_fallback: RuntimeFallbackConfigSchema.optional(),
|
|
23900
|
+
agent_definitions: AgentDefinitionsConfigSchema.optional(),
|
|
23901
|
+
model_capabilities: ModelCapabilitiesConfigSchema.optional(),
|
|
23429
23902
|
_migrations: exports_external.array(exports_external.string()).optional()
|
|
23430
23903
|
});
|
|
23431
23904
|
// src/plugin-config.ts
|
|
@@ -24902,6 +25375,31 @@ class OpencodeClient extends _HeyApiClient {
|
|
|
24902
25375
|
}
|
|
24903
25376
|
|
|
24904
25377
|
// node_modules/@opencode-ai/sdk/dist/client.js
|
|
25378
|
+
function pick2(value, fallback) {
|
|
25379
|
+
if (!value)
|
|
25380
|
+
return;
|
|
25381
|
+
if (!fallback)
|
|
25382
|
+
return value;
|
|
25383
|
+
if (value === fallback)
|
|
25384
|
+
return fallback;
|
|
25385
|
+
if (value === encodeURIComponent(fallback))
|
|
25386
|
+
return fallback;
|
|
25387
|
+
return value;
|
|
25388
|
+
}
|
|
25389
|
+
function rewrite(request, directory) {
|
|
25390
|
+
if (request.method !== "GET" && request.method !== "HEAD")
|
|
25391
|
+
return request;
|
|
25392
|
+
const value = pick2(request.headers.get("x-opencode-directory"), directory);
|
|
25393
|
+
if (!value)
|
|
25394
|
+
return request;
|
|
25395
|
+
const url2 = new URL(request.url);
|
|
25396
|
+
if (!url2.searchParams.has("directory")) {
|
|
25397
|
+
url2.searchParams.set("directory", value);
|
|
25398
|
+
}
|
|
25399
|
+
const next = new Request(url2, request);
|
|
25400
|
+
next.headers.delete("x-opencode-directory");
|
|
25401
|
+
return next;
|
|
25402
|
+
}
|
|
24905
25403
|
function createOpencodeClient(config2) {
|
|
24906
25404
|
if (!config2?.fetch) {
|
|
24907
25405
|
const customFetch = (req) => {
|
|
@@ -24916,14 +25414,50 @@ function createOpencodeClient(config2) {
|
|
|
24916
25414
|
if (config2?.directory) {
|
|
24917
25415
|
config2.headers = {
|
|
24918
25416
|
...config2.headers,
|
|
24919
|
-
"x-opencode-directory": config2.directory
|
|
25417
|
+
"x-opencode-directory": encodeURIComponent(config2.directory)
|
|
24920
25418
|
};
|
|
24921
25419
|
}
|
|
24922
25420
|
const client2 = createClient(config2);
|
|
25421
|
+
client2.interceptors.request.use((request) => rewrite(request, config2?.directory));
|
|
24923
25422
|
return new OpencodeClient({ client: client2 });
|
|
24924
25423
|
}
|
|
24925
25424
|
// node_modules/@opencode-ai/sdk/dist/server.js
|
|
24926
|
-
|
|
25425
|
+
var import_cross_spawn = __toESM(require_cross_spawn(), 1);
|
|
25426
|
+
|
|
25427
|
+
// node_modules/@opencode-ai/sdk/dist/process.js
|
|
25428
|
+
import { spawnSync } from "child_process";
|
|
25429
|
+
function stop(proc) {
|
|
25430
|
+
if (proc.exitCode !== null || proc.signalCode !== null)
|
|
25431
|
+
return;
|
|
25432
|
+
if (process.platform === "win32" && proc.pid) {
|
|
25433
|
+
const out = spawnSync("taskkill", ["/pid", String(proc.pid), "/T", "/F"], { windowsHide: true });
|
|
25434
|
+
if (!out.error && out.status === 0)
|
|
25435
|
+
return;
|
|
25436
|
+
}
|
|
25437
|
+
proc.kill();
|
|
25438
|
+
}
|
|
25439
|
+
function bindAbort(proc, signal, onAbort) {
|
|
25440
|
+
if (!signal)
|
|
25441
|
+
return () => {};
|
|
25442
|
+
const abort = () => {
|
|
25443
|
+
clear();
|
|
25444
|
+
stop(proc);
|
|
25445
|
+
onAbort?.();
|
|
25446
|
+
};
|
|
25447
|
+
const clear = () => {
|
|
25448
|
+
signal.removeEventListener("abort", abort);
|
|
25449
|
+
proc.off("exit", clear);
|
|
25450
|
+
proc.off("error", clear);
|
|
25451
|
+
};
|
|
25452
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
25453
|
+
proc.on("exit", clear);
|
|
25454
|
+
proc.on("error", clear);
|
|
25455
|
+
if (signal.aborted)
|
|
25456
|
+
abort();
|
|
25457
|
+
return clear;
|
|
25458
|
+
}
|
|
25459
|
+
|
|
25460
|
+
// node_modules/@opencode-ai/sdk/dist/server.js
|
|
24927
25461
|
async function createOpencodeServer(options) {
|
|
24928
25462
|
options = Object.assign({
|
|
24929
25463
|
hostname: "127.0.0.1",
|
|
@@ -24933,19 +25467,24 @@ async function createOpencodeServer(options) {
|
|
|
24933
25467
|
const args = [`serve`, `--hostname=${options.hostname}`, `--port=${options.port}`];
|
|
24934
25468
|
if (options.config?.logLevel)
|
|
24935
25469
|
args.push(`--log-level=${options.config.logLevel}`);
|
|
24936
|
-
const proc =
|
|
24937
|
-
signal: options.signal,
|
|
25470
|
+
const proc = import_cross_spawn.default(`opencode`, args, {
|
|
24938
25471
|
env: {
|
|
24939
25472
|
...process.env,
|
|
24940
25473
|
OPENCODE_CONFIG_CONTENT: JSON.stringify(options.config ?? {})
|
|
24941
25474
|
}
|
|
24942
25475
|
});
|
|
25476
|
+
let clear = () => {};
|
|
24943
25477
|
const url2 = await new Promise((resolve2, reject) => {
|
|
24944
25478
|
const id = setTimeout(() => {
|
|
25479
|
+
clear();
|
|
25480
|
+
stop(proc);
|
|
24945
25481
|
reject(new Error(`Timeout waiting for server to start after ${options.timeout}ms`));
|
|
24946
25482
|
}, options.timeout);
|
|
24947
25483
|
let output = "";
|
|
25484
|
+
let resolved = false;
|
|
24948
25485
|
proc.stdout?.on("data", (chunk) => {
|
|
25486
|
+
if (resolved)
|
|
25487
|
+
return;
|
|
24949
25488
|
output += chunk.toString();
|
|
24950
25489
|
const lines = output.split(`
|
|
24951
25490
|
`);
|
|
@@ -24953,9 +25492,14 @@ async function createOpencodeServer(options) {
|
|
|
24953
25492
|
if (line.startsWith("opencode server listening")) {
|
|
24954
25493
|
const match = line.match(/on\s+(https?:\/\/[^\s]+)/);
|
|
24955
25494
|
if (!match) {
|
|
24956
|
-
|
|
25495
|
+
clear();
|
|
25496
|
+
stop(proc);
|
|
25497
|
+
clearTimeout(id);
|
|
25498
|
+
reject(new Error(`Failed to parse server url from output: ${line}`));
|
|
25499
|
+
return;
|
|
24957
25500
|
}
|
|
24958
25501
|
clearTimeout(id);
|
|
25502
|
+
resolved = true;
|
|
24959
25503
|
resolve2(match[1]);
|
|
24960
25504
|
return;
|
|
24961
25505
|
}
|
|
@@ -24977,17 +25521,16 @@ Server output: ${output}`;
|
|
|
24977
25521
|
clearTimeout(id);
|
|
24978
25522
|
reject(error45);
|
|
24979
25523
|
});
|
|
24980
|
-
|
|
24981
|
-
|
|
24982
|
-
|
|
24983
|
-
|
|
24984
|
-
});
|
|
24985
|
-
}
|
|
25524
|
+
clear = bindAbort(proc, options.signal, () => {
|
|
25525
|
+
clearTimeout(id);
|
|
25526
|
+
reject(options.signal?.reason);
|
|
25527
|
+
});
|
|
24986
25528
|
});
|
|
24987
25529
|
return {
|
|
24988
25530
|
url: url2,
|
|
24989
25531
|
close() {
|
|
24990
|
-
|
|
25532
|
+
clear();
|
|
25533
|
+
stop(proc);
|
|
24991
25534
|
}
|
|
24992
25535
|
};
|
|
24993
25536
|
}
|
|
@@ -25748,6 +26291,8 @@ var EXIT_CODES = {
|
|
|
25748
26291
|
};
|
|
25749
26292
|
var MIN_OPENCODE_VERSION = "1.0.150";
|
|
25750
26293
|
var PACKAGE_NAME4 = "matrixx";
|
|
26294
|
+
var NPM_PACKAGE_NAME = "opencode-matrixx";
|
|
26295
|
+
var LEGACY_NPM_PACKAGE_NAME = "matrixx";
|
|
25751
26296
|
var OPENCODE_BINARIES2 = ["opencode", "opencode-desktop"];
|
|
25752
26297
|
|
|
25753
26298
|
// src/cli/doctor/checks/system.ts
|
|
@@ -25852,19 +26397,25 @@ function detectConfigPath() {
|
|
|
25852
26397
|
return null;
|
|
25853
26398
|
}
|
|
25854
26399
|
function parsePluginVersion(entry) {
|
|
25855
|
-
|
|
25856
|
-
|
|
25857
|
-
|
|
25858
|
-
|
|
25859
|
-
|
|
25860
|
-
|
|
26400
|
+
for (const name of [NPM_PACKAGE_NAME, LEGACY_NPM_PACKAGE_NAME]) {
|
|
26401
|
+
if (entry.startsWith(`${name}@`)) {
|
|
26402
|
+
const value = entry.slice(name.length + 1);
|
|
26403
|
+
if (!value || value === "latest")
|
|
26404
|
+
return null;
|
|
26405
|
+
return value;
|
|
26406
|
+
}
|
|
26407
|
+
}
|
|
26408
|
+
return null;
|
|
26409
|
+
}
|
|
26410
|
+
function matchesPluginName(entry, name) {
|
|
26411
|
+
return entry === name || entry.startsWith(`${name}@`);
|
|
25861
26412
|
}
|
|
25862
26413
|
function findPluginEntry2(entries) {
|
|
25863
26414
|
for (const entry of entries) {
|
|
25864
|
-
if (entry
|
|
26415
|
+
if (matchesPluginName(entry, NPM_PACKAGE_NAME) || matchesPluginName(entry, LEGACY_NPM_PACKAGE_NAME)) {
|
|
25865
26416
|
return { entry, isLocalDev: false };
|
|
25866
26417
|
}
|
|
25867
|
-
if (entry.startsWith("file://") && entry.includes(
|
|
26418
|
+
if (entry.startsWith("file://") && entry.includes(NPM_PACKAGE_NAME)) {
|
|
25868
26419
|
return { entry, isLocalDev: true };
|
|
25869
26420
|
}
|
|
25870
26421
|
}
|
|
@@ -25960,10 +26511,10 @@ function normalizeVersion(value) {
|
|
|
25960
26511
|
function getLoadedPluginVersion() {
|
|
25961
26512
|
const cacheDir = resolveOpenCodeCacheDir();
|
|
25962
26513
|
const cachePackagePath = join14(cacheDir, "package.json");
|
|
25963
|
-
const installedPackagePath = join14(cacheDir, "node_modules",
|
|
26514
|
+
const installedPackagePath = join14(cacheDir, "node_modules", NPM_PACKAGE_NAME, "package.json");
|
|
25964
26515
|
const cachePackage = readPackageJson(cachePackagePath);
|
|
25965
26516
|
const installedPackage = readPackageJson(installedPackagePath);
|
|
25966
|
-
const expectedVersion = normalizeVersion(cachePackage?.dependencies?.[
|
|
26517
|
+
const expectedVersion = normalizeVersion(cachePackage?.dependencies?.[NPM_PACKAGE_NAME]);
|
|
25967
26518
|
const loadedVersion = normalizeVersion(installedPackage?.version);
|
|
25968
26519
|
return {
|
|
25969
26520
|
cacheDir,
|
|
@@ -27427,7 +27978,7 @@ async function findAvailablePort2(startPort = DEFAULT_PORT) {
|
|
|
27427
27978
|
}
|
|
27428
27979
|
|
|
27429
27980
|
// src/features/mcp-oauth/oauth-authorization-flow.ts
|
|
27430
|
-
import { spawn
|
|
27981
|
+
import { spawn } from "child_process";
|
|
27431
27982
|
import { createHash, randomBytes } from "crypto";
|
|
27432
27983
|
import { createServer } from "http";
|
|
27433
27984
|
function generateCodeVerifier() {
|
|
@@ -27508,7 +28059,7 @@ function openBrowser(url2) {
|
|
|
27508
28059
|
args = [url2];
|
|
27509
28060
|
}
|
|
27510
28061
|
try {
|
|
27511
|
-
const child =
|
|
28062
|
+
const child = spawn(command, args, { stdio: "ignore", detached: true });
|
|
27512
28063
|
child.on("error", () => {});
|
|
27513
28064
|
child.unref();
|
|
27514
28065
|
} catch {}
|