@monoes/monomindcli 1.10.56 → 1.11.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/agents/core/coordinator.md +71 -0
- package/.claude/agents/generated/case-analyst.md +50 -0
- package/.claude/agents/generated/copy-editor.md +45 -0
- package/.claude/agents/generated/court-reporter.md +50 -0
- package/.claude/agents/generated/defender.md +51 -0
- package/.claude/agents/generated/editor-in-chief.md +45 -0
- package/.claude/agents/generated/fact-checker.md +45 -0
- package/.claude/agents/generated/judge.md +51 -0
- package/.claude/agents/generated/prosecutor.md +51 -0
- package/.claude/agents/generated/reporter.md +45 -0
- package/.claude/commands/hooks/README.md +1 -1
- package/.claude/commands/hooks/overview.md +1 -1
- package/.claude/commands/mastermind/_repeat.md +1 -1
- package/.claude/commands/mastermind/do.md +3 -1
- package/.claude/commands/mastermind/help.md +2 -2
- package/.claude/commands/mastermind/master.md +39 -6
- package/.claude/commands/mastermind/memory.md +1 -1
- package/.claude/commands/memory/memory-search.md +2 -2
- package/.claude/commands/monitoring/status.md +1 -1
- package/.claude/commands/{browse.md → monobrowse.md} +2 -2
- package/.claude/commands/sparc.md +1 -1
- package/.claude/helpers/handlers/graph-status-handler.cjs +1 -1
- package/.claude/helpers/loop-tracker.cjs +1 -1
- package/.claude/skills/agent-browser-testing/SKILL.md +1 -1
- package/.claude/skills/hooks-automation/SKILL.md +0 -3
- package/.claude/skills/mastermind/build.md +1 -1
- package/.claude/skills/mastermind/code-quality-reviewer-prompt.md +60 -0
- package/.claude/skills/mastermind/content.md +1 -1
- package/.claude/skills/mastermind/createorg.md +79 -2
- package/.claude/skills/mastermind/design.md +3 -1
- package/.claude/skills/mastermind/finance.md +1 -1
- package/.claude/skills/mastermind/implementer-prompt.md +109 -0
- package/.claude/skills/mastermind/marketing.md +1 -1
- package/.claude/skills/mastermind/ops.md +1 -1
- package/.claude/skills/mastermind/plan.md +20 -2
- package/.claude/skills/mastermind/release.md +1 -1
- package/.claude/skills/mastermind/research.md +1 -1
- package/.claude/skills/mastermind/review.md +1 -1
- package/.claude/skills/mastermind/sales.md +1 -1
- package/.claude/skills/mastermind/spec-reviewer-prompt.md +63 -0
- package/.claude/skills/sparc-methodology/SKILL.md +3 -3
- package/.claude/skills/swarm-advanced/SKILL.md +1 -4
- package/README.md +18 -32
- package/dist/src/agents/registry-builder.d.ts +1 -7
- package/dist/src/agents/registry-builder.d.ts.map +1 -1
- package/dist/src/agents/registry-builder.js +10 -6
- package/dist/src/agents/registry-builder.js.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.d.ts +59 -12
- package/dist/src/benchmarks/benchmark-runner.d.ts.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.js +67 -13
- package/dist/src/benchmarks/benchmark-runner.js.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.d.ts.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.js.map +1 -1
- package/dist/src/benchmarks/pretrain/index.d.ts +0 -13
- package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -1
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent-wasm.d.ts +2 -2
- package/dist/src/commands/agent-wasm.js +5 -5
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +1 -6
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.d.ts +1 -1
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +8 -18
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +53 -3
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.d.ts.map +1 -1
- package/dist/src/commands/embeddings.js +9 -33
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +24 -76
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +4 -6
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +8 -15
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.js +2 -2
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.d.ts.map +1 -1
- package/dist/src/commands/issues.js +16 -11
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.d.ts +1 -1
- package/dist/src/commands/memory.js +6 -6
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +1 -2
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +18 -11
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/monovector/backup.d.ts +11 -0
- package/dist/src/commands/monovector/backup.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/backup.js +25 -25
- package/dist/src/commands/monovector/backup.js.map +1 -0
- package/dist/src/commands/monovector/benchmark.d.ts +11 -0
- package/dist/src/commands/monovector/benchmark.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/benchmark.js +14 -14
- package/dist/src/commands/monovector/benchmark.js.map +1 -0
- package/dist/src/commands/monovector/import.d.ts +18 -0
- package/dist/src/commands/monovector/import.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/import.js +21 -21
- package/dist/src/commands/monovector/import.js.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/index.d.ts +6 -6
- package/dist/src/commands/monovector/index.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/index.js +22 -22
- package/dist/src/commands/monovector/index.js.map +1 -0
- package/dist/src/commands/monovector/init.d.ts +11 -0
- package/dist/src/commands/monovector/init.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/init.js +36 -36
- package/dist/src/commands/monovector/init.js.map +1 -0
- package/dist/src/commands/monovector/migrate.d.ts +11 -0
- package/dist/src/commands/monovector/migrate.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/migrate.js +16 -16
- package/dist/src/commands/monovector/migrate.js.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/optimize.d.ts +2 -2
- package/dist/src/commands/monovector/optimize.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/optimize.js +10 -10
- package/dist/src/commands/monovector/optimize.js.map +1 -0
- package/dist/src/commands/monovector/setup.d.ts +18 -0
- package/dist/src/commands/monovector/setup.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/setup.js +77 -77
- package/dist/src/commands/monovector/setup.js.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/status.d.ts +2 -2
- package/dist/src/commands/monovector/status.d.ts.map +1 -0
- package/dist/src/commands/{ruvector → monovector}/status.js +34 -34
- package/dist/src/commands/monovector/status.js.map +1 -0
- package/dist/src/commands/neural.d.ts +1 -1
- package/dist/src/commands/neural.d.ts.map +1 -1
- package/dist/src/commands/neural.js +31 -608
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.d.ts.map +1 -1
- package/dist/src/commands/performance.js +7 -10
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.d.ts.map +1 -1
- package/dist/src/commands/plugins.js +3 -4
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.d.ts.map +1 -1
- package/dist/src/commands/process.js +5 -12
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.d.ts.map +1 -1
- package/dist/src/commands/progress.js +16 -16
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/replay.d.ts.map +1 -1
- package/dist/src/commands/replay.js.map +1 -1
- package/dist/src/commands/route.d.ts +2 -2
- package/dist/src/commands/route.js +23 -23
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +0 -3
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +2 -3
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/update.d.ts +1 -1
- package/dist/src/config-adapter.d.ts.map +1 -1
- package/dist/src/config-adapter.js +27 -0
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts +44 -17
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js.map +1 -1
- package/dist/src/dlq/dlq-replayer.d.ts +1 -1
- package/dist/src/dlq/dlq-replayer.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +5 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +10 -14
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +17 -27
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +1 -1
- package/dist/src/init/helpers-generator.js +2 -2
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/mcp-client.d.ts.map +1 -1
- package/dist/src/mcp-client.js +1 -7
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts.map +1 -1
- package/dist/src/mcp-server.js +9 -1
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +1 -52
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +5 -5
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts +4 -4
- package/dist/src/mcp-tools/autopilot-tools.d.ts +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +6 -5
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.d.ts +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +51 -54
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.d.ts +1 -1
- package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +10 -10
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.js +0 -24
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +189 -446
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/index.d.ts +0 -2
- package/dist/src/mcp-tools/index.d.ts.map +1 -1
- package/dist/src/mcp-tools/index.js +0 -2
- package/dist/src/mcp-tools/index.js.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.d.ts +334 -0
- package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -0
- package/dist/src/mcp-tools/monograph-compat.js +1108 -0
- package/dist/src/mcp-tools/monograph-compat.js.map +1 -0
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +76 -34
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts +2 -2
- package/dist/src/mcp-tools/neural-tools.js +2 -2
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.d.ts +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.d.ts +2 -2
- package/dist/src/mcp-tools/ruvllm-tools.js +3 -3
- package/dist/src/mcp-tools/terminal-tools.d.ts +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +29 -19
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.d.ts +1 -1
- package/dist/src/mcp-tools/wasm-agent-tools.js +2 -2
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +14 -8
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +17 -2
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +76 -23
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +2 -2
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +37 -39
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/monovector/capabilities.d.ts +34 -0
- package/dist/src/monovector/capabilities.d.ts.map +1 -0
- package/dist/src/monovector/capabilities.js +37 -0
- package/dist/src/monovector/capabilities.js.map +1 -0
- package/dist/src/monovector/command-outcomes.d.ts +37 -0
- package/dist/src/monovector/command-outcomes.d.ts.map +1 -0
- package/dist/src/monovector/command-outcomes.js +87 -0
- package/dist/src/monovector/command-outcomes.js.map +1 -0
- package/dist/src/monovector/coverage-router.d.ts +103 -0
- package/dist/src/monovector/coverage-router.d.ts.map +1 -0
- package/dist/src/monovector/coverage-router.js +337 -0
- package/dist/src/monovector/coverage-router.js.map +1 -0
- package/dist/src/monovector/coverage-tools.d.ts +14 -0
- package/dist/src/monovector/coverage-tools.d.ts.map +1 -0
- package/dist/src/monovector/coverage-tools.js +112 -0
- package/dist/src/monovector/coverage-tools.js.map +1 -0
- package/dist/src/{ruvector → monovector}/diff-classifier.d.ts +2 -2
- package/dist/src/monovector/diff-classifier.d.ts.map +1 -0
- package/dist/src/monovector/diff-classifier.js.map +1 -0
- package/dist/src/monovector/index.d.ts +61 -0
- package/dist/src/monovector/index.d.ts.map +1 -0
- package/dist/src/monovector/index.js +67 -0
- package/dist/src/monovector/index.js.map +1 -0
- package/dist/src/monovector/init-state.d.ts +35 -0
- package/dist/src/monovector/init-state.d.ts.map +1 -0
- package/dist/src/monovector/init-state.js +36 -0
- package/dist/src/monovector/init-state.js.map +1 -0
- package/dist/src/monovector/route-outcomes.d.ts +55 -0
- package/dist/src/monovector/route-outcomes.d.ts.map +1 -0
- package/dist/src/monovector/route-outcomes.js +137 -0
- package/dist/src/monovector/route-outcomes.js.map +1 -0
- package/dist/src/parser.js +3 -3
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +0 -31
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts +26 -6
- package/dist/src/production/circuit-breaker.d.ts.map +1 -1
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts +55 -30
- package/dist/src/production/error-handler.d.ts.map +1 -1
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/index.d.ts +3 -20
- package/dist/src/production/index.d.ts.map +1 -1
- package/dist/src/production/index.js +3 -15
- package/dist/src/production/index.js.map +1 -1
- package/dist/src/production/monitoring.d.ts +54 -34
- package/dist/src/production/monitoring.d.ts.map +1 -1
- package/dist/src/production/monitoring.js +12 -14
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts +64 -19
- package/dist/src/production/rate-limiter.d.ts.map +1 -1
- package/dist/src/production/rate-limiter.js +5 -5
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts.map +1 -1
- package/dist/src/production/retry.js +4 -2
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/runtime/headless.d.ts +3 -3
- package/dist/src/services/claim-service.d.ts +50 -59
- package/dist/src/services/claim-service.d.ts.map +1 -1
- package/dist/src/services/claim-service.js +83 -50
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/config-file-manager.d.ts.map +1 -1
- package/dist/src/services/config-file-manager.js +8 -1
- package/dist/src/services/config-file-manager.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts.map +1 -1
- package/dist/src/services/worker-daemon.js +4 -0
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts +1 -1
- package/dist/src/transfer/storage/gcs.d.ts +1 -1
- package/dist/src/types.d.ts +13 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/ui/collector.mjs +51 -11
- package/dist/src/ui/dashboard.html +313 -88
- package/dist/src/ui/server.mjs +163 -8
- package/dist/src/update/checker.d.ts +1 -1
- package/dist/src/update/index.d.ts +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/scripts/publish-registry.ts +0 -1
- package/.claude/commands/monomind/adr.md +0 -11
- package/.claude/commands/monomind/budget.md +0 -7
- package/.claude/commands/monomind/createtask.md +0 -277
- package/.claude/commands/monomind/do.md +0 -498
- package/.claude/commands/monomind/graph-status.md +0 -7
- package/.claude/commands/monomind/help.md +0 -118
- package/.claude/commands/monomind/idea.md +0 -273
- package/.claude/commands/monomind/improve.md +0 -352
- package/.claude/commands/monomind/loops.md +0 -7
- package/.claude/commands/monomind/memory.md +0 -230
- package/.claude/commands/monomind/repeat.md +0 -257
- package/.claude/commands/monomind/review.md +0 -317
- package/.claude/commands/monomind/specialagents.md +0 -125
- package/.claude/commands/monomind/swarm.md +0 -161
- package/.claude/commands/monomind/understand.md +0 -139
- package/.claude/commands/training/README.md +0 -39
- package/.claude/commands/training/neural-patterns.md +0 -73
- package/.claude/commands/training/neural-train.md +0 -79
- package/dist/src/commands/appliance-advanced.d.ts +0 -9
- package/dist/src/commands/appliance-advanced.d.ts.map +0 -1
- package/dist/src/commands/appliance-advanced.js +0 -238
- package/dist/src/commands/appliance-advanced.js.map +0 -1
- package/dist/src/commands/appliance.d.ts +0 -8
- package/dist/src/commands/appliance.d.ts.map +0 -1
- package/dist/src/commands/appliance.js +0 -406
- package/dist/src/commands/appliance.js.map +0 -1
- package/dist/src/commands/ruvector/backup.d.ts +0 -11
- package/dist/src/commands/ruvector/backup.d.ts.map +0 -1
- package/dist/src/commands/ruvector/backup.js.map +0 -1
- package/dist/src/commands/ruvector/benchmark.d.ts +0 -11
- package/dist/src/commands/ruvector/benchmark.d.ts.map +0 -1
- package/dist/src/commands/ruvector/benchmark.js.map +0 -1
- package/dist/src/commands/ruvector/import.d.ts +0 -18
- package/dist/src/commands/ruvector/import.d.ts.map +0 -1
- package/dist/src/commands/ruvector/import.js.map +0 -1
- package/dist/src/commands/ruvector/index.d.ts.map +0 -1
- package/dist/src/commands/ruvector/index.js.map +0 -1
- package/dist/src/commands/ruvector/init.d.ts +0 -11
- package/dist/src/commands/ruvector/init.d.ts.map +0 -1
- package/dist/src/commands/ruvector/init.js.map +0 -1
- package/dist/src/commands/ruvector/migrate.d.ts +0 -11
- package/dist/src/commands/ruvector/migrate.d.ts.map +0 -1
- package/dist/src/commands/ruvector/migrate.js.map +0 -1
- package/dist/src/commands/ruvector/optimize.d.ts.map +0 -1
- package/dist/src/commands/ruvector/optimize.js.map +0 -1
- package/dist/src/commands/ruvector/setup.d.ts +0 -18
- package/dist/src/commands/ruvector/setup.d.ts.map +0 -1
- package/dist/src/commands/ruvector/setup.js.map +0 -1
- package/dist/src/commands/ruvector/status.d.ts.map +0 -1
- package/dist/src/commands/ruvector/status.js.map +0 -1
- package/dist/src/ruvector/agent-wasm.d.ts +0 -182
- package/dist/src/ruvector/agent-wasm.d.ts.map +0 -1
- package/dist/src/ruvector/agent-wasm.js +0 -316
- package/dist/src/ruvector/agent-wasm.js.map +0 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +0 -67
- package/dist/src/ruvector/ast-analyzer.d.ts.map +0 -1
- package/dist/src/ruvector/ast-analyzer.js +0 -277
- package/dist/src/ruvector/ast-analyzer.js.map +0 -1
- package/dist/src/ruvector/coverage-router.d.ts +0 -160
- package/dist/src/ruvector/coverage-router.d.ts.map +0 -1
- package/dist/src/ruvector/coverage-router.js +0 -539
- package/dist/src/ruvector/coverage-router.js.map +0 -1
- package/dist/src/ruvector/coverage-tools.d.ts +0 -33
- package/dist/src/ruvector/coverage-tools.d.ts.map +0 -1
- package/dist/src/ruvector/coverage-tools.js +0 -157
- package/dist/src/ruvector/coverage-tools.js.map +0 -1
- package/dist/src/ruvector/diff-classifier.d.ts.map +0 -1
- package/dist/src/ruvector/diff-classifier.js.map +0 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +0 -146
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +0 -1
- package/dist/src/ruvector/enhanced-model-router.js +0 -551
- package/dist/src/ruvector/enhanced-model-router.js.map +0 -1
- package/dist/src/ruvector/flash-attention.d.ts +0 -195
- package/dist/src/ruvector/flash-attention.d.ts.map +0 -1
- package/dist/src/ruvector/flash-attention.js +0 -643
- package/dist/src/ruvector/flash-attention.js.map +0 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +0 -187
- package/dist/src/ruvector/graph-analyzer.d.ts.map +0 -1
- package/dist/src/ruvector/graph-analyzer.js +0 -929
- package/dist/src/ruvector/graph-analyzer.js.map +0 -1
- package/dist/src/ruvector/index.d.ts +0 -56
- package/dist/src/ruvector/index.d.ts.map +0 -1
- package/dist/src/ruvector/index.js +0 -58
- package/dist/src/ruvector/index.js.map +0 -1
- package/dist/src/ruvector/lora-adapter.d.ts +0 -218
- package/dist/src/ruvector/lora-adapter.d.ts.map +0 -1
- package/dist/src/ruvector/lora-adapter.js +0 -455
- package/dist/src/ruvector/lora-adapter.js.map +0 -1
- package/dist/src/ruvector/model-router.d.ts +0 -222
- package/dist/src/ruvector/model-router.d.ts.map +0 -1
- package/dist/src/ruvector/model-router.js +0 -512
- package/dist/src/ruvector/model-router.js.map +0 -1
- package/dist/src/ruvector/moe-router.d.ts +0 -213
- package/dist/src/ruvector/moe-router.d.ts.map +0 -1
- package/dist/src/ruvector/moe-router.js +0 -649
- package/dist/src/ruvector/moe-router.js.map +0 -1
- package/dist/src/ruvector/q-learning-router.d.ts +0 -217
- package/dist/src/ruvector/q-learning-router.d.ts.map +0 -1
- package/dist/src/ruvector/q-learning-router.js +0 -712
- package/dist/src/ruvector/q-learning-router.js.map +0 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +0 -179
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +0 -1
- package/dist/src/ruvector/ruvllm-wasm.js +0 -363
- package/dist/src/ruvector/ruvllm-wasm.js.map +0 -1
- package/dist/src/ruvector/semantic-router.d.ts +0 -77
- package/dist/src/ruvector/semantic-router.d.ts.map +0 -1
- package/dist/src/ruvector/semantic-router.js +0 -178
- package/dist/src/ruvector/semantic-router.js.map +0 -1
- package/dist/src/ruvector/vector-db.d.ts +0 -69
- package/dist/src/ruvector/vector-db.d.ts.map +0 -1
- package/dist/src/ruvector/vector-db.js +0 -243
- package/dist/src/ruvector/vector-db.js.map +0 -1
- package/dist/src/services/ruvector-training.d.ts +0 -222
- package/dist/src/services/ruvector-training.d.ts.map +0 -1
- package/dist/src/services/ruvector-training.js +0 -696
- package/dist/src/services/ruvector-training.js.map +0 -1
- package/dist/src/ui/.monomind/loops/loop-1779095996252-mdjpp.json +0 -11
- package/dist/src/ui/data/agent-avatars.html +0 -763
- package/dist/src/ui/data/agent-avatars.json +0 -966
- package/dist/src/ui/data/avatars/account-strategist.svg +0 -58
- package/dist/src/ui/data/avatars/accounts-payable.svg +0 -54
- package/dist/src/ui/data/avatars/adaptive-coordinator.svg +0 -55
- package/dist/src/ui/data/avatars/adaptive-coordinator2.svg +0 -54
- package/dist/src/ui/data/avatars/ai-citation.svg +0 -57
- package/dist/src/ui/data/avatars/ai-engineer.svg +0 -61
- package/dist/src/ui/data/avatars/analytics-reporter.svg +0 -53
- package/dist/src/ui/data/avatars/api-tester.svg +0 -53
- package/dist/src/ui/data/avatars/architecture.svg +0 -54
- package/dist/src/ui/data/avatars/automation-governance.svg +0 -55
- package/dist/src/ui/data/avatars/backend-dev.svg +0 -53
- package/dist/src/ui/data/avatars/benchmarker.svg +0 -54
- package/dist/src/ui/data/avatars/blockchain-auditor.svg +0 -53
- package/dist/src/ui/data/avatars/byzantine-coord.svg +0 -57
- package/dist/src/ui/data/avatars/case-analyst.svg +0 -57
- package/dist/src/ui/data/avatars/cicd-engineer.svg +0 -55
- package/dist/src/ui/data/avatars/cloud-architect.svg +0 -54
- package/dist/src/ui/data/avatars/code-review-swarm.svg +0 -57
- package/dist/src/ui/data/avatars/coder-v119.svg +0 -57
- package/dist/src/ui/data/avatars/coder.svg +0 -58
- package/dist/src/ui/data/avatars/collective-coord.svg +0 -54
- package/dist/src/ui/data/avatars/compliance-auditor.svg +0 -58
- package/dist/src/ui/data/avatars/consensus-coordinator.svg +0 -54
- package/dist/src/ui/data/avatars/content-creator.svg +0 -54
- package/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -53
- package/dist/src/ui/data/avatars/cro-specialist.svg +0 -58
- package/dist/src/ui/data/avatars/data-consolidator.svg +0 -54
- package/dist/src/ui/data/avatars/data-engineer.svg +0 -53
- package/dist/src/ui/data/avatars/database-optimizer.svg +0 -61
- package/dist/src/ui/data/avatars/deal-strategist.svg +0 -54
- package/dist/src/ui/data/avatars/defender.svg +0 -53
- package/dist/src/ui/data/avatars/devops-automator.svg +0 -56
- package/dist/src/ui/data/avatars/discovery-coach.svg +0 -54
- package/dist/src/ui/data/avatars/email-marketing.svg +0 -57
- package/dist/src/ui/data/avatars/embedded-firmware.svg +0 -61
- package/dist/src/ui/data/avatars/evidence-collector.svg +0 -57
- package/dist/src/ui/data/avatars/experiment-tracker.svg +0 -53
- package/dist/src/ui/data/avatars/feedback-synthesizer.svg +0 -54
- package/dist/src/ui/data/avatars/finance-tracker.svg +0 -54
- package/dist/src/ui/data/avatars/frontend-developer.svg +0 -54
- package/dist/src/ui/data/avatars/game-audio-engineer.svg +0 -59
- package/dist/src/ui/data/avatars/game-designer.svg +0 -54
- package/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -54
- package/dist/src/ui/data/avatars/hierarchical-coord.svg +0 -54
- package/dist/src/ui/data/avatars/incident-commander.svg +0 -57
- package/dist/src/ui/data/avatars/infrastructure.svg +0 -54
- package/dist/src/ui/data/avatars/input-validator.svg +0 -53
- package/dist/src/ui/data/avatars/ios-developer.svg +0 -54
- package/dist/src/ui/data/avatars/issue-tracker.svg +0 -53
- package/dist/src/ui/data/avatars/judge.svg +0 -55
- package/dist/src/ui/data/avatars/launch-strategist.svg +0 -54
- package/dist/src/ui/data/avatars/legal-compliance.svg +0 -53
- package/dist/src/ui/data/avatars/level-designer.svg +0 -53
- package/dist/src/ui/data/avatars/load-balancer.svg +0 -57
- package/dist/src/ui/data/avatars/mcp-builder.svg +0 -53
- package/dist/src/ui/data/avatars/memory-coordinator.svg +0 -55
- package/dist/src/ui/data/avatars/mesh-coordinator.svg +0 -55
- package/dist/src/ui/data/avatars/ml-developer.svg +0 -58
- package/dist/src/ui/data/avatars/mobile-app-builder.svg +0 -53
- package/dist/src/ui/data/avatars/mobile-dev.svg +0 -54
- package/dist/src/ui/data/avatars/model-qa.svg +0 -58
- package/dist/src/ui/data/avatars/narrative-designer.svg +0 -58
- package/dist/src/ui/data/avatars/outbound-strategist.svg +0 -55
- package/dist/src/ui/data/avatars/path-validator.svg +0 -54
- package/dist/src/ui/data/avatars/payment-agent.svg +0 -53
- package/dist/src/ui/data/avatars/perf-analyzer.svg +0 -58
- package/dist/src/ui/data/avatars/pipeline-analyst.svg +0 -54
- package/dist/src/ui/data/avatars/planner.svg +0 -55
- package/dist/src/ui/data/avatars/pr-manager.svg +0 -54
- package/dist/src/ui/data/avatars/pricing-strategist.svg +0 -54
- package/dist/src/ui/data/avatars/product-manager.svg +0 -54
- package/dist/src/ui/data/avatars/production-validator.svg +0 -54
- package/dist/src/ui/data/avatars/project-shepherd.svg +0 -54
- package/dist/src/ui/data/avatars/proposal-strategist.svg +0 -54
- package/dist/src/ui/data/avatars/prosecutor.svg +0 -57
- package/dist/src/ui/data/avatars/pseudocode.svg +0 -53
- package/dist/src/ui/data/avatars/queen-coordinator.svg +0 -55
- package/dist/src/ui/data/avatars/quorum-manager.svg +0 -53
- package/dist/src/ui/data/avatars/raft-manager.svg +0 -53
- package/dist/src/ui/data/avatars/reality-checker.svg +0 -58
- package/dist/src/ui/data/avatars/recruitment.svg +0 -58
- package/dist/src/ui/data/avatars/refinement.svg +0 -53
- package/dist/src/ui/data/avatars/release-manager.svg +0 -54
- package/dist/src/ui/data/avatars/repo-architect.svg +0 -54
- package/dist/src/ui/data/avatars/researcher.svg +0 -58
- package/dist/src/ui/data/avatars/resource-allocator.svg +0 -53
- package/dist/src/ui/data/avatars/reviewer.svg +0 -53
- package/dist/src/ui/data/avatars/safe-executor.svg +0 -53
- package/dist/src/ui/data/avatars/sales-coach.svg +0 -53
- package/dist/src/ui/data/avatars/sales-engineer.svg +0 -58
- package/dist/src/ui/data/avatars/scout-explorer.svg +0 -58
- package/dist/src/ui/data/avatars/security-architect.svg +0 -54
- package/dist/src/ui/data/avatars/security-auditor.svg +0 -55
- package/dist/src/ui/data/avatars/senior-developer.svg +0 -58
- package/dist/src/ui/data/avatars/senior-pm.svg +0 -58
- package/dist/src/ui/data/avatars/seo-specialist.svg +0 -57
- package/dist/src/ui/data/avatars/social-media.svg +0 -54
- package/dist/src/ui/data/avatars/solidity-engineer.svg +0 -58
- package/dist/src/ui/data/avatars/sparc-coder.svg +0 -58
- package/dist/src/ui/data/avatars/sparc-coord.svg +0 -56
- package/dist/src/ui/data/avatars/specification.svg +0 -57
- package/dist/src/ui/data/avatars/sprint-prioritizer.svg +0 -53
- package/dist/src/ui/data/avatars/sre.svg +0 -54
- package/dist/src/ui/data/avatars/studio-operations.svg +0 -53
- package/dist/src/ui/data/avatars/studio-producer.svg +0 -55
- package/dist/src/ui/data/avatars/support-responder.svg +0 -56
- package/dist/src/ui/data/avatars/system-architect.svg +0 -54
- package/dist/src/ui/data/avatars/task-orchestrator.svg +0 -56
- package/dist/src/ui/data/avatars/technical-artist.svg +0 -53
- package/dist/src/ui/data/avatars/technical-writer.svg +0 -59
- package/dist/src/ui/data/avatars/tester.svg +0 -53
- package/dist/src/ui/data/avatars/threat-detection.svg +0 -61
- package/dist/src/ui/data/avatars/trend-researcher.svg +0 -54
- package/dist/src/ui/data/avatars/trial-director.svg +0 -55
- package/dist/src/ui/data/avatars/unity-architect.svg +0 -54
- package/dist/src/ui/data/avatars/visionos-engineer.svg +0 -57
- package/dist/src/ui/data/avatars/worker-specialist.svg +0 -55
- package/dist/src/ui/data/avatars/workflow-architect.svg +0 -57
- package/dist/src/ui/data/avatars/workflow-automation.svg +0 -54
- package/dist/src/ui/data/avatars/zk-steward.svg +0 -54
- package/dist/src/ui/data/known-projects.json +0 -1
- /package/dist/src/{ruvector → monovector}/diff-classifier.js +0 -0
|
@@ -280,7 +280,7 @@ html, body { height: 100%; background: var(--bg); color: var(--text-hi); font-fa
|
|
|
280
280
|
.oi-chip.live { background: oklch(65% 0.15 150 / 0.12); color: var(--green); }
|
|
281
281
|
|
|
282
282
|
/* detail pane */
|
|
283
|
-
#org-detail-pane { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; }
|
|
283
|
+
#org-detail-pane { flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; position: relative; }
|
|
284
284
|
#org-detail-pane.empty-state { align-items: center; justify-content: center; }
|
|
285
285
|
.orgs-no-sel { color: var(--text-lo); font-size: 13px; text-align: center; }
|
|
286
286
|
.orgs-no-sel-ico { font-size: 28px; margin-bottom: 10px; opacity: 0.3; }
|
|
@@ -304,6 +304,61 @@ html, body { height: 100%; background: var(--bg); color: var(--text-hi); font-fa
|
|
|
304
304
|
.odt-pane { display: none; }
|
|
305
305
|
.odt-pane.active { display: block; }
|
|
306
306
|
|
|
307
|
+
/* agent detail drawer (slides in from right within the org detail pane) */
|
|
308
|
+
#org-agent-drawer {
|
|
309
|
+
position: absolute; top: 0; right: 0; height: 100%;
|
|
310
|
+
width: min(420px, 82%);
|
|
311
|
+
background: var(--surface); border-left: 1px solid var(--border);
|
|
312
|
+
box-shadow: -16px 0 44px -14px oklch(0% 0 0 / 0.5);
|
|
313
|
+
transform: translateX(101%);
|
|
314
|
+
transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1);
|
|
315
|
+
display: flex; flex-direction: column; z-index: 40; min-width: 0;
|
|
316
|
+
}
|
|
317
|
+
#org-agent-drawer.open { transform: translateX(0); }
|
|
318
|
+
@media (prefers-reduced-motion: reduce) { #org-agent-drawer { transition: none; } }
|
|
319
|
+
#oad-head { display: flex; align-items: center; gap: 11px; padding: 16px 16px 14px; border-bottom: 1px solid var(--border); flex-shrink: 0; }
|
|
320
|
+
.oad-avatar { width: 46px; height: 46px; border-radius: 50%; flex-shrink: 0; background: var(--surface-hi); object-fit: cover; }
|
|
321
|
+
.oad-id { flex: 1; min-width: 0; }
|
|
322
|
+
.oad-name { font-size: 15px; font-weight: 600; color: var(--text-hi); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
323
|
+
.oad-pills { display: flex; gap: 5px; margin-top: 5px; flex-wrap: wrap; }
|
|
324
|
+
.oad-pill { font-size: 10px; padding: 2px 7px; border-radius: 7px; background: var(--surface-hi); color: var(--text-lo); }
|
|
325
|
+
.oad-pill.model { color: var(--accent); background: oklch(72% 0.18 75 / 0.1); }
|
|
326
|
+
.oad-close { background: none; border: none; color: var(--text-lo); font-size: 14px; cursor: pointer; padding: 4px 7px; border-radius: 6px; line-height: 1; flex-shrink: 0; }
|
|
327
|
+
.oad-close:hover { color: var(--text-hi); background: var(--surface-hi); }
|
|
328
|
+
#oad-body { flex: 1; overflow-y: auto; padding: 16px; }
|
|
329
|
+
#oad-body::-webkit-scrollbar { width: 3px; }
|
|
330
|
+
#oad-body::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
|
|
331
|
+
.oad-loading, .oad-empty { color: var(--text-lo); font-size: 12px; padding: 6px 0; line-height: 1.5; }
|
|
332
|
+
.oad-empty code, .oad-doc code { background: var(--surface-hi); padding: 1px 5px; border-radius: 4px; font-family: var(--mono); font-size: 0.92em; }
|
|
333
|
+
.oad-desc { font-size: 12.5px; color: var(--text-mid); line-height: 1.5; margin-bottom: 16px; }
|
|
334
|
+
.oad-sec { margin-bottom: 18px; }
|
|
335
|
+
.oad-sec-h { font-size: 10px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-lo); margin-bottom: 9px; display: flex; align-items: baseline; gap: 8px; }
|
|
336
|
+
.oad-file { text-transform: none; letter-spacing: 0; opacity: 0.55; font-size: 10px; font-family: var(--mono); }
|
|
337
|
+
.oad-chars { display: flex; flex-direction: column; gap: 7px; }
|
|
338
|
+
.oad-char { display: grid; grid-template-columns: 96px 1fr; gap: 10px; font-size: 12px; align-items: start; }
|
|
339
|
+
.oad-char-k { color: var(--text-lo); }
|
|
340
|
+
.oad-char-v { color: var(--text-hi); }
|
|
341
|
+
.oad-chips { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
342
|
+
.oad-chip { font-size: 11px; padding: 3px 9px; border-radius: 9px; background: oklch(65% 0.12 240 / 0.13); color: oklch(74% 0.1 240); }
|
|
343
|
+
.oad-chip.alt { background: oklch(65% 0.15 150 / 0.11); color: oklch(72% 0.13 150); }
|
|
344
|
+
.oad-list { margin: 0; padding-left: 17px; }
|
|
345
|
+
.oad-list li { font-size: 12px; color: var(--text-mid); line-height: 1.5; margin-bottom: 3px; }
|
|
346
|
+
.oad-doc { font-size: 12.5px; color: var(--text-mid); line-height: 1.55; }
|
|
347
|
+
.oad-doc h1, .oad-doc h2, .oad-doc h3, .oad-doc h4, .oad-doc h5, .oad-doc h6 { color: var(--text-hi); margin: 15px 0 7px; line-height: 1.3; }
|
|
348
|
+
.oad-doc h1 { font-size: 15px; } .oad-doc h2 { font-size: 13.5px; } .oad-doc h3 { font-size: 12.5px; } .oad-doc h4 { font-size: 12px; }
|
|
349
|
+
.oad-doc p { margin: 0 0 9px; }
|
|
350
|
+
.oad-doc ul, .oad-doc ol { margin: 0 0 9px; padding-left: 18px; }
|
|
351
|
+
.oad-doc li { margin-bottom: 3px; }
|
|
352
|
+
.oad-doc strong { color: var(--text-hi); font-weight: 600; }
|
|
353
|
+
.oad-doc pre { background: var(--surface-hi); border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; overflow-x: auto; margin: 0 0 10px; }
|
|
354
|
+
.oad-doc pre code { background: none; padding: 0; font-size: 11.5px; color: var(--text-mid); }
|
|
355
|
+
/* clickable org chart nodes + role cards */
|
|
356
|
+
.v2oc-node { cursor: pointer; }
|
|
357
|
+
.v2oc-node.selected > circle { stroke-width: 3.4 !important; }
|
|
358
|
+
.role-v2 { cursor: pointer; transition: border-color 0.12s, transform 0.12s; }
|
|
359
|
+
.role-v2:hover { transform: translateY(-1px); }
|
|
360
|
+
.rv2-more { margin-top: 9px; font-size: 10.5px; color: var(--accent); opacity: 0.85; }
|
|
361
|
+
|
|
307
362
|
/* org meta strip */
|
|
308
363
|
.org-meta-strip { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; margin-bottom: 16px; }
|
|
309
364
|
.oms-cell { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); padding: 10px 12px; }
|
|
@@ -1690,34 +1745,12 @@ textarea.sess-note-input:focus { border-color:var(--accent); }
|
|
|
1690
1745
|
</div>
|
|
1691
1746
|
<div id="org-detail-tabs">
|
|
1692
1747
|
<button class="odt-btn active" data-tab="chart" onclick="v2SwitchOrgTab('chart')">Chart</button>
|
|
1693
|
-
<button class="odt-btn" data-tab="roles" onclick="v2SwitchOrgTab('roles')">Roles</button>
|
|
1694
1748
|
<button class="odt-btn" data-tab="activity" onclick="v2SwitchOrgTab('activity')">Activity</button>
|
|
1695
1749
|
<button class="odt-btn" data-tab="health" onclick="v2SwitchOrgTab('health')">Health</button>
|
|
1696
|
-
<button class="odt-btn" data-tab="heartbeats" onclick="v2SwitchOrgTab('heartbeats')">Heartbeats</button>
|
|
1697
|
-
<button class="odt-btn" data-tab="tasks" onclick="v2SwitchOrgTab('tasks')">Tasks</button>
|
|
1698
|
-
<button class="odt-btn" data-tab="costs" onclick="v2SwitchOrgTab('costs')">Costs</button>
|
|
1699
|
-
<button class="odt-btn" data-tab="members" onclick="v2SwitchOrgTab('members')">Members</button>
|
|
1700
|
-
<button class="odt-btn" data-tab="goals" onclick="v2SwitchOrgTab('goals')">Goals</button>
|
|
1701
|
-
<button class="odt-btn" data-tab="board" onclick="v2SwitchOrgTab('board')">Board</button>
|
|
1702
|
-
<button class="odt-btn" data-tab="live" onclick="v2SwitchOrgTab('live')">Live</button>
|
|
1703
1750
|
<button class="odt-btn" data-tab="approvals" onclick="v2SwitchOrgTab('approvals')">Approvals</button>
|
|
1704
|
-
<button class="odt-btn" data-tab="secrets" onclick="v2SwitchOrgTab('secrets')">Secrets</button>
|
|
1705
|
-
<button class="odt-btn" data-tab="settings" onclick="v2SwitchOrgTab('settings')">Settings</button>
|
|
1706
|
-
<button class="odt-btn" data-tab="routines" onclick="v2SwitchOrgTab('routines')">Routines</button>
|
|
1707
|
-
<button class="odt-btn" data-tab="myissues" onclick="v2SwitchOrgTab('myissues')">My Issues</button>
|
|
1708
1751
|
<button class="odt-btn" data-tab="budgets" onclick="v2SwitchOrgTab('budgets')">Budgets</button>
|
|
1709
|
-
<button class="odt-btn" data-tab="plugins" onclick="v2SwitchOrgTab('plugins')">Plugins</button>
|
|
1710
1752
|
<button class="odt-btn" data-tab="charts" onclick="v2SwitchOrgTab('charts')">Charts</button>
|
|
1711
|
-
<button class="odt-btn" data-tab="projects" onclick="v2SwitchOrgTab('projects')">Projects</button>
|
|
1712
1753
|
<button class="odt-btn" data-tab="skills" onclick="v2SwitchOrgTab('skills')">Skills</button>
|
|
1713
|
-
<button class="odt-btn" data-tab="workspaces" onclick="v2SwitchOrgTab('workspaces')">Workspaces</button>
|
|
1714
|
-
<button class="odt-btn" data-tab="invites" onclick="v2SwitchOrgTab('invites')">Invites</button>
|
|
1715
|
-
<button class="odt-btn" data-tab="agents-full" onclick="v2SwitchOrgTab('agents-full')">Agents</button>
|
|
1716
|
-
<button class="odt-btn" data-tab="environments" onclick="v2SwitchOrgTab('environments')">Environments</button>
|
|
1717
|
-
<button class="odt-btn" data-tab="access" onclick="v2SwitchOrgTab('access')">Access</button>
|
|
1718
|
-
<button class="odt-btn" data-tab="issues-full" onclick="v2SwitchOrgTab('issues-full')">Issues</button>
|
|
1719
|
-
<button class="odt-btn" data-tab="join-requests" onclick="v2SwitchOrgTab('join-requests')">Join Queue</button>
|
|
1720
|
-
<button class="odt-btn" data-tab="threads" onclick="v2SwitchOrgTab('threads')">Threads</button>
|
|
1721
1754
|
</div>
|
|
1722
1755
|
<div id="org-detail-body">
|
|
1723
1756
|
<div class="odt-pane active" id="odt-chart"></div>
|
|
@@ -1751,6 +1784,11 @@ textarea.sess-note-input:focus { border-color:var(--accent); }
|
|
|
1751
1784
|
<div class="odt-pane" id="odt-threads"></div>
|
|
1752
1785
|
</div>
|
|
1753
1786
|
</div>
|
|
1787
|
+
<!-- agent detail drawer (node-click / role-card-click) -->
|
|
1788
|
+
<div id="org-agent-drawer" aria-hidden="true">
|
|
1789
|
+
<div id="oad-head"></div>
|
|
1790
|
+
<div id="oad-body"></div>
|
|
1791
|
+
</div>
|
|
1754
1792
|
</div>
|
|
1755
1793
|
</div>
|
|
1756
1794
|
|
|
@@ -4544,6 +4582,7 @@ function v2RenderOrgList() {
|
|
|
4544
4582
|
|
|
4545
4583
|
async function v2SelectOrg(name) {
|
|
4546
4584
|
_v2SelOrg = name;
|
|
4585
|
+
if (typeof v2CloseAgent === 'function') v2CloseAgent();
|
|
4547
4586
|
const requested = name;
|
|
4548
4587
|
const requestedDir = DIR;
|
|
4549
4588
|
document.querySelectorAll('.org-item').forEach(el => {
|
|
@@ -4586,6 +4625,7 @@ async function v2SelectOrg(name) {
|
|
|
4586
4625
|
_v2OrgData._agents = Array.isArray(agentsR) ? agentsR : (agentsR?.agents || []);
|
|
4587
4626
|
_v2OrgData._budgets = budgetsR;
|
|
4588
4627
|
_v2OrgData._members = Array.isArray(membersR) ? membersR : (membersR?.members || []);
|
|
4628
|
+
_v2OrgData._joinRequests = (membersR && membersR.join_requests) || [];
|
|
4589
4629
|
_v2OrgData._issues = Array.isArray(issuesR) ? issuesR : (issuesR?.issues || []);
|
|
4590
4630
|
} catch (_) {
|
|
4591
4631
|
if (_v2SelOrg !== requested || DIR !== requestedDir) return;
|
|
@@ -4865,8 +4905,8 @@ function v2RenderOrgChart() {
|
|
|
4865
4905
|
const nameY = subType ? (R * 0.55 + 2).toFixed(0) : (R * 0.55 + 8).toFixed(0);
|
|
4866
4906
|
const avR = Math.round(R * 0.52);
|
|
4867
4907
|
const avatarSrc = v2RoleAvatar(role);
|
|
4868
|
-
nodesHTML += `<g class="v2oc-node" transform="translate(${p.x.toFixed(1)},${p.y.toFixed(1)})">
|
|
4869
|
-
<title>${esc(displayName)}${subType ? ` · ${esc(subType)}` : ''}</title>
|
|
4908
|
+
nodesHTML += `<g class="v2oc-node" data-role="${esc(role.id)}" onclick="v2OpenAgent('${String(role.id).replace(/['\\]/g,'\\$&')}')" transform="translate(${p.x.toFixed(1)},${p.y.toFixed(1)})">
|
|
4909
|
+
<title>${esc(displayName)}${subType ? ` · ${esc(subType)}` : ''} — click for details</title>
|
|
4870
4910
|
${outerRing}
|
|
4871
4911
|
<circle r="${R}" fill="oklch(12% 0.008 55)" stroke="${color}" stroke-width="${leader ? 2.5 : 1.8}" filter="url(#v2glow)"/>
|
|
4872
4912
|
<image href="${avatarSrc}" x="${-avR}" y="${-R + 2}" width="${avR * 2}" height="${avR * 2}" clip-path="url(#${nodeClipIds[i]})" preserveAspectRatio="xMidYMid meet" onerror="this.setAttribute('href','data/avatars/coder.svg')"/>
|
|
@@ -5007,7 +5047,7 @@ function v2RenderOrgRoles() {
|
|
|
5007
5047
|
const displayName = r.name || r.title || r.id;
|
|
5008
5048
|
const roleType = r.type || r.agent_type || '';
|
|
5009
5049
|
const avatarSrc = v2RoleAvatar(r);
|
|
5010
|
-
return `<div class="role-v2" style="border-top:2px solid ${color}">
|
|
5050
|
+
return `<div class="role-v2" style="border-top:2px solid ${color}" onclick="v2OpenAgent('${String(r.id).replace(/['\\]/g,'\\$&')}')" title="View agent characteristics, skills & instructions">
|
|
5011
5051
|
<div class="rv2-head">
|
|
5012
5052
|
<img class="rv2-avatar" src="${avatarSrc}" alt="${esc(displayName)}" loading="lazy" onerror="this.src='data/avatars/coder.svg'"/>
|
|
5013
5053
|
<div class="rv2-info">
|
|
@@ -5018,10 +5058,127 @@ function v2RenderOrgRoles() {
|
|
|
5018
5058
|
<div class="rv2-id">${esc(r.id)}</div>
|
|
5019
5059
|
${r.reports_to ? `<div class="rv2-reports">reports to <span>${esc(r.reports_to)}</span></div>` : ''}
|
|
5020
5060
|
${resps.length ? `<div class="rv2-resps">${resps.map(s=>`<div class="rv2-resp">${esc(s)}</div>`).join('')}</div>` : ''}
|
|
5061
|
+
<div class="rv2-more">View characteristics, skills & instructions →</div>
|
|
5021
5062
|
</div>`;
|
|
5022
5063
|
}).join('')}</div>`;
|
|
5023
5064
|
}
|
|
5024
5065
|
|
|
5066
|
+
// ── agent detail drawer ──────────────────────
|
|
5067
|
+
function v2HighlightAgentNode(roleId) {
|
|
5068
|
+
document.querySelectorAll('#v2oc-nodes .v2oc-node').forEach(n =>
|
|
5069
|
+
n.classList.toggle('selected', !!roleId && n.getAttribute('data-role') === roleId));
|
|
5070
|
+
}
|
|
5071
|
+
function v2CloseAgent() {
|
|
5072
|
+
const drawer = document.getElementById('org-agent-drawer');
|
|
5073
|
+
if (drawer) { drawer.classList.remove('open'); drawer.setAttribute('aria-hidden', 'true'); }
|
|
5074
|
+
v2HighlightAgentNode(null);
|
|
5075
|
+
}
|
|
5076
|
+
async function v2OpenAgent(roleId) {
|
|
5077
|
+
if (!_v2SelOrg || !roleId) return;
|
|
5078
|
+
const drawer = document.getElementById('org-agent-drawer');
|
|
5079
|
+
const bodyEl = document.getElementById('oad-body');
|
|
5080
|
+
const headEl = document.getElementById('oad-head');
|
|
5081
|
+
if (!drawer || !bodyEl || !headEl) return;
|
|
5082
|
+
drawer.classList.add('open'); drawer.setAttribute('aria-hidden', 'false');
|
|
5083
|
+
v2HighlightAgentNode(roleId);
|
|
5084
|
+
headEl.innerHTML = '<button class="oad-close" onclick="v2CloseAgent()" aria-label="Close">✕</button>';
|
|
5085
|
+
bodyEl.innerHTML = '<div class="oad-loading">Loading agent…</div>';
|
|
5086
|
+
try {
|
|
5087
|
+
const r = await fetch(`/api/org/${encodeURIComponent(_v2SelOrg)}/agent/${encodeURIComponent(roleId)}${DIR ? '?dir=' + encodeURIComponent(DIR) : ''}`);
|
|
5088
|
+
if (!r.ok) throw new Error('not found');
|
|
5089
|
+
v2RenderAgentDrawer(await r.json());
|
|
5090
|
+
} catch (_) {
|
|
5091
|
+
bodyEl.innerHTML = '<div class="oad-loading">Could not load agent detail.</div>';
|
|
5092
|
+
}
|
|
5093
|
+
}
|
|
5094
|
+
function v2RenderAgentDrawer(data) {
|
|
5095
|
+
const role = (data && data.role) || {};
|
|
5096
|
+
const def = (data && data.definition) || { found: false };
|
|
5097
|
+
const cap = def.capability || {};
|
|
5098
|
+
const headEl = document.getElementById('oad-head');
|
|
5099
|
+
const bodyEl = document.getElementById('oad-body');
|
|
5100
|
+
if (!headEl || !bodyEl) return;
|
|
5101
|
+
const name = role.name || role.title || role.id || 'Agent';
|
|
5102
|
+
const type = role.agent_type || role.type || '';
|
|
5103
|
+
const model = (role.adapter_config && role.adapter_config.model) || cap.model_preference || '';
|
|
5104
|
+
const avatar = v2RoleAvatar(role);
|
|
5105
|
+
|
|
5106
|
+
headEl.innerHTML = `
|
|
5107
|
+
<img class="oad-avatar" src="${avatar}" alt="${esc(name)}" onerror="this.src='data/avatars/coder.svg'"/>
|
|
5108
|
+
<div class="oad-id">
|
|
5109
|
+
<div class="oad-name">${esc(name)}</div>
|
|
5110
|
+
<div class="oad-pills">
|
|
5111
|
+
${type ? `<span class="oad-pill">${esc(type)}</span>` : ''}
|
|
5112
|
+
${model ? `<span class="oad-pill model">${esc(model)}</span>` : ''}
|
|
5113
|
+
</div>
|
|
5114
|
+
</div>
|
|
5115
|
+
<button class="oad-close" onclick="v2CloseAgent()" aria-label="Close">✕</button>`;
|
|
5116
|
+
|
|
5117
|
+
const chars = [];
|
|
5118
|
+
if (cap.goal) chars.push(['Goal', cap.goal]);
|
|
5119
|
+
if (role.reports_to) chars.push(['Reports to', role.reports_to]);
|
|
5120
|
+
if (model) chars.push(['Model', model]);
|
|
5121
|
+
if (role.adapter_config && role.adapter_config.max_tokens) chars.push(['Max tokens', String(role.adapter_config.max_tokens)]);
|
|
5122
|
+
if (cap.input_type) chars.push(['Input', cap.input_type]);
|
|
5123
|
+
if (cap.output_type) chars.push(['Output', cap.output_type]);
|
|
5124
|
+
if (cap.termination) chars.push(['Done when', cap.termination]);
|
|
5125
|
+
if (cap.version) chars.push(['Version', cap.version]);
|
|
5126
|
+
|
|
5127
|
+
const skills = [];
|
|
5128
|
+
(Array.isArray(role.skills) ? role.skills : []).forEach(s => { if (s && !skills.includes(s)) skills.push(s); });
|
|
5129
|
+
(Array.isArray(cap.expertise) ? cap.expertise : []).forEach(s => { if (s && !skills.includes(s)) skills.push(s); });
|
|
5130
|
+
const taskTypes = Array.isArray(cap.task_types) ? cap.task_types : [];
|
|
5131
|
+
const resps = Array.isArray(role.responsibilities) ? role.responsibilities : [];
|
|
5132
|
+
|
|
5133
|
+
let html = '';
|
|
5134
|
+
if (def.description) html += `<div class="oad-desc">${esc(def.description)}</div>`;
|
|
5135
|
+
if (chars.length) html += `<div class="oad-sec"><div class="oad-sec-h">Characteristics</div><div class="oad-chars">${chars.map(([k, v]) => `<div class="oad-char"><span class="oad-char-k">${esc(k)}</span><span class="oad-char-v">${esc(v)}</span></div>`).join('')}</div></div>`;
|
|
5136
|
+
if (skills.length) html += `<div class="oad-sec"><div class="oad-sec-h">Skills & expertise</div><div class="oad-chips">${skills.map(s => `<span class="oad-chip">${esc(s)}</span>`).join('')}</div></div>`;
|
|
5137
|
+
if (resps.length) html += `<div class="oad-sec"><div class="oad-sec-h">Responsibilities</div><ul class="oad-list">${resps.map(s => `<li>${esc(s)}</li>`).join('')}</ul></div>`;
|
|
5138
|
+
if (taskTypes.length) html += `<div class="oad-sec"><div class="oad-sec-h">Task types</div><div class="oad-chips">${taskTypes.map(s => `<span class="oad-chip alt">${esc(s)}</span>`).join('')}</div></div>`;
|
|
5139
|
+
if (def.found && def.document) {
|
|
5140
|
+
html += `<div class="oad-sec"><div class="oad-sec-h">Instructions & document${def.file ? ` <span class="oad-file">${esc(def.file)}</span>` : ''}</div><div class="oad-doc">${v2RenderMarkdown(def.document)}</div></div>`;
|
|
5141
|
+
} else {
|
|
5142
|
+
html += `<div class="oad-sec"><div class="oad-empty">No instruction document is defined for agent type <code>${esc(type || '?')}</code>. Showing org-configured details only.</div></div>`;
|
|
5143
|
+
}
|
|
5144
|
+
bodyEl.innerHTML = html;
|
|
5145
|
+
bodyEl.scrollTop = 0;
|
|
5146
|
+
}
|
|
5147
|
+
// Minimal, XSS-safe markdown → HTML (headings, lists, code, bold/italic, inline code).
|
|
5148
|
+
function v2RenderMarkdown(md) {
|
|
5149
|
+
if (!md) return '';
|
|
5150
|
+
const escHtml = (s) => String(s).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
5151
|
+
const blocks = [];
|
|
5152
|
+
let src = String(md).replace(/```(\w*)\n([\s\S]*?)```/g, (_m, _lang, code) => {
|
|
5153
|
+
blocks.push('<pre><code>' + escHtml(code.replace(/\n$/, '')) + '</code></pre>');
|
|
5154
|
+
return ' B' + (blocks.length - 1) + ' ';
|
|
5155
|
+
});
|
|
5156
|
+
src = escHtml(src);
|
|
5157
|
+
src = src.replace(/^######\s+(.+)$/gm, '<h6>$1</h6>')
|
|
5158
|
+
.replace(/^#####\s+(.+)$/gm, '<h5>$1</h5>')
|
|
5159
|
+
.replace(/^####\s+(.+)$/gm, '<h4>$1</h4>')
|
|
5160
|
+
.replace(/^###\s+(.+)$/gm, '<h3>$1</h3>')
|
|
5161
|
+
.replace(/^##\s+(.+)$/gm, '<h2>$1</h2>')
|
|
5162
|
+
.replace(/^#\s+(.+)$/gm, '<h1>$1</h1>');
|
|
5163
|
+
src = src.replace(/`([^`]+)`/g, '<code>$1</code>');
|
|
5164
|
+
src = src.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>').replace(/(^|[^*])\*([^*\n]+)\*/g, '$1<em>$2</em>');
|
|
5165
|
+
let html = '', inUl = false, inOl = false;
|
|
5166
|
+
const closeLists = () => { if (inUl) { html += '</ul>'; inUl = false; } if (inOl) { html += '</ol>'; inOl = false; } };
|
|
5167
|
+
for (const ln of src.split('\n')) {
|
|
5168
|
+
const ul = ln.match(/^\s*[-*]\s+(.+)$/);
|
|
5169
|
+
const ol = ln.match(/^\s*\d+\.\s+(.+)$/);
|
|
5170
|
+
if (ul) { if (inOl) { html += '</ol>'; inOl = false; } if (!inUl) { html += '<ul>'; inUl = true; } html += '<li>' + ul[1] + '</li>'; continue; }
|
|
5171
|
+
if (ol) { if (inUl) { html += '</ul>'; inUl = false; } if (!inOl) { html += '<ol>'; inOl = true; } html += '<li>' + ol[1] + '</li>'; continue; }
|
|
5172
|
+
closeLists();
|
|
5173
|
+
if (/^<h[1-6]>/.test(ln) || /^ B\d+ $/.test(ln.trim())) { html += ln; continue; }
|
|
5174
|
+
if (ln.trim() === '') continue;
|
|
5175
|
+
html += '<p>' + ln + '</p>';
|
|
5176
|
+
}
|
|
5177
|
+
closeLists();
|
|
5178
|
+
html = html.replace(/<p>( B\d+ )<\/p>/g, '$1').replace(/ B(\d+) /g, (_m, i) => blocks[+i] || '');
|
|
5179
|
+
return html;
|
|
5180
|
+
}
|
|
5181
|
+
|
|
5025
5182
|
// ── org activity ────────────────────────────
|
|
5026
5183
|
function v2RenderOrgActivity() {
|
|
5027
5184
|
if (!_v2SelOrg) return;
|
|
@@ -5070,13 +5227,22 @@ function v2RenderOrgHeartbeats() {
|
|
|
5070
5227
|
if (!_v2SelOrg) return;
|
|
5071
5228
|
const pane = document.getElementById('odt-heartbeats');
|
|
5072
5229
|
if (!pane) return;
|
|
5073
|
-
|
|
5074
|
-
|
|
5075
|
-
|
|
5076
|
-
hb
|
|
5077
|
-
|
|
5078
|
-
|
|
5079
|
-
|
|
5230
|
+
// Derive from the agent roster — each agent carries status + lastHeartbeat
|
|
5231
|
+
let hb = Array.isArray(_v2OrgData?.heartbeats) ? _v2OrgData.heartbeats : [];
|
|
5232
|
+
if (!hb.length && Array.isArray(_v2OrgData?._agents)) {
|
|
5233
|
+
hb = _v2OrgData._agents.map(a => ({
|
|
5234
|
+
agent: a.title || a.id || '—',
|
|
5235
|
+
ts: a.lastHeartbeat ?? a.last_heartbeat ?? a.ts ?? null,
|
|
5236
|
+
status: a.status || 'idle',
|
|
5237
|
+
}));
|
|
5238
|
+
}
|
|
5239
|
+
if (!hb.length) { pane.innerHTML = '<div class="empty">No agents to report</div>'; return; }
|
|
5240
|
+
const cls = (st) => (st === 'active' || st === 'running') ? 'on' : ((st === 'error' || st === 'failed') ? 'warn' : '');
|
|
5241
|
+
pane.innerHTML = `<div class="m-group-title">Agent Heartbeats</div>` +
|
|
5242
|
+
hb.slice(0, 50).map(h => `<div style="display:flex;justify-content:space-between;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px">
|
|
5243
|
+
<span style="color:var(--text-hi);font-family:var(--mono);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${esc(h.agent || '—')}</span>
|
|
5244
|
+
<span style="color:var(--text-lo);white-space:nowrap">${h.ts ? relTime(h.ts) : 'never'}</span>
|
|
5245
|
+
<span class="ss-pill ${cls(h.status)}">${esc(String(h.status || 'idle').toUpperCase())}</span>
|
|
5080
5246
|
</div>`).join('');
|
|
5081
5247
|
}
|
|
5082
5248
|
|
|
@@ -5085,13 +5251,24 @@ function v2RenderOrgTasks() {
|
|
|
5085
5251
|
if (!_v2SelOrg) return;
|
|
5086
5252
|
const pane = document.getElementById('odt-tasks');
|
|
5087
5253
|
if (!pane) return;
|
|
5088
|
-
|
|
5254
|
+
// Normalize: API returns {todo:[],doing:[],done:[]} (columns) or a flat array
|
|
5255
|
+
const raw = _v2OrgData?.tasks;
|
|
5256
|
+
let tasks = [];
|
|
5257
|
+
if (Array.isArray(raw)) tasks = raw.slice();
|
|
5258
|
+
else if (raw && typeof raw === 'object') {
|
|
5259
|
+
for (const [col, items] of Object.entries(raw)) {
|
|
5260
|
+
(Array.isArray(items) ? items : []).forEach(t => tasks.push({ ...t, status: t.status || col }));
|
|
5261
|
+
}
|
|
5262
|
+
}
|
|
5089
5263
|
if (!tasks.length) { pane.innerHTML = '<div class="empty">No tasks</div>'; return; }
|
|
5090
|
-
|
|
5091
|
-
|
|
5092
|
-
|
|
5093
|
-
|
|
5094
|
-
|
|
5264
|
+
const rank = { running: 0, doing: 0, todo: 1, pending: 1, done: 2 };
|
|
5265
|
+
tasks.sort((a, b) => (rank[a.status] ?? 1) - (rank[b.status] ?? 1));
|
|
5266
|
+
const pill = (st) => st === 'done' ? 'on' : (st === 'running' || st === 'doing' ? 'warn' : '');
|
|
5267
|
+
pane.innerHTML = `<div class="m-group-title">Tasks (${tasks.length})</div>` +
|
|
5268
|
+
tasks.slice(0, 80).map(t => `<div style="display:flex;gap:10px;align-items:baseline;padding:5px 0;border-bottom:1px solid var(--border);font-size:12px">
|
|
5269
|
+
<span class="ss-pill ${pill(t.status)}">${esc(t.status || '?')}</span>
|
|
5270
|
+
<span style="flex:1;color:var(--text-hi);font-family:var(--mono);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${esc(t.description || t.title || t.id || '—')}</span>
|
|
5271
|
+
<span style="color:var(--text-lo);white-space:nowrap">${relTime(t.ts || t.created_at || t.updated_at)}</span>
|
|
5095
5272
|
</div>`).join('');
|
|
5096
5273
|
}
|
|
5097
5274
|
|
|
@@ -5100,14 +5277,38 @@ function v2RenderOrgCosts() {
|
|
|
5100
5277
|
if (!_v2SelOrg) return;
|
|
5101
5278
|
const pane = document.getElementById('odt-costs');
|
|
5102
5279
|
if (!pane) return;
|
|
5103
|
-
|
|
5104
|
-
|
|
5105
|
-
|
|
5106
|
-
|
|
5107
|
-
|
|
5108
|
-
|
|
5109
|
-
|
|
5110
|
-
|
|
5280
|
+
// Primary source: per-agent cost rollup from the org budgets endpoint (already loaded)
|
|
5281
|
+
const b = _v2OrgData?._budgets;
|
|
5282
|
+
let rows = (b && Array.isArray(b.agents)) ? b.agents.map(a => ({
|
|
5283
|
+
label: a.title || a.id || '—',
|
|
5284
|
+
cost: Number(a.total_cost_usd ?? a.cost ?? 0),
|
|
5285
|
+
tin: Number(a.tokens_in ?? a.tokensIn ?? 0),
|
|
5286
|
+
tout: Number(a.tokens_out ?? a.tokensOut ?? 0),
|
|
5287
|
+
})) : [];
|
|
5288
|
+
// Fallback to legacy _v2OrgData.costs if ever present
|
|
5289
|
+
if (!rows.length && _v2OrgData?.costs) {
|
|
5290
|
+
const c = _v2OrgData.costs;
|
|
5291
|
+
rows = Array.isArray(c)
|
|
5292
|
+
? c.map(r => ({ label: r.label ?? r.name ?? '—', cost: Number(r.value ?? r.cost ?? 0), tin: 0, tout: 0 }))
|
|
5293
|
+
: Object.entries(c).map(([k, v]) => ({ label: k, cost: Number(v) || 0, tin: 0, tout: 0 }));
|
|
5294
|
+
}
|
|
5295
|
+
if (!rows.length) { pane.innerHTML = '<div class="empty">No cost data</div>'; return; }
|
|
5296
|
+
const cur = (b && b.currency) || 'USD';
|
|
5297
|
+
const period = (b && b.period) || '';
|
|
5298
|
+
const total = rows.reduce((s, r) => s + r.cost, 0);
|
|
5299
|
+
const totIn = rows.reduce((s, r) => s + r.tin, 0), totOut = rows.reduce((s, r) => s + r.tout, 0);
|
|
5300
|
+
rows.sort((a, c) => c.cost - a.cost);
|
|
5301
|
+
pane.innerHTML = `<div class="m-group-title">Cost Breakdown${period ? ` · ${esc(period)}` : ''}</div>
|
|
5302
|
+
<div style="display:flex;justify-content:space-between;align-items:baseline;padding:8px 0 10px;border-bottom:1px solid var(--border);margin-bottom:6px">
|
|
5303
|
+
<span style="color:var(--text-lo);font-size:11px">Total (${esc(cur)})</span>
|
|
5304
|
+
<span style="color:var(--accent);font-family:var(--mono);font-size:15px;font-weight:600">$${total.toFixed(4)}</span>
|
|
5305
|
+
</div>` +
|
|
5306
|
+
rows.map(r => `<div style="display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px">
|
|
5307
|
+
<span style="color:var(--text-hi);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${esc(String(r.label))}</span>
|
|
5308
|
+
<span style="color:var(--text-lo);font-family:var(--mono);font-size:10px;white-space:nowrap">${(r.tin + r.tout).toLocaleString()} tok</span>
|
|
5309
|
+
<span style="color:var(--accent);font-family:var(--mono);white-space:nowrap">$${r.cost.toFixed(4)}</span>
|
|
5310
|
+
</div>`).join('') +
|
|
5311
|
+
`<div style="color:var(--text-lo);font-size:10px;margin-top:10px">${totIn.toLocaleString()} in · ${totOut.toLocaleString()} out · sourced from org budgets</div>`;
|
|
5111
5312
|
}
|
|
5112
5313
|
|
|
5113
5314
|
// ── org members tab ────────────────────────────────────────
|
|
@@ -5115,17 +5316,25 @@ function v2RenderOrgMembers() {
|
|
|
5115
5316
|
if (!_v2SelOrg) return;
|
|
5116
5317
|
const pane = document.getElementById('odt-members');
|
|
5117
5318
|
if (!pane) return;
|
|
5319
|
+
// Prefer actual joined members from the members endpoint; fall back to defined roles
|
|
5320
|
+
const members = Array.isArray(_v2OrgData?._members) ? _v2OrgData._members : [];
|
|
5118
5321
|
const roles = Array.isArray(_v2OrgData?.roles) ? _v2OrgData.roles : [];
|
|
5119
|
-
|
|
5120
|
-
|
|
5121
|
-
|
|
5322
|
+
const list = members.length ? members : roles;
|
|
5323
|
+
const joinReqs = Array.isArray(_v2OrgData?._joinRequests) ? _v2OrgData._joinRequests : [];
|
|
5324
|
+
if (!list.length) { pane.innerHTML = '<div class="empty">No members</div>'; return; }
|
|
5325
|
+
const src = members.length ? 'joined members' : 'defined roles';
|
|
5326
|
+
const active = (r) => r.running || r.active || r.status === 'active';
|
|
5327
|
+
pane.innerHTML = `<div class="m-group-title">Members (${list.length}) · ${src}</div>` +
|
|
5328
|
+
list.map(r => `<div style="display:flex;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px">
|
|
5122
5329
|
<span style="width:28px;height:28px;border-radius:50%;background:var(--surface-hi);display:inline-flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0">◈</span>
|
|
5123
5330
|
<div style="flex:1;min-width:0">
|
|
5124
|
-
<div style="color:var(--text-hi);font-family:
|
|
5125
|
-
<div style="color:var(--text-lo);font-size:10px">${esc(r.type || r.role || '')}</div>
|
|
5331
|
+
<div style="color:var(--text-hi);font-family:var(--mono);font-size:12px">${esc(r.name || r.id || r.user || '—')}</div>
|
|
5332
|
+
<div style="color:var(--text-lo);font-size:10px">${esc(r.title || r.type || r.role || '')}</div>
|
|
5126
5333
|
</div>
|
|
5127
|
-
<span class="ss-pill ${r
|
|
5128
|
-
</div>`).join('')
|
|
5334
|
+
<span class="ss-pill ${active(r) ? 'on' : ''}">${active(r) ? 'ACTIVE' : 'IDLE'}</span>
|
|
5335
|
+
</div>`).join('') +
|
|
5336
|
+
(joinReqs.length ? `<div class="m-group-title" style="margin-top:14px">Join Requests (${joinReqs.length})</div>` +
|
|
5337
|
+
joinReqs.map(j => `<div style="display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid var(--border);font-size:12px"><span style="color:var(--text-hi)">${esc(j.user || j.name || j.id || '—')}</span><span style="color:var(--text-lo)">${esc(j.status || 'pending')}</span></div>`).join('') : '');
|
|
5129
5338
|
}
|
|
5130
5339
|
|
|
5131
5340
|
// ── GOALS ──────────────────────────────────────────────────
|
|
@@ -5283,6 +5492,9 @@ function v2RenderOrgSettings() {
|
|
|
5283
5492
|
const d = _v2OrgData;
|
|
5284
5493
|
const topos = ['hierarchical', 'mesh', 'hierarchical-mesh', 'adaptive', 'centralized', 'hybrid'];
|
|
5285
5494
|
const govs = ['auto', 'board', 'strict'];
|
|
5495
|
+
// governance may be a string or an object {policy,...}; budget lives under run_config
|
|
5496
|
+
const govVal = (d.governance && typeof d.governance === 'object') ? (d.governance.policy || '') : (d.governance || '');
|
|
5497
|
+
const budgetVal = d.run_config?.budget_tokens ?? d.budget_tokens ?? d.budgetTokens ?? '';
|
|
5286
5498
|
el.innerHTML = `
|
|
5287
5499
|
<div style="font-size:11px;color:var(--text-lo);margin-bottom:14px">Changes generate a CLI command — no direct writes from UI.</div>
|
|
5288
5500
|
<div style="display:flex;flex-direction:column;gap:12px;max-width:380px">
|
|
@@ -5294,10 +5506,10 @@ function v2RenderOrgSettings() {
|
|
|
5294
5506
|
</div>
|
|
5295
5507
|
<div><div class="le-lbl">Governance</div>
|
|
5296
5508
|
<select id="os-gov" class="filter-input" style="cursor:pointer">
|
|
5297
|
-
${govs.map(g => `<option ${
|
|
5509
|
+
${govs.map(g => `<option ${govVal === g ? 'selected' : ''}>${esc(g)}</option>`).join('')}
|
|
5298
5510
|
</select>
|
|
5299
5511
|
</div>
|
|
5300
|
-
<div><div class="le-lbl">Budget (tokens)</div><input id="os-budget" class="filter-input" type="number" value="${esc(String(
|
|
5512
|
+
<div><div class="le-lbl">Budget (tokens)</div><input id="os-budget" class="filter-input" type="number" value="${esc(String(budgetVal || ''))}"></div>
|
|
5301
5513
|
<button class="btn" style="width:fit-content;color:var(--accent);border-color:var(--accent)" onclick="generateOrgSettingsCmd()">Generate CLI Command</button>
|
|
5302
5514
|
<div id="os-cmd-out" style="display:none;font-family:var(--mono);font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:6px;padding:10px;word-break:break-all;cursor:pointer;color:var(--text-hi)" title="Click to copy" onclick="navigator.clipboard.writeText(this.textContent).then(()=>showToast('Copied','','ok'))"></div>
|
|
5303
5515
|
</div>`;
|
|
@@ -5519,32 +5731,38 @@ async function v2RenderOrgProjects() {
|
|
|
5519
5731
|
}
|
|
5520
5732
|
|
|
5521
5733
|
// ── SKILLS ─────────────────────────────────────────────────
|
|
5522
|
-
function v2RenderOrgSkills() {
|
|
5734
|
+
async function v2RenderOrgSkills() {
|
|
5523
5735
|
const el = document.getElementById('odt-skills');
|
|
5524
5736
|
if (!el || !_v2OrgData) return;
|
|
5525
5737
|
const roles = Array.isArray(_v2OrgData.roles) ? _v2OrgData.roles : [];
|
|
5526
|
-
if (!roles.length) { el.innerHTML = '<div class="empty">No roles
|
|
5527
|
-
|
|
5528
|
-
|
|
5529
|
-
|
|
5530
|
-
|
|
5531
|
-
|
|
5532
|
-
|
|
5533
|
-
|
|
5534
|
-
|
|
5535
|
-
|
|
5536
|
-
|
|
5537
|
-
|
|
5538
|
-
|
|
5539
|
-
|
|
5540
|
-
|
|
5541
|
-
|
|
5542
|
-
|
|
5543
|
-
|
|
5544
|
-
|
|
5545
|
-
|
|
5546
|
-
|
|
5547
|
-
|
|
5738
|
+
if (!roles.length) { el.innerHTML = '<div class="empty">No roles defined</div>'; return; }
|
|
5739
|
+
el.innerHTML = '<div class="empty">Loading skills…</div>';
|
|
5740
|
+
const org = _v2SelOrg, dirq = DIR ? '?dir=' + encodeURIComponent(DIR) : '';
|
|
5741
|
+
// Enrich each role with expertise + task types from its agent definition (same source as the detail drawer)
|
|
5742
|
+
const enriched = await Promise.all(roles.map(async r => {
|
|
5743
|
+
const expertise = Array.isArray(r.skills) ? r.skills.slice() : [];
|
|
5744
|
+
let taskTypes = [];
|
|
5745
|
+
try {
|
|
5746
|
+
const j = await fetch(`/api/org/${encodeURIComponent(org)}/agent/${encodeURIComponent(r.id)}${dirq}`).then(x => x.ok ? x.json() : null);
|
|
5747
|
+
const cap = j && j.definition && j.definition.capability;
|
|
5748
|
+
if (cap) {
|
|
5749
|
+
(cap.expertise || []).forEach(s => { if (s && !expertise.includes(s)) expertise.push(s); });
|
|
5750
|
+
taskTypes = cap.task_types || [];
|
|
5751
|
+
}
|
|
5752
|
+
} catch (_) {}
|
|
5753
|
+
return { name: r.name || r.title || r.id, type: r.type || r.agent_type || '', expertise, taskTypes };
|
|
5754
|
+
}));
|
|
5755
|
+
if (_v2SelOrg !== org) return; // org switched while fetching
|
|
5756
|
+
el.innerHTML = enriched.map(e => `<div style="padding:10px 0;border-bottom:1px solid var(--border)">
|
|
5757
|
+
<div style="display:flex;align-items:baseline;gap:8px;margin-bottom:6px">
|
|
5758
|
+
<span style="font-size:13px;font-weight:600;color:var(--text-hi)">${esc(e.name)}</span>
|
|
5759
|
+
${e.type ? `<span style="font-size:10px;color:var(--text-lo)">${esc(e.type)}</span>` : ''}
|
|
5760
|
+
</div>
|
|
5761
|
+
${e.expertise.length
|
|
5762
|
+
? `<div style="display:flex;flex-wrap:wrap;gap:5px;${e.taskTypes.length ? 'margin-bottom:6px' : ''}">${e.expertise.map(s => `<span class="oad-chip">${esc(s)}</span>`).join('')}</div>`
|
|
5763
|
+
: '<div style="font-size:11px;color:var(--text-lo)">No skills listed</div>'}
|
|
5764
|
+
${e.taskTypes.length ? `<div style="display:flex;flex-wrap:wrap;gap:5px">${e.taskTypes.map(s => `<span class="oad-chip alt">${esc(s)}</span>`).join('')}</div>` : ''}
|
|
5765
|
+
</div>`).join('');
|
|
5548
5766
|
}
|
|
5549
5767
|
|
|
5550
5768
|
// ── WORKSPACES ─────────────────────────────────────────────
|
|
@@ -8719,10 +8937,11 @@ async function loadMemoriesTab() {
|
|
|
8719
8937
|
const detail = document.getElementById('mem-detail-pane');
|
|
8720
8938
|
if (!_memFiles.length && detail) {
|
|
8721
8939
|
detail.innerHTML = '<div style="color:var(--text-lo);font-size:12px;padding:16px 0;line-height:1.7">'
|
|
8722
|
-
+ '<div style="font-size:13px;color:var(--text-hi);margin-bottom:8px">No
|
|
8723
|
-
+ '
|
|
8724
|
-
+ '
|
|
8725
|
-
+ '
|
|
8940
|
+
+ '<div style="font-size:13px;color:var(--text-hi);margin-bottom:8px">No memories yet</div>'
|
|
8941
|
+
+ 'Memories are <strong>curated</strong> — saved as Markdown files in:<br>'
|
|
8942
|
+
+ '<span style="font-family:var(--mono);font-size:11px;color:var(--accent)">' + esc(data.memDir || '') + '</span><br><br>'
|
|
8943
|
+
+ 'Ask Claude to remember something, or click <span style="font-family:var(--mono);color:var(--accent)">+ New Memory</span> below.<br>'
|
|
8944
|
+
+ 'Entries recorded to the backend memory store also appear here automatically.'
|
|
8726
8945
|
+ '</div>';
|
|
8727
8946
|
}
|
|
8728
8947
|
_renderMemList();
|
|
@@ -8769,15 +8988,21 @@ function selectMem(filename) {
|
|
|
8769
8988
|
.replace(/\*\*(.+?)\*\*/g, (_, g) => '<strong>' + esc(g) + '</strong>')
|
|
8770
8989
|
.replace(/^#{1,3} (.+)/gm, (_, g) => '<div style="font-weight:600;color:var(--text-hi);margin:6px 0 2px">' + esc(g) + '</div>')
|
|
8771
8990
|
.replace(/^- (.+)/gm, (_, g) => '<div style="padding-left:12px">• ' + esc(g) + '</div>');
|
|
8991
|
+
const srcBadge = f.source === 'backend'
|
|
8992
|
+
? '<span class="mem-badge" style="background:var(--text-lo)22;color:var(--text-lo);margin-left:6px" title="Stored in the AgentDB backend store, not as a file">backend</span>'
|
|
8993
|
+
: '';
|
|
8994
|
+
const actions = (f.readonly || f.source === 'backend')
|
|
8995
|
+
? '<div class="mem-actions"><span style="font-size:11px;color:var(--text-lo)">Read-only — stored in the backend memory store (not a file)</span></div>'
|
|
8996
|
+
: '<div class="mem-actions">' +
|
|
8997
|
+
'<button class="btn" onclick="openEditMemModal(' + JSON.stringify(filename) + ')">✎ Edit</button>' +
|
|
8998
|
+
'<button class="btn" style="color:var(--red);border-color:var(--red)" onclick="deleteMem(' + JSON.stringify(filename) + ')">✕ Delete</button>' +
|
|
8999
|
+
'</div>';
|
|
8772
9000
|
detail.innerHTML =
|
|
8773
|
-
'<span class="mem-badge" style="background:' + col + '22;color:' + col + '">' + esc(f.type || '?') + '</span>' +
|
|
9001
|
+
'<span class="mem-badge" style="background:' + col + '22;color:' + col + '">' + esc(f.type || '?') + '</span>' + srcBadge +
|
|
8774
9002
|
'<div style="font-size:15px;font-weight:600;color:var(--text-hi);margin-bottom:4px">' + esc(f.name || filename.replace('.md','')) + '</div>' +
|
|
8775
9003
|
(f.description ? '<div style="font-size:12px;color:var(--text-lo);margin-bottom:12px">' + esc(f.description) + '</div>' : '') +
|
|
8776
9004
|
'<div class="mem-body-render">' + bodyHtml + '</div>' +
|
|
8777
|
-
|
|
8778
|
-
'<button class="btn" onclick="openEditMemModal(' + JSON.stringify(filename) + ')">✎ Edit</button>' +
|
|
8779
|
-
'<button class="btn" style="color:var(--red);border-color:var(--red)" onclick="deleteMem(' + JSON.stringify(filename) + ')">✕ Delete</button>' +
|
|
8780
|
-
'</div>';
|
|
9005
|
+
actions;
|
|
8781
9006
|
}
|
|
8782
9007
|
|
|
8783
9008
|
async function openEditMemModal(filename) {
|