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,204 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const { getGepAssetsDir } = require('./paths');
|
|
4
|
+
|
|
5
|
+
function ensureDir(dir) {
|
|
6
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
function readJsonIfExists(filePath, fallback) {
|
|
10
|
+
try {
|
|
11
|
+
if (!fs.existsSync(filePath)) return fallback;
|
|
12
|
+
const raw = fs.readFileSync(filePath, 'utf8');
|
|
13
|
+
if (!raw.trim()) return fallback;
|
|
14
|
+
return JSON.parse(raw);
|
|
15
|
+
} catch {
|
|
16
|
+
return fallback;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function writeJsonAtomic(filePath, obj) {
|
|
21
|
+
const dir = path.dirname(filePath);
|
|
22
|
+
ensureDir(dir);
|
|
23
|
+
const tmp = `${filePath}.tmp`;
|
|
24
|
+
fs.writeFileSync(tmp, JSON.stringify(obj, null, 2) + '\n', 'utf8');
|
|
25
|
+
fs.renameSync(tmp, filePath);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function getDefaultGenes() {
|
|
29
|
+
return {
|
|
30
|
+
version: 1,
|
|
31
|
+
genes: [
|
|
32
|
+
{
|
|
33
|
+
type: 'Gene',
|
|
34
|
+
id: 'gene_gep_repair_from_errors',
|
|
35
|
+
category: 'repair',
|
|
36
|
+
signals_match: ['error', 'exception', 'failed', 'unstable'],
|
|
37
|
+
preconditions: ['signals contains error-related indicators'],
|
|
38
|
+
strategy: [
|
|
39
|
+
'Extract structured signals from logs and user instructions',
|
|
40
|
+
'Select an existing Gene by signals match (no improvisation)',
|
|
41
|
+
'Estimate blast radius (files, lines) before editing',
|
|
42
|
+
'Apply smallest reversible patch',
|
|
43
|
+
'Validate using declared validation steps; rollback on failure',
|
|
44
|
+
'Solidify knowledge: append EvolutionEvent, update Gene/Capsule store',
|
|
45
|
+
],
|
|
46
|
+
constraints: {
|
|
47
|
+
max_files: 12,
|
|
48
|
+
forbidden_paths: ['.git', 'node_modules'],
|
|
49
|
+
},
|
|
50
|
+
validation: ['node index.js run', 'node -e "require(\\"./src/evolve\\")"'],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'Gene',
|
|
54
|
+
id: 'gene_gep_optimize_prompt_and_assets',
|
|
55
|
+
category: 'optimize',
|
|
56
|
+
signals_match: ['protocol', 'gep', 'prompt', 'audit', 'reusable'],
|
|
57
|
+
preconditions: ['need stricter, auditable evolution protocol outputs'],
|
|
58
|
+
strategy: [
|
|
59
|
+
'Extract signals and determine selection rationale via Selector JSON',
|
|
60
|
+
'Prefer reusing existing Gene/Capsule; only create if no match exists',
|
|
61
|
+
'Refactor prompt assembly to embed assets (genes, capsules, parent event)',
|
|
62
|
+
'Reduce noise and ambiguity; enforce strict output schema',
|
|
63
|
+
'Validate by running node index.js run and ensuring no runtime errors',
|
|
64
|
+
'Solidify: record EvolutionEvent, update Gene definitions, create Capsule on success',
|
|
65
|
+
],
|
|
66
|
+
constraints: {
|
|
67
|
+
max_files: 20,
|
|
68
|
+
forbidden_paths: ['.git', 'node_modules'],
|
|
69
|
+
},
|
|
70
|
+
validation: ['node index.js run'],
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function getDefaultCapsules() {
|
|
77
|
+
return { version: 1, capsules: [] };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function genesPath() {
|
|
81
|
+
return path.join(getGepAssetsDir(), 'genes.json');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function capsulesPath() {
|
|
85
|
+
return path.join(getGepAssetsDir(), 'capsules.json');
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function eventsPath() {
|
|
89
|
+
return path.join(getGepAssetsDir(), 'events.jsonl');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function candidatesPath() {
|
|
93
|
+
return path.join(getGepAssetsDir(), 'candidates.jsonl');
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function loadGenes() {
|
|
97
|
+
return readJsonIfExists(genesPath(), getDefaultGenes()).genes || [];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function loadCapsules() {
|
|
101
|
+
return readJsonIfExists(capsulesPath(), getDefaultCapsules()).capsules || [];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function getLastEventId() {
|
|
105
|
+
try {
|
|
106
|
+
const p = eventsPath();
|
|
107
|
+
if (!fs.existsSync(p)) return null;
|
|
108
|
+
const raw = fs.readFileSync(p, 'utf8');
|
|
109
|
+
const lines = raw.split('\n').map(l => l.trim()).filter(Boolean);
|
|
110
|
+
if (lines.length === 0) return null;
|
|
111
|
+
const last = JSON.parse(lines[lines.length - 1]);
|
|
112
|
+
return last && typeof last.id === 'string' ? last.id : null;
|
|
113
|
+
} catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function readAllEvents() {
|
|
119
|
+
try {
|
|
120
|
+
const p = eventsPath();
|
|
121
|
+
if (!fs.existsSync(p)) return [];
|
|
122
|
+
const raw = fs.readFileSync(p, 'utf8');
|
|
123
|
+
return raw
|
|
124
|
+
.split('\n')
|
|
125
|
+
.map(l => l.trim())
|
|
126
|
+
.filter(Boolean)
|
|
127
|
+
.map(l => {
|
|
128
|
+
try {
|
|
129
|
+
return JSON.parse(l);
|
|
130
|
+
} catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
.filter(Boolean);
|
|
135
|
+
} catch {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function appendEventJsonl(eventObj) {
|
|
141
|
+
const dir = getGepAssetsDir();
|
|
142
|
+
ensureDir(dir);
|
|
143
|
+
fs.appendFileSync(eventsPath(), JSON.stringify(eventObj) + '\n', 'utf8');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function appendCandidateJsonl(candidateObj) {
|
|
147
|
+
const dir = getGepAssetsDir();
|
|
148
|
+
ensureDir(dir);
|
|
149
|
+
fs.appendFileSync(candidatesPath(), JSON.stringify(candidateObj) + '\n', 'utf8');
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function readRecentCandidates(limit = 20) {
|
|
153
|
+
try {
|
|
154
|
+
const p = candidatesPath();
|
|
155
|
+
if (!fs.existsSync(p)) return [];
|
|
156
|
+
const raw = fs.readFileSync(p, 'utf8');
|
|
157
|
+
const lines = raw.split('\n').map(l => l.trim()).filter(Boolean);
|
|
158
|
+
const recent = lines.slice(Math.max(0, lines.length - limit));
|
|
159
|
+
return recent
|
|
160
|
+
.map(l => {
|
|
161
|
+
try {
|
|
162
|
+
return JSON.parse(l);
|
|
163
|
+
} catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
.filter(Boolean);
|
|
168
|
+
} catch {
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function upsertGene(geneObj) {
|
|
174
|
+
const current = readJsonIfExists(genesPath(), getDefaultGenes());
|
|
175
|
+
const genes = Array.isArray(current.genes) ? current.genes : [];
|
|
176
|
+
const idx = genes.findIndex(g => g && g.id === geneObj.id);
|
|
177
|
+
if (idx >= 0) genes[idx] = geneObj;
|
|
178
|
+
else genes.push(geneObj);
|
|
179
|
+
writeJsonAtomic(genesPath(), { version: current.version || 1, genes });
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function appendCapsule(capsuleObj) {
|
|
183
|
+
const current = readJsonIfExists(capsulesPath(), getDefaultCapsules());
|
|
184
|
+
const capsules = Array.isArray(current.capsules) ? current.capsules : [];
|
|
185
|
+
capsules.push(capsuleObj);
|
|
186
|
+
writeJsonAtomic(capsulesPath(), { version: current.version || 1, capsules });
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
module.exports = {
|
|
190
|
+
loadGenes,
|
|
191
|
+
loadCapsules,
|
|
192
|
+
readAllEvents,
|
|
193
|
+
getLastEventId,
|
|
194
|
+
appendEventJsonl,
|
|
195
|
+
appendCandidateJsonl,
|
|
196
|
+
readRecentCandidates,
|
|
197
|
+
upsertGene,
|
|
198
|
+
appendCapsule,
|
|
199
|
+
genesPath,
|
|
200
|
+
capsulesPath,
|
|
201
|
+
eventsPath,
|
|
202
|
+
candidatesPath,
|
|
203
|
+
};
|
|
204
|
+
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
function stableHash(input) {
|
|
2
|
+
// Deterministic lightweight hash (not cryptographic).
|
|
3
|
+
const s = String(input || '');
|
|
4
|
+
let h = 2166136261;
|
|
5
|
+
for (let i = 0; i < s.length; i++) {
|
|
6
|
+
h ^= s.charCodeAt(i);
|
|
7
|
+
h = Math.imul(h, 16777619);
|
|
8
|
+
}
|
|
9
|
+
return (h >>> 0).toString(16).padStart(8, '0');
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function clip(text, maxChars) {
|
|
13
|
+
const s = String(text || '');
|
|
14
|
+
if (!maxChars || s.length <= maxChars) return s;
|
|
15
|
+
return s.slice(0, Math.max(0, maxChars - 20)) + ' ...[TRUNCATED]';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function toLines(text) {
|
|
19
|
+
return String(text || '')
|
|
20
|
+
.split('\n')
|
|
21
|
+
.map(l => l.trimEnd())
|
|
22
|
+
.filter(Boolean);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function extractToolCalls(transcript) {
|
|
26
|
+
const lines = toLines(transcript);
|
|
27
|
+
const calls = [];
|
|
28
|
+
for (const line of lines) {
|
|
29
|
+
const m = line.match(/\[TOOL:\s*([^\]]+)\]/i);
|
|
30
|
+
if (m && m[1]) calls.push(m[1].trim());
|
|
31
|
+
}
|
|
32
|
+
return calls;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function countFreq(items) {
|
|
36
|
+
const map = new Map();
|
|
37
|
+
for (const it of items) map.set(it, (map.get(it) || 0) + 1);
|
|
38
|
+
return map;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function buildFiveQuestionsShape({ title, signals, evidence }) {
|
|
42
|
+
// Keep it short and structured; this is a template, not a perfect inference.
|
|
43
|
+
const input = 'Recent session transcript + memory snippets + user instructions';
|
|
44
|
+
const output = 'A safe, auditable evolution patch guided by GEP assets';
|
|
45
|
+
const invariants = 'Protocol order, small reversible patches, validation, append-only events';
|
|
46
|
+
const params = `Signals: ${Array.isArray(signals) ? signals.join(', ') : ''}`.trim();
|
|
47
|
+
const failurePoints = 'Missing signals, over-broad changes, skipped validation, missing knowledge solidification';
|
|
48
|
+
return {
|
|
49
|
+
title: String(title || '').slice(0, 120),
|
|
50
|
+
input,
|
|
51
|
+
output,
|
|
52
|
+
invariants,
|
|
53
|
+
params: params || 'Signals: (none)',
|
|
54
|
+
failure_points: failurePoints,
|
|
55
|
+
evidence: clip(evidence, 240),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function extractCapabilityCandidates({ recentSessionTranscript, signals }) {
|
|
60
|
+
const candidates = [];
|
|
61
|
+
const toolCalls = extractToolCalls(recentSessionTranscript);
|
|
62
|
+
const freq = countFreq(toolCalls);
|
|
63
|
+
|
|
64
|
+
for (const [tool, count] of freq.entries()) {
|
|
65
|
+
if (count < 2) continue;
|
|
66
|
+
const title = `Repeated tool usage: ${tool}`;
|
|
67
|
+
const evidence = `Observed ${count} occurrences of tool call marker for ${tool}.`;
|
|
68
|
+
const shape = buildFiveQuestionsShape({ title, signals, evidence });
|
|
69
|
+
candidates.push({
|
|
70
|
+
type: 'CapabilityCandidate',
|
|
71
|
+
id: `cand_${stableHash(title)}`,
|
|
72
|
+
title,
|
|
73
|
+
source: 'transcript',
|
|
74
|
+
created_at: new Date().toISOString(),
|
|
75
|
+
signals: Array.isArray(signals) ? signals : [],
|
|
76
|
+
shape,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Signals-as-candidates: capture recurring pain points as reusable capability shapes.
|
|
81
|
+
const signalList = Array.isArray(signals) ? signals : [];
|
|
82
|
+
const signalCandidates = [
|
|
83
|
+
{ signal: 'log_error', title: 'Repair recurring runtime errors' },
|
|
84
|
+
{ signal: 'protocol_drift', title: 'Prevent protocol drift and enforce auditable outputs' },
|
|
85
|
+
{ signal: 'windows_shell_incompatible', title: 'Avoid platform-specific shell assumptions (Windows compatibility)' },
|
|
86
|
+
{ signal: 'session_logs_missing', title: 'Harden session log detection and fallback behavior' },
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
for (const sc of signalCandidates) {
|
|
90
|
+
if (!signalList.includes(sc.signal)) continue;
|
|
91
|
+
const evidence = `Signal present: ${sc.signal}`;
|
|
92
|
+
const shape = buildFiveQuestionsShape({ title: sc.title, signals, evidence });
|
|
93
|
+
candidates.push({
|
|
94
|
+
type: 'CapabilityCandidate',
|
|
95
|
+
id: `cand_${stableHash(sc.signal)}`,
|
|
96
|
+
title: sc.title,
|
|
97
|
+
source: 'signals',
|
|
98
|
+
created_at: new Date().toISOString(),
|
|
99
|
+
signals: signalList,
|
|
100
|
+
shape,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Dedup by id
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
return candidates.filter(c => {
|
|
107
|
+
if (!c || !c.id) return false;
|
|
108
|
+
if (seen.has(c.id)) return false;
|
|
109
|
+
seen.add(c.id);
|
|
110
|
+
return true;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function renderCandidatesPreview(candidates, maxChars = 1400) {
|
|
115
|
+
const list = Array.isArray(candidates) ? candidates : [];
|
|
116
|
+
const lines = [];
|
|
117
|
+
for (const c of list) {
|
|
118
|
+
const s = c && c.shape ? c.shape : {};
|
|
119
|
+
lines.push(`- ${c.id}: ${c.title}`);
|
|
120
|
+
lines.push(` - input: ${s.input || ''}`);
|
|
121
|
+
lines.push(` - output: ${s.output || ''}`);
|
|
122
|
+
lines.push(` - invariants: ${s.invariants || ''}`);
|
|
123
|
+
lines.push(` - params: ${s.params || ''}`);
|
|
124
|
+
lines.push(` - failure_points: ${s.failure_points || ''}`);
|
|
125
|
+
if (s.evidence) lines.push(` - evidence: ${s.evidence}`);
|
|
126
|
+
}
|
|
127
|
+
return clip(lines.join('\n'), maxChars);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
module.exports = {
|
|
131
|
+
extractCapabilityCandidates,
|
|
132
|
+
renderCandidatesPreview,
|
|
133
|
+
};
|
|
134
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
|
|
3
|
+
function getRepoRoot() {
|
|
4
|
+
// src/gep/paths.js -> repo root
|
|
5
|
+
return path.resolve(__dirname, '..', '..');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function getMemoryDir() {
|
|
9
|
+
const repoRoot = getRepoRoot();
|
|
10
|
+
return process.env.MEMORY_DIR || path.join(repoRoot, 'memory');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function getGepAssetsDir() {
|
|
14
|
+
const repoRoot = getRepoRoot();
|
|
15
|
+
return process.env.GEP_ASSETS_DIR || path.join(repoRoot, 'assets', 'gep');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
module.exports = {
|
|
19
|
+
getRepoRoot,
|
|
20
|
+
getMemoryDir,
|
|
21
|
+
getGepAssetsDir,
|
|
22
|
+
};
|
|
23
|
+
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
function buildGepPrompt({
|
|
2
|
+
nowIso,
|
|
3
|
+
context,
|
|
4
|
+
signals,
|
|
5
|
+
selector,
|
|
6
|
+
parentEventId,
|
|
7
|
+
selectedGene,
|
|
8
|
+
capsuleCandidates,
|
|
9
|
+
genesPreview,
|
|
10
|
+
capsulesPreview,
|
|
11
|
+
capabilityCandidatesPreview,
|
|
12
|
+
}) {
|
|
13
|
+
const parentValue = parentEventId ? `"${parentEventId}"` : 'null';
|
|
14
|
+
const selectedGeneId = selectedGene && selectedGene.id ? selectedGene.id : null;
|
|
15
|
+
const capsuleIds = (capsuleCandidates || []).map(c => c && c.id).filter(Boolean);
|
|
16
|
+
|
|
17
|
+
const basePrompt = `
|
|
18
|
+
GEP — GENOME EVOLUTION PROTOCOL (STANDARD EXECUTION) [${nowIso}]
|
|
19
|
+
|
|
20
|
+
You are not a chat assistant.
|
|
21
|
+
You are not a free agent.
|
|
22
|
+
You are a protocol-bound evolution execution engine.
|
|
23
|
+
|
|
24
|
+
All actions must comply with this protocol.
|
|
25
|
+
Any deviation is a failure even if the outcome appears correct.
|
|
26
|
+
|
|
27
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
28
|
+
I. Protocol Positioning (Non-Negotiable)
|
|
29
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
30
|
+
|
|
31
|
+
Protocol goals:
|
|
32
|
+
- Convert reasoning into reusable, auditable, shareable evolution assets
|
|
33
|
+
- Make evolution a standard process, not improvisation
|
|
34
|
+
- Reduce future reasoning cost for similar problems
|
|
35
|
+
|
|
36
|
+
Protocol compliance overrides local optimality.
|
|
37
|
+
|
|
38
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
39
|
+
II. Mandatory Evolution Object Model (All Required)
|
|
40
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
41
|
+
|
|
42
|
+
Every evolution run must explicitly output the following three objects.
|
|
43
|
+
Missing any one is an immediate failure.
|
|
44
|
+
|
|
45
|
+
──────────────────────
|
|
46
|
+
1 EvolutionEvent
|
|
47
|
+
──────────────────────
|
|
48
|
+
|
|
49
|
+
You must emit an EvolutionEvent with all fields present:
|
|
50
|
+
|
|
51
|
+
\`\`\`json
|
|
52
|
+
{
|
|
53
|
+
"type": "EvolutionEvent",
|
|
54
|
+
"id": "evt_<timestamp>",
|
|
55
|
+
"parent": ${parentValue},
|
|
56
|
+
"intent": "repair | optimize | innovate",
|
|
57
|
+
"signals": ["<signal_1>", "<signal_2>"],
|
|
58
|
+
"genes_used": ["<gene_id>"],
|
|
59
|
+
"blast_radius": {
|
|
60
|
+
"files": <number>,
|
|
61
|
+
"lines": <number>
|
|
62
|
+
},
|
|
63
|
+
"outcome": {
|
|
64
|
+
"status": "success | failed",
|
|
65
|
+
"score": <0.0-1.0>
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
\`\`\`
|
|
69
|
+
|
|
70
|
+
EvolutionEvent is the only legal node type in the evolution tree.
|
|
71
|
+
|
|
72
|
+
──────────────────────
|
|
73
|
+
2 Gene
|
|
74
|
+
──────────────────────
|
|
75
|
+
|
|
76
|
+
If a Gene is used, you must reuse an existing Gene first.
|
|
77
|
+
Only create a new Gene when no match exists.
|
|
78
|
+
|
|
79
|
+
Gene must follow this schema:
|
|
80
|
+
|
|
81
|
+
\`\`\`json
|
|
82
|
+
{
|
|
83
|
+
"type": "Gene",
|
|
84
|
+
"id": "gene_<name>",
|
|
85
|
+
"category": "repair | optimize | innovate",
|
|
86
|
+
"signals_match": ["<pattern>"],
|
|
87
|
+
"preconditions": ["<condition>"],
|
|
88
|
+
"strategy": [
|
|
89
|
+
"<step_1>",
|
|
90
|
+
"<step_2>"
|
|
91
|
+
],
|
|
92
|
+
"constraints": {
|
|
93
|
+
"max_files": <number>,
|
|
94
|
+
"forbidden_paths": ["<path>"]
|
|
95
|
+
},
|
|
96
|
+
"validation": ["<check_1>", "<check_2>"]
|
|
97
|
+
}
|
|
98
|
+
\`\`\`
|
|
99
|
+
|
|
100
|
+
A Gene is an evolution interface definition, not code or generic advice.
|
|
101
|
+
|
|
102
|
+
──────────────────────
|
|
103
|
+
3 Capsule
|
|
104
|
+
──────────────────────
|
|
105
|
+
|
|
106
|
+
Only when evolution succeeds, you must generate a Capsule:
|
|
107
|
+
|
|
108
|
+
\`\`\`json
|
|
109
|
+
{
|
|
110
|
+
"type": "Capsule",
|
|
111
|
+
"id": "capsule_<timestamp>",
|
|
112
|
+
"trigger": ["<signal>"],
|
|
113
|
+
"gene": "<gene_id>",
|
|
114
|
+
"summary": "<one sentence>",
|
|
115
|
+
"confidence": <0.0-1.0>
|
|
116
|
+
}
|
|
117
|
+
\`\`\`
|
|
118
|
+
|
|
119
|
+
Capsules exist to prevent repeated reasoning for similar problems.
|
|
120
|
+
|
|
121
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
122
|
+
III. Standard Evolution Execution (Strict Order)
|
|
123
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
124
|
+
|
|
125
|
+
Follow this order exactly. Do not skip, merge, or reorder steps:
|
|
126
|
+
|
|
127
|
+
1 Signal Extraction
|
|
128
|
+
- Extract structured signals from logs, errors, metrics, or instructions
|
|
129
|
+
- Do not proceed to repair or optimize before signals are extracted
|
|
130
|
+
|
|
131
|
+
2 Selection
|
|
132
|
+
- Prefer existing Genes first
|
|
133
|
+
- Then consider existing Capsules
|
|
134
|
+
- No improvisation or trial-and-error strategies
|
|
135
|
+
|
|
136
|
+
You must provide a clear, auditable selection rationale.
|
|
137
|
+
|
|
138
|
+
3 Patch Execution
|
|
139
|
+
- All changes must be small and reversible
|
|
140
|
+
- blast_radius must be estimated and recorded before edits
|
|
141
|
+
|
|
142
|
+
4 Validation
|
|
143
|
+
- Execute Gene-declared validation steps
|
|
144
|
+
- On failure, rollback
|
|
145
|
+
- Failure must still record an EvolutionEvent
|
|
146
|
+
|
|
147
|
+
5 Knowledge Solidification (Mandatory)
|
|
148
|
+
- Update or add Gene if a new pattern is found
|
|
149
|
+
- Generate Capsule on success
|
|
150
|
+
- Append EvolutionEvent
|
|
151
|
+
|
|
152
|
+
If knowledge solidification is missing, the evolution is a failure even if functionality works.
|
|
153
|
+
|
|
154
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
155
|
+
IV. Selector (Mandatory Decision Logic)
|
|
156
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
157
|
+
|
|
158
|
+
When choosing a Gene or Capsule, you must emit a Selector decision.
|
|
159
|
+
|
|
160
|
+
Selector must be explainable, for example:
|
|
161
|
+
|
|
162
|
+
\`\`\`json
|
|
163
|
+
{
|
|
164
|
+
"selected": "${selectedGeneId || '<gene_id>'}",
|
|
165
|
+
"reason": [
|
|
166
|
+
"signals exact match",
|
|
167
|
+
"historical success rate high",
|
|
168
|
+
"low blast radius"
|
|
169
|
+
],
|
|
170
|
+
"alternatives": ${JSON.stringify(capsuleIds.length ? capsuleIds : ['<gene_id_2>'])}
|
|
171
|
+
}
|
|
172
|
+
\`\`\`
|
|
173
|
+
|
|
174
|
+
Selector is part of the protocol, not an implementation detail.
|
|
175
|
+
|
|
176
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
177
|
+
V. Hard Failure Rules (Protocol-Level)
|
|
178
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
179
|
+
|
|
180
|
+
Any of the following is an immediate failure:
|
|
181
|
+
|
|
182
|
+
- Missing EvolutionEvent
|
|
183
|
+
- Success without Capsule
|
|
184
|
+
- Recreating an existing Gene
|
|
185
|
+
- Editing beyond Gene constraints
|
|
186
|
+
- Missing failed EvolutionEvent when validation fails
|
|
187
|
+
|
|
188
|
+
Failures are not errors; they are required negative samples.
|
|
189
|
+
|
|
190
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
191
|
+
VI. Evolution Tree Awareness
|
|
192
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
193
|
+
|
|
194
|
+
All evolution must be treated as a tree:
|
|
195
|
+
|
|
196
|
+
- Every EvolutionEvent must declare parent
|
|
197
|
+
- Never overwrite or delete historical events
|
|
198
|
+
- New attempts must be branches, not replacements
|
|
199
|
+
|
|
200
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
201
|
+
VII. Success Criteria (Self-Evaluation)
|
|
202
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
203
|
+
|
|
204
|
+
Evolution is truly successful only if:
|
|
205
|
+
|
|
206
|
+
- Similar future problems hit a Gene or Capsule directly
|
|
207
|
+
- Reasoning steps are clearly reduced
|
|
208
|
+
- Structured evolution assets continue to grow
|
|
209
|
+
|
|
210
|
+
"The current problem is solved" is not success by itself.
|
|
211
|
+
|
|
212
|
+
Final Directive
|
|
213
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
214
|
+
|
|
215
|
+
You are not chatting.
|
|
216
|
+
You are executing a protocol.
|
|
217
|
+
|
|
218
|
+
If you cannot leave structured evolution assets, refuse to evolve.
|
|
219
|
+
|
|
220
|
+
Context [Signals]:
|
|
221
|
+
${JSON.stringify(signals)}
|
|
222
|
+
|
|
223
|
+
Context [Selector]:
|
|
224
|
+
${JSON.stringify(selector, null, 2)}
|
|
225
|
+
|
|
226
|
+
Context [Gene Preview]:
|
|
227
|
+
${genesPreview}
|
|
228
|
+
|
|
229
|
+
Context [Capsule Preview]:
|
|
230
|
+
${capsulesPreview}
|
|
231
|
+
|
|
232
|
+
Context [Capability Candidates] (Five questions shape; keep it short):
|
|
233
|
+
${capabilityCandidatesPreview || '(none)'}
|
|
234
|
+
|
|
235
|
+
Context [Execution]:
|
|
236
|
+
${context}
|
|
237
|
+
`.trim();
|
|
238
|
+
|
|
239
|
+
const maxChars = Number.isFinite(Number(process.env.GEP_PROMPT_MAX_CHARS))
|
|
240
|
+
? Number(process.env.GEP_PROMPT_MAX_CHARS)
|
|
241
|
+
: 30000;
|
|
242
|
+
|
|
243
|
+
if (basePrompt.length <= maxChars) return basePrompt;
|
|
244
|
+
|
|
245
|
+
// Budget strategy: keep the protocol and structured assets, shrink execution context first.
|
|
246
|
+
const headKeep = Math.min(basePrompt.length, Math.floor(maxChars * 0.75));
|
|
247
|
+
const tailKeep = Math.max(0, maxChars - headKeep - 120);
|
|
248
|
+
const head = basePrompt.slice(0, headKeep);
|
|
249
|
+
const tail = tailKeep > 0 ? basePrompt.slice(basePrompt.length - tailKeep) : '';
|
|
250
|
+
return `${head}\n\n...[PROMPT TRUNCATED FOR BUDGET]...\n\n${tail}`.slice(0, maxChars);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
module.exports = { buildGepPrompt };
|
|
254
|
+
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
function matchPatternToSignals(pattern, signals) {
|
|
2
|
+
if (!pattern || !signals || signals.length === 0) return false;
|
|
3
|
+
const p = String(pattern);
|
|
4
|
+
const sig = signals.map(s => String(s));
|
|
5
|
+
|
|
6
|
+
const regexLike = p.length >= 2 && p.startsWith('/') && p.lastIndexOf('/') > 0;
|
|
7
|
+
if (regexLike) {
|
|
8
|
+
const lastSlash = p.lastIndexOf('/');
|
|
9
|
+
const body = p.slice(1, lastSlash);
|
|
10
|
+
const flags = p.slice(lastSlash + 1);
|
|
11
|
+
try {
|
|
12
|
+
const re = new RegExp(body, flags || 'i');
|
|
13
|
+
return sig.some(s => re.test(s));
|
|
14
|
+
} catch (e) {
|
|
15
|
+
// fallback to substring
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const needle = p.toLowerCase();
|
|
20
|
+
return sig.some(s => s.toLowerCase().includes(needle));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function scoreGene(gene, signals) {
|
|
24
|
+
if (!gene || gene.type !== 'Gene') return 0;
|
|
25
|
+
const patterns = Array.isArray(gene.signals_match) ? gene.signals_match : [];
|
|
26
|
+
if (patterns.length === 0) return 0;
|
|
27
|
+
let score = 0;
|
|
28
|
+
for (const pat of patterns) {
|
|
29
|
+
if (matchPatternToSignals(pat, signals)) score += 1;
|
|
30
|
+
}
|
|
31
|
+
return score;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function selectGene(genes, signals) {
|
|
35
|
+
const scored = genes
|
|
36
|
+
.map(g => ({ gene: g, score: scoreGene(g, signals) }))
|
|
37
|
+
.filter(x => x.score > 0)
|
|
38
|
+
.sort((a, b) => b.score - a.score);
|
|
39
|
+
|
|
40
|
+
if (scored.length === 0) return { selected: null, alternatives: [] };
|
|
41
|
+
return {
|
|
42
|
+
selected: scored[0].gene,
|
|
43
|
+
alternatives: scored.slice(1, 4).map(x => x.gene),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function selectCapsule(capsules, signals) {
|
|
48
|
+
const scored = (capsules || [])
|
|
49
|
+
.map(c => {
|
|
50
|
+
const triggers = Array.isArray(c.trigger) ? c.trigger : [];
|
|
51
|
+
const score = triggers.reduce((acc, t) => (matchPatternToSignals(t, signals) ? acc + 1 : acc), 0);
|
|
52
|
+
return { capsule: c, score };
|
|
53
|
+
})
|
|
54
|
+
.filter(x => x.score > 0)
|
|
55
|
+
.sort((a, b) => b.score - a.score);
|
|
56
|
+
return scored.length ? scored[0].capsule : null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function selectGeneAndCapsule({ genes, capsules, signals }) {
|
|
60
|
+
const { selected, alternatives } = selectGene(genes, signals);
|
|
61
|
+
const capsule = selectCapsule(capsules, signals);
|
|
62
|
+
const selector = buildSelectorDecision({ gene: selected, capsule, signals, alternatives });
|
|
63
|
+
return {
|
|
64
|
+
selectedGene: selected,
|
|
65
|
+
capsuleCandidates: capsule ? [capsule] : [],
|
|
66
|
+
selector,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function buildSelectorDecision({ gene, capsule, signals, alternatives }) {
|
|
71
|
+
const reason = [];
|
|
72
|
+
if (gene) reason.push('signals match gene.signals_match');
|
|
73
|
+
if (capsule) reason.push('capsule trigger matches signals');
|
|
74
|
+
if (!gene) reason.push('no matching gene found; new gene may be required');
|
|
75
|
+
if (signals && signals.length) reason.push(`signals: ${signals.join(', ')}`);
|
|
76
|
+
return {
|
|
77
|
+
selected: gene ? gene.id : null,
|
|
78
|
+
reason,
|
|
79
|
+
alternatives: Array.isArray(alternatives) ? alternatives.map(g => g.id) : [],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
module.exports = {
|
|
84
|
+
selectGeneAndCapsule,
|
|
85
|
+
selectGene,
|
|
86
|
+
selectCapsule,
|
|
87
|
+
buildSelectorDecision,
|
|
88
|
+
};
|
|
89
|
+
|