@polderlabs/bizar 6.2.4 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/CLAUDE.md +15 -0
- package/.claude/agents/_shared/AGENT_BASELINE.md +168 -0
- package/.claude/agents/_shared/CLAUDE_TOOLS.md +412 -0
- package/.claude/agents/_shared/SKILLS.md +109 -0
- package/.claude/agents/agent-browser.md +80 -0
- package/.claude/agents/baldr.md +49 -0
- package/.claude/agents/forseti.md +51 -0
- package/.claude/agents/frigg.md +42 -0
- package/.claude/agents/heimdall.md +33 -0
- package/.claude/agents/hermod.md +53 -0
- package/.claude/agents/mimir.md +49 -0
- package/.claude/agents/odin.md +287 -0
- package/.claude/agents/quick.md +34 -0
- package/.claude/agents/semble-search.md +50 -0
- package/.claude/agents/thor.md +53 -0
- package/.claude/agents/tyr.md +56 -0
- package/.claude/agents/vidarr.md +54 -0
- package/.claude/agents/vor.md +53 -0
- package/.claude/commands/audit.md +25 -0
- package/.claude/commands/bizar.md +22 -0
- package/.claude/commands/explain.md +17 -0
- package/.claude/commands/init.md +29 -0
- package/.claude/commands/learn.md +44 -0
- package/.claude/commands/plan.md +35 -0
- package/.claude/commands/plow-through.md +50 -0
- package/.claude/commands/pr-review.md +49 -0
- package/.claude/commands/setup-provider.md +96 -0
- package/.claude/commands/tailscale-serve.md +100 -0
- package/.claude/commands/team.md +132 -0
- package/.claude/commands/test.md +62 -0
- package/.claude/commands/validate.md +68 -0
- package/.claude/commands/visual-plan.md +24 -0
- package/.claude/hooks/README.md +92 -0
- package/.claude/hooks/posttooluse-editwrite.mjs +91 -0
- package/.claude/hooks/pretooluse-bash.mjs +81 -0
- package/.claude/hooks/pretooluse-editwrite.mjs +139 -0
- package/.claude/hooks/sessionend-recall.mjs +74 -0
- package/.claude/hooks/sessionstart-prime.mjs +80 -0
- package/.claude/hooks/userpromptsubmit-tag.mjs +80 -0
- package/.claude/settings.json +116 -0
- package/.claude/skills/9router/SKILL.md +80 -0
- package/.claude/skills/9router-chat/SKILL.md +73 -0
- package/.claude/skills/9router-embeddings/SKILL.md +69 -0
- package/.claude/skills/9router-image/SKILL.md +86 -0
- package/.claude/skills/9router-stt/SKILL.md +79 -0
- package/.claude/skills/9router-tts/SKILL.md +80 -0
- package/.claude/skills/9router-web-fetch/SKILL.md +99 -0
- package/.claude/skills/9router-web-search/SKILL.md +91 -0
- package/.claude/skills/bizar/README.md +9 -0
- package/.claude/skills/bizar/SKILL.md +450 -0
- package/.claude/skills/cpp-coding-standards/README.md +28 -0
- package/.claude/skills/cpp-coding-standards/SKILL.md +634 -0
- package/.claude/skills/cpp-coding-standards/references/concurrency.md +320 -0
- package/.claude/skills/cpp-coding-standards/references/error-handling.md +229 -0
- package/.claude/skills/cpp-coding-standards/references/memory-safety.md +216 -0
- package/.claude/skills/cpp-coding-standards/references/modern-idioms.md +282 -0
- package/.claude/skills/cpp-coding-standards/references/review-checklist.md +96 -0
- package/.claude/skills/cpp-testing/README.md +28 -0
- package/.claude/skills/cpp-testing/SKILL.md +304 -0
- package/.claude/skills/cpp-testing/references/coverage.md +370 -0
- package/.claude/skills/cpp-testing/references/framework-compare.md +175 -0
- package/.claude/skills/cpp-testing/references/host-test-for-embedded.md +499 -0
- package/.claude/skills/cpp-testing/references/mocking.md +364 -0
- package/.claude/skills/cpp-testing/references/tdd-workflow.md +308 -0
- package/.claude/skills/cubesandbox/SKILL.md +148 -0
- package/.claude/skills/embedded-esp-idf/README.md +41 -0
- package/.claude/skills/embedded-esp-idf/SKILL.md +439 -0
- package/.claude/skills/embedded-esp-idf/references/freertos-patterns.md +214 -0
- package/.claude/skills/embedded-esp-idf/references/host-tests.md +164 -0
- package/.claude/skills/embedded-esp-idf/references/idf-py-commands.md +157 -0
- package/.claude/skills/embedded-esp-idf/references/kconfig.md +159 -0
- package/.claude/skills/embedded-esp-idf/references/logging-discipline.md +118 -0
- package/.claude/skills/embedded-esp-idf/references/memory-and-iram.md +137 -0
- package/.claude/skills/embedded-esp-idf/references/nvs.md +121 -0
- package/.claude/skills/embedded-esp-idf/references/packed-structs.md +192 -0
- package/.claude/skills/embedded-esp-idf/scripts/idf_env.sh +47 -0
- package/.claude/skills/embedded-esp-idf/scripts/size_check.sh +77 -0
- package/.claude/skills/glyph/SKILL.md +163 -0
- package/.claude/skills/harness-engineering/SKILL.md +143 -0
- package/.claude/skills/lightrag/SKILL.md +81 -0
- package/.claude/skills/memory-protocol/SKILL.md +105 -0
- package/.claude/skills/obsidian/SKILL.md +306 -0
- package/.claude/skills/read-the-damn-docs/SKILL.md +113 -0
- package/.claude/skills/self-improvement/SKILL.md +64 -0
- package/README.md +87 -59
- package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js → EnvVarsSection-B58aiJiE.js} +1 -1
- package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-B58aiJiE.js.map} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js → MobileChat-BJrqwVDd.js} +1 -1
- package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-BJrqwVDd.js.map} +1 -1
- package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js → MobileSettings-CEQNJNLJ.js} +1 -1
- package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-CEQNJNLJ.js.map} +1 -1
- package/bizar-dash/dist/assets/{main-DYiZqMrn.js → main-IvfQAOfy.js} +1 -1
- package/bizar-dash/dist/assets/{main-DYiZqMrn.js.map → main-IvfQAOfy.js.map} +1 -1
- package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js → markdown-tOLaD6nm.js} +1 -1
- package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-tOLaD6nm.js.map} +1 -1
- package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js → mobile-DYCHcUpq.js} +1 -1
- package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DYCHcUpq.js.map} +1 -1
- package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js → mobile-layout-CBHjpwsb.js} +2 -2
- package/bizar-dash/dist/assets/{mobile-layout-3jIhHX_p.js.map → mobile-layout-CBHjpwsb.js.map} +1 -1
- package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js → useSlashCommands-Bd7_FA6U.js} +2 -2
- package/bizar-dash/dist/assets/{useSlashCommands-DtITw8Xv.js.map → useSlashCommands-Bd7_FA6U.js.map} +1 -1
- package/bizar-dash/dist/assets/{vendor-CeHGtduv.js → vendor-C843201K.js} +12 -12
- package/bizar-dash/dist/assets/vendor-C843201K.js.map +1 -0
- package/bizar-dash/dist/index.html +6 -6
- package/bizar-dash/dist/mobile.html +2 -2
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/api.mjs +4 -4
- package/bizar-dash/src/server/background-store.mjs +15 -16
- package/bizar-dash/src/server/bg-poller.mjs +25 -35
- package/bizar-dash/src/server/bg-retry.mjs +66 -194
- package/bizar-dash/src/server/claude-bg-spawner.mjs +390 -0
- package/bizar-dash/src/server/claude-info.mjs +412 -0
- package/bizar-dash/src/server/{cline-runner.mjs → claude-runner.mjs} +53 -48
- package/bizar-dash/src/server/claude-sdk.mjs +191 -0
- package/bizar-dash/src/server/providers-store.mjs +22 -49
- package/bizar-dash/src/server/routes/background.mjs +24 -20
- package/bizar-dash/src/server/routes/chat.mjs +223 -326
- package/bizar-dash/src/server/routes/claude-session-detail.mjs +329 -0
- package/bizar-dash/src/server/routes/claude-sessions.mjs +259 -0
- package/bizar-dash/src/server/routes/tasks.mjs +20 -28
- package/bizar-dash/src/server/task-delegator.mjs +76 -77
- package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
- package/bizar-dash/src/web/views/Chat.tsx +8 -8
- package/cli/bin.mjs +31 -18
- package/cli/commands/claude-cmd.mjs +348 -0
- package/cli/commands/install.mjs +12 -11
- package/cli/commands/sandbox.mjs +220 -0
- package/cli/commands/validate.mjs +252 -288
- package/cli/dev-link.test.mjs +11 -11
- package/cli/doctor.mjs +131 -213
- package/cli/install.mjs +33 -37
- package/cli/install.test.mjs +9 -9
- package/cli/provision-claude.mjs +893 -0
- package/cli/provision.mjs +330 -226
- package/cli/provision.test.mjs +102 -0
- package/cli/utils.mjs +72 -58
- package/config/AGENTS.md +28 -28
- package/config/agents/_shared/AGENT_BASELINE.md +104 -684
- package/config/skills/bizar/SKILL.md +197 -0
- package/config/skills/cubesandbox/SKILL.md +148 -0
- package/config/skills/harness-engineering/SKILL.md +142 -0
- package/install.sh +66 -44
- package/package.json +19 -11
- package/packages/sdk/ARCHITECTURE.md +40 -36
- package/packages/sdk/package-lock.json +32 -0
- package/packages/sdk/package.json +15 -5
- package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
- package/packages/sdk/src/fingerprint.ts +0 -0
- package/packages/sdk/src/index.ts +38 -73
- package/packages/sdk/src/mcp/bin.ts +51 -0
- package/packages/sdk/src/mcp/server.ts +498 -0
- package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
- package/packages/sdk/tests/sdk.test.mjs +148 -0
- package/packages/sdk/vitest.config.ts +1 -1
- package/scripts/bh-full-e2e.mjs +166 -363
- package/scripts/check-deps.mjs +28 -46
- package/scripts/mirror-claude-md.sh +78 -0
- package/scripts/test-in-container.sh +157 -0
- package/templates/clean-state-checklist.md +3 -3
- package/templates/sprint-contract.md +2 -2
- package/bizar-dash/.bizar/activity.log +0 -3
- package/bizar-dash/.omx/logs/omx-2026-07-07.jsonl +0 -1
- package/bizar-dash/.omx/state/session.json +0 -10
- package/bizar-dash/bizar-design/EXPLANATION.md +0 -307
- package/bizar-dash/bizar-design/INSTRUCTIONS.md +0 -149
- package/bizar-dash/bizar-design/canvas.html +0 -281
- package/bizar-dash/bizar-design/canvas.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/components.css +0 -1665
- package/bizar-dash/bizar-design/components.html +0 -557
- package/bizar-dash/bizar-design/components.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/agents.html +0 -74
- package/bizar-dash/bizar-design/desktop/agents.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/memory.html +0 -75
- package/bizar-dash/bizar-design/desktop/memory.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/metrics.html +0 -63
- package/bizar-dash/bizar-design/desktop/metrics.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/overview.html +0 -95
- package/bizar-dash/bizar-design/desktop/overview.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/desktop/settings.html +0 -70
- package/bizar-dash/bizar-design/desktop/settings.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/icons.svg +0 -44
- package/bizar-dash/bizar-design/index.html +0 -192
- package/bizar-dash/bizar-design/index.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/agents.html +0 -29
- package/bizar-dash/bizar-design/mobile/agents.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/memory.html +0 -28
- package/bizar-dash/bizar-design/mobile/memory.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/metrics.html +0 -29
- package/bizar-dash/bizar-design/mobile/metrics.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/overview.html +0 -33
- package/bizar-dash/bizar-design/mobile/overview.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/mobile/settings.html +0 -28
- package/bizar-dash/bizar-design/mobile/settings.html.artifact.json +0 -19
- package/bizar-dash/bizar-design/prototype.js +0 -114
- package/bizar-dash/bizar-design/tokens.css +0 -106
- package/bizar-dash/dist/assets/vendor-CeHGtduv.js.map +0 -1
- package/bizar-dash/node_modules/.package-lock.json +0 -6
- package/bizar-dash/package-lock.json +0 -6
- package/bizar-dash/src/server/cline-sdk.mjs +0 -132
- package/bizar-dash/src/server/routes/cline-session-detail.mjs +0 -559
- package/bizar-dash/src/server/routes/cline-sessions.mjs +0 -291
- package/cli/commands/cline-cmd.mjs +0 -289
- package/cli/commands/validate.test.mjs +0 -344
- package/cli/doctor.test.mjs +0 -350
- package/config/cline.json.template +0 -342
- package/packages/sdk/src/client.ts +0 -188
- package/packages/sdk/src/cline-events.ts +0 -134
- package/packages/sdk/src/cline-types.ts +0 -66
- package/packages/sdk/src/cline.ts +0 -339
- package/packages/sdk/src/errors.ts +0 -129
- package/packages/sdk/src/events.ts +0 -153
- package/packages/sdk/src/types.ts +0 -176
- package/packages/sdk/tests/client.test.ts +0 -217
- package/packages/sdk/tests/errors.test.ts +0 -108
- package/packages/sdk/tests/events.test.ts +0 -139
- package/packages/sdk/tests/fixtures/fetch-mock.ts +0 -152
- package/packages/sdk/tests/fixtures/sse-mock.ts +0 -30
- package/plugins/bizar/ARCHITECTURE.md +0 -142
- package/plugins/bizar/CONSTRAINTS.md +0 -67
- package/plugins/bizar/LICENSE +0 -21
- package/plugins/bizar/README.md +0 -448
- package/plugins/bizar/index.ts +0 -872
- package/plugins/bizar/package.json +0 -39
- package/plugins/bizar/scripts/check-forbidden-imports.sh +0 -33
- package/plugins/bizar/src/background-state.ts +0 -641
- package/plugins/bizar/src/background.ts +0 -1806
- package/plugins/bizar/src/cline-runner.ts +0 -203
- package/plugins/bizar/src/clineruntime.ts +0 -227
- package/plugins/bizar/src/commands-impl.ts +0 -151
- package/plugins/bizar/src/commands.ts +0 -1799
- package/plugins/bizar/src/compaction.d.mts +0 -48
- package/plugins/bizar/src/compaction.mjs +0 -192
- package/plugins/bizar/src/dashboard-client.ts +0 -233
- package/plugins/bizar/src/event-stream.ts +0 -606
- package/plugins/bizar/src/fingerprint.ts +0 -120
- package/plugins/bizar/src/handoff.ts +0 -79
- package/plugins/bizar/src/hooks/memory-flush-on-compact.ts +0 -123
- package/plugins/bizar/src/hooks/memory-inject.ts +0 -247
- package/plugins/bizar/src/hooks/memory-write-on-end.ts +0 -188
- package/plugins/bizar/src/hooks/skill-curator.ts +0 -180
- package/plugins/bizar/src/http-client.ts +0 -467
- package/plugins/bizar/src/key-rotation.ts +0 -218
- package/plugins/bizar/src/logger.ts +0 -144
- package/plugins/bizar/src/loop-engineering.ts +0 -241
- package/plugins/bizar/src/loop.ts +0 -176
- package/plugins/bizar/src/mistake-recovery.ts +0 -98
- package/plugins/bizar/src/odin.ts +0 -227
- package/plugins/bizar/src/options.ts +0 -470
- package/plugins/bizar/src/plan-fs.ts +0 -323
- package/plugins/bizar/src/reasoning-clean.ts +0 -454
- package/plugins/bizar/src/report.ts +0 -178
- package/plugins/bizar/src/research-prompt.ts +0 -35
- package/plugins/bizar/src/serve-info.ts +0 -228
- package/plugins/bizar/src/serve.ts +0 -496
- package/plugins/bizar/src/settings.ts +0 -349
- package/plugins/bizar/src/state.ts +0 -298
- package/plugins/bizar/src/tool-discipline.ts +0 -105
- package/plugins/bizar/src/tools/agent-browser.ts +0 -315
- package/plugins/bizar/src/tools/bg-collect.ts +0 -131
- package/plugins/bizar/src/tools/bg-get-comments.ts +0 -266
- package/plugins/bizar/src/tools/bg-kill.ts +0 -116
- package/plugins/bizar/src/tools/bg-pause.ts +0 -99
- package/plugins/bizar/src/tools/bg-report-progress.ts +0 -115
- package/plugins/bizar/src/tools/bg-resume.ts +0 -94
- package/plugins/bizar/src/tools/bg-send-message.ts +0 -223
- package/plugins/bizar/src/tools/bg-spawn.ts +0 -502
- package/plugins/bizar/src/tools/bg-status.ts +0 -130
- package/plugins/bizar/src/tools/graph-query.ts +0 -278
- package/plugins/bizar/src/tools/loop-engineering.ts +0 -193
- package/plugins/bizar/src/tools/memory-list.ts +0 -43
- package/plugins/bizar/src/tools/memory-read.ts +0 -69
- package/plugins/bizar/src/tools/memory-search.ts +0 -47
- package/plugins/bizar/src/tools/memory-write.ts +0 -54
- package/plugins/bizar/src/tools/open-kb.ts +0 -198
- package/plugins/bizar/src/tools/plan-action.ts +0 -785
- package/plugins/bizar/src/tools/read-glyph-feedback.ts +0 -191
- package/plugins/bizar/src/tools/team-spawn.ts +0 -73
- package/plugins/bizar/src/tools/team-status.ts +0 -76
- package/plugins/bizar/src/tools/wait-for-feedback.ts +0 -415
- package/plugins/bizar/src/trajectory.ts +0 -104
- package/plugins/bizar/tests/README.md +0 -99
- package/plugins/bizar/tests/attach-handler-bug.test.ts +0 -169
- package/plugins/bizar/tests/background-state.test.ts +0 -277
- package/plugins/bizar/tests/background.test.ts +0 -402
- package/plugins/bizar/tests/block.test.ts +0 -195
- package/plugins/bizar/tests/canonical-key-order.test.ts +0 -75
- package/plugins/bizar/tests/clineruntime-config.test.ts +0 -283
- package/plugins/bizar/tests/commands-impl.test.ts +0 -316
- package/plugins/bizar/tests/commands.test.ts +0 -584
- package/plugins/bizar/tests/compaction.test.ts +0 -264
- package/plugins/bizar/tests/config.test.ts +0 -128
- package/plugins/bizar/tests/dashboard-client.test.ts +0 -159
- package/plugins/bizar/tests/dispose.test.ts +0 -336
- package/plugins/bizar/tests/event-stream.test.ts +0 -409
- package/plugins/bizar/tests/event.test.ts +0 -262
- package/plugins/bizar/tests/fingerprint.test.ts +0 -162
- package/plugins/bizar/tests/http-client.test.ts +0 -404
- package/plugins/bizar/tests/init-helpers.test.ts +0 -203
- package/plugins/bizar/tests/integration/slash-command.test.ts +0 -349
- package/plugins/bizar/tests/integration/tool-routing.test.ts +0 -98
- package/plugins/bizar/tests/key-rotation.test.ts +0 -396
- package/plugins/bizar/tests/loop-engineering.test.ts +0 -168
- package/plugins/bizar/tests/loop.test.ts +0 -397
- package/plugins/bizar/tests/memory-write-on-end.test.ts +0 -92
- package/plugins/bizar/tests/mistake-recovery.test.ts +0 -116
- package/plugins/bizar/tests/odin.test.ts +0 -125
- package/plugins/bizar/tests/options.test.ts +0 -329
- package/plugins/bizar/tests/reasoning-clean.test.ts +0 -422
- package/plugins/bizar/tests/safety.test.ts +0 -256
- package/plugins/bizar/tests/serve.test.ts +0 -339
- package/plugins/bizar/tests/settings.test.ts +0 -351
- package/plugins/bizar/tests/stall-think.test.ts +0 -750
- package/plugins/bizar/tests/state.test.ts +0 -276
- package/plugins/bizar/tests/tool-discipline.test.ts +0 -77
- package/plugins/bizar/tests/tools/agent-browser.test.ts +0 -98
- package/plugins/bizar/tests/tools/bg-collect.test.ts +0 -337
- package/plugins/bizar/tests/tools/bg-get-comments.test.ts +0 -485
- package/plugins/bizar/tests/tools/bg-kill.test.ts +0 -235
- package/plugins/bizar/tests/tools/bg-pause.test.ts +0 -61
- package/plugins/bizar/tests/tools/bg-report-progress.test.ts +0 -79
- package/plugins/bizar/tests/tools/bg-resume.test.ts +0 -40
- package/plugins/bizar/tests/tools/bg-send-message.test.ts +0 -116
- package/plugins/bizar/tests/tools/bg-spawn-delegation.test.ts +0 -147
- package/plugins/bizar/tests/tools/bg-spawn-http.test.ts +0 -233
- package/plugins/bizar/tests/tools/bg-spawn.test.ts +0 -311
- package/plugins/bizar/tests/tools/bg-status.test.ts +0 -217
- package/plugins/bizar/tests/tools/cline-runner.test.ts +0 -115
- package/plugins/bizar/tests/tools/plan-action.test.ts +0 -599
- package/plugins/bizar/tests/tools/read-glyph-feedback.test.ts +0 -253
- package/plugins/bizar/tests/tools/wait-for-feedback.test.ts +0 -390
- package/plugins/bizar/tests/update-deadlock.test.ts +0 -151
- package/plugins/bizar/tsconfig.json +0 -29
package/install.sh
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
#
|
|
3
|
-
# install.sh — Cross-platform BizarHarness installer (
|
|
3
|
+
# install.sh — Cross-platform BizarHarness installer (Claude Code).
|
|
4
4
|
#
|
|
5
|
-
#
|
|
6
|
-
# 1. On first install: registers the system service that auto-starts
|
|
7
|
-
# the dashboard (`bizar service install`).
|
|
8
|
-
# 2. On update: stops the running service before files are replaced
|
|
9
|
-
# (`bizar service stop` → npm upgrade → `bizar service restart`).
|
|
5
|
+
# v6.3.0 — Migrated from Cline to Claude Code.
|
|
10
6
|
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
7
|
+
# 1. Detects platform (Linux/macOS/Windows)
|
|
8
|
+
# 2. Installs Node.js 18+, jq, gh, uv, python3 (cross-platform)
|
|
9
|
+
# 3. Installs Claude Code via npm:
|
|
10
|
+
# npm install -g @anthropic-ai/claude-agent-sdk
|
|
11
|
+
# npm install -g @anthropic-ai/claude-code
|
|
12
|
+
# 4. Optionally installs agent-browser (Rust native CLI from vercel-labs)
|
|
13
|
+
# 5. Shells out to `node cli/provision-claude.mjs`, which writes the
|
|
14
|
+
# `~/.claude/` config tree, registers the Bizar MCP server, and
|
|
15
|
+
# copies agent files / skills / commands / hooks / rules.
|
|
15
16
|
#
|
|
16
|
-
#
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
# Agent files / plugin copy / cline.json patching / service registration /
|
|
22
|
-
# skills install / doctor check are ALL handled by the unified provisioner
|
|
23
|
-
# after this script returns.
|
|
17
|
+
# Almost all logic still lives in `cli/provision-claude.mjs:runProvision`,
|
|
18
|
+
# which is shared between `bizar install` and `bizar update`. This bash
|
|
19
|
+
# script exists only for the platform-specific steps that need sudo +
|
|
20
|
+
# a system package manager.
|
|
24
21
|
#
|
|
25
22
|
# Flags:
|
|
26
23
|
# --non-interactive skip prompts (CI safe)
|
|
@@ -72,7 +69,7 @@ MODE="install"
|
|
|
72
69
|
|
|
73
70
|
show_usage() {
|
|
74
71
|
cat <<'EOF'
|
|
75
|
-
install.sh — BizarHarness cross-platform installer
|
|
72
|
+
install.sh — BizarHarness cross-platform installer (Claude Code)
|
|
76
73
|
|
|
77
74
|
Usage:
|
|
78
75
|
./install.sh Interactive install (Linux/macOS)
|
|
@@ -84,9 +81,10 @@ Usage:
|
|
|
84
81
|
./install.sh --mode=<mode> install | update | install-only-system
|
|
85
82
|
|
|
86
83
|
This script handles platform-specific system dependencies (apt/dnf/pacman/
|
|
87
|
-
zypper on Linux, brew on macOS) and then shells to
|
|
88
|
-
|
|
89
|
-
|
|
84
|
+
zypper on Linux, brew on macOS) and then shells to
|
|
85
|
+
`node cli/provision-claude.mjs`, which writes ~/.claude/, registers the
|
|
86
|
+
Bizar MCP server, copies agents / skills / commands / hooks / rules,
|
|
87
|
+
and runs the post-install doctor check.
|
|
90
88
|
EOF
|
|
91
89
|
}
|
|
92
90
|
|
|
@@ -159,7 +157,7 @@ ensure_node() {
|
|
|
159
157
|
action "Detected NixOS — Node.js must be installed via nix-shell"
|
|
160
158
|
warn "Run the following, then re-run this installer:"
|
|
161
159
|
warn " nix-shell -p nodejs python3 jq gh git"
|
|
162
|
-
warn " node cli/provision.mjs"
|
|
160
|
+
warn " node cli/provision-claude.mjs"
|
|
163
161
|
exit 0
|
|
164
162
|
;;
|
|
165
163
|
void)
|
|
@@ -175,6 +173,29 @@ ensure_node() {
|
|
|
175
173
|
note "Node.js installed: $(node --version)"
|
|
176
174
|
}
|
|
177
175
|
|
|
176
|
+
# ── Claude Code install ────────────────────────────────────────────────────
|
|
177
|
+
install_claude_code() {
|
|
178
|
+
if have_cmd claude; then
|
|
179
|
+
note "claude $(claude --version 2>/dev/null | head -1) present"
|
|
180
|
+
else
|
|
181
|
+
section "Installing Claude Code"
|
|
182
|
+
if ! have_cmd npm; then
|
|
183
|
+
err "npm not available — install Node.js 18+ first: https://nodejs.org/"
|
|
184
|
+
exit 1
|
|
185
|
+
fi
|
|
186
|
+
action "Installing @anthropic-ai/claude-agent-sdk..."
|
|
187
|
+
dry npm install -g @anthropic-ai/claude-agent-sdk 2>&1 || \
|
|
188
|
+
warn "claude-agent-sdk install failed — retry later: npm install -g @anthropic-ai/claude-agent-sdk"
|
|
189
|
+
action "Installing @anthropic-ai/claude-code..."
|
|
190
|
+
dry npm install -g @anthropic-ai/claude-code 2>&1
|
|
191
|
+
if have_cmd claude; then
|
|
192
|
+
note "claude $(claude --version 2>/dev/null | head -1) installed"
|
|
193
|
+
else
|
|
194
|
+
warn "claude CLI not found on PATH after install — check npm global bin dir"
|
|
195
|
+
fi
|
|
196
|
+
fi
|
|
197
|
+
}
|
|
198
|
+
|
|
178
199
|
# ── Dependency detection + install (cross-platform) ────────────────────────
|
|
179
200
|
check_deps() {
|
|
180
201
|
section "Checking dependencies"
|
|
@@ -194,7 +215,7 @@ install_agent_browser() {
|
|
|
194
215
|
# the v5.x browser-harness (Python CDP wrapper). Installs via npm.
|
|
195
216
|
#
|
|
196
217
|
# If npm is not available, this is a soft-fail: agent-browser is
|
|
197
|
-
# optional, and `cli/provision.mjs:ensureAgentBrowser` will retry it
|
|
218
|
+
# optional, and `cli/provision-claude.mjs:ensureAgentBrowser` will retry it
|
|
198
219
|
# once npm is available.
|
|
199
220
|
if have_cmd agent-browser; then
|
|
200
221
|
local ab_ver
|
|
@@ -305,7 +326,7 @@ install_missing_deps_linux() {
|
|
|
305
326
|
warn "NixOS detected — LightRAG and other uv tools require manual setup"
|
|
306
327
|
warn " After nix-shell: nix-shell -p nodejs python3 jq gh git"
|
|
307
328
|
warn " Then run: uv tool install \"lightrag-hku[api]\""
|
|
308
|
-
warn " And re-run this installer: node cli/provision.mjs"
|
|
329
|
+
warn " And re-run this installer: node cli/provision-claude.mjs"
|
|
309
330
|
return 0
|
|
310
331
|
;;
|
|
311
332
|
esac
|
|
@@ -337,15 +358,13 @@ install_service() {
|
|
|
337
358
|
# We still call it from here because the bash script may run standalone
|
|
338
359
|
# (e.g. for first-boot provisioning before the npm package is set up).
|
|
339
360
|
#
|
|
340
|
-
#
|
|
341
|
-
#
|
|
342
|
-
#
|
|
343
|
-
# by the provisioner after — see cli/provision.mjs. This function
|
|
344
|
-
# covers the FIRST install path only.
|
|
361
|
+
# v6.3.0 — Claude Code does NOT have an out-of-process "server" the way
|
|
362
|
+
# Cline did, so we skip `bizar service install` here. The dashboard
|
|
363
|
+
# (bizar-dash) is launched via `bizar dash start --bg` instead.
|
|
345
364
|
local bin="$REPO_DIR/cli/bin.mjs"
|
|
346
365
|
if [ ! -f "$bin" ]; then
|
|
347
366
|
warn "cli/bin.mjs not found — service registration deferred"
|
|
348
|
-
warn " (will complete when
|
|
367
|
+
warn " (will complete when \`bizar service install\` is run later)"
|
|
349
368
|
return 0
|
|
350
369
|
fi
|
|
351
370
|
if [ "$DRY_RUN" -eq 1 ]; then
|
|
@@ -369,15 +388,15 @@ print_banner() {
|
|
|
369
388
|
section "Install complete"
|
|
370
389
|
echo ""
|
|
371
390
|
echo -e "${BOLD}${CYAN}┌────────────────────────────────────────────────────────────┐${NC}"
|
|
372
|
-
echo -e "${BOLD}${CYAN}│${NC} ${BOLD}BizarHarness ready.${NC}
|
|
391
|
+
echo -e "${BOLD}${CYAN}│${NC} ${BOLD}BizarHarness ready (Claude Code).${NC} │"
|
|
373
392
|
echo -e "${BOLD}${CYAN}│${NC} │"
|
|
374
|
-
echo -e "${BOLD}${CYAN}│${NC} ${GREEN}✓${NC} Cross-platform installer
|
|
393
|
+
echo -e "${BOLD}${CYAN}│${NC} ${GREEN}✓${NC} Cross-platform installer v6.3.0 │"
|
|
375
394
|
echo -e "${BOLD}${CYAN}│${NC} │"
|
|
376
395
|
echo -e "${BOLD}${CYAN}│${NC} Dashboard: ${CYAN}$dashboard_url${NC} │"
|
|
377
396
|
echo -e "${BOLD}${CYAN}│${NC} │"
|
|
378
397
|
echo -e "${BOLD}${CYAN}│${NC} ${DIM}Next:${NC} │"
|
|
379
|
-
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 1. Restart
|
|
380
|
-
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 2. Run
|
|
398
|
+
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 1. Restart claude to pick up new config${NC} │"
|
|
399
|
+
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 2. Run \`claude auth login\` to add API keys${NC} │"
|
|
381
400
|
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 3. Run 'bizar dash start' to launch the dashboard${NC} │"
|
|
382
401
|
echo -e "${BOLD}${CYAN}│${NC} ${DIM} 4. Visit $dashboard_url in your browser${NC} │"
|
|
383
402
|
echo -e "${BOLD}${CYAN}└────────────────────────────────────────────────────────────┘${NC}"
|
|
@@ -393,6 +412,7 @@ install_linux() {
|
|
|
393
412
|
note "Detected Linux ($(uname -m))"
|
|
394
413
|
ensure_node
|
|
395
414
|
check_deps
|
|
415
|
+
install_claude_code
|
|
396
416
|
install_missing_deps_linux
|
|
397
417
|
install_agent_browser
|
|
398
418
|
install_service
|
|
@@ -402,6 +422,7 @@ install_macos() {
|
|
|
402
422
|
note "Detected macOS ($(uname -m))"
|
|
403
423
|
check_deps
|
|
404
424
|
install_missing_deps_macos
|
|
425
|
+
install_claude_code
|
|
405
426
|
install_agent_browser
|
|
406
427
|
install_service
|
|
407
428
|
}
|
|
@@ -417,7 +438,7 @@ main() {
|
|
|
417
438
|
fi
|
|
418
439
|
|
|
419
440
|
echo ""
|
|
420
|
-
echo -e "${BOLD}${CYAN} ⚡ BizarHarness Installer v6.
|
|
441
|
+
echo -e "${BOLD}${CYAN} ⚡ BizarHarness Installer v6.3.0 (Claude Code)${NC}"
|
|
421
442
|
if [ "$UPDATE_MODE" -eq 1 ]; then
|
|
422
443
|
echo -e " ${DIM}Update mode${NC}"
|
|
423
444
|
fi
|
|
@@ -441,16 +462,17 @@ main() {
|
|
|
441
462
|
esac
|
|
442
463
|
|
|
443
464
|
# ── Hand off to the unified provisioner (Node) ─────────────────────────
|
|
444
|
-
# All cross-OS work (agent files,
|
|
445
|
-
#
|
|
446
|
-
# It's idempotent — skipping
|
|
447
|
-
#
|
|
465
|
+
# All cross-OS work (agent files, command copy, ~/.claude/ settings,
|
|
466
|
+
# MCP server registration, skills/rules/hooks mirror) lives in
|
|
467
|
+
# `cli/provision-claude.mjs:runProvision`. It's idempotent — skipping
|
|
468
|
+
# it (e.g. via --install-only-system) is fine for first-boot scenarios
|
|
469
|
+
# where the npm package isn't yet set up.
|
|
448
470
|
if [ "$MODE" = "install-only-system" ]; then
|
|
449
471
|
note "skipped node provisioner (--mode=install-only-system)"
|
|
450
472
|
exit 0
|
|
451
473
|
fi
|
|
452
474
|
|
|
453
|
-
if [ -f "$REPO_DIR/cli/provision.mjs" ]; then
|
|
475
|
+
if [ -f "$REPO_DIR/cli/provision-claude.mjs" ]; then
|
|
454
476
|
echo ""
|
|
455
477
|
section "Running unified provisioner"
|
|
456
478
|
local args=(--mode "$MODE")
|
|
@@ -459,7 +481,7 @@ main() {
|
|
|
459
481
|
[ "$NON_INTERACTIVE" -eq 1 ] && args+=(--yes)
|
|
460
482
|
# `set +e` so we capture the provisioner's exit code and surface it.
|
|
461
483
|
set +e
|
|
462
|
-
node "$REPO_DIR/cli/provision.mjs" "${args[@]}"
|
|
484
|
+
node "$REPO_DIR/cli/provision-claude.mjs" "${args[@]}"
|
|
463
485
|
local rc=$?
|
|
464
486
|
set -e
|
|
465
487
|
if [ "$rc" -ne 0 ]; then
|
|
@@ -468,9 +490,9 @@ main() {
|
|
|
468
490
|
fi
|
|
469
491
|
print_banner
|
|
470
492
|
else
|
|
471
|
-
warn "cli/provision.mjs not found — agent files /
|
|
493
|
+
warn "cli/provision-claude.mjs not found — agent files / MCP / settings.json"
|
|
472
494
|
warn " were NOT synced. Run \`bizar install\` from a checkout to fix."
|
|
473
495
|
fi
|
|
474
496
|
}
|
|
475
497
|
|
|
476
|
-
main "$@"
|
|
498
|
+
main "$@"
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polderlabs/bizar",
|
|
3
|
-
"version": "6.
|
|
4
|
-
"description": "Norse-pantheon multi-agent system for
|
|
3
|
+
"version": "6.3.0",
|
|
4
|
+
"description": "Norse-pantheon multi-agent system for Claude Code — 14 agents across 4 cost tiers with cost-aware routing, plans, and a configurable agent harness. Ships as a single npm package with the dashboard server, Claude Code MCP server, and typed SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bizar": "cli/bin.mjs"
|
|
@@ -9,13 +9,12 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"cli/",
|
|
11
11
|
"bizar-dash/",
|
|
12
|
-
"plugins/",
|
|
13
12
|
"packages/sdk/",
|
|
13
|
+
".claude/",
|
|
14
14
|
"config/",
|
|
15
15
|
"templates/",
|
|
16
16
|
"scripts/",
|
|
17
|
-
"install.sh"
|
|
18
|
-
"cli/browser-harness-up.sh"
|
|
17
|
+
"install.sh"
|
|
19
18
|
],
|
|
20
19
|
"scripts": {
|
|
21
20
|
"typecheck": "tsc --noEmit",
|
|
@@ -24,12 +23,13 @@
|
|
|
24
23
|
"test:sdk": "node_modules/.bin/vitest run --root packages/sdk",
|
|
25
24
|
"test:web": "cd bizar-dash && npx vitest run",
|
|
26
25
|
"test:sdk:watch": "node_modules/.bin/vitest --root packages/sdk",
|
|
27
|
-
"test": "npm run typecheck && npm run test:sdk && node --test cli/install.test.mjs cli/provision.test.mjs cli/commands/
|
|
26
|
+
"test": "npm run typecheck && npm run test:sdk && node --test cli/install.test.mjs cli/provision.test.mjs cli/commands/setup-provider.test.mjs cli/commands/rca.test.mjs && node --test bizar-dash/tests/path-safe.test.mjs",
|
|
28
27
|
"build": "npm run build:sdk && npm run build:dash",
|
|
29
28
|
"prepublishOnly": "npm run build"
|
|
30
29
|
},
|
|
31
30
|
"keywords": [
|
|
32
|
-
"
|
|
31
|
+
"claude-code",
|
|
32
|
+
"claude-agent-sdk",
|
|
33
33
|
"ai-agent",
|
|
34
34
|
"norse",
|
|
35
35
|
"multi-agent",
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"cli",
|
|
38
38
|
"platform",
|
|
39
39
|
"mods",
|
|
40
|
-
"schedules"
|
|
40
|
+
"schedules",
|
|
41
|
+
"mcp"
|
|
41
42
|
],
|
|
42
43
|
"license": "MIT",
|
|
43
44
|
"engines": {
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"bun": ">=1.1.0"
|
|
46
47
|
},
|
|
47
48
|
"dependencies": {
|
|
49
|
+
"@polderlabs/bizar-sdk": "^0.4.0",
|
|
48
50
|
"@mdx-js/mdx": "^3.1.1",
|
|
49
51
|
"@mdx-js/react": "^3.1.1",
|
|
50
52
|
"@opentelemetry/api": "^1.9.1",
|
|
@@ -77,8 +79,14 @@
|
|
|
77
79
|
"ws": "^8.18.0",
|
|
78
80
|
"zod": "4.1.8"
|
|
79
81
|
},
|
|
80
|
-
"peerDependencies": {
|
|
81
|
-
|
|
82
|
+
"peerDependencies": {
|
|
83
|
+
"@anthropic-ai/claude-agent-sdk": "*"
|
|
84
|
+
},
|
|
85
|
+
"peerDependenciesMeta": {
|
|
86
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
87
|
+
"optional": true
|
|
88
|
+
}
|
|
89
|
+
},
|
|
82
90
|
"devDependencies": {
|
|
83
91
|
"@testing-library/jest-dom": "^6.9.1",
|
|
84
92
|
"@testing-library/react": "^16.3.2",
|
|
@@ -108,6 +116,6 @@
|
|
|
108
116
|
},
|
|
109
117
|
"homepage": "https://github.com/DrB0rk/BizarHarness#readme",
|
|
110
118
|
"optionalDependencies": {
|
|
111
|
-
"@
|
|
119
|
+
"@anthropic-ai/claude-agent-sdk": "^0.1.0"
|
|
112
120
|
}
|
|
113
121
|
}
|
|
@@ -1,66 +1,70 @@
|
|
|
1
1
|
# packages/sdk/ — Architecture
|
|
2
2
|
|
|
3
|
-
> TypeScript SDK
|
|
4
|
-
>
|
|
5
|
-
>
|
|
6
|
-
>
|
|
3
|
+
> TypeScript SDK for the Bizar Harness. Provides the Claude Code MCP
|
|
4
|
+
> server, memory vault, dangerous-pattern scanner, tool-call fingerprint,
|
|
5
|
+
> and shared helpers consumed by both the dashboard and the runtime.
|
|
6
|
+
> This is the only entry point into Bizar for Claude Code; the legacy
|
|
7
|
+
> Cline plugin runtime has been removed (v6.3.0).
|
|
7
8
|
|
|
8
9
|
## Top-level layout
|
|
9
10
|
|
|
10
11
|
```
|
|
11
12
|
packages/sdk/
|
|
12
13
|
├── src/
|
|
13
|
-
│ ├──
|
|
14
|
-
│ ├──
|
|
15
|
-
│ ├──
|
|
16
|
-
│
|
|
17
|
-
│ ├──
|
|
18
|
-
│
|
|
19
|
-
│ ├──
|
|
20
|
-
│
|
|
21
|
-
│ └── version.ts # SDK version constant
|
|
22
|
-
├── tests/
|
|
23
|
-
│ ├── client.test.ts # vitest
|
|
24
|
-
│ ├── errors.test.ts
|
|
25
|
-
│ └── events.test.ts
|
|
14
|
+
│ ├── index.ts # Public API surface (re-exports)
|
|
15
|
+
│ ├── mcp/
|
|
16
|
+
│ │ ├── server.ts # createBizarMcpServer / BIZAR_TOOLS
|
|
17
|
+
│ │ └── bin.ts # stdio MCP server entry (bizar-mcp)
|
|
18
|
+
│ ├── memory/
|
|
19
|
+
│ │ └── index.ts # Obsidian-compatible vault helpers
|
|
20
|
+
│ ├── dangerous-patterns.ts # 36-pattern destructive-command scanner
|
|
21
|
+
│ └── fingerprint.ts # Tool-call fingerprint (SHA256)
|
|
26
22
|
└── package.json
|
|
27
23
|
```
|
|
28
24
|
|
|
29
25
|
## Public contract
|
|
30
26
|
|
|
31
27
|
```ts
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
28
|
+
import {
|
|
29
|
+
// Memory vault (Obsidian-compatible markdown)
|
|
30
|
+
readNote, writeNote, listNotes, searchNotes,
|
|
31
|
+
// Dangerous-pattern scanner
|
|
32
|
+
checkDangerous, listDangerousPatterns,
|
|
33
|
+
// Tool-call fingerprint
|
|
34
|
+
fingerprint,
|
|
35
|
+
// MCP server (Claude Code's only path into the SDK)
|
|
36
|
+
createBizarMcpServer, BIZAR_TOOLS,
|
|
37
|
+
} from "@polderlabs/bizar-sdk";
|
|
40
38
|
```
|
|
41
39
|
|
|
42
40
|
## Key invariants
|
|
43
41
|
|
|
44
|
-
-
|
|
45
|
-
in
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
- This package is consumed **only** by the `bizar-mcp` stdio binary
|
|
43
|
+
(registered in `~/.claude/settings.json`) and by `plugins/bizar`
|
|
44
|
+
(back-compat shim that re-exports the SDK surface).
|
|
45
|
+
- Claude Code has no in-process plugin API; MCP servers are the
|
|
46
|
+
sole integration path. Anything that previously required Cline's
|
|
47
|
+
`AgentPlugin` is now expressed as MCP tools or skills.
|
|
48
|
+
- Memory vault is plain markdown with YAML frontmatter; the SDK
|
|
49
|
+
provides typed read/write/list/search so the dashboard, hooks,
|
|
50
|
+
and MCP tools all use the same backend.
|
|
51
|
+
- Discriminated error model for memory + dangerous-pattern results
|
|
52
|
+
(`{ ok: true, data } | { ok: false, error }`).
|
|
50
53
|
|
|
51
54
|
## Versioning
|
|
52
55
|
|
|
53
56
|
- `@polderlabs/bizar-sdk` follows semver.
|
|
54
|
-
-
|
|
55
|
-
- Stable releases: `0.x.0` once v0.2 stabilizes.
|
|
57
|
+
- Current: `0.4.0` (Claude Code-native; MCP-first).
|
|
56
58
|
|
|
57
59
|
## Verification
|
|
58
60
|
|
|
59
|
-
- `make check` — TS compile +
|
|
60
|
-
- `make
|
|
61
|
-
|
|
61
|
+
- `make check` — TS compile + vitest
|
|
62
|
+
- `make test` — vitest over the SDK
|
|
63
|
+
- `bun run packages/sdk/src/mcp/bin.ts` — smoke test the MCP server
|
|
62
64
|
|
|
63
65
|
## See also
|
|
64
66
|
|
|
65
67
|
- [docs/architecture.md](../../docs/architecture.md) — layer model
|
|
66
68
|
- [@polderlabs/bizar-sdk on npm](https://www.npmjs.com/package/@polderlabs/bizar-sdk)
|
|
69
|
+
- [docs/migration-guide.md](../../docs/migration-guide.md) — v6.3.0
|
|
70
|
+
Claude Code migration
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@polderlabs/bizar-sdk",
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "@polderlabs/bizar-sdk",
|
|
9
|
+
"version": "0.4.0",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"zod": "^3.23.0"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"@anthropic-ai/claude-agent-sdk": "*"
|
|
15
|
+
},
|
|
16
|
+
"peerDependenciesMeta": {
|
|
17
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
18
|
+
"optional": true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"node_modules/zod": {
|
|
23
|
+
"version": "3.25.76",
|
|
24
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
|
25
|
+
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"funding": {
|
|
28
|
+
"url": "https://github.com/sponsors/colinhacks"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polderlabs/bizar-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"bizar-mcp": "dist/mcp/bin.js"
|
|
9
|
+
},
|
|
7
10
|
"exports": {
|
|
8
11
|
".": "./dist/index.js",
|
|
9
|
-
"./
|
|
12
|
+
"./memory": "./dist/memory/index.js",
|
|
13
|
+
"./mcp": "./dist/mcp/server.js",
|
|
14
|
+
"./dangerous-patterns": "./dist/dangerous-patterns.js"
|
|
10
15
|
},
|
|
11
|
-
"files": [
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
12
19
|
"peerDependencies": {
|
|
13
|
-
"@
|
|
20
|
+
"@anthropic-ai/claude-agent-sdk": "*"
|
|
14
21
|
},
|
|
15
22
|
"peerDependenciesMeta": {
|
|
16
|
-
"@
|
|
23
|
+
"@anthropic-ai/claude-agent-sdk": {
|
|
17
24
|
"optional": true
|
|
18
25
|
}
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"zod": "^3.23.0"
|
|
19
29
|
}
|
|
20
30
|
}
|
|
@@ -5,20 +5,10 @@
|
|
|
5
5
|
* + OpenFang `crates/openfang-skills/src/verify.rs` + OpenClaw
|
|
6
6
|
* `src/security/external-content.ts:28-43`.
|
|
7
7
|
*
|
|
8
|
-
* Detects dangerous commands and blocks/requires approval before
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Categories:
|
|
13
|
-
* - Filesystem destruction (rm -rf, mkfs, dd, fork bombs)
|
|
14
|
-
* - Privilege escalation (sudo, su, chmod 777, chown)
|
|
15
|
-
* - Network exfiltration (curl to metadata, wget, nc backdoors)
|
|
16
|
-
* - Process control (kill -9 1, pkill, shutdown)
|
|
17
|
-
* - Crypto mining (xmrig, minerd)
|
|
18
|
-
* - Path traversal in file paths (../../etc/passwd, ~/.ssh/)
|
|
19
|
-
*
|
|
20
|
-
* v6.0.0 — initial patterns. Tuned to catch the common exploits
|
|
21
|
-
* without false positives on legitimate dev work.
|
|
8
|
+
* Detects dangerous commands and blocks/requires approval before tool
|
|
9
|
+
* execution. Every tool that takes a "command" or "path" argument runs
|
|
10
|
+
* through `checkDangerous()` before being dispatched. Framework-agnostic
|
|
11
|
+
* — used by both the SDK MCP server and any Claude Code hook scripts.
|
|
22
12
|
*/
|
|
23
13
|
|
|
24
14
|
export type ApprovalDecision = "allow" | "require-approval" | "deny";
|
|
@@ -30,8 +20,6 @@ export interface ApprovalCheck {
|
|
|
30
20
|
pattern?: string;
|
|
31
21
|
}
|
|
32
22
|
|
|
33
|
-
// 30+ patterns from Hermes + OpenFang + OpenClaw. Catches the common
|
|
34
|
-
// dangerous operations in coding-agent contexts.
|
|
35
23
|
const DANGEROUS_PATTERNS: Array<{ name: string; pattern: RegExp; decision: ApprovalDecision; reason: string }> = [
|
|
36
24
|
// Filesystem destruction
|
|
37
25
|
{ name: "rm-rf-root", pattern: /\brm\s+(-\w*r\w*f\w*\s+)*\/\s*$/i, decision: "deny", reason: "Recursive delete of root filesystem" },
|
|
@@ -62,10 +50,10 @@ const DANGEROUS_PATTERNS: Array<{ name: string; pattern: RegExp; decision: Appro
|
|
|
62
50
|
{ name: "shutdown", pattern: /\b(shutdown|halt|poweroff|reboot)\b/i, decision: "deny", reason: "System shutdown" },
|
|
63
51
|
{ name: "init-0", pattern: /\binit\s+0\b/i, decision: "deny", reason: "init 0 (shutdown)" },
|
|
64
52
|
|
|
65
|
-
// Crypto mining
|
|
53
|
+
// Crypto mining
|
|
66
54
|
{ name: "xmrig", pattern: /\b(xmrig|minerd|cpuminer|cgminer)\b/i, decision: "deny", reason: "Crypto miner" },
|
|
67
55
|
|
|
68
|
-
// Package management
|
|
56
|
+
// Package management
|
|
69
57
|
{ name: "pip-install-shell", pattern: /\bpip\s+install\s+.*\|\s*(ba)?sh\b/i, decision: "deny", reason: "pip install piped to shell" },
|
|
70
58
|
{ name: "npm-install-shell", pattern: /\bnpm\s+install\s+.*\|\s*(ba)?sh\b/i, decision: "deny", reason: "npm install piped to shell" },
|
|
71
59
|
|
|
@@ -90,15 +78,7 @@ const DANGEROUS_PATTERNS: Array<{ name: string; pattern: RegExp; decision: Appro
|
|
|
90
78
|
{ name: "system-prompt-leak", pattern: /reveal\s+(your\s+)?system\s+prompt/i, decision: "deny", reason: "Prompt extraction attempt" },
|
|
91
79
|
];
|
|
92
80
|
|
|
93
|
-
/**
|
|
94
|
-
* Check a tool call's arguments for dangerous patterns.
|
|
95
|
-
* Returns a decision (allow / require-approval / deny) and a reason.
|
|
96
|
-
*
|
|
97
|
-
* The check is applied to the union of all string-typed arguments,
|
|
98
|
-
* so the caller doesn't need to know which arg is the "command".
|
|
99
|
-
*/
|
|
100
81
|
export function checkDangerous(args: Record<string, unknown>): ApprovalCheck {
|
|
101
|
-
// Collect all string values from the args object
|
|
102
82
|
const text = collectStrings(args);
|
|
103
83
|
if (!text) return { decision: "allow" };
|
|
104
84
|
|
|
@@ -128,12 +108,10 @@ function collectStrings(value: unknown, parts: string[] = []): string {
|
|
|
128
108
|
return parts.join("\n");
|
|
129
109
|
}
|
|
130
110
|
|
|
131
|
-
/** Get all pattern names (for audit / reporting). */
|
|
132
111
|
export function listDangerousPatterns(): string[] {
|
|
133
112
|
return DANGEROUS_PATTERNS.map((p) => p.name);
|
|
134
113
|
}
|
|
135
114
|
|
|
136
|
-
/** Count of patterns in each category. */
|
|
137
115
|
export function getDangerousPatternStats(): {
|
|
138
116
|
total: number;
|
|
139
117
|
deny: number;
|
|
Binary file
|