rird 2.1.231 → 2.3.0
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/AGENTS.md +86 -0
- package/COMPLETED_TEST_SUITE.txt +280 -0
- package/Dockerfile +18 -0
- package/README.md +397 -6
- package/RIRD_ERROR_HANDLING_SUMMARY.md +307 -0
- package/TESTING.md +512 -0
- package/TEST_IMPLEMENTATION_REPORT.md +463 -0
- package/TEST_SUITE.md +307 -0
- package/TEST_SUMMARY.txt +380 -0
- package/bin/rird-perf.js +37 -0
- package/bin/rird.js +43 -8
- package/bunfig.toml +4 -0
- package/create-wrapper.ps1 +51 -0
- package/docs/ARCHITECTURE.md +768 -0
- package/docs/CLI_REFERENCE.md +681 -0
- package/docs/DOCUMENTATION_MANIFEST.md +392 -0
- package/docs/INDEX.md +295 -0
- package/docs/PRODUCTION_SETUP.md +633 -0
- package/docs/TROUBLESHOOTING.md +914 -0
- package/facebook_ads_library.png +0 -0
- package/nul +0 -0
- package/nul`nif +0 -0
- package/package.json +104 -15
- package/parsers-config.ts +239 -0
- package/rird-1.0.199.tgz +0 -0
- package/rird-1.0.205.tgz +0 -0
- package/script/build-windows.ts +56 -0
- package/script/build.ts +165 -0
- package/{postinstall.mjs → script/postinstall.mjs} +47 -68
- package/script/publish-registries.ts +187 -0
- package/script/publish.ts +85 -0
- package/script/schema.ts +47 -0
- package/src/acp/README.md +164 -0
- package/src/acp/agent.ts +1063 -0
- package/src/acp/session.ts +101 -0
- package/src/acp/types.ts +22 -0
- package/src/agent/agent.ts +367 -0
- package/src/agent/generate.txt +75 -0
- package/src/agent/prompt/compaction.txt +12 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +10 -0
- package/src/agent/prompt/title.txt +36 -0
- package/src/auth/index.ts +70 -0
- package/src/bun/index.ts +114 -0
- package/src/bus/bus-event.ts +43 -0
- package/src/bus/global.ts +10 -0
- package/src/bus/index.ts +105 -0
- package/src/cli/bootstrap.ts +17 -0
- package/src/cli/cmd/acp.ts +104 -0
- package/src/cli/cmd/activate.ts +50 -0
- package/src/cli/cmd/agent.ts +256 -0
- package/src/cli/cmd/auth.ts +412 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/debug/config.ts +15 -0
- package/src/cli/cmd/debug/file.ts +91 -0
- package/src/cli/cmd/debug/index.ts +43 -0
- package/src/cli/cmd/debug/lsp.ts +48 -0
- package/src/cli/cmd/debug/ripgrep.ts +83 -0
- package/src/cli/cmd/debug/scrap.ts +15 -0
- package/src/cli/cmd/debug/skill.ts +15 -0
- package/src/cli/cmd/debug/snapshot.ts +48 -0
- package/src/cli/cmd/export.ts +88 -0
- package/src/cli/cmd/generate.ts +38 -0
- package/src/cli/cmd/github.ts +1400 -0
- package/src/cli/cmd/import.ts +98 -0
- package/src/cli/cmd/mcp.ts +654 -0
- package/src/cli/cmd/models.ts +68 -0
- package/src/cli/cmd/pr.ts +112 -0
- package/src/cli/cmd/run.ts +434 -0
- package/src/cli/cmd/serve.ts +31 -0
- package/src/cli/cmd/session.ts +106 -0
- package/src/cli/cmd/stats.ts +298 -0
- package/src/cli/cmd/tui/app.tsx +694 -0
- package/src/cli/cmd/tui/attach.ts +30 -0
- package/src/cli/cmd/tui/component/border.tsx +21 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-command.tsx +124 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +236 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +240 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +102 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +162 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
- package/src/cli/cmd/tui/component/did-you-know.tsx +85 -0
- package/src/cli/cmd/tui/component/logo.tsx +48 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +574 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1087 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
- package/src/cli/cmd/tui/component/tips.ts +27 -0
- package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
- package/src/cli/cmd/tui/context/args.tsx +14 -0
- package/src/cli/cmd/tui/context/directory.ts +13 -0
- package/src/cli/cmd/tui/context/exit.tsx +23 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/keybind.tsx +101 -0
- package/src/cli/cmd/tui/context/kv.tsx +49 -0
- package/src/cli/cmd/tui/context/local.tsx +345 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +46 -0
- package/src/cli/cmd/tui/context/sdk.tsx +74 -0
- package/src/cli/cmd/tui/context/sync.tsx +372 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +95 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +227 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
- package/src/cli/cmd/tui/context/theme/orng.json +245 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/rird.json +245 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme.tsx +1109 -0
- package/src/cli/cmd/tui/event.ts +40 -0
- package/src/cli/cmd/tui/hooks/use-safe-terminal-dimensions.ts +12 -0
- package/src/cli/cmd/tui/routes/home.tsx +138 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +64 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +109 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +26 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +88 -0
- package/src/cli/cmd/tui/routes/session/header.tsx +125 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +1876 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +320 -0
- package/src/cli/cmd/tui/spawn.ts +60 -0
- package/src/cli/cmd/tui/thread.ts +142 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +77 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +333 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +171 -0
- package/src/cli/cmd/tui/ui/spinner.ts +368 -0
- package/src/cli/cmd/tui/ui/toast.tsx +100 -0
- package/src/cli/cmd/tui/util/clipboard.ts +127 -0
- package/src/cli/cmd/tui/util/editor.ts +32 -0
- package/src/cli/cmd/tui/util/terminal.ts +146 -0
- package/src/cli/cmd/tui/worker.ts +63 -0
- package/src/cli/cmd/uninstall.ts +344 -0
- package/src/cli/cmd/upgrade.ts +127 -0
- package/src/cli/cmd/web.ts +84 -0
- package/src/cli/error.ts +69 -0
- package/src/cli/ui.ts +101 -0
- package/src/cli/upgrade.ts +28 -0
- package/src/command/index.ts +80 -0
- package/src/command/template/initialize.txt +10 -0
- package/src/command/template/review.txt +97 -0
- package/src/config/config.ts +994 -0
- package/src/config/markdown.ts +41 -0
- package/src/env/index.ts +26 -0
- package/src/file/ignore.ts +83 -0
- package/src/file/index.ts +328 -0
- package/src/file/ripgrep.ts +393 -0
- package/src/file/time.ts +64 -0
- package/src/file/watcher.ts +103 -0
- package/src/flag/flag.ts +84 -0
- package/src/format/formatter.ts +315 -0
- package/src/format/index.ts +137 -0
- package/src/global/index.ts +101 -0
- package/src/id/id.ts +73 -0
- package/src/ide/index.ts +76 -0
- package/src/index.ts +297 -0
- package/src/index.ts.backup +271 -0
- package/src/installation/index.ts +258 -0
- package/src/lib/IMPLEMENTATION_NOTES.md +345 -0
- package/src/lib/error-handler.ts +225 -0
- package/src/lib/error-testing-guide.md +258 -0
- package/src/lib/errors.ts +285 -0
- package/src/lib/performance.ts +70 -0
- package/src/lib/telemetry.ts +282 -0
- package/src/lsp/client.ts +229 -0
- package/src/lsp/index.ts +485 -0
- package/src/lsp/language.ts +116 -0
- package/src/lsp/server.ts +1895 -0
- package/src/mcp/auth.ts +135 -0
- package/src/mcp/index.ts +1117 -0
- package/src/mcp/intent-analyzer.ts +376 -0
- package/src/mcp/oauth-callback.ts +200 -0
- package/src/mcp/oauth-provider.ts +154 -0
- package/src/patch/index.ts +632 -0
- package/src/permission/index.ts +199 -0
- package/src/plugin/index.ts +91 -0
- package/src/project/bootstrap.ts +33 -0
- package/src/project/instance.ts +78 -0
- package/src/project/project.ts +236 -0
- package/src/project/state.ts +65 -0
- package/src/project/vcs.ts +76 -0
- package/src/provider/auth.ts +143 -0
- package/src/provider/models-macro.ts +55 -0
- package/src/provider/models.ts +161 -0
- package/src/provider/provider.ts +1109 -0
- package/src/provider/sdk/openai-compatible/src/README.md +5 -0
- package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
- package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +100 -0
- package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
- package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1713 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
- package/src/provider/transform.ts +455 -0
- package/src/pty/index.ts +231 -0
- package/src/security/guardrails.test.ts +341 -0
- package/src/security/guardrails.ts +570 -0
- package/src/security/index.ts +19 -0
- package/src/server/error.ts +36 -0
- package/src/server/project.ts +79 -0
- package/src/server/server.ts +2641 -0
- package/src/server/tui.ts +71 -0
- package/src/session/compaction.ts +228 -0
- package/src/session/index.ts +464 -0
- package/src/session/llm.ts +201 -0
- package/src/session/message-v2.ts +695 -0
- package/src/session/message.ts +189 -0
- package/src/session/processor.ts +409 -0
- package/src/session/prompt/act-switch.txt +5 -0
- package/src/session/prompt/anthropic-20250930.txt +166 -0
- package/src/session/prompt/anthropic.txt +63 -0
- package/src/session/prompt/anthropic_spoof.txt +1 -0
- package/src/session/prompt/beast.txt +76 -0
- package/src/session/prompt/codex.txt +304 -0
- package/src/session/prompt/copilot-gpt-5.txt +137 -0
- package/src/session/prompt/gemini.txt +62 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +35 -0
- package/src/session/prompt/plan.txt +24 -0
- package/src/session/prompt/polaris.txt +88 -0
- package/src/session/prompt/qwen.txt +59 -0
- package/src/session/prompt.ts +1552 -0
- package/src/session/retry.ts +86 -0
- package/src/session/revert.ts +108 -0
- package/src/session/sensitive-filter.test.ts +327 -0
- package/src/session/sensitive-filter.ts +466 -0
- package/src/session/status.ts +76 -0
- package/src/session/summary.ts +209 -0
- package/src/session/system.ts +122 -0
- package/src/session/todo.ts +37 -0
- package/src/share/share-next.ts +222 -0
- package/src/share/share.ts +87 -0
- package/src/shell/shell.ts +67 -0
- package/src/skill/index.ts +1 -0
- package/src/skill/skill.ts +83 -0
- package/src/snapshot/index.ts +197 -0
- package/src/storage/storage.ts +226 -0
- package/src/tests/agent.test.ts +308 -0
- package/src/tests/build-guards.test.ts +267 -0
- package/src/tests/config.test.ts +664 -0
- package/src/tests/tool-registry.test.ts +589 -0
- package/src/tool/bash.ts +314 -0
- package/src/tool/bash.txt +158 -0
- package/src/tool/batch.ts +175 -0
- package/src/tool/batch.txt +24 -0
- package/src/tool/codesearch.ts +184 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/edit.ts +675 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/glob.ts +65 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +121 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +17 -0
- package/src/tool/ls.ts +110 -0
- package/src/tool/ls.txt +1 -0
- package/src/tool/lsp-diagnostics.ts +26 -0
- package/src/tool/lsp-diagnostics.txt +1 -0
- package/src/tool/lsp-hover.ts +31 -0
- package/src/tool/lsp-hover.txt +1 -0
- package/src/tool/lsp.ts +87 -0
- package/src/tool/lsp.txt +19 -0
- package/src/tool/multiedit.ts +46 -0
- package/src/tool/multiedit.txt +41 -0
- package/src/tool/patch.ts +233 -0
- package/src/tool/patch.txt +1 -0
- package/src/tool/read.ts +219 -0
- package/src/tool/read.txt +12 -0
- package/src/tool/registry.ts +162 -0
- package/src/tool/skill.ts +100 -0
- package/src/tool/task.ts +136 -0
- package/src/tool/task.txt +51 -0
- package/src/tool/todo.ts +39 -0
- package/src/tool/todoread.txt +14 -0
- package/src/tool/todowrite.txt +167 -0
- package/src/tool/tool.ts +71 -0
- package/src/tool/webfetch.ts +198 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +268 -0
- package/src/tool/websearch.txt +13 -0
- package/src/tool/write.ts +110 -0
- package/src/tool/write.txt +8 -0
- package/src/util/archive.ts +16 -0
- package/src/util/color.ts +19 -0
- package/src/util/context.ts +25 -0
- package/src/util/defer.ts +12 -0
- package/src/util/eventloop.ts +20 -0
- package/src/util/filesystem.ts +83 -0
- package/src/util/fn.ts +11 -0
- package/src/util/iife.ts +3 -0
- package/src/util/keybind.ts +102 -0
- package/src/util/lazy.ts +11 -0
- package/src/util/license.ts +362 -0
- package/src/util/locale.ts +81 -0
- package/src/util/lock.ts +98 -0
- package/src/util/log.ts +180 -0
- package/src/util/queue.ts +32 -0
- package/src/util/rpc.ts +42 -0
- package/src/util/scrap.ts +10 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +14 -0
- package/src/util/token.ts +7 -0
- package/src/util/wildcard.ts +54 -0
- package/sst-env.d.ts +9 -0
- package/test/agent/agent.test.ts +146 -0
- package/test/bun.test.ts +53 -0
- package/test/cli/cmd/acp.test.ts +144 -0
- package/test/cli/cmd/run.test.ts +250 -0
- package/test/cli/github-remote.test.ts +80 -0
- package/test/config/agent-color.test.ts +66 -0
- package/test/config/config.test.ts +536 -0
- package/test/config/markdown.test.ts +89 -0
- package/test/file/ignore.test.ts +10 -0
- package/test/fixture/fixture.ts +37 -0
- package/test/fixture/lsp/fake-lsp-server.js +77 -0
- package/test/helpers.ts +172 -0
- package/test/ide/ide.test.ts +82 -0
- package/test/installation/installation.test.ts +143 -0
- package/test/keybind.test.ts +421 -0
- package/test/lsp/client.test.ts +95 -0
- package/test/mcp/headers.test.ts +153 -0
- package/test/patch/patch.test.ts +348 -0
- package/test/preload.ts +57 -0
- package/test/project/project.test.ts +74 -0
- package/test/provider/provider.test.ts +74 -0
- package/test/provider/transform.test.ts +411 -0
- package/test/session/retry.test.ts +111 -0
- package/test/session/session.test.ts +71 -0
- package/test/skill/skill.test.ts +131 -0
- package/test/snapshot/snapshot.test.ts +940 -0
- package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
- package/test/tool/bash.test.ts +434 -0
- package/test/tool/grep.test.ts +108 -0
- package/test/tool/patch.test.ts +259 -0
- package/test/tool/read.test.ts +42 -0
- package/test/util/iife.test.ts +36 -0
- package/test/util/lazy.test.ts +50 -0
- package/test/util/license.test.ts +235 -0
- package/test/util/timeout.test.ts +21 -0
- package/test/util/wildcard.test.ts +55 -0
- package/tsconfig.json +16 -0
- package/update-versions.ps1 +65 -0
|
@@ -19,7 +19,7 @@ const RIRD_HOME = process.env.RIRD_HOME || path.join(os.homedir(), ".rird")
|
|
|
19
19
|
const BIN_DIR = path.join(RIRD_HOME, "bin")
|
|
20
20
|
const ENGINE_DIR = path.join(RIRD_HOME, "engine")
|
|
21
21
|
const VENV_DIR = path.join(RIRD_HOME, "venv")
|
|
22
|
-
const MCP_DIR = path.join(ENGINE_DIR, "
|
|
22
|
+
const MCP_DIR = path.join(ENGINE_DIR, "chrome-browser-mcp")
|
|
23
23
|
|
|
24
24
|
// Installation mode: A = Browser + Files, B = Full Computer Use
|
|
25
25
|
const INSTALL_MODE = process.env.RIRD_MODE || "A"
|
|
@@ -96,20 +96,20 @@ function installPythonDeps(pipCmd) {
|
|
|
96
96
|
execSafe(`${pipCmd} install --user ${deps.join(" ")}`, { stdio: "inherit" })
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
// Clone
|
|
100
|
-
function
|
|
99
|
+
// Clone browser MCP (Chrome)
|
|
100
|
+
function cloneChromeBrowserMcp() {
|
|
101
101
|
if (fs.existsSync(MCP_DIR)) {
|
|
102
|
-
log("
|
|
102
|
+
log("Chrome browser integration already installed")
|
|
103
103
|
return true
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
log("
|
|
106
|
+
log("Installing Chrome browser integration...")
|
|
107
107
|
|
|
108
108
|
// Try git clone
|
|
109
109
|
if (execSafe("git --version")) {
|
|
110
110
|
const result = execSafe(`git clone --depth 1 https://github.com/vibheksoni/stealth-browser-mcp "${MCP_DIR}"`, { stdio: "inherit" })
|
|
111
111
|
if (result !== null || fs.existsSync(MCP_DIR)) {
|
|
112
|
-
log("
|
|
112
|
+
log("Chrome browser integration installed")
|
|
113
113
|
return true
|
|
114
114
|
}
|
|
115
115
|
}
|
|
@@ -119,8 +119,8 @@ function cloneStealthBrowserMcp() {
|
|
|
119
119
|
// Create placeholder for now
|
|
120
120
|
fs.mkdirSync(path.join(MCP_DIR, "src"), { recursive: true })
|
|
121
121
|
fs.writeFileSync(path.join(MCP_DIR, "src", "server.py"), `#!/usr/bin/env python3
|
|
122
|
-
# Placeholder -
|
|
123
|
-
print("
|
|
122
|
+
# Placeholder - install the Chrome browser integration repo into ~/.rird/engine/chrome-browser-mcp
|
|
123
|
+
print("Chrome browser integration not installed. Install Git and re-run setup.")
|
|
124
124
|
`)
|
|
125
125
|
return false
|
|
126
126
|
}
|
|
@@ -254,7 +254,7 @@ function createConfig(pythonCmd) {
|
|
|
254
254
|
log(`Creating config (Mode ${INSTALL_MODE})...`)
|
|
255
255
|
|
|
256
256
|
const mcpConfig = {
|
|
257
|
-
"
|
|
257
|
+
"chrome-browser": {
|
|
258
258
|
type: "local",
|
|
259
259
|
command: [pythonCmd, path.join(MCP_DIR, "src", "server.py"), "--minimal"],
|
|
260
260
|
environment: {
|
|
@@ -311,28 +311,18 @@ function createConfig(pythonCmd) {
|
|
|
311
311
|
"",
|
|
312
312
|
"=== RESEARCH STRATEGY ===",
|
|
313
313
|
"For ANY task that asks to 'find URLs', 'output URLs', 'list profiles', or 'get X items':",
|
|
314
|
-
"1. ALWAYS START with
|
|
315
|
-
"2. Only fall back to
|
|
314
|
+
"1. ALWAYS START with web search - it is instant.",
|
|
315
|
+
"2. Only fall back to Chrome if search fails or task requires interaction (login, forms).",
|
|
316
316
|
"",
|
|
317
317
|
"=== TOOL PRIORITY ===",
|
|
318
|
-
"1.
|
|
319
|
-
"2.
|
|
320
|
-
"3.
|
|
318
|
+
"1. Web search: Use for finding URLs, profiles, and public info.",
|
|
319
|
+
"2. Chrome browser: Use for interaction, scrolling, and map searching.",
|
|
320
|
+
"3. Desktop control: Use for desktop applications when enabled.",
|
|
321
321
|
"",
|
|
322
322
|
"=== HOW I WORK ===",
|
|
323
|
-
"1. WEB SEARCH:",
|
|
324
|
-
"
|
|
325
|
-
"
|
|
326
|
-
"",
|
|
327
|
-
"2. BROWSER AUTOMATION:",
|
|
328
|
-
" - Navigating to websites and interacting with them",
|
|
329
|
-
" - Logging into accounts and filling forms",
|
|
330
|
-
" - Extracting content from web pages",
|
|
331
|
-
"",
|
|
332
|
-
"3. COMPUTER CONTROL:",
|
|
333
|
-
" - Desktop applications and system tasks",
|
|
334
|
-
" - Mouse and keyboard automation",
|
|
335
|
-
" - File and folder operations"
|
|
323
|
+
"1. WEB SEARCH: Finding URLs, quick facts, lists of companies or profiles",
|
|
324
|
+
"2. CHROME BROWSER: Navigating, logging in, filling forms, extracting content",
|
|
325
|
+
"3. DESKTOP CONTROL: Applications, mouse/keyboard automation, file operations"
|
|
336
326
|
]
|
|
337
327
|
: [
|
|
338
328
|
"=== RIRD AI - rird.ai ===",
|
|
@@ -346,76 +336,65 @@ function createConfig(pythonCmd) {
|
|
|
346
336
|
"",
|
|
347
337
|
"=== RESEARCH STRATEGY ===",
|
|
348
338
|
"For ANY task that asks to 'find URLs', 'output URLs', 'list profiles', or 'get X items':",
|
|
349
|
-
"1. ALWAYS START with
|
|
350
|
-
"2. Only fall back to
|
|
339
|
+
"1. ALWAYS START with web search - it is instant.",
|
|
340
|
+
"2. Only fall back to Chrome if search fails or task requires interaction (login, forms).",
|
|
351
341
|
"",
|
|
352
342
|
"=== TOOL PRIORITY ===",
|
|
353
|
-
"1.
|
|
354
|
-
"2.
|
|
343
|
+
"1. Web search: Use for finding URLs, profiles, and public info.",
|
|
344
|
+
"2. Chrome browser: Use for interaction, scrolling, and map searching.",
|
|
355
345
|
"",
|
|
356
346
|
"=== HOW I WORK ===",
|
|
357
|
-
"1. WEB SEARCH:",
|
|
358
|
-
"
|
|
359
|
-
" - Fast lookups that don't require visiting a page",
|
|
360
|
-
"",
|
|
361
|
-
"2. BROWSER AUTOMATION:",
|
|
362
|
-
" - Navigating to websites and interacting with them",
|
|
363
|
-
" - Logging into accounts and filling forms",
|
|
364
|
-
" - Extracting content from web pages"
|
|
347
|
+
"1. WEB SEARCH: Finding URLs, quick facts, lists of companies or profiles",
|
|
348
|
+
"2. CHROME BROWSER: Navigating, logging in, filling forms, extracting content"
|
|
365
349
|
]
|
|
366
350
|
|
|
367
351
|
const config = {
|
|
368
|
-
model: "
|
|
369
|
-
small_model: "
|
|
370
|
-
visionModel: "
|
|
352
|
+
model: "rird/qwen3:8b",
|
|
353
|
+
small_model: "rird/deepseek-reasoner",
|
|
354
|
+
visionModel: "rird/qwen2.5-vl-7b",
|
|
371
355
|
agent: {
|
|
372
|
-
plan: { model: "
|
|
373
|
-
build: { model: "
|
|
356
|
+
plan: { model: "rird/deepseek-reasoner" },
|
|
357
|
+
build: { model: "rird/qwen3:8b" }
|
|
374
358
|
},
|
|
375
359
|
provider: {
|
|
376
|
-
|
|
360
|
+
rird: {
|
|
377
361
|
models: {
|
|
378
362
|
"deepseek-reasoner": {
|
|
379
363
|
id: "deepseek-reasoner",
|
|
380
|
-
name: "
|
|
381
|
-
release_date: "
|
|
364
|
+
name: "Planner",
|
|
365
|
+
release_date: "2025-01-01",
|
|
382
366
|
attachment: true,
|
|
383
367
|
reasoning: true,
|
|
384
368
|
temperature: true,
|
|
385
369
|
tool_call: true,
|
|
386
|
-
limit: { context:
|
|
370
|
+
limit: { context: 32768, output: 8192 },
|
|
387
371
|
options: {}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
models: {
|
|
394
|
-
"Qwen/Qwen3-8B": {
|
|
395
|
-
id: "Qwen/Qwen3-8B",
|
|
396
|
-
name: "Qwen 3 8B",
|
|
397
|
-
release_date: "2024-12-26",
|
|
372
|
+
},
|
|
373
|
+
"qwen3:8b": {
|
|
374
|
+
id: "qwen3:8b",
|
|
375
|
+
name: "Actor",
|
|
376
|
+
release_date: "2025-01-01",
|
|
398
377
|
attachment: true,
|
|
399
378
|
reasoning: false,
|
|
400
379
|
temperature: true,
|
|
401
380
|
tool_call: true,
|
|
402
|
-
limit: { context:
|
|
381
|
+
limit: { context: 32768, output: 8192 },
|
|
403
382
|
options: {}
|
|
404
383
|
},
|
|
405
|
-
"
|
|
406
|
-
id: "
|
|
407
|
-
name: "
|
|
408
|
-
release_date: "
|
|
384
|
+
"qwen2.5-vl-7b": {
|
|
385
|
+
id: "qwen2.5-vl-7b",
|
|
386
|
+
name: "Vision",
|
|
387
|
+
release_date: "2025-01-01",
|
|
409
388
|
attachment: true,
|
|
410
389
|
reasoning: false,
|
|
411
390
|
temperature: true,
|
|
412
391
|
tool_call: true,
|
|
413
|
-
limit: { context:
|
|
392
|
+
limit: { context: 32768, output: 8192 },
|
|
414
393
|
modalities: { input: ["text", "image"], output: ["text"] },
|
|
415
394
|
options: {}
|
|
416
395
|
}
|
|
417
396
|
},
|
|
418
|
-
options: {
|
|
397
|
+
options: { baseURL: "https://rird.ai/api/llm/v1" }
|
|
419
398
|
}
|
|
420
399
|
},
|
|
421
400
|
instructions,
|
|
@@ -471,7 +450,7 @@ function installComputerUseMcp() {
|
|
|
471
450
|
function findBinary() {
|
|
472
451
|
const { platform, arch } = detectPlatformAndArch()
|
|
473
452
|
const packageName = `rird-${platform}-${arch}`
|
|
474
|
-
const binaryName = platform === "windows" ? "
|
|
453
|
+
const binaryName = platform === "windows" ? "rird.exe" : "rird"
|
|
475
454
|
|
|
476
455
|
try {
|
|
477
456
|
const packageJsonPath = require.resolve(`${packageName}/package.json`)
|
|
@@ -524,8 +503,8 @@ async function main() {
|
|
|
524
503
|
}
|
|
525
504
|
}
|
|
526
505
|
|
|
527
|
-
//
|
|
528
|
-
|
|
506
|
+
// Install browser MCP (Chrome)
|
|
507
|
+
cloneChromeBrowserMcp()
|
|
529
508
|
|
|
530
509
|
// Create license validator
|
|
531
510
|
createLicenseValidator()
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { $ } from "bun"
|
|
3
|
+
import { Script } from "@opencode-ai/script"
|
|
4
|
+
|
|
5
|
+
if (!Script.preview) {
|
|
6
|
+
// Calculate SHA values
|
|
7
|
+
const arm64Sha = await $`sha256sum ./dist/opencode-linux-arm64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
8
|
+
const x64Sha = await $`sha256sum ./dist/opencode-linux-x64.tar.gz | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
9
|
+
const macX64Sha = await $`sha256sum ./dist/opencode-darwin-x64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
10
|
+
const macArm64Sha = await $`sha256sum ./dist/opencode-darwin-arm64.zip | cut -d' ' -f1`.text().then((x) => x.trim())
|
|
11
|
+
|
|
12
|
+
const [pkgver, _subver = ""] = Script.version.split(/(-.*)/, 2)
|
|
13
|
+
|
|
14
|
+
// arch
|
|
15
|
+
const binaryPkgbuild = [
|
|
16
|
+
"# Maintainer: dax",
|
|
17
|
+
"# Maintainer: adam",
|
|
18
|
+
"",
|
|
19
|
+
"pkgname='opencode-bin'",
|
|
20
|
+
`pkgver=${pkgver}`,
|
|
21
|
+
`_subver=${_subver}`,
|
|
22
|
+
"options=('!debug' '!strip')",
|
|
23
|
+
"pkgrel=1",
|
|
24
|
+
"pkgdesc='The AI Browser Agent built for the terminal.'",
|
|
25
|
+
"url='https://github.com/sst/opencode'",
|
|
26
|
+
"arch=('aarch64' 'x86_64')",
|
|
27
|
+
"license=('MIT')",
|
|
28
|
+
"provides=('opencode')",
|
|
29
|
+
"conflicts=('opencode')",
|
|
30
|
+
"depends=('ripgrep')",
|
|
31
|
+
"",
|
|
32
|
+
`source_aarch64=("\${pkgname}_\${pkgver}_aarch64.tar.gz::https://github.com/sst/opencode/releases/download/v\${pkgver}\${_subver}/opencode-linux-arm64.tar.gz")`,
|
|
33
|
+
`sha256sums_aarch64=('${arm64Sha}')`,
|
|
34
|
+
|
|
35
|
+
`source_x86_64=("\${pkgname}_\${pkgver}_x86_64.tar.gz::https://github.com/sst/opencode/releases/download/v\${pkgver}\${_subver}/opencode-linux-x64.tar.gz")`,
|
|
36
|
+
`sha256sums_x86_64=('${x64Sha}')`,
|
|
37
|
+
"",
|
|
38
|
+
"package() {",
|
|
39
|
+
' install -Dm755 ./opencode "${pkgdir}/usr/bin/opencode"',
|
|
40
|
+
"}",
|
|
41
|
+
"",
|
|
42
|
+
].join("\n")
|
|
43
|
+
|
|
44
|
+
// Source-based PKGBUILD for opencode
|
|
45
|
+
const sourcePkgbuild = [
|
|
46
|
+
"# Maintainer: dax",
|
|
47
|
+
"# Maintainer: adam",
|
|
48
|
+
"",
|
|
49
|
+
"pkgname='opencode'",
|
|
50
|
+
`pkgver=${pkgver}`,
|
|
51
|
+
`_subver=${_subver}`,
|
|
52
|
+
"options=('!debug' '!strip')",
|
|
53
|
+
"pkgrel=1",
|
|
54
|
+
"pkgdesc='The AI Browser Agent built for the terminal.'",
|
|
55
|
+
"url='https://github.com/sst/opencode'",
|
|
56
|
+
"arch=('aarch64' 'x86_64')",
|
|
57
|
+
"license=('MIT')",
|
|
58
|
+
"provides=('opencode')",
|
|
59
|
+
"conflicts=('opencode-bin')",
|
|
60
|
+
"depends=('ripgrep')",
|
|
61
|
+
"makedepends=('git' 'bun-bin' 'go')",
|
|
62
|
+
"",
|
|
63
|
+
`source=("opencode-\${pkgver}.tar.gz::https://github.com/sst/opencode/archive/v\${pkgver}\${_subver}.tar.gz")`,
|
|
64
|
+
`sha256sums=('SKIP')`,
|
|
65
|
+
"",
|
|
66
|
+
"build() {",
|
|
67
|
+
` cd "opencode-\${pkgver}"`,
|
|
68
|
+
` bun install`,
|
|
69
|
+
" cd ./packages/opencode",
|
|
70
|
+
` OPENCODE_CHANNEL=latest OPENCODE_VERSION=${pkgver} bun run ./script/build.ts --single`,
|
|
71
|
+
"}",
|
|
72
|
+
"",
|
|
73
|
+
"package() {",
|
|
74
|
+
` cd "opencode-\${pkgver}/packages/opencode"`,
|
|
75
|
+
' mkdir -p "${pkgdir}/usr/bin"',
|
|
76
|
+
' target_arch="x64"',
|
|
77
|
+
' case "$CARCH" in',
|
|
78
|
+
' x86_64) target_arch="x64" ;;',
|
|
79
|
+
' aarch64) target_arch="arm64" ;;',
|
|
80
|
+
' *) printf "unsupported architecture: %s\\n" "$CARCH" >&2 ; return 1 ;;',
|
|
81
|
+
" esac",
|
|
82
|
+
' libc=""',
|
|
83
|
+
" if command -v ldd >/dev/null 2>&1; then",
|
|
84
|
+
" if ldd --version 2>&1 | grep -qi musl; then",
|
|
85
|
+
' libc="-musl"',
|
|
86
|
+
" fi",
|
|
87
|
+
" fi",
|
|
88
|
+
' if [ -z "$libc" ] && ls /lib/ld-musl-* >/dev/null 2>&1; then',
|
|
89
|
+
' libc="-musl"',
|
|
90
|
+
" fi",
|
|
91
|
+
' base=""',
|
|
92
|
+
' if [ "$target_arch" = "x64" ]; then',
|
|
93
|
+
" if ! grep -qi avx2 /proc/cpuinfo 2>/dev/null; then",
|
|
94
|
+
' base="-baseline"',
|
|
95
|
+
" fi",
|
|
96
|
+
" fi",
|
|
97
|
+
' bin="dist/opencode-linux-${target_arch}${base}${libc}/bin/opencode"',
|
|
98
|
+
' if [ ! -f "$bin" ]; then',
|
|
99
|
+
' printf "unable to find binary for %s%s%s\\n" "$target_arch" "$base" "$libc" >&2',
|
|
100
|
+
" return 1",
|
|
101
|
+
" fi",
|
|
102
|
+
' install -Dm755 "$bin" "${pkgdir}/usr/bin/opencode"',
|
|
103
|
+
"}",
|
|
104
|
+
"",
|
|
105
|
+
].join("\n")
|
|
106
|
+
|
|
107
|
+
for (const [pkg, pkgbuild] of [
|
|
108
|
+
["opencode-bin", binaryPkgbuild],
|
|
109
|
+
["opencode", sourcePkgbuild],
|
|
110
|
+
]) {
|
|
111
|
+
for (let i = 0; i < 30; i++) {
|
|
112
|
+
try {
|
|
113
|
+
await $`rm -rf ./dist/aur-${pkg}`
|
|
114
|
+
await $`git clone ssh://aur@aur.archlinux.org/${pkg}.git ./dist/aur-${pkg}`
|
|
115
|
+
await $`cd ./dist/aur-${pkg} && git checkout master`
|
|
116
|
+
await Bun.file(`./dist/aur-${pkg}/PKGBUILD`).write(pkgbuild)
|
|
117
|
+
await $`cd ./dist/aur-${pkg} && makepkg --printsrcinfo > .SRCINFO`
|
|
118
|
+
await $`cd ./dist/aur-${pkg} && git add PKGBUILD .SRCINFO`
|
|
119
|
+
await $`cd ./dist/aur-${pkg} && git commit -m "Update to v${Script.version}"`
|
|
120
|
+
await $`cd ./dist/aur-${pkg} && git push`
|
|
121
|
+
break
|
|
122
|
+
} catch (e) {
|
|
123
|
+
continue
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Homebrew formula
|
|
129
|
+
const homebrewFormula = [
|
|
130
|
+
"# typed: false",
|
|
131
|
+
"# frozen_string_literal: true",
|
|
132
|
+
"",
|
|
133
|
+
"# This file was generated by GoReleaser. DO NOT EDIT.",
|
|
134
|
+
"class Opencode < Formula",
|
|
135
|
+
` desc "The AI Browser Agent built for the terminal."`,
|
|
136
|
+
` homepage "https://github.com/sst/opencode"`,
|
|
137
|
+
` version "${Script.version.split("-")[0]}"`,
|
|
138
|
+
"",
|
|
139
|
+
` depends_on "ripgrep"`,
|
|
140
|
+
"",
|
|
141
|
+
" on_macos do",
|
|
142
|
+
" if Hardware::CPU.intel?",
|
|
143
|
+
` url "https://github.com/sst/opencode/releases/download/v${Script.version}/opencode-darwin-x64.zip"`,
|
|
144
|
+
` sha256 "${macX64Sha}"`,
|
|
145
|
+
"",
|
|
146
|
+
" def install",
|
|
147
|
+
' bin.install "opencode"',
|
|
148
|
+
" end",
|
|
149
|
+
" end",
|
|
150
|
+
" if Hardware::CPU.arm?",
|
|
151
|
+
` url "https://github.com/sst/opencode/releases/download/v${Script.version}/opencode-darwin-arm64.zip"`,
|
|
152
|
+
` sha256 "${macArm64Sha}"`,
|
|
153
|
+
"",
|
|
154
|
+
" def install",
|
|
155
|
+
' bin.install "opencode"',
|
|
156
|
+
" end",
|
|
157
|
+
" end",
|
|
158
|
+
" end",
|
|
159
|
+
"",
|
|
160
|
+
" on_linux do",
|
|
161
|
+
" if Hardware::CPU.intel? and Hardware::CPU.is_64_bit?",
|
|
162
|
+
` url "https://github.com/sst/opencode/releases/download/v${Script.version}/opencode-linux-x64.tar.gz"`,
|
|
163
|
+
` sha256 "${x64Sha}"`,
|
|
164
|
+
" def install",
|
|
165
|
+
' bin.install "opencode"',
|
|
166
|
+
" end",
|
|
167
|
+
" end",
|
|
168
|
+
" if Hardware::CPU.arm? and Hardware::CPU.is_64_bit?",
|
|
169
|
+
` url "https://github.com/sst/opencode/releases/download/v${Script.version}/opencode-linux-arm64.tar.gz"`,
|
|
170
|
+
` sha256 "${arm64Sha}"`,
|
|
171
|
+
" def install",
|
|
172
|
+
' bin.install "opencode"',
|
|
173
|
+
" end",
|
|
174
|
+
" end",
|
|
175
|
+
" end",
|
|
176
|
+
"end",
|
|
177
|
+
"",
|
|
178
|
+
"",
|
|
179
|
+
].join("\n")
|
|
180
|
+
|
|
181
|
+
await $`rm -rf ./dist/homebrew-tap`
|
|
182
|
+
await $`git clone https://${process.env["GITHUB_TOKEN"]}@github.com/sst/homebrew-tap.git ./dist/homebrew-tap`
|
|
183
|
+
await Bun.file("./dist/homebrew-tap/opencode.rb").write(homebrewFormula)
|
|
184
|
+
await $`cd ./dist/homebrew-tap && git add opencode.rb`
|
|
185
|
+
await $`cd ./dist/homebrew-tap && git commit -m "Update to v${Script.version}"`
|
|
186
|
+
await $`cd ./dist/homebrew-tap && git push`
|
|
187
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import { $ } from "bun"
|
|
3
|
+
import pkg from "../package.json"
|
|
4
|
+
import { Script } from "@opencode-ai/script"
|
|
5
|
+
import { fileURLToPath } from "url"
|
|
6
|
+
import fs from "fs"
|
|
7
|
+
import path from "path"
|
|
8
|
+
|
|
9
|
+
const dir = fileURLToPath(new URL("..", import.meta.url))
|
|
10
|
+
process.chdir(dir)
|
|
11
|
+
|
|
12
|
+
const { binaries } = await import("./build.ts")
|
|
13
|
+
{
|
|
14
|
+
const platform = process.platform === "win32" ? "windows" : process.platform
|
|
15
|
+
const name = `${pkg.name}-${platform}-${process.arch}`
|
|
16
|
+
const binary = process.platform === "win32" ? "rird.exe" : "rird"
|
|
17
|
+
console.log(`smoke test: running dist/${name}/bin/${binary} --version`)
|
|
18
|
+
await $`./dist/${name}/bin/${binary} --version`
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
fs.mkdirSync(path.join(dir, `./dist/${pkg.name}`), { recursive: true })
|
|
22
|
+
fs.cpSync("./bin", `./dist/${pkg.name}/bin`, { recursive: true })
|
|
23
|
+
// Rename bin/rird.js to bin/rird so the npm bin config works
|
|
24
|
+
const targetName = pkg.name
|
|
25
|
+
fs.renameSync(
|
|
26
|
+
path.join(dir, `./dist/${pkg.name}/bin/rird.js`),
|
|
27
|
+
path.join(dir, `./dist/${pkg.name}/bin/${targetName}`)
|
|
28
|
+
)
|
|
29
|
+
fs.copyFileSync("./script/postinstall.mjs", `./dist/${pkg.name}/postinstall.mjs`)
|
|
30
|
+
|
|
31
|
+
await Bun.file(`./dist/${pkg.name}/package.json`).write(
|
|
32
|
+
JSON.stringify(
|
|
33
|
+
{
|
|
34
|
+
name: pkg.name + "-ai",
|
|
35
|
+
bin: {
|
|
36
|
+
[pkg.name]: `./bin/${targetName}`,
|
|
37
|
+
},
|
|
38
|
+
scripts: {
|
|
39
|
+
postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs",
|
|
40
|
+
},
|
|
41
|
+
version: pkg.version,
|
|
42
|
+
optionalDependencies: binaries,
|
|
43
|
+
},
|
|
44
|
+
null,
|
|
45
|
+
2,
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
const tags = [Script.channel]
|
|
50
|
+
|
|
51
|
+
const tasks = Object.entries(binaries).map(async ([name]) => {
|
|
52
|
+
if (process.platform !== "win32") {
|
|
53
|
+
await $`chmod -R 755 .`.cwd(`./dist/${name}`)
|
|
54
|
+
}
|
|
55
|
+
// Force correct version in individual package.json files
|
|
56
|
+
const pkgJson = await Bun.file(`./dist/${name}/package.json`).json()
|
|
57
|
+
pkgJson.version = pkg.version
|
|
58
|
+
await Bun.file(`./dist/${name}/package.json`).write(JSON.stringify(pkgJson, null, 2))
|
|
59
|
+
|
|
60
|
+
await $`bun pm pack`.cwd(`./dist/${name}`)
|
|
61
|
+
for (const tag of tags) {
|
|
62
|
+
await $`npm publish *.tgz --access public --tag ${tag}`.cwd(`./dist/${name}`)
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
await Promise.all(tasks)
|
|
66
|
+
for (const tag of tags) {
|
|
67
|
+
await $`cd ./dist/${pkg.name} && bun pm pack && npm publish *.tgz --access public --tag ${tag}`
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (!Script.preview) {
|
|
71
|
+
// Create archives for GitHub release
|
|
72
|
+
for (const key of Object.keys(binaries)) {
|
|
73
|
+
if (key.includes("linux")) {
|
|
74
|
+
await $`tar -czf ../../${key}.tar.gz *`.cwd(`dist/${key}/bin`)
|
|
75
|
+
} else {
|
|
76
|
+
await $`zip -r ../../${key}.zip *`.cwd(`dist/${key}/bin`)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const image = "ghcr.io/sst/opencode"
|
|
81
|
+
const platforms = "linux/amd64,linux/arm64"
|
|
82
|
+
const tags = [`${image}:${Script.version}`, `${image}:latest`]
|
|
83
|
+
const tagFlags = tags.flatMap((t) => ["-t", t])
|
|
84
|
+
await $`docker buildx build --platform ${platforms} ${tagFlags} --push .`
|
|
85
|
+
}
|
package/script/schema.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import { z } from "zod"
|
|
4
|
+
import { Config } from "../src/config/config"
|
|
5
|
+
|
|
6
|
+
const file = process.argv[2]
|
|
7
|
+
console.log(file)
|
|
8
|
+
|
|
9
|
+
const result = z.toJSONSchema(Config.Info, {
|
|
10
|
+
io: "input", // Generate input shape (treats optional().default() as not required)
|
|
11
|
+
/**
|
|
12
|
+
* We'll use the `default` values of the field as the only value in `examples`.
|
|
13
|
+
* This will ensure no docs are needed to be read, as the configuration is
|
|
14
|
+
* self-documenting.
|
|
15
|
+
*
|
|
16
|
+
* See https://json-schema.org/draft/2020-12/draft-bhutton-json-schema-validation-00#rfc.section.9.5
|
|
17
|
+
*/
|
|
18
|
+
override(ctx) {
|
|
19
|
+
const schema = ctx.jsonSchema
|
|
20
|
+
|
|
21
|
+
// Preserve strictness: set additionalProperties: false for objects
|
|
22
|
+
if (schema && typeof schema === "object" && schema.type === "object" && schema.additionalProperties === undefined) {
|
|
23
|
+
schema.additionalProperties = false
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Add examples and default descriptions for string fields with defaults
|
|
27
|
+
if (schema && typeof schema === "object" && "type" in schema && schema.type === "string" && schema?.default) {
|
|
28
|
+
if (!schema.examples) {
|
|
29
|
+
schema.examples = [schema.default]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
schema.description = [schema.description || "", `default: \`${schema.default}\``]
|
|
33
|
+
.filter(Boolean)
|
|
34
|
+
.join("\n\n")
|
|
35
|
+
.trim()
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
}) as Record<string, unknown> & {
|
|
39
|
+
allowComments?: boolean
|
|
40
|
+
allowTrailingCommas?: boolean
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// used for json lsps since config supports jsonc
|
|
44
|
+
result.allowComments = true
|
|
45
|
+
result.allowTrailingCommas = true
|
|
46
|
+
|
|
47
|
+
await Bun.write(file, JSON.stringify(result, null, 2))
|