@polderlabs/bizar 6.2.5 → 7.0.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/hooks/worker-suggest.mjs +110 -0
- package/.claude/settings.json +125 -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-CW6fWKds.js} +3 -3
- package/bizar-dash/dist/assets/{EnvVarsSection-DXM8gRm_.js.map → EnvVarsSection-CW6fWKds.js.map} +1 -1
- package/bizar-dash/dist/assets/MobileChat-D7zRhU9K.js +1 -0
- package/bizar-dash/dist/assets/{MobileChat-BnKN_Ks_.js.map → MobileChat-D7zRhU9K.js.map} +1 -1
- package/bizar-dash/dist/assets/MobileSettings-K-sNsn_r.js +1 -0
- package/bizar-dash/dist/assets/{MobileSettings-DjCPxC-Q.js.map → MobileSettings-K-sNsn_r.js.map} +1 -1
- package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js → Toast-WTxc3m2g.js} +1 -1
- package/bizar-dash/dist/assets/{Toast-Cpl6-E63.js.map → Toast-WTxc3m2g.js.map} +1 -1
- package/bizar-dash/dist/assets/flow-BpU0-gK2.js +1 -0
- package/bizar-dash/dist/assets/flow-BpU0-gK2.js.map +1 -0
- package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js +1 -0
- package/bizar-dash/dist/assets/fuzzy-l0sNRNKZ.js.map +1 -0
- package/bizar-dash/dist/assets/{icons-Do5N2jmX.js → icons-B0AKnYI3.js} +98 -103
- package/bizar-dash/dist/assets/icons-B0AKnYI3.js.map +1 -0
- package/bizar-dash/dist/assets/main-C-Md3DaY.css +1 -0
- package/bizar-dash/dist/assets/main-CO8fIxQK.js +18 -0
- package/bizar-dash/dist/assets/main-CO8fIxQK.js.map +1 -0
- package/bizar-dash/dist/assets/markdown-w2bDDkAH.js +1 -0
- package/bizar-dash/dist/assets/{markdown-C6mXtQxD.js.map → markdown-w2bDDkAH.js.map} +1 -1
- package/bizar-dash/dist/assets/mobile-DXYCA0hC.js +1 -0
- package/bizar-dash/dist/assets/{mobile-CMHqtLV2.js.map → mobile-DXYCA0hC.js.map} +1 -1
- package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js +2 -0
- package/bizar-dash/dist/assets/mobile-layout-DSmtNPja.js.map +1 -0
- package/bizar-dash/dist/assets/react-vendor-BnuhLJ6X.css +1 -0
- package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js +46 -0
- package/bizar-dash/dist/assets/react-vendor-D3pra6w-.js.map +1 -0
- package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js +2 -0
- package/bizar-dash/dist/assets/useSlashCommands-3DFLOfpk.js.map +1 -0
- package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js +45 -0
- package/bizar-dash/dist/assets/vendor-Di7Cp-rw.js.map +1 -0
- package/bizar-dash/dist/index.html +12 -10
- package/bizar-dash/dist/mobile.html +7 -4
- package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/bizar-dash/src/server/api.mjs +15 -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/memory-consolidator.mjs +218 -0
- package/bizar-dash/src/server/memory-distillation.mjs +296 -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/distill.mjs +129 -0
- package/bizar-dash/src/server/routes/goal-planner.mjs +236 -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/App.tsx +4 -0
- package/bizar-dash/src/web/components/Tag.tsx +18 -5
- package/bizar-dash/src/web/components/Topbar.tsx +3 -0
- package/bizar-dash/src/web/components/agents/CommunicationLog.tsx +126 -0
- package/bizar-dash/src/web/components/agents/DependencyGraph.tsx +163 -0
- package/bizar-dash/src/web/components/agents/QualityGates.tsx +123 -0
- package/bizar-dash/src/web/components/agents/RealTimeEventLog.tsx +127 -0
- package/bizar-dash/src/web/components/agents/RoutingDecisions.test.tsx +148 -0
- package/bizar-dash/src/web/components/agents/RoutingDecisions.tsx +160 -0
- package/bizar-dash/src/web/components/chat/useChat.ts +23 -27
- package/bizar-dash/src/web/components/goals/GoalInput.tsx +86 -0
- package/bizar-dash/src/web/components/goals/PlanVisualization.tsx +111 -0
- package/bizar-dash/src/web/lib/goapPlanner.ts +614 -0
- package/bizar-dash/src/web/lib/types.ts +25 -0
- package/bizar-dash/src/web/styles/agents-redesign.css +311 -0
- package/bizar-dash/src/web/styles/main.css +251 -0
- package/bizar-dash/src/web/styles/tasks-redesign.css +231 -0
- package/bizar-dash/src/web/ui/controls/Button.tsx +77 -0
- package/bizar-dash/src/web/ui/controls/Checkbox.tsx +95 -0
- package/bizar-dash/src/web/ui/controls/IconButton.tsx +66 -0
- package/bizar-dash/src/web/ui/controls/Kbd.tsx +24 -0
- package/bizar-dash/src/web/ui/controls/NumberInput.tsx +77 -0
- package/bizar-dash/src/web/ui/controls/RadioGroup.tsx +109 -0
- package/bizar-dash/src/web/ui/controls/SearchInput.tsx +91 -0
- package/bizar-dash/src/web/ui/controls/Select.tsx +92 -0
- package/bizar-dash/src/web/ui/controls/Slider.tsx +70 -0
- package/bizar-dash/src/web/ui/controls/TextInput.tsx +67 -0
- package/bizar-dash/src/web/ui/controls/Toggle.tsx +79 -0
- package/bizar-dash/src/web/ui/controls/controls.css +454 -0
- package/bizar-dash/src/web/ui/controls/index.ts +33 -0
- package/bizar-dash/src/web/ui/data/BarChart.tsx +60 -0
- package/bizar-dash/src/web/ui/data/DataTable.tsx +216 -0
- package/bizar-dash/src/web/ui/data/EmptyState.tsx +60 -0
- package/bizar-dash/src/web/ui/data/ErrorState.tsx +56 -0
- package/bizar-dash/src/web/ui/data/KeyValueList.tsx +106 -0
- package/bizar-dash/src/web/ui/data/LoadingState.tsx +65 -0
- package/bizar-dash/src/web/ui/data/Sparkline.tsx +87 -0
- package/bizar-dash/src/web/ui/data/StatTile.tsx +87 -0
- package/bizar-dash/src/web/ui/data/data.css +535 -0
- package/bizar-dash/src/web/ui/data/index.ts +31 -0
- package/bizar-dash/src/web/ui/feedback/Badge.tsx +49 -0
- package/bizar-dash/src/web/ui/feedback/Dialog.tsx +209 -0
- package/bizar-dash/src/web/ui/feedback/ProgressBar.tsx +69 -0
- package/bizar-dash/src/web/ui/feedback/StatusDot.tsx +50 -0
- package/bizar-dash/src/web/ui/feedback/Toast.tsx +200 -0
- package/bizar-dash/src/web/ui/feedback/Tooltip.tsx +126 -0
- package/bizar-dash/src/web/ui/feedback/feedback.css +314 -0
- package/bizar-dash/src/web/ui/feedback/index.ts +43 -0
- package/bizar-dash/src/web/ui/index.ts +56 -0
- package/bizar-dash/src/web/ui/layout/AppShell.tsx +51 -0
- package/bizar-dash/src/web/ui/layout/Breadcrumbs.tsx +97 -0
- package/bizar-dash/src/web/ui/layout/Panel.tsx +73 -0
- package/bizar-dash/src/web/ui/layout/PanelHeader.tsx +39 -0
- package/bizar-dash/src/web/ui/layout/Sidebar.tsx +131 -0
- package/bizar-dash/src/web/ui/layout/Tabs.tsx +133 -0
- package/bizar-dash/src/web/ui/layout/Topbar.tsx +42 -0
- package/bizar-dash/src/web/ui/layout/index.ts +33 -0
- package/bizar-dash/src/web/ui/layout/layout.css +413 -0
- package/bizar-dash/src/web/ui/navigation/CommandPalette.tsx +199 -0
- package/bizar-dash/src/web/ui/navigation/NavGroup.tsx +95 -0
- package/bizar-dash/src/web/ui/navigation/NavLink.tsx +93 -0
- package/bizar-dash/src/web/ui/navigation/index.ts +17 -0
- package/bizar-dash/src/web/ui/navigation/navigation.css +343 -0
- package/bizar-dash/src/web/ui/primitives/Box.tsx +91 -0
- package/bizar-dash/src/web/ui/primitives/Grid.tsx +49 -0
- package/bizar-dash/src/web/ui/primitives/Inline.tsx +55 -0
- package/bizar-dash/src/web/ui/primitives/Separator.tsx +46 -0
- package/bizar-dash/src/web/ui/primitives/Stack.tsx +54 -0
- package/bizar-dash/src/web/ui/primitives/VisuallyHidden.tsx +26 -0
- package/bizar-dash/src/web/ui/primitives/index.ts +23 -0
- package/bizar-dash/src/web/ui/primitives/primitives.css +183 -0
- package/bizar-dash/src/web/ui/styles/globals.css +86 -0
- package/bizar-dash/src/web/ui/styles/reset.css +125 -0
- package/bizar-dash/src/web/ui/styles/tokens.css +195 -0
- package/bizar-dash/src/web/ui/theme/ThemeProvider.tsx +142 -0
- package/bizar-dash/src/web/ui/theme/tokens.ts +131 -0
- package/bizar-dash/src/web/ui/theme/useTheme.ts +22 -0
- package/bizar-dash/src/web/ui/utils/cx.ts +42 -0
- package/bizar-dash/src/web/views/Agents.tsx +506 -266
- package/bizar-dash/src/web/views/Chat.tsx +8 -8
- package/bizar-dash/src/web/views/GoalPlanner.tsx +158 -0
- package/bizar-dash/src/web/views/Overview.tsx +996 -448
- package/bizar-dash/src/web/views/Tasks.tsx +277 -273
- package/bizar-dash/tests/communication-log.test.tsx +67 -0
- package/bizar-dash/tests/dep-graph.test.tsx +40 -0
- package/bizar-dash/tests/event-log.test.tsx +61 -0
- package/bizar-dash/tests/goal-input.test.tsx +72 -0
- package/bizar-dash/tests/goap-planner.test.ts +68 -0
- package/bizar-dash/tests/quality-gates.test.tsx +59 -0
- package/bizar-dash/tests/setup.ts +31 -1
- package/bizar-dash/tests/ui/controls/Button.test.tsx +50 -0
- package/bizar-dash/tests/ui/controls/Checkbox.test.tsx +44 -0
- package/bizar-dash/tests/ui/controls/IconButton.test.tsx +37 -0
- package/bizar-dash/tests/ui/controls/Kbd.test.tsx +39 -0
- package/bizar-dash/tests/ui/controls/NumberInput.test.tsx +56 -0
- package/bizar-dash/tests/ui/controls/RadioGroup.test.tsx +58 -0
- package/bizar-dash/tests/ui/controls/SearchInput.test.tsx +52 -0
- package/bizar-dash/tests/ui/controls/Select.test.tsx +66 -0
- package/bizar-dash/tests/ui/controls/Slider.test.tsx +41 -0
- package/bizar-dash/tests/ui/controls/TextInput.test.tsx +44 -0
- package/bizar-dash/tests/ui/controls/Toggle.test.tsx +39 -0
- package/bizar-dash/tests/ui/data/BarChart.test.tsx +55 -0
- package/bizar-dash/tests/ui/data/DataTable.test.tsx +112 -0
- package/bizar-dash/tests/ui/data/EmptyState.test.tsx +57 -0
- package/bizar-dash/tests/ui/data/ErrorState.test.tsx +47 -0
- package/bizar-dash/tests/ui/data/KeyValueList.test.tsx +59 -0
- package/bizar-dash/tests/ui/data/LoadingState.test.tsx +37 -0
- package/bizar-dash/tests/ui/data/Sparkline.test.tsx +56 -0
- package/bizar-dash/tests/ui/data/StatTile.test.tsx +69 -0
- package/bizar-dash/tests/ui/feedback/Badge.test.tsx +41 -0
- package/bizar-dash/tests/ui/feedback/Dialog.test.tsx +99 -0
- package/bizar-dash/tests/ui/feedback/ProgressBar.test.tsx +66 -0
- package/bizar-dash/tests/ui/feedback/StatusDot.test.tsx +41 -0
- package/bizar-dash/tests/ui/feedback/Toast.test.tsx +124 -0
- package/bizar-dash/tests/ui/feedback/Tooltip.test.tsx +102 -0
- package/bizar-dash/tests/ui/layout/AppShell.test.tsx +50 -0
- package/bizar-dash/tests/ui/layout/Breadcrumbs.test.tsx +85 -0
- package/bizar-dash/tests/ui/layout/Panel.test.tsx +52 -0
- package/bizar-dash/tests/ui/layout/PanelHeader.test.tsx +32 -0
- package/bizar-dash/tests/ui/layout/Sidebar.test.tsx +95 -0
- package/bizar-dash/tests/ui/layout/Tabs.test.tsx +87 -0
- package/bizar-dash/tests/ui/layout/Topbar.test.tsx +41 -0
- package/bizar-dash/tests/ui/navigation/CommandPalette.test.tsx +105 -0
- package/bizar-dash/tests/ui/navigation/NavGroup.test.tsx +55 -0
- package/bizar-dash/tests/ui/navigation/NavLink.test.tsx +61 -0
- package/bizar-dash/tests/ui/primitives/Box.test.tsx +49 -0
- package/bizar-dash/tests/ui/primitives/Grid.test.tsx +37 -0
- package/bizar-dash/tests/ui/primitives/Inline.test.tsx +33 -0
- package/bizar-dash/tests/ui/primitives/Separator.test.tsx +34 -0
- package/bizar-dash/tests/ui/primitives/Stack.test.tsx +45 -0
- package/bizar-dash/tests/ui/primitives/VisuallyHidden.test.tsx +27 -0
- package/bizar-dash/tests/views/Agents.test.tsx +359 -0
- package/bizar-dash/tests/views/Overview.test.tsx +413 -0
- package/bizar-dash/tests/views/Tasks.test.tsx +250 -0
- package/bizar-dash/vitest.config.ts +3 -1
- package/cli/__tests__/cost-gate.test.mjs +301 -0
- package/cli/__tests__/feature-list-bridge.test.mjs +371 -0
- package/cli/bin.mjs +55 -18
- package/cli/commands/claim.mjs +282 -0
- package/cli/commands/claude-cmd.mjs +348 -0
- package/cli/commands/cost.mjs +279 -0
- package/cli/commands/install.mjs +12 -11
- package/cli/commands/validate.mjs +252 -325
- package/cli/cost-gate.mjs +501 -0
- package/cli/dev-link.test.mjs +11 -11
- package/cli/doctor.mjs +131 -213
- package/cli/feature-list-bridge.mjs +400 -0
- package/cli/install.mjs +33 -37
- package/cli/install.test.mjs +9 -9
- package/cli/memory-constants.mjs +17 -0
- package/cli/provision-claude.mjs +893 -0
- package/cli/provision.mjs +224 -227
- package/cli/utils.mjs +72 -58
- package/cli/worker-dispatcher.mjs +259 -0
- package/cli/worker-dispatcher.test.mjs +204 -0
- package/config/AGENTS.md +28 -28
- package/config/trigger-patterns.json +186 -0
- package/install.sh +66 -44
- package/package.json +19 -11
- package/packages/sdk/ARCHITECTURE.md +40 -36
- package/packages/sdk/package.json +15 -5
- package/packages/sdk/src/agent-registry.ts +304 -0
- package/packages/sdk/src/consensus/byzantine.ts +587 -0
- package/packages/sdk/src/consensus/index.ts +147 -0
- package/packages/sdk/src/consensus/queen.ts +173 -0
- package/packages/sdk/src/consensus/types.ts +199 -0
- package/{plugins/bizar → packages/sdk}/src/dangerous-patterns.ts +6 -28
- package/packages/sdk/src/federation/audit.ts +156 -0
- package/packages/sdk/src/federation/budget.ts +269 -0
- package/packages/sdk/src/federation/envelope.ts +144 -0
- package/packages/sdk/src/federation/hmac.ts +160 -0
- package/packages/sdk/src/federation/index.ts +443 -0
- package/packages/sdk/src/federation/pii.ts +241 -0
- package/packages/sdk/src/federation/policy.ts +112 -0
- package/packages/sdk/src/federation/trust.ts +146 -0
- package/packages/sdk/src/fingerprint.ts +0 -0
- package/packages/sdk/src/index.ts +101 -69
- package/packages/sdk/src/mcp/bin.ts +51 -0
- package/packages/sdk/src/mcp/server.ts +848 -0
- package/{plugins/bizar/src/memory-vault.ts → packages/sdk/src/memory/index.ts} +18 -21
- package/packages/sdk/src/router/codemod-intent.ts +125 -0
- package/packages/sdk/src/router/index.ts +247 -0
- package/packages/sdk/src/router/memory-distillation-shim.mjs +18 -0
- package/packages/sdk/src/router/memory-distillation.ts +249 -0
- package/packages/sdk/src/router/model-router.ts +235 -0
- package/packages/sdk/src/router/q-learning-router.ts +304 -0
- package/packages/sdk/src/swarm-topology.ts +279 -0
- package/packages/sdk/tests/agent-registry.test.ts +285 -0
- package/packages/sdk/tests/consensus.test.ts +376 -0
- package/packages/sdk/tests/federation/audit.test.ts +164 -0
- package/packages/sdk/tests/federation/budget.test.ts +189 -0
- package/packages/sdk/tests/federation/envelope.test.ts +120 -0
- package/packages/sdk/tests/federation/hmac.test.ts +194 -0
- package/packages/sdk/tests/federation/orchestrator.test.ts +176 -0
- package/packages/sdk/tests/federation/pii.test.ts +106 -0
- package/packages/sdk/tests/federation/policy.test.ts +140 -0
- package/packages/sdk/tests/federation/trust.test.ts +124 -0
- package/packages/sdk/tests/mcp-tools.test.ts +204 -0
- package/packages/sdk/tests/memory-distillation.test.mjs +186 -0
- package/packages/sdk/tests/model-router.test.mjs +108 -0
- package/packages/sdk/tests/q-learning-router.test.mjs +100 -0
- package/packages/sdk/tests/router-orchestrator.test.mjs +172 -0
- package/packages/sdk/tests/router.test.mjs +91 -0
- package/packages/sdk/tests/sdk.test.mjs +172 -0
- package/packages/sdk/tests/swarm-topology.test.ts +258 -0
- package/packages/sdk/vitest.config.ts +1 -1
- package/scripts/bh-full-e2e.mjs +167 -368
- package/scripts/check-deps.mjs +28 -46
- package/scripts/mirror-claude-md.sh +78 -0
- package/scripts/test-in-container.sh +31 -9
- 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/MobileChat-BnKN_Ks_.js +0 -1
- package/bizar-dash/dist/assets/MobileSettings-DjCPxC-Q.js +0 -1
- package/bizar-dash/dist/assets/icons-Do5N2jmX.js.map +0 -1
- package/bizar-dash/dist/assets/main-DYiZqMrn.js +0 -18
- package/bizar-dash/dist/assets/main-DYiZqMrn.js.map +0 -1
- package/bizar-dash/dist/assets/main-ietCEg_R.css +0 -1
- package/bizar-dash/dist/assets/markdown-C6mXtQxD.js +0 -1
- package/bizar-dash/dist/assets/mobile-CMHqtLV2.js +0 -1
- package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js +0 -2
- package/bizar-dash/dist/assets/mobile-layout-3jIhHX_p.js.map +0 -1
- package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js +0 -40
- package/bizar-dash/dist/assets/react-vendor-Dn4wqh4Z.js.map +0 -1
- package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js +0 -2
- package/bizar-dash/dist/assets/useSlashCommands-DtITw8Xv.js.map +0 -1
- package/bizar-dash/dist/assets/vendor-CeHGtduv.js +0 -29
- 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 -379
- 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 -925
- 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/sandbox.ts +0 -232
- 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 -190
- 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 -281
- 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/sandbox.test.ts +0 -117
- 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/scripts/mirror-agents-md.sh +0 -69
package/scripts/bh-full-e2e.mjs
CHANGED
|
@@ -1,49 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* /
|
|
2
|
+
* scripts/bh-full-e2e.mjs
|
|
3
3
|
*
|
|
4
|
-
* v6.
|
|
4
|
+
* v6.3.0 — Bizar Harness end-to-end smoke test (Claude Code-native).
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* verifies
|
|
6
|
+
* Migrated from Cline to Claude Code. The previous version booted the
|
|
7
|
+
* Bizar plugin in-process via ClineCore and verified its tool surface;
|
|
8
|
+
* the new version verifies the SDK + Claude Code integration instead.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - team tools: bizar_spawn_team, bizar_team_status
|
|
22
|
-
* - graph tools: bizar_graph_query, bizar_graph_path, bizar_graph_explain
|
|
23
|
-
* - memory tools: bizar_memory_search, bizar_memory_read,
|
|
24
|
-
* bizar_memory_write, bizar_memory_list
|
|
25
|
-
* - kb tools: bizar_open_kb
|
|
26
|
-
* - browser tools: bizar_browser_open, bizar_browser_snapshot,
|
|
27
|
-
* bizar_browser_click, bizar_browser_fill,
|
|
28
|
-
* bizar_browser_screenshot, bizar_browser_command
|
|
29
|
-
* - loop tools: bizar_loop_engineering (or related)
|
|
10
|
+
* Verifies that:
|
|
11
|
+
*
|
|
12
|
+
* 1. The SDK package builds and resolves
|
|
13
|
+
* 2. The MCP server entry exists at packages/sdk/src/mcp/bin.ts
|
|
14
|
+
* 3. The MCP server exposes the documented tool surface
|
|
15
|
+
* 4. The claude CLI is reachable on PATH
|
|
16
|
+
* 5. Project-level Claude Code settings are sane (.claude/settings.json)
|
|
17
|
+
* 6. Required agent files exist
|
|
18
|
+
* 7. Required skills exist
|
|
19
|
+
* 8. The plugin shim at plugins/bizar/index.ts re-exports from the SDK
|
|
20
|
+
* (no @cline/* imports anywhere in plugins/bizar/index.ts)
|
|
30
21
|
*
|
|
31
22
|
* Exits 0 on success, 1 on any failure. The script is intentionally
|
|
32
23
|
* self-contained — no test framework, no fixtures, no mock agents.
|
|
33
|
-
* Prints a one-line summary at the end.
|
|
34
24
|
*
|
|
35
|
-
* Run with: `bun run /
|
|
25
|
+
* Run with: `bun run scripts/bh-full-e2e.mjs`
|
|
36
26
|
*/
|
|
37
27
|
|
|
38
|
-
import { existsSync } from 'node:fs';
|
|
28
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
39
29
|
import { join, dirname, resolve } from 'node:path';
|
|
40
30
|
import { fileURLToPath } from 'node:url';
|
|
31
|
+
import { spawnSync } from 'node:child_process';
|
|
41
32
|
|
|
42
33
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
43
34
|
|
|
44
|
-
// Resolve the Bizar repo root.
|
|
45
|
-
// `make e2e` but it lives in the repo during development. Try the
|
|
46
|
-
// cwd first, then walk up.
|
|
35
|
+
// Resolve the Bizar repo root. Try cwd first, then walk up.
|
|
47
36
|
function findRepoRoot() {
|
|
48
37
|
const candidates = [
|
|
49
38
|
process.cwd(),
|
|
@@ -52,13 +41,15 @@ function findRepoRoot() {
|
|
|
52
41
|
'/home/drb0rk/Projects/BizarHarness',
|
|
53
42
|
];
|
|
54
43
|
for (const c of candidates) {
|
|
55
|
-
if (existsSync(join(c, '
|
|
44
|
+
if (existsSync(join(c, 'packages', 'sdk', 'src', 'index.ts'))) return c;
|
|
56
45
|
}
|
|
57
46
|
return process.cwd();
|
|
58
47
|
}
|
|
59
48
|
|
|
60
49
|
const REPO_ROOT = findRepoRoot();
|
|
61
|
-
const
|
|
50
|
+
const SDK_PATH = join(REPO_ROOT, 'packages', 'sdk', 'src', 'index.ts');
|
|
51
|
+
const MCP_BIN_PATH = join(REPO_ROOT, 'packages', 'sdk', 'src', 'mcp', 'bin.ts');
|
|
52
|
+
const PLUGIN_SHIM_PATH = join(REPO_ROOT, 'plugins', 'bizar', 'index.ts');
|
|
62
53
|
|
|
63
54
|
const RESULTS = [];
|
|
64
55
|
let totalChecks = 0;
|
|
@@ -75,425 +66,233 @@ function record(name, ok, message) {
|
|
|
75
66
|
console.log(line);
|
|
76
67
|
}
|
|
77
68
|
|
|
78
|
-
|
|
79
|
-
plan: [
|
|
80
|
-
'bizar_plan_action',
|
|
81
|
-
'bizar_wait_for_feedback',
|
|
82
|
-
'bizar_get_plan_comments',
|
|
83
|
-
'bizar_read_glyph_feedback',
|
|
84
|
-
],
|
|
85
|
-
memory: [
|
|
86
|
-
'bizar_memory_search',
|
|
87
|
-
'bizar_memory_read',
|
|
88
|
-
'bizar_memory_write',
|
|
89
|
-
'bizar_memory_list',
|
|
90
|
-
],
|
|
91
|
-
'agent-teams': [
|
|
92
|
-
'bizar_spawn_team',
|
|
93
|
-
'bizar_team_status',
|
|
94
|
-
],
|
|
95
|
-
graph: [
|
|
96
|
-
'bizar_graph_query',
|
|
97
|
-
'bizar_graph_path',
|
|
98
|
-
'bizar_graph_explain',
|
|
99
|
-
],
|
|
100
|
-
'open-kb': [
|
|
101
|
-
'bizar_open_kb',
|
|
102
|
-
],
|
|
103
|
-
browser: [
|
|
104
|
-
'bizar_browser_open',
|
|
105
|
-
'bizar_browser_snapshot',
|
|
106
|
-
'bizar_browser_click',
|
|
107
|
-
'bizar_browser_fill',
|
|
108
|
-
'bizar_browser_screenshot',
|
|
109
|
-
'bizar_browser_command',
|
|
110
|
-
],
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const MIN_TOOL_COUNT = 19;
|
|
114
|
-
|
|
115
|
-
console.log(' ᚦ BIZAR E2E — full plugin + tool + hook verification ᚦ');
|
|
69
|
+
console.log(' ᚦ BIZAR E2E — SDK + Claude Code verification ᚦ');
|
|
116
70
|
console.log('');
|
|
117
|
-
console.log(`
|
|
71
|
+
console.log(` sdk: ${SDK_PATH}`);
|
|
72
|
+
console.log(` mcp: ${MCP_BIN_PATH}`);
|
|
73
|
+
console.log(` plugin: ${PLUGIN_SHIM_PATH}`);
|
|
118
74
|
console.log('');
|
|
119
75
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
process.exit(1);
|
|
76
|
+
// ── 1. SDK package resolves ─────────────────────────────────────────────
|
|
77
|
+
if (!existsSync(SDK_PATH)) {
|
|
78
|
+
record('SDK entry resolves', false, `${SDK_PATH} not found`);
|
|
79
|
+
printSummaryAndExit();
|
|
125
80
|
}
|
|
126
|
-
record('
|
|
81
|
+
record('SDK entry resolves', true, SDK_PATH);
|
|
127
82
|
|
|
128
|
-
// ──
|
|
83
|
+
// ── 2. MCP server entry exists ──────────────────────────────────────────
|
|
84
|
+
if (!existsSync(MCP_BIN_PATH)) {
|
|
85
|
+
record('MCP server entry exists', false, `${MCP_BIN_PATH} not found`);
|
|
86
|
+
} else {
|
|
87
|
+
record('MCP server entry exists', true, MCP_BIN_PATH);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// ── 3. MCP server exposes the documented tool surface ──────────────────
|
|
129
91
|
try {
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
92
|
+
const serverSrc = readFileSync(join(REPO_ROOT, 'packages', 'sdk', 'src', 'mcp', 'server.ts'), 'utf8');
|
|
93
|
+
// Tool surface updated for v6.4.0 (was: bizar_* prefix + sandbox/glyph/plan_comment tools
|
|
94
|
+
// that were removed in the v6.3.0 migration; F-032 + F-033 added agent/router tools).
|
|
95
|
+
const requiredTools = [
|
|
96
|
+
// v6.3.0 core
|
|
97
|
+
'memory_read', 'memory_write', 'memory_list', 'memory_search',
|
|
98
|
+
'plan_action', 'open_kb',
|
|
99
|
+
'loop_list', 'loop_status', 'loop_start', 'loop_stop',
|
|
100
|
+
'graph_query', 'graph_path', 'danger_check',
|
|
101
|
+
// F-032 Swarm Coordination
|
|
102
|
+
'agent_spawn', 'agent_list', 'agent_terminate', 'swarm_init',
|
|
103
|
+
// F-033 Self-Learning
|
|
104
|
+
'model_route', 'agent_route', 'memory_distill', 'hooks_route',
|
|
105
|
+
];
|
|
106
|
+
const missing = requiredTools.filter((t) => !serverSrc.includes(t));
|
|
107
|
+
if (missing.length === 0) {
|
|
108
|
+
record('MCP server exposes documented tool surface', true, `${requiredTools.length} tools found in server.ts`);
|
|
134
109
|
} else {
|
|
135
|
-
|
|
136
|
-
const teamsOk = /enableAgentTeams:\s*true/.test(text);
|
|
137
|
-
const spawnOk = /enableSpawnAgent:\s*true/.test(text);
|
|
138
|
-
if (teamsOk && spawnOk) {
|
|
139
|
-
record('enableAgentTeams + enableSpawnAgent: true in clineruntime.ts', true,
|
|
140
|
-
'/team and /subagent (use_subagents + task tool) both work');
|
|
141
|
-
} else {
|
|
142
|
-
const missing = [];
|
|
143
|
-
if (!teamsOk) missing.push('enableAgentTeams');
|
|
144
|
-
if (!spawnOk) missing.push('enableSpawnAgent');
|
|
145
|
-
record('enableAgentTeams + enableSpawnAgent: true in clineruntime.ts', false,
|
|
146
|
-
`REGRESSION: missing ${missing.join(', ')} — /team and subagents will not function`);
|
|
147
|
-
}
|
|
110
|
+
record('MCP server exposes documented tool surface', false, `missing: ${missing.join(', ')}`);
|
|
148
111
|
}
|
|
149
112
|
} catch (err) {
|
|
150
|
-
record('
|
|
113
|
+
record('MCP server source readable', false, err.message);
|
|
151
114
|
}
|
|
152
115
|
|
|
153
|
-
// ──
|
|
116
|
+
// ── 4. Claude Code CLI is reachable ─────────────────────────────────────
|
|
154
117
|
try {
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
// v6.2.2 — template MUST NOT have a provider block (installer no
|
|
160
|
-
// longer touches provider config; user configures their own).
|
|
161
|
-
const hasNoProvider = !tpl.provider;
|
|
162
|
-
const hasDefaultAgent = tpl.default_agent;
|
|
163
|
-
const hasCommands = tpl.command && tpl.command.team && tpl.command.test && tpl.command.validate;
|
|
164
|
-
if (hasPlugin && hasNoProvider && hasDefaultAgent && hasCommands) {
|
|
165
|
-
record('cline.json.template is complete (no provider — user configures their own)', true, 'plugin, default_agent, /team, /test, /validate');
|
|
118
|
+
const r = spawnSync('claude', ['--version'], { encoding: 'utf8', timeout: 5000 });
|
|
119
|
+
if (r.status === 0) {
|
|
120
|
+
const ver = (r.stdout || r.stderr || '').trim().split('\n')[0] || 'unknown';
|
|
121
|
+
record('claude CLI reachable', true, ver);
|
|
166
122
|
} else {
|
|
167
|
-
|
|
168
|
-
if (!hasPlugin) missing.push('plugin[]');
|
|
169
|
-
if (!hasNoProvider) missing.push('provider (should be absent — user configures)');
|
|
170
|
-
if (!hasDefaultAgent) missing.push('default_agent');
|
|
171
|
-
if (!hasCommands) missing.push('command.team/test/validate');
|
|
172
|
-
record('cline.json.template is complete (no provider — user configures their own)', false, `missing/wrong: ${missing.join(', ')}`);
|
|
123
|
+
record('claude CLI reachable', false, `claude --version exited ${r.status}`);
|
|
173
124
|
}
|
|
174
125
|
} catch (err) {
|
|
175
|
-
record('
|
|
126
|
+
record('claude CLI reachable', false, err.message);
|
|
176
127
|
}
|
|
177
128
|
|
|
178
|
-
// ──
|
|
129
|
+
// ── 5. Project-level Claude Code settings sane ──────────────────────────
|
|
179
130
|
try {
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
record('config/commands/ present', false, `${cmdsDir} missing`);
|
|
131
|
+
const settingsPath = join(REPO_ROOT, '.claude', 'settings.json');
|
|
132
|
+
if (!existsSync(settingsPath)) {
|
|
133
|
+
record('.claude/settings.json present', false, `${settingsPath} missing`);
|
|
184
134
|
} else {
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
const
|
|
188
|
-
if (
|
|
189
|
-
record('
|
|
135
|
+
const settings = JSON.parse(readFileSync(settingsPath, 'utf8'));
|
|
136
|
+
const hasHooks = settings.hooks && Object.keys(settings.hooks).length > 0;
|
|
137
|
+
const hookNames = hasHooks ? Object.keys(settings.hooks).join(', ') : '(none)';
|
|
138
|
+
if (hasHooks) {
|
|
139
|
+
record('.claude/settings.json wired with hooks', true, hookNames);
|
|
190
140
|
} else {
|
|
191
|
-
record('
|
|
141
|
+
record('.claude/settings.json wired with hooks', false, 'no hooks defined');
|
|
192
142
|
}
|
|
193
143
|
}
|
|
194
144
|
} catch (err) {
|
|
195
|
-
record('
|
|
145
|
+
record('.claude/settings.json readable', false, err.message);
|
|
196
146
|
}
|
|
197
147
|
|
|
198
|
-
// ──
|
|
148
|
+
// ── 6. Plugin shim does NOT import @cline/* ─────────────────────────────
|
|
199
149
|
try {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (!existsSync(agentsDir)) {
|
|
203
|
-
record('config/agents/ present', false, `${agentsDir} missing`);
|
|
150
|
+
if (!existsSync(PLUGIN_SHIM_PATH)) {
|
|
151
|
+
record('plugin shim does not import @cline/*', true, 'plugin shim removed (no longer needed)');
|
|
204
152
|
} else {
|
|
205
|
-
const
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
'
|
|
209
|
-
'tyr.md', 'vidarr.md', 'forseti.md', 'semble-search.md', 'agent-browser.md',
|
|
210
|
-
];
|
|
211
|
-
const missing = required.filter((f) => !files.includes(f));
|
|
212
|
-
if (missing.length === 0) {
|
|
213
|
-
record('config/agents/ has all 14 agents', true, `${required.length} agents`);
|
|
153
|
+
const shimSrc = readFileSync(PLUGIN_SHIM_PATH, 'utf8');
|
|
154
|
+
const hasClineImport = /from\s+["']@cline\//.test(shimSrc) || /require\s*\(\s*["']@cline\//.test(shimSrc);
|
|
155
|
+
if (hasClineImport) {
|
|
156
|
+
record('plugin shim does not import @cline/*', false, '@cline/* import found in plugin shim');
|
|
214
157
|
} else {
|
|
215
|
-
record('
|
|
158
|
+
record('plugin shim does not import @cline/*', true, 'clean (only SDK imports)');
|
|
216
159
|
}
|
|
217
160
|
}
|
|
218
161
|
} catch (err) {
|
|
219
|
-
record('
|
|
162
|
+
record('plugin shim readable', false, err.message);
|
|
220
163
|
}
|
|
221
164
|
|
|
222
|
-
// ──
|
|
165
|
+
// ── 7. Plugin shim re-exports from SDK (or has been removed) ────────────
|
|
223
166
|
try {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (!existsSync(skillsDir)) {
|
|
227
|
-
record('config/skills/ present', false, `${skillsDir} missing`);
|
|
167
|
+
if (!existsSync(PLUGIN_SHIM_PATH)) {
|
|
168
|
+
record('plugin shim re-exports SDK', true, 'plugin shim removed; consumers use SDK directly');
|
|
228
169
|
} else {
|
|
229
|
-
const
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
170
|
+
const shimSrc = readFileSync(PLUGIN_SHIM_PATH, 'utf8');
|
|
171
|
+
const reExportsSdk = /from\s+["'].*packages\/sdk/.test(shimSrc) ||
|
|
172
|
+
/from\s+["']@polderlabs\/bizar-sdk/.test(shimSrc);
|
|
173
|
+
if (reExportsSdk) {
|
|
174
|
+
record('plugin shim re-exports SDK', true, 're-exports @polderlabs/bizar-sdk');
|
|
233
175
|
} else {
|
|
234
|
-
record('
|
|
176
|
+
record('plugin shim re-exports SDK', false, 'shim exists but does not re-export SDK');
|
|
235
177
|
}
|
|
236
178
|
}
|
|
237
179
|
} catch (err) {
|
|
238
|
-
record('
|
|
180
|
+
record('plugin shim check', false, err.message);
|
|
239
181
|
}
|
|
240
182
|
|
|
241
|
-
// ──
|
|
183
|
+
// ── 8. SDK package builds cleanly ──────────────────────────────────────
|
|
242
184
|
try {
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
185
|
+
const r = spawnSync('bunx', ['tsc', '--noEmit', '-p', 'packages/sdk/tsconfig.json'], {
|
|
186
|
+
encoding: 'utf8',
|
|
187
|
+
timeout: 60000,
|
|
188
|
+
cwd: REPO_ROOT,
|
|
189
|
+
});
|
|
190
|
+
if (r.status === 0) {
|
|
191
|
+
record('SDK TypeScript compiles cleanly', true, 'tsc --noEmit exited 0');
|
|
247
192
|
} else {
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
const missing = required.filter((f) => !files.includes(f));
|
|
251
|
-
if (missing.length === 0) {
|
|
252
|
-
record('config/rules/ has 7 always-on rules', true, `${required.length} rules`);
|
|
253
|
-
} else {
|
|
254
|
-
record('config/rules/ has 7 always-on rules', false, `missing: ${missing.join(', ')}`);
|
|
255
|
-
}
|
|
193
|
+
const last = (r.stdout || r.stderr || '').split('\n').filter(Boolean).slice(-1)[0] || 'unknown error';
|
|
194
|
+
record('SDK TypeScript compiles cleanly', false, last.slice(0, 80));
|
|
256
195
|
}
|
|
257
196
|
} catch (err) {
|
|
258
|
-
record('
|
|
197
|
+
record('SDK TypeScript compiles cleanly', true, 'skipped (bunx not available)');
|
|
259
198
|
}
|
|
260
199
|
|
|
261
|
-
// ──
|
|
262
|
-
// Cline hooks are real scripts (not markdown). They must have a
|
|
263
|
-
// shebang line and the right names. The previous v6.x format used
|
|
264
|
-
// markdown behavioral files which Cline ignored.
|
|
200
|
+
// ── 9. Required agent files exist ──────────────────────────────────────
|
|
265
201
|
try {
|
|
266
|
-
const
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
record('config/hooks/ present', false, `${hooksDir} missing`);
|
|
202
|
+
const agentsDir = join(REPO_ROOT, 'config', 'agents');
|
|
203
|
+
if (!existsSync(agentsDir)) {
|
|
204
|
+
record('config/agents/ present', false, `${agentsDir} missing`);
|
|
270
205
|
} else {
|
|
271
|
-
const files = readdirSync(
|
|
272
|
-
const required = [
|
|
206
|
+
const files = readdirSync(agentsDir);
|
|
207
|
+
const required = [
|
|
208
|
+
'odin.md', 'vor.md', 'frigg.md', 'quick.md',
|
|
209
|
+
'mimir.md', 'heimdall.md', 'hermod.md', 'thor.md', 'baldr.md',
|
|
210
|
+
'tyr.md', 'vidarr.md', 'forseti.md', 'semble-search.md', 'agent-browser.md',
|
|
211
|
+
];
|
|
273
212
|
const missing = required.filter((f) => !files.includes(f));
|
|
274
|
-
if (missing.length
|
|
275
|
-
record('config/
|
|
213
|
+
if (missing.length === 0) {
|
|
214
|
+
record('config/agents/ has all 14 agents', true, `${required.length} agents`);
|
|
276
215
|
} else {
|
|
277
|
-
|
|
278
|
-
const noShebang = [];
|
|
279
|
-
for (const f of required) {
|
|
280
|
-
const first = readFileSync(join(hooksDir, f), 'utf8').split('\n')[0] || '';
|
|
281
|
-
if (!first.startsWith('#!')) noShebang.push(f);
|
|
282
|
-
}
|
|
283
|
-
if (noShebang.length > 0) {
|
|
284
|
-
record('Cline hooks have shebang', false, `no shebang: ${noShebang.join(', ')}`);
|
|
285
|
-
} else {
|
|
286
|
-
record('config/hooks/ has 5 Cline-native executable hooks', true, required.join(', '));
|
|
287
|
-
}
|
|
216
|
+
record('config/agents/ has all 14 agents', false, `missing: ${missing.join(', ')}`);
|
|
288
217
|
}
|
|
289
218
|
}
|
|
290
219
|
} catch (err) {
|
|
291
|
-
record('config/
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// ── 7. Verify plugin index.ts is well-formed ───────────────────
|
|
295
|
-
try {
|
|
296
|
-
const { readFileSync } = await import('node:fs');
|
|
297
|
-
const idx = readFileSync(PLUGIN_PATH, 'utf8');
|
|
298
|
-
const hasSetup = /async\s+setup\s*\(/.test(idx);
|
|
299
|
-
const hasRegisterTool = /registerTool\s*\(/.test(idx);
|
|
300
|
-
const hasHooks = /AgentExtensionHooks|hooks\s*:/.test(idx);
|
|
301
|
-
if (hasSetup && hasRegisterTool && hasHooks) {
|
|
302
|
-
record('plugin index.ts has setup + registerTool + hooks', true, `${idx.length} bytes`);
|
|
303
|
-
} else {
|
|
304
|
-
const missing = [];
|
|
305
|
-
if (!hasSetup) missing.push('setup()');
|
|
306
|
-
if (!hasRegisterTool) missing.push('registerTool()');
|
|
307
|
-
if (!hasHooks) missing.push('hooks');
|
|
308
|
-
record('plugin index.ts has setup + registerTool + hooks', false, `missing: ${missing.join(', ')}`);
|
|
309
|
-
}
|
|
310
|
-
} catch (err) {
|
|
311
|
-
record('plugin index.ts readable', false, err.message);
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// ── 8. Verify all source tools are listed (static count) ────────
|
|
315
|
-
try {
|
|
316
|
-
const { readdirSync } = await import('node:fs');
|
|
317
|
-
const toolsDir = join(REPO_ROOT, 'plugins', 'bizar', 'src', 'tools');
|
|
318
|
-
const toolFiles = readdirSync(toolsDir).filter((f) => f.endsWith('.ts'));
|
|
319
|
-
if (toolFiles.length >= MIN_TOOL_COUNT) {
|
|
320
|
-
record('plugin source has ≥19 tool files', true, `${toolFiles.length} tool files`);
|
|
321
|
-
} else {
|
|
322
|
-
record('plugin source has ≥19 tool files', false, `only ${toolFiles.length} tool files (need ${MIN_TOOL_COUNT})`);
|
|
323
|
-
}
|
|
324
|
-
} catch (err) {
|
|
325
|
-
record('plugin tools dir scannable', false, err.message);
|
|
220
|
+
record('config/agents/ scannable', false, err.message);
|
|
326
221
|
}
|
|
327
222
|
|
|
328
|
-
// ──
|
|
223
|
+
// ── 10. Required skills exist ──────────────────────────────────────────
|
|
329
224
|
try {
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
record('plugin hooks dir present', false, `${hooksDir} missing`);
|
|
225
|
+
const skillsDir = join(REPO_ROOT, 'config', 'skills');
|
|
226
|
+
if (!existsSync(skillsDir)) {
|
|
227
|
+
record('config/skills/ has 8+ skills', false, `${skillsDir} missing`);
|
|
334
228
|
} else {
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
229
|
+
const dirs = readdirSync(skillsDir, { withFileTypes: true }).filter((e) => e.isDirectory());
|
|
230
|
+
const skillNames = dirs.map((d) => d.name);
|
|
231
|
+
if (skillNames.length >= 8) {
|
|
232
|
+
record('config/skills/ has 8+ skills', true, `${skillNames.length} skills`);
|
|
338
233
|
} else {
|
|
339
|
-
record('
|
|
234
|
+
record('config/skills/ has 8+ skills', false, `only ${skillNames.length} skills`);
|
|
340
235
|
}
|
|
341
236
|
}
|
|
342
237
|
} catch (err) {
|
|
343
|
-
record('
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
// ── 9.5. Verify all 14 agents reference the shared docs (v6.2.4) ─────
|
|
347
|
-
// Catches drift: an agent that doesn't reference AGENT_BASELINE.md or
|
|
348
|
-
// CLINE_TOOLS.md won't get the always-on rules at runtime.
|
|
349
|
-
try {
|
|
350
|
-
const { spawnSync } = await import('node:child_process');
|
|
351
|
-
const r = spawnSync('node', ['scripts/check-agents.mjs'], {
|
|
352
|
-
encoding: 'utf8',
|
|
353
|
-
cwd: REPO_ROOT,
|
|
354
|
-
timeout: 10000,
|
|
355
|
-
});
|
|
356
|
-
if (r.status === 0) {
|
|
357
|
-
// Extract the count from the output
|
|
358
|
-
const m = /All (\d+) agents/.exec(r.stdout || '');
|
|
359
|
-
const n = m ? m[1] : '?';
|
|
360
|
-
record('all 14 agents reference AGENT_BASELINE + CLINE_TOOLS', true, `${n} agents OK`);
|
|
361
|
-
} else {
|
|
362
|
-
record('all 14 agents reference AGENT_BASELINE + CLINE_TOOLS', false, (r.stdout || r.stderr || '').trim().split('\n').slice(-3).join(' | '));
|
|
363
|
-
}
|
|
364
|
-
} catch (err) {
|
|
365
|
-
record('all 14 agents reference AGENT_BASELINE + CLINE_TOOLS', false, err.message);
|
|
238
|
+
record('config/skills/ scannable', false, err.message);
|
|
366
239
|
}
|
|
367
240
|
|
|
368
|
-
// ──
|
|
241
|
+
// ── 11. package.json version is consistent ─────────────────────────────
|
|
369
242
|
try {
|
|
370
|
-
const
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
const ver = (r.stdout || r.stderr || '').trim().split('\n')[0] || 'unknown';
|
|
374
|
-
record('cline CLI reachable', true, ver);
|
|
243
|
+
const pkg = JSON.parse(readFileSync(join(REPO_ROOT, 'package.json'), 'utf8'));
|
|
244
|
+
if (pkg.version && pkg.name) {
|
|
245
|
+
record('package.json valid', true, `${pkg.name}@${pkg.version}`);
|
|
375
246
|
} else {
|
|
376
|
-
record('
|
|
247
|
+
record('package.json valid', false, 'missing name or version');
|
|
377
248
|
}
|
|
378
249
|
} catch (err) {
|
|
379
|
-
record('
|
|
250
|
+
record('package.json valid', false, err.message);
|
|
380
251
|
}
|
|
381
252
|
|
|
382
|
-
// ──
|
|
253
|
+
// ── 12. SDK exports BIZAR_TOOLS ─────────────────────────────────────────
|
|
383
254
|
try {
|
|
384
|
-
const
|
|
385
|
-
if (
|
|
386
|
-
record('
|
|
255
|
+
const serverSrc = readFileSync(join(REPO_ROOT, 'packages', 'sdk', 'src', 'mcp', 'server.ts'), 'utf8');
|
|
256
|
+
if (/export\s+const\s+BIZAR_TOOLS\b/.test(serverSrc) || /export\s+\{[^}]*BIZAR_TOOLS[^}]*\}\s+from/.test(serverSrc)) {
|
|
257
|
+
record('SDK exports BIZAR_TOOLS', true, 'tool registry exposed');
|
|
387
258
|
} else {
|
|
388
|
-
record('
|
|
259
|
+
record('SDK exports BIZAR_TOOLS', false, 'BIZAR_TOOLS not exported');
|
|
389
260
|
}
|
|
390
261
|
} catch (err) {
|
|
391
|
-
|
|
392
|
-
// The static check above is the source of truth.
|
|
393
|
-
record('ClineRuntime class is importable', true, 'skipped (deps not available outside plugin context)');
|
|
262
|
+
record('SDK exports BIZAR_TOOLS', false, err.message);
|
|
394
263
|
}
|
|
395
264
|
|
|
396
|
-
// ──
|
|
265
|
+
// ── 13. plugins/bizar/src/ has been deleted (no framework-coupled code) ─
|
|
397
266
|
try {
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
if (existsSync(validateCmd) && existsSync(validateTest)) {
|
|
402
|
-
record('bizar validate command + tests present', true, 'cli/commands/validate.{mjs,test.mjs}');
|
|
267
|
+
const srcDir = join(REPO_ROOT, 'plugins', 'bizar', 'src');
|
|
268
|
+
if (!existsSync(srcDir)) {
|
|
269
|
+
record('plugins/bizar/src/ deleted', true, 'framework-coupled code removed');
|
|
403
270
|
} else {
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
record('bizar validate command present', false, err.message);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
// ── 12.6. Verify Cline CLI integration (v6.2.3) ─────────────────
|
|
411
|
-
// v6.2.3 — pass-through wrappers for Cline CLI commands + sample.
|
|
412
|
-
try {
|
|
413
|
-
const { existsSync } = await import('node:fs');
|
|
414
|
-
const clineCmd = join(REPO_ROOT, 'cli', 'commands', 'cline-cmd.mjs');
|
|
415
|
-
const rcaCmd = join(REPO_ROOT, 'cli', 'commands', 'rca.mjs');
|
|
416
|
-
const rcaTest = join(REPO_ROOT, 'cli', 'commands', 'rca.test.mjs');
|
|
417
|
-
const setupProviderCmd = join(REPO_ROOT, 'cli', 'commands', 'setup-provider.mjs');
|
|
418
|
-
const setupProviderTest = join(REPO_ROOT, 'cli', 'commands', 'setup-provider.test.mjs');
|
|
419
|
-
if (existsSync(clineCmd)) {
|
|
420
|
-
const text = (await import('node:fs')).readFileSync(clineCmd, 'utf8');
|
|
421
|
-
const hasConfig = /runClineConfig\b/.test(text);
|
|
422
|
-
const hasHistory = /runClineHistory\b/.test(text);
|
|
423
|
-
const hasHub = /runClineHub\b/.test(text);
|
|
424
|
-
const hasHook = /runClineHook\b/.test(text);
|
|
425
|
-
const hasTeam = /runClineTeam\b/.test(text);
|
|
426
|
-
const hasSubagent = /runClineSubagent\b/.test(text);
|
|
427
|
-
if (hasConfig && hasHistory && hasHub && hasHook && hasTeam && hasSubagent) {
|
|
428
|
-
record('bizar cline-cmd wrappers present', true, 'config, history, hub, hook, team, subagent');
|
|
271
|
+
const files = readdirSync(srcDir);
|
|
272
|
+
if (files.length === 0) {
|
|
273
|
+
record('plugins/bizar/src/ deleted', true, 'framework-coupled code removed (empty dir)');
|
|
429
274
|
} else {
|
|
430
|
-
|
|
431
|
-
if (!hasConfig) missing.push('config');
|
|
432
|
-
if (!hasHistory) missing.push('history');
|
|
433
|
-
if (!hasHub) missing.push('hub');
|
|
434
|
-
if (!hasHook) missing.push('hook');
|
|
435
|
-
if (!hasTeam) missing.push('team');
|
|
436
|
-
if (!hasSubagent) missing.push('subagent');
|
|
437
|
-
record('bizar cline-cmd wrappers present', false, `missing: ${missing.join(', ')}`);
|
|
275
|
+
record('plugins/bizar/src/ deleted', false, `${files.length} files remain — review and delete`);
|
|
438
276
|
}
|
|
439
|
-
} else {
|
|
440
|
-
record('bizar cline-cmd wrappers present', false, 'cli/commands/cline-cmd.mjs missing');
|
|
441
|
-
}
|
|
442
|
-
if (existsSync(rcaCmd) && existsSync(rcaTest)) {
|
|
443
|
-
record('bizar rca (GitHub Issue RCA sample) present', true, 'cli/commands/rca.{mjs,test.mjs}');
|
|
444
|
-
} else {
|
|
445
|
-
record('bizar rca (GitHub Issue RCA sample) present', false, 'cli/commands/rca.* missing');
|
|
446
|
-
}
|
|
447
|
-
if (existsSync(setupProviderCmd) && existsSync(setupProviderTest)) {
|
|
448
|
-
record('bizar setup-provider + auto-migrate present', true, 'cli/commands/setup-provider.{mjs,test.mjs}');
|
|
449
|
-
} else {
|
|
450
|
-
record('bizar setup-provider + auto-migrate present', false, 'cli/commands/setup-provider.* missing');
|
|
451
|
-
}
|
|
452
|
-
} catch (err) {
|
|
453
|
-
record('bizar cline-cmd integration present', false, err.message);
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
// ── 13. Verify package.json version is consistent ──────────────
|
|
457
|
-
try {
|
|
458
|
-
const { readFileSync } = await import('node:fs');
|
|
459
|
-
const pkg = JSON.parse(readFileSync(join(REPO_ROOT, 'package.json'), 'utf8'));
|
|
460
|
-
if (pkg.version && pkg.name) {
|
|
461
|
-
record('package.json valid', true, `${pkg.name}@${pkg.version}`);
|
|
462
|
-
} else {
|
|
463
|
-
record('package.json valid', false, 'missing name or version');
|
|
464
277
|
}
|
|
465
278
|
} catch (err) {
|
|
466
|
-
record('
|
|
279
|
+
record('plugins/bizar/src/ check', false, err.message);
|
|
467
280
|
}
|
|
468
281
|
|
|
469
|
-
// ──
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
} else {
|
|
480
|
-
const last = (r.stdout || r.stderr || '').split('\n').filter(Boolean).slice(-1)[0] || 'unknown error';
|
|
481
|
-
record('TypeScript compiles cleanly', false, last.slice(0, 80));
|
|
282
|
+
// ── Summary ─────────────────────────────────────────────────────────────
|
|
283
|
+
function printSummaryAndExit() {
|
|
284
|
+
console.log('');
|
|
285
|
+
console.log(' ─────────────────────────────────────────────────────');
|
|
286
|
+
console.log(` ${passed}/${totalChecks} checks passed, ${failed} failed`);
|
|
287
|
+
console.log(' ─────────────────────────────────────────────────────');
|
|
288
|
+
if (failed > 0) {
|
|
289
|
+
console.log('');
|
|
290
|
+
console.log(' ✗ e2e FAILED. Fix the failures above before releasing.');
|
|
291
|
+
process.exit(1);
|
|
482
292
|
}
|
|
483
|
-
} catch (err) {
|
|
484
|
-
record('TypeScript compiles cleanly', true, 'skipped (bunx not available)');
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
// ── Summary ─────────────────────────────────────────────────────
|
|
488
|
-
console.log('');
|
|
489
|
-
console.log(' ─────────────────────────────────────────────────────');
|
|
490
|
-
console.log(` ${passed}/${totalChecks} checks passed, ${failed} failed`);
|
|
491
|
-
console.log(' ─────────────────────────────────────────────────────');
|
|
492
|
-
if (failed > 0) {
|
|
493
293
|
console.log('');
|
|
494
|
-
console.log('
|
|
495
|
-
process.exit(
|
|
294
|
+
console.log(' ✓ e2e OK. Bizar SDK + Claude Code integration is sound.');
|
|
295
|
+
process.exit(0);
|
|
496
296
|
}
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
process.exit(0);
|
|
297
|
+
|
|
298
|
+
printSummaryAndExit();
|