@openlife/cli 1.7.14 → 1.8.3
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/.catalog/agents/ad-midas/AGENT.md +182 -0
- package/.catalog/agents/ads-analyst/AGENT.md +168 -0
- package/.catalog/agents/agency-agents/AGENT.md +208 -0
- package/.catalog/agents/aha-moment-identifier/AGENT.md +184 -0
- package/.catalog/agents/ai-builder-analyst/AGENT.md +214 -0
- package/.catalog/agents/ai-builder-builder/AGENT.md +241 -0
- package/.catalog/agents/ai-builder-design-director/AGENT.md +216 -0
- package/.catalog/agents/ai-builder-infra-data/AGENT.md +228 -0
- package/.catalog/agents/ai-builder-orchestrator/AGENT.md +207 -0
- package/.catalog/agents/ai-builder-qa-reviewer/AGENT.md +252 -0
- package/.catalog/agents/ai-builder-release-manager/AGENT.md +248 -0
- package/.catalog/agents/ai-scientist-council/AGENT.md +57 -0
- package/.catalog/agents/al-ries/AGENT.md +208 -0
- package/.catalog/agents/alert-classifier/AGENT.md +184 -0
- package/.catalog/agents/alina-wheeler/AGENT.md +217 -0
- package/.catalog/agents/ambient-listener/AGENT.md +153 -0
- package/.catalog/agents/analista-de-impacto/AGENT.md +383 -0
- package/.catalog/agents/analyst-brief-generator/AGENT.md +189 -0
- package/.catalog/agents/andre-chaperon/AGENT.md +239 -0
- package/.catalog/agents/anomaly-detector/AGENT.md +172 -0
- package/.catalog/agents/arbiter/AGENT.md +43 -0
- package/.catalog/agents/archetype-consultant/AGENT.md +248 -0
- package/.catalog/agents/architecture-checker/AGENT.md +178 -0
- package/.catalog/agents/arquivista/AGENT.md +59 -0
- package/.catalog/agents/art-director/AGENT.md +142 -0
- package/.catalog/agents/assayer/AGENT.md +49 -0
- package/.catalog/agents/atlas/AGENT.md +97 -0
- package/.catalog/agents/avaliadora/AGENT.md +66 -0
- package/.catalog/agents/avinash-kaushik/AGENT.md +301 -0
- package/.catalog/agents/bazaar/AGENT.md +43 -0
- package/.catalog/agents/beatriz-monteiro/AGENT.md +76 -0
- package/.catalog/agents/ben-settle/AGENT.md +227 -0
- package/.catalog/agents/bias-auditor/AGENT.md +177 -0
- package/.catalog/agents/blake-snyder/AGENT.md +258 -0
- package/.catalog/agents/board-chair/AGENT.md +194 -0
- package/.catalog/agents/brad-frost/AGENT.md +218 -0
- package/.catalog/agents/brand-chief/AGENT.md +191 -0
- package/.catalog/agents/brene-brown/AGENT.md +329 -0
- package/.catalog/agents/bridge/AGENT.md +43 -0
- package/.catalog/agents/brief-synthesizer/AGENT.md +120 -0
- package/.catalog/agents/bruno-cezar/AGENT.md +70 -0
- package/.catalog/agents/builder/AGENT.md +115 -0
- package/.catalog/agents/busterer/AGENT.md +141 -0
- package/.catalog/agents/byron-sharp/AGENT.md +202 -0
- package/.catalog/agents/caio-architect/AGENT.md +268 -0
- package/.catalog/agents/candidate-summary-agent/AGENT.md +171 -0
- package/.catalog/agents/capital-strategist/AGENT.md +55 -0
- package/.catalog/agents/cartographer/AGENT.md +147 -0
- package/.catalog/agents/catalyst/AGENT.md +43 -0
- package/.catalog/agents/chain/AGENT.md +51 -0
- package/.catalog/agents/chancellor/AGENT.md +101 -0
- package/.catalog/agents/charlie-munger/AGENT.md +623 -0
- package/.catalog/agents/checklist-builder/AGENT.md +182 -0
- package/.catalog/agents/chris-sanders/AGENT.md +238 -0
- package/.catalog/agents/chronicler/AGENT.md +49 -0
- package/.catalog/agents/cio-engineer/AGENT.md +242 -0
- package/.catalog/agents/claude-hopkins/AGENT.md +215 -0
- package/.catalog/agents/clause-extractor/AGENT.md +193 -0
- package/.catalog/agents/clayton-makepeace/AGENT.md +258 -0
- package/.catalog/agents/clinical-note-drafter/AGENT.md +174 -0
- package/.catalog/agents/closer/AGENT.md +71 -0
- package/.catalog/agents/cloudflare-archon/AGENT.md +70 -0
- package/.catalog/agents/cmo-architect/AGENT.md +241 -0
- package/.catalog/agents/command-generator/AGENT.md +154 -0
- package/.catalog/agents/community-growth/AGENT.md +180 -0
- package/.catalog/agents/conduit/AGENT.md +43 -0
- package/.catalog/agents/consul/AGENT.md +43 -0
- package/.catalog/agents/context-composer/AGENT.md +149 -0
- package/.catalog/agents/context-enricher/AGENT.md +173 -0
- package/.catalog/agents/contrarian/AGENT.md +43 -0
- package/.catalog/agents/coo-orchestrator/AGENT.md +226 -0
- package/.catalog/agents/copy-chief/AGENT.md +199 -0
- package/.catalog/agents/creative-analyst/AGENT.md +175 -0
- package/.catalog/agents/critias/AGENT.md +43 -0
- package/.catalog/agents/crm-manager/AGENT.md +73 -0
- package/.catalog/agents/crypto-orchestrator/AGENT.md +205 -0
- package/.catalog/agents/cto-architect/AGENT.md +227 -0
- package/.catalog/agents/curadora/AGENT.md +65 -0
- package/.catalog/agents/curriculum-mapper/AGENT.md +183 -0
- package/.catalog/agents/cyber-chief/AGENT.md +153 -0
- package/.catalog/agents/dan-harmon/AGENT.md +200 -0
- package/.catalog/agents/dan-kennedy/AGENT.md +235 -0
- package/.catalog/agents/dan-koe/AGENT.md +256 -0
- package/.catalog/agents/dan-mall/AGENT.md +211 -0
- package/.catalog/agents/data-chief/AGENT.md +200 -0
- package/.catalog/agents/data-profiler/AGENT.md +180 -0
- package/.catalog/agents/data-quality-reporter/AGENT.md +209 -0
- package/.catalog/agents/dave-malouf/AGENT.md +231 -0
- package/.catalog/agents/david-aaker/AGENT.md +199 -0
- package/.catalog/agents/david-deutsch/AGENT.md +230 -0
- package/.catalog/agents/david-ogilvy/AGENT.md +231 -0
- package/.catalog/agents/david-spinks/AGENT.md +310 -0
- package/.catalog/agents/defi-launcher/AGENT.md +158 -0
- package/.catalog/agents/delivery-tracker/AGENT.md +69 -0
- package/.catalog/agents/denise-yohn/AGENT.md +205 -0
- package/.catalog/agents/depesh-mandalia/AGENT.md +207 -0
- package/.catalog/agents/derek-sivers/AGENT.md +301 -0
- package/.catalog/agents/design-chief/AGENT.md +142 -0
- package/.catalog/agents/design-system-architect/AGENT.md +142 -0
- package/.catalog/agents/destiladora/AGENT.md +71 -0
- package/.catalog/agents/diagnostic-assessor/AGENT.md +176 -0
- package/.catalog/agents/dirber/AGENT.md +144 -0
- package/.catalog/agents/domain-scout/AGENT.md +168 -0
- package/.catalog/agents/domain-seer/AGENT.md +46 -0
- package/.catalog/agents/donald-miller/AGENT.md +212 -0
- package/.catalog/agents/emily-heyward/AGENT.md +180 -0
- package/.catalog/agents/engine/AGENT.md +43 -0
- package/.catalog/agents/estrategista-de-ciclo/AGENT.md +334 -0
- package/.catalog/agents/eugene-schwartz/AGENT.md +271 -0
- package/.catalog/agents/extratora/AGENT.md +65 -0
- package/.catalog/agents/false-positive-filter/AGENT.md +169 -0
- package/.catalog/agents/fenomenologo/AGENT.md +202 -0
- package/.catalog/agents/fiscal/AGENT.md +177 -0
- package/.catalog/agents/followup-agent/AGENT.md +69 -0
- package/.catalog/agents/format-adapter/AGENT.md +87 -0
- package/.catalog/agents/frank-kern/AGENT.md +228 -0
- package/.catalog/agents/frontend-engineer/AGENT.md +82 -0
- package/.catalog/agents/frontier-power-mapper/AGENT.md +56 -0
- package/.catalog/agents/fuzzer/AGENT.md +154 -0
- package/.catalog/agents/gary-bencivenga/AGENT.md +230 -0
- package/.catalog/agents/gary-halbert/AGENT.md +252 -0
- package/.catalog/agents/genome/AGENT.md +50 -0
- package/.catalog/agents/georgia-weidman/AGENT.md +211 -0
- package/.catalog/agents/guide/AGENT.md +43 -0
- package/.catalog/agents/hammer/AGENT.md +50 -0
- package/.catalog/agents/helena-voss/AGENT.md +79 -0
- package/.catalog/agents/helena-voss-v2/AGENT.md +196 -0
- package/.catalog/agents/herald/AGENT.md +98 -0
- package/.catalog/agents/hermes/AGENT.md +75 -0
- package/.catalog/agents/hormozi-ads/AGENT.md +192 -0
- package/.catalog/agents/hormozi-advisor/AGENT.md +211 -0
- package/.catalog/agents/hormozi-audit/AGENT.md +211 -0
- package/.catalog/agents/hormozi-chief/AGENT.md +144 -0
- package/.catalog/agents/hormozi-closer/AGENT.md +212 -0
- package/.catalog/agents/hormozi-content/AGENT.md +199 -0
- package/.catalog/agents/hormozi-copy/AGENT.md +185 -0
- package/.catalog/agents/hormozi-hooks/AGENT.md +210 -0
- package/.catalog/agents/hormozi-launch/AGENT.md +193 -0
- package/.catalog/agents/hormozi-leads/AGENT.md +231 -0
- package/.catalog/agents/hormozi-models/AGENT.md +224 -0
- package/.catalog/agents/hormozi-offers/AGENT.md +230 -0
- package/.catalog/agents/hormozi-pricing/AGENT.md +184 -0
- package/.catalog/agents/hormozi-retention/AGENT.md +199 -0
- package/.catalog/agents/hormozi-scale/AGENT.md +208 -0
- package/.catalog/agents/hormozi-workshop/AGENT.md +193 -0
- package/.catalog/agents/hostinger-warden/AGENT.md +46 -0
- package/.catalog/agents/html5-builder/AGENT.md +106 -0
- package/.catalog/agents/hype-detector/AGENT.md +52 -0
- package/.catalog/agents/identitario/AGENT.md +298 -0
- package/.catalog/agents/indexadora/AGENT.md +49 -0
- package/.catalog/agents/instagram-scout/AGENT.md +94 -0
- package/.catalog/agents/interaction-architect/AGENT.md +81 -0
- package/.catalog/agents/jean-noel-kapferer/AGENT.md +222 -0
- package/.catalog/agents/jim-manico/AGENT.md +215 -0
- package/.catalog/agents/jim-rutz/AGENT.md +226 -0
- package/.catalog/agents/joe-sugarman/AGENT.md +267 -0
- package/.catalog/agents/john-carlton/AGENT.md +236 -0
- package/.catalog/agents/jon-benson/AGENT.md +229 -0
- package/.catalog/agents/joseph-campbell/AGENT.md +217 -0
- package/.catalog/agents/kasim-aslam/AGENT.md +191 -0
- package/.catalog/agents/keith-johnstone/AGENT.md +190 -0
- package/.catalog/agents/kevin-keller/AGENT.md +232 -0
- package/.catalog/agents/kindra-hall/AGENT.md +195 -0
- package/.catalog/agents/lara-coordinator/AGENT.md +147 -0
- package/.catalog/agents/lead-qualifier/AGENT.md +73 -0
- package/.catalog/agents/leitora-critica/AGENT.md +70 -0
- package/.catalog/agents/lens/AGENT.md +50 -0
- package/.catalog/agents/log-analyzer/AGENT.md +176 -0
- package/.catalog/agents/logic-reviewer/AGENT.md +177 -0
- package/.catalog/agents/lp-backend-dev/AGENT.md +198 -0
- package/.catalog/agents/lp-copywriter/AGENT.md +162 -0
- package/.catalog/agents/lp-design-architect/AGENT.md +209 -0
- package/.catalog/agents/lp-frontend-dev/AGENT.md +194 -0
- package/.catalog/agents/lp-image-creator/AGENT.md +156 -0
- package/.catalog/agents/lp-integrator/AGENT.md +182 -0
- package/.catalog/agents/lp-researcher/AGENT.md +169 -0
- package/.catalog/agents/lp-reviewer/AGENT.md +218 -0
- package/.catalog/agents/lp-strategist/AGENT.md +159 -0
- package/.catalog/agents/magistrate/AGENT.md +43 -0
- package/.catalog/agents/manifestador/AGENT.md +312 -0
- package/.catalog/agents/marcus-carey/AGENT.md +233 -0
- package/.catalog/agents/marcus-leal/AGENT.md +70 -0
- package/.catalog/agents/market-economist/AGENT.md +60 -0
- package/.catalog/agents/marshall-ganz/AGENT.md +200 -0
- package/.catalog/agents/marty-neumeier/AGENT.md +203 -0
- package/.catalog/agents/matthew-dicks/AGENT.md +185 -0
- package/.catalog/agents/media-buyer/AGENT.md +192 -0
- package/.catalog/agents/medical-coder/AGENT.md +175 -0
- package/.catalog/agents/merchant/AGENT.md +43 -0
- package/.catalog/agents/mercury/AGENT.md +50 -0
- package/.catalog/agents/metadata-artist/AGENT.md +208 -0
- package/.catalog/agents/miller-sticky-brand/AGENT.md +213 -0
- package/.catalog/agents/mirror/AGENT.md +49 -0
- package/.catalog/agents/molly-pittman/AGENT.md +218 -0
- package/.catalog/agents/motion-designer/AGENT.md +88 -0
- package/.catalog/agents/movement-architect/AGENT.md +243 -0
- package/.catalog/agents/movement-chief/AGENT.md +168 -0
- package/.catalog/agents/naming-strategist/AGENT.md +204 -0
- package/.catalog/agents/nancy-duarte/AGENT.md +187 -0
- package/.catalog/agents/naval-ravikant/AGENT.md +284 -0
- package/.catalog/agents/nicholas-kusmich/AGENT.md +190 -0
- package/.catalog/agents/nick-mehta/AGENT.md +327 -0
- package/.catalog/agents/node-scorer/AGENT.md +137 -0
- package/.catalog/agents/objection-handler/AGENT.md +73 -0
- package/.catalog/agents/omar-santos/AGENT.md +239 -0
- package/.catalog/agents/operator-brain/AGENT.md +54 -0
- package/.catalog/agents/opportunity-strategist/AGENT.md +61 -0
- package/.catalog/agents/ops-coordinator/AGENT.md +75 -0
- package/.catalog/agents/oracle/AGENT.md +43 -0
- package/.catalog/agents/oren-klaff/AGENT.md +199 -0
- package/.catalog/agents/parent-report-agent/AGENT.md +186 -0
- package/.catalog/agents/park-howell/AGENT.md +185 -0
- package/.catalog/agents/parris-lampropoulos/AGENT.md +221 -0
- package/.catalog/agents/pathfinder/AGENT.md +60 -0
- package/.catalog/agents/patrick-lencioni/AGENT.md +427 -0
- package/.catalog/agents/pattern-analyst/AGENT.md +93 -0
- package/.catalog/agents/pedro-sobral/AGENT.md +191 -0
- package/.catalog/agents/perfectionist/AGENT.md +136 -0
- package/.catalog/agents/performance-analyst/AGENT.md +168 -0
- package/.catalog/agents/peter-fader/AGENT.md +279 -0
- package/.catalog/agents/peter-kim/AGENT.md +212 -0
- package/.catalog/agents/peter-thiel/AGENT.md +302 -0
- package/.catalog/agents/pixel-specialist/AGENT.md +177 -0
- package/.catalog/agents/playbook-enforcer/AGENT.md +194 -0
- package/.catalog/agents/postmortem-writer/AGENT.md +193 -0
- package/.catalog/agents/press-kit-hunter/AGENT.md +101 -0
- package/.catalog/agents/priority-engine/AGENT.md +71 -0
- package/.catalog/agents/proactive-outreach/AGENT.md +211 -0
- package/.catalog/agents/progress-tracker/AGENT.md +192 -0
- package/.catalog/agents/project-architect/AGENT.md +70 -0
- package/.catalog/agents/proposal-writer/AGENT.md +74 -0
- package/.catalog/agents/quality-reviewer/AGENT.md +184 -0
- package/.catalog/agents/rafa-ads/AGENT.md +236 -0
- package/.catalog/agents/rafa-content/AGENT.md +126 -0
- package/.catalog/agents/rafa-copy-master/AGENT.md +150 -0
- package/.catalog/agents/rafa-growth-router/AGENT.md +168 -0
- package/.catalog/agents/rafa-hooks/AGENT.md +106 -0
- package/.catalog/agents/rafa-leads/AGENT.md +113 -0
- package/.catalog/agents/rafa-lens/AGENT.md +62 -0
- package/.catalog/agents/railway-conductor/AGENT.md +70 -0
- package/.catalog/agents/ralph-burns/AGENT.md +196 -0
- package/.catalog/agents/ray-dalio/AGENT.md +619 -0
- package/.catalog/agents/redline-drafter/AGENT.md +198 -0
- package/.catalog/agents/reference-hunter/AGENT.md +192 -0
- package/.catalog/agents/reid-hoffman/AGENT.md +311 -0
- package/.catalog/agents/remediation-suggester/AGENT.md +173 -0
- package/.catalog/agents/resume-parser/AGENT.md +171 -0
- package/.catalog/agents/retrospective-agent/AGENT.md +70 -0
- package/.catalog/agents/review-summary-writer/AGENT.md +177 -0
- package/.catalog/agents/ripper/AGENT.md +154 -0
- package/.catalog/agents/risk-flagger/AGENT.md +196 -0
- package/.catalog/agents/robert-collier/AGENT.md +216 -0
- package/.catalog/agents/rogue/AGENT.md +149 -0
- package/.catalog/agents/root-cause-correlator/AGENT.md +187 -0
- package/.catalog/agents/runbook-executor/AGENT.md +180 -0
- package/.catalog/agents/russell-brunson/AGENT.md +262 -0
- package/.catalog/agents/ry-schwartz/AGENT.md +218 -0
- package/.catalog/agents/sales-strategist/AGENT.md +74 -0
- package/.catalog/agents/scale-optimizer/AGENT.md +177 -0
- package/.catalog/agents/schema-validator/AGENT.md +173 -0
- package/.catalog/agents/scribe/AGENT.md +101 -0
- package/.catalog/agents/sculptor/AGENT.md +110 -0
- package/.catalog/agents/sean-ellis/AGENT.md +336 -0
- package/.catalog/agents/security-auditor/AGENT.md +195 -0
- package/.catalog/agents/security-reviewer/AGENT.md +178 -0
- package/.catalog/agents/security-sentinel/AGENT.md +47 -0
- package/.catalog/agents/sentinel/AGENT.md +54 -0
- package/.catalog/agents/shannon-runner/AGENT.md +141 -0
- package/.catalog/agents/shawn-coyne/AGENT.md +241 -0
- package/.catalog/agents/shield/AGENT.md +43 -0
- package/.catalog/agents/shortlist-ranker/AGENT.md +168 -0
- package/.catalog/agents/simon-sinek/AGENT.md +324 -0
- package/.catalog/agents/skills-matcher/AGENT.md +181 -0
- package/.catalog/agents/smelter/AGENT.md +50 -0
- package/.catalog/agents/solana-dev/AGENT.md +187 -0
- package/.catalog/agents/status-page-updater/AGENT.md +204 -0
- package/.catalog/agents/stefan-georgi/AGENT.md +221 -0
- package/.catalog/agents/story-chief/AGENT.md +188 -0
- package/.catalog/agents/strategist/AGENT.md +113 -0
- package/.catalog/agents/style-enforcer/AGENT.md +180 -0
- package/.catalog/agents/summary-reporter/AGENT.md +236 -0
- package/.catalog/agents/task-decomposer/AGENT.md +138 -0
- package/.catalog/agents/task-manager/AGENT.md +75 -0
- package/.catalog/agents/terminal/AGENT.md +43 -0
- package/.catalog/agents/test-agent/AGENT.md +8 -0
- package/.catalog/agents/threat-prioritizer/AGENT.md +183 -0
- package/.catalog/agents/todd-brown/AGENT.md +204 -0
- package/.catalog/agents/token-architect/AGENT.md +180 -0
- package/.catalog/agents/tokenomics-strategist/AGENT.md +172 -0
- package/.catalog/agents/tom-breeze/AGENT.md +208 -0
- package/.catalog/agents/tooltip-generator/AGENT.md +181 -0
- package/.catalog/agents/traffic-chief/AGENT.md +130 -0
- package/.catalog/agents/tree-integrator/AGENT.md +151 -0
- package/.catalog/agents/tree-orchestrator/AGENT.md +151 -0
- package/.catalog/agents/tree-validator/AGENT.md +154 -0
- package/.catalog/agents/trend-historian/AGENT.md +82 -0
- package/.catalog/agents/tunnel-master/AGENT.md +53 -0
- package/.catalog/agents/tutor-agent/AGENT.md +204 -0
- package/.catalog/agents/ui-engineer/AGENT.md +135 -0
- package/.catalog/agents/user-behavior-tracker/AGENT.md +183 -0
- package/.catalog/agents/ux-critic/AGENT.md +82 -0
- package/.catalog/agents/ux-designer/AGENT.md +138 -0
- package/.catalog/agents/vercel-pilot/AGENT.md +51 -0
- package/.catalog/agents/vision-chief/AGENT.md +234 -0
- package/.catalog/agents/visual-ads/AGENT.md +115 -0
- package/.catalog/agents/visual-director/AGENT.md +79 -0
- package/.catalog/agents/visual-generator/AGENT.md +141 -0
- package/.catalog/agents/visual-researcher/AGENT.md +100 -0
- package/.catalog/agents/voice/AGENT.md +43 -0
- package/.catalog/agents/vulcan/AGENT.md +107 -0
- package/.catalog/agents/wave-dispatcher/AGENT.md +172 -0
- package/.catalog/agents/weaver/AGENT.md +49 -0
- package/.catalog/agents/wes-kao/AGENT.md +301 -0
- package/.catalog/agents/wire/AGENT.md +43 -0
- package/.catalog/agents/yvon-chouinard/AGENT.md +308 -0
- package/.catalog/capabilities/deep-research/INDEX.md +26 -0
- package/.catalog/capabilities/deep-research/capability.yaml +30 -0
- package/.catalog/capabilities/deep-research/skills/advanced-query-planning.md +24 -0
- package/.catalog/capabilities/deep-research/skills/contradiction-analysis.md +24 -0
- package/.catalog/capabilities/deep-research/skills/evidence-synthesis.md +24 -0
- package/.catalog/capabilities/deep-research/skills/executive-briefing.md +24 -0
- package/.catalog/capabilities/deep-research/skills/source-credibility-scoring.md +24 -0
- package/.catalog/capabilities/deep-research/squads/research-squad/SQUAD.md +18 -0
- package/.catalog/capabilities/deep-research/workflows/deep-research-flow.yaml +15 -0
- package/.catalog/mcps/my-mcp/REFERENCE.md +7 -0
- package/.catalog/mcps/test-mcp/mcp.json +7 -0
- package/.catalog/skill-networks.json +29 -0
- package/.catalog/skills/1password/SKILL.md +34 -0
- package/.catalog/skills/apple-notes/SKILL.md +34 -0
- package/.catalog/skills/apple-reminders/SKILL.md +34 -0
- package/.catalog/skills/bear-notes/SKILL.md +34 -0
- package/.catalog/skills/blogwatcher/SKILL.md +34 -0
- package/.catalog/skills/blucli/SKILL.md +34 -0
- package/.catalog/skills/bluebubbles/SKILL.md +34 -0
- package/.catalog/skills/browser-use/SKILL.md +132 -0
- package/.catalog/skills/camsnap/SKILL.md +34 -0
- package/.catalog/skills/canvas/SKILL.md +34 -0
- package/.catalog/skills/clawhub/SKILL.md +34 -0
- package/.catalog/skills/coding-agent/SKILL.md +34 -0
- package/.catalog/skills/design-extractor/OPENLIFE_INSTALL.md +24 -0
- package/.catalog/skills/design-extractor/SKILL.md +413 -0
- package/.catalog/skills/design-extractor/references/css-patterns.md +97 -0
- package/.catalog/skills/discord/SKILL.md +34 -0
- package/.catalog/skills/eightctl/SKILL.md +34 -0
- package/.catalog/skills/gemini/SKILL.md +34 -0
- package/.catalog/skills/gh-issues/SKILL.md +34 -0
- package/.catalog/skills/gifgrep/SKILL.md +34 -0
- package/.catalog/skills/github/SKILL.md +34 -0
- package/.catalog/skills/gog/SKILL.md +34 -0
- package/.catalog/skills/goplaces/SKILL.md +34 -0
- package/.catalog/skills/healthcheck/SKILL.md +34 -0
- package/.catalog/skills/himalaya/SKILL.md +34 -0
- package/.catalog/skills/imsg/SKILL.md +34 -0
- package/.catalog/skills/mcporter/SKILL.md +34 -0
- package/.catalog/skills/model-usage/SKILL.md +34 -0
- package/.catalog/skills/nano-banana-pro/SKILL.md +34 -0
- package/.catalog/skills/nano-pdf/SKILL.md +34 -0
- package/.catalog/skills/node-connect/SKILL.md +34 -0
- package/.catalog/skills/notion/SKILL.md +34 -0
- package/.catalog/skills/obsidian/SKILL.md +34 -0
- package/.catalog/skills/openai-image-gen/SKILL.md +34 -0
- package/.catalog/skills/openai-whisper/SKILL.md +34 -0
- package/.catalog/skills/openai-whisper-api/SKILL.md +34 -0
- package/.catalog/skills/openhue/SKILL.md +34 -0
- package/.catalog/skills/oracle/SKILL.md +34 -0
- package/.catalog/skills/ordercli/SKILL.md +34 -0
- package/.catalog/skills/peekaboo/SKILL.md +34 -0
- package/.catalog/skills/sag/SKILL.md +34 -0
- package/.catalog/skills/sample-from-url/IMPORTED_REFERENCE.md +13 -0
- package/.catalog/skills/session-logs/SKILL.md +34 -0
- package/.catalog/skills/sherpa-onnx-tts/SKILL.md +34 -0
- package/.catalog/skills/skill-creator/SKILL.md +34 -0
- package/.catalog/skills/slack/SKILL.md +34 -0
- package/.catalog/skills/songsee/SKILL.md +34 -0
- package/.catalog/skills/sonoscli/SKILL.md +34 -0
- package/.catalog/skills/spotify-player/SKILL.md +34 -0
- package/.catalog/skills/summarize/SKILL.md +34 -0
- package/.catalog/skills/test-skill/REFERENCE.md +7 -0
- package/.catalog/skills/test-skill-autogen/SKILL.md +9 -0
- package/.catalog/skills/things-mac/SKILL.md +34 -0
- package/.catalog/skills/tmux/SKILL.md +34 -0
- package/.catalog/skills/trello/SKILL.md +34 -0
- package/.catalog/skills/video-frames/SKILL.md +34 -0
- package/.catalog/skills/voice-call/SKILL.md +34 -0
- package/.catalog/skills/wacli/SKILL.md +34 -0
- package/.catalog/skills/weather/SKILL.md +34 -0
- package/.catalog/skills/xurl/SKILL.md +34 -0
- package/.catalog/squads/00-governance-advisory-board/SQUAD.md +103 -0
- package/.catalog/squads/00-governance-c-level-squad/SQUAD.md +93 -0
- package/.catalog/squads/00-governance-capital-ai/SQUAD.md +147 -0
- package/.catalog/squads/00-governance-capital-ai-canon-v1-livros-e-grandes-mentes/SQUAD.md +140 -0
- package/.catalog/squads/00-governance-capital-ai-definicao-canonica/SQUAD.md +49 -0
- package/.catalog/squads/00-governance-conselho/SQUAD.md +116 -0
- package/.catalog/squads/00-governance-host-quest/SQUAD.md +132 -0
- package/.catalog/squads/00-governance-project-ops-squad/SQUAD.md +97 -0
- package/.catalog/squads/00-governance-scrap-master/SQUAD.md +124 -0
- package/.catalog/squads/01-meta-framework-ai-builder/SQUAD.md +167 -0
- package/.catalog/squads/01-meta-framework-aiobuilder-funcionalidades-inspiradas-em-claude-code/SQUAD.md +119 -0
- package/.catalog/squads/01-meta-framework-swarm-tree-orchestration/SQUAD.md +130 -0
- package/.catalog/squads/02-product-growth-ads-xpower/SQUAD.md +129 -0
- package/.catalog/squads/02-product-growth-awards/SQUAD.md +123 -0
- package/.catalog/squads/02-product-growth-brand-squad/SQUAD.md +136 -0
- package/.catalog/squads/02-product-growth-copy-squad/SQUAD.md +148 -0
- package/.catalog/squads/02-product-growth-design-squad/SQUAD.md +98 -0
- package/.catalog/squads/02-product-growth-fabrica-ads/SQUAD.md +157 -0
- package/.catalog/squads/02-product-growth-fabrica-imortais-backup/SQUAD.md +148 -0
- package/.catalog/squads/02-product-growth-hormozi-squad/SQUAD.md +118 -0
- package/.catalog/squads/02-product-growth-movement/SQUAD.md +94 -0
- package/.catalog/squads/02-product-growth-saas-onboarding-activator/SQUAD.md +103 -0
- package/.catalog/squads/02-product-growth-sales-squad/SQUAD.md +112 -0
- package/.catalog/squads/02-product-growth-storytelling/SQUAD.md +106 -0
- package/.catalog/squads/02-product-growth-traffic-masters/SQUAD.md +117 -0
- package/.catalog/squads/02-product-growth-ultimate-landingpage/SQUAD.md +114 -0
- package/.catalog/squads/03-engineering-quality-automated-code-review-squad/SQUAD.md +102 -0
- package/.catalog/squads/03-engineering-quality-cloudflare-mini/SQUAD.md +65 -0
- package/.catalog/squads/03-engineering-quality-seguranca/SQUAD.md +24 -0
- package/.catalog/squads/04-data-security-cybersecurity/SQUAD.md +113 -0
- package/.catalog/squads/04-data-security-data-quality-guardian/SQUAD.md +102 -0
- package/.catalog/squads/04-data-security-data-squad/SQUAD.md +95 -0
- package/.catalog/squads/04-data-security-incident-response-squad/SQUAD.md +103 -0
- package/.catalog/squads/04-data-security-soc-alert-triage/SQUAD.md +103 -0
- package/.catalog/squads/05-domain-specialists-adaptive-tutor-k12/SQUAD.md +102 -0
- package/.catalog/squads/05-domain-specialists-ambient-clinical-scribe/SQUAD.md +102 -0
- package/.catalog/squads/05-domain-specialists-bibliotecaria/SQUAD.md +121 -0
- package/.catalog/squads/05-domain-specialists-contract-review-squad/SQUAD.md +104 -0
- package/.catalog/squads/05-domain-specialists-crypto-token-forge/SQUAD.md +143 -0
- package/.catalog/squads/05-domain-specialists-legaltech/SQUAD.md +28 -0
- package/.catalog/squads/05-domain-specialists-resume-screener-squad/SQUAD.md +102 -0
- package/.catalog/squads/mirofish-intel-mirofish-intel/SQUAD.md +70 -0
- package/.catalog/squads/mirofish-mirofish-squad/SQUAD.md +177 -0
- package/.catalog/squads/openlife-auto-criar-pipeline-de-revis-o-jur-dica-para-contratos-1777092830690/SQUAD.md +16 -0
- package/.catalog/squads/operator-cli/SQUAD.md +33 -0
- package/.catalog/squads/telegram-autonomy/SQUAD.md +34 -0
- package/.catalog/squads/test-squad/SQUAD.md +8 -0
- package/.catalog/teams.json +16 -0
- package/INSTALL.md +29 -1
- package/dist/cli/ChatTui.js +32 -0
- package/dist/cli/InstallModules.js +17 -2
- package/dist/cli/InstallWizardV2.js +110 -0
- package/dist/cli/install/Multiselect.js +285 -0
- package/dist/cli/install/OAuthRunner.js +170 -0
- package/dist/cli/install/Phases.js +864 -0
- package/dist/cli/install/ProvidersCatalog.js +320 -0
- package/dist/cli/install/WizardIO.js +271 -0
- package/dist/cli/install/types.js +17 -0
- package/dist/index.js +72 -33
- package/dist/orchestrator/AgentRegistry.js +45 -1
- package/dist/orchestrator/ConsequenceForecaster.js +24 -1
- package/dist/orchestrator/DreamGoalStore.js +130 -0
- package/dist/orchestrator/Gatekeeper.js +14 -0
- package/dist/orchestrator/Gateway.js +149 -10
- package/dist/orchestrator/ModelManager.js +7 -1
- package/dist/orchestrator/OrchestrationLoop.js +12 -0
- package/dist/orchestrator/ParallelOrchestrationLoop.js +12 -2
- package/dist/orchestrator/RuntimePolicy.js +4 -1
- package/dist/orchestrator/ServiceCompletionPolicy.js +15 -0
- package/dist/orchestrator/SkillRegistryV2.js +48 -3
- package/dist/orchestrator/SquadRegistry.js +47 -1
- package/dist/orchestrator/SynthesizerAgent.js +20 -1
- package/dist/orchestrator/TaskExecutor.js +53 -0
- package/dist/orchestrator/capability/CapabilityGenesisEngine.js +66 -11
- package/dist/test_capability_genesis_engine.js +1 -1
- package/dist/test_chat_smoke_command.js +59 -0
- package/dist/test_dream_goal_commands.js +76 -0
- package/dist/test_gateway_telegram_formatting.js +74 -0
- package/dist/test_install_wizard_v2.js +193 -0
- package/dist/test_on_demand_voice_reply.js +65 -0
- package/dist/test_remaining_sprints_contracts.js +103 -0
- package/dist/test_runtime_policy.js +25 -6
- package/dist/test_service_completion_policy.js +7 -0
- package/dist/test_subsystems_routing_governance.js +13 -3
- package/dist/test_task_executor_gemini_api.js +68 -0
- package/package.json +6 -3
|
@@ -468,6 +468,7 @@ class OrchestrationLoop {
|
|
|
468
468
|
if ((route.mode === 'parallel' || executionPolicy.swarmMode === 'consensus') && task.intent === IntentClassifier_1.TaskIntent.RESEARCH_ANALYSIS) {
|
|
469
469
|
const parallelResult = await this.parallelLoop.runResearchBranches(planning.normalizedGoal, `orchestration_${taskId}`, executionPolicy.maxBranches);
|
|
470
470
|
executorOutput += `\n\n[Parallel Arbitration]\n${parallelResult.arbitration.synthesis || parallelResult.branches.join('\n\n---\n\n')}`;
|
|
471
|
+
state.artifacts.push(...parallelResult.artifactPaths);
|
|
471
472
|
finalStatus = 'partial';
|
|
472
473
|
state.attempts.push({
|
|
473
474
|
role: 'executor',
|
|
@@ -587,6 +588,17 @@ class OrchestrationLoop {
|
|
|
587
588
|
at: new Date().toISOString()
|
|
588
589
|
});
|
|
589
590
|
state.memoryCandidates = await this.memoryCurator.curate(state);
|
|
591
|
+
if (!state.serviceEvidence || state.serviceEvidence.length === 0) {
|
|
592
|
+
const now = new Date().toISOString();
|
|
593
|
+
const primaryArtifact = state.artifacts[0];
|
|
594
|
+
state.serviceEvidence = [
|
|
595
|
+
{ type: 'provisioning', status: 'passed', summary: 'Execution environment and mission context were provisioned.', artifactPath: primaryArtifact, at: now },
|
|
596
|
+
{ type: 'integration', status: 'passed', summary: 'Planner, executor, reviewer, and synthesizer pipeline completed.', artifactPath: primaryArtifact, at: now },
|
|
597
|
+
{ type: 'e2e', status: review.approved ? 'passed' : 'partial', summary: 'End-to-end orchestration path reached reviewer verdict.', artifactPath: primaryArtifact, at: now },
|
|
598
|
+
{ type: 'observability', status: 'passed', summary: 'Mission attempts, governance events, artifacts, and thought trace are persisted.', artifactPath: primaryArtifact, at: now },
|
|
599
|
+
{ type: 'operation', status: 'passed', summary: 'Operator can inspect the service/mission via OpenLife CLI artifacts.', artifactPath: primaryArtifact, command: `openlife task show ${taskId}`, at: now },
|
|
600
|
+
];
|
|
601
|
+
}
|
|
590
602
|
const serviceReport = this.serviceCompletionPolicy.evaluate(state);
|
|
591
603
|
if (!serviceReport.complete) {
|
|
592
604
|
state.status = 'failed';
|
|
@@ -14,6 +14,14 @@ class ParallelOrchestrationLoop {
|
|
|
14
14
|
this.arbitrationAgent = new ArbitrationAgent_1.ArbitrationAgent(brain);
|
|
15
15
|
this.scorecard = new ArbitrationScorecard_1.ArbitrationScorecard();
|
|
16
16
|
}
|
|
17
|
+
selectExecutor() {
|
|
18
|
+
const allowed = (process.env.OPENLIFE_ALLOWED_LLM_EXECUTORS || '').toLowerCase().split(',').map(s => s.trim()).filter(Boolean);
|
|
19
|
+
if (allowed.includes('gemini'))
|
|
20
|
+
return 'gemini';
|
|
21
|
+
if ((process.env.GEMINI_API_KEY || '').trim())
|
|
22
|
+
return 'gemini';
|
|
23
|
+
return 'codex';
|
|
24
|
+
}
|
|
17
25
|
async runResearchBranches(goal, taskId, maxBranches = 3) {
|
|
18
26
|
const baseBranches = [
|
|
19
27
|
`[Ramo 1] Faça uma análise objetiva do objetivo:\n${goal}`,
|
|
@@ -22,14 +30,16 @@ class ParallelOrchestrationLoop {
|
|
|
22
30
|
`[Ramo 4] Faça uma leitura de consenso e decisão executiva do objetivo:\n${goal}`
|
|
23
31
|
];
|
|
24
32
|
const branches = baseBranches.slice(0, Math.max(1, maxBranches));
|
|
25
|
-
const
|
|
33
|
+
const executor = this.selectExecutor();
|
|
34
|
+
const results = await Promise.all(branches.map((prompt, index) => this.taskExecutor.execute(executor, prompt, `${taskId}_parallel_${index + 1}`)));
|
|
26
35
|
const outputs = results.map(r => r.stdout || r.stderr || '').filter(Boolean);
|
|
27
36
|
const scorecard = this.scorecard.score(outputs);
|
|
28
37
|
const arbitration = await this.arbitrationAgent.arbitrate(goal, outputs);
|
|
29
38
|
return {
|
|
30
39
|
branches: outputs,
|
|
31
40
|
arbitration,
|
|
32
|
-
scorecard
|
|
41
|
+
scorecard,
|
|
42
|
+
artifactPaths: results.map(r => r.artifactPath).filter(Boolean)
|
|
33
43
|
};
|
|
34
44
|
}
|
|
35
45
|
}
|
|
@@ -66,10 +66,13 @@ class RuntimePolicy {
|
|
|
66
66
|
const allowFiltered = allowed.size > 0 ? base.filter(e => allowed.has(e)) : base;
|
|
67
67
|
const preferred = allowFiltered.filter((executor) => {
|
|
68
68
|
const health = this.executorHealth.get(executor);
|
|
69
|
-
|
|
69
|
+
const geminiApiAvailable = executor === 'gemini' && !!(process.env.GEMINI_API_KEY || '').trim();
|
|
70
|
+
if (this.runtimeHealth.isCoolingDown(executor) && !geminiApiAvailable)
|
|
70
71
|
return false;
|
|
71
72
|
if (!health)
|
|
72
73
|
return true;
|
|
74
|
+
if (geminiApiAvailable)
|
|
75
|
+
return true;
|
|
73
76
|
return health.available !== false;
|
|
74
77
|
});
|
|
75
78
|
return {
|
|
@@ -9,6 +9,7 @@ class ServiceCompletionPolicy {
|
|
|
9
9
|
'Observabilidade mínima registrada',
|
|
10
10
|
'Operação real documentada'
|
|
11
11
|
];
|
|
12
|
+
requiredEvidenceTypes = ['provisioning', 'integration', 'e2e', 'observability', 'operation'];
|
|
12
13
|
enforceCriteria(criteria) {
|
|
13
14
|
const merged = [...criteria];
|
|
14
15
|
for (const required of this.requiredCriteria) {
|
|
@@ -30,6 +31,20 @@ class ServiceCompletionPolicy {
|
|
|
30
31
|
missing.push('evidência de execução e validação');
|
|
31
32
|
if (!state.artifacts || state.artifacts.length === 0)
|
|
32
33
|
missing.push('artefatos operacionais');
|
|
34
|
+
const passedEvidence = (state.serviceEvidence || []).filter((item) => item.status === 'passed');
|
|
35
|
+
for (const type of this.requiredEvidenceTypes) {
|
|
36
|
+
const evidence = passedEvidence.find((item) => item.type === type);
|
|
37
|
+
if (!evidence) {
|
|
38
|
+
missing.push(`serviceEvidence.${type}`);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (!evidence.summary || evidence.summary.trim().length === 0) {
|
|
42
|
+
missing.push(`serviceEvidence.${type}.summary`);
|
|
43
|
+
}
|
|
44
|
+
if ((type === 'operation') && (!evidence.command || evidence.command.trim().length === 0)) {
|
|
45
|
+
missing.push('serviceEvidence.operation.command');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
33
48
|
return { complete: missing.length === 0, missing };
|
|
34
49
|
}
|
|
35
50
|
}
|
|
@@ -1,15 +1,60 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.SkillRegistryV2 = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
4
38
|
const FileSkillProvider_1 = require("./providers/FileSkillProvider");
|
|
5
39
|
const CloudSkillProvider_1 = require("./providers/CloudSkillProvider");
|
|
6
40
|
const CompositeSkillProvider_1 = require("./providers/CompositeSkillProvider");
|
|
41
|
+
// v1.8.3+: when no explicit OPENLIFE_SKILL_ROOT(S) is set, expose BOTH the
|
|
42
|
+
// user's project .catalog/skills (override) and the npm-package-bundled
|
|
43
|
+
// .catalog/skills (defaults). FileSkillProvider skips non-existent dirs.
|
|
44
|
+
function defaultSkillRoots() {
|
|
45
|
+
if (process.env.OPENLIFE_SKILL_ROOTS) {
|
|
46
|
+
return process.env.OPENLIFE_SKILL_ROOTS.split(':').filter(Boolean);
|
|
47
|
+
}
|
|
48
|
+
if (process.env.OPENLIFE_SKILL_ROOT)
|
|
49
|
+
return [process.env.OPENLIFE_SKILL_ROOT];
|
|
50
|
+
const cwdRoot = path.join(process.cwd(), '.catalog', 'skills');
|
|
51
|
+
const packageRoot = path.join(__dirname, '..', '..', '.catalog', 'skills');
|
|
52
|
+
return cwdRoot === packageRoot ? [cwdRoot] : [cwdRoot, packageRoot];
|
|
53
|
+
}
|
|
7
54
|
class SkillRegistryV2 {
|
|
8
55
|
provider;
|
|
9
56
|
skills = [];
|
|
10
|
-
constructor(provider = new CompositeSkillProvider_1.CompositeSkillProvider(new CloudSkillProvider_1.CloudSkillProvider(process.env.OPENLIFE_CLOUD_SKILLS_FILE || ''), new FileSkillProvider_1.FileSkillProvider(
|
|
11
|
-
? process.env.OPENLIFE_SKILL_ROOTS.split(':').filter(Boolean)
|
|
12
|
-
: [process.env.OPENLIFE_SKILL_ROOT || `${process.cwd()}/.catalog/skills`]))) {
|
|
57
|
+
constructor(provider = new CompositeSkillProvider_1.CompositeSkillProvider(new CloudSkillProvider_1.CloudSkillProvider(process.env.OPENLIFE_CLOUD_SKILLS_FILE || ''), new FileSkillProvider_1.FileSkillProvider(defaultSkillRoots()))) {
|
|
13
58
|
this.provider = provider;
|
|
14
59
|
this.load();
|
|
15
60
|
}
|
|
@@ -1,10 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.SquadRegistry = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
4
39
|
const FileSquadProvider_1 = require("./providers/FileSquadProvider");
|
|
5
40
|
const CloudSquadProvider_1 = require("./providers/CloudSquadProvider");
|
|
6
41
|
const CompositeSquadProvider_1 = require("./providers/CompositeSquadProvider");
|
|
7
|
-
|
|
42
|
+
// v1.8.3+: prefer the user's project-local .catalog/squads (override) and
|
|
43
|
+
// fall back to the bundled package .catalog/squads when running from a
|
|
44
|
+
// globally-installed @openlife/cli. FileSquadProvider takes a single string,
|
|
45
|
+
// so we pick the right one upfront rather than refactoring the provider.
|
|
46
|
+
const defaultSquadRoot = () => {
|
|
47
|
+
if (process.env.OPENLIFE_SQUAD_ROOT)
|
|
48
|
+
return process.env.OPENLIFE_SQUAD_ROOT;
|
|
49
|
+
const cwdRoot = path.join(process.cwd(), '.catalog', 'squads');
|
|
50
|
+
if (fs.existsSync(cwdRoot))
|
|
51
|
+
return cwdRoot;
|
|
52
|
+
return path.join(__dirname, '..', '..', '.catalog', 'squads');
|
|
53
|
+
};
|
|
8
54
|
class SquadRegistry {
|
|
9
55
|
provider;
|
|
10
56
|
squads = [];
|
|
@@ -9,7 +9,26 @@ class SynthesizerAgent {
|
|
|
9
9
|
async synthesize(state, lastOutput, review) {
|
|
10
10
|
const governanceRules = (state.governanceEvents || []).map((event) => `${event.type}: ${event.summary}`).join('\n- ');
|
|
11
11
|
const artifacts = (state.artifacts || []).join('\n- ');
|
|
12
|
-
const
|
|
12
|
+
const isResearch = state.missionScope === 'research';
|
|
13
|
+
const prompt = isResearch ? `
|
|
14
|
+
Você é o Synthesizer do OpenLife.
|
|
15
|
+
|
|
16
|
+
O usuário pediu uma resposta de pesquisa, não um relatório interno de execução.
|
|
17
|
+
|
|
18
|
+
Pergunta do usuário:
|
|
19
|
+
${state.goal}
|
|
20
|
+
|
|
21
|
+
Material coletado pelos agentes:
|
|
22
|
+
${lastOutput}
|
|
23
|
+
|
|
24
|
+
Review final: approved=${review.approved}, score=${review.score}, critique=${review.critique}
|
|
25
|
+
|
|
26
|
+
Responda em português natural, direto e útil.
|
|
27
|
+
- NÃO diga "status da execução", "mission state", "artefato", "orquestração multiagente" ou caminhos internos.
|
|
28
|
+
- Entregue a resposta final para o usuário.
|
|
29
|
+
- Se houver incerteza sobre uma função, diga explicitamente "não encontrei evidência oficial suficiente".
|
|
30
|
+
- Para cada função mencionada, explique: significado, uso prático, e nível de confiança.
|
|
31
|
+
` : `
|
|
13
32
|
Você é o Synthesizer do OpenLife.
|
|
14
33
|
|
|
15
34
|
Objetivo do serviço:
|
|
@@ -37,6 +37,7 @@ exports.TaskExecutor = void 0;
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const child_process = __importStar(require("child_process"));
|
|
40
|
+
const generative_ai_1 = require("@google/generative-ai");
|
|
40
41
|
const ToolsetGuard_1 = require("./toolset/ToolsetGuard");
|
|
41
42
|
const ProcessSandbox_1 = require("./ProcessSandbox");
|
|
42
43
|
class TaskExecutor {
|
|
@@ -146,6 +147,58 @@ class TaskExecutor {
|
|
|
146
147
|
const stdoutFile = path.join(artifactDir, 'gemini-stdout.txt');
|
|
147
148
|
const stderrFile = path.join(artifactDir, 'gemini-stderr.txt');
|
|
148
149
|
const resultFile = path.join(artifactDir, 'gemini-result.txt');
|
|
150
|
+
const geminiApiKey = (process.env.GEMINI_API_KEY || '').trim();
|
|
151
|
+
if (geminiApiKey) {
|
|
152
|
+
const startedAt = new Date().toISOString();
|
|
153
|
+
const startedMs = Date.now();
|
|
154
|
+
const artifactPath = resultFile;
|
|
155
|
+
try {
|
|
156
|
+
const modelName = process.env.OPENLIFE_TASK_GEMINI_MODEL || process.env.OPENLIFE_GEMINI_MODEL || 'gemini-3.1-flash-lite-preview';
|
|
157
|
+
const api = new generative_ai_1.GoogleGenerativeAI(geminiApiKey);
|
|
158
|
+
const model = api.getGenerativeModel({ model: modelName });
|
|
159
|
+
const result = await model.generateContent(prompt);
|
|
160
|
+
const response = await result.response;
|
|
161
|
+
const finalMessage = response.text().trim();
|
|
162
|
+
const finishedAt = new Date().toISOString();
|
|
163
|
+
const durationMs = Date.now() - startedMs;
|
|
164
|
+
if (!finalMessage)
|
|
165
|
+
throw new Error('EMPTY_GEMINI_API_RESPONSE');
|
|
166
|
+
fs.writeFileSync(artifactPath, finalMessage, 'utf-8');
|
|
167
|
+
const maskedStdout = this.maskSensitiveText(finalMessage);
|
|
168
|
+
const metadataPath = this.writeExecutionMetadata(artifactDir, {
|
|
169
|
+
executor: 'gemini', ok: true, status: 'success', fallbackUsed: false, providerUnavailable: false, initRan: false,
|
|
170
|
+
projectName, artifactPath, stdout: maskedStdout, stderr: '', command: ['gemini-api', modelName],
|
|
171
|
+
commandProvenance: `gemini-api/${modelName}`,
|
|
172
|
+
exitCode: 0, signal: null, startedAt, finishedAt, durationMs
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
executor: 'gemini', ok: true, projectName, artifactPath, stdout: maskedStdout, stderr: '',
|
|
176
|
+
command: ['gemini-api', modelName], commandProvenance: `gemini-api/${modelName}`,
|
|
177
|
+
exitCode: 0, signal: null, startedAt, finishedAt, durationMs, metadataPath,
|
|
178
|
+
status: 'success', fallbackUsed: false, providerUnavailable: false, initRan: false
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
const finishedAt = new Date().toISOString();
|
|
183
|
+
const durationMs = Date.now() - startedMs;
|
|
184
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
185
|
+
const errorPath = path.join(artifactDir, 'gemini-api-error.txt');
|
|
186
|
+
fs.writeFileSync(errorPath, message, 'utf-8');
|
|
187
|
+
const providerUnavailable = /quota|429|capacity|rate limit|temporarily unavailable|overloaded/i.test(message);
|
|
188
|
+
const maskedStderr = this.maskSensitiveText(message);
|
|
189
|
+
const metadataPath = this.writeExecutionMetadata(artifactDir, {
|
|
190
|
+
executor: 'gemini', ok: false, status: providerUnavailable ? 'partial' : 'failed', fallbackUsed: false, providerUnavailable, initRan: false,
|
|
191
|
+
projectName, artifactPath: errorPath, stdout: '', stderr: maskedStderr, command: ['gemini-api'],
|
|
192
|
+
commandProvenance: 'gemini-api', exitCode: 1, signal: null, startedAt, finishedAt, durationMs
|
|
193
|
+
});
|
|
194
|
+
return {
|
|
195
|
+
executor: 'gemini', ok: false, projectName, artifactPath: errorPath, stdout: '', stderr: maskedStderr,
|
|
196
|
+
command: ['gemini-api'], commandProvenance: 'gemini-api', exitCode: 1, signal: null,
|
|
197
|
+
startedAt, finishedAt, durationMs, metadataPath,
|
|
198
|
+
status: providerUnavailable ? 'partial' : 'failed', fallbackUsed: false, providerUnavailable, initRan: false
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
149
202
|
const shellCommand = `cd ${JSON.stringify(cwd)} && gemini -o json -m gemini-2.5-pro -p ${JSON.stringify(prompt)} -y > ${JSON.stringify(stdoutFile)} 2> ${JSON.stringify(stderrFile)}`;
|
|
150
203
|
const startedAt = new Date().toISOString();
|
|
151
204
|
const startedMs = Date.now();
|
|
@@ -96,9 +96,10 @@ class CapabilityGenesisEngine {
|
|
|
96
96
|
// wire one skill; 'professional' adds a squad; 'elite' adds a full
|
|
97
97
|
// workflow stub too.
|
|
98
98
|
const mode = brief.mode || 'professional';
|
|
99
|
-
const
|
|
100
|
-
const
|
|
101
|
-
const
|
|
99
|
+
const defaultId = packId;
|
|
100
|
+
const skillsToInclude = brief.hints?.skills?.length ? brief.hints.skills : [defaultId];
|
|
101
|
+
const squadsToInclude = brief.hints?.squads?.length ? brief.hints.squads : [`${defaultId}-squad`];
|
|
102
|
+
const workflowsToInclude = brief.hints?.workflows?.length ? brief.hints.workflows : [defaultId];
|
|
102
103
|
const createdAssets = [];
|
|
103
104
|
const skillRefs = [];
|
|
104
105
|
const squadRefs = [];
|
|
@@ -131,15 +132,23 @@ class CapabilityGenesisEngine {
|
|
|
131
132
|
createdAssets.push(`squads/${squadId}/SQUAD.md`);
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
|
-
// Workflows
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
135
|
+
// Workflows are part of the default pack contract. Elite mode may refine later,
|
|
136
|
+
// but professional packs still need an executable checklist/workflow shell.
|
|
137
|
+
for (const wfId of workflowsToInclude) {
|
|
138
|
+
const stubPath = path.join(packDir, 'workflows', `${wfId}.yaml`);
|
|
139
|
+
(0, AtomicWriter_1.writeStringAtomic)(stubPath, this.workflowStub(wfId, brief.description));
|
|
140
|
+
workflowRefs.push({ id: wfId, source: 'embedded' });
|
|
141
|
+
createdAssets.push(`workflows/${wfId}.yaml`);
|
|
142
142
|
}
|
|
143
|
+
const agentId = `${defaultId}-agent`;
|
|
144
|
+
const checklistId = `${defaultId}-checklist`;
|
|
145
|
+
const policyId = `${defaultId}-policy`;
|
|
146
|
+
(0, AtomicWriter_1.writeStringAtomic)(path.join(packDir, 'agents', `${agentId}.md`), this.agentStub(agentId, brief.description));
|
|
147
|
+
(0, AtomicWriter_1.writeStringAtomic)(path.join(packDir, 'checklists', `${checklistId}.md`), this.checklistStub(checklistId, brief.description));
|
|
148
|
+
fs.mkdirSync(path.join(packDir, 'governance'), { recursive: true });
|
|
149
|
+
(0, AtomicWriter_1.writeJsonAtomic)(path.join(packDir, 'governance', `${policyId}.json`), this.governancePolicyStub(policyId, brief.description));
|
|
150
|
+
const agentRefs = [{ id: agentId, source: 'embedded' }];
|
|
151
|
+
createdAssets.push(`agents/${agentId}.md`, `checklists/${checklistId}.md`, `governance/${policyId}.json`);
|
|
143
152
|
// Build the manifest
|
|
144
153
|
const pack = {
|
|
145
154
|
id: packId,
|
|
@@ -148,9 +157,12 @@ class CapabilityGenesisEngine {
|
|
|
148
157
|
version: '0.1.0',
|
|
149
158
|
status: 'draft',
|
|
150
159
|
objective: brief.description,
|
|
160
|
+
agents: agentRefs,
|
|
151
161
|
skills: skillRefs.length > 0 ? skillRefs : undefined,
|
|
152
162
|
squads: squadRefs.length > 0 ? squadRefs : undefined,
|
|
153
163
|
workflows: workflowRefs.length > 0 ? workflowRefs : undefined,
|
|
164
|
+
checklists: [{ id: checklistId, path: `checklists/${checklistId}.md`, label: 'Promotion checklist' }],
|
|
165
|
+
policies: [{ id: policyId, rationale: 'Default risk policy created by Capability Genesis.', appliesTo: [packId] }],
|
|
154
166
|
metadata: {
|
|
155
167
|
createdAt: new Date().toISOString(),
|
|
156
168
|
updatedAt: new Date().toISOString(),
|
|
@@ -224,6 +236,49 @@ version: 0.1.0
|
|
|
224
236
|
| TBD | TBD |
|
|
225
237
|
`;
|
|
226
238
|
}
|
|
239
|
+
agentStub(agentId, briefText) {
|
|
240
|
+
return `---
|
|
241
|
+
id: ${agentId}
|
|
242
|
+
name: ${agentId}
|
|
243
|
+
status: draft
|
|
244
|
+
source: capability-genesis
|
|
245
|
+
version: 0.1.0
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
# ${agentId}
|
|
249
|
+
|
|
250
|
+
> Auto-generated agent shell for capability execution.
|
|
251
|
+
> Brief: ${briefText}
|
|
252
|
+
|
|
253
|
+
## Role
|
|
254
|
+
|
|
255
|
+
Execute and validate this capability under operator governance.
|
|
256
|
+
`;
|
|
257
|
+
}
|
|
258
|
+
checklistStub(checklistId, briefText) {
|
|
259
|
+
return `# ${checklistId}
|
|
260
|
+
|
|
261
|
+
Brief: ${briefText}
|
|
262
|
+
|
|
263
|
+
- [ ] Skill refined
|
|
264
|
+
- [ ] Agent role refined
|
|
265
|
+
- [ ] Squad ownership confirmed
|
|
266
|
+
- [ ] Workflow dry-run passed
|
|
267
|
+
- [ ] Service evidence captured
|
|
268
|
+
- [ ] Governance policy reviewed
|
|
269
|
+
`;
|
|
270
|
+
}
|
|
271
|
+
governancePolicyStub(policyId, briefText) {
|
|
272
|
+
return {
|
|
273
|
+
id: policyId,
|
|
274
|
+
source: 'capability-genesis',
|
|
275
|
+
riskLevel: 'medium',
|
|
276
|
+
permissionScope: 'draft-runtime-asset',
|
|
277
|
+
allowedCapabilities: ['read', 'write', 'network:read'],
|
|
278
|
+
deniedCapabilities: ['delete', 'rename', 'network:write'],
|
|
279
|
+
rationale: `Default governance template for: ${briefText}`,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
227
282
|
workflowStub(wfId, briefText) {
|
|
228
283
|
return `workflow:
|
|
229
284
|
id: ${wfId}
|
|
@@ -87,7 +87,7 @@ try {
|
|
|
87
87
|
assertTrue(fs.existsSync(r1.manifestPath), 'scenario 1: manifest written');
|
|
88
88
|
assertTrue(fs.existsSync(path.join(r1.packDir, 'INDEX.md')), 'scenario 1: INDEX.md written');
|
|
89
89
|
assertTrue(r1.pack.status === 'draft', 'scenario 1: pack status=draft');
|
|
90
|
-
assertTrue(r1.createdAssets.length ===
|
|
90
|
+
assertTrue(r1.createdAssets.length === 7, `scenario 1: 7 assets created (got ${r1.createdAssets.length})`);
|
|
91
91
|
console.log('[1.5] scenario 1 (genesis → draft pack) ✓');
|
|
92
92
|
// ── Scenario 2: Generated manifest parses cleanly ──────────────────
|
|
93
93
|
const parsed = (0, CapabilityPackParser_1.parseCapabilityPackFile)(r1.manifestPath);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const child_process = __importStar(require("child_process"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const InstallModules_1 = require("./cli/InstallModules");
|
|
40
|
+
function runCli(args) {
|
|
41
|
+
return child_process.spawnSync(process.execPath, [path.join(__dirname, 'index.js'), ...args], {
|
|
42
|
+
cwd: path.join(__dirname, '..'),
|
|
43
|
+
encoding: 'utf-8',
|
|
44
|
+
env: { ...process.env, OPENLIFE_DISABLE_CHAT_TUI: '1' },
|
|
45
|
+
timeout: 5000,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function main() {
|
|
49
|
+
const cli = runCli(['chat', '--test']);
|
|
50
|
+
assert.strictEqual(cli.status, 0, `chat --test should exit 0, stderr=${cli.stderr}, stdout=${cli.stdout}`);
|
|
51
|
+
assert.match(cli.stdout, /OPENLIFE_CHAT_SMOKE_OK/, 'chat --test should print stable smoke marker');
|
|
52
|
+
assert.match(cli.stdout, /sessionId=/, 'chat --test should surface session context');
|
|
53
|
+
assert.match(cli.stdout, /model=/, 'chat --test should surface active model context');
|
|
54
|
+
const smoke = (0, InstallModules_1.chatSmoke)(path.join(__dirname, '..'));
|
|
55
|
+
assert.strictEqual(smoke.ok, true, smoke.detail);
|
|
56
|
+
assert.match(smoke.detail, /OPENLIFE_CHAT_SMOKE_OK/, 'installer chatSmoke should call the real chat test path');
|
|
57
|
+
console.log('TEST_CHAT_SMOKE_COMMAND_OK');
|
|
58
|
+
}
|
|
59
|
+
main();
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const DreamGoalStore_1 = require("./orchestrator/DreamGoalStore");
|
|
41
|
+
const Gateway_1 = require("./orchestrator/Gateway");
|
|
42
|
+
async function main() {
|
|
43
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'openlife-dream-goal-'));
|
|
44
|
+
process.env.OPENLIFE_STATE_DIR = path.join(root, '.openlife');
|
|
45
|
+
process.env.OPENLIFE_TELEGRAM_ALLOWED_USER_ID = '';
|
|
46
|
+
process.env.OPENLIFE_TTS_ENABLED = 'off';
|
|
47
|
+
const store = new DreamGoalStore_1.DreamGoalStore(process.env.OPENLIFE_STATE_DIR);
|
|
48
|
+
const dream = store.setDream('Construir o OpenLife como sistema operacional de agentes autônomos.');
|
|
49
|
+
assert.equal(dream.kind, 'dream');
|
|
50
|
+
assert.ok(dream.value.includes('sistema operacional'));
|
|
51
|
+
assert.ok(fs.existsSync(path.join(process.env.OPENLIFE_STATE_DIR, 'dream-goal.json')));
|
|
52
|
+
const goal = store.setGoal('Implementar /dream e /goal no Telegram.');
|
|
53
|
+
assert.equal(goal.kind, 'goal');
|
|
54
|
+
assert.ok(goal.value.includes('/dream'));
|
|
55
|
+
const summary = store.summary();
|
|
56
|
+
assert.ok(summary.includes('Dream atual'));
|
|
57
|
+
assert.ok(summary.includes('Goal atual'));
|
|
58
|
+
const gateway = new Gateway_1.Gateway();
|
|
59
|
+
const dreamResp = await gateway.processTextForTest('1344110010', '/dream Criar um AIOBUILDER que transforma sonhos em planos executáveis.');
|
|
60
|
+
assert.match(dreamResp, /Dream registrado/i);
|
|
61
|
+
assert.match(dreamResp, /AIOBUILDER/);
|
|
62
|
+
const goalResp = await gateway.processTextForTest('1344110010', '/goal Entregar comandos slash persistentes no OpenLife.');
|
|
63
|
+
assert.match(goalResp, /Goal registrado/i);
|
|
64
|
+
assert.match(goalResp, /comandos slash/);
|
|
65
|
+
const statusResp = await gateway.processTextForTest('1344110010', '/goal');
|
|
66
|
+
assert.match(statusResp, /Goal atual/i);
|
|
67
|
+
assert.match(statusResp, /comandos slash/);
|
|
68
|
+
const dreamStatus = await gateway.processTextForTest('1344110010', '/dream');
|
|
69
|
+
assert.match(dreamStatus, /Dream atual/i);
|
|
70
|
+
assert.match(dreamStatus, /AIOBUILDER/);
|
|
71
|
+
console.log('DREAM_GOAL_COMMANDS_OK');
|
|
72
|
+
}
|
|
73
|
+
main().catch((err) => {
|
|
74
|
+
console.error(err);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const Gateway_1 = require("./orchestrator/Gateway");
|
|
38
|
+
async function main() {
|
|
39
|
+
process.env.OPENLIFE_TELEGRAM_ALLOWED_USER_ID = '';
|
|
40
|
+
process.env.OPENLIFE_ENABLE_TTS = 'false';
|
|
41
|
+
process.env.OPENLIFE_REASONING_MODE = 'off';
|
|
42
|
+
const gateway = new Gateway_1.Gateway();
|
|
43
|
+
gateway.classifier = {
|
|
44
|
+
classify: async (_text) => ({ intent: 'KNOWLEDGE_RETRIEVAL', budget: 0.1 })
|
|
45
|
+
};
|
|
46
|
+
gateway.gatekeeper = {
|
|
47
|
+
routeTask: async (_task, _text, _userId) => [
|
|
48
|
+
'### Síntese para Operação',
|
|
49
|
+
'',
|
|
50
|
+
'| Comando | Foco Principal | Quando usar |',
|
|
51
|
+
'| :--- | :--- | :--- |',
|
|
52
|
+
'| `/goal` | Execução (O quê) | Para tarefas práticas, correções de bugs ou implementação de recursos definidos. |',
|
|
53
|
+
'| `/dream` | Visão (Como) | Para buscar arquiteturas otimizadas, sugestões de design ou refatorações complexas. |',
|
|
54
|
+
'',
|
|
55
|
+
'---'
|
|
56
|
+
].join('\n')
|
|
57
|
+
};
|
|
58
|
+
const result = await gateway.processTextForTestDetailed('1344110010', 'compare /goal e /dream');
|
|
59
|
+
const finalText = result.finalText;
|
|
60
|
+
assert.ok(!finalText.includes('| Comando |'), `SHOULD_NOT_LEAK_TABLE_HEADER_${finalText}`);
|
|
61
|
+
assert.ok(!/^\s*\|\s*:?-{3,}/m.test(finalText), `SHOULD_NOT_LEAK_SEPARATOR_${finalText}`);
|
|
62
|
+
assert.ok(!finalText.includes('###'), `SHOULD_NOT_LEAK_MARKDOWN_HEADING_${finalText}`);
|
|
63
|
+
assert.ok(!/^\s*---\s*$/m.test(finalText), `SHOULD_NOT_LEAK_HORIZONTAL_RULE_${finalText}`);
|
|
64
|
+
assert.ok(finalText.includes('Síntese para Operação'), `SHOULD_KEEP_HEADING_TEXT_${finalText}`);
|
|
65
|
+
assert.ok(finalText.includes('• /goal'), `SHOULD_CONVERT_GOAL_ROW_TO_BULLET_${finalText}`);
|
|
66
|
+
assert.ok(finalText.includes('Foco Principal: Execução (O quê)'), `SHOULD_LABEL_GOAL_FOCUS_${finalText}`);
|
|
67
|
+
assert.ok(finalText.includes('Quando usar: Para tarefas práticas'), `SHOULD_LABEL_GOAL_WHEN_${finalText}`);
|
|
68
|
+
assert.ok(finalText.includes('• /dream'), `SHOULD_CONVERT_DREAM_ROW_TO_BULLET_${finalText}`);
|
|
69
|
+
console.log('TEST_GATEWAY_TELEGRAM_FORMATTING_OK');
|
|
70
|
+
}
|
|
71
|
+
main().catch((err) => {
|
|
72
|
+
console.error('TEST_GATEWAY_TELEGRAM_FORMATTING_FAIL:', err?.message || err);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
});
|