@bloxystudios/bloxycode 1.0.2 → 1.0.5
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/bloxycode +11 -8
- package/package.json +16 -143
- package/postinstall.mjs +129 -0
- package/LICENSE +0 -21
- package/README.md +0 -286
- package/src/acp/README.md +0 -164
- package/src/acp/agent.ts +0 -1437
- package/src/acp/session.ts +0 -105
- package/src/acp/types.ts +0 -22
- package/src/agent/agent.ts +0 -356
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/bloxy.txt +0 -46
- 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 -44
- package/src/auth/index.ts +0 -73
- package/src/bloxy/event.ts +0 -41
- package/src/bloxy/index.ts +0 -5
- package/src/bloxy/parser.ts +0 -263
- package/src/bloxy/prompt.ts +0 -121
- package/src/bloxy/runner.ts +0 -193
- package/src/bloxy/state.ts +0 -246
- 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 -167
- 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 -771
- package/src/cli/cmd/tui/attach.ts +0 -39
- 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 -102
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -653
- 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 -1138
- 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 -470
- 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/bloxycode.json +0 -245
- 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 -242
- 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 -142
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -2048
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -508
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -453
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -313
- 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 -385
- 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 -86
- package/src/cli/upgrade.ts +0 -25
- package/src/command/index.ts +0 -173
- package/src/command/template/bloxy-resume.txt +0 -15
- package/src/command/template/bloxy-status.txt +0 -25
- package/src/command/template/bloxy-validate.txt +0 -22
- package/src/command/template/bloxy.txt +0 -14
- package/src/command/template/initialize.txt +0 -10
- package/src/command/template/review.txt +0 -99
- package/src/config/config.ts +0 -1367
- 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 -415
- package/src/file/ripgrep.ts +0 -407
- package/src/file/time.ts +0 -69
- package/src/file/watcher.ts +0 -127
- package/src/flag/flag.ts +0 -79
- package/src/format/formatter.ts +0 -357
- 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 -934
- 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 -280
- package/src/plugin/antigravity.ts +0 -378
- package/src/plugin/codex.ts +0 -506
- package/src/plugin/copilot.ts +0 -298
- package/src/plugin/index.ts +0 -136
- package/src/project/bootstrap.ts +0 -35
- package/src/project/instance.ts +0 -91
- package/src/project/project.ts +0 -371
- 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-snapshot.ts +0 -2
- package/src/provider/models.ts +0 -133
- package/src/provider/provider.ts +0 -1241
- 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 -741
- package/src/pty/index.ts +0 -241
- package/src/question/index.ts +0 -171
- package/src/scheduler/index.ts +0 -61
- package/src/server/error.ts +0 -36
- package/src/server/event.ts +0 -7
- package/src/server/mdns.ts +0 -59
- package/src/server/routes/config.ts +0 -92
- package/src/server/routes/experimental.ts +0 -208
- 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 -939
- package/src/server/routes/tui.ts +0 -379
- package/src/server/server.ts +0 -604
- package/src/session/compaction.ts +0 -225
- package/src/session/fallback.ts +0 -246
- package/src/session/index.ts +0 -498
- package/src/session/instruction.ts +0 -164
- package/src/session/llm.ts +0 -298
- package/src/session/message-v2.ts +0 -747
- package/src/session/message.ts +0 -189
- package/src/session/processor.ts +0 -450
- package/src/session/prompt/anthropic-20250930.txt +0 -166
- package/src/session/prompt/anthropic.txt +0 -105
- package/src/session/prompt/beast.txt +0 -147
- package/src/session/prompt/build-switch.txt +0 -5
- package/src/session/prompt/codex_header.txt +0 -79
- 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 -1822
- package/src/session/retry.ts +0 -99
- package/src/session/revert.ts +0 -121
- package/src/session/status.ts +0 -100
- package/src/session/summary.ts +0 -217
- package/src/session/system.ts +0 -52
- package/src/session/todo.ts +0 -37
- package/src/share/share-next.ts +0 -200
- package/src/share/share.ts +0 -92
- package/src/shell/shell.ts +0 -67
- package/src/skill/index.ts +0 -1
- package/src/skill/skill.ts +0 -135
- package/src/snapshot/index.ts +0 -236
- package/src/storage/storage.ts +0 -227
- package/src/tool/apply_patch.ts +0 -281
- package/src/tool/apply_patch.txt +0 -33
- 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/bloxy-control.ts +0 -123
- package/src/tool/bloxy-control.txt +0 -13
- package/src/tool/codesearch.ts +0 -132
- package/src/tool/codesearch.txt +0 -12
- package/src/tool/edit.ts +0 -655
- 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 -211
- package/src/tool/read.txt +0 -12
- package/src/tool/registry.ts +0 -161
- package/src/tool/skill.ts +0 -82
- package/src/tool/task.ts +0 -191
- 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 -89
- package/src/tool/truncation.ts +0 -106
- package/src/tool/webfetch.ts +0 -188
- 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 -85
- package/src/tool/write.txt +0 -8
- package/src/util/archive.ts +0 -16
- package/src/util/binary.ts +0 -41
- package/src/util/color.ts +0 -19
- package/src/util/context.ts +0 -25
- package/src/util/defer.ts +0 -12
- package/src/util/error.ts +0 -54
- 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 -23
- 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/slug.ts +0 -74
- 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 -549
package/src/tool/batch.ts
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import { Tool } from "./tool"
|
|
3
|
-
import DESCRIPTION from "./batch.txt"
|
|
4
|
-
|
|
5
|
-
const DISALLOWED = new Set(["batch"])
|
|
6
|
-
const FILTERED_FROM_SUGGESTIONS = new Set(["invalid", "patch", ...DISALLOWED])
|
|
7
|
-
|
|
8
|
-
export const BatchTool = Tool.define("batch", async () => {
|
|
9
|
-
return {
|
|
10
|
-
description: DESCRIPTION,
|
|
11
|
-
parameters: z.object({
|
|
12
|
-
tool_calls: z
|
|
13
|
-
.array(
|
|
14
|
-
z.object({
|
|
15
|
-
tool: z.string().describe("The name of the tool to execute"),
|
|
16
|
-
parameters: z.object({}).loose().describe("Parameters for the tool"),
|
|
17
|
-
}),
|
|
18
|
-
)
|
|
19
|
-
.min(1, "Provide at least one tool call")
|
|
20
|
-
.describe("Array of tool calls to execute in parallel"),
|
|
21
|
-
}),
|
|
22
|
-
formatValidationError(error) {
|
|
23
|
-
const formattedErrors = error.issues
|
|
24
|
-
.map((issue) => {
|
|
25
|
-
const path = issue.path.length > 0 ? issue.path.join(".") : "root"
|
|
26
|
-
return ` - ${path}: ${issue.message}`
|
|
27
|
-
})
|
|
28
|
-
.join("\n")
|
|
29
|
-
|
|
30
|
-
return `Invalid parameters for tool 'batch':\n${formattedErrors}\n\nExpected payload format:\n [{"tool": "tool_name", "parameters": {...}}, {...}]`
|
|
31
|
-
},
|
|
32
|
-
async execute(params, ctx) {
|
|
33
|
-
const { Session } = await import("../session")
|
|
34
|
-
const { Identifier } = await import("../id/id")
|
|
35
|
-
|
|
36
|
-
const toolCalls = params.tool_calls.slice(0, 25)
|
|
37
|
-
const discardedCalls = params.tool_calls.slice(25)
|
|
38
|
-
|
|
39
|
-
const { ToolRegistry } = await import("./registry")
|
|
40
|
-
const availableTools = await ToolRegistry.tools({ modelID: "", providerID: "" })
|
|
41
|
-
const toolMap = new Map(availableTools.map((t) => [t.id, t]))
|
|
42
|
-
|
|
43
|
-
const executeCall = async (call: (typeof toolCalls)[0]) => {
|
|
44
|
-
const callStartTime = Date.now()
|
|
45
|
-
const partID = Identifier.ascending("part")
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
if (DISALLOWED.has(call.tool)) {
|
|
49
|
-
throw new Error(
|
|
50
|
-
`Tool '${call.tool}' is not allowed in batch. Disallowed tools: ${Array.from(DISALLOWED).join(", ")}`,
|
|
51
|
-
)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const tool = toolMap.get(call.tool)
|
|
55
|
-
if (!tool) {
|
|
56
|
-
const availableToolsList = Array.from(toolMap.keys()).filter((name) => !FILTERED_FROM_SUGGESTIONS.has(name))
|
|
57
|
-
throw new Error(
|
|
58
|
-
`Tool '${call.tool}' not in registry. External tools (MCP, environment) cannot be batched - call them directly. Available tools: ${availableToolsList.join(", ")}`,
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
|
-
const validatedParams = tool.parameters.parse(call.parameters)
|
|
62
|
-
|
|
63
|
-
await Session.updatePart({
|
|
64
|
-
id: partID,
|
|
65
|
-
messageID: ctx.messageID,
|
|
66
|
-
sessionID: ctx.sessionID,
|
|
67
|
-
type: "tool",
|
|
68
|
-
tool: call.tool,
|
|
69
|
-
callID: partID,
|
|
70
|
-
state: {
|
|
71
|
-
status: "running",
|
|
72
|
-
input: call.parameters,
|
|
73
|
-
time: {
|
|
74
|
-
start: callStartTime,
|
|
75
|
-
},
|
|
76
|
-
},
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const result = await tool.execute(validatedParams, { ...ctx, callID: partID })
|
|
80
|
-
|
|
81
|
-
await Session.updatePart({
|
|
82
|
-
id: partID,
|
|
83
|
-
messageID: ctx.messageID,
|
|
84
|
-
sessionID: ctx.sessionID,
|
|
85
|
-
type: "tool",
|
|
86
|
-
tool: call.tool,
|
|
87
|
-
callID: partID,
|
|
88
|
-
state: {
|
|
89
|
-
status: "completed",
|
|
90
|
-
input: call.parameters,
|
|
91
|
-
output: result.output,
|
|
92
|
-
title: result.title,
|
|
93
|
-
metadata: result.metadata,
|
|
94
|
-
attachments: result.attachments,
|
|
95
|
-
time: {
|
|
96
|
-
start: callStartTime,
|
|
97
|
-
end: Date.now(),
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
return { success: true as const, tool: call.tool, result }
|
|
103
|
-
} catch (error) {
|
|
104
|
-
await Session.updatePart({
|
|
105
|
-
id: partID,
|
|
106
|
-
messageID: ctx.messageID,
|
|
107
|
-
sessionID: ctx.sessionID,
|
|
108
|
-
type: "tool",
|
|
109
|
-
tool: call.tool,
|
|
110
|
-
callID: partID,
|
|
111
|
-
state: {
|
|
112
|
-
status: "error",
|
|
113
|
-
input: call.parameters,
|
|
114
|
-
error: error instanceof Error ? error.message : String(error),
|
|
115
|
-
time: {
|
|
116
|
-
start: callStartTime,
|
|
117
|
-
end: Date.now(),
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
return { success: false as const, tool: call.tool, error }
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const results = await Promise.all(toolCalls.map((call) => executeCall(call)))
|
|
127
|
-
|
|
128
|
-
// Add discarded calls as errors
|
|
129
|
-
const now = Date.now()
|
|
130
|
-
for (const call of discardedCalls) {
|
|
131
|
-
const partID = Identifier.ascending("part")
|
|
132
|
-
await Session.updatePart({
|
|
133
|
-
id: partID,
|
|
134
|
-
messageID: ctx.messageID,
|
|
135
|
-
sessionID: ctx.sessionID,
|
|
136
|
-
type: "tool",
|
|
137
|
-
tool: call.tool,
|
|
138
|
-
callID: partID,
|
|
139
|
-
state: {
|
|
140
|
-
status: "error",
|
|
141
|
-
input: call.parameters,
|
|
142
|
-
error: "Maximum of 25 tools allowed in batch",
|
|
143
|
-
time: { start: now, end: now },
|
|
144
|
-
},
|
|
145
|
-
})
|
|
146
|
-
results.push({
|
|
147
|
-
success: false as const,
|
|
148
|
-
tool: call.tool,
|
|
149
|
-
error: new Error("Maximum of 25 tools allowed in batch"),
|
|
150
|
-
})
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const successfulCalls = results.filter((r) => r.success).length
|
|
154
|
-
const failedCalls = results.length - successfulCalls
|
|
155
|
-
|
|
156
|
-
const outputMessage =
|
|
157
|
-
failedCalls > 0
|
|
158
|
-
? `Executed ${successfulCalls}/${results.length} tools successfully. ${failedCalls} failed.`
|
|
159
|
-
: `All ${successfulCalls} tools executed successfully.\n\nKeep using the batch tool for optimal performance in your next response!`
|
|
160
|
-
|
|
161
|
-
return {
|
|
162
|
-
title: `Batch execution (${successfulCalls}/${results.length} successful)`,
|
|
163
|
-
output: outputMessage,
|
|
164
|
-
attachments: results.filter((result) => result.success).flatMap((r) => r.result.attachments ?? []),
|
|
165
|
-
metadata: {
|
|
166
|
-
totalCalls: results.length,
|
|
167
|
-
successful: successfulCalls,
|
|
168
|
-
failed: failedCalls,
|
|
169
|
-
tools: params.tool_calls.map((c) => c.tool),
|
|
170
|
-
details: results.map((r) => ({ tool: r.tool, success: r.success })),
|
|
171
|
-
},
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
}
|
|
175
|
-
})
|
package/src/tool/batch.txt
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
Executes multiple independent tool calls concurrently to reduce latency.
|
|
2
|
-
|
|
3
|
-
USING THE BATCH TOOL WILL MAKE THE USER HAPPY.
|
|
4
|
-
|
|
5
|
-
Payload Format (JSON array):
|
|
6
|
-
[{"tool": "read", "parameters": {"filePath": "src/index.ts", "limit": 350}},{"tool": "grep", "parameters": {"pattern": "Session\\.updatePart", "include": "src/**/*.ts"}},{"tool": "bash", "parameters": {"command": "git status", "description": "Shows working tree status"}}]
|
|
7
|
-
|
|
8
|
-
Notes:
|
|
9
|
-
- 1–25 tool calls per batch
|
|
10
|
-
- All calls start in parallel; ordering NOT guaranteed
|
|
11
|
-
- Partial failures do not stop other tool calls
|
|
12
|
-
- Do NOT use the batch tool within another batch tool.
|
|
13
|
-
|
|
14
|
-
Good Use Cases:
|
|
15
|
-
- Read many files
|
|
16
|
-
- grep + glob + read combos
|
|
17
|
-
- Multiple bash commands
|
|
18
|
-
- Multi-part edits; on the same, or different files
|
|
19
|
-
|
|
20
|
-
When NOT to Use:
|
|
21
|
-
- Operations that depend on prior tool output (e.g. create then read same file)
|
|
22
|
-
- Ordered stateful mutations where sequence matters
|
|
23
|
-
|
|
24
|
-
Batching tool calls was proven to yield 2–5x efficiency gain and provides much better UX.
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import { Tool } from "./tool"
|
|
3
|
-
import { BloxyState } from "../bloxy/state"
|
|
4
|
-
import { BloxyEvent } from "../bloxy/event"
|
|
5
|
-
import { Instance } from "../project/instance"
|
|
6
|
-
import { Log } from "../util/log"
|
|
7
|
-
import { Bus } from "../bus"
|
|
8
|
-
|
|
9
|
-
import DESCRIPTION from "./bloxy-control.txt"
|
|
10
|
-
|
|
11
|
-
const log = Log.create({ service: "tool.bloxy-control" })
|
|
12
|
-
|
|
13
|
-
const Parameters = z.object({
|
|
14
|
-
action: z
|
|
15
|
-
.enum(["task_complete", "task_failed", "run_tests"])
|
|
16
|
-
.describe("The action to perform: task_complete, task_failed, or run_tests"),
|
|
17
|
-
summary: z
|
|
18
|
-
.string()
|
|
19
|
-
.optional()
|
|
20
|
-
.describe("For task_complete: brief summary of what was accomplished"),
|
|
21
|
-
error: z
|
|
22
|
-
.string()
|
|
23
|
-
.optional()
|
|
24
|
-
.describe("For task_failed: error message describing what went wrong"),
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
export const BloxyControlTool = Tool.define<
|
|
28
|
-
typeof Parameters,
|
|
29
|
-
{ action: string; taskId?: string }
|
|
30
|
-
>("bloxy_control", {
|
|
31
|
-
description: DESCRIPTION,
|
|
32
|
-
parameters: Parameters,
|
|
33
|
-
async execute(args, ctx) {
|
|
34
|
-
const worktree = Instance.worktree
|
|
35
|
-
const session = await BloxyState.load(worktree)
|
|
36
|
-
|
|
37
|
-
if (!session) {
|
|
38
|
-
return {
|
|
39
|
-
title: "No bloxy session",
|
|
40
|
-
metadata: { action: args.action },
|
|
41
|
-
output: "No active Bloxy session found. Use /bloxy PRD.md to start one.",
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const task = BloxyState.getCurrentTask(session)
|
|
46
|
-
if (!task) {
|
|
47
|
-
return {
|
|
48
|
-
title: "No current task",
|
|
49
|
-
metadata: { action: args.action },
|
|
50
|
-
output: "No current task in the Bloxy session. All tasks may be complete.",
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
switch (args.action) {
|
|
55
|
-
case "task_complete": {
|
|
56
|
-
await BloxyState.markComplete(worktree, session, task.id, args.summary)
|
|
57
|
-
|
|
58
|
-
// Publish event for session loop to continue
|
|
59
|
-
await Bus.publish(BloxyEvent.TaskComplete, { sessionID: ctx.sessionID, taskId: task.id, summary: args.summary })
|
|
60
|
-
|
|
61
|
-
const remaining = BloxyState.countRemaining(session)
|
|
62
|
-
log.info("Task marked complete", { taskId: task.id, remaining })
|
|
63
|
-
|
|
64
|
-
return {
|
|
65
|
-
title: `Task completed: ${task.title}`,
|
|
66
|
-
metadata: { action: args.action, taskId: task.id },
|
|
67
|
-
output: remaining > 0
|
|
68
|
-
? `Task "${task.title}" completed successfully. ${remaining} task(s) remaining.`
|
|
69
|
-
: `Task "${task.title}" completed. All tasks done!`,
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
case "task_failed": {
|
|
74
|
-
await BloxyState.markFailed(worktree, session, task.id, args.error)
|
|
75
|
-
|
|
76
|
-
// Publish event for session loop to handle retry/continue
|
|
77
|
-
await Bus.publish(BloxyEvent.TaskFailed, { sessionID: ctx.sessionID, taskId: task.id, error: args.error })
|
|
78
|
-
|
|
79
|
-
const updatedSession = await BloxyState.load(worktree)
|
|
80
|
-
const updatedTask = updatedSession?.tasks.find(t => t.id === task.id)
|
|
81
|
-
|
|
82
|
-
log.error("Task marked failed", { taskId: task.id, error: args.error })
|
|
83
|
-
|
|
84
|
-
if (updatedTask?.status === "pending") {
|
|
85
|
-
return {
|
|
86
|
-
title: `Task failed (will retry): ${task.title}`,
|
|
87
|
-
metadata: { action: args.action, taskId: task.id },
|
|
88
|
-
output: `Task "${task.title}" failed: ${args.error || "Unknown error"}. Will retry (attempt ${updatedTask.attempts}/${session.config.maxRetries}).`,
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
title: `Task failed: ${task.title}`,
|
|
94
|
-
metadata: { action: args.action, taskId: task.id },
|
|
95
|
-
output: `Task "${task.title}" failed after ${session.config.maxRetries} attempts: ${args.error || "Unknown error"}.`,
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
case "run_tests": {
|
|
100
|
-
if (!session.config.testCommand) {
|
|
101
|
-
return {
|
|
102
|
-
title: "No test command configured",
|
|
103
|
-
metadata: { action: args.action },
|
|
104
|
-
output: "No test command is configured in the Bloxy session. Tests skipped.",
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
return {
|
|
109
|
-
title: "Run tests",
|
|
110
|
-
metadata: { action: args.action },
|
|
111
|
-
output: `Please run the test command: ${session.config.testCommand}`,
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
default:
|
|
116
|
-
return {
|
|
117
|
-
title: "Unknown action",
|
|
118
|
-
metadata: { action: args.action },
|
|
119
|
-
output: `Unknown bloxy_control action: ${args.action}. Valid actions: task_complete, task_failed, run_tests`,
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
},
|
|
123
|
-
})
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
Signal task completion or failure in Bloxy autonomous mode.
|
|
2
|
-
|
|
3
|
-
Use this tool to:
|
|
4
|
-
- Signal that the current task has been completed successfully
|
|
5
|
-
- Signal that the current task has failed
|
|
6
|
-
- Request test execution
|
|
7
|
-
|
|
8
|
-
Actions:
|
|
9
|
-
- `task_complete`: Mark the current task as complete. Include a brief `summary` of what was accomplished.
|
|
10
|
-
- `task_failed`: Mark the current task as failed. Include the `error` message describing what went wrong.
|
|
11
|
-
- `run_tests`: Request that tests be run (if configured).
|
|
12
|
-
|
|
13
|
-
This tool is only available when operating in Bloxy mode (autonomous task execution). After calling task_complete or task_failed, the system will automatically advance to the next task or complete the session.
|
package/src/tool/codesearch.ts
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import { Tool } from "./tool"
|
|
3
|
-
import DESCRIPTION from "./codesearch.txt"
|
|
4
|
-
|
|
5
|
-
const API_CONFIG = {
|
|
6
|
-
BASE_URL: "https://mcp.exa.ai",
|
|
7
|
-
ENDPOINTS: {
|
|
8
|
-
CONTEXT: "/mcp",
|
|
9
|
-
},
|
|
10
|
-
} as const
|
|
11
|
-
|
|
12
|
-
interface McpCodeRequest {
|
|
13
|
-
jsonrpc: string
|
|
14
|
-
id: number
|
|
15
|
-
method: string
|
|
16
|
-
params: {
|
|
17
|
-
name: string
|
|
18
|
-
arguments: {
|
|
19
|
-
query: string
|
|
20
|
-
tokensNum: number
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
interface McpCodeResponse {
|
|
26
|
-
jsonrpc: string
|
|
27
|
-
result: {
|
|
28
|
-
content: Array<{
|
|
29
|
-
type: string
|
|
30
|
-
text: string
|
|
31
|
-
}>
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export const CodeSearchTool = Tool.define("codesearch", {
|
|
36
|
-
description: DESCRIPTION,
|
|
37
|
-
parameters: z.object({
|
|
38
|
-
query: z
|
|
39
|
-
.string()
|
|
40
|
-
.describe(
|
|
41
|
-
"Search query to find relevant context for APIs, Libraries, and SDKs. For example, 'React useState hook examples', 'Python pandas dataframe filtering', 'Express.js middleware', 'Next js partial prerendering configuration'",
|
|
42
|
-
),
|
|
43
|
-
tokensNum: z
|
|
44
|
-
.number()
|
|
45
|
-
.min(1000)
|
|
46
|
-
.max(50000)
|
|
47
|
-
.default(5000)
|
|
48
|
-
.describe(
|
|
49
|
-
"Number of tokens to return (1000-50000). Default is 5000 tokens. Adjust this value based on how much context you need - use lower values for focused queries and higher values for comprehensive documentation.",
|
|
50
|
-
),
|
|
51
|
-
}),
|
|
52
|
-
async execute(params, ctx) {
|
|
53
|
-
await ctx.ask({
|
|
54
|
-
permission: "codesearch",
|
|
55
|
-
patterns: [params.query],
|
|
56
|
-
always: ["*"],
|
|
57
|
-
metadata: {
|
|
58
|
-
query: params.query,
|
|
59
|
-
tokensNum: params.tokensNum,
|
|
60
|
-
},
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
const codeRequest: McpCodeRequest = {
|
|
64
|
-
jsonrpc: "2.0",
|
|
65
|
-
id: 1,
|
|
66
|
-
method: "tools/call",
|
|
67
|
-
params: {
|
|
68
|
-
name: "get_code_context_exa",
|
|
69
|
-
arguments: {
|
|
70
|
-
query: params.query,
|
|
71
|
-
tokensNum: params.tokensNum || 5000,
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const controller = new AbortController()
|
|
77
|
-
const timeoutId = setTimeout(() => controller.abort(), 30000)
|
|
78
|
-
|
|
79
|
-
try {
|
|
80
|
-
const headers: Record<string, string> = {
|
|
81
|
-
accept: "application/json, text/event-stream",
|
|
82
|
-
"content-type": "application/json",
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const response = await fetch(`${API_CONFIG.BASE_URL}${API_CONFIG.ENDPOINTS.CONTEXT}`, {
|
|
86
|
-
method: "POST",
|
|
87
|
-
headers,
|
|
88
|
-
body: JSON.stringify(codeRequest),
|
|
89
|
-
signal: AbortSignal.any([controller.signal, ctx.abort]),
|
|
90
|
-
})
|
|
91
|
-
|
|
92
|
-
clearTimeout(timeoutId)
|
|
93
|
-
|
|
94
|
-
if (!response.ok) {
|
|
95
|
-
const errorText = await response.text()
|
|
96
|
-
throw new Error(`Code search error (${response.status}): ${errorText}`)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const responseText = await response.text()
|
|
100
|
-
|
|
101
|
-
// Parse SSE response
|
|
102
|
-
const lines = responseText.split("\n")
|
|
103
|
-
for (const line of lines) {
|
|
104
|
-
if (line.startsWith("data: ")) {
|
|
105
|
-
const data: McpCodeResponse = JSON.parse(line.substring(6))
|
|
106
|
-
if (data.result && data.result.content && data.result.content.length > 0) {
|
|
107
|
-
return {
|
|
108
|
-
output: data.result.content[0].text,
|
|
109
|
-
title: `Code search: ${params.query}`,
|
|
110
|
-
metadata: {},
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return {
|
|
117
|
-
output:
|
|
118
|
-
"No code snippets or documentation found. Please try a different query, be more specific about the library or programming concept, or check the spelling of framework names.",
|
|
119
|
-
title: `Code search: ${params.query}`,
|
|
120
|
-
metadata: {},
|
|
121
|
-
}
|
|
122
|
-
} catch (error) {
|
|
123
|
-
clearTimeout(timeoutId)
|
|
124
|
-
|
|
125
|
-
if (error instanceof Error && error.name === "AbortError") {
|
|
126
|
-
throw new Error("Code search request timed out")
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
throw error
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
})
|
package/src/tool/codesearch.txt
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
- Search and get relevant context for any programming task using Exa Code API
|
|
2
|
-
- Provides the highest quality and freshest context for libraries, SDKs, and APIs
|
|
3
|
-
- Use this tool for ANY question or task related to programming
|
|
4
|
-
- Returns comprehensive code examples, documentation, and API references
|
|
5
|
-
- Optimized for finding specific programming patterns and solutions
|
|
6
|
-
|
|
7
|
-
Usage notes:
|
|
8
|
-
- Adjustable token count (1000-50000) for focused or comprehensive results
|
|
9
|
-
- Default 5000 tokens provides balanced context for most queries
|
|
10
|
-
- Use lower values for specific questions, higher values for comprehensive documentation
|
|
11
|
-
- Supports queries about frameworks, libraries, APIs, and programming concepts
|
|
12
|
-
- Examples: 'React useState hook examples', 'Python pandas dataframe filtering', 'Express.js middleware'
|