jonsoc 1.1.43
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 +27 -0
- package/Dockerfile +18 -0
- package/PUBLISHING_GUIDE.md +151 -0
- package/README.md +58 -0
- package/bin/jonsoc +279 -0
- package/bunfig.toml +7 -0
- package/package.json +147 -0
- package/package.json.placeholder +11 -0
- package/parsers-config.ts +253 -0
- package/script/build.ts +115 -0
- package/script/publish-registries.ts +197 -0
- package/script/publish.ts +110 -0
- package/script/schema.ts +47 -0
- package/script/seed-e2e.ts +50 -0
- package/src/acp/README.md +164 -0
- package/src/acp/agent.ts +1437 -0
- package/src/acp/session.ts +105 -0
- package/src/acp/types.ts +22 -0
- package/src/agent/agent.ts +347 -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 +11 -0
- package/src/agent/prompt/title.txt +44 -0
- package/src/auth/index.ts +73 -0
- package/src/brand/index.ts +73 -0
- package/src/bun/index.ts +139 -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 +69 -0
- package/src/cli/cmd/agent.ts +257 -0
- package/src/cli/cmd/auth.ts +405 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/debug/agent.ts +166 -0
- package/src/cli/cmd/debug/config.ts +16 -0
- package/src/cli/cmd/debug/file.ts +97 -0
- package/src/cli/cmd/debug/index.ts +48 -0
- package/src/cli/cmd/debug/lsp.ts +52 -0
- package/src/cli/cmd/debug/ripgrep.ts +87 -0
- package/src/cli/cmd/debug/scrap.ts +16 -0
- package/src/cli/cmd/debug/skill.ts +16 -0
- package/src/cli/cmd/debug/snapshot.ts +52 -0
- package/src/cli/cmd/export.ts +88 -0
- package/src/cli/cmd/generate.ts +38 -0
- package/src/cli/cmd/github.ts +1548 -0
- package/src/cli/cmd/import.ts +99 -0
- package/src/cli/cmd/mcp.ts +765 -0
- package/src/cli/cmd/models.ts +77 -0
- package/src/cli/cmd/pr.ts +112 -0
- package/src/cli/cmd/run.ts +395 -0
- package/src/cli/cmd/serve.ts +20 -0
- package/src/cli/cmd/session.ts +135 -0
- package/src/cli/cmd/stats.ts +402 -0
- package/src/cli/cmd/tui/app.tsx +923 -0
- package/src/cli/cmd/tui/attach.ts +39 -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 +162 -0
- package/src/cli/cmd/tui/component/dialog-error-log.tsx +155 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +234 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +256 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +114 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +164 -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/dynamic-layout.tsx +86 -0
- package/src/cli/cmd/tui/component/inspector-overlay.tsx +247 -0
- package/src/cli/cmd/tui/component/logo.tsx +88 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +653 -0
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +89 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1347 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
- package/src/cli/cmd/tui/component/tips.tsx +153 -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/error-log.tsx +56 -0
- package/src/cli/cmd/tui/context/exit.tsx +26 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/inspector.tsx +57 -0
- package/src/cli/cmd/tui/context/keybind.tsx +108 -0
- package/src/cli/cmd/tui/context/kv.tsx +53 -0
- package/src/cli/cmd/tui/context/layout.tsx +240 -0
- package/src/cli/cmd/tui/context/local.tsx +402 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +51 -0
- package/src/cli/cmd/tui/context/sdk.tsx +94 -0
- package/src/cli/cmd/tui/context/sync.tsx +449 -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/carbonfox.json +248 -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 +242 -0
- package/src/cli/cmd/tui/context/theme/jonsoc.json +245 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +237 -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 +249 -0
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +93 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -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 +1153 -0
- package/src/cli/cmd/tui/event.ts +48 -0
- package/src/cli/cmd/tui/hooks/use-command-registry.tsx +184 -0
- package/src/cli/cmd/tui/routes/home.tsx +198 -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 +91 -0
- package/src/cli/cmd/tui/routes/session/git-commit.tsx +59 -0
- package/src/cli/cmd/tui/routes/session/git-history.tsx +122 -0
- package/src/cli/cmd/tui/routes/session/header.tsx +185 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +2363 -0
- package/src/cli/cmd/tui/routes/session/navigator-ui.tsx +214 -0
- package/src/cli/cmd/tui/routes/session/navigator.tsx +1124 -0
- package/src/cli/cmd/tui/routes/session/panel-explorer.tsx +553 -0
- package/src/cli/cmd/tui/routes/session/panel-viewer.tsx +386 -0
- package/src/cli/cmd/tui/routes/session/permission.tsx +501 -0
- package/src/cli/cmd/tui/routes/session/question.tsx +507 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +365 -0
- package/src/cli/cmd/tui/routes/session/vcs-diff-viewer.tsx +37 -0
- package/src/cli/cmd/tui/routes/ui-settings.tsx +449 -0
- package/src/cli/cmd/tui/thread.ts +172 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +90 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +204 -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 +384 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +170 -0
- package/src/cli/cmd/tui/ui/link.tsx +28 -0
- package/src/cli/cmd/tui/ui/spinner.ts +375 -0
- package/src/cli/cmd/tui/ui/toast.tsx +100 -0
- package/src/cli/cmd/tui/util/clipboard.ts +255 -0
- package/src/cli/cmd/tui/util/editor.ts +32 -0
- package/src/cli/cmd/tui/util/signal.ts +7 -0
- package/src/cli/cmd/tui/util/terminal.ts +114 -0
- package/src/cli/cmd/tui/util/transcript.ts +98 -0
- package/src/cli/cmd/tui/worker.ts +152 -0
- package/src/cli/cmd/uninstall.ts +362 -0
- package/src/cli/cmd/upgrade.ts +73 -0
- package/src/cli/cmd/web.ts +81 -0
- package/src/cli/error.ts +57 -0
- package/src/cli/network.ts +53 -0
- package/src/cli/ui.ts +119 -0
- package/src/cli/upgrade.ts +25 -0
- package/src/command/index.ts +131 -0
- package/src/command/template/initialize.txt +10 -0
- package/src/command/template/review.txt +99 -0
- package/src/config/config.ts +1404 -0
- package/src/config/markdown.ts +93 -0
- package/src/env/index.ts +26 -0
- package/src/file/ignore.ts +83 -0
- package/src/file/index.ts +432 -0
- package/src/file/ripgrep.ts +407 -0
- package/src/file/time.ts +69 -0
- package/src/file/watcher.ts +127 -0
- package/src/flag/flag.ts +80 -0
- package/src/format/formatter.ts +357 -0
- package/src/format/index.ts +137 -0
- package/src/global/index.ts +58 -0
- package/src/id/id.ts +83 -0
- package/src/ide/index.ts +76 -0
- package/src/index.ts +208 -0
- package/src/installation/index.ts +258 -0
- package/src/lsp/client.ts +252 -0
- package/src/lsp/index.ts +485 -0
- package/src/lsp/language.ts +119 -0
- package/src/lsp/server.ts +2046 -0
- package/src/mcp/auth.ts +135 -0
- package/src/mcp/index.ts +934 -0
- package/src/mcp/oauth-callback.ts +200 -0
- package/src/mcp/oauth-provider.ts +155 -0
- package/src/patch/index.ts +680 -0
- package/src/permission/arity.ts +163 -0
- package/src/permission/index.ts +210 -0
- package/src/permission/next.ts +280 -0
- package/src/plugin/codex.ts +500 -0
- package/src/plugin/copilot.ts +283 -0
- package/src/plugin/index.ts +135 -0
- package/src/project/bootstrap.ts +35 -0
- package/src/project/instance.ts +91 -0
- package/src/project/project.ts +371 -0
- package/src/project/state.ts +66 -0
- package/src/project/vcs.ts +151 -0
- package/src/provider/auth.ts +147 -0
- package/src/provider/models-macro.ts +14 -0
- package/src/provider/models.ts +114 -0
- package/src/provider/provider.ts +1220 -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 +1732 -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 +742 -0
- package/src/pty/index.ts +241 -0
- package/src/question/index.ts +176 -0
- package/src/scheduler/index.ts +61 -0
- package/src/server/error.ts +36 -0
- package/src/server/event.ts +7 -0
- package/src/server/mdns.ts +59 -0
- package/src/server/routes/config.ts +92 -0
- package/src/server/routes/experimental.ts +208 -0
- package/src/server/routes/file.ts +227 -0
- package/src/server/routes/global.ts +135 -0
- package/src/server/routes/mcp.ts +225 -0
- package/src/server/routes/permission.ts +68 -0
- package/src/server/routes/project.ts +82 -0
- package/src/server/routes/provider.ts +165 -0
- package/src/server/routes/pty.ts +169 -0
- package/src/server/routes/question.ts +98 -0
- package/src/server/routes/session.ts +939 -0
- package/src/server/routes/tui.ts +379 -0
- package/src/server/server.ts +663 -0
- package/src/session/compaction.ts +225 -0
- package/src/session/index.ts +498 -0
- package/src/session/llm.ts +288 -0
- package/src/session/message-v2.ts +740 -0
- package/src/session/message.ts +189 -0
- package/src/session/processor.ts +406 -0
- package/src/session/prompt/anthropic-20250930.txt +168 -0
- package/src/session/prompt/anthropic.txt +172 -0
- package/src/session/prompt/anthropic_spoof.txt +1 -0
- package/src/session/prompt/beast.txt +149 -0
- package/src/session/prompt/build-switch.txt +5 -0
- package/src/session/prompt/codex_header.txt +81 -0
- package/src/session/prompt/copilot-gpt-5.txt +145 -0
- package/src/session/prompt/gemini.txt +157 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
- package/src/session/prompt/plan.txt +26 -0
- package/src/session/prompt/qwen.txt +111 -0
- package/src/session/prompt.ts +1815 -0
- package/src/session/retry.ts +90 -0
- package/src/session/revert.ts +121 -0
- package/src/session/status.ts +76 -0
- package/src/session/summary.ts +150 -0
- package/src/session/system.ts +156 -0
- package/src/session/todo.ts +37 -0
- package/src/share/share-next.ts +204 -0
- package/src/share/share.ts +95 -0
- package/src/shell/shell.ts +67 -0
- package/src/skill/index.ts +1 -0
- package/src/skill/skill.ts +135 -0
- package/src/snapshot/index.ts +236 -0
- package/src/storage/storage.ts +227 -0
- package/src/tool/apply_patch.ts +279 -0
- package/src/tool/apply_patch.txt +33 -0
- package/src/tool/bash.ts +258 -0
- package/src/tool/bash.txt +115 -0
- package/src/tool/batch.ts +175 -0
- package/src/tool/batch.txt +24 -0
- package/src/tool/codesearch.ts +132 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/edit.ts +645 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/external-directory.ts +32 -0
- package/src/tool/glob.ts +77 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +154 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/invalid.ts +17 -0
- package/src/tool/ls.ts +121 -0
- package/src/tool/ls.txt +1 -0
- package/src/tool/lsp.ts +96 -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/plan-enter.txt +14 -0
- package/src/tool/plan-exit.txt +13 -0
- package/src/tool/plan.ts +130 -0
- package/src/tool/question.ts +33 -0
- package/src/tool/question.txt +10 -0
- package/src/tool/read.ts +202 -0
- package/src/tool/read.txt +12 -0
- package/src/tool/registry.ts +162 -0
- package/src/tool/skill.ts +82 -0
- package/src/tool/task.ts +188 -0
- package/src/tool/task.txt +60 -0
- package/src/tool/todo.ts +53 -0
- package/src/tool/todoread.txt +14 -0
- package/src/tool/todowrite.txt +167 -0
- package/src/tool/tool.ts +88 -0
- package/src/tool/truncation.ts +106 -0
- package/src/tool/webfetch.ts +182 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch.ts +150 -0
- package/src/tool/websearch.txt +14 -0
- package/src/tool/write.ts +80 -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 +93 -0
- package/src/util/fn.ts +11 -0
- package/src/util/format.ts +20 -0
- package/src/util/iife.ts +3 -0
- package/src/util/keybind.ts +103 -0
- package/src/util/lazy.ts +18 -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 +66 -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 +56 -0
- package/src/worktree/index.ts +524 -0
- package/sst-env.d.ts +9 -0
- package/test/acp/agent-interface.test.ts +51 -0
- package/test/acp/event-subscription.test.ts +436 -0
- package/test/agent/agent.test.ts +638 -0
- package/test/bun.test.ts +53 -0
- package/test/cli/cmd/tui/fileref.test.ts +30 -0
- package/test/cli/github-action.test.ts +129 -0
- package/test/cli/github-remote.test.ts +80 -0
- package/test/cli/tui/navigator_logic.test.ts +99 -0
- package/test/cli/tui/transcript.test.ts +297 -0
- package/test/cli/ui.test.ts +80 -0
- package/test/config/agent-color.test.ts +66 -0
- package/test/config/config.test.ts +1613 -0
- package/test/config/fixtures/empty-frontmatter.md +4 -0
- package/test/config/fixtures/frontmatter.md +28 -0
- package/test/config/fixtures/no-frontmatter.md +1 -0
- package/test/config/markdown.test.ts +192 -0
- package/test/file/ignore.test.ts +10 -0
- package/test/file/path-traversal.test.ts +198 -0
- package/test/fixture/fixture.ts +45 -0
- package/test/fixture/lsp/fake-lsp-server.js +77 -0
- package/test/ide/ide.test.ts +82 -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/mcp/oauth-browser.test.ts +261 -0
- package/test/patch/patch.test.ts +348 -0
- package/test/permission/arity.test.ts +33 -0
- package/test/permission/next.test.ts +690 -0
- package/test/permission-task.test.ts +319 -0
- package/test/plugin/codex.test.ts +123 -0
- package/test/preload.ts +67 -0
- package/test/project/project.test.ts +120 -0
- package/test/provider/amazon-bedrock.test.ts +268 -0
- package/test/provider/gitlab-duo.test.ts +286 -0
- package/test/provider/provider.test.ts +2149 -0
- package/test/provider/transform.test.ts +1631 -0
- package/test/question/question.test.ts +300 -0
- package/test/scheduler.test.ts +73 -0
- package/test/server/session-list.test.ts +39 -0
- package/test/server/session-select.test.ts +78 -0
- package/test/session/compaction.test.ts +293 -0
- package/test/session/llm.test.ts +90 -0
- package/test/session/message-v2.test.ts +786 -0
- package/test/session/retry.test.ts +131 -0
- package/test/session/revert-compact.test.ts +285 -0
- package/test/session/session.test.ts +71 -0
- package/test/skill/skill.test.ts +185 -0
- package/test/snapshot/snapshot.test.ts +939 -0
- package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
- package/test/tool/apply_patch.test.ts +499 -0
- package/test/tool/bash.test.ts +320 -0
- package/test/tool/external-directory.test.ts +126 -0
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +33453 -0
- package/test/tool/grep.test.ts +109 -0
- package/test/tool/question.test.ts +105 -0
- package/test/tool/read.test.ts +332 -0
- package/test/tool/registry.test.ts +76 -0
- package/test/tool/truncation.test.ts +159 -0
- package/test/util/filesystem.test.ts +39 -0
- package/test/util/format.test.ts +59 -0
- package/test/util/iife.test.ts +36 -0
- package/test/util/lazy.test.ts +50 -0
- package/test/util/lock.test.ts +72 -0
- package/test/util/timeout.test.ts +21 -0
- package/test/util/wildcard.test.ts +75 -0
- package/tsconfig.json +16 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# jonsoc agent guidelines
|
|
2
|
+
|
|
3
|
+
## Build/Test Commands
|
|
4
|
+
|
|
5
|
+
- **Install**: `bun install`
|
|
6
|
+
- **Run**: `bun run --conditions=browser ./src/index.ts`
|
|
7
|
+
- **Typecheck**: `bun run typecheck` (npm run typecheck)
|
|
8
|
+
- **Test**: `bun test` (runs all tests)
|
|
9
|
+
- **Single test**: `bun test test/tool/tool.test.ts` (specific test file)
|
|
10
|
+
|
|
11
|
+
## Code Style
|
|
12
|
+
|
|
13
|
+
- **Runtime**: Bun with TypeScript ESM modules
|
|
14
|
+
- **Imports**: Use relative imports for local modules, named imports preferred
|
|
15
|
+
- **Types**: Zod schemas for validation, TypeScript interfaces for structure
|
|
16
|
+
- **Naming**: camelCase for variables/functions, PascalCase for classes/namespaces
|
|
17
|
+
- **Error handling**: Use Result patterns, avoid throwing exceptions in tools
|
|
18
|
+
- **File structure**: Namespace-based organization (e.g., `Tool.define()`, `Session.create()`)
|
|
19
|
+
|
|
20
|
+
## Architecture
|
|
21
|
+
|
|
22
|
+
- **Tools**: Implement `Tool.Info` interface with `execute()` method
|
|
23
|
+
- **Context**: Pass `sessionID` in tool context, use `App.provide()` for DI
|
|
24
|
+
- **Validation**: All inputs validated with Zod schemas
|
|
25
|
+
- **Logging**: Use `Log.create({ service: "name" })` pattern
|
|
26
|
+
- **Storage**: Use `Storage` namespace for persistence
|
|
27
|
+
- **API Client**: The TypeScript TUI (built with SolidJS + OpenTUI) communicates with the JonsOC server using `@jonsoc/sdk`. When adding/modifying server endpoints in `packages/jonsoc/src/server/server.ts`, run `./script/generate.ts` to regenerate the SDK and related files.
|
package/Dockerfile
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
FROM alpine AS base
|
|
2
|
+
|
|
3
|
+
# Disable the runtime transpiler cache by default inside Docker containers.
|
|
4
|
+
# On ephemeral containers, the cache is not useful
|
|
5
|
+
ARG BUN_RUNTIME_TRANSPILER_CACHE_PATH=0
|
|
6
|
+
ENV BUN_RUNTIME_TRANSPILER_CACHE_PATH=${BUN_RUNTIME_TRANSPILER_CACHE_PATH}
|
|
7
|
+
RUN apk add libgcc libstdc++ ripgrep
|
|
8
|
+
|
|
9
|
+
FROM base AS build-amd64
|
|
10
|
+
COPY dist/opencode-linux-x64-baseline-musl/bin/opencode /usr/local/bin/opencode
|
|
11
|
+
|
|
12
|
+
FROM base AS build-arm64
|
|
13
|
+
COPY dist/opencode-linux-arm64-musl/bin/opencode /usr/local/bin/opencode
|
|
14
|
+
|
|
15
|
+
ARG TARGETARCH
|
|
16
|
+
FROM build-${TARGETARCH}
|
|
17
|
+
RUN opencode --version
|
|
18
|
+
ENTRYPOINT ["opencode"]
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Publishing jonsOC to npm
|
|
2
|
+
|
|
3
|
+
This guide explains how to publish jonsOC as a global npm package that users can install with `bun add -g jonsoc` or `npm install -g jonsoc`.
|
|
4
|
+
|
|
5
|
+
## Changes Made
|
|
6
|
+
|
|
7
|
+
1. **Removed `"private": true`** from `package.json` to allow publishing
|
|
8
|
+
2. **Updated package name** in publish script from "jonsoc" to "jonsoc"
|
|
9
|
+
3. **Added npm metadata** (description, keywords, repository, etc.) for better discoverability
|
|
10
|
+
4. **Updated README** with installation and usage instructions
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
jonsOC uses a multi-package distribution strategy (similar to esbuild, Parcel, etc.):
|
|
15
|
+
|
|
16
|
+
1. **Main package (`jonsoc`)**: Contains the wrapper script that users install
|
|
17
|
+
2. **Platform-specific packages**: Compiled binaries for each platform:
|
|
18
|
+
- `jonsoc-linux-x64`
|
|
19
|
+
- `jonsoc-darwin-arm64`
|
|
20
|
+
- `jonsoc-windows-x64`
|
|
21
|
+
|
|
22
|
+
When users install `jonsoc`, npm automatically installs the correct platform-specific binary as an optional dependency.
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
Before publishing, make sure you:
|
|
27
|
+
|
|
28
|
+
1. **Have an npm account**: Sign up at https://www.npmjs.com
|
|
29
|
+
2. **Are logged in to npm**:
|
|
30
|
+
```bash
|
|
31
|
+
npm login
|
|
32
|
+
```
|
|
33
|
+
3. **Check package name availability**:
|
|
34
|
+
```bash
|
|
35
|
+
npm view jonsoc
|
|
36
|
+
```
|
|
37
|
+
If the package exists and isn't yours, you'll need to choose a different name.
|
|
38
|
+
|
|
39
|
+
## Publishing Steps
|
|
40
|
+
|
|
41
|
+
### 1. Build all platform binaries
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
cd packages/jonsoc
|
|
45
|
+
bun run build
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This creates compiled binaries for all supported platforms in the `dist/` directory.
|
|
49
|
+
|
|
50
|
+
### 2. Test locally (optional but recommended)
|
|
51
|
+
|
|
52
|
+
Build for your current platform only:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
bun run build -- --single
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Test the binary:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
./dist/jonsoc-<your-platform>-<your-arch>/bin/jonsoc --version
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Publish to npm
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
bun run script/publish.ts
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This will:
|
|
71
|
+
|
|
72
|
+
- Publish all platform-specific packages
|
|
73
|
+
- Publish the main `jonsoc` package
|
|
74
|
+
- Create GitHub release archives (if configured)
|
|
75
|
+
|
|
76
|
+
### 4. Test the published package
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# In a different directory
|
|
80
|
+
bun add -g jonsoc
|
|
81
|
+
|
|
82
|
+
# Verify installation
|
|
83
|
+
jonsoc --version
|
|
84
|
+
jonsoc --help
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Version Management
|
|
88
|
+
|
|
89
|
+
The version is managed in `@jonsoc/script` package. To publish a new version:
|
|
90
|
+
|
|
91
|
+
1. Update the version in the script package
|
|
92
|
+
2. Run the build and publish commands
|
|
93
|
+
|
|
94
|
+
## Troubleshooting
|
|
95
|
+
|
|
96
|
+
### Package name already taken
|
|
97
|
+
|
|
98
|
+
If `jonsoc` is already taken on npm, you have a few options:
|
|
99
|
+
|
|
100
|
+
1. **Use a scoped package**: Change to `@your-username/jonsoc`
|
|
101
|
+
2. **Choose a different name**: e.g., `jonsoc-cli`, `jonsoc-dev`, etc.
|
|
102
|
+
3. **Contact the current owner** if the package is abandoned
|
|
103
|
+
|
|
104
|
+
To use a scoped package, update the `name` field in `package.json`:
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"name": "@your-username/jonsoc"
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Authentication errors
|
|
113
|
+
|
|
114
|
+
If you get authentication errors:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npm whoami # Check if logged in
|
|
118
|
+
npm login # Login if needed
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Platform binary issues
|
|
122
|
+
|
|
123
|
+
If a specific platform binary fails to build:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
# Build only current platform for testing
|
|
127
|
+
bun run build -- --single
|
|
128
|
+
|
|
129
|
+
# Skip npm install during build
|
|
130
|
+
bun run build -- --skip-install
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Publishing Updates
|
|
134
|
+
|
|
135
|
+
When publishing updates:
|
|
136
|
+
|
|
137
|
+
1. Update version in script package
|
|
138
|
+
2. Run `bun run build`
|
|
139
|
+
3. Run `bun run script/publish.ts`
|
|
140
|
+
|
|
141
|
+
The publish script automatically:
|
|
142
|
+
|
|
143
|
+
- Tags releases based on the channel (stable, preview, etc.)
|
|
144
|
+
- Creates platform-specific packages
|
|
145
|
+
- Updates the main package
|
|
146
|
+
|
|
147
|
+
## Notes
|
|
148
|
+
|
|
149
|
+
- The publish script uses `--access public` to ensure packages are publicly available
|
|
150
|
+
- Platform-specific binaries are automatically selected during installation based on OS and architecture
|
|
151
|
+
- The bin wrapper (`bin/jonsoc`) handles finding and executing the correct binary
|
package/README.md
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# jonsOC
|
|
2
|
+
|
|
3
|
+
AI-powered development tool for modern coding workflows.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Install globally using bun:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun add -g jonsoc
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or with npm:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g jonsoc
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
Once installed, you can use jonsOC from anywhere:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
jonsoc --help
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Development
|
|
28
|
+
|
|
29
|
+
To install dependencies:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
bun install
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
To run locally:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
bun run dev
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
To build for all platforms:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
bun run build
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Publishing
|
|
48
|
+
|
|
49
|
+
To build and publish to npm:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
bun run build
|
|
53
|
+
bun run script/publish.ts
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## License
|
|
57
|
+
|
|
58
|
+
MIT
|
package/bin/jonsoc
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawnSync } from "child_process"
|
|
4
|
+
import { existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from "fs"
|
|
5
|
+
import { dirname, join } from "path"
|
|
6
|
+
import { platform as osPlatform, arch as osArch, homedir } from "os"
|
|
7
|
+
import { fileURLToPath } from "url"
|
|
8
|
+
import { xdgData, xdgState } from "xdg-basedir"
|
|
9
|
+
|
|
10
|
+
/** Exit code 75 signals a restart request from the TUI */
|
|
11
|
+
const EXIT_CODE_RESTART = 75
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
14
|
+
const __dirname = dirname(__filename)
|
|
15
|
+
const cwd = process.cwd()
|
|
16
|
+
const env = {
|
|
17
|
+
...process.env,
|
|
18
|
+
JONSOC_WORKDIR: process.env.JONSOC_WORKDIR ?? process.env.JOC_WORKDIR ?? cwd,
|
|
19
|
+
JONSOC_CLI: "1",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function run(target, args, options = {}) {
|
|
23
|
+
const result = spawnSync(target, args || process.argv.slice(2), {
|
|
24
|
+
stdio: "inherit",
|
|
25
|
+
shell: osPlatform() === "win32",
|
|
26
|
+
cwd: options.cwd,
|
|
27
|
+
env: options.env,
|
|
28
|
+
})
|
|
29
|
+
if (result.error) {
|
|
30
|
+
console.error(result.error.message)
|
|
31
|
+
process.exit(1)
|
|
32
|
+
}
|
|
33
|
+
return typeof result.status === "number" ? result.status : 0
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const rawArgs = process.argv.slice(2)
|
|
37
|
+
const hasFlag = (value) => rawArgs.includes(value)
|
|
38
|
+
const safe = hasFlag("-safe") || hasFlag("--safe")
|
|
39
|
+
const restart = hasFlag("-restart") || hasFlag("--restart") || hasFlag("-return") || hasFlag("--return")
|
|
40
|
+
const autoReturn = hasFlag("-auto-return") || hasFlag("--auto-return")
|
|
41
|
+
const check = hasFlag("-check") || hasFlag("--check")
|
|
42
|
+
const safeIsolated =
|
|
43
|
+
hasFlag("-safe-isolated") ||
|
|
44
|
+
hasFlag("--safe-isolated") ||
|
|
45
|
+
process.env.JONSOC_SAFE_ISOLATE === "1" ||
|
|
46
|
+
process.env.OPENCODE_SAFE_ISOLATE === "1"
|
|
47
|
+
const flagSet = new Set([
|
|
48
|
+
"-safe",
|
|
49
|
+
"--safe",
|
|
50
|
+
"-restart",
|
|
51
|
+
"--restart",
|
|
52
|
+
"-return",
|
|
53
|
+
"--return",
|
|
54
|
+
"-auto-return",
|
|
55
|
+
"--auto-return",
|
|
56
|
+
"-check",
|
|
57
|
+
"--check",
|
|
58
|
+
"-safe-isolated",
|
|
59
|
+
"--safe-isolated",
|
|
60
|
+
])
|
|
61
|
+
const baseArgs = rawArgs.filter((arg) => !flagSet.has(arg))
|
|
62
|
+
const appName = process.env.JONSOC_APP_NAME ?? process.env.OPENCODE_APP_NAME ?? "jonsoc"
|
|
63
|
+
const stateAppName = safe && safeIsolated ? `${appName}-safe` : appName
|
|
64
|
+
|
|
65
|
+
const stateDir = () => {
|
|
66
|
+
const root = xdgState ?? join(homedir(), ".local", "state")
|
|
67
|
+
return join(root, stateAppName)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const lastSession = () => {
|
|
71
|
+
const filePath = join(stateDir(), "kv.json")
|
|
72
|
+
if (!existsSync(filePath)) return
|
|
73
|
+
const raw = readFileSync(filePath, "utf8")
|
|
74
|
+
if (!raw) return
|
|
75
|
+
try {
|
|
76
|
+
const data = JSON.parse(raw)
|
|
77
|
+
const session = data?.session_last
|
|
78
|
+
if (typeof session !== "string") return
|
|
79
|
+
return session
|
|
80
|
+
} catch {
|
|
81
|
+
return
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const restartArgs = (() => {
|
|
86
|
+
if (!restart) return baseArgs
|
|
87
|
+
if (baseArgs.includes("--session") || baseArgs.includes("-s")) return baseArgs
|
|
88
|
+
const sessionID = lastSession()
|
|
89
|
+
if (!sessionID) {
|
|
90
|
+
console.error("No recent session found to restart.")
|
|
91
|
+
process.exit(1)
|
|
92
|
+
}
|
|
93
|
+
return ["--session", sessionID, ...baseArgs]
|
|
94
|
+
})()
|
|
95
|
+
|
|
96
|
+
if (check) {
|
|
97
|
+
console.log("running")
|
|
98
|
+
process.exit(0)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Build args for restart - add --session if we have a last session */
|
|
102
|
+
function buildRestartArgs() {
|
|
103
|
+
if (baseArgs.includes("--session") || baseArgs.includes("-s")) return baseArgs
|
|
104
|
+
const sessionID = lastSession()
|
|
105
|
+
if (!sessionID) return baseArgs
|
|
106
|
+
return ["--session", sessionID, ...baseArgs]
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Run the CLI and handle restart exit code */
|
|
110
|
+
function runWithRestart(target, prefix, trailingArgs, options = {}) {
|
|
111
|
+
let args = [...prefix, ...trailingArgs]
|
|
112
|
+
for (;;) {
|
|
113
|
+
const code = run(target, args, options)
|
|
114
|
+
|
|
115
|
+
// Clean exit (user typed /exit, /quit, or Ctrl+C handled cleanly)
|
|
116
|
+
if (code === 0) {
|
|
117
|
+
process.exit(0)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Requested restart (code 75) or Crash/Error (code != 0)
|
|
121
|
+
// We always attempt to return to the session on any failure.
|
|
122
|
+
if (code !== 0) {
|
|
123
|
+
if (code !== EXIT_CODE_RESTART) {
|
|
124
|
+
console.error(`\n[jonsoc] unexpected exit (${code}). recovering session...`)
|
|
125
|
+
// 1s throttle only on actual crashes to prevent cpu pinning if there's a persistent boot error
|
|
126
|
+
spawnSync("node", ["-e", "setTimeout(() => {}, 1000)"], { stdio: "inherit" })
|
|
127
|
+
}
|
|
128
|
+
args = [...prefix, ...buildRestartArgs()]
|
|
129
|
+
continue
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
process.exit(code)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (safe) {
|
|
137
|
+
const safeEnv = {
|
|
138
|
+
...env,
|
|
139
|
+
...(safeIsolated ? { JONSOC_APP_NAME: `${appName}-safe` } : {}),
|
|
140
|
+
JONSOC_SAFE_MODE: "1",
|
|
141
|
+
}
|
|
142
|
+
runWithRestart("npx", ["--yes", "jonsoc@latest"], restartArgs, { env: safeEnv })
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const envPath = process.env.JONSOC_BIN_PATH || process.env.JOC_BIN_PATH || process.env.OPENCODE_BIN_PATH
|
|
146
|
+
if (envPath) {
|
|
147
|
+
runWithRestart(envPath, [], restartArgs, { env })
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const scriptPath = realpathSync(__filename)
|
|
151
|
+
const scriptDir = dirname(scriptPath)
|
|
152
|
+
const pkgDir = dirname(scriptDir)
|
|
153
|
+
|
|
154
|
+
// Development mode: run TypeScript source directly with bun when inside repo
|
|
155
|
+
function repoRoot(dir) {
|
|
156
|
+
const entry = join(dir, "packages", "jonsoc", "src", "index.ts")
|
|
157
|
+
if (existsSync(entry)) return dir
|
|
158
|
+
const parent = dirname(dir)
|
|
159
|
+
if (parent === dir) return
|
|
160
|
+
return repoRoot(parent)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const root = repoRoot(cwd)
|
|
164
|
+
if (root) {
|
|
165
|
+
const workdir = join(root, "packages", "jonsoc")
|
|
166
|
+
runWithRestart("bun", ["run", "--conditions=browser", "src/index.ts"], restartArgs, { cwd: workdir, env })
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
// Production mode: fetch compiled binary into XDG data dir
|
|
171
|
+
const platformMap = {
|
|
172
|
+
darwin: "darwin",
|
|
173
|
+
linux: "linux",
|
|
174
|
+
win32: "windows",
|
|
175
|
+
}
|
|
176
|
+
const archMap = {
|
|
177
|
+
x64: "x64",
|
|
178
|
+
arm64: "arm64",
|
|
179
|
+
arm: "arm",
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
let platform = platformMap[osPlatform()]
|
|
183
|
+
if (!platform) {
|
|
184
|
+
platform = osPlatform()
|
|
185
|
+
}
|
|
186
|
+
let arch = archMap[osArch()]
|
|
187
|
+
if (!arch) {
|
|
188
|
+
arch = osArch()
|
|
189
|
+
}
|
|
190
|
+
const base = "jonsoc-" + platform + "-" + arch
|
|
191
|
+
const binary = platform === "windows" ? "jonsoc.exe" : "jonsoc"
|
|
192
|
+
|
|
193
|
+
const supported = new Set(["darwin-arm64", "linux-x64", "windows-x64"])
|
|
194
|
+
if (!supported.has(`${platform}-${arch}`)) {
|
|
195
|
+
console.error(`[jonsoc] Unsupported platform: ${platform}-${arch}. Supported: ${Array.from(supported).join(", ")}`)
|
|
196
|
+
process.exit(1)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const pkgJsonPath = join(pkgDir, "package.json")
|
|
200
|
+
const version = (() => {
|
|
201
|
+
if (!existsSync(pkgJsonPath)) return "latest"
|
|
202
|
+
const raw = readFileSync(pkgJsonPath, "utf8")
|
|
203
|
+
const data = JSON.parse(raw)
|
|
204
|
+
return typeof data.version === "string" ? data.version : "latest"
|
|
205
|
+
})()
|
|
206
|
+
|
|
207
|
+
const repo = (process.env.JONSOC_REPO ?? process.env.OPENCODE_REPO ?? "Noisemaker111/JonsOpencode").replace(
|
|
208
|
+
/^https?:\/\/github\.com\//,
|
|
209
|
+
"",
|
|
210
|
+
)
|
|
211
|
+
const dataRoot = xdgData ?? join(homedir(), ".local", "share")
|
|
212
|
+
const dataDir = join(dataRoot, appName)
|
|
213
|
+
const binDir = join(dataDir, "bin")
|
|
214
|
+
const versionFile = join(binDir, "version")
|
|
215
|
+
const binaryPath = join(binDir, binary)
|
|
216
|
+
|
|
217
|
+
function ensureDir(dir) {
|
|
218
|
+
if (existsSync(dir)) return
|
|
219
|
+
mkdirSync(dir, { recursive: true })
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function versionMatch() {
|
|
223
|
+
if (!existsSync(binaryPath)) return false
|
|
224
|
+
if (!existsSync(versionFile)) return false
|
|
225
|
+
const stored = readFileSync(versionFile, "utf8").trim()
|
|
226
|
+
return stored === version
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function releaseUrl() {
|
|
230
|
+
const asset = platform === "linux" ? `${base}.tar.gz` : `${base}.zip`
|
|
231
|
+
const releasePath = version === "latest" ? "latest/download" : `download/v${version}`
|
|
232
|
+
return {
|
|
233
|
+
asset,
|
|
234
|
+
url: `https://github.com/${repo}/releases/${releasePath}/${asset}`,
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
function extractArchive(archivePath) {
|
|
239
|
+
if (platform === "linux") {
|
|
240
|
+
const code = run("tar", ["-xzf", archivePath, "-C", binDir], { env })
|
|
241
|
+
if (code !== 0) process.exit(code)
|
|
242
|
+
return
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
if (platform === "windows") {
|
|
246
|
+
const cmd = `Expand-Archive -Path "${archivePath}" -DestinationPath "${binDir}" -Force`
|
|
247
|
+
const code = run("powershell", ["-NoProfile", "-Command", cmd], { env })
|
|
248
|
+
if (code !== 0) process.exit(code)
|
|
249
|
+
return
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const code = run("unzip", ["-o", archivePath, "-d", binDir], { env })
|
|
253
|
+
if (code !== 0) process.exit(code)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function ensureBinary() {
|
|
257
|
+
if (versionMatch()) return binaryPath
|
|
258
|
+
ensureDir(binDir)
|
|
259
|
+
const { asset, url } = releaseUrl()
|
|
260
|
+
const archivePath = join(dataDir, asset)
|
|
261
|
+
const code = run("curl", ["-fL", "-o", archivePath, url], { env })
|
|
262
|
+
if (code !== 0) {
|
|
263
|
+
console.error(`[jonsoc] Failed to download ${url}`)
|
|
264
|
+
process.exit(code)
|
|
265
|
+
}
|
|
266
|
+
extractArchive(archivePath)
|
|
267
|
+
if (platform !== "windows") {
|
|
268
|
+
run("chmod", ["+x", binaryPath], { env })
|
|
269
|
+
}
|
|
270
|
+
if (!existsSync(binaryPath)) {
|
|
271
|
+
console.error(`[jonsoc] Expected binary not found at ${binaryPath}`)
|
|
272
|
+
process.exit(1)
|
|
273
|
+
}
|
|
274
|
+
writeFileSync(versionFile, version)
|
|
275
|
+
return binaryPath
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const resolved = ensureBinary()
|
|
279
|
+
runWithRestart(resolved, [], restartArgs, { env })
|
package/bunfig.toml
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/package.json",
|
|
3
|
+
"version": "1.1.43",
|
|
4
|
+
"name": "jonsoc",
|
|
5
|
+
"description": "AI-powered development tool",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"author": "Jon",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"ai",
|
|
11
|
+
"development",
|
|
12
|
+
"cli",
|
|
13
|
+
"jonsoc",
|
|
14
|
+
"coding-assistant"
|
|
15
|
+
],
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/Noisemaker111/Jonsoc"
|
|
19
|
+
},
|
|
20
|
+
"homepage": "https://github.com/Noisemaker111/Jonsoc#readme",
|
|
21
|
+
"bugs": {
|
|
22
|
+
"url": "https://github.com/Noisemaker111/Jonsoc/issues"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"typecheck": "tsgo --noEmit",
|
|
26
|
+
"test": "bun test",
|
|
27
|
+
"build": "bun run script/build.ts",
|
|
28
|
+
"dev": "bun run --conditions=browser ./src/index.ts",
|
|
29
|
+
"random": "echo 'Random script updated at $(date)' && echo 'Change queued successfully' && echo 'Another change made' && echo 'Yet another change' && echo 'One more change' && echo 'Final change' && echo 'Another final change' && echo 'Yet another final change'",
|
|
30
|
+
"clean": "echo 'Cleaning up...' && rm -rf node_modules dist",
|
|
31
|
+
"lint": "echo 'Running lint checks...' && bun test --coverage",
|
|
32
|
+
"format": "echo 'Formatting code...' && bun run --prettier --write src/**/*.ts",
|
|
33
|
+
"docs": "echo 'Generating documentation...' && find src -name '*.ts' -exec echo 'Processing: {}' \\;",
|
|
34
|
+
"deploy": "echo 'Deploying application...' && bun run build && echo 'Deployment completed successfully'"
|
|
35
|
+
},
|
|
36
|
+
"bin": {
|
|
37
|
+
"jonsoc": "./bin/jonsoc"
|
|
38
|
+
},
|
|
39
|
+
"optionalDependencies": {
|
|
40
|
+
"jonsoc-darwin-arm64": "1.1.42",
|
|
41
|
+
"jonsoc-linux-x64": "1.1.42",
|
|
42
|
+
"jonsoc-windows-x64": "1.1.42"
|
|
43
|
+
},
|
|
44
|
+
"exports": {
|
|
45
|
+
"./*": "./src/*.ts"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@babel/core": "7.28.4",
|
|
49
|
+
"@octokit/webhooks-types": "7.6.1",
|
|
50
|
+
"@jonsoc/script": "workspace:*",
|
|
51
|
+
"@parcel/watcher-darwin-arm64": "2.5.1",
|
|
52
|
+
"@parcel/watcher-darwin-x64": "2.5.1",
|
|
53
|
+
"@parcel/watcher-linux-arm64-glibc": "2.5.1",
|
|
54
|
+
"@parcel/watcher-linux-arm64-musl": "2.5.1",
|
|
55
|
+
"@parcel/watcher-linux-x64-glibc": "2.5.1",
|
|
56
|
+
"@parcel/watcher-linux-x64-musl": "2.5.1",
|
|
57
|
+
"@parcel/watcher-win32-x64": "2.5.1",
|
|
58
|
+
"@standard-schema/spec": "1.0.0",
|
|
59
|
+
"@tsconfig/bun": "catalog:",
|
|
60
|
+
"@types/babel__core": "7.20.5",
|
|
61
|
+
"@types/bun": "catalog:",
|
|
62
|
+
"@types/turndown": "5.0.5",
|
|
63
|
+
"@types/yargs": "17.0.33",
|
|
64
|
+
"@typescript/native-preview": "catalog:",
|
|
65
|
+
"typescript": "catalog:",
|
|
66
|
+
"vscode-languageserver-types": "3.17.5",
|
|
67
|
+
"why-is-node-running": "3.2.2",
|
|
68
|
+
"zod-to-json-schema": "3.24.5"
|
|
69
|
+
},
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"@actions/core": "1.11.1",
|
|
72
|
+
"@actions/github": "6.0.1",
|
|
73
|
+
"@agentclientprotocol/sdk": "0.12.0",
|
|
74
|
+
"@ai-sdk/amazon-bedrock": "3.0.73",
|
|
75
|
+
"@ai-sdk/anthropic": "2.0.57",
|
|
76
|
+
"@ai-sdk/azure": "2.0.91",
|
|
77
|
+
"@ai-sdk/cerebras": "1.0.34",
|
|
78
|
+
"@ai-sdk/cohere": "2.0.22",
|
|
79
|
+
"@ai-sdk/deepinfra": "1.0.31",
|
|
80
|
+
"@ai-sdk/gateway": "2.0.25",
|
|
81
|
+
"@ai-sdk/google": "2.0.52",
|
|
82
|
+
"@ai-sdk/google-vertex": "3.0.97",
|
|
83
|
+
"@ai-sdk/groq": "2.0.34",
|
|
84
|
+
"@ai-sdk/mistral": "2.0.27",
|
|
85
|
+
"@ai-sdk/openai": "2.0.89",
|
|
86
|
+
"@ai-sdk/openai-compatible": "1.0.30",
|
|
87
|
+
"@ai-sdk/perplexity": "2.0.23",
|
|
88
|
+
"@ai-sdk/provider": "2.0.1",
|
|
89
|
+
"@ai-sdk/provider-utils": "3.0.20",
|
|
90
|
+
"@ai-sdk/togetherai": "1.0.31",
|
|
91
|
+
"@ai-sdk/vercel": "1.0.31",
|
|
92
|
+
"@ai-sdk/xai": "2.0.51",
|
|
93
|
+
"@clack/prompts": "1.0.0-alpha.1",
|
|
94
|
+
"@gitlab/gitlab-ai-provider": "3.2.0",
|
|
95
|
+
"@hono/standard-validator": "0.1.5",
|
|
96
|
+
"@hono/zod-validator": "catalog:",
|
|
97
|
+
"@jonsoc/plugin": "workspace:*",
|
|
98
|
+
"@jonsoc/script": "workspace:*",
|
|
99
|
+
"@jonsoc/sdk": "workspace:*",
|
|
100
|
+
"@jonsoc/util": "workspace:*",
|
|
101
|
+
"@modelcontextprotocol/sdk": "1.25.2",
|
|
102
|
+
"@octokit/graphql": "9.0.2",
|
|
103
|
+
"@octokit/rest": "catalog:",
|
|
104
|
+
"@openauthjs/openauth": "catalog:",
|
|
105
|
+
"@openrouter/ai-sdk-provider": "1.5.2",
|
|
106
|
+
"@opentui/core": "0.1.75",
|
|
107
|
+
"@opentui/solid": "0.1.75",
|
|
108
|
+
"@parcel/watcher": "2.5.1",
|
|
109
|
+
"@pierre/diffs": "catalog:",
|
|
110
|
+
"@solid-primitives/event-bus": "1.1.2",
|
|
111
|
+
"@solid-primitives/scheduled": "1.5.2",
|
|
112
|
+
"@standard-schema/spec": "1.0.0",
|
|
113
|
+
"@zip.js/zip.js": "2.7.62",
|
|
114
|
+
"ai": "catalog:",
|
|
115
|
+
"bonjour-service": "1.3.0",
|
|
116
|
+
"bun-pty": "0.4.4",
|
|
117
|
+
"chokidar": "4.0.3",
|
|
118
|
+
"clipboardy": "4.0.0",
|
|
119
|
+
"decimal.js": "10.5.0",
|
|
120
|
+
"diff": "catalog:",
|
|
121
|
+
"fuzzysort": "3.1.0",
|
|
122
|
+
"gray-matter": "4.0.3",
|
|
123
|
+
"hono": "catalog:",
|
|
124
|
+
"hono-openapi": "catalog:",
|
|
125
|
+
"ignore": "7.0.5",
|
|
126
|
+
"jsonc-parser": "3.3.1",
|
|
127
|
+
"minimatch": "10.0.3",
|
|
128
|
+
"open": "10.1.2",
|
|
129
|
+
"opentui-spinner": "0.0.6",
|
|
130
|
+
"partial-json": "0.1.7",
|
|
131
|
+
"remeda": "catalog:",
|
|
132
|
+
"solid-js": "catalog:",
|
|
133
|
+
"strip-ansi": "7.1.2",
|
|
134
|
+
"tree-sitter-bash": "0.25.0",
|
|
135
|
+
"turndown": "7.2.0",
|
|
136
|
+
"ulid": "catalog:",
|
|
137
|
+
"vscode-jsonrpc": "8.2.1",
|
|
138
|
+
"web-tree-sitter": "0.25.10",
|
|
139
|
+
"xdg-basedir": "5.1.0",
|
|
140
|
+
"yargs": "18.0.0",
|
|
141
|
+
"zod": "catalog:",
|
|
142
|
+
"zod-to-json-schema": "3.24.5"
|
|
143
|
+
},
|
|
144
|
+
"publishConfig": {
|
|
145
|
+
"access": "public"
|
|
146
|
+
}
|
|
147
|
+
}
|