nuwaxcode 1.1.32 → 1.1.44
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/bin/nuwaxcode +19 -1
- package/package.json +15 -117
- package/{script/postinstall.mjs → postinstall.mjs} +18 -6
- package/AGENTS.md +0 -27
- package/Dockerfile +0 -18
- package/README.md +0 -15
- package/bunfig.toml +0 -7
- package/parsers-config.ts +0 -253
- package/script/build.ts +0 -172
- package/script/publish-registries.ts +0 -187
- package/script/publish.ts +0 -70
- package/script/schema.ts +0 -47
- package/src/acp/README.md +0 -164
- package/src/acp/agent.ts +0 -1280
- package/src/acp/session.ts +0 -111
- package/src/acp/types.ts +0 -24
- package/src/agent/agent.ts +0 -332
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/compaction.txt +0 -12
- package/src/agent/prompt/explore.txt +0 -18
- package/src/agent/prompt/summary.txt +0 -11
- package/src/agent/prompt/title.txt +0 -43
- package/src/auth/index.ts +0 -73
- package/src/bun/index.ts +0 -134
- package/src/bus/bus-event.ts +0 -43
- package/src/bus/global.ts +0 -10
- package/src/bus/index.ts +0 -105
- package/src/cli/bootstrap.ts +0 -17
- package/src/cli/cmd/acp.ts +0 -69
- package/src/cli/cmd/agent.ts +0 -257
- package/src/cli/cmd/auth.ts +0 -400
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/debug/agent.ts +0 -166
- package/src/cli/cmd/debug/config.ts +0 -16
- package/src/cli/cmd/debug/file.ts +0 -97
- package/src/cli/cmd/debug/index.ts +0 -48
- package/src/cli/cmd/debug/lsp.ts +0 -52
- package/src/cli/cmd/debug/ripgrep.ts +0 -87
- package/src/cli/cmd/debug/scrap.ts +0 -16
- package/src/cli/cmd/debug/skill.ts +0 -16
- package/src/cli/cmd/debug/snapshot.ts +0 -52
- package/src/cli/cmd/export.ts +0 -88
- package/src/cli/cmd/generate.ts +0 -38
- package/src/cli/cmd/github.ts +0 -1548
- package/src/cli/cmd/import.ts +0 -98
- package/src/cli/cmd/mcp.ts +0 -755
- package/src/cli/cmd/models.ts +0 -77
- package/src/cli/cmd/pr.ts +0 -112
- package/src/cli/cmd/run.ts +0 -395
- package/src/cli/cmd/serve.ts +0 -20
- package/src/cli/cmd/session.ts +0 -135
- package/src/cli/cmd/stats.ts +0 -402
- package/src/cli/cmd/tui/app.tsx +0 -761
- package/src/cli/cmd/tui/attach.ts +0 -31
- package/src/cli/cmd/tui/component/border.tsx +0 -21
- package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-command.tsx +0 -148
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -234
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -256
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -114
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
- package/src/cli/cmd/tui/component/dialog-status.tsx +0 -164
- package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
- package/src/cli/cmd/tui/component/logo.tsx +0 -88
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -632
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -89
- package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
- package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1096
- package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
- package/src/cli/cmd/tui/component/tips.tsx +0 -153
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/context/args.tsx +0 -14
- package/src/cli/cmd/tui/context/directory.ts +0 -13
- package/src/cli/cmd/tui/context/exit.tsx +0 -23
- package/src/cli/cmd/tui/context/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/keybind.tsx +0 -101
- package/src/cli/cmd/tui/context/kv.tsx +0 -52
- package/src/cli/cmd/tui/context/local.tsx +0 -402
- package/src/cli/cmd/tui/context/prompt.tsx +0 -18
- package/src/cli/cmd/tui/context/route.tsx +0 -46
- package/src/cli/cmd/tui/context/sdk.tsx +0 -94
- package/src/cli/cmd/tui/context/sync.tsx +0 -427
- package/src/cli/cmd/tui/context/theme/aura.json +0 -69
- package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
- package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
- package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
- package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
- package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
- package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
- package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
- package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
- package/src/cli/cmd/tui/context/theme/github.json +0 -233
- package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -95
- package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
- package/src/cli/cmd/tui/context/theme/material.json +0 -235
- package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
- package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
- package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
- package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
- package/src/cli/cmd/tui/context/theme/nord.json +0 -223
- package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
- package/src/cli/cmd/tui/context/theme/orng.json +0 -249
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
- package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
- package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
- package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
- package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
- package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
- package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
- package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
- package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
- package/src/cli/cmd/tui/context/theme.tsx +0 -1152
- package/src/cli/cmd/tui/event.ts +0 -48
- package/src/cli/cmd/tui/routes/home.tsx +0 -140
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -64
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -109
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
- package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
- package/src/cli/cmd/tui/routes/session/header.tsx +0 -136
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -2050
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -495
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -435
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -312
- package/src/cli/cmd/tui/thread.ts +0 -165
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -57
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -83
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -204
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -38
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -77
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -354
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -167
- package/src/cli/cmd/tui/ui/link.tsx +0 -28
- package/src/cli/cmd/tui/ui/spinner.ts +0 -368
- package/src/cli/cmd/tui/ui/toast.tsx +0 -100
- package/src/cli/cmd/tui/util/clipboard.ts +0 -160
- package/src/cli/cmd/tui/util/editor.ts +0 -32
- package/src/cli/cmd/tui/util/signal.ts +0 -7
- package/src/cli/cmd/tui/util/terminal.ts +0 -114
- package/src/cli/cmd/tui/util/transcript.ts +0 -98
- package/src/cli/cmd/tui/worker.ts +0 -152
- package/src/cli/cmd/uninstall.ts +0 -357
- package/src/cli/cmd/upgrade.ts +0 -73
- package/src/cli/cmd/web.ts +0 -81
- package/src/cli/error.ts +0 -57
- package/src/cli/network.ts +0 -53
- package/src/cli/ui.ts +0 -84
- package/src/cli/upgrade.ts +0 -25
- package/src/command/index.ts +0 -131
- package/src/command/template/initialize.txt +0 -10
- package/src/command/template/review.txt +0 -99
- package/src/config/config.ts +0 -1255
- package/src/config/markdown.ts +0 -93
- package/src/env/index.ts +0 -26
- package/src/file/ignore.ts +0 -83
- package/src/file/index.ts +0 -411
- package/src/file/ripgrep.ts +0 -409
- package/src/file/time.ts +0 -64
- package/src/file/watcher.ts +0 -118
- package/src/flag/flag.ts +0 -54
- package/src/format/formatter.ts +0 -359
- package/src/format/index.ts +0 -137
- package/src/global/index.ts +0 -55
- package/src/id/id.ts +0 -83
- package/src/ide/index.ts +0 -76
- package/src/index.ts +0 -159
- package/src/installation/index.ts +0 -246
- package/src/lsp/client.ts +0 -252
- package/src/lsp/index.ts +0 -485
- package/src/lsp/language.ts +0 -119
- package/src/lsp/server.ts +0 -2046
- package/src/mcp/auth.ts +0 -135
- package/src/mcp/index.ts +0 -926
- package/src/mcp/oauth-callback.ts +0 -200
- package/src/mcp/oauth-provider.ts +0 -154
- package/src/patch/index.ts +0 -680
- package/src/permission/arity.ts +0 -163
- package/src/permission/index.ts +0 -210
- package/src/permission/next.ts +0 -269
- package/src/plugin/codex.ts +0 -493
- package/src/plugin/copilot.ts +0 -269
- package/src/plugin/index.ts +0 -135
- package/src/project/bootstrap.ts +0 -35
- package/src/project/instance.ts +0 -91
- package/src/project/project.ts +0 -320
- package/src/project/state.ts +0 -66
- package/src/project/vcs.ts +0 -76
- package/src/provider/auth.ts +0 -147
- package/src/provider/models-macro.ts +0 -11
- package/src/provider/models.ts +0 -112
- package/src/provider/provider.ts +0 -1219
- package/src/provider/sdk/openai-compatible/src/README.md +0 -5
- package/src/provider/sdk/openai-compatible/src/index.ts +0 -2
- package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +0 -100
- package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +0 -303
- package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +0 -22
- package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +0 -18
- package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +0 -22
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +0 -207
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +0 -1732
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +0 -177
- package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +0 -1
- package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +0 -88
- package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +0 -128
- package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +0 -115
- package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +0 -65
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +0 -104
- package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +0 -103
- package/src/provider/transform.ts +0 -724
- package/src/pty/index.ts +0 -229
- package/src/question/index.ts +0 -171
- package/src/scheduler/index.ts +0 -61
- package/src/server/error.ts +0 -36
- package/src/server/mdns.ts +0 -59
- package/src/server/routes/config.ts +0 -92
- package/src/server/routes/experimental.ts +0 -157
- package/src/server/routes/file.ts +0 -197
- package/src/server/routes/global.ts +0 -135
- package/src/server/routes/mcp.ts +0 -225
- package/src/server/routes/permission.ts +0 -68
- package/src/server/routes/project.ts +0 -82
- package/src/server/routes/provider.ts +0 -165
- package/src/server/routes/pty.ts +0 -169
- package/src/server/routes/question.ts +0 -98
- package/src/server/routes/session.ts +0 -935
- package/src/server/routes/tui.ts +0 -379
- package/src/server/server.ts +0 -578
- package/src/session/compaction.ts +0 -225
- package/src/session/index.ts +0 -488
- package/src/session/llm.ts +0 -279
- package/src/session/message-v2.ts +0 -702
- package/src/session/message.ts +0 -189
- package/src/session/processor.ts +0 -406
- package/src/session/prompt/anthropic-20250930.txt +0 -166
- package/src/session/prompt/anthropic.txt +0 -105
- package/src/session/prompt/anthropic_spoof.txt +0 -1
- package/src/session/prompt/beast.txt +0 -147
- package/src/session/prompt/build-switch.txt +0 -5
- package/src/session/prompt/codex.txt +0 -73
- package/src/session/prompt/codex_header.txt +0 -72
- package/src/session/prompt/copilot-gpt-5.txt +0 -143
- package/src/session/prompt/gemini.txt +0 -155
- package/src/session/prompt/max-steps.txt +0 -16
- package/src/session/prompt/plan-reminder-anthropic.txt +0 -67
- package/src/session/prompt/plan.txt +0 -26
- package/src/session/prompt/qwen.txt +0 -109
- package/src/session/prompt.ts +0 -1805
- package/src/session/retry.ts +0 -90
- package/src/session/revert.ts +0 -108
- package/src/session/status.ts +0 -76
- package/src/session/summary.ts +0 -150
- package/src/session/system.ts +0 -138
- package/src/session/todo.ts +0 -37
- package/src/share/share-next.ts +0 -194
- package/src/share/share.ts +0 -87
- package/src/shell/shell.ts +0 -67
- package/src/skill/index.ts +0 -1
- package/src/skill/skill.ts +0 -136
- package/src/snapshot/index.ts +0 -236
- package/src/storage/storage.ts +0 -227
- package/src/tool/apply_patch.ts +0 -277
- package/src/tool/apply_patch.txt +0 -1
- package/src/tool/bash.ts +0 -258
- package/src/tool/bash.txt +0 -115
- package/src/tool/batch.ts +0 -175
- package/src/tool/batch.txt +0 -24
- package/src/tool/codesearch.ts +0 -132
- package/src/tool/codesearch.txt +0 -12
- package/src/tool/edit.ts +0 -645
- package/src/tool/edit.txt +0 -10
- package/src/tool/external-directory.ts +0 -32
- package/src/tool/glob.ts +0 -77
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.ts +0 -154
- package/src/tool/grep.txt +0 -8
- package/src/tool/invalid.ts +0 -17
- package/src/tool/ls.ts +0 -121
- package/src/tool/ls.txt +0 -1
- package/src/tool/lsp.ts +0 -96
- package/src/tool/lsp.txt +0 -19
- package/src/tool/multiedit.ts +0 -46
- package/src/tool/multiedit.txt +0 -41
- package/src/tool/plan-enter.txt +0 -14
- package/src/tool/plan-exit.txt +0 -13
- package/src/tool/plan.ts +0 -130
- package/src/tool/question.ts +0 -33
- package/src/tool/question.txt +0 -10
- package/src/tool/read.ts +0 -202
- package/src/tool/read.txt +0 -12
- package/src/tool/registry.ts +0 -158
- package/src/tool/skill.ts +0 -75
- package/src/tool/task.ts +0 -188
- package/src/tool/task.txt +0 -60
- package/src/tool/todo.ts +0 -53
- package/src/tool/todoread.txt +0 -14
- package/src/tool/todowrite.txt +0 -167
- package/src/tool/tool.ts +0 -88
- package/src/tool/truncation.ts +0 -106
- package/src/tool/webfetch.ts +0 -182
- package/src/tool/webfetch.txt +0 -13
- package/src/tool/websearch.ts +0 -150
- package/src/tool/websearch.txt +0 -14
- package/src/tool/write.ts +0 -80
- package/src/tool/write.txt +0 -8
- package/src/util/archive.ts +0 -16
- package/src/util/color.ts +0 -19
- package/src/util/context.ts +0 -25
- package/src/util/defer.ts +0 -12
- package/src/util/eventloop.ts +0 -20
- package/src/util/filesystem.ts +0 -93
- package/src/util/fn.ts +0 -11
- package/src/util/format.ts +0 -20
- package/src/util/iife.ts +0 -3
- package/src/util/keybind.ts +0 -103
- package/src/util/lazy.ts +0 -18
- package/src/util/locale.ts +0 -81
- package/src/util/lock.ts +0 -98
- package/src/util/log.ts +0 -180
- package/src/util/queue.ts +0 -32
- package/src/util/rpc.ts +0 -66
- package/src/util/scrap.ts +0 -10
- package/src/util/signal.ts +0 -12
- package/src/util/timeout.ts +0 -14
- package/src/util/token.ts +0 -7
- package/src/util/wildcard.ts +0 -56
- package/src/worktree/index.ts +0 -217
- package/sst-env.d.ts +0 -9
- package/test/acp/event-subscription.test.ts +0 -436
- package/test/acp/system-prompt.test.ts +0 -262
- package/test/agent/agent.test.ts +0 -638
- package/test/bun.test.ts +0 -53
- package/test/cli/github-action.test.ts +0 -129
- package/test/cli/github-remote.test.ts +0 -80
- package/test/cli/tui/transcript.test.ts +0 -297
- package/test/config/agent-color.test.ts +0 -66
- package/test/config/config.test.ts +0 -1414
- package/test/config/fixtures/empty-frontmatter.md +0 -4
- package/test/config/fixtures/frontmatter.md +0 -28
- package/test/config/fixtures/no-frontmatter.md +0 -1
- package/test/config/markdown.test.ts +0 -192
- package/test/file/ignore.test.ts +0 -10
- package/test/file/path-traversal.test.ts +0 -198
- package/test/fixture/fixture.ts +0 -45
- package/test/fixture/lsp/fake-lsp-server.js +0 -77
- package/test/ide/ide.test.ts +0 -82
- package/test/keybind.test.ts +0 -421
- package/test/lsp/client.test.ts +0 -95
- package/test/mcp/headers.test.ts +0 -153
- package/test/mcp/oauth-browser.test.ts +0 -261
- package/test/patch/patch.test.ts +0 -348
- package/test/permission/arity.test.ts +0 -33
- package/test/permission/next.test.ts +0 -652
- package/test/permission-task.test.ts +0 -319
- package/test/plugin/codex.test.ts +0 -123
- package/test/preload.ts +0 -65
- package/test/project/project.test.ts +0 -120
- package/test/provider/amazon-bedrock.test.ts +0 -268
- package/test/provider/gitlab-duo.test.ts +0 -286
- package/test/provider/provider.test.ts +0 -2149
- package/test/provider/transform.test.ts +0 -1596
- package/test/question/question.test.ts +0 -300
- package/test/scheduler.test.ts +0 -73
- package/test/server/session-list.test.ts +0 -39
- package/test/server/session-select.test.ts +0 -78
- package/test/session/compaction.test.ts +0 -293
- package/test/session/llm.test.ts +0 -90
- package/test/session/message-v2.test.ts +0 -662
- package/test/session/retry.test.ts +0 -131
- package/test/session/revert-compact.test.ts +0 -285
- package/test/session/session.test.ts +0 -71
- package/test/skill/skill.test.ts +0 -185
- package/test/snapshot/snapshot.test.ts +0 -939
- package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
- package/test/tool/apply_patch.test.ts +0 -515
- package/test/tool/bash.test.ts +0 -320
- package/test/tool/external-directory.test.ts +0 -126
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +0 -33453
- package/test/tool/grep.test.ts +0 -109
- package/test/tool/question.test.ts +0 -105
- package/test/tool/read.test.ts +0 -332
- package/test/tool/registry.test.ts +0 -76
- package/test/tool/truncation.test.ts +0 -159
- package/test/util/filesystem.test.ts +0 -39
- package/test/util/format.test.ts +0 -59
- package/test/util/iife.test.ts +0 -36
- package/test/util/lazy.test.ts +0 -50
- package/test/util/lock.test.ts +0 -72
- package/test/util/timeout.test.ts +0 -21
- package/test/util/wildcard.test.ts +0 -75
- package/tsconfig.json +0 -16
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { basename } from "path"
|
|
3
|
-
import { Agent } from "../../../agent/agent"
|
|
4
|
-
import { Provider } from "../../../provider/provider"
|
|
5
|
-
import { Session } from "../../../session"
|
|
6
|
-
import type { MessageV2 } from "../../../session/message-v2"
|
|
7
|
-
import { Identifier } from "../../../id/id"
|
|
8
|
-
import { ToolRegistry } from "../../../tool/registry"
|
|
9
|
-
import { Instance } from "../../../project/instance"
|
|
10
|
-
import { PermissionNext } from "../../../permission/next"
|
|
11
|
-
import { iife } from "../../../util/iife"
|
|
12
|
-
import { bootstrap } from "../../bootstrap"
|
|
13
|
-
import { cmd } from "../cmd"
|
|
14
|
-
|
|
15
|
-
export const AgentCommand = cmd({
|
|
16
|
-
command: "agent <name>",
|
|
17
|
-
describe: "show agent configuration details",
|
|
18
|
-
builder: (yargs) =>
|
|
19
|
-
yargs
|
|
20
|
-
.positional("name", {
|
|
21
|
-
type: "string",
|
|
22
|
-
demandOption: true,
|
|
23
|
-
description: "Agent name",
|
|
24
|
-
})
|
|
25
|
-
.option("tool", {
|
|
26
|
-
type: "string",
|
|
27
|
-
description: "Tool id to execute",
|
|
28
|
-
})
|
|
29
|
-
.option("params", {
|
|
30
|
-
type: "string",
|
|
31
|
-
description: "Tool params as JSON or a JS object literal",
|
|
32
|
-
}),
|
|
33
|
-
async handler(args) {
|
|
34
|
-
await bootstrap(process.cwd(), async () => {
|
|
35
|
-
const agentName = args.name as string
|
|
36
|
-
const agent = await Agent.get(agentName)
|
|
37
|
-
if (!agent) {
|
|
38
|
-
process.stderr.write(
|
|
39
|
-
`Agent ${agentName} not found, run '${basename(process.execPath)} agent list' to get an agent list` + EOL,
|
|
40
|
-
)
|
|
41
|
-
process.exit(1)
|
|
42
|
-
}
|
|
43
|
-
const availableTools = await getAvailableTools(agent)
|
|
44
|
-
const resolvedTools = await resolveTools(agent, availableTools)
|
|
45
|
-
const toolID = args.tool as string | undefined
|
|
46
|
-
if (toolID) {
|
|
47
|
-
const tool = availableTools.find((item) => item.id === toolID)
|
|
48
|
-
if (!tool) {
|
|
49
|
-
process.stderr.write(`Tool ${toolID} not found for agent ${agentName}` + EOL)
|
|
50
|
-
process.exit(1)
|
|
51
|
-
}
|
|
52
|
-
if (resolvedTools[toolID] === false) {
|
|
53
|
-
process.stderr.write(`Tool ${toolID} is disabled for agent ${agentName}` + EOL)
|
|
54
|
-
process.exit(1)
|
|
55
|
-
}
|
|
56
|
-
const params = parseToolParams(args.params as string | undefined)
|
|
57
|
-
const ctx = await createToolContext(agent)
|
|
58
|
-
const result = await tool.execute(params, ctx)
|
|
59
|
-
process.stdout.write(JSON.stringify({ tool: toolID, input: params, result }, null, 2) + EOL)
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const output = {
|
|
64
|
-
...agent,
|
|
65
|
-
tools: resolvedTools,
|
|
66
|
-
}
|
|
67
|
-
process.stdout.write(JSON.stringify(output, null, 2) + EOL)
|
|
68
|
-
})
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
async function getAvailableTools(agent: Agent.Info) {
|
|
73
|
-
const model = agent.model ?? (await Provider.defaultModel())
|
|
74
|
-
return ToolRegistry.tools(model, agent)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async function resolveTools(agent: Agent.Info, availableTools: Awaited<ReturnType<typeof getAvailableTools>>) {
|
|
78
|
-
const disabled = PermissionNext.disabled(
|
|
79
|
-
availableTools.map((tool) => tool.id),
|
|
80
|
-
agent.permission,
|
|
81
|
-
)
|
|
82
|
-
const resolved: Record<string, boolean> = {}
|
|
83
|
-
for (const tool of availableTools) {
|
|
84
|
-
resolved[tool.id] = !disabled.has(tool.id)
|
|
85
|
-
}
|
|
86
|
-
return resolved
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function parseToolParams(input?: string) {
|
|
90
|
-
if (!input) return {}
|
|
91
|
-
const trimmed = input.trim()
|
|
92
|
-
if (trimmed.length === 0) return {}
|
|
93
|
-
|
|
94
|
-
const parsed = iife(() => {
|
|
95
|
-
try {
|
|
96
|
-
return JSON.parse(trimmed)
|
|
97
|
-
} catch (jsonError) {
|
|
98
|
-
try {
|
|
99
|
-
return new Function(`return (${trimmed})`)()
|
|
100
|
-
} catch (evalError) {
|
|
101
|
-
throw new Error(
|
|
102
|
-
`Failed to parse --params. Use JSON or a JS object literal. JSON error: ${jsonError}. Eval error: ${evalError}.`,
|
|
103
|
-
)
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
109
|
-
throw new Error("Tool params must be an object.")
|
|
110
|
-
}
|
|
111
|
-
return parsed as Record<string, unknown>
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
async function createToolContext(agent: Agent.Info) {
|
|
115
|
-
const session = await Session.create({ title: `Debug tool run (${agent.name})` })
|
|
116
|
-
const messageID = Identifier.ascending("message")
|
|
117
|
-
const model = agent.model ?? (await Provider.defaultModel())
|
|
118
|
-
const now = Date.now()
|
|
119
|
-
const message: MessageV2.Assistant = {
|
|
120
|
-
id: messageID,
|
|
121
|
-
sessionID: session.id,
|
|
122
|
-
role: "assistant",
|
|
123
|
-
time: {
|
|
124
|
-
created: now,
|
|
125
|
-
},
|
|
126
|
-
parentID: messageID,
|
|
127
|
-
modelID: model.modelID,
|
|
128
|
-
providerID: model.providerID,
|
|
129
|
-
mode: "debug",
|
|
130
|
-
agent: agent.name,
|
|
131
|
-
path: {
|
|
132
|
-
cwd: Instance.directory,
|
|
133
|
-
root: Instance.worktree,
|
|
134
|
-
},
|
|
135
|
-
cost: 0,
|
|
136
|
-
tokens: {
|
|
137
|
-
input: 0,
|
|
138
|
-
output: 0,
|
|
139
|
-
reasoning: 0,
|
|
140
|
-
cache: {
|
|
141
|
-
read: 0,
|
|
142
|
-
write: 0,
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
}
|
|
146
|
-
await Session.updateMessage(message)
|
|
147
|
-
|
|
148
|
-
const ruleset = PermissionNext.merge(agent.permission, session.permission ?? [])
|
|
149
|
-
|
|
150
|
-
return {
|
|
151
|
-
sessionID: session.id,
|
|
152
|
-
messageID,
|
|
153
|
-
callID: Identifier.ascending("part"),
|
|
154
|
-
agent: agent.name,
|
|
155
|
-
abort: new AbortController().signal,
|
|
156
|
-
metadata: () => {},
|
|
157
|
-
async ask(req: Omit<PermissionNext.Request, "id" | "sessionID" | "tool">) {
|
|
158
|
-
for (const pattern of req.patterns) {
|
|
159
|
-
const rule = PermissionNext.evaluate(req.permission, pattern, ruleset)
|
|
160
|
-
if (rule.action === "deny") {
|
|
161
|
-
throw new PermissionNext.DeniedError(ruleset)
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
}
|
|
166
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { Config } from "../../../config/config"
|
|
3
|
-
import { bootstrap } from "../../bootstrap"
|
|
4
|
-
import { cmd } from "../cmd"
|
|
5
|
-
|
|
6
|
-
export const ConfigCommand = cmd({
|
|
7
|
-
command: "config",
|
|
8
|
-
describe: "show resolved configuration",
|
|
9
|
-
builder: (yargs) => yargs,
|
|
10
|
-
async handler() {
|
|
11
|
-
await bootstrap(process.cwd(), async () => {
|
|
12
|
-
const config = await Config.get()
|
|
13
|
-
process.stdout.write(JSON.stringify(config, null, 2) + EOL)
|
|
14
|
-
})
|
|
15
|
-
},
|
|
16
|
-
})
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { File } from "../../../file"
|
|
3
|
-
import { bootstrap } from "../../bootstrap"
|
|
4
|
-
import { cmd } from "../cmd"
|
|
5
|
-
import { Ripgrep } from "@/file/ripgrep"
|
|
6
|
-
|
|
7
|
-
const FileSearchCommand = cmd({
|
|
8
|
-
command: "search <query>",
|
|
9
|
-
describe: "search files by query",
|
|
10
|
-
builder: (yargs) =>
|
|
11
|
-
yargs.positional("query", {
|
|
12
|
-
type: "string",
|
|
13
|
-
demandOption: true,
|
|
14
|
-
description: "Search query",
|
|
15
|
-
}),
|
|
16
|
-
async handler(args) {
|
|
17
|
-
await bootstrap(process.cwd(), async () => {
|
|
18
|
-
const results = await File.search({ query: args.query })
|
|
19
|
-
process.stdout.write(results.join(EOL) + EOL)
|
|
20
|
-
})
|
|
21
|
-
},
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
const FileReadCommand = cmd({
|
|
25
|
-
command: "read <path>",
|
|
26
|
-
describe: "read file contents as JSON",
|
|
27
|
-
builder: (yargs) =>
|
|
28
|
-
yargs.positional("path", {
|
|
29
|
-
type: "string",
|
|
30
|
-
demandOption: true,
|
|
31
|
-
description: "File path to read",
|
|
32
|
-
}),
|
|
33
|
-
async handler(args) {
|
|
34
|
-
await bootstrap(process.cwd(), async () => {
|
|
35
|
-
const content = await File.read(args.path)
|
|
36
|
-
process.stdout.write(JSON.stringify(content, null, 2) + EOL)
|
|
37
|
-
})
|
|
38
|
-
},
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
const FileStatusCommand = cmd({
|
|
42
|
-
command: "status",
|
|
43
|
-
describe: "show file status information",
|
|
44
|
-
builder: (yargs) => yargs,
|
|
45
|
-
async handler() {
|
|
46
|
-
await bootstrap(process.cwd(), async () => {
|
|
47
|
-
const status = await File.status()
|
|
48
|
-
process.stdout.write(JSON.stringify(status, null, 2) + EOL)
|
|
49
|
-
})
|
|
50
|
-
},
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
const FileListCommand = cmd({
|
|
54
|
-
command: "list <path>",
|
|
55
|
-
describe: "list files in a directory",
|
|
56
|
-
builder: (yargs) =>
|
|
57
|
-
yargs.positional("path", {
|
|
58
|
-
type: "string",
|
|
59
|
-
demandOption: true,
|
|
60
|
-
description: "File path to list",
|
|
61
|
-
}),
|
|
62
|
-
async handler(args) {
|
|
63
|
-
await bootstrap(process.cwd(), async () => {
|
|
64
|
-
const files = await File.list(args.path)
|
|
65
|
-
process.stdout.write(JSON.stringify(files, null, 2) + EOL)
|
|
66
|
-
})
|
|
67
|
-
},
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
const FileTreeCommand = cmd({
|
|
71
|
-
command: "tree [dir]",
|
|
72
|
-
describe: "show directory tree",
|
|
73
|
-
builder: (yargs) =>
|
|
74
|
-
yargs.positional("dir", {
|
|
75
|
-
type: "string",
|
|
76
|
-
description: "Directory to tree",
|
|
77
|
-
default: process.cwd(),
|
|
78
|
-
}),
|
|
79
|
-
async handler(args) {
|
|
80
|
-
const files = await Ripgrep.tree({ cwd: args.dir, limit: 200 })
|
|
81
|
-
console.log(JSON.stringify(files, null, 2))
|
|
82
|
-
},
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
export const FileCommand = cmd({
|
|
86
|
-
command: "file",
|
|
87
|
-
describe: "file system debugging utilities",
|
|
88
|
-
builder: (yargs) =>
|
|
89
|
-
yargs
|
|
90
|
-
.command(FileReadCommand)
|
|
91
|
-
.command(FileStatusCommand)
|
|
92
|
-
.command(FileListCommand)
|
|
93
|
-
.command(FileSearchCommand)
|
|
94
|
-
.command(FileTreeCommand)
|
|
95
|
-
.demandCommand(),
|
|
96
|
-
async handler() {},
|
|
97
|
-
})
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Global } from "../../../global"
|
|
2
|
-
import { bootstrap } from "../../bootstrap"
|
|
3
|
-
import { cmd } from "../cmd"
|
|
4
|
-
import { ConfigCommand } from "./config"
|
|
5
|
-
import { FileCommand } from "./file"
|
|
6
|
-
import { LSPCommand } from "./lsp"
|
|
7
|
-
import { RipgrepCommand } from "./ripgrep"
|
|
8
|
-
import { ScrapCommand } from "./scrap"
|
|
9
|
-
import { SkillCommand } from "./skill"
|
|
10
|
-
import { SnapshotCommand } from "./snapshot"
|
|
11
|
-
import { AgentCommand } from "./agent"
|
|
12
|
-
|
|
13
|
-
export const DebugCommand = cmd({
|
|
14
|
-
command: "debug",
|
|
15
|
-
describe: "debugging and troubleshooting tools",
|
|
16
|
-
builder: (yargs) =>
|
|
17
|
-
yargs
|
|
18
|
-
.command(ConfigCommand)
|
|
19
|
-
.command(LSPCommand)
|
|
20
|
-
.command(RipgrepCommand)
|
|
21
|
-
.command(FileCommand)
|
|
22
|
-
.command(ScrapCommand)
|
|
23
|
-
.command(SkillCommand)
|
|
24
|
-
.command(SnapshotCommand)
|
|
25
|
-
.command(AgentCommand)
|
|
26
|
-
.command(PathsCommand)
|
|
27
|
-
.command({
|
|
28
|
-
command: "wait",
|
|
29
|
-
describe: "wait indefinitely (for debugging)",
|
|
30
|
-
async handler() {
|
|
31
|
-
await bootstrap(process.cwd(), async () => {
|
|
32
|
-
await new Promise((resolve) => setTimeout(resolve, 1_000 * 60 * 60 * 24))
|
|
33
|
-
})
|
|
34
|
-
},
|
|
35
|
-
})
|
|
36
|
-
.demandCommand(),
|
|
37
|
-
async handler() {},
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
const PathsCommand = cmd({
|
|
41
|
-
command: "paths",
|
|
42
|
-
describe: "show global paths (data, config, cache, state)",
|
|
43
|
-
handler() {
|
|
44
|
-
for (const [key, value] of Object.entries(Global.Path)) {
|
|
45
|
-
console.log(key.padEnd(10), value)
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
})
|
package/src/cli/cmd/debug/lsp.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { LSP } from "../../../lsp"
|
|
2
|
-
import { bootstrap } from "../../bootstrap"
|
|
3
|
-
import { cmd } from "../cmd"
|
|
4
|
-
import { Log } from "../../../util/log"
|
|
5
|
-
import { EOL } from "os"
|
|
6
|
-
|
|
7
|
-
export const LSPCommand = cmd({
|
|
8
|
-
command: "lsp",
|
|
9
|
-
describe: "LSP debugging utilities",
|
|
10
|
-
builder: (yargs) =>
|
|
11
|
-
yargs.command(DiagnosticsCommand).command(SymbolsCommand).command(DocumentSymbolsCommand).demandCommand(),
|
|
12
|
-
async handler() {},
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
const DiagnosticsCommand = cmd({
|
|
16
|
-
command: "diagnostics <file>",
|
|
17
|
-
describe: "get diagnostics for a file",
|
|
18
|
-
builder: (yargs) => yargs.positional("file", { type: "string", demandOption: true }),
|
|
19
|
-
async handler(args) {
|
|
20
|
-
await bootstrap(process.cwd(), async () => {
|
|
21
|
-
await LSP.touchFile(args.file, true)
|
|
22
|
-
await Bun.sleep(1000)
|
|
23
|
-
process.stdout.write(JSON.stringify(await LSP.diagnostics(), null, 2) + EOL)
|
|
24
|
-
})
|
|
25
|
-
},
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
export const SymbolsCommand = cmd({
|
|
29
|
-
command: "symbols <query>",
|
|
30
|
-
describe: "search workspace symbols",
|
|
31
|
-
builder: (yargs) => yargs.positional("query", { type: "string", demandOption: true }),
|
|
32
|
-
async handler(args) {
|
|
33
|
-
await bootstrap(process.cwd(), async () => {
|
|
34
|
-
using _ = Log.Default.time("symbols")
|
|
35
|
-
const results = await LSP.workspaceSymbol(args.query)
|
|
36
|
-
process.stdout.write(JSON.stringify(results, null, 2) + EOL)
|
|
37
|
-
})
|
|
38
|
-
},
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
export const DocumentSymbolsCommand = cmd({
|
|
42
|
-
command: "document-symbols <uri>",
|
|
43
|
-
describe: "get symbols from a document",
|
|
44
|
-
builder: (yargs) => yargs.positional("uri", { type: "string", demandOption: true }),
|
|
45
|
-
async handler(args) {
|
|
46
|
-
await bootstrap(process.cwd(), async () => {
|
|
47
|
-
using _ = Log.Default.time("document-symbols")
|
|
48
|
-
const results = await LSP.documentSymbol(args.uri)
|
|
49
|
-
process.stdout.write(JSON.stringify(results, null, 2) + EOL)
|
|
50
|
-
})
|
|
51
|
-
},
|
|
52
|
-
})
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { Ripgrep } from "../../../file/ripgrep"
|
|
3
|
-
import { Instance } from "../../../project/instance"
|
|
4
|
-
import { bootstrap } from "../../bootstrap"
|
|
5
|
-
import { cmd } from "../cmd"
|
|
6
|
-
|
|
7
|
-
export const RipgrepCommand = cmd({
|
|
8
|
-
command: "rg",
|
|
9
|
-
describe: "ripgrep debugging utilities",
|
|
10
|
-
builder: (yargs) => yargs.command(TreeCommand).command(FilesCommand).command(SearchCommand).demandCommand(),
|
|
11
|
-
async handler() {},
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
const TreeCommand = cmd({
|
|
15
|
-
command: "tree",
|
|
16
|
-
describe: "show file tree using ripgrep",
|
|
17
|
-
builder: (yargs) =>
|
|
18
|
-
yargs.option("limit", {
|
|
19
|
-
type: "number",
|
|
20
|
-
}),
|
|
21
|
-
async handler(args) {
|
|
22
|
-
await bootstrap(process.cwd(), async () => {
|
|
23
|
-
process.stdout.write((await Ripgrep.tree({ cwd: Instance.directory, limit: args.limit })) + EOL)
|
|
24
|
-
})
|
|
25
|
-
},
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
const FilesCommand = cmd({
|
|
29
|
-
command: "files",
|
|
30
|
-
describe: "list files using ripgrep",
|
|
31
|
-
builder: (yargs) =>
|
|
32
|
-
yargs
|
|
33
|
-
.option("query", {
|
|
34
|
-
type: "string",
|
|
35
|
-
description: "Filter files by query",
|
|
36
|
-
})
|
|
37
|
-
.option("glob", {
|
|
38
|
-
type: "string",
|
|
39
|
-
description: "Glob pattern to match files",
|
|
40
|
-
})
|
|
41
|
-
.option("limit", {
|
|
42
|
-
type: "number",
|
|
43
|
-
description: "Limit number of results",
|
|
44
|
-
}),
|
|
45
|
-
async handler(args) {
|
|
46
|
-
await bootstrap(process.cwd(), async () => {
|
|
47
|
-
const files: string[] = []
|
|
48
|
-
for await (const file of Ripgrep.files({
|
|
49
|
-
cwd: Instance.directory,
|
|
50
|
-
glob: args.glob ? [args.glob] : undefined,
|
|
51
|
-
})) {
|
|
52
|
-
files.push(file)
|
|
53
|
-
if (args.limit && files.length >= args.limit) break
|
|
54
|
-
}
|
|
55
|
-
process.stdout.write(files.join(EOL) + EOL)
|
|
56
|
-
})
|
|
57
|
-
},
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
const SearchCommand = cmd({
|
|
61
|
-
command: "search <pattern>",
|
|
62
|
-
describe: "search file contents using ripgrep",
|
|
63
|
-
builder: (yargs) =>
|
|
64
|
-
yargs
|
|
65
|
-
.positional("pattern", {
|
|
66
|
-
type: "string",
|
|
67
|
-
demandOption: true,
|
|
68
|
-
description: "Search pattern",
|
|
69
|
-
})
|
|
70
|
-
.option("glob", {
|
|
71
|
-
type: "array",
|
|
72
|
-
description: "File glob patterns",
|
|
73
|
-
})
|
|
74
|
-
.option("limit", {
|
|
75
|
-
type: "number",
|
|
76
|
-
description: "Limit number of results",
|
|
77
|
-
}),
|
|
78
|
-
async handler(args) {
|
|
79
|
-
const results = await Ripgrep.search({
|
|
80
|
-
cwd: process.cwd(),
|
|
81
|
-
pattern: args.pattern,
|
|
82
|
-
glob: args.glob as string[] | undefined,
|
|
83
|
-
limit: args.limit,
|
|
84
|
-
})
|
|
85
|
-
process.stdout.write(JSON.stringify(results, null, 2) + EOL)
|
|
86
|
-
},
|
|
87
|
-
})
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { Project } from "../../../project/project"
|
|
3
|
-
import { Log } from "../../../util/log"
|
|
4
|
-
import { cmd } from "../cmd"
|
|
5
|
-
|
|
6
|
-
export const ScrapCommand = cmd({
|
|
7
|
-
command: "scrap",
|
|
8
|
-
describe: "list all known projects",
|
|
9
|
-
builder: (yargs) => yargs,
|
|
10
|
-
async handler() {
|
|
11
|
-
const timer = Log.Default.time("scrap")
|
|
12
|
-
const list = await Project.list()
|
|
13
|
-
process.stdout.write(JSON.stringify(list, null, 2) + EOL)
|
|
14
|
-
timer.stop()
|
|
15
|
-
},
|
|
16
|
-
})
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { EOL } from "os"
|
|
2
|
-
import { Skill } from "../../../skill"
|
|
3
|
-
import { bootstrap } from "../../bootstrap"
|
|
4
|
-
import { cmd } from "../cmd"
|
|
5
|
-
|
|
6
|
-
export const SkillCommand = cmd({
|
|
7
|
-
command: "skill",
|
|
8
|
-
describe: "list all available skills",
|
|
9
|
-
builder: (yargs) => yargs,
|
|
10
|
-
async handler() {
|
|
11
|
-
await bootstrap(process.cwd(), async () => {
|
|
12
|
-
const skills = await Skill.all()
|
|
13
|
-
process.stdout.write(JSON.stringify(skills, null, 2) + EOL)
|
|
14
|
-
})
|
|
15
|
-
},
|
|
16
|
-
})
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { Snapshot } from "../../../snapshot"
|
|
2
|
-
import { bootstrap } from "../../bootstrap"
|
|
3
|
-
import { cmd } from "../cmd"
|
|
4
|
-
|
|
5
|
-
export const SnapshotCommand = cmd({
|
|
6
|
-
command: "snapshot",
|
|
7
|
-
describe: "snapshot debugging utilities",
|
|
8
|
-
builder: (yargs) => yargs.command(TrackCommand).command(PatchCommand).command(DiffCommand).demandCommand(),
|
|
9
|
-
async handler() {},
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
const TrackCommand = cmd({
|
|
13
|
-
command: "track",
|
|
14
|
-
describe: "track current snapshot state",
|
|
15
|
-
async handler() {
|
|
16
|
-
await bootstrap(process.cwd(), async () => {
|
|
17
|
-
console.log(await Snapshot.track())
|
|
18
|
-
})
|
|
19
|
-
},
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
const PatchCommand = cmd({
|
|
23
|
-
command: "patch <hash>",
|
|
24
|
-
describe: "show patch for a snapshot hash",
|
|
25
|
-
builder: (yargs) =>
|
|
26
|
-
yargs.positional("hash", {
|
|
27
|
-
type: "string",
|
|
28
|
-
description: "hash",
|
|
29
|
-
demandOption: true,
|
|
30
|
-
}),
|
|
31
|
-
async handler(args) {
|
|
32
|
-
await bootstrap(process.cwd(), async () => {
|
|
33
|
-
console.log(await Snapshot.patch(args.hash))
|
|
34
|
-
})
|
|
35
|
-
},
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
const DiffCommand = cmd({
|
|
39
|
-
command: "diff <hash>",
|
|
40
|
-
describe: "show diff for a snapshot hash",
|
|
41
|
-
builder: (yargs) =>
|
|
42
|
-
yargs.positional("hash", {
|
|
43
|
-
type: "string",
|
|
44
|
-
description: "hash",
|
|
45
|
-
demandOption: true,
|
|
46
|
-
}),
|
|
47
|
-
async handler(args) {
|
|
48
|
-
await bootstrap(process.cwd(), async () => {
|
|
49
|
-
console.log(await Snapshot.diff(args.hash))
|
|
50
|
-
})
|
|
51
|
-
},
|
|
52
|
-
})
|
package/src/cli/cmd/export.ts
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import type { Argv } from "yargs"
|
|
2
|
-
import { Session } from "../../session"
|
|
3
|
-
import { cmd } from "./cmd"
|
|
4
|
-
import { bootstrap } from "../bootstrap"
|
|
5
|
-
import { UI } from "../ui"
|
|
6
|
-
import * as prompts from "@clack/prompts"
|
|
7
|
-
import { EOL } from "os"
|
|
8
|
-
|
|
9
|
-
export const ExportCommand = cmd({
|
|
10
|
-
command: "export [sessionID]",
|
|
11
|
-
describe: "export session data as JSON",
|
|
12
|
-
builder: (yargs: Argv) => {
|
|
13
|
-
return yargs.positional("sessionID", {
|
|
14
|
-
describe: "session id to export",
|
|
15
|
-
type: "string",
|
|
16
|
-
})
|
|
17
|
-
},
|
|
18
|
-
handler: async (args) => {
|
|
19
|
-
await bootstrap(process.cwd(), async () => {
|
|
20
|
-
let sessionID = args.sessionID
|
|
21
|
-
process.stderr.write(`Exporting session: ${sessionID ?? "latest"}`)
|
|
22
|
-
|
|
23
|
-
if (!sessionID) {
|
|
24
|
-
UI.empty()
|
|
25
|
-
prompts.intro("Export session", {
|
|
26
|
-
output: process.stderr,
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
const sessions = []
|
|
30
|
-
for await (const session of Session.list()) {
|
|
31
|
-
sessions.push(session)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
if (sessions.length === 0) {
|
|
35
|
-
prompts.log.error("No sessions found", {
|
|
36
|
-
output: process.stderr,
|
|
37
|
-
})
|
|
38
|
-
prompts.outro("Done", {
|
|
39
|
-
output: process.stderr,
|
|
40
|
-
})
|
|
41
|
-
return
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
sessions.sort((a, b) => b.time.updated - a.time.updated)
|
|
45
|
-
|
|
46
|
-
const selectedSession = await prompts.autocomplete({
|
|
47
|
-
message: "Select session to export",
|
|
48
|
-
maxItems: 10,
|
|
49
|
-
options: sessions.map((session) => ({
|
|
50
|
-
label: session.title,
|
|
51
|
-
value: session.id,
|
|
52
|
-
hint: `${new Date(session.time.updated).toLocaleString()} • ${session.id.slice(-8)}`,
|
|
53
|
-
})),
|
|
54
|
-
output: process.stderr,
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
if (prompts.isCancel(selectedSession)) {
|
|
58
|
-
throw new UI.CancelledError()
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
sessionID = selectedSession as string
|
|
62
|
-
|
|
63
|
-
prompts.outro("Exporting session...", {
|
|
64
|
-
output: process.stderr,
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
const sessionInfo = await Session.get(sessionID!)
|
|
70
|
-
const messages = await Session.messages({ sessionID: sessionID! })
|
|
71
|
-
|
|
72
|
-
const exportData = {
|
|
73
|
-
info: sessionInfo,
|
|
74
|
-
messages: messages.map((msg) => ({
|
|
75
|
-
info: msg.info,
|
|
76
|
-
parts: msg.parts,
|
|
77
|
-
})),
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
process.stdout.write(JSON.stringify(exportData, null, 2))
|
|
81
|
-
process.stdout.write(EOL)
|
|
82
|
-
} catch (error) {
|
|
83
|
-
UI.error(`Session not found: ${sessionID!}`)
|
|
84
|
-
process.exit(1)
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
},
|
|
88
|
-
})
|
package/src/cli/cmd/generate.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Server } from "../../server/server"
|
|
2
|
-
import type { CommandModule } from "yargs"
|
|
3
|
-
|
|
4
|
-
export const GenerateCommand = {
|
|
5
|
-
command: "generate",
|
|
6
|
-
handler: async () => {
|
|
7
|
-
const specs = await Server.openapi()
|
|
8
|
-
for (const item of Object.values(specs.paths)) {
|
|
9
|
-
for (const method of ["get", "post", "put", "delete", "patch"] as const) {
|
|
10
|
-
const operation = item[method]
|
|
11
|
-
if (!operation?.operationId) continue
|
|
12
|
-
// @ts-expect-error
|
|
13
|
-
operation["x-codeSamples"] = [
|
|
14
|
-
{
|
|
15
|
-
lang: "js",
|
|
16
|
-
source: [
|
|
17
|
-
`import { createOpencodeClient } from "@opencode-ai/sdk`,
|
|
18
|
-
``,
|
|
19
|
-
`const client = createOpencodeClient()`,
|
|
20
|
-
`await client.${operation.operationId}({`,
|
|
21
|
-
` ...`,
|
|
22
|
-
`})`,
|
|
23
|
-
].join("\n"),
|
|
24
|
-
},
|
|
25
|
-
]
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
const json = JSON.stringify(specs, null, 2)
|
|
29
|
-
|
|
30
|
-
// Wait for stdout to finish writing before process.exit() is called
|
|
31
|
-
await new Promise<void>((resolve, reject) => {
|
|
32
|
-
process.stdout.write(json, (err) => {
|
|
33
|
-
if (err) reject(err)
|
|
34
|
-
else resolve()
|
|
35
|
-
})
|
|
36
|
-
})
|
|
37
|
-
},
|
|
38
|
-
} satisfies CommandModule
|