openclaw-node-harness 2.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/LICENSE +21 -0
- package/README.md +184 -0
- package/bin/discord-read.js +228 -0
- package/bin/fleet-deploy.js +365 -0
- package/bin/lane-watchdog.js +232 -0
- package/bin/mesh-agent.js +714 -0
- package/bin/mesh-bridge.js +535 -0
- package/bin/mesh-deploy-listener.js +322 -0
- package/bin/mesh-deploy.js +1048 -0
- package/bin/mesh-health-publisher.js +247 -0
- package/bin/mesh-task-daemon.js +451 -0
- package/bin/mesh-tool-discord.js +293 -0
- package/bin/mesh.js +649 -0
- package/boot/manifest.yaml +187 -0
- package/cli.js +35 -0
- package/config/daemon.json.template +16 -0
- package/config/obsidian-sync.json.template +39 -0
- package/config/openclaw.json.template +124 -0
- package/config/transcript-sources.json.template +22 -0
- package/identity/AGENTS.md +201 -0
- package/identity/CLAUDE.md +64 -0
- package/identity/DELEGATION.md +304 -0
- package/identity/HEARTBEAT.md +163 -0
- package/identity/MEMORY_SPEC.md +368 -0
- package/identity/PRINCIPLES.md +81 -0
- package/identity/SOUL.md +48 -0
- package/identity/TOOLS.md +47 -0
- package/install.sh +895 -0
- package/lib/agent-activity.js +390 -0
- package/lib/kanban-io.js +352 -0
- package/lib/mesh-registry.js +194 -0
- package/lib/mesh-roles.js +13 -0
- package/lib/mesh-tasks.js +306 -0
- package/lib/nats-resolve.js +108 -0
- package/mission-control/README.md +36 -0
- package/mission-control/drizzle/0000_simple_silhouette.sql +62 -0
- package/mission-control/drizzle/meta/0000_snapshot.json +413 -0
- package/mission-control/drizzle/meta/_journal.json +13 -0
- package/mission-control/drizzle.config.ts +13 -0
- package/mission-control/eslint.config.mjs +18 -0
- package/mission-control/next.config.ts +7 -0
- package/mission-control/package-lock.json +10518 -0
- package/mission-control/package.json +49 -0
- package/mission-control/postcss.config.mjs +7 -0
- package/mission-control/public/file.svg +1 -0
- package/mission-control/public/globe.svg +1 -0
- package/mission-control/public/next.svg +1 -0
- package/mission-control/public/vercel.svg +1 -0
- package/mission-control/public/window.svg +1 -0
- package/mission-control/scripts/enrich-descriptions.js +193 -0
- package/mission-control/scripts/gen-chronology.js +102 -0
- package/mission-control/scripts/import-pipeline-v2.js +523 -0
- package/mission-control/scripts/import-pipeline.js +295 -0
- package/mission-control/src/app/api/activity/live/route.ts +27 -0
- package/mission-control/src/app/api/activity/route.ts +47 -0
- package/mission-control/src/app/api/burndown/route.ts +112 -0
- package/mission-control/src/app/api/critical-path/route.ts +159 -0
- package/mission-control/src/app/api/dependencies/route.ts +176 -0
- package/mission-control/src/app/api/memory/categories/route.ts +93 -0
- package/mission-control/src/app/api/memory/consolidate/route.ts +107 -0
- package/mission-control/src/app/api/memory/doc/route.ts +89 -0
- package/mission-control/src/app/api/memory/flush/route.ts +129 -0
- package/mission-control/src/app/api/memory/graph/route.ts +105 -0
- package/mission-control/src/app/api/memory/items/route.ts +86 -0
- package/mission-control/src/app/api/memory/list/route.ts +48 -0
- package/mission-control/src/app/api/memory/retrieve/route.ts +51 -0
- package/mission-control/src/app/api/memory/search/route.ts +143 -0
- package/mission-control/src/app/api/memory/sync/route.ts +23 -0
- package/mission-control/src/app/api/memory/wikilinks/route.ts +75 -0
- package/mission-control/src/app/api/mesh/events/route.ts +67 -0
- package/mission-control/src/app/api/mesh/nodes/route.ts +221 -0
- package/mission-control/src/app/api/mesh/tokens/route.ts +133 -0
- package/mission-control/src/app/api/projects/route.ts +102 -0
- package/mission-control/src/app/api/resolve-path/route.ts +92 -0
- package/mission-control/src/app/api/scheduler/tick/route.ts +38 -0
- package/mission-control/src/app/api/scheduler/waves/route.ts +54 -0
- package/mission-control/src/app/api/screenshot/route.ts +127 -0
- package/mission-control/src/app/api/settings/gateway/route.ts +92 -0
- package/mission-control/src/app/api/skills/[id]/health/route.ts +57 -0
- package/mission-control/src/app/api/skills/list/route.ts +41 -0
- package/mission-control/src/app/api/souls/[id]/evolution/route.ts +253 -0
- package/mission-control/src/app/api/souls/[id]/prompt/route.ts +205 -0
- package/mission-control/src/app/api/souls/[id]/propagate/route.ts +146 -0
- package/mission-control/src/app/api/souls/route.ts +174 -0
- package/mission-control/src/app/api/tasks/[id]/handoff/route.ts +115 -0
- package/mission-control/src/app/api/tasks/[id]/route.ts +266 -0
- package/mission-control/src/app/api/tasks/[id]/tree/route.ts +94 -0
- package/mission-control/src/app/api/tasks/route.ts +253 -0
- package/mission-control/src/app/api/tts/route.ts +47 -0
- package/mission-control/src/app/api/workspace/files/route.ts +88 -0
- package/mission-control/src/app/api/workspace/read/route.ts +73 -0
- package/mission-control/src/app/burndown/page.tsx +309 -0
- package/mission-control/src/app/calendar/page.tsx +839 -0
- package/mission-control/src/app/favicon.ico +0 -0
- package/mission-control/src/app/globals.css +67 -0
- package/mission-control/src/app/graph/page.tsx +352 -0
- package/mission-control/src/app/layout.tsx +35 -0
- package/mission-control/src/app/live/page.tsx +232 -0
- package/mission-control/src/app/memory/page.tsx +154 -0
- package/mission-control/src/app/mesh/page.tsx +457 -0
- package/mission-control/src/app/obsidian/page.tsx +252 -0
- package/mission-control/src/app/page.tsx +70 -0
- package/mission-control/src/app/roadmap/page.tsx +1757 -0
- package/mission-control/src/app/settings/page.tsx +260 -0
- package/mission-control/src/app/souls/page.tsx +573 -0
- package/mission-control/src/components/board/activity-timeline.tsx +96 -0
- package/mission-control/src/components/board/daily-board.tsx +373 -0
- package/mission-control/src/components/board/kanban-board.tsx +364 -0
- package/mission-control/src/components/board/kanban-column.tsx +105 -0
- package/mission-control/src/components/board/live-stream.tsx +116 -0
- package/mission-control/src/components/board/skill-health-card.tsx +128 -0
- package/mission-control/src/components/board/status-banner.tsx +124 -0
- package/mission-control/src/components/board/task-card.tsx +454 -0
- package/mission-control/src/components/board/unified-task-dialog.tsx +1043 -0
- package/mission-control/src/components/layout/resizable-layout.tsx +68 -0
- package/mission-control/src/components/layout/sidebar.tsx +90 -0
- package/mission-control/src/components/live/audio-spectrum.tsx +106 -0
- package/mission-control/src/components/live/chat-bubble.tsx +52 -0
- package/mission-control/src/components/live/chat-input.tsx +92 -0
- package/mission-control/src/components/memory/doc-reader.tsx +172 -0
- package/mission-control/src/components/memory/memory-list.tsx +169 -0
- package/mission-control/src/components/memory/search-bar.tsx +67 -0
- package/mission-control/src/components/memory/search-results.tsx +149 -0
- package/mission-control/src/components/obsidian/backlinks-panel.tsx +52 -0
- package/mission-control/src/components/obsidian/file-tree.tsx +186 -0
- package/mission-control/src/components/obsidian/local-graph.tsx +107 -0
- package/mission-control/src/components/obsidian/obsidian-graph.tsx +192 -0
- package/mission-control/src/components/obsidian/obsidian-reader.tsx +246 -0
- package/mission-control/src/lib/activity.ts +29 -0
- package/mission-control/src/lib/config.ts +21 -0
- package/mission-control/src/lib/db/index.ts +429 -0
- package/mission-control/src/lib/db/schema.ts +218 -0
- package/mission-control/src/lib/gateway-notify.ts +113 -0
- package/mission-control/src/lib/hooks.ts +536 -0
- package/mission-control/src/lib/memory/categories.ts +125 -0
- package/mission-control/src/lib/memory/entities.ts +482 -0
- package/mission-control/src/lib/memory/extract.ts +369 -0
- package/mission-control/src/lib/memory/retrieval.ts +281 -0
- package/mission-control/src/lib/memory/wikilinks.ts +147 -0
- package/mission-control/src/lib/nats.ts +126 -0
- package/mission-control/src/lib/parsers/clawvault-doc.ts +98 -0
- package/mission-control/src/lib/parsers/daily-log.ts +73 -0
- package/mission-control/src/lib/parsers/memory-md.ts +81 -0
- package/mission-control/src/lib/parsers/task-markdown.ts +459 -0
- package/mission-control/src/lib/parsers/transcript.ts +209 -0
- package/mission-control/src/lib/scheduler.ts +394 -0
- package/mission-control/src/lib/speech/use-speech-pipeline.ts +176 -0
- package/mission-control/src/lib/sync/memory.ts +224 -0
- package/mission-control/src/lib/sync/tasks.ts +271 -0
- package/mission-control/src/lib/tts/edge.ts +31 -0
- package/mission-control/src/lib/tts/google.ts +78 -0
- package/mission-control/src/lib/tts/index.ts +39 -0
- package/mission-control/src/lib/tts/types.ts +18 -0
- package/mission-control/tsconfig.json +42 -0
- package/obsidian-vault/.obsidian/app.json +10 -0
- package/obsidian-vault/.obsidian/community-plugins.json +8 -0
- package/obsidian-vault/.obsidian/graph.json +40 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/main.js +58769 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/manifest.json +10 -0
- package/obsidian-vault/.obsidian/plugins/obsidian-local-rest-api/styles.css +47 -0
- package/obsidian-vault/00-meta/.gitkeep +0 -0
- package/obsidian-vault/01-architecture/.gitkeep +0 -0
- package/obsidian-vault/02-smart-contracts/.gitkeep +0 -0
- package/obsidian-vault/03-backend/.gitkeep +0 -0
- package/obsidian-vault/04-mobile/.gitkeep +0 -0
- package/obsidian-vault/05-ar-mapping/.gitkeep +0 -0
- package/obsidian-vault/06-3d-assets/.gitkeep +0 -0
- package/obsidian-vault/07-sound-music/.gitkeep +0 -0
- package/obsidian-vault/08-lore/.gitkeep +0 -0
- package/obsidian-vault/09-quests-playthrough/.gitkeep +0 -0
- package/obsidian-vault/10-economy/.gitkeep +0 -0
- package/obsidian-vault/11-nft-assets/.gitkeep +0 -0
- package/obsidian-vault/12-nft-mechanics/.gitkeep +0 -0
- package/obsidian-vault/13-dao-guild-social/.gitkeep +0 -0
- package/obsidian-vault/14-game-progression/.gitkeep +0 -0
- package/obsidian-vault/15-analytics/.gitkeep +0 -0
- package/obsidian-vault/16-security/.gitkeep +0 -0
- package/obsidian-vault/17-devops/.gitkeep +0 -0
- package/obsidian-vault/18-marketplace/.gitkeep +0 -0
- package/obsidian-vault/19-decisions/.gitkeep +0 -0
- package/obsidian-vault/20-business-strategy/.gitkeep +0 -0
- package/obsidian-vault/21-legal-regulatory/.gitkeep +0 -0
- package/obsidian-vault/nodes/.gitkeep +0 -0
- package/openclaw.env.example +17 -0
- package/package.json +45 -0
- package/services/launchd/ai.openclaw.gateway.plist +59 -0
- package/services/launchd/ai.openclaw.lane-watchdog.plist +32 -0
- package/services/launchd/ai.openclaw.log-rotate.plist +28 -0
- package/services/launchd/ai.openclaw.memory-daemon.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-agent.plist +38 -0
- package/services/launchd/ai.openclaw.mesh-bridge.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-deploy-listener.plist +33 -0
- package/services/launchd/ai.openclaw.mesh-health-publisher.plist +29 -0
- package/services/launchd/ai.openclaw.mesh-task-daemon.plist +36 -0
- package/services/launchd/ai.openclaw.mesh-tool-discord.plist +36 -0
- package/services/launchd/ai.openclaw.mission-control.plist +41 -0
- package/services/service-manifest.json +13 -0
- package/services/systemd/openclaw-gateway.service +21 -0
- package/services/systemd/openclaw-lane-watchdog.service +21 -0
- package/services/systemd/openclaw-log-rotate.service +13 -0
- package/services/systemd/openclaw-log-rotate.timer +9 -0
- package/services/systemd/openclaw-memory-daemon.service +21 -0
- package/services/systemd/openclaw-mesh-agent.service +19 -0
- package/services/systemd/openclaw-mesh-bridge.service +21 -0
- package/services/systemd/openclaw-mesh-deploy-listener.service +23 -0
- package/services/systemd/openclaw-mesh-health-publisher.service +21 -0
- package/services/systemd/openclaw-mesh-task-daemon.service +21 -0
- package/services/systemd/openclaw-mesh-tool-discord.service +21 -0
- package/services/systemd/openclaw-mission-control.service +22 -0
- package/skills/1password/.clawhub/origin.json +7 -0
- package/skills/1password/SKILL.md +63 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/acquisition-channel-advisor/SKILL.md +643 -0
- package/skills/acquisition-channel-advisor/examples/conversation-flow.md +531 -0
- package/skills/agent-browser/.clawhub/origin.json +7 -0
- package/skills/agent-browser/CONTRIBUTING.md +63 -0
- package/skills/agent-browser/SKILL.md +338 -0
- package/skills/agentic-compass/.clawhub/origin.json +7 -0
- package/skills/agentic-compass/README.md +96 -0
- package/skills/agentic-compass/SKILL.md +112 -0
- package/skills/agentic-compass/references/README.md +5 -0
- package/skills/agentic-compass/scripts/agentic-compass.py +196 -0
- package/skills/arcane-dev-ops/SKILL.md +61 -0
- package/skills/arcane-dev-ops/references/checklist.md +22 -0
- package/skills/arcane-dev-ops/references/validation-cases.md +11 -0
- package/skills/arcane-dev-ops/scripts/prepush_check.sh +41 -0
- package/skills/auto-updater/.clawhub/origin.json +7 -0
- package/skills/auto-updater/SKILL.md +158 -0
- package/skills/auto-updater/references/agent-guide.md +152 -0
- package/skills/auto-updater/references/summary-examples.md +109 -0
- package/skills/business-health-diagnostic/SKILL.md +782 -0
- package/skills/byterover/.clawhub/origin.json +7 -0
- package/skills/byterover/SKILL.md +105 -0
- package/skills/byterover/TROUBLESHOOTING.md +50 -0
- package/skills/byterover/WORKFLOWS.md +229 -0
- package/skills/capability-evolver/.clawhub/origin.json +7 -0
- package/skills/capability-evolver/CONTRIBUTING.md +11 -0
- package/skills/capability-evolver/README.md +157 -0
- package/skills/capability-evolver/README.zh-CN.md +112 -0
- package/skills/capability-evolver/SKILL.md +93 -0
- package/skills/capability-evolver/assets/gep/capsules.json +5 -0
- package/skills/capability-evolver/assets/gep/genes.json +104 -0
- package/skills/capability-evolver/index.js +59 -0
- package/skills/capability-evolver/package.json +22 -0
- package/skills/capability-evolver/scripts/analyze_by_skill.js +121 -0
- package/skills/capability-evolver/scripts/build_public.js +350 -0
- package/skills/capability-evolver/scripts/export_history.js +98 -0
- package/skills/capability-evolver/scripts/extract_log.js +85 -0
- package/skills/capability-evolver/scripts/generate_history.js +75 -0
- package/skills/capability-evolver/scripts/human_report.js +147 -0
- package/skills/capability-evolver/scripts/publish_public.js +516 -0
- package/skills/capability-evolver/scripts/suggest_version.js +89 -0
- package/skills/capability-evolver/src/evolve.js +594 -0
- package/skills/capability-evolver/src/gep/assetStore.js +204 -0
- package/skills/capability-evolver/src/gep/candidates.js +134 -0
- package/skills/capability-evolver/src/gep/paths.js +23 -0
- package/skills/capability-evolver/src/gep/prompt.js +254 -0
- package/skills/capability-evolver/src/gep/selector.js +89 -0
- package/skills/capability-evolver/src/gep/signals.js +27 -0
- package/skills/cc-godmode/.clawhub/origin.json +7 -0
- package/skills/cc-godmode/CHANGELOG.md +66 -0
- package/skills/cc-godmode/README.md +293 -0
- package/skills/cc-godmode/SKILL.md +242 -0
- package/skills/cc-godmode/docs/AGENTS.md +332 -0
- package/skills/cc-godmode/docs/MIGRATION.md +206 -0
- package/skills/cc-godmode/docs/TROUBLESHOOTING.md +357 -0
- package/skills/cc-godmode/docs/WORKFLOWS.md +329 -0
- package/skills/cc-godmode/references/agents.md +433 -0
- package/skills/cc-godmode/scripts/build-skill.js +232 -0
- package/skills/clawdbot-filesystem/.clawhub/origin.json +7 -0
- package/skills/clawdbot-filesystem/LICENSE.md +21 -0
- package/skills/clawdbot-filesystem/README.md +322 -0
- package/skills/clawdbot-filesystem/SKILL.md +219 -0
- package/skills/clawdbot-filesystem/config.json +41 -0
- package/skills/clawdbot-filesystem/package.json +69 -0
- package/skills/clawdbot-security-check/.clawhub/origin.json +7 -0
- package/skills/clawdbot-security-check/README.md +168 -0
- package/skills/clawdbot-security-check/SKILL.md +145 -0
- package/skills/clawdbot-security-check/references/audit-checks.md +521 -0
- package/skills/clawdbot-security-check/skill.json +42 -0
- package/skills/clawddocs/.clawhub/origin.json +7 -0
- package/skills/clawddocs/SKILL.md +176 -0
- package/skills/clawddocs/package.json +9 -0
- package/skills/clawddocs/scripts/build-index.sh +17 -0
- package/skills/clawddocs/scripts/cache.sh +13 -0
- package/skills/clawddocs/scripts/fetch-doc.sh +7 -0
- package/skills/clawddocs/scripts/recent.sh +5 -0
- package/skills/clawddocs/scripts/search.sh +8 -0
- package/skills/clawddocs/scripts/sitemap.sh +23 -0
- package/skills/clawddocs/scripts/track-changes.sh +16 -0
- package/skills/clawddocs/snippets/common-configs.md +69 -0
- package/skills/clawguard/.clawhub/origin.json +7 -0
- package/skills/clawguard/SKILL.md +137 -0
- package/skills/company-research/SKILL.md +393 -0
- package/skills/company-research/examples/sample.md +164 -0
- package/skills/company-research/template.md +60 -0
- package/skills/crypto-price/.clawhub/origin.json +7 -0
- package/skills/crypto-price/ARCHITECTURE.md +437 -0
- package/skills/crypto-price/README.md +194 -0
- package/skills/crypto-price/SKILL.md +61 -0
- package/skills/crypto-price/requirements.txt +1 -0
- package/skills/crypto-price/scripts/get_price_chart.py +988 -0
- package/skills/customer-journey-map/SKILL.md +343 -0
- package/skills/customer-journey-map/examples/sample.md +33 -0
- package/skills/customer-journey-map/template.md +28 -0
- package/skills/customer-journey-mapping-workshop/SKILL.md +522 -0
- package/skills/deep-research/.clawhub/origin.json +7 -0
- package/skills/deep-research/SKILL.md +93 -0
- package/skills/deep-research/rules/logic.md +32 -0
- package/skills/discord-telegram-triage/SKILL.md +59 -0
- package/skills/discord-telegram-triage/references/discord-runbook.md +28 -0
- package/skills/discord-telegram-triage/references/validation-cases.md +11 -0
- package/skills/discord-telegram-triage/scripts/triage_snapshot.sh +23 -0
- package/skills/discovery-interview-prep/SKILL.md +408 -0
- package/skills/discovery-process/SKILL.md +503 -0
- package/skills/discovery-process/examples/sample.md +60 -0
- package/skills/discovery-process/template.md +39 -0
- package/skills/dist/arcane-dev-ops.skill +0 -0
- package/skills/dist/discord-telegram-triage.skill +0 -0
- package/skills/dist/founder-brief-summarizer.skill +0 -0
- package/skills/epic-breakdown-advisor/SKILL.md +664 -0
- package/skills/epic-hypothesis/SKILL.md +285 -0
- package/skills/epic-hypothesis/examples/sample.md +104 -0
- package/skills/epic-hypothesis/template.md +30 -0
- package/skills/excel/.clawhub/origin.json +7 -0
- package/skills/excel/SKILL.md +332 -0
- package/skills/excel/scripts/excel.py +1120 -0
- package/skills/fast-browser-use/.clawhub/origin.json +7 -0
- package/skills/fast-browser-use/CODEBUDDY.md +142 -0
- package/skills/fast-browser-use/Cargo.toml +77 -0
- package/skills/fast-browser-use/README.md +62 -0
- package/skills/fast-browser-use/SKILL.md +217 -0
- package/skills/fast-browser-use/package-lock.json +28 -0
- package/skills/fast-browser-use/package.json +8 -0
- package/skills/fast-browser-use/rustfmt.toml +10 -0
- package/skills/fast-browser-use/src/bin/cli.rs +373 -0
- package/skills/fast-browser-use/src/bin/mcp_server.rs +203 -0
- package/skills/fast-browser-use/src/browser/config.rs +136 -0
- package/skills/fast-browser-use/src/browser/debug.rs +16 -0
- package/skills/fast-browser-use/src/browser/mod.rs +61 -0
- package/skills/fast-browser-use/src/browser/session.rs +478 -0
- package/skills/fast-browser-use/src/dom/element.rs +442 -0
- package/skills/fast-browser-use/src/dom/extract_dom.js +849 -0
- package/skills/fast-browser-use/src/dom/mod.rs +14 -0
- package/skills/fast-browser-use/src/dom/tree.rs +296 -0
- package/skills/fast-browser-use/src/dom/yaml.rs +149 -0
- package/skills/fast-browser-use/src/error.rs +115 -0
- package/skills/fast-browser-use/src/lib.rs +17 -0
- package/skills/fast-browser-use/src/mcp/handler.rs +63 -0
- package/skills/fast-browser-use/src/mcp/mod.rs +81 -0
- package/skills/fast-browser-use/src/tools/Readability.min.js +1480 -0
- package/skills/fast-browser-use/src/tools/annotate.rs +165 -0
- package/skills/fast-browser-use/src/tools/click.rs +84 -0
- package/skills/fast-browser-use/src/tools/close.rs +35 -0
- package/skills/fast-browser-use/src/tools/close_tab.rs +45 -0
- package/skills/fast-browser-use/src/tools/convert_to_markdown.js +117 -0
- package/skills/fast-browser-use/src/tools/cookies.rs +58 -0
- package/skills/fast-browser-use/src/tools/debug.rs +44 -0
- package/skills/fast-browser-use/src/tools/evaluate.rs +40 -0
- package/skills/fast-browser-use/src/tools/extract.rs +66 -0
- package/skills/fast-browser-use/src/tools/go_back.rs +35 -0
- package/skills/fast-browser-use/src/tools/go_forward.rs +35 -0
- package/skills/fast-browser-use/src/tools/hover.js +33 -0
- package/skills/fast-browser-use/src/tools/hover.rs +97 -0
- package/skills/fast-browser-use/src/tools/html_to_markdown.rs +99 -0
- package/skills/fast-browser-use/src/tools/input.rs +93 -0
- package/skills/fast-browser-use/src/tools/local_storage.rs +159 -0
- package/skills/fast-browser-use/src/tools/markdown.rs +181 -0
- package/skills/fast-browser-use/src/tools/mod.rs +326 -0
- package/skills/fast-browser-use/src/tools/navigate.rs +55 -0
- package/skills/fast-browser-use/src/tools/new_tab.rs +60 -0
- package/skills/fast-browser-use/src/tools/press_key.rs +78 -0
- package/skills/fast-browser-use/src/tools/read_links.rs +59 -0
- package/skills/fast-browser-use/src/tools/readability_script.rs +8 -0
- package/skills/fast-browser-use/src/tools/screenshot.rs +47 -0
- package/skills/fast-browser-use/src/tools/scroll.js +22 -0
- package/skills/fast-browser-use/src/tools/scroll.rs +95 -0
- package/skills/fast-browser-use/src/tools/select.js +23 -0
- package/skills/fast-browser-use/src/tools/select.rs +129 -0
- package/skills/fast-browser-use/src/tools/sitemap.rs +426 -0
- package/skills/fast-browser-use/src/tools/snapshot.rs +324 -0
- package/skills/fast-browser-use/src/tools/switch_tab.rs +69 -0
- package/skills/fast-browser-use/src/tools/tab_list.rs +76 -0
- package/skills/fast-browser-use/src/tools/utils.rs +92 -0
- package/skills/fast-browser-use/src/tools/wait.rs +53 -0
- package/skills/fast-browser-use/test_auth.json +3 -0
- package/skills/fast-browser-use/test_state.json +6 -0
- package/skills/fast-browser-use/tests/browser_tools_integration.rs +233 -0
- package/skills/fast-browser-use/tests/cli_recipes_integration.rs +112 -0
- package/skills/fast-browser-use/tests/cookies_integration.rs +56 -0
- package/skills/fast-browser-use/tests/debug_integration.rs +83 -0
- package/skills/fast-browser-use/tests/dom_integration.rs +170 -0
- package/skills/fast-browser-use/tests/local_storage_integration.rs +75 -0
- package/skills/fast-browser-use/tests/markdown_integration.rs +448 -0
- package/skills/fast-browser-use/tests/navigation_integration.rs +241 -0
- package/skills/fast-browser-use/tests/sitemap_integration.rs +326 -0
- package/skills/fast-browser-use/tests/tab_management_integration.rs +300 -0
- package/skills/feature-investment-advisor/SKILL.md +639 -0
- package/skills/feature-investment-advisor/examples/conversation-flow.md +538 -0
- package/skills/finance-based-pricing-advisor/SKILL.md +763 -0
- package/skills/finance-metrics-quickref/SKILL.md +309 -0
- package/skills/find-skills/.clawhub/origin.json +7 -0
- package/skills/find-skills/SKILL.md +143 -0
- package/skills/flavor-text-writer/SKILL.md +27 -0
- package/skills/founder-brief-summarizer/SKILL.md +52 -0
- package/skills/founder-brief-summarizer/references/response-templates.md +15 -0
- package/skills/founder-brief-summarizer/references/validation-cases.md +11 -0
- package/skills/founder-brief-summarizer/scripts/brief_template.sh +28 -0
- package/skills/frontend-design/.clawhub/origin.json +7 -0
- package/skills/frontend-design/LICENSE.txt +190 -0
- package/skills/frontend-design/SKILL.md +53 -0
- package/skills/gemini/.clawhub/origin.json +7 -0
- package/skills/gemini/SKILL.md +33 -0
- package/skills/gemini-deep-research/.clawhub/origin.json +7 -0
- package/skills/gemini-deep-research/SKILL.md +78 -0
- package/skills/gemini-deep-research/scripts/deep_research.py +176 -0
- package/skills/git-essentials/.clawhub/origin.json +7 -0
- package/skills/git-essentials/SKILL.md +239 -0
- package/skills/git-essentials/references/advanced.md +211 -0
- package/skills/github/.clawhub/origin.json +7 -0
- package/skills/github/SKILL.md +57 -0
- package/skills/google-drive/.clawhub/origin.json +7 -0
- package/skills/google-drive/LICENSE.txt +21 -0
- package/skills/google-drive/SKILL.md +320 -0
- package/skills/growth-loop/SKILL.md +270 -0
- package/skills/growth-loop/_meta.json +9 -0
- package/skills/growth-loop/references/diagnosis-framework.md +84 -0
- package/skills/growth-loop/references/platform-benchmarks.md +79 -0
- package/skills/growth-loop/scripts/init-campaign.sh +274 -0
- package/skills/humanize-ai-text/.clawhub/origin.json +7 -0
- package/skills/humanize-ai-text/SKILL.md +192 -0
- package/skills/humanize-ai-text/scripts/compare.py +58 -0
- package/skills/humanize-ai-text/scripts/detect.py +160 -0
- package/skills/humanize-ai-text/scripts/patterns.json +191 -0
- package/skills/humanize-ai-text/scripts/transform.py +127 -0
- package/skills/humanizer/.clawhub/origin.json +7 -0
- package/skills/humanizer/README.md +82 -0
- package/skills/humanizer/SKILL.md +443 -0
- package/skills/jobs-to-be-done/SKILL.md +378 -0
- package/skills/jobs-to-be-done/examples/sample.md +80 -0
- package/skills/jobs-to-be-done/template.md +65 -0
- package/skills/lean-ux-canvas/SKILL.md +561 -0
- package/skills/lean-ux-canvas/examples/sample.md +88 -0
- package/skills/lean-ux-canvas/template.md +32 -0
- package/skills/markdown-formatter/.clawhub/origin.json +7 -0
- package/skills/markdown-formatter/README.md +137 -0
- package/skills/markdown-formatter/SKILL.md +369 -0
- package/skills/markdown-formatter/config.json +20 -0
- package/skills/markdown-formatter/index.js +439 -0
- package/skills/markdown-formatter/package.json +23 -0
- package/skills/markdown-formatter/test.js +23 -0
- package/skills/marketing-mode/.clawhub/origin.json +7 -0
- package/skills/marketing-mode/README.md +49 -0
- package/skills/marketing-mode/SKILL.md +703 -0
- package/skills/marketing-mode/mode-prompt.md +39 -0
- package/skills/marketing-mode/skill.json +51 -0
- package/skills/memory-hygiene/.clawhub/origin.json +7 -0
- package/skills/memory-hygiene/SKILL.md +91 -0
- package/skills/memory-setup/.clawhub/origin.json +7 -0
- package/skills/memory-setup/SKILL.md +180 -0
- package/skills/memorylayer/.clawhub/origin.json +7 -0
- package/skills/memorylayer/README.md +197 -0
- package/skills/memorylayer/SKILL.md +227 -0
- package/skills/memorylayer/examples/agent-integration.js +145 -0
- package/skills/memorylayer/examples/basic-usage.js +87 -0
- package/skills/memorylayer/examples/token-savings-demo.js +183 -0
- package/skills/memorylayer/index.js +115 -0
- package/skills/memorylayer/package-lock.json +295 -0
- package/skills/memorylayer/package.json +27 -0
- package/skills/memorylayer/python/memorylayer_skill.py +230 -0
- package/skills/memorylayer/python/requirements.txt +7 -0
- package/skills/mesh/SKILL.md +184 -0
- package/skills/model-usage/.clawhub/origin.json +7 -0
- package/skills/model-usage/SKILL.md +54 -0
- package/skills/model-usage/references/codexbar-cli.md +28 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/moltbook-interact/.clawhub/origin.json +7 -0
- package/skills/moltbook-interact/INSTALL.md +139 -0
- package/skills/moltbook-interact/README.md +198 -0
- package/skills/moltbook-interact/SKILL.md +72 -0
- package/skills/moltbook-interact/references/api.md +106 -0
- package/skills/moltbook-interact/scripts/moltbook.sh +142 -0
- package/skills/moltbook-registry/.clawhub/origin.json +7 -0
- package/skills/moltbook-registry/README.md +26 -0
- package/skills/moltbook-registry/SKILL.md +82 -0
- package/skills/moltbook-registry/index.js +180 -0
- package/skills/moltbook-registry/package.json +11 -0
- package/skills/mythril-scanner/SKILL.md +27 -0
- package/skills/n8n/.clawhub/origin.json +7 -0
- package/skills/n8n/SKILL.md +141 -0
- package/skills/n8n/references/api.md +156 -0
- package/skills/n8n/scripts/n8n_api.py +158 -0
- package/skills/n8n-workflow-automation/.clawhub/origin.json +7 -0
- package/skills/n8n-workflow-automation/SKILL.md +103 -0
- package/skills/n8n-workflow-automation/assets/runbook-template.md +32 -0
- package/skills/narrative-designer/SKILL.md +27 -0
- package/skills/ontology/.clawhub/origin.json +7 -0
- package/skills/ontology/SKILL.md +236 -0
- package/skills/ontology/references/queries.md +211 -0
- package/skills/ontology/references/schema.md +322 -0
- package/skills/ontology/scripts/ontology.py +374 -0
- package/skills/openai-image-gen/.clawhub/origin.json +7 -0
- package/skills/openai-image-gen/SKILL.md +45 -0
- package/skills/openai-image-gen/scripts/gen.py +227 -0
- package/skills/openclaw-agent-optimize/.clawhub/origin.json +7 -0
- package/skills/openclaw-agent-optimize/SKILL.md +33 -0
- package/skills/openclaw-agent-optimize/references/agent-orchestration.md +20 -0
- package/skills/openclaw-agent-optimize/references/context-management.md +15 -0
- package/skills/openclaw-agent-optimize/references/continuous-learning.md +14 -0
- package/skills/openclaw-agent-optimize/references/cron-optimization.md +16 -0
- package/skills/openclaw-agent-optimize/references/memory-patterns.md +14 -0
- package/skills/openclaw-agent-optimize/references/model-selection.md +18 -0
- package/skills/openclaw-skill-scanner/.clawhub/origin.json +7 -0
- package/skills/openclaw-skill-scanner/SKILL.md +88 -0
- package/skills/openclaw-skill-scanner/install-hook.sh +294 -0
- package/skills/openclaw-skill-scanner/report-template.md +53 -0
- package/skills/openclaw-skill-scanner/scanner.py +929 -0
- package/skills/openclaw-skill-scanner/whitelist.json +18 -0
- package/skills/opportunity-solution-tree/SKILL.md +428 -0
- package/skills/opportunity-solution-tree/examples/sample.md +104 -0
- package/skills/opportunity-solution-tree/template.md +33 -0
- package/skills/pdf/.clawhub/origin.json +7 -0
- package/skills/pdf/SKILL.md +304 -0
- package/skills/pestel-analysis/SKILL.md +384 -0
- package/skills/pestel-analysis/examples/sample.md +143 -0
- package/skills/pestel-analysis/template.md +53 -0
- package/skills/pol-probe/SKILL.md +217 -0
- package/skills/pol-probe/examples/sample.md +136 -0
- package/skills/pol-probe/template.md +59 -0
- package/skills/pol-probe-advisor/SKILL.md +492 -0
- package/skills/positioning-statement/SKILL.md +229 -0
- package/skills/positioning-statement/examples/sample.md +51 -0
- package/skills/positioning-statement/template.md +25 -0
- package/skills/positioning-workshop/SKILL.md +424 -0
- package/skills/prd-development/SKILL.md +654 -0
- package/skills/prd-development/examples/sample.md +43 -0
- package/skills/prd-development/template.md +55 -0
- package/skills/press-release/SKILL.md +277 -0
- package/skills/press-release/examples/sample.md +73 -0
- package/skills/press-release/template.md +39 -0
- package/skills/prioritization-advisor/SKILL.md +451 -0
- package/skills/proactive-messages/.clawhub/origin.json +7 -0
- package/skills/proactive-messages/SKILL.md +91 -0
- package/skills/problem-framing-canvas/SKILL.md +466 -0
- package/skills/problem-framing-canvas/examples/sample.md +58 -0
- package/skills/problem-framing-canvas/template.md +22 -0
- package/skills/problem-statement/SKILL.md +255 -0
- package/skills/problem-statement/examples/sample.md +82 -0
- package/skills/problem-statement/template.md +37 -0
- package/skills/product-strategy-session/SKILL.md +434 -0
- package/skills/product-strategy-session/examples/sample.md +67 -0
- package/skills/product-strategy-session/template.md +38 -0
- package/skills/prompt-guard/.clawhub/origin.json +7 -0
- package/skills/prompt-guard/ARCHITECTURE.md +364 -0
- package/skills/prompt-guard/CHANGELOG.md +200 -0
- package/skills/prompt-guard/README.md +215 -0
- package/skills/prompt-guard/SECURITY.md +66 -0
- package/skills/prompt-guard/SKILL.md +174 -0
- package/skills/prompt-guard/blog/how-i-secured-my-ai-agent.md +185 -0
- package/skills/prompt-guard/config.example.yaml +56 -0
- package/skills/prompt-guard/references/detection-patterns.md +298 -0
- package/skills/prompt-guard/requirements.txt +1 -0
- package/skills/prompt-guard/scripts/analyze_log.py +224 -0
- package/skills/prompt-guard/scripts/audit.py +344 -0
- package/skills/prompt-guard/scripts/detect.py +1587 -0
- package/skills/prompt-guard/scripts/hivefence.py +345 -0
- package/skills/proto-persona/SKILL.md +336 -0
- package/skills/proto-persona/examples/sample.md +97 -0
- package/skills/proto-persona/template.md +45 -0
- package/skills/recommendation-canvas/SKILL.md +382 -0
- package/skills/recommendation-canvas/examples/sample.md +94 -0
- package/skills/recommendation-canvas/template.md +86 -0
- package/skills/refactor-suggest/.clawhub/origin.json +7 -0
- package/skills/refactor-suggest/SKILL.md +94 -0
- package/skills/roadmap-planning/SKILL.md +506 -0
- package/skills/roadmap-planning/examples/sample.md +62 -0
- package/skills/roadmap-planning/template.md +30 -0
- package/skills/saas-economics-efficiency-metrics/SKILL.md +694 -0
- package/skills/saas-economics-efficiency-metrics/examples/cash-trap.md +365 -0
- package/skills/saas-economics-efficiency-metrics/examples/healthy-unit-economics.md +279 -0
- package/skills/saas-economics-efficiency-metrics/template.md +263 -0
- package/skills/saas-revenue-growth-metrics/SKILL.md +629 -0
- package/skills/saas-revenue-growth-metrics/examples/healthy-saas.md +131 -0
- package/skills/saas-revenue-growth-metrics/examples/warning-signs.md +229 -0
- package/skills/saas-revenue-growth-metrics/template.md +192 -0
- package/skills/save-money/.clawhub/origin.json +7 -0
- package/skills/save-money/SKILL.md +173 -0
- package/skills/scripts/golden_skills_v3.sh +32 -0
- package/skills/search/.clawhub/origin.json +7 -0
- package/skills/search/SKILL.md +18 -0
- package/skills/search/skill.json +1 -0
- package/skills/second-brain/.clawhub/origin.json +7 -0
- package/skills/second-brain/SKILL.md +278 -0
- package/skills/second-brain/scripts/ensue-api.sh +37 -0
- package/skills/self-improving-agent/.clawhub/origin.json +7 -0
- package/skills/self-improving-agent/.learnings/ERRORS.md +5 -0
- package/skills/self-improving-agent/.learnings/FEATURE_REQUESTS.md +5 -0
- package/skills/self-improving-agent/.learnings/LEARNINGS.md +5 -0
- package/skills/self-improving-agent/SKILL.md +130 -0
- package/skills/self-improving-agent/assets/LEARNINGS.md +45 -0
- package/skills/self-improving-agent/assets/SKILL-TEMPLATE.md +177 -0
- package/skills/self-improving-agent/hooks/openclaw/HOOK.md +23 -0
- package/skills/self-improving-agent/hooks/openclaw/handler.js +56 -0
- package/skills/self-improving-agent/hooks/openclaw/handler.ts +62 -0
- package/skills/self-improving-agent/references/examples.md +374 -0
- package/skills/self-improving-agent/references/hooks-setup.md +223 -0
- package/skills/self-improving-agent/references/openclaw-integration.md +248 -0
- package/skills/self-improving-agent/references/templates.md +480 -0
- package/skills/self-improving-agent/scripts/activator.sh +20 -0
- package/skills/self-improving-agent/scripts/error-detector.sh +55 -0
- package/skills/self-improving-agent/scripts/extract-skill.sh +203 -0
- package/skills/self-improving-agent-1-0-2/.clawhub/origin.json +7 -0
- package/skills/self-improving-agent-1-0-2/SKILL.md +562 -0
- package/skills/self-improving-agent-1-0-2/assets/LEARNINGS.md +45 -0
- package/skills/self-improving-agent-1-0-2/assets/SKILL-TEMPLATE.md +182 -0
- package/skills/self-improving-agent-1-0-2/references/clawdbot-integration.md +311 -0
- package/skills/self-improving-agent-1-0-2/references/examples.md +374 -0
- package/skills/self-improving-agent-1-0-2/references/hooks-setup.md +223 -0
- package/skills/self-improving-agent-1-0-2/scripts/activator.sh +20 -0
- package/skills/self-improving-agent-1-0-2/scripts/error-detector.sh +55 -0
- package/skills/self-improving-agent-1-0-2/scripts/extract-skill.sh +203 -0
- package/skills/self-love-confidence/.clawhub/origin.json +7 -0
- package/skills/self-love-confidence/SKILL.md +79 -0
- package/skills/self-reflection/.clawhub/origin.json +7 -0
- package/skills/self-reflection/README.md +292 -0
- package/skills/self-reflection/SKILL.md +110 -0
- package/skills/self-reflection/self-reflection.example.json +6 -0
- package/skills/slither-analyzer/SKILL.md +27 -0
- package/skills/solidity-audit/SKILL.md +27 -0
- package/skills/soulcraft/.clawhub/origin.json +7 -0
- package/skills/soulcraft/README.md +123 -0
- package/skills/soulcraft/SKILL.md +340 -0
- package/skills/soulcraft/references/question-bank.md +154 -0
- package/skills/soulcraft/references/soul-examples.md +207 -0
- package/skills/soulcraft/research/RESEARCH_REPORT.md +317 -0
- package/skills/spotify-player/.clawhub/origin.json +7 -0
- package/skills/spotify-player/SKILL.md +44 -0
- package/skills/storyboard/SKILL.md +259 -0
- package/skills/storyboard/examples/sample.md +71 -0
- package/skills/storyboard/template.md +41 -0
- package/skills/summarize/.clawhub/origin.json +7 -0
- package/skills/summarize/SKILL.md +59 -0
- package/skills/superdesign/.clawhub/origin.json +7 -0
- package/skills/superdesign/SKILL.md +224 -0
- package/skills/tam-sam-som-calculator/SKILL.md +399 -0
- package/skills/tam-sam-som-calculator/examples/sample.md +142 -0
- package/skills/tam-sam-som-calculator/scripts/market-sizing.py +95 -0
- package/skills/tam-sam-som-calculator/template.md +35 -0
- package/skills/tavily-search/.clawhub/origin.json +7 -0
- package/skills/tavily-search/SKILL.md +49 -0
- package/skills/tavily-search/scripts/extract.mjs +59 -0
- package/skills/tavily-search/scripts/search.mjs +101 -0
- package/skills/twitter/SKILL.md +74 -0
- package/skills/twitter/_meta.json +9 -0
- package/skills/twitter/references/validation-cases.md +53 -0
- package/skills/twitter/scripts/twitter.sh +421 -0
- package/skills/ui-ux-pro-max/.clawhub/origin.json +7 -0
- package/skills/ui-ux-pro-max/SKILL.md +54 -0
- package/skills/ui-ux-pro-max/assets/data/charts.csv +26 -0
- package/skills/ui-ux-pro-max/assets/data/colors.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/icons.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/landing.csv +31 -0
- package/skills/ui-ux-pro-max/assets/data/products.csv +97 -0
- package/skills/ui-ux-pro-max/assets/data/react-performance.csv +45 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/astro.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/flutter.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/html-tailwind.csv +56 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/jetpack-compose.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nextjs.csv +53 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxt-ui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/nuxtjs.csv +59 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react-native.csv +52 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/react.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/shadcn.csv +61 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/svelte.csv +54 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/swiftui.csv +51 -0
- package/skills/ui-ux-pro-max/assets/data/stacks/vue.csv +50 -0
- package/skills/ui-ux-pro-max/assets/data/styles.csv +68 -0
- package/skills/ui-ux-pro-max/assets/data/typography.csv +58 -0
- package/skills/ui-ux-pro-max/assets/data/ui-reasoning.csv +101 -0
- package/skills/ui-ux-pro-max/assets/data/ux-guidelines.csv +100 -0
- package/skills/ui-ux-pro-max/assets/data/web-interface.csv +31 -0
- package/skills/ui-ux-pro-max/references/upstream-README.md +488 -0
- package/skills/ui-ux-pro-max/references/upstream-skill-content.md +288 -0
- package/skills/ui-ux-pro-max/scripts/__init__.py +0 -0
- package/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/skills/ui-ux-pro-max/scripts/design_system.py +1071 -0
- package/skills/ui-ux-pro-max/scripts/search.py +111 -0
- package/skills/user-story/SKILL.md +272 -0
- package/skills/user-story/examples/sample.md +110 -0
- package/skills/user-story/scripts/user-story-template.py +65 -0
- package/skills/user-story/template.md +32 -0
- package/skills/user-story-mapping/SKILL.md +296 -0
- package/skills/user-story-mapping/examples/sample.md +77 -0
- package/skills/user-story-mapping/template.md +41 -0
- package/skills/user-story-mapping-workshop/SKILL.md +485 -0
- package/skills/user-story-mapping-workshop/template.md +28 -0
- package/skills/user-story-splitting/SKILL.md +313 -0
- package/skills/user-story-splitting/examples/sample.md +147 -0
- package/skills/user-story-splitting/template.md +37 -0
- package/skills/wacli/.clawhub/origin.json +7 -0
- package/skills/wacli/SKILL.md +53 -0
- package/skills/web-search/.clawhub/origin.json +7 -0
- package/skills/web-search/SKILL.md +151 -0
- package/skills/web-search/references/api-details.md +207 -0
- package/skills/web-search/scripts/search.py +576 -0
- package/skills/workshop-facilitation/SKILL.md +88 -0
- package/skills/world-builder/SKILL.md +27 -0
- package/souls/blockchain-auditor/PRINCIPLES.md +75 -0
- package/souls/blockchain-auditor/SOUL.md +56 -0
- package/souls/blockchain-auditor/capabilities.json +33 -0
- package/souls/blockchain-auditor/evolution/capsules.json +4 -0
- package/souls/blockchain-auditor/evolution/events.jsonl +1 -0
- package/souls/blockchain-auditor/evolution/genes.json +62 -0
- package/souls/daedalus/PRINCIPLES.md +78 -0
- package/souls/daedalus/SOUL.md +48 -0
- package/souls/daedalus/capabilities.json +46 -0
- package/souls/identity-architect/PRINCIPLES.md +83 -0
- package/souls/identity-architect/SOUL.md +66 -0
- package/souls/identity-architect/capabilities.json +38 -0
- package/souls/identity-architect/evolution/capsules.json +4 -0
- package/souls/identity-architect/evolution/events.jsonl +0 -0
- package/souls/identity-architect/evolution/genes.json +4 -0
- package/souls/infra-ops/PRINCIPLES.md +77 -0
- package/souls/infra-ops/SOUL.md +56 -0
- package/souls/infra-ops/capabilities.json +33 -0
- package/souls/infra-ops/evolution/capsules.json +4 -0
- package/souls/infra-ops/evolution/events.jsonl +0 -0
- package/souls/infra-ops/evolution/genes.json +4 -0
- package/souls/lore-writer/PRINCIPLES.md +74 -0
- package/souls/lore-writer/SOUL.md +54 -0
- package/souls/lore-writer/capabilities.json +37 -0
- package/souls/lore-writer/evolution/capsules.json +4 -0
- package/souls/lore-writer/evolution/events.jsonl +0 -0
- package/souls/lore-writer/evolution/genes.json +4 -0
- package/souls/qa-evidence/PRINCIPLES.md +97 -0
- package/souls/qa-evidence/SOUL.md +66 -0
- package/souls/qa-evidence/capabilities.json +32 -0
- package/souls/qa-evidence/evolution/capsules.json +4 -0
- package/souls/qa-evidence/evolution/events.jsonl +0 -0
- package/souls/qa-evidence/evolution/genes.json +4 -0
- package/souls/registry.json +211 -0
- package/souls/sync-registry.js +65 -0
- package/uninstall.sh +102 -0
- package/workspace-bin/auto-checkpoint +60 -0
- package/workspace-bin/clawvault-access-control +65 -0
- package/workspace-bin/clawvault-local +28 -0
- package/workspace-bin/compile-boot +494 -0
- package/workspace-bin/daily-log-writer.mjs +251 -0
- package/workspace-bin/evolve +540 -0
- package/workspace-bin/fitness_score.py +395 -0
- package/workspace-bin/hooks/pre-commit +80 -0
- package/workspace-bin/install-daemon +299 -0
- package/workspace-bin/lane-watchdog.js +232 -0
- package/workspace-bin/lib/__init__.py +0 -0
- package/workspace-bin/lib/frontmatter.py +114 -0
- package/workspace-bin/memory-daemon.mjs +879 -0
- package/workspace-bin/memory-maintenance.mjs +531 -0
- package/workspace-bin/mesh-bridge.mjs +154 -0
- package/workspace-bin/multi-review +130 -0
- package/workspace-bin/obsidian +125 -0
- package/workspace-bin/obsidian-sync.mjs +888 -0
- package/workspace-bin/openclaw-register-source +102 -0
- package/workspace-bin/proactive-scan +147 -0
- package/workspace-bin/quality-gate +175 -0
- package/workspace-bin/screenshot +96 -0
- package/workspace-bin/session-recap +453 -0
- package/workspace-bin/skill-audit +494 -0
- package/workspace-bin/skill-quality-check +134 -0
- package/workspace-bin/skill-routing-eval +599 -0
- package/workspace-bin/soul-prompt +251 -0
- package/workspace-bin/subagent-audit.mjs +267 -0
- package/workspace-bin/test-multi-soul-workflow +130 -0
- package/workspace-bin/trust-registry +465 -0
- package/workspace-docs/AGENTS.md +201 -0
- package/workspace-docs/CLAUDE.md +64 -0
- package/workspace-docs/PRINCIPLES.md +81 -0
- package/workspace-docs/SOUL.md +48 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
3
|
+
import * as schema from "./schema";
|
|
4
|
+
import { DB_PATH } from "../config";
|
|
5
|
+
import fs from "fs";
|
|
6
|
+
import path from "path";
|
|
7
|
+
|
|
8
|
+
let _db: ReturnType<typeof drizzle<typeof schema>> | null = null;
|
|
9
|
+
let _sqlite: Database.Database | null = null;
|
|
10
|
+
|
|
11
|
+
function ensureDataDir() {
|
|
12
|
+
const dir = path.dirname(DB_PATH);
|
|
13
|
+
if (!fs.existsSync(dir)) {
|
|
14
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function runMigrations(sqlite: Database.Database) {
|
|
19
|
+
sqlite.exec(`
|
|
20
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
21
|
+
id TEXT PRIMARY KEY,
|
|
22
|
+
title TEXT NOT NULL,
|
|
23
|
+
status TEXT NOT NULL,
|
|
24
|
+
kanban_column TEXT NOT NULL,
|
|
25
|
+
owner TEXT,
|
|
26
|
+
success_criteria TEXT,
|
|
27
|
+
artifacts TEXT,
|
|
28
|
+
next_action TEXT,
|
|
29
|
+
updated_at TEXT NOT NULL,
|
|
30
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
31
|
+
sort_order INTEGER DEFAULT 0
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS memory_docs (
|
|
35
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
36
|
+
source TEXT NOT NULL,
|
|
37
|
+
category TEXT,
|
|
38
|
+
file_path TEXT NOT NULL UNIQUE,
|
|
39
|
+
title TEXT,
|
|
40
|
+
date TEXT,
|
|
41
|
+
frontmatter TEXT,
|
|
42
|
+
content TEXT NOT NULL,
|
|
43
|
+
modified_at TEXT,
|
|
44
|
+
indexed_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
CREATE TABLE IF NOT EXISTS activity_log (
|
|
48
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
49
|
+
event_type TEXT NOT NULL,
|
|
50
|
+
task_id TEXT,
|
|
51
|
+
description TEXT NOT NULL,
|
|
52
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memory_fts USING fts5(
|
|
56
|
+
title,
|
|
57
|
+
content,
|
|
58
|
+
category,
|
|
59
|
+
source,
|
|
60
|
+
content='memory_docs',
|
|
61
|
+
content_rowid='id'
|
|
62
|
+
);
|
|
63
|
+
`);
|
|
64
|
+
|
|
65
|
+
// Create triggers for FTS sync (idempotent via IF NOT EXISTS workaround)
|
|
66
|
+
const triggerExists = sqlite
|
|
67
|
+
.prepare(
|
|
68
|
+
"SELECT name FROM sqlite_master WHERE type='trigger' AND name='memory_docs_ai'"
|
|
69
|
+
)
|
|
70
|
+
.get();
|
|
71
|
+
|
|
72
|
+
if (!triggerExists) {
|
|
73
|
+
sqlite.exec(`
|
|
74
|
+
CREATE TRIGGER memory_docs_ai AFTER INSERT ON memory_docs BEGIN
|
|
75
|
+
INSERT INTO memory_fts(rowid, title, content, category, source)
|
|
76
|
+
VALUES (new.id, new.title, new.content, new.category, new.source);
|
|
77
|
+
END;
|
|
78
|
+
|
|
79
|
+
CREATE TRIGGER memory_docs_ad AFTER DELETE ON memory_docs BEGIN
|
|
80
|
+
INSERT INTO memory_fts(memory_fts, rowid, title, content, category, source)
|
|
81
|
+
VALUES ('delete', old.id, old.title, old.content, old.category, old.source);
|
|
82
|
+
END;
|
|
83
|
+
|
|
84
|
+
CREATE TRIGGER memory_docs_au AFTER UPDATE ON memory_docs BEGIN
|
|
85
|
+
INSERT INTO memory_fts(memory_fts, rowid, title, content, category, source)
|
|
86
|
+
VALUES ('delete', old.id, old.title, old.content, old.category, old.source);
|
|
87
|
+
INSERT INTO memory_fts(rowid, title, content, category, source)
|
|
88
|
+
VALUES (new.id, new.title, new.content, new.category, new.source);
|
|
89
|
+
END;
|
|
90
|
+
`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Soul-related tables
|
|
94
|
+
sqlite.exec(`
|
|
95
|
+
CREATE TABLE IF NOT EXISTS soul_handoffs (
|
|
96
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
97
|
+
task_id TEXT NOT NULL,
|
|
98
|
+
from_soul TEXT NOT NULL,
|
|
99
|
+
to_soul TEXT NOT NULL,
|
|
100
|
+
reason TEXT,
|
|
101
|
+
context_path TEXT,
|
|
102
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
CREATE TABLE IF NOT EXISTS soul_evolution_log (
|
|
106
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
107
|
+
soul_id TEXT NOT NULL,
|
|
108
|
+
event_id TEXT NOT NULL UNIQUE,
|
|
109
|
+
event_type TEXT NOT NULL,
|
|
110
|
+
description TEXT NOT NULL,
|
|
111
|
+
review_status TEXT NOT NULL DEFAULT 'pending',
|
|
112
|
+
commit_hash TEXT,
|
|
113
|
+
reviewed_by TEXT,
|
|
114
|
+
reviewed_at TEXT,
|
|
115
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
CREATE TABLE IF NOT EXISTS soul_spawns (
|
|
119
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
120
|
+
soul_id TEXT NOT NULL,
|
|
121
|
+
task_id TEXT,
|
|
122
|
+
subagent_type TEXT NOT NULL,
|
|
123
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
124
|
+
);
|
|
125
|
+
`);
|
|
126
|
+
|
|
127
|
+
// Add soul columns to tasks if missing
|
|
128
|
+
const taskCols = sqlite.prepare("PRAGMA table_info(tasks)").all() as { name: string }[];
|
|
129
|
+
const colNames = taskCols.map((c) => c.name);
|
|
130
|
+
if (!colNames.includes("soul_id")) {
|
|
131
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN soul_id TEXT");
|
|
132
|
+
}
|
|
133
|
+
if (!colNames.includes("handoff_source")) {
|
|
134
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN handoff_source TEXT");
|
|
135
|
+
}
|
|
136
|
+
if (!colNames.includes("handoff_reason")) {
|
|
137
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN handoff_reason TEXT");
|
|
138
|
+
}
|
|
139
|
+
if (!colNames.includes("scheduled_date")) {
|
|
140
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN scheduled_date TEXT");
|
|
141
|
+
}
|
|
142
|
+
if (!colNames.includes("project")) {
|
|
143
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN project TEXT");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Hierarchy columns
|
|
147
|
+
if (!colNames.includes("type")) {
|
|
148
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN type TEXT DEFAULT 'task'");
|
|
149
|
+
}
|
|
150
|
+
if (!colNames.includes("parent_id")) {
|
|
151
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN parent_id TEXT");
|
|
152
|
+
}
|
|
153
|
+
if (!colNames.includes("start_date")) {
|
|
154
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN start_date TEXT");
|
|
155
|
+
}
|
|
156
|
+
if (!colNames.includes("end_date")) {
|
|
157
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN end_date TEXT");
|
|
158
|
+
}
|
|
159
|
+
if (!colNames.includes("color")) {
|
|
160
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN color TEXT");
|
|
161
|
+
}
|
|
162
|
+
if (!colNames.includes("description")) {
|
|
163
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN description TEXT");
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Scheduling columns (replaces auto_start*)
|
|
167
|
+
if (!colNames.includes("needs_approval")) {
|
|
168
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN needs_approval INTEGER DEFAULT 1");
|
|
169
|
+
}
|
|
170
|
+
if (!colNames.includes("trigger_kind")) {
|
|
171
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN trigger_kind TEXT DEFAULT 'none'");
|
|
172
|
+
}
|
|
173
|
+
if (!colNames.includes("trigger_at")) {
|
|
174
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN trigger_at TEXT");
|
|
175
|
+
}
|
|
176
|
+
if (!colNames.includes("trigger_cron")) {
|
|
177
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN trigger_cron TEXT");
|
|
178
|
+
}
|
|
179
|
+
if (!colNames.includes("trigger_tz")) {
|
|
180
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN trigger_tz TEXT DEFAULT 'America/Montreal'");
|
|
181
|
+
}
|
|
182
|
+
if (!colNames.includes("is_recurring")) {
|
|
183
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN is_recurring INTEGER DEFAULT 0");
|
|
184
|
+
}
|
|
185
|
+
if (!colNames.includes("capacity_class")) {
|
|
186
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN capacity_class TEXT DEFAULT 'normal'");
|
|
187
|
+
}
|
|
188
|
+
if (!colNames.includes("auto_priority")) {
|
|
189
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN auto_priority INTEGER DEFAULT 0");
|
|
190
|
+
}
|
|
191
|
+
if (!colNames.includes("show_in_calendar")) {
|
|
192
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN show_in_calendar INTEGER DEFAULT 0");
|
|
193
|
+
}
|
|
194
|
+
// FIX: acknowledged_at was in schema.ts but missing from migrations —
|
|
195
|
+
// existing DBs would crash on any read/write touching this column.
|
|
196
|
+
if (!colNames.includes("acknowledged_at")) {
|
|
197
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN acknowledged_at TEXT");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Mesh execution columns (synced from active-tasks.md via kanban-io)
|
|
201
|
+
if (!colNames.includes("execution")) {
|
|
202
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN execution TEXT");
|
|
203
|
+
}
|
|
204
|
+
if (!colNames.includes("metric")) {
|
|
205
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN metric TEXT");
|
|
206
|
+
}
|
|
207
|
+
if (!colNames.includes("budget_minutes")) {
|
|
208
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN budget_minutes INTEGER DEFAULT 30");
|
|
209
|
+
}
|
|
210
|
+
if (!colNames.includes("scope")) {
|
|
211
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN scope TEXT");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Mesh node tracking — links MC tasks to NATS KV tasks and claiming nodes
|
|
215
|
+
if (!colNames.includes("mesh_task_id")) {
|
|
216
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN mesh_task_id TEXT");
|
|
217
|
+
}
|
|
218
|
+
if (!colNames.includes("mesh_node")) {
|
|
219
|
+
sqlite.exec("ALTER TABLE tasks ADD COLUMN mesh_node TEXT");
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Data migration: convert old auto_start columns to new scheduling schema
|
|
223
|
+
if (colNames.includes("auto_start")) {
|
|
224
|
+
sqlite.exec(`
|
|
225
|
+
UPDATE tasks SET
|
|
226
|
+
needs_approval = CASE WHEN auto_start = 1 THEN 0 ELSE 1 END,
|
|
227
|
+
trigger_kind = CASE
|
|
228
|
+
WHEN auto_start = 1 AND auto_start_after IS NOT NULL THEN 'at'
|
|
229
|
+
WHEN auto_start = 1 THEN 'none'
|
|
230
|
+
ELSE 'none'
|
|
231
|
+
END,
|
|
232
|
+
trigger_at = auto_start_after
|
|
233
|
+
WHERE auto_start IS NOT NULL AND needs_approval IS NULL
|
|
234
|
+
`);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Dependencies table (DAG edges)
|
|
238
|
+
sqlite.exec(`
|
|
239
|
+
CREATE TABLE IF NOT EXISTS dependencies (
|
|
240
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
241
|
+
source_id TEXT NOT NULL,
|
|
242
|
+
target_id TEXT NOT NULL,
|
|
243
|
+
type TEXT NOT NULL DEFAULT 'finish_to_start',
|
|
244
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
245
|
+
);
|
|
246
|
+
`);
|
|
247
|
+
|
|
248
|
+
// Indexes for hierarchy and dependency lookups
|
|
249
|
+
sqlite.exec(`
|
|
250
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_parent_id ON tasks(parent_id);
|
|
251
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_type ON tasks(type);
|
|
252
|
+
CREATE INDEX IF NOT EXISTS idx_deps_source ON dependencies(source_id);
|
|
253
|
+
CREATE INDEX IF NOT EXISTS idx_deps_target ON dependencies(target_id);
|
|
254
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_trigger_kind ON tasks(trigger_kind);
|
|
255
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_needs_approval ON tasks(needs_approval);
|
|
256
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
257
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_project ON tasks(project);
|
|
258
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_kanban_column ON tasks(kanban_column);
|
|
259
|
+
`);
|
|
260
|
+
|
|
261
|
+
// Memory items table (extracted atomic facts)
|
|
262
|
+
sqlite.exec(`
|
|
263
|
+
CREATE TABLE IF NOT EXISTS memory_items (
|
|
264
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
265
|
+
fact_text TEXT NOT NULL,
|
|
266
|
+
confidence INTEGER DEFAULT 70,
|
|
267
|
+
source_doc_id INTEGER,
|
|
268
|
+
category TEXT,
|
|
269
|
+
status TEXT DEFAULT 'active',
|
|
270
|
+
gate_decision TEXT,
|
|
271
|
+
gate_reason TEXT,
|
|
272
|
+
extraction_source TEXT,
|
|
273
|
+
last_accessed TEXT,
|
|
274
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
275
|
+
);
|
|
276
|
+
|
|
277
|
+
CREATE TABLE IF NOT EXISTS memory_audit (
|
|
278
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
279
|
+
operation TEXT NOT NULL,
|
|
280
|
+
item_id INTEGER,
|
|
281
|
+
detail TEXT,
|
|
282
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
283
|
+
);
|
|
284
|
+
|
|
285
|
+
CREATE INDEX IF NOT EXISTS idx_items_category ON memory_items(category);
|
|
286
|
+
CREATE INDEX IF NOT EXISTS idx_items_status ON memory_items(status);
|
|
287
|
+
CREATE INDEX IF NOT EXISTS idx_items_source ON memory_items(source_doc_id);
|
|
288
|
+
CREATE INDEX IF NOT EXISTS idx_audit_operation ON memory_audit(operation);
|
|
289
|
+
`);
|
|
290
|
+
|
|
291
|
+
// FTS5 index for memory items (fact-level search)
|
|
292
|
+
sqlite.exec(`
|
|
293
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memory_items_fts USING fts5(
|
|
294
|
+
fact_text,
|
|
295
|
+
category,
|
|
296
|
+
content='memory_items',
|
|
297
|
+
content_rowid='id'
|
|
298
|
+
);
|
|
299
|
+
`);
|
|
300
|
+
|
|
301
|
+
// FTS triggers for memory items
|
|
302
|
+
const itemTriggerExists = sqlite
|
|
303
|
+
.prepare(
|
|
304
|
+
"SELECT name FROM sqlite_master WHERE type='trigger' AND name='memory_items_ai'"
|
|
305
|
+
)
|
|
306
|
+
.get();
|
|
307
|
+
|
|
308
|
+
if (!itemTriggerExists) {
|
|
309
|
+
sqlite.exec(`
|
|
310
|
+
CREATE TRIGGER memory_items_ai AFTER INSERT ON memory_items BEGIN
|
|
311
|
+
INSERT INTO memory_items_fts(rowid, fact_text, category)
|
|
312
|
+
VALUES (new.id, new.fact_text, new.category);
|
|
313
|
+
END;
|
|
314
|
+
|
|
315
|
+
CREATE TRIGGER memory_items_ad AFTER DELETE ON memory_items BEGIN
|
|
316
|
+
INSERT INTO memory_items_fts(memory_items_fts, rowid, fact_text, category)
|
|
317
|
+
VALUES ('delete', old.id, old.fact_text, old.category);
|
|
318
|
+
END;
|
|
319
|
+
|
|
320
|
+
CREATE TRIGGER memory_items_au AFTER UPDATE ON memory_items BEGIN
|
|
321
|
+
INSERT INTO memory_items_fts(memory_items_fts, rowid, fact_text, category)
|
|
322
|
+
VALUES ('delete', old.id, old.fact_text, old.category);
|
|
323
|
+
INSERT INTO memory_items_fts(rowid, fact_text, category)
|
|
324
|
+
VALUES (new.id, new.fact_text, new.category);
|
|
325
|
+
END;
|
|
326
|
+
`);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// --- Knowledge Graph tables ---
|
|
330
|
+
sqlite.exec(`
|
|
331
|
+
CREATE TABLE IF NOT EXISTS memory_entities (
|
|
332
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
333
|
+
name TEXT NOT NULL,
|
|
334
|
+
type TEXT NOT NULL,
|
|
335
|
+
aliases TEXT,
|
|
336
|
+
first_seen TEXT NOT NULL DEFAULT (datetime('now')),
|
|
337
|
+
last_seen TEXT NOT NULL DEFAULT (datetime('now')),
|
|
338
|
+
access_count INTEGER DEFAULT 1,
|
|
339
|
+
metadata TEXT
|
|
340
|
+
);
|
|
341
|
+
|
|
342
|
+
CREATE TABLE IF NOT EXISTS memory_relations (
|
|
343
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
344
|
+
source_entity_id INTEGER NOT NULL,
|
|
345
|
+
target_entity_id INTEGER NOT NULL,
|
|
346
|
+
relation_type TEXT NOT NULL,
|
|
347
|
+
confidence INTEGER DEFAULT 80,
|
|
348
|
+
source_item_id INTEGER,
|
|
349
|
+
valid_from TEXT NOT NULL DEFAULT (datetime('now')),
|
|
350
|
+
valid_to TEXT,
|
|
351
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
CREATE TABLE IF NOT EXISTS memory_entity_items (
|
|
355
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
356
|
+
entity_id INTEGER NOT NULL,
|
|
357
|
+
item_id INTEGER NOT NULL
|
|
358
|
+
);
|
|
359
|
+
|
|
360
|
+
CREATE INDEX IF NOT EXISTS idx_entities_name ON memory_entities(name);
|
|
361
|
+
CREATE INDEX IF NOT EXISTS idx_entities_type ON memory_entities(type);
|
|
362
|
+
CREATE INDEX IF NOT EXISTS idx_relations_source ON memory_relations(source_entity_id);
|
|
363
|
+
CREATE INDEX IF NOT EXISTS idx_relations_target ON memory_relations(target_entity_id);
|
|
364
|
+
CREATE INDEX IF NOT EXISTS idx_relations_type ON memory_relations(relation_type);
|
|
365
|
+
CREATE INDEX IF NOT EXISTS idx_entity_items_entity ON memory_entity_items(entity_id);
|
|
366
|
+
CREATE INDEX IF NOT EXISTS idx_entity_items_item ON memory_entity_items(item_id);
|
|
367
|
+
`);
|
|
368
|
+
|
|
369
|
+
// --- Temporal columns on memory_items ---
|
|
370
|
+
const itemCols = sqlite.prepare("PRAGMA table_info(memory_items)").all() as { name: string }[];
|
|
371
|
+
const itemColNames = itemCols.map((c) => c.name);
|
|
372
|
+
if (!itemColNames.includes("superseded_by")) {
|
|
373
|
+
sqlite.exec("ALTER TABLE memory_items ADD COLUMN superseded_by INTEGER");
|
|
374
|
+
}
|
|
375
|
+
if (!itemColNames.includes("valid_from")) {
|
|
376
|
+
sqlite.exec("ALTER TABLE memory_items ADD COLUMN valid_from TEXT DEFAULT (datetime('now'))");
|
|
377
|
+
}
|
|
378
|
+
if (!itemColNames.includes("valid_to")) {
|
|
379
|
+
sqlite.exec("ALTER TABLE memory_items ADD COLUMN valid_to TEXT");
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Add cross-soul propagation columns to soul_evolution_log if missing
|
|
383
|
+
const evolCols = sqlite.prepare("PRAGMA table_info(soul_evolution_log)").all() as { name: string }[];
|
|
384
|
+
const evolColNames = evolCols.map((c) => c.name);
|
|
385
|
+
if (!evolColNames.includes("source_soul_id")) {
|
|
386
|
+
sqlite.exec("ALTER TABLE soul_evolution_log ADD COLUMN source_soul_id TEXT");
|
|
387
|
+
}
|
|
388
|
+
if (!evolColNames.includes("source_event_id")) {
|
|
389
|
+
sqlite.exec("ALTER TABLE soul_evolution_log ADD COLUMN source_event_id TEXT");
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// --- Token usage tracking (mesh agent cost data) ---
|
|
393
|
+
sqlite.exec(`
|
|
394
|
+
CREATE TABLE IF NOT EXISTS token_usage (
|
|
395
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
396
|
+
task_id TEXT,
|
|
397
|
+
node_id TEXT,
|
|
398
|
+
model TEXT NOT NULL,
|
|
399
|
+
input_tokens INTEGER NOT NULL,
|
|
400
|
+
output_tokens INTEGER NOT NULL,
|
|
401
|
+
cost_usd REAL NOT NULL,
|
|
402
|
+
timestamp TEXT NOT NULL DEFAULT (datetime('now'))
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_task ON token_usage(task_id);
|
|
406
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_node ON token_usage(node_id);
|
|
407
|
+
CREATE INDEX IF NOT EXISTS idx_token_usage_ts ON token_usage(timestamp);
|
|
408
|
+
`);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
export function getDb() {
|
|
412
|
+
if (_db) return _db;
|
|
413
|
+
|
|
414
|
+
ensureDataDir();
|
|
415
|
+
|
|
416
|
+
_sqlite = new Database(DB_PATH);
|
|
417
|
+
_sqlite.pragma("journal_mode = WAL");
|
|
418
|
+
_sqlite.pragma("foreign_keys = ON");
|
|
419
|
+
|
|
420
|
+
runMigrations(_sqlite);
|
|
421
|
+
|
|
422
|
+
_db = drizzle(_sqlite, { schema });
|
|
423
|
+
return _db;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
export function getRawDb(): Database.Database {
|
|
427
|
+
if (!_sqlite) getDb();
|
|
428
|
+
return _sqlite!;
|
|
429
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
|
2
|
+
import { sql } from "drizzle-orm";
|
|
3
|
+
|
|
4
|
+
export const tasks = sqliteTable("tasks", {
|
|
5
|
+
id: text("id").primaryKey(),
|
|
6
|
+
title: text("title").notNull(),
|
|
7
|
+
status: text("status").notNull(),
|
|
8
|
+
kanbanColumn: text("kanban_column").notNull(),
|
|
9
|
+
owner: text("owner"),
|
|
10
|
+
soulId: text("soul_id"), // NEW: which soul owns this task
|
|
11
|
+
handoffSource: text("handoff_source"), // NEW: previous owner (for handoffs)
|
|
12
|
+
handoffReason: text("handoff_reason"), // NEW: why handed off
|
|
13
|
+
successCriteria: text("success_criteria"),
|
|
14
|
+
artifacts: text("artifacts"),
|
|
15
|
+
nextAction: text("next_action"),
|
|
16
|
+
scheduledDate: text("scheduled_date"), // ISO date for calendar: "2026-02-21"
|
|
17
|
+
project: text("project"), // Freeform project tag: "arcane", "budgetapp", etc.
|
|
18
|
+
type: text("type").default("task"), // "project" | "pipeline" | "phase" | "task"
|
|
19
|
+
parentId: text("parent_id"), // FK to tasks.id (self-reference for hierarchy)
|
|
20
|
+
startDate: text("start_date"), // ISO date: "2026-03-01" (range start)
|
|
21
|
+
endDate: text("end_date"), // ISO date: "2026-04-15" (range end)
|
|
22
|
+
color: text("color"), // hex color for Gantt bars
|
|
23
|
+
description: text("description"), // markdown body for projects/phases
|
|
24
|
+
needsApproval: integer("needs_approval").default(1), // 0=Daedalus can start, 1=wait for Gui
|
|
25
|
+
triggerKind: text("trigger_kind").default("none"), // "none" | "at" | "cron"
|
|
26
|
+
triggerAt: text("trigger_at"), // ISO datetime for one-shot trigger
|
|
27
|
+
triggerCron: text("trigger_cron"), // cron expression (e.g. "0 10 * * 1")
|
|
28
|
+
triggerTz: text("trigger_tz").default("America/Montreal"), // timezone for cron eval
|
|
29
|
+
isRecurring: integer("is_recurring").default(0), // 1=auto-recreate after done
|
|
30
|
+
capacityClass: text("capacity_class").default("normal"), // "light" | "normal" | "heavy"
|
|
31
|
+
autoPriority: integer("auto_priority").default(0), // higher = dispatched first
|
|
32
|
+
// Mesh execution fields (synced from active-tasks.md)
|
|
33
|
+
execution: text("execution"), // "mesh" = dispatched via mesh bridge; null = manual/Daedalus
|
|
34
|
+
meshTaskId: text("mesh_task_id"), // NATS KV task ID (e.g. "MESH-TEST-003")
|
|
35
|
+
meshNode: text("mesh_node"), // node that claimed the task (e.g. "calos-ubuntu")
|
|
36
|
+
metric: text("metric"), // mechanical success check (e.g. "tests pass")
|
|
37
|
+
budgetMinutes: integer("budget_minutes").default(30), // agent time budget
|
|
38
|
+
scope: text("scope"), // JSON array of allowed file paths
|
|
39
|
+
showInCalendar: integer("show_in_calendar").default(0), // 1=show meta-task in calendar view
|
|
40
|
+
acknowledgedAt: text("acknowledged_at"), // ISO datetime — when Daedalus acknowledged auto-dispatch
|
|
41
|
+
updatedAt: text("updated_at").notNull(),
|
|
42
|
+
createdAt: text("created_at")
|
|
43
|
+
.notNull()
|
|
44
|
+
.default(sql`(datetime('now'))`),
|
|
45
|
+
sortOrder: integer("sort_order").default(0),
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const memoryDocs = sqliteTable("memory_docs", {
|
|
49
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
50
|
+
source: text("source").notNull(),
|
|
51
|
+
category: text("category"),
|
|
52
|
+
filePath: text("file_path").notNull().unique(),
|
|
53
|
+
title: text("title"),
|
|
54
|
+
date: text("date"),
|
|
55
|
+
frontmatter: text("frontmatter"),
|
|
56
|
+
content: text("content").notNull(),
|
|
57
|
+
modifiedAt: text("modified_at"),
|
|
58
|
+
indexedAt: text("indexed_at")
|
|
59
|
+
.notNull()
|
|
60
|
+
.default(sql`(datetime('now'))`),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const activityLog = sqliteTable("activity_log", {
|
|
64
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
65
|
+
eventType: text("event_type").notNull(),
|
|
66
|
+
taskId: text("task_id"),
|
|
67
|
+
description: text("description").notNull(),
|
|
68
|
+
timestamp: text("timestamp")
|
|
69
|
+
.notNull()
|
|
70
|
+
.default(sql`(datetime('now'))`),
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
export const soulHandoffs = sqliteTable("soul_handoffs", {
|
|
74
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
75
|
+
taskId: text("task_id").notNull(),
|
|
76
|
+
fromSoul: text("from_soul").notNull(),
|
|
77
|
+
toSoul: text("to_soul").notNull(),
|
|
78
|
+
reason: text("reason"),
|
|
79
|
+
contextPath: text("context_path"), // Path to handoff document in ClawVault
|
|
80
|
+
timestamp: text("timestamp")
|
|
81
|
+
.notNull()
|
|
82
|
+
.default(sql`(datetime('now'))`),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export const soulEvolutionLog = sqliteTable("soul_evolution_log", {
|
|
86
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
87
|
+
soulId: text("soul_id").notNull(),
|
|
88
|
+
eventId: text("event_id").notNull().unique(), // References evolution/events.jsonl
|
|
89
|
+
eventType: text("event_type").notNull(), // learning, correction, feature_request
|
|
90
|
+
description: text("description").notNull(),
|
|
91
|
+
reviewStatus: text("review_status").notNull().default("pending"), // pending, approved, rejected
|
|
92
|
+
commitHash: text("commit_hash"), // Git commit after approval
|
|
93
|
+
reviewedBy: text("reviewed_by"), // Soul ID of reviewer
|
|
94
|
+
reviewedAt: text("reviewed_at"),
|
|
95
|
+
sourceSoulId: text("source_soul_id"), // Cross-soul: which soul originated this gene
|
|
96
|
+
sourceEventId: text("source_event_id"), // Cross-soul: original event ID
|
|
97
|
+
timestamp: text("timestamp")
|
|
98
|
+
.notNull()
|
|
99
|
+
.default(sql`(datetime('now'))`),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
export const dependencies = sqliteTable("dependencies", {
|
|
103
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
104
|
+
sourceId: text("source_id").notNull(), // task that must complete first
|
|
105
|
+
targetId: text("target_id").notNull(), // task that is blocked
|
|
106
|
+
type: text("type").notNull().default("finish_to_start"),
|
|
107
|
+
createdAt: text("created_at")
|
|
108
|
+
.notNull()
|
|
109
|
+
.default(sql`(datetime('now'))`),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export type Task = typeof tasks.$inferSelect;
|
|
113
|
+
export type NewTask = typeof tasks.$inferInsert;
|
|
114
|
+
export type Dependency = typeof dependencies.$inferSelect;
|
|
115
|
+
export type NewDependency = typeof dependencies.$inferInsert;
|
|
116
|
+
export type MemoryDoc = typeof memoryDocs.$inferSelect;
|
|
117
|
+
export type NewMemoryDoc = typeof memoryDocs.$inferInsert;
|
|
118
|
+
export type ActivityLogEntry = typeof activityLog.$inferSelect;
|
|
119
|
+
export type SoulHandoff = typeof soulHandoffs.$inferSelect;
|
|
120
|
+
export type NewSoulHandoff = typeof soulHandoffs.$inferInsert;
|
|
121
|
+
export const soulSpawns = sqliteTable("soul_spawns", {
|
|
122
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
123
|
+
soulId: text("soul_id").notNull(),
|
|
124
|
+
taskId: text("task_id"), // Optional — linked task if spawned for a specific task
|
|
125
|
+
subagentType: text("subagent_type").notNull(), // general-purpose, Explore, etc.
|
|
126
|
+
timestamp: text("timestamp")
|
|
127
|
+
.notNull()
|
|
128
|
+
.default(sql`(datetime('now'))`),
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// --- Memory Items (extracted atomic facts) ---
|
|
132
|
+
|
|
133
|
+
export const memoryItems = sqliteTable("memory_items", {
|
|
134
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
135
|
+
factText: text("fact_text").notNull(),
|
|
136
|
+
confidence: integer("confidence").default(70), // 0-100 (stored as int, display as 0.XX)
|
|
137
|
+
sourceDocId: integer("source_doc_id"), // FK to memory_docs.id
|
|
138
|
+
category: text("category"), // work, preferences, people, projects, technical, relationships
|
|
139
|
+
status: text("status").default("active"), // active | archived | stale
|
|
140
|
+
gateDecision: text("gate_decision"), // accepted | rejected
|
|
141
|
+
gateReason: text("gate_reason"), // why accepted/rejected
|
|
142
|
+
extractionSource: text("extraction_source"), // file path or session ID
|
|
143
|
+
lastAccessed: text("last_accessed"),
|
|
144
|
+
supersededBy: integer("superseded_by"), // FK to memory_items.id (temporal chain)
|
|
145
|
+
validFrom: text("valid_from")
|
|
146
|
+
.notNull()
|
|
147
|
+
.default(sql`(datetime('now'))`),
|
|
148
|
+
validTo: text("valid_to"), // null = still valid; set when superseded
|
|
149
|
+
createdAt: text("created_at")
|
|
150
|
+
.notNull()
|
|
151
|
+
.default(sql`(datetime('now'))`),
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
export const memoryAudit = sqliteTable("memory_audit", {
|
|
155
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
156
|
+
operation: text("operation").notNull(), // extract, gate_accept, gate_reject, merge, archive, search
|
|
157
|
+
itemId: integer("item_id"),
|
|
158
|
+
detail: text("detail"), // JSON or descriptive text
|
|
159
|
+
timestamp: text("timestamp")
|
|
160
|
+
.notNull()
|
|
161
|
+
.default(sql`(datetime('now'))`),
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
export type MemoryItem = typeof memoryItems.$inferSelect;
|
|
165
|
+
export type NewMemoryItem = typeof memoryItems.$inferInsert;
|
|
166
|
+
export type MemoryAuditEntry = typeof memoryAudit.$inferSelect;
|
|
167
|
+
|
|
168
|
+
// --- Knowledge Graph: Entities + Relations ---
|
|
169
|
+
|
|
170
|
+
export const memoryEntities = sqliteTable("memory_entities", {
|
|
171
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
172
|
+
name: text("name").notNull(), // canonical name: "ManaWell", "Gui", "Arcane"
|
|
173
|
+
type: text("type").notNull(), // person | project | contract | concept | tool | file
|
|
174
|
+
aliases: text("aliases"), // JSON array of alternate names: ["mana well", "ManaWell.sol"]
|
|
175
|
+
firstSeen: text("first_seen")
|
|
176
|
+
.notNull()
|
|
177
|
+
.default(sql`(datetime('now'))`),
|
|
178
|
+
lastSeen: text("last_seen")
|
|
179
|
+
.notNull()
|
|
180
|
+
.default(sql`(datetime('now'))`),
|
|
181
|
+
accessCount: integer("access_count").default(1),
|
|
182
|
+
metadata: text("metadata"), // JSON: extra type-specific data
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
export const memoryRelations = sqliteTable("memory_relations", {
|
|
186
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
187
|
+
sourceEntityId: integer("source_entity_id").notNull(), // FK to memory_entities.id
|
|
188
|
+
targetEntityId: integer("target_entity_id").notNull(), // FK to memory_entities.id
|
|
189
|
+
relationType: text("relation_type").notNull(), // owns | uses | depends_on | blocks | part_of | related_to | supersedes
|
|
190
|
+
confidence: integer("confidence").default(80), // 0-100
|
|
191
|
+
sourceItemId: integer("source_item_id"), // FK to memory_items.id (which fact established this relation)
|
|
192
|
+
validFrom: text("valid_from")
|
|
193
|
+
.notNull()
|
|
194
|
+
.default(sql`(datetime('now'))`),
|
|
195
|
+
validTo: text("valid_to"), // null = still valid
|
|
196
|
+
createdAt: text("created_at")
|
|
197
|
+
.notNull()
|
|
198
|
+
.default(sql`(datetime('now'))`),
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// --- Entity-Item junction (which entities appear in which facts) ---
|
|
202
|
+
|
|
203
|
+
export const memoryEntityItems = sqliteTable("memory_entity_items", {
|
|
204
|
+
id: integer("id").primaryKey({ autoIncrement: true }),
|
|
205
|
+
entityId: integer("entity_id").notNull(), // FK to memory_entities.id
|
|
206
|
+
itemId: integer("item_id").notNull(), // FK to memory_items.id
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
export type MemoryEntity = typeof memoryEntities.$inferSelect;
|
|
210
|
+
export type NewMemoryEntity = typeof memoryEntities.$inferInsert;
|
|
211
|
+
export type MemoryRelation = typeof memoryRelations.$inferSelect;
|
|
212
|
+
export type NewMemoryRelation = typeof memoryRelations.$inferInsert;
|
|
213
|
+
export type MemoryEntityItem = typeof memoryEntityItems.$inferSelect;
|
|
214
|
+
|
|
215
|
+
export type SoulEvolution = typeof soulEvolutionLog.$inferSelect;
|
|
216
|
+
export type NewSoulEvolution = typeof soulEvolutionLog.$inferInsert;
|
|
217
|
+
export type SoulSpawn = typeof soulSpawns.$inferSelect;
|
|
218
|
+
export type NewSoulSpawn = typeof soulSpawns.$inferInsert;
|