@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/cli/bin.mjs
CHANGED
|
@@ -78,7 +78,7 @@ if (
|
|
|
78
78
|
// ── Banner ─────────────────────────────────────────────────────────────────────
|
|
79
79
|
|
|
80
80
|
function showBanner() {
|
|
81
|
-
console.log(chalk.bold.cyan(' ᛭ Bizar — Norse Pantheon Agent System for
|
|
81
|
+
console.log(chalk.bold.cyan(' ᛭ Bizar — Norse Pantheon Agent System for Claude Code'));
|
|
82
82
|
console.log();
|
|
83
83
|
}
|
|
84
84
|
|
|
@@ -97,7 +97,7 @@ function showHelp() {
|
|
|
97
97
|
export [target] Export agents/rules to another harness
|
|
98
98
|
artifact <subcommand> Manage visual artifacts
|
|
99
99
|
test-gate Detect & run the project's test suite
|
|
100
|
-
update Auto-update everything (
|
|
100
|
+
update Auto-update everything (claude + bizar + dash + sdk)
|
|
101
101
|
service Manage the background service daemon
|
|
102
102
|
dash <subcommand> Manage the dashboard (start/stop/status/cleanup/tui)
|
|
103
103
|
memory <subcommand> Manage project memory (Bizar Memory Service)
|
|
@@ -109,7 +109,7 @@ function showHelp() {
|
|
|
109
109
|
usage Show compact usage analytics summary (24h rolling)
|
|
110
110
|
doctor Check the BizarHarness install for health issues
|
|
111
111
|
repair Fix common install issues
|
|
112
|
-
dev-link Symlink local
|
|
112
|
+
dev-link Symlink local SDK source into Claude Code's plugin dir
|
|
113
113
|
dev-unlink Remove the dev symlink and restore the deployed copy
|
|
114
114
|
heads-up <subcommand> Manage pre-push / pre-release heads-ups
|
|
115
115
|
bg <subcommand> Manage background agents (list/view/kill/logs)
|
|
@@ -118,7 +118,7 @@ function showHelp() {
|
|
|
118
118
|
marketplace <subcommand> Browse and install plugins from the public marketplace
|
|
119
119
|
agent-browser Install / update / verify the agent-browser CLI
|
|
120
120
|
agent-browser-up Start Chromium for agent-browser (start/stop/status)
|
|
121
|
-
providers detect Auto-detect provider API keys from env +
|
|
121
|
+
providers detect Auto-detect provider API keys from env + ~/.claude/settings.json
|
|
122
122
|
clip <subcommand> Manage web clipper saved clips (list/delete/configure)
|
|
123
123
|
ocr <subcommand> OCR operations on images (list/process/configure)
|
|
124
124
|
digest Manage weekly digests (list/view/generate)
|
|
@@ -129,14 +129,16 @@ function showHelp() {
|
|
|
129
129
|
eval Evaluate AI agent outputs against golden fixtures
|
|
130
130
|
plan [v6.0.0+] Reserved for future plan management
|
|
131
131
|
validate Validate the Bizar install (21 checks)
|
|
132
|
-
setup-provider Configure a provider in
|
|
133
|
-
config Show current
|
|
134
|
-
history List session history (pass-through to
|
|
135
|
-
hub Manage the local hub daemon (pass-through to
|
|
136
|
-
hook Handle a hook payload from stdin (pass-through to
|
|
137
|
-
team Spawn an agent team from CLI (wraps
|
|
132
|
+
setup-provider Configure a provider in ~/.claude/settings.json (since v6.2.2 installer doesn't touch providers)
|
|
133
|
+
config Show current Claude Code configuration (pass-through to claude config)
|
|
134
|
+
history List session history (pass-through to claude history)
|
|
135
|
+
hub Manage the local hub daemon (pass-through to claude hub)
|
|
136
|
+
hook Handle a hook payload from stdin (pass-through to claude hook)
|
|
137
|
+
team Spawn an agent team from CLI (wraps claude --team-name)
|
|
138
138
|
subagent Spawn a read-only research subagent from CLI
|
|
139
|
-
rca Analyze a GitHub issue (
|
|
139
|
+
rca Analyze a GitHub issue (Claude Code CLI sample)
|
|
140
|
+
cost <subcommand> Atomic cost gate (SQLite-backed room budget tracker)
|
|
141
|
+
claim <subcommand> GitHub-style claim protocol over feature_list.json
|
|
140
142
|
|
|
141
143
|
Examples:
|
|
142
144
|
bizar install
|
|
@@ -151,8 +153,7 @@ function showHelp() {
|
|
|
151
153
|
|
|
152
154
|
Install:
|
|
153
155
|
npm install -g @polderlabs/bizar
|
|
154
|
-
npm install -g @
|
|
155
|
-
npm install -g @polderlabs/bizar-plugin
|
|
156
|
+
npm install -g @anthropic-ai/claude-code
|
|
156
157
|
`);
|
|
157
158
|
}
|
|
158
159
|
|
|
@@ -548,15 +549,15 @@ async function main() {
|
|
|
548
549
|
case 'hook':
|
|
549
550
|
case 'team':
|
|
550
551
|
case 'subagent': {
|
|
551
|
-
// v6.
|
|
552
|
-
// These live in cli/commands/
|
|
553
|
-
const mod = await importCommand('
|
|
552
|
+
// v6.3.0 — Pass-through wrappers for Claude Code CLI commands.
|
|
553
|
+
// These live in cli/commands/claude-cmd.mjs.
|
|
554
|
+
const mod = await importCommand('claude-cmd');
|
|
554
555
|
if (!mod) {
|
|
555
|
-
console.error(chalk.red(` ✗ Could not load
|
|
556
|
+
console.error(chalk.red(` ✗ Could not load claude-cmd module`));
|
|
556
557
|
process.exit(EXIT_ERROR);
|
|
557
558
|
return;
|
|
558
559
|
}
|
|
559
|
-
dbg('loaded command module:', '
|
|
560
|
+
dbg('loaded command module:', 'claude-cmd');
|
|
560
561
|
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
561
562
|
if (!found) {
|
|
562
563
|
console.error(chalk.red(` ✗ Unknown command: ${cmd}`));
|
|
@@ -598,6 +599,42 @@ async function main() {
|
|
|
598
599
|
break;
|
|
599
600
|
}
|
|
600
601
|
|
|
602
|
+
case 'cost': {
|
|
603
|
+
// F-035 MetaHarness — atomic SQLite-backed cost gate.
|
|
604
|
+
// Subcommands: register | status | reserve | commit | release | sweep | list
|
|
605
|
+
const mod = await importCommand('cost');
|
|
606
|
+
if (!mod) {
|
|
607
|
+
console.error(chalk.red(` ✗ Could not load cost command module`));
|
|
608
|
+
process.exit(EXIT_ERROR);
|
|
609
|
+
return;
|
|
610
|
+
}
|
|
611
|
+
dbg('loaded command module:', 'cost');
|
|
612
|
+
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
613
|
+
if (found === false) {
|
|
614
|
+
console.error(chalk.red(` ✗ Usage: bizar cost <subcommand> — run 'bizar cost --help'`));
|
|
615
|
+
process.exit(EXIT_USAGE);
|
|
616
|
+
}
|
|
617
|
+
break;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
case 'claim': {
|
|
621
|
+
// F-035 MetaHarness — GitHub-style claim protocol over feature_list.json.
|
|
622
|
+
// Subcommands: <featureId> | release | handoff | steal | status | list | transition
|
|
623
|
+
const mod = await importCommand('claim');
|
|
624
|
+
if (!mod) {
|
|
625
|
+
console.error(chalk.red(` ✗ Could not load claim command module`));
|
|
626
|
+
process.exit(EXIT_ERROR);
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
dbg('loaded command module:', 'claim');
|
|
630
|
+
const found = await mod.run(cmd, cmdArgs, isHelpRequest);
|
|
631
|
+
if (found === false) {
|
|
632
|
+
console.error(chalk.red(` ✗ Usage: bizar claim <subcommand> — run 'bizar claim --help'`));
|
|
633
|
+
process.exit(EXIT_USAGE);
|
|
634
|
+
}
|
|
635
|
+
break;
|
|
636
|
+
}
|
|
637
|
+
|
|
601
638
|
default: {
|
|
602
639
|
console.error(chalk.red(` ✗ Unknown command: ${cmd}`));
|
|
603
640
|
showHelp();
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cli/commands/claim.mjs
|
|
3
|
+
*
|
|
4
|
+
* F-035 (MetaHarness) — `bizar claim` subcommand surface.
|
|
5
|
+
*
|
|
6
|
+
* Wraps cli/feature-list-bridge.mjs (over feature_list.json).
|
|
7
|
+
*
|
|
8
|
+
* Subcommands:
|
|
9
|
+
* bizar claim <featureId> # claim with --who (or $USER)
|
|
10
|
+
* --who <id> (default: $USER)
|
|
11
|
+
* --type <human|agent> (default: human)
|
|
12
|
+
* --reason <text> Free-form claim reason
|
|
13
|
+
* bizar claim release <featureId> # release
|
|
14
|
+
* --who <id> Optional claimant check
|
|
15
|
+
* --reason <text>
|
|
16
|
+
* bizar claim handoff <featureId> --to <id> # handoff
|
|
17
|
+
* --from <id>
|
|
18
|
+
* --reason <text>
|
|
19
|
+
* bizar claim steal <featureId> --by <id> # steal
|
|
20
|
+
* --type <human|agent>
|
|
21
|
+
* --reason <steal-reason> Must be one of STEAL_REASONS
|
|
22
|
+
* bizar claim status <featureId> # Show current claim + history
|
|
23
|
+
* bizar claim list # list all features with status
|
|
24
|
+
* --status <s> One of CLAIM_STATUSES (repeatable)
|
|
25
|
+
* --by-claimant <id> Filter by claimant id
|
|
26
|
+
* --human-only / --agent-only
|
|
27
|
+
* bizar claim transition <featureId> <newStatus> # active|paused|blocked|completed
|
|
28
|
+
* --who <id>
|
|
29
|
+
* --reason <text>
|
|
30
|
+
*
|
|
31
|
+
* --json flag for machine output.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import chalk from 'chalk';
|
|
35
|
+
|
|
36
|
+
import { FeatureListBridge, ClaimError, CLAIM_STATUSES, STEAL_REASONS, defaultFeatureListPath } from '../feature-list-bridge.mjs';
|
|
37
|
+
|
|
38
|
+
function parseFlags(args) {
|
|
39
|
+
const flags = { _: [], statuses: [] };
|
|
40
|
+
for (let i = 0; i < args.length; i++) {
|
|
41
|
+
const a = args[i];
|
|
42
|
+
if (a === '--json') flags.json = true;
|
|
43
|
+
else if (a === '--who' && i + 1 < args.length) { flags.who = args[++i]; }
|
|
44
|
+
else if (a.startsWith('--who=')) flags.who = a.slice('--who='.length);
|
|
45
|
+
else if (a === '--type' && i + 1 < args.length) { flags.type = args[++i]; }
|
|
46
|
+
else if (a.startsWith('--type=')) flags.type = a.slice('--type='.length);
|
|
47
|
+
else if (a === '--reason' && i + 1 < args.length) { flags.reason = args[++i]; }
|
|
48
|
+
else if (a.startsWith('--reason=')) flags.reason = a.slice('--reason='.length);
|
|
49
|
+
else if (a === '--to' && i + 1 < args.length) { flags.to = args[++i]; }
|
|
50
|
+
else if (a.startsWith('--to=')) flags.to = a.slice('--to='.length);
|
|
51
|
+
else if (a === '--from' && i + 1 < args.length) { flags.from = args[++i]; }
|
|
52
|
+
else if (a.startsWith('--from=')) flags.from = a.slice('--from='.length);
|
|
53
|
+
else if (a === '--by' && i + 1 < args.length) { flags.by = args[++i]; }
|
|
54
|
+
else if (a.startsWith('--by=')) flags.by = a.slice('--by='.length);
|
|
55
|
+
else if (a === '--status' && i + 1 < args.length) { flags.statuses.push(args[++i]); }
|
|
56
|
+
else if (a.startsWith('--status=')) flags.statuses.push(a.slice('--status='.length));
|
|
57
|
+
else if (a === '--by-claimant' && i + 1 < args.length) { flags.byClaimant = args[++i]; }
|
|
58
|
+
else if (a.startsWith('--by-claimant=')) flags.byClaimant = a.slice('--by-claimant='.length);
|
|
59
|
+
else if (a === '--human-only') flags.humanOnly = true;
|
|
60
|
+
else if (a === '--agent-only') flags.agentOnly = true;
|
|
61
|
+
else if (a === '--file' && i + 1 < args.length) { flags.file = args[++i]; }
|
|
62
|
+
else if (a.startsWith('--file=')) flags.file = a.slice('--file='.length);
|
|
63
|
+
else if (a === '--help' || a === '-h') flags.help = true;
|
|
64
|
+
else flags._.push(a);
|
|
65
|
+
}
|
|
66
|
+
return flags;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function makeClaimant(flags, fallbackId) {
|
|
70
|
+
const id = flags.who || flags.by || fallbackId;
|
|
71
|
+
const type = flags.type || 'human';
|
|
72
|
+
if (!id) return null;
|
|
73
|
+
return { type, id, name: id };
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function bridge(flags) {
|
|
77
|
+
return new FeatureListBridge({
|
|
78
|
+
filePath: flags.file || defaultFeatureListPath(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function showHelp() {
|
|
83
|
+
console.log(`
|
|
84
|
+
bizar claim — GitHub-ish claim protocol over feature_list.json
|
|
85
|
+
|
|
86
|
+
Usage:
|
|
87
|
+
bizar claim <featureId> [--who <id>] [--type human|agent] [--reason <text>]
|
|
88
|
+
bizar claim release <featureId> [--who <id>] [--reason <text>]
|
|
89
|
+
bizar claim handoff <featureId> --to <id> [--from <id>] [--reason <text>]
|
|
90
|
+
bizar claim steal <featureId> --by <id> [--type human|agent] --reason <reason>
|
|
91
|
+
bizar claim status <featureId>
|
|
92
|
+
bizar claim list [--status <s>] [--by-claimant <id>] [--human-only|--agent-only]
|
|
93
|
+
bizar claim transition <featureId> <active|paused|blocked|completed> [--who <id>]
|
|
94
|
+
|
|
95
|
+
Steal reasons (must match exactly):
|
|
96
|
+
${STEAL_REASONS.join(' | ')}
|
|
97
|
+
|
|
98
|
+
Status states (must match exactly):
|
|
99
|
+
${CLAIM_STATUSES.join(' | ')}
|
|
100
|
+
|
|
101
|
+
Flags:
|
|
102
|
+
--json Machine-readable JSON output
|
|
103
|
+
--file <path> Override feature_list.json path
|
|
104
|
+
--who <id> / --by <id> Claimant identifier (default: $USER)
|
|
105
|
+
--type human|agent Claimant type (default: human)
|
|
106
|
+
--reason <text> Free-form reason (mandatory for steal)
|
|
107
|
+
--to / --from <id> Recipient / sender for handoff
|
|
108
|
+
--human-only / --agent-only Restrict list to human or agent claims
|
|
109
|
+
--status <s> Filter list (repeat for multiple)
|
|
110
|
+
--by-claimant <id> Filter list by claimant id
|
|
111
|
+
--help, -h Show this help
|
|
112
|
+
|
|
113
|
+
Examples:
|
|
114
|
+
bizar claim F-035 --who odin --reason "porting MetaHarness from ruflo"
|
|
115
|
+
bizar claim steal F-014 --by hermod --reason stale
|
|
116
|
+
bizar claim handoff F-035 --to tyr --from odin
|
|
117
|
+
bizar claim list --status claimed --agent-only
|
|
118
|
+
`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function out(result, flags, formatter) {
|
|
122
|
+
if (flags.json) {
|
|
123
|
+
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
|
|
124
|
+
} else if (formatter) {
|
|
125
|
+
formatter(result);
|
|
126
|
+
} else {
|
|
127
|
+
console.log(JSON.stringify(result, null, 2));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export async function run(name, args, isHelpRequest) {
|
|
132
|
+
if (name !== 'claim') return false;
|
|
133
|
+
const flags = parseFlags(args);
|
|
134
|
+
if (flags.help || isHelpRequest) {
|
|
135
|
+
showHelp();
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const [sub, ...rest] = flags._;
|
|
140
|
+
const fallback = process.env.USER || 'unknown';
|
|
141
|
+
const who = flags.who || fallback;
|
|
142
|
+
|
|
143
|
+
try {
|
|
144
|
+
const br = bridge(flags);
|
|
145
|
+
|
|
146
|
+
if (!sub || sub === 'help') {
|
|
147
|
+
showHelp();
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (sub === 'list' || sub === 'ls') {
|
|
152
|
+
const filters = {};
|
|
153
|
+
if (flags.statuses.length) filters.status = flags.statuses;
|
|
154
|
+
if (flags.byClaimant) filters.claimantId = flags.byClaimant;
|
|
155
|
+
if (flags.humanOnly) filters.claimedByHuman = true;
|
|
156
|
+
if (flags.agentOnly) filters.claimedByAgent = true;
|
|
157
|
+
const rows = br.list(filters);
|
|
158
|
+
out({ count: rows.length, features: rows }, flags, (r) => {
|
|
159
|
+
console.log(chalk.bold(` Claims (${r.count}):`));
|
|
160
|
+
for (const f of r.features) {
|
|
161
|
+
const who = f.claimant ? `${f.claimant.name || f.claimant.id} (${f.claimant.type})` : '—';
|
|
162
|
+
console.log(` ${chalk.cyan(f.id)} [${f.claimStatus || 'unclaimed'}] by ${who}`);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (sub === 'status' || sub === 'show' || sub === 'get') {
|
|
169
|
+
const featureId = rest[0];
|
|
170
|
+
if (!featureId) {
|
|
171
|
+
console.error(chalk.red(' ✗ Usage: bizar claim status <featureId>'));
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
const feature = br.get(featureId);
|
|
175
|
+
out(feature, flags, (f) => {
|
|
176
|
+
console.log(chalk.bold(` ${chalk.cyan(f.id)} — ${f.behavior || ''}`));
|
|
177
|
+
const who = f.claimant ? `${f.claimant.name || f.claimant.id} (${f.claimant.type})` : 'unclaimed';
|
|
178
|
+
console.log(` state = ${f.state}`);
|
|
179
|
+
console.log(` claim = ${f.claimStatus || 'unclaimed'} (by ${who})`);
|
|
180
|
+
console.log(` claimedAt = ${f.claimedAt || '—'}`);
|
|
181
|
+
console.log(` claimReason = ${f.claimReason || '—'}`);
|
|
182
|
+
const hist = Array.isArray(f.claimHistory) ? f.claimHistory : [];
|
|
183
|
+
console.log(` history = ${hist.length} event(s)`);
|
|
184
|
+
for (const e of hist.slice(-8)) {
|
|
185
|
+
console.log(` ${e.ts} ${chalk.dim(e.event)}${e.reason ? ' — ' + e.reason : ''}`);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (sub === 'release') {
|
|
192
|
+
const featureId = rest[0];
|
|
193
|
+
if (!featureId) {
|
|
194
|
+
console.error(chalk.red(' ✗ Usage: bizar claim release <featureId> [--who <id>] [--reason <text>]'));
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
const claimant = makeClaimant({ who, type: flags.type }, fallback);
|
|
198
|
+
const result = br.release(featureId, claimant, flags.reason || '');
|
|
199
|
+
out(result, flags, (r) =>
|
|
200
|
+
console.log(chalk.green(` ✓ Released ${featureId}`) + (r.previousClaimant ? chalk.dim(` (was held by ${r.previousClaimant.name || r.previousClaimant.id})`) : '')),
|
|
201
|
+
);
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (sub === 'handoff') {
|
|
206
|
+
const featureId = rest[0];
|
|
207
|
+
if (!featureId || !flags.to) {
|
|
208
|
+
console.error(chalk.red(' ✗ Usage: bizar claim handoff <featureId> --to <id> [--from <id>] [--reason <text>]'));
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
const fromClaimant = flags.from ? { type: flags.type || 'human', id: flags.from, name: flags.from } : null;
|
|
212
|
+
const toClaimant = { type: flags.type || 'human', id: flags.to, name: flags.to };
|
|
213
|
+
const result = br.handoff(featureId, fromClaimant, toClaimant, flags.reason || '');
|
|
214
|
+
out(result, flags, (r) =>
|
|
215
|
+
console.log(chalk.green(` ✓ Handed off ${featureId} → ${flags.to}`)),
|
|
216
|
+
);
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (sub === 'steal') {
|
|
221
|
+
const featureId = rest[0];
|
|
222
|
+
if (!featureId || !flags.by) {
|
|
223
|
+
console.error(chalk.red(' ✗ Usage: bizar claim steal <featureId> --by <id> --reason <reason>'));
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
if (!flags.reason) {
|
|
227
|
+
console.error(chalk.red(' ✗ steal requires --reason (one of: ' + STEAL_REASONS.join(', ') + ')'));
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
const newClaimant = { type: flags.type || 'human', id: flags.by, name: flags.by };
|
|
231
|
+
const result = br.steal(featureId, newClaimant, flags.reason);
|
|
232
|
+
out(result, flags, (r) =>
|
|
233
|
+
console.log(chalk.green(` ✓ Stole ${featureId} (reason: ${r.stealReason}); previous owner: ${r.previousClaimant?.name || r.previousClaimant?.id || '—'}`)),
|
|
234
|
+
);
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (sub === 'transition') {
|
|
239
|
+
const [featureId, newStatus] = rest;
|
|
240
|
+
if (!featureId || !newStatus) {
|
|
241
|
+
console.error(chalk.red(' ✗ Usage: bizar claim transition <featureId> <active|paused|blocked|completed> [--who <id>]'));
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
if (!CLAIM_STATUSES.includes(newStatus)) {
|
|
245
|
+
console.error(chalk.red(` ✗ Unknown status '${newStatus}'. Must be one of: ${CLAIM_STATUSES.join(', ')}`));
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
const claimant = makeClaimant({ who: flags.who, type: flags.type }, fallback);
|
|
249
|
+
const result = br.transition(featureId, newStatus, claimant, flags.reason || '');
|
|
250
|
+
out(result, flags, (r) =>
|
|
251
|
+
console.log(chalk.green(` ✓ ${featureId} → ${newStatus}` + (r.unchanged ? ' (unchanged)' : ''))),
|
|
252
|
+
);
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
// Default: `bizar claim <featureId>` — claim it.
|
|
257
|
+
if (!sub.startsWith('-') && sub) {
|
|
258
|
+
const featureId = sub;
|
|
259
|
+
const claimant = makeClaimant({ who: flags.who, type: flags.type }, fallback);
|
|
260
|
+
if (!claimant) {
|
|
261
|
+
console.error(chalk.red(' ✗ No claimant id (set $USER or pass --who <id>)'));
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
const result = br.claim(featureId, claimant, flags.reason || '');
|
|
265
|
+
out(result, flags, (r) =>
|
|
266
|
+
console.log(chalk.green(` ✓ Claimed ${featureId} by ${r.feature.claimant.name || r.feature.claimant.id} (${r.feature.claimStatus})`)),
|
|
267
|
+
);
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
console.error(chalk.red(` ✗ Unknown subcommand: ${sub}`));
|
|
272
|
+
showHelp();
|
|
273
|
+
return false;
|
|
274
|
+
} catch (err) {
|
|
275
|
+
if (err instanceof ClaimError) {
|
|
276
|
+
console.error(chalk.red(` ✗ ${err.code}: ${err.message}`));
|
|
277
|
+
} else {
|
|
278
|
+
console.error(chalk.red(` ✗ ${err && err.message ? err.message : String(err)}`));
|
|
279
|
+
}
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
}
|