Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions packages/opencode/README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# js
# MiMoCode Package

To install dependencies:
MiMoCode is an open-source, terminal-native AI coding assistant developed by Xiaomi. It is built as a fork of OpenCode and is designed specifically for long-horizon automated programming tasks.

```bash
bun install
```
This package contains the core business logic, API server, and TUI implementation for MiMoCode.

## Development

To run:
To run MiMoCode locally during development:

```bash
bun run index.ts
bun run dev
```

This project was created using `bun init` in bun v1.2.12. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
For more information, please see the [main repository README](../../README.md).
2 changes: 2 additions & 0 deletions packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1623,6 +1623,8 @@ export function Prompt(props: PromptProps) {
onMouseDown={(r: MouseEvent) => r.target?.focus()}
focusedBackgroundColor={theme.backgroundElement}
cursorColor={theme.text}
selectionFg={theme.text}
selectionBg={theme.backgroundElement}
syntaxStyle={syntax()}
/>
<box flexDirection="row" flexShrink={0} paddingTop={1} gap={1} justifyContent="space-between">
Expand Down
2 changes: 2 additions & 0 deletions packages/opencode/src/cli/cmd/tui/routes/session/question.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,8 @@ export function QuestionPrompt(props: { request: QuestionRequest }) {
textColor={theme.text}
focusedTextColor={theme.text}
cursorColor={theme.primary}
selectionFg={theme.text}
selectionBg={theme.backgroundElement}
keyBindings={bindings()}
/>
</box>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ export function DialogExportOptions(props: DialogExportOptionsProps) {
})
}}
height={3}
selectionFg={theme.text}
selectionBg={theme.backgroundElement}
keyBindings={[{ name: "return", action: "submit" }]}
ref={(val: TextareaRenderable) => {
textarea = val
Expand Down
2 changes: 2 additions & 0 deletions packages/opencode/src/cli/cmd/tui/ui/dialog-prompt.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ export function DialogPrompt(props: DialogPromptProps) {
props.onConfirm?.(textarea.plainText)
}}
height={3}
selectionFg={theme.text}
selectionBg={theme.backgroundElement}
keyBindings={props.busy ? [] : [{ name: "return", action: "submit" }]}
ref={(val: TextareaRenderable) => {
textarea = val
Expand Down
3 changes: 3 additions & 0 deletions packages/opencode/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,9 @@ const InfoSchema = Schema.Struct({
).annotate({ description: "Voice input provider and model configuration." }),
experimental: Schema.optional(
Schema.Struct({
skip_claude_md: Schema.optional(Schema.Boolean).annotate({
description: "Skip reading ~/.claude/CLAUDE.md files.",
}),
disable_paste_summary: Schema.optional(Schema.Boolean),
batch_tool: Schema.optional(Schema.Boolean).annotate({ description: "Enable the batch tool" }),
openTelemetry: Schema.optional(Schema.Boolean).annotate({
Expand Down
14 changes: 9 additions & 5 deletions packages/opencode/src/session/instruction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ const FILES = [
// sparse and also load CLAUDE.md so its guidance isn't dropped by the first-match-wins rule.
const CLAUDE_FALLBACK_MAX_CHARS = 500

function globalFiles() {
function globalFiles(config: Config.Info) {
const files = []
if (Flag.MIMOCODE_CONFIG_DIR) {
files.push(path.join(Flag.MIMOCODE_CONFIG_DIR, "AGENTS.md"))
}
files.push(path.join(Global.Path.config, "AGENTS.md"))
if (!Flag.MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT) {
if (!Flag.MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT && !config.experimental?.skip_claude_md) {
files.push(path.join(os.homedir(), ".claude", "CLAUDE.md"))
}
return files
Expand Down Expand Up @@ -125,22 +125,24 @@ export const layer: Layer.Layer<Service, never, AppFileSystem.Service | Config.S
const config = yield* cfg.get()
const ctx = yield* InstanceState.context
const paths = new Set<string>()
const isClaudeDisabled = Flag.MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT || config.experimental?.skip_claude_md

// The first project-level match wins so we don't stack AGENTS.md/CLAUDE.md from every ancestor.
if (!Flag.MIMOCODE_DISABLE_PROJECT_CONFIG) {
const agents = yield* fs.findUp("AGENTS.md", ctx.directory, ctx.worktree)
if (agents.length > 0) {
agents.forEach((item) => paths.add(path.resolve(item)))
// A sparse AGENTS.md likely doesn't carry the full project guidance, so pull in CLAUDE.md too.
if (!Flag.MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT) {
if (!isClaudeDisabled) {
const content = (yield* Effect.forEach(agents, read, { concurrency: 8 })).join("").trim()
if (content.length < CLAUDE_FALLBACK_MAX_CHARS) {
const claude = yield* fs.findUp("CLAUDE.md", ctx.directory, ctx.worktree)
claude.forEach((item) => paths.add(path.resolve(item)))
}
}
} else {
for (const file of FILES) {
const filesToSearch = ["AGENTS.md", ...(isClaudeDisabled ? [] : ["CLAUDE.md"]), "CONTEXT.md"]
for (const file of filesToSearch) {
if (file === "AGENTS.md") continue
const matches = yield* fs.findUp(file, ctx.directory, ctx.worktree)
if (matches.length > 0) {
Expand All @@ -151,7 +153,9 @@ export const layer: Layer.Layer<Service, never, AppFileSystem.Service | Config.S
}
}

for (const file of globalFiles()) {
// We want stable ordering for resolving cache hits etc, so we sort project paths
const sortedPaths = Array.from(paths).sort()
for (const file of globalFiles(config)) {
if (yield* fs.existsSafe(file)) {
paths.add(path.resolve(file))
break
Expand Down
76 changes: 38 additions & 38 deletions packages/web/src/content/docs/ar/cli.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ opencode run --attach http://localhost:4096 "Explain async/await in JavaScript"
opencode serve
```

يشغّل هذا خادم HTTP يوفّر وصولا عبر API لوظائف opencode دون واجهة TUI. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
يشغّل هذا خادم HTTP يوفّر وصولا عبر API لوظائف opencode دون واجهة TUI. اضبط `MIMOCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).

#### الرايات

Expand Down Expand Up @@ -456,7 +456,7 @@ opencode import https://opncd.ai/s/abc123
opencode web
```

يشغّل هذا خادم HTTP ويفتح متصفح ويب للوصول إلى OpenCode عبر واجهة ويب. اضبط `OPENCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).
يشغّل هذا خادم HTTP ويفتح متصفح ويب للوصول إلى OpenCode عبر واجهة ويب. اضبط `MIMOCODE_SERVER_PASSWORD` لتفعيل مصادقة HTTP الأساسية (اسم المستخدم الافتراضي `opencode`).

#### الرايات

Expand Down Expand Up @@ -555,29 +555,29 @@ opencode upgrade v0.1.48

| المتغير | النوع | الوصف |
| ------------------------------------- | ------- | --------------------------------------------------------- |
| `OPENCODE_AUTO_SHARE` | boolean | مشاركة الجلسات تلقائيا |
| `OPENCODE_GIT_BASH_PATH` | string | مسار ملف Git Bash التنفيذي على Windows |
| `OPENCODE_CONFIG` | string | مسار ملف التهيئة |
| `OPENCODE_CONFIG_DIR` | string | مسار دليل التهيئة |
| `OPENCODE_CONFIG_CONTENT` | string | محتوى تهيئة JSON مُضمّن |
| `OPENCODE_DISABLE_AUTOUPDATE` | boolean | تعطيل التحقق التلقائي من التحديثات |
| `OPENCODE_DISABLE_PRUNE` | boolean | تعطيل تنقية البيانات القديمة |
| `OPENCODE_DISABLE_TERMINAL_TITLE` | boolean | تعطيل تحديث عنوان terminal تلقائيا |
| `OPENCODE_PERMISSION` | string | تهيئة أذونات JSON مُضمّنة |
| `OPENCODE_DISABLE_DEFAULT_PLUGINS` | boolean | تعطيل الإضافات الافتراضية |
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | boolean | تعطيل تنزيل خوادم LSP تلقائيا |
| `OPENCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | تفعيل النماذج التجريبية |
| `OPENCODE_DISABLE_AUTOCOMPACT` | boolean | تعطيل ضغط السياق تلقائيا |
| `OPENCODE_DISABLE_CLAUDE_CODE` | boolean | تعطيل القراءة من `.claude` (الموجه + المهارات) |
| `OPENCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | تعطيل قراءة `~/.claude/CLAUDE.md` |
| `OPENCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | تعطيل تحميل `.claude/skills` |
| `OPENCODE_DISABLE_MODELS_FETCH` | boolean | تعطيل جلب النماذج من مصادر بعيدة |
| `OPENCODE_FAKE_VCS` | string | مزود VCS وهمي لأغراض الاختبار |
| `OPENCODE_CLIENT` | string | معرّف العميل (الافتراضي `cli`) |
| `OPENCODE_ENABLE_EXA` | boolean | تفعيل أدوات بحث الويب من Exa |
| `OPENCODE_SERVER_PASSWORD` | string | تفعيل المصادقة الأساسية لخادمي `serve`/`web` |
| `OPENCODE_SERVER_USERNAME` | string | تجاوز اسم مستخدم المصادقة الأساسية (الافتراضي `opencode`) |
| `OPENCODE_MODELS_URL` | string | رابط مخصص لجلب تهيئة النماذج |
| `MIMOCODE_AUTO_SHARE` | boolean | مشاركة الجلسات تلقائيا |
| `MIMOCODE_GIT_BASH_PATH` | string | مسار ملف Git Bash التنفيذي على Windows |
| `MIMOCODE_CONFIG` | string | مسار ملف التهيئة |
| `MIMOCODE_CONFIG_DIR` | string | مسار دليل التهيئة |
| `MIMOCODE_CONFIG_CONTENT` | string | محتوى تهيئة JSON مُضمّن |
| `MIMOCODE_DISABLE_AUTOUPDATE` | boolean | تعطيل التحقق التلقائي من التحديثات |
| `MIMOCODE_DISABLE_PRUNE` | boolean | تعطيل تنقية البيانات القديمة |
| `MIMOCODE_DISABLE_TERMINAL_TITLE` | boolean | تعطيل تحديث عنوان terminal تلقائيا |
| `MIMOCODE_PERMISSION` | string | تهيئة أذونات JSON مُضمّنة |
| `MIMOCODE_DISABLE_DEFAULT_PLUGINS` | boolean | تعطيل الإضافات الافتراضية |
| `MIMOCODE_DISABLE_LSP_DOWNLOAD` | boolean | تعطيل تنزيل خوادم LSP تلقائيا |
| `MIMOCODE_ENABLE_EXPERIMENTAL_MODELS` | boolean | تفعيل النماذج التجريبية |
| `MIMOCODE_DISABLE_AUTOCOMPACT` | boolean | تعطيل ضغط السياق تلقائيا |
| `MIMOCODE_DISABLE_CLAUDE_CODE` | boolean | تعطيل القراءة من `.claude` (الموجه + المهارات) |
| `MIMOCODE_DISABLE_CLAUDE_CODE_PROMPT` | boolean | تعطيل قراءة `~/.claude/CLAUDE.md` |
| `MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS` | boolean | تعطيل تحميل `.claude/skills` |
| `MIMOCODE_DISABLE_MODELS_FETCH` | boolean | تعطيل جلب النماذج من مصادر بعيدة |
| `MIMOCODE_FAKE_VCS` | string | مزود VCS وهمي لأغراض الاختبار |
| `MIMOCODE_CLIENT` | string | معرّف العميل (الافتراضي `cli`) |
| `MIMOCODE_ENABLE_EXA` | boolean | تفعيل أدوات بحث الويب من Exa |
| `MIMOCODE_SERVER_PASSWORD` | string | تفعيل المصادقة الأساسية لخادمي `serve`/`web` |
| `MIMOCODE_SERVER_USERNAME` | string | تجاوز اسم مستخدم المصادقة الأساسية (الافتراضي `opencode`) |
| `MIMOCODE_MODELS_URL` | string | رابط مخصص لجلب تهيئة النماذج |

---

Expand All @@ -587,16 +587,16 @@ opencode upgrade v0.1.48

| المتغير | النوع | الوصف |
| ----------------------------------------------- | ------- | ------------------------------------------- |
| `OPENCODE_EXPERIMENTAL` | boolean | تفعيل جميع الميزات التجريبية |
| `OPENCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | تفعيل اكتشاف الأيقونات |
| `OPENCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | تعطيل النسخ عند التحديد في TUI |
| `OPENCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | المهلة الافتراضية لأوامر bash بالميلي ثانية |
| `OPENCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | الحد الأقصى لرموز المخرجات لاستجابات LLM |
| `OPENCODE_EXPERIMENTAL_FILEWATCHER` | boolean | تفعيل مراقب الملفات لكامل الدليل |
| `OPENCODE_EXPERIMENTAL_OXFMT` | boolean | تفعيل مُنسّق oxfmt |
| `OPENCODE_EXPERIMENTAL_LSP_TOOL` | boolean | تفعيل أداة LSP تجريبية |
| `OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | تعطيل مراقب الملفات |
| `OPENCODE_EXPERIMENTAL_EXA` | boolean | تفعيل ميزات Exa التجريبية |
| `OPENCODE_EXPERIMENTAL_LSP_TY` | boolean | تمكين TY LSP لملفات python |
| `OPENCODE_EXPERIMENTAL_MARKDOWN` | boolean | تفعيل ميزات markdown تجريبية |
| `OPENCODE_EXPERIMENTAL_PLAN_MODE` | boolean | تفعيل وضع الخطة |
| `MIMOCODE_EXPERIMENTAL` | boolean | تفعيل جميع الميزات التجريبية |
| `MIMOCODE_EXPERIMENTAL_ICON_DISCOVERY` | boolean | تفعيل اكتشاف الأيقونات |
| `MIMOCODE_EXPERIMENTAL_DISABLE_COPY_ON_SELECT` | boolean | تعطيل النسخ عند التحديد في TUI |
| `MIMOCODE_EXPERIMENTAL_BASH_DEFAULT_TIMEOUT_MS` | number | المهلة الافتراضية لأوامر bash بالميلي ثانية |
| `MIMOCODE_EXPERIMENTAL_OUTPUT_TOKEN_MAX` | number | الحد الأقصى لرموز المخرجات لاستجابات LLM |
| `MIMOCODE_EXPERIMENTAL_FILEWATCHER` | boolean | تفعيل مراقب الملفات لكامل الدليل |
| `MIMOCODE_EXPERIMENTAL_OXFMT` | boolean | تفعيل مُنسّق oxfmt |
| `MIMOCODE_EXPERIMENTAL_LSP_TOOL` | boolean | تفعيل أداة LSP تجريبية |
| `MIMOCODE_EXPERIMENTAL_DISABLE_FILEWATCHER` | boolean | تعطيل مراقب الملفات |
| `MIMOCODE_EXPERIMENTAL_EXA` | boolean | تفعيل ميزات Exa التجريبية |
| `MIMOCODE_EXPERIMENTAL_LSP_TY` | boolean | تمكين TY LSP لملفات python |
| `MIMOCODE_EXPERIMENTAL_MARKDOWN` | boolean | تفعيل ميزات markdown تجريبية |
| `MIMOCODE_EXPERIMENTAL_PLAN_MODE` | boolean | تفعيل وضع الخطة |
Loading
Loading