@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
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* federation/pii.ts — PII redaction pipeline with 4 compliance modes.
|
|
3
|
+
*
|
|
4
|
+
* F-038 — ported from ruflo
|
|
5
|
+
* `v3/@claude-flow/plugin-agent-federation/src/domain/services/pii-pipeline-service.ts`
|
|
6
|
+
* but simplified per spec ("For v1, focus on redact (regex-based:
|
|
7
|
+
* emails, SSNs, credit cards, IPs)") while keeping the same
|
|
8
|
+
* 4-mode surface (`soc2 | gdpr | hipaa | permissive`).
|
|
9
|
+
*
|
|
10
|
+
* Compliance modes map to the detection + action matrix:
|
|
11
|
+
*
|
|
12
|
+
* soc2 — strict; redact emails, IPs, SSNs, credit cards.
|
|
13
|
+
* gdpr — strict; redact emails, IPs, names, addresses.
|
|
14
|
+
* hipaa — strictest; redact everything we recognise (incl. SSN).
|
|
15
|
+
* permissive — only block the most damaging (credit cards, JWTs,
|
|
16
|
+
* AWS keys, private keys, GitHub tokens); pass through
|
|
17
|
+
* emails / IPs / phone numbers.
|
|
18
|
+
*
|
|
19
|
+
* The transforms are PURE: no I/O, no clocks (other than explicit
|
|
20
|
+
* `now` injection). `apply()` returns a transformed string + the
|
|
21
|
+
* list of detections + a `blocked` flag (true if a hard-blocked
|
|
22
|
+
* PII was found — the caller decides whether to drop the message).
|
|
23
|
+
*
|
|
24
|
+
* No native deps.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/** 4 supported compliance modes for the skeleton. */
|
|
28
|
+
export type PiiMode = "soc2" | "gdpr" | "hipaa" | "permissive";
|
|
29
|
+
|
|
30
|
+
export const PII_MODES: readonly PiiMode[] = ["soc2", "gdpr", "hipaa", "permissive"] as const;
|
|
31
|
+
|
|
32
|
+
export function isPiiMode(m: unknown): m is PiiMode {
|
|
33
|
+
return typeof m === "string" && (PII_MODES as readonly string[]).includes(m);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type PiiAction = "redact" | "hash" | "pass" | "block";
|
|
37
|
+
|
|
38
|
+
/** Internal PII categories — finer-grained than the modes. */
|
|
39
|
+
export type PiiCategory =
|
|
40
|
+
| "email"
|
|
41
|
+
| "ssn"
|
|
42
|
+
| "credit_card"
|
|
43
|
+
| "ip_address"
|
|
44
|
+
| "phone"
|
|
45
|
+
| "name"
|
|
46
|
+
| "address"
|
|
47
|
+
| "jwt"
|
|
48
|
+
| "aws_key"
|
|
49
|
+
| "private_key"
|
|
50
|
+
| "github_token";
|
|
51
|
+
|
|
52
|
+
export interface PiiDetection {
|
|
53
|
+
readonly category: PiiCategory;
|
|
54
|
+
readonly value: string;
|
|
55
|
+
readonly offset: number;
|
|
56
|
+
readonly confidence: number;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface PiiResult {
|
|
60
|
+
readonly transformed: string;
|
|
61
|
+
readonly detections: readonly PiiDetection[];
|
|
62
|
+
readonly actionsApplied: readonly { category: PiiCategory; action: PiiAction }[];
|
|
63
|
+
readonly blocked: boolean;
|
|
64
|
+
readonly mode: PiiMode;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface RegexEntry {
|
|
68
|
+
readonly category: PiiCategory;
|
|
69
|
+
readonly pattern: RegExp;
|
|
70
|
+
readonly confidence: number;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Detection table — order matters: more-specific patterns come first
|
|
74
|
+
* so we don't double-match. */
|
|
75
|
+
const PATTERNS: readonly RegexEntry[] = [
|
|
76
|
+
// secrets/keys — block in every mode except permissive (which still blocks them)
|
|
77
|
+
{ category: "aws_key", pattern: /\bAKIA[0-9A-Z]{16}\b/g, confidence: 0.99 },
|
|
78
|
+
{ category: "private_key", pattern: /-----BEGIN\s+(?:RSA\s+|EC\s+|DSA\s+)?PRIVATE\s+KEY-----/g, confidence: 0.99 },
|
|
79
|
+
{ category: "github_token", pattern: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{36,}\b/g, confidence: 0.97 },
|
|
80
|
+
{ category: "jwt", pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g, confidence: 0.95 },
|
|
81
|
+
{ category: "credit_card", pattern: /\b(?:\d{4}[-\s]?){3}\d{4}\b/g, confidence: 0.94 },
|
|
82
|
+
{ category: "ssn", pattern: /\b\d{3}-\d{2}-\d{4}\b/g, confidence: 0.93 },
|
|
83
|
+
{ category: "email", pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g, confidence: 0.9 },
|
|
84
|
+
{ category: "ip_address", pattern: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g, confidence: 0.85 },
|
|
85
|
+
{ category: "phone", pattern: /(?:\+?1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g, confidence: 0.8 },
|
|
86
|
+
{ category: "name", pattern: /\b(?:Mr\.|Mrs\.|Ms\.|Dr\.)\s+[A-Z][a-z]+(?:\s+[A-Z][a-z]+)+\b/g, confidence: 0.7 },
|
|
87
|
+
{ category: "address", pattern: /\b\d{1,5}\s+(?:[A-Z][a-z]+\s+){1,3}(?:St|Ave|Blvd|Dr|Ln|Rd|Way|Ct)\b/g, confidence: 0.7 },
|
|
88
|
+
];
|
|
89
|
+
|
|
90
|
+
/** Per-mode action policy. `block` means the envelope is rejected
|
|
91
|
+
* outright (caller drops it); `redact` replaces with
|
|
92
|
+
* `[REDACTED:<category>]`; `hash` replaces with
|
|
93
|
+
* `[HASH:<8-char-prefix>]`; `pass` lets it through unchanged. */
|
|
94
|
+
const MODE_POLICY: Record<PiiMode, Record<PiiCategory, PiiAction>> = {
|
|
95
|
+
soc2: {
|
|
96
|
+
email: "redact", ssn: "redact", credit_card: "block", ip_address: "redact",
|
|
97
|
+
phone: "redact", name: "pass", address: "pass",
|
|
98
|
+
jwt: "block", aws_key: "block", private_key: "block", github_token: "block",
|
|
99
|
+
},
|
|
100
|
+
gdpr: {
|
|
101
|
+
email: "redact", ssn: "redact", credit_card: "block", ip_address: "redact",
|
|
102
|
+
phone: "redact", name: "redact", address: "redact",
|
|
103
|
+
jwt: "block", aws_key: "block", private_key: "block", github_token: "block",
|
|
104
|
+
},
|
|
105
|
+
hipaa: {
|
|
106
|
+
email: "redact", ssn: "redact", credit_card: "block", ip_address: "redact",
|
|
107
|
+
phone: "redact", name: "redact", address: "redact",
|
|
108
|
+
jwt: "block", aws_key: "block", private_key: "block", github_token: "block",
|
|
109
|
+
},
|
|
110
|
+
permissive: {
|
|
111
|
+
email: "pass", ssn: "redact", credit_card: "block", ip_address: "pass",
|
|
112
|
+
phone: "pass", name: "pass", address: "pass",
|
|
113
|
+
jwt: "block", aws_key: "block", private_key: "block", github_token: "block",
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const REDACT_TOKEN = (cat: PiiCategory) => `[REDACTED:${cat}]`;
|
|
118
|
+
const HASH_PREFIX = 8;
|
|
119
|
+
|
|
120
|
+
function deterministicHash(value: string, salt: string): string {
|
|
121
|
+
// Lightweight, no-native-dep hash: FNV-1a 32-bit, hex-encoded, then
|
|
122
|
+
// salted + first-N chars. The skeleton doesn't need crypto-grade
|
|
123
|
+
// hashing here — the HMAC envelope signature already provides
|
|
124
|
+
// integrity. This is purely for irreversible string replacement.
|
|
125
|
+
let h = 0x811c9dc5;
|
|
126
|
+
for (let i = 0; i < value.length; i++) {
|
|
127
|
+
h ^= value.charCodeAt(i);
|
|
128
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
129
|
+
}
|
|
130
|
+
const salted = `${salt}:${h.toString(16).padStart(8, "0")}`;
|
|
131
|
+
let h2 = 0x811c9dc5;
|
|
132
|
+
for (let i = 0; i < salted.length; i++) {
|
|
133
|
+
h2 ^= salted.charCodeAt(i);
|
|
134
|
+
h2 = Math.imul(h2, 0x01000193) >>> 0;
|
|
135
|
+
}
|
|
136
|
+
return h2.toString(16).padStart(8, "0");
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export interface ApplyOptions {
|
|
140
|
+
/** Salt for hash() actions. Defaults to "bizar". */
|
|
141
|
+
readonly salt?: string;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Pure-function PII pipeline. Walks the regex table, decides an
|
|
145
|
+
* action per category under the chosen mode, applies the
|
|
146
|
+
* replacement. Returns enough metadata for the audit service to
|
|
147
|
+
* log what was stripped. */
|
|
148
|
+
export function apply(
|
|
149
|
+
text: string,
|
|
150
|
+
mode: PiiMode,
|
|
151
|
+
opts: ApplyOptions = {},
|
|
152
|
+
): PiiResult {
|
|
153
|
+
if (!isPiiMode(mode)) {
|
|
154
|
+
throw new Error(`apply: unknown mode '${String(mode)}'`);
|
|
155
|
+
}
|
|
156
|
+
const salt = opts.salt ?? "bizar";
|
|
157
|
+
const policy = MODE_POLICY[mode];
|
|
158
|
+
const detections: PiiDetection[] = [];
|
|
159
|
+
const actionsApplied: { category: PiiCategory; action: PiiAction }[] = [];
|
|
160
|
+
let blocked = false;
|
|
161
|
+
let transformed = text;
|
|
162
|
+
|
|
163
|
+
// Two-phase: (1) collect ALL detections across ALL categories first,
|
|
164
|
+
// (2) apply per-category actions in reverse-offset order so a
|
|
165
|
+
// `block` on one category doesn't hide detections in later ones.
|
|
166
|
+
for (const entry of PATTERNS) {
|
|
167
|
+
const regex = new RegExp(entry.pattern.source, entry.pattern.flags);
|
|
168
|
+
let m: RegExpExecArray | null;
|
|
169
|
+
while ((m = regex.exec(transformed)) !== null) {
|
|
170
|
+
detections.push({
|
|
171
|
+
category: entry.category,
|
|
172
|
+
value: m[0],
|
|
173
|
+
offset: m.index,
|
|
174
|
+
confidence: entry.confidence,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Now compute actions per category. `block` short-circuits the
|
|
180
|
+
// whole transform but we still report every detection.
|
|
181
|
+
for (const entry of PATTERNS) {
|
|
182
|
+
const inCategory = detections.filter((d) => d.category === entry.category);
|
|
183
|
+
if (inCategory.length === 0) continue;
|
|
184
|
+
|
|
185
|
+
const action = policy[entry.category];
|
|
186
|
+
actionsApplied.push({ category: entry.category, action });
|
|
187
|
+
if (action === "block") {
|
|
188
|
+
blocked = true;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (action === "pass") continue;
|
|
192
|
+
|
|
193
|
+
// Apply right-to-left so earlier offsets remain valid.
|
|
194
|
+
for (const hit of inCategory.reverse()) {
|
|
195
|
+
const replacement =
|
|
196
|
+
action === "redact"
|
|
197
|
+
? REDACT_TOKEN(entry.category)
|
|
198
|
+
: `[HASH:${deterministicHash(hit.value, salt).slice(0, HASH_PREFIX)}]`;
|
|
199
|
+
transformed =
|
|
200
|
+
transformed.slice(0, hit.offset) +
|
|
201
|
+
replacement +
|
|
202
|
+
transformed.slice(hit.offset + hit.value.length);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (blocked) transformed = "";
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
transformed,
|
|
210
|
+
detections,
|
|
211
|
+
actionsApplied,
|
|
212
|
+
blocked,
|
|
213
|
+
mode,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** PiiPipeline — class wrapper for parity with ruflo's
|
|
218
|
+
* PIIPipelineService shape. Holds a default mode + salt, exposes
|
|
219
|
+
* `process(text)` and `setMode(mode)`. */
|
|
220
|
+
export class PiiPipeline {
|
|
221
|
+
private mode: PiiMode;
|
|
222
|
+
private readonly salt: string;
|
|
223
|
+
|
|
224
|
+
constructor(opts: { mode?: PiiMode; salt?: string } = {}) {
|
|
225
|
+
this.mode = opts.mode ?? "soc2";
|
|
226
|
+
this.salt = opts.salt ?? "bizar";
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
setMode(mode: PiiMode): void {
|
|
230
|
+
if (!isPiiMode(mode)) throw new Error(`PiiPipeline: unknown mode '${mode}'`);
|
|
231
|
+
this.mode = mode;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
getMode(): PiiMode {
|
|
235
|
+
return this.mode;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
process(text: string): PiiResult {
|
|
239
|
+
return apply(text, this.mode, { salt: this.salt });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* federation/policy.ts — PolicyEngine: enforces per-call envelope
|
|
3
|
+
* constraints (maxHops, action allowlist, peer blocklist).
|
|
4
|
+
*
|
|
5
|
+
* F-038 — ported from ruflo
|
|
6
|
+
* `v3/@claude-flow/plugin-agent-federation/src/application/policy-engine.ts`
|
|
7
|
+
* but stripped to the three checks the skeleton needs:
|
|
8
|
+
*
|
|
9
|
+
* 1. maxHops — envelope.hopCount must be < budget.maxHops
|
|
10
|
+
* (default ceiling = 3 hops).
|
|
11
|
+
* 2. message — envelope.messageType must be in the action
|
|
12
|
+
* allowlist.
|
|
13
|
+
* 3. peer — source node must NOT be in the blocklist.
|
|
14
|
+
*
|
|
15
|
+
* `enforce(envelope, budget)` returns a discriminated result so
|
|
16
|
+
* callers can map directly to an MCP error string.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
FEDERATION_MESSAGE_TYPES,
|
|
21
|
+
isFederationMessageType,
|
|
22
|
+
type EnvelopeBudget,
|
|
23
|
+
type FederationEnvelope,
|
|
24
|
+
type FederationMessageType,
|
|
25
|
+
} from "./envelope.js";
|
|
26
|
+
|
|
27
|
+
/** Hard ceiling on hops — matches the spec's "≤ 3" rule. */
|
|
28
|
+
export const DEFAULT_MAX_HOPS = 3;
|
|
29
|
+
|
|
30
|
+
export type PolicyDecision =
|
|
31
|
+
| { allowed: true }
|
|
32
|
+
| {
|
|
33
|
+
allowed: false;
|
|
34
|
+
denialReason:
|
|
35
|
+
| "max_hops_exceeded"
|
|
36
|
+
| "message_type_not_allowed"
|
|
37
|
+
| "peer_blocked"
|
|
38
|
+
| "budget_missing"
|
|
39
|
+
| "budget_invalid";
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export interface PolicyConfig {
|
|
43
|
+
/** Set of message kinds accepted by this node. Defaults to all
|
|
44
|
+
* 16 ruflo kinds — narrow via `allowedMessageTypes`. */
|
|
45
|
+
readonly allowedMessageTypes?: readonly FederationMessageType[];
|
|
46
|
+
/** Set of sourceNodeIds that are NEVER accepted (blocklist). */
|
|
47
|
+
readonly peerBlocklist?: readonly string[];
|
|
48
|
+
/** Override the default maxHops ceiling. */
|
|
49
|
+
readonly maxHops?: number;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export class PolicyEngine {
|
|
53
|
+
private readonly allowed: Set<FederationMessageType>;
|
|
54
|
+
private readonly blocked: Set<string>;
|
|
55
|
+
private readonly maxHops: number;
|
|
56
|
+
|
|
57
|
+
constructor(cfg: PolicyConfig = {}) {
|
|
58
|
+
this.allowed = new Set(cfg.allowedMessageTypes ?? FEDERATION_MESSAGE_TYPES);
|
|
59
|
+
this.blocked = new Set((cfg.peerBlocklist ?? []).map((s) => String(s)));
|
|
60
|
+
this.maxHops = cfg.maxHops ?? DEFAULT_MAX_HOPS;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Runtime mutator — narrow the allowlist after construction. */
|
|
64
|
+
allowMessageType(t: FederationMessageType): void {
|
|
65
|
+
this.allowed.add(t);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Runtime mutator — narrow the allowlist after construction. */
|
|
69
|
+
denyMessageType(t: FederationMessageType): void {
|
|
70
|
+
this.allowed.delete(t);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Runtime mutator — block / unblock a peer at runtime. */
|
|
74
|
+
setBlocked(nodeId: string, blocked: boolean): void {
|
|
75
|
+
if (blocked) this.blocked.add(nodeId);
|
|
76
|
+
else this.blocked.delete(nodeId);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Admit or reject an envelope given its budget context. */
|
|
80
|
+
enforce(envelope: FederationEnvelope, budget: EnvelopeBudget | undefined): PolicyDecision {
|
|
81
|
+
// 0. The budget object must exist — without it we can't enforce
|
|
82
|
+
// the maxHops ceiling.
|
|
83
|
+
if (!budget) return { allowed: false, denialReason: "budget_missing" };
|
|
84
|
+
if (typeof budget.maxHops !== "number" || !Number.isFinite(budget.maxHops)) {
|
|
85
|
+
return { allowed: false, denialReason: "budget_invalid" };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// 1. Peer blocklist
|
|
89
|
+
if (this.blocked.has(envelope.sourceNodeId)) {
|
|
90
|
+
return { allowed: false, denialReason: "peer_blocked" };
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 2. Message type allowlist
|
|
94
|
+
if (!isFederationMessageType(envelope.messageType)) {
|
|
95
|
+
return { allowed: false, denialReason: "message_type_not_allowed" };
|
|
96
|
+
}
|
|
97
|
+
if (!this.allowed.has(envelope.messageType)) {
|
|
98
|
+
return { allowed: false, denialReason: "message_type_not_allowed" };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 3. maxHops — current hopCount must be strictly LESS than the
|
|
102
|
+
// ceiling. A freshly-origin envelope has hopCount=0 so a
|
|
103
|
+
// maxHops=3 budget admits it.
|
|
104
|
+
const hopCount = envelope.hopCount ?? 0;
|
|
105
|
+
const effectiveCeiling = Math.min(budget.maxHops, this.maxHops);
|
|
106
|
+
if (hopCount >= effectiveCeiling) {
|
|
107
|
+
return { allowed: false, denialReason: "max_hops_exceeded" };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return { allowed: true };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* federation/trust.ts — TrustEvaluator: peer allowlist + recent fail
|
|
3
|
+
* rate + envelope age → trust score.
|
|
4
|
+
*
|
|
5
|
+
* F-038 — ported from ruflo
|
|
6
|
+
* `v3/@claude-flow/plugin-agent-federation/src/application/trust-evaluator.ts`
|
|
7
|
+
* (computeScore shape), stripped down for the skeleton:
|
|
8
|
+
*
|
|
9
|
+
* evaluate(envelope, peer) → { allowed, reason, score }
|
|
10
|
+
*
|
|
11
|
+
* Inputs:
|
|
12
|
+
* - peer (PeerState): { nodeId, allowlisted, recentFailRate, lastSeenMs }
|
|
13
|
+
* - envelope: FederationEnvelope
|
|
14
|
+
*
|
|
15
|
+
* Scoring (pure function):
|
|
16
|
+
* baseScore = peer.allowlisted ? 0.6 : 0.0
|
|
17
|
+
* freshness = clamp(1 - ageMs / MAX_AGE_MS, 0, 1) * 0.2
|
|
18
|
+
* reliability = clamp(1 - peer.recentFailRate, 0, 1) * 0.2
|
|
19
|
+
* score = baseScore + freshness + reliability
|
|
20
|
+
*
|
|
21
|
+
* Decision:
|
|
22
|
+
* allowed = peer.allowlisted AND ageMs <= MAX_AGE_MS AND score >= MIN_SCORE
|
|
23
|
+
*
|
|
24
|
+
* State — per-node recent fail rate + last-seen are tracked
|
|
25
|
+
* in a Map so repeated calls from the same peer update the
|
|
26
|
+
* picture. Failures can be recorded via `recordFailure(nodeId)`.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { envelopeAgeMs, type FederationEnvelope } from "./envelope.js";
|
|
30
|
+
|
|
31
|
+
/** Maximum envelope age we'll trust (5 minutes — matches the
|
|
32
|
+
* HMAC freshness window). Older envelopes fail freshness
|
|
33
|
+
* independently of HMAC verification. */
|
|
34
|
+
export const MAX_TRUST_AGE_MS = 5 * 60 * 1000;
|
|
35
|
+
|
|
36
|
+
/** Minimum composite trust score required to admit an envelope. */
|
|
37
|
+
export const MIN_TRUST_SCORE = 0.7;
|
|
38
|
+
|
|
39
|
+
/** Number of recent failures tracked per peer for fail-rate calc. */
|
|
40
|
+
const FAILURE_WINDOW = 20;
|
|
41
|
+
|
|
42
|
+
export interface PeerState {
|
|
43
|
+
readonly nodeId: string;
|
|
44
|
+
readonly allowlisted: boolean;
|
|
45
|
+
/** Failure rate over the last `FAILURE_WINDOW` calls (0..1). */
|
|
46
|
+
readonly recentFailRate: number;
|
|
47
|
+
/** Last activity timestamp (ms epoch). Used as a tiebreaker. */
|
|
48
|
+
readonly lastSeenMs?: number;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type TrustDecision =
|
|
52
|
+
| { allowed: true; score: number; reason: string }
|
|
53
|
+
| { allowed: false; score: number; reason: string };
|
|
54
|
+
|
|
55
|
+
export class TrustEvaluator {
|
|
56
|
+
private readonly allowlist: Set<string>;
|
|
57
|
+
private readonly failHistory = new Map<string, { failures: boolean[]; lastSeenMs: number }>();
|
|
58
|
+
|
|
59
|
+
constructor(opts: { allowlist?: readonly string[] } = {}) {
|
|
60
|
+
this.allowlist = new Set((opts.allowlist ?? []).map((s) => String(s)));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** Add or remove a node from the trust allowlist at runtime. */
|
|
64
|
+
setAllowlisted(nodeId: string, allowlisted: boolean): void {
|
|
65
|
+
if (allowlisted) this.allowlist.add(nodeId);
|
|
66
|
+
else this.allowlist.delete(nodeId);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
isAllowlisted(nodeId: string): boolean {
|
|
70
|
+
return this.allowlist.has(nodeId);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Snapshot the per-peer state seen by `evaluate()`. */
|
|
74
|
+
getPeerState(nodeId: string, _now: number = Date.now()): PeerState {
|
|
75
|
+
const rec = this.failHistory.get(nodeId);
|
|
76
|
+
const total = rec?.failures.length ?? 0;
|
|
77
|
+
const failures = rec?.failures.filter((b) => b).length ?? 0;
|
|
78
|
+
return {
|
|
79
|
+
nodeId,
|
|
80
|
+
allowlisted: this.allowlist.has(nodeId),
|
|
81
|
+
recentFailRate: total === 0 ? 0 : failures / total,
|
|
82
|
+
lastSeenMs: rec?.lastSeenMs,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Record that an exchange with `nodeId` succeeded/failed. Sliding
|
|
87
|
+
* window of `FAILURE_WINDOW` most-recent events. */
|
|
88
|
+
recordOutcome(nodeId: string, ok: boolean, now: number = Date.now()): void {
|
|
89
|
+
const rec = this.failHistory.get(nodeId) ?? { failures: [], lastSeenMs: now };
|
|
90
|
+
rec.failures.push(!ok);
|
|
91
|
+
if (rec.failures.length > FAILURE_WINDOW) rec.failures.shift();
|
|
92
|
+
rec.lastSeenMs = now;
|
|
93
|
+
this.failHistory.set(nodeId, rec);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Compute the trust score (0..1). Pure function — useful for tests
|
|
97
|
+
* and for the orchestrator's `status` tool.
|
|
98
|
+
*
|
|
99
|
+
* baseScore = 0.3 if allowlisted else 0.0 (allowlist is necessary, not sufficient)
|
|
100
|
+
* freshness = (1 - ageMs / MAX_TRUST_AGE_MS) * 0.3 (envelope must be fresh)
|
|
101
|
+
* reliability = (1 - peer.recentFailRate) * 0.4 (peer must be reliable)
|
|
102
|
+
*
|
|
103
|
+
* MIN_TRUST_SCORE = 0.5 — a peer needs AT LEAST 2 of the 3 axes
|
|
104
|
+
* in good standing to pass.
|
|
105
|
+
*/
|
|
106
|
+
computeScore(envelope: FederationEnvelope, peer: PeerState, now: number = Date.now()): number {
|
|
107
|
+
if (!peer.allowlisted) return 0;
|
|
108
|
+
const baseScore = 0.3;
|
|
109
|
+
const ageMs = envelopeAgeMs(envelope, now);
|
|
110
|
+
const freshness = Math.max(0, Math.min(1, 1 - ageMs / MAX_TRUST_AGE_MS)) * 0.3;
|
|
111
|
+
const reliability = Math.max(0, Math.min(1, 1 - peer.recentFailRate)) * 0.4;
|
|
112
|
+
return Math.max(0, Math.min(1, baseScore + freshness + reliability));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Admit or reject an envelope based on the per-peer trust state. */
|
|
116
|
+
evaluate(envelope: FederationEnvelope, peer: PeerState, now: number = Date.now()): TrustDecision {
|
|
117
|
+
if (!peer.allowlisted) {
|
|
118
|
+
return {
|
|
119
|
+
allowed: false,
|
|
120
|
+
score: 0,
|
|
121
|
+
reason: `peer_not_allowlisted: ${peer.nodeId}`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const ageMs = envelopeAgeMs(envelope, now);
|
|
125
|
+
if (ageMs > MAX_TRUST_AGE_MS) {
|
|
126
|
+
return {
|
|
127
|
+
allowed: false,
|
|
128
|
+
score: 0,
|
|
129
|
+
reason: `envelope_too_old: ${ageMs}ms`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const score = this.computeScore(envelope, peer, now);
|
|
133
|
+
if (score < MIN_TRUST_SCORE) {
|
|
134
|
+
return {
|
|
135
|
+
allowed: false,
|
|
136
|
+
score,
|
|
137
|
+
reason: `score_below_floor: ${score.toFixed(3)} < ${MIN_TRUST_SCORE}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
allowed: true,
|
|
142
|
+
score,
|
|
143
|
+
reason: `score=${score.toFixed(3)} (peer_allowlisted=true, age=${ageMs}ms, fail_rate=${peer.recentFailRate.toFixed(3)})`,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
Binary file
|
|
@@ -1,82 +1,114 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Public API for @polderlabs/bizar-sdk.
|
|
3
|
+
*
|
|
4
|
+
* v0.4.0 — Claude Code-native rewrite. The legacy Cline wrappers
|
|
5
|
+
* (`createClineSdk`, `subscribeClineEvents`, `Cline*` types) have been
|
|
6
|
+
* removed because Bizar no longer integrates with the Cline runtime.
|
|
7
|
+
* The Claude Code integration is via the MCP server exported from
|
|
8
|
+
* `./mcp/server.ts` (`createBizarMcpServer`) and the in-process memory
|
|
9
|
+
* vault exported from `./memory/index.ts`.
|
|
3
10
|
*/
|
|
4
11
|
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
// In-process memory vault (Obsidian-compatible markdown notes).
|
|
13
|
+
export {
|
|
14
|
+
readNote,
|
|
15
|
+
writeNote,
|
|
16
|
+
listNotes,
|
|
17
|
+
searchNotes,
|
|
18
|
+
parseFrontmatter,
|
|
19
|
+
serializeFrontmatter,
|
|
20
|
+
resolveVaultRoot,
|
|
21
|
+
DEFAULT_MEMORY_VAULT,
|
|
22
|
+
LEGACY_MEMORY_VAULT,
|
|
23
|
+
} from "./memory/index.js";
|
|
24
|
+
export type { MemoryNote } from "./memory/index.js";
|
|
17
25
|
|
|
26
|
+
// Dangerous-pattern scanner.
|
|
18
27
|
export {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
} from "./
|
|
24
|
-
export type {
|
|
25
|
-
BizarError,
|
|
26
|
-
PluginError,
|
|
27
|
-
DashboardError,
|
|
28
|
-
ConnectionError,
|
|
29
|
-
APIError,
|
|
30
|
-
ClineConnectionError,
|
|
31
|
-
} from "./errors.js";
|
|
28
|
+
checkDangerous,
|
|
29
|
+
listDangerousPatterns,
|
|
30
|
+
getDangerousPatternStats,
|
|
31
|
+
} from "./dangerous-patterns.js";
|
|
32
|
+
export type { ApprovalDecision, ApprovalCheck } from "./dangerous-patterns.js";
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Session,
|
|
36
|
-
SessionStatus,
|
|
37
|
-
SessionCreate,
|
|
38
|
-
SessionListQuery,
|
|
39
|
-
// Project
|
|
40
|
-
Project,
|
|
41
|
-
// Plan
|
|
42
|
-
Plan,
|
|
43
|
-
PlanStatus,
|
|
44
|
-
// Part
|
|
45
|
-
Part,
|
|
46
|
-
TextPart,
|
|
47
|
-
ToolCallPart,
|
|
48
|
-
ToolResultPart,
|
|
49
|
-
ReasoningPart,
|
|
50
|
-
// Event
|
|
51
|
-
DashboardEvent,
|
|
52
|
-
DashboardConnectedEvent,
|
|
53
|
-
SessionCreatedEvent,
|
|
54
|
-
SessionUpdatedEvent,
|
|
55
|
-
SessionIdleEvent,
|
|
56
|
-
SessionErrorEvent,
|
|
57
|
-
MessagePartUpdatedEvent,
|
|
58
|
-
ToolExecutedEvent,
|
|
59
|
-
PlanUpdatedEvent,
|
|
60
|
-
// Health
|
|
61
|
-
Health,
|
|
62
|
-
} from "./types.js";
|
|
34
|
+
// Tool-call fingerprint (stable hash for loop-guard).
|
|
35
|
+
export { fingerprint } from "./fingerprint.js";
|
|
63
36
|
|
|
64
|
-
|
|
37
|
+
// Claude Code MCP server.
|
|
38
|
+
export {
|
|
39
|
+
createBizarMcpServer,
|
|
40
|
+
createBizarMcpServerConfig,
|
|
41
|
+
BIZAR_TOOLS,
|
|
42
|
+
getBizarMcpToolSummary,
|
|
43
|
+
defineTool,
|
|
44
|
+
} from "./mcp/server.js";
|
|
45
|
+
export type { SdkMcpToolDef, SdkMcpServerConfig } from "./mcp/server.js";
|
|
65
46
|
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
47
|
+
// F-032 — Swarm coordination primitives.
|
|
48
|
+
export {
|
|
49
|
+
BizarAgentRegistry,
|
|
50
|
+
bizarAgentRegistry,
|
|
51
|
+
} from "./agent-registry.js";
|
|
52
|
+
export type {
|
|
53
|
+
AgentRecord,
|
|
54
|
+
AgentStatus,
|
|
55
|
+
RegisterAgentInput,
|
|
56
|
+
RegisterAgentResult,
|
|
57
|
+
ListAgentsInput,
|
|
58
|
+
ListAgentsResult,
|
|
59
|
+
TerminateAgentInput,
|
|
60
|
+
TerminateAgentResult,
|
|
61
|
+
} from "./agent-registry.js";
|
|
70
62
|
|
|
71
|
-
export {
|
|
63
|
+
export {
|
|
64
|
+
SwarmTopologyRegistry,
|
|
65
|
+
swarmTopologyRegistry,
|
|
66
|
+
initSwarm,
|
|
67
|
+
getSwarm,
|
|
68
|
+
listSwarms,
|
|
69
|
+
recordAgentInSwarm,
|
|
70
|
+
decommissionSwarm,
|
|
71
|
+
SWARM_TOPOLOGIES,
|
|
72
|
+
DEFAULT_TOPOLOGY,
|
|
73
|
+
DEFAULT_MAX_AGENTS,
|
|
74
|
+
DEFAULT_SWARM_ID,
|
|
75
|
+
} from "./swarm-topology.js";
|
|
72
76
|
export type {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
SwarmRecord,
|
|
78
|
+
SwarmTopology,
|
|
79
|
+
InitSwarmInput,
|
|
80
|
+
InitSwarmResult,
|
|
81
|
+
} from "./swarm-topology.js";
|
|
76
82
|
|
|
83
|
+
// F-039 — Byzantine fault-tolerant consensus (thin PBFT port).
|
|
84
|
+
export {
|
|
85
|
+
ByzantineConsensus,
|
|
86
|
+
type ByzantineConsensusOpts,
|
|
87
|
+
QueenCoordinator,
|
|
88
|
+
type QueenCoordinatorOpts,
|
|
89
|
+
createConsensus,
|
|
90
|
+
getSharedConsensus,
|
|
91
|
+
resetSharedConsensus,
|
|
92
|
+
type ConsensusHandle,
|
|
93
|
+
type CreateConsensusOpts,
|
|
94
|
+
PHASE_ORDER,
|
|
95
|
+
DEFAULT_QUORUM,
|
|
96
|
+
DEFAULT_PEER_COUNT,
|
|
97
|
+
DEFAULT_MAX_FAULTS,
|
|
98
|
+
} from "./consensus/index.js";
|
|
77
99
|
export type {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
100
|
+
CommitResult,
|
|
101
|
+
ConsensusOpts,
|
|
102
|
+
ConsensusStatus,
|
|
103
|
+
Decision,
|
|
104
|
+
Phase,
|
|
105
|
+
ProposeResult,
|
|
106
|
+
Proposal,
|
|
107
|
+
ProposalSnapshot,
|
|
108
|
+
ProposalStatus,
|
|
109
|
+
Vote,
|
|
110
|
+
VoteResult,
|
|
111
|
+
ViewChangeResult,
|
|
112
|
+
} from "./consensus/types.js";
|
|
113
|
+
|
|
114
|
+
export { SDK_VERSION } from "./version.js";
|