@jairodri/huckleberry-cli 1.0.2 → 1.1.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/README.md +85 -0
- package/agents/cos.json +2 -5
- package/agents/hermes/AGENTS.md +25 -49
- package/agents/hermes/fix-kimaki/SKILL.md +19 -92
- package/agents/hermes/hermes-fixer.md +44 -74
- package/agents/hermes.json +6 -18
- package/kanban/SKILL.md +18 -18
- package/kanban/package.json +1 -1
- package/kanban/src/dispatcher.mjs +1 -1
- package/kanban/templates/blog-social-campaign.yaml +6 -2
- package/kanban/templates/social-campaign.yaml +9 -4
- package/mcp/jev-calibration.mjs +335 -0
- package/mcp/jev-client.mjs +119 -0
- package/mcp/jev-thresholds.json +27 -0
- package/package.json +13 -9
- package/scripts/doctor-watchdog.sh +73 -0
- package/scripts/install-services.sh +34 -27
- package/scripts/self-improve-weekly.sh +34 -0
- package/scripts/sync-skills.mjs +121 -0
- package/skills/ab-test-setup/SKILL.md +266 -0
- package/skills/ab-test-setup/evals/evals.json +105 -0
- package/skills/ab-test-setup/references/sample-size-guide.md +263 -0
- package/skills/ab-test-setup/references/test-templates.md +277 -0
- package/skills/agent-reach/SKILL.md +132 -0
- package/skills/agent-reach/references/career.md +29 -0
- package/skills/agent-reach/references/dev.md +62 -0
- package/skills/agent-reach/references/search.md +33 -0
- package/skills/agent-reach/references/social.md +232 -0
- package/skills/agent-reach/references/video.md +130 -0
- package/skills/agent-reach/references/web.md +50 -0
- package/skills/ai-agent-seo/SKILL.md +450 -0
- package/skills/ai-cold-email-intelligence/SKILL.md +54 -0
- package/skills/ai-cold-email-intelligence/references/prompts.md +21 -0
- package/skills/ai-consensus-builder/SKILL.md +324 -0
- package/skills/ai-seo/SKILL.md +399 -0
- package/skills/ai-seo/evals/evals.json +90 -0
- package/skills/ai-seo/references/content-patterns.md +284 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +152 -0
- package/skills/ai-visibility-audit/SKILL.md +322 -0
- package/skills/analytics-tracking/SKILL.md +309 -0
- package/skills/analytics-tracking/evals/evals.json +90 -0
- package/skills/analytics-tracking/references/event-library.md +260 -0
- package/skills/analytics-tracking/references/ga4-implementation.md +300 -0
- package/skills/analytics-tracking/references/gtm-implementation.md +390 -0
- package/skills/article-generator/SKILL.md +216 -0
- package/skills/auto-indexing/SKILL.md +179 -0
- package/skills/auto-indexing/scripts/auto-indexing.js +257 -0
- package/skills/auto-skill/SKILL.md +151 -0
- package/skills/auto-skill/correction-queue.js +102 -0
- package/skills/auto-skill/dedup.js +97 -0
- package/skills/auto-skill/skill-router.js +224 -0
- package/skills/autoresearch/SKILL.md +334 -0
- package/skills/autoresearch/autoresearch-autoresearch/SKILL.md.baseline +329 -0
- package/skills/autoresearch/autoresearch-autoresearch/changelog.md +34 -0
- package/skills/autoresearch/autoresearch-autoresearch/dashboard.html +116 -0
- package/skills/autoresearch/autoresearch-autoresearch/evals.md +39 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.json +44 -0
- package/skills/autoresearch/autoresearch-autoresearch/results.tsv +3 -0
- package/skills/autoresearch/eval-guide.md +121 -0
- package/skills/b2b-cold-outreach/SKILL.md +322 -0
- package/skills/birdclaw/SKILL.md +82 -0
- package/skills/brainstorm/SKILL.md +168 -0
- package/skills/brand-kit-playground/SKILL.md +312 -0
- package/skills/brand-kit-playground/references/html-architecture.md +316 -0
- package/skills/brand-kit-playground/references/steal-patterns.md +88 -0
- package/skills/brand-voice/SKILL.md +223 -0
- package/skills/brand-voice/references/honesty-as-positioning.md +60 -0
- package/skills/brand-voice/references/voice-modes.md +1158 -0
- package/skills/business-advisory-council/README.md +136 -0
- package/skills/business-advisory-council/SKILL.md +94 -0
- package/skills/business-advisory-council/business-advisory-council.py +492 -0
- package/skills/business-advisory-council/discord-components-decision.json +8 -0
- package/skills/business-advisory-council/examples/steve-conley-partnership.json +6 -0
- package/skills/business-advisory-council/steve-conley-call-brief.json +6 -0
- package/skills/churn-prevention/SKILL.md +305 -0
- package/skills/churn-prevention/evals/evals.json +93 -0
- package/skills/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/skills/churn-prevention/references/dunning-playbook.md +408 -0
- package/skills/claw-compactor/LICENSE +21 -0
- package/skills/claw-compactor/README.md +459 -0
- package/skills/claw-compactor/SKILL.md +329 -0
- package/skills/claw-compactor/benchmark/RESULTS.md +104 -0
- package/skills/claw-compactor/benchmark/__init__.py +1 -0
- package/skills/claw-compactor/benchmark/compressors.py +520 -0
- package/skills/claw-compactor/benchmark/data/sample_01_devops.json +82 -0
- package/skills/claw-compactor/benchmark/data/sample_02_trading.json +54 -0
- package/skills/claw-compactor/benchmark/data/sample_03_ml_short.json +38 -0
- package/skills/claw-compactor/benchmark/data/sample_04_mixed_long.json +318 -0
- package/skills/claw-compactor/benchmark/data/sample_05_sysadmin.json +56 -0
- package/skills/claw-compactor/benchmark/evaluate.py +278 -0
- package/skills/claw-compactor/benchmark/report.py +241 -0
- package/skills/claw-compactor/benchmark/results/benchmark_results.json +405 -0
- package/skills/claw-compactor/benchmark/run_benchmark.py +238 -0
- package/skills/claw-compactor/engram.yaml +49 -0
- package/skills/claw-compactor/proxy/README.md +87 -0
- package/skills/claw-compactor/proxy/dashboard.html +804 -0
- package/skills/claw-compactor/proxy/event-log.mjs +213 -0
- package/skills/claw-compactor/proxy/fair-queue.mjs +288 -0
- package/skills/claw-compactor/proxy/metrics-store.mjs +425 -0
- package/skills/claw-compactor/proxy/package-lock.json +125 -0
- package/skills/claw-compactor/proxy/package.json +15 -0
- package/skills/claw-compactor/proxy/portal.html +360 -0
- package/skills/claw-compactor/proxy/process-registry.mjs +447 -0
- package/skills/claw-compactor/proxy/rate-limiter.mjs +117 -0
- package/skills/claw-compactor/proxy/redis-client.mjs +75 -0
- package/skills/claw-compactor/proxy/retry.mjs +182 -0
- package/skills/claw-compactor/proxy/server.mjs +2100 -0
- package/skills/claw-compactor/proxy/session-affinity.mjs +177 -0
- package/skills/claw-compactor/proxy/start.sh +23 -0
- package/skills/claw-compactor/proxy/test/event-log.test.mjs +237 -0
- package/skills/claw-compactor/proxy/test/helpers.mjs +103 -0
- package/skills/claw-compactor/proxy/test/integration.test.mjs +297 -0
- package/skills/claw-compactor/proxy/test/metrics-store.test.mjs +243 -0
- package/skills/claw-compactor/proxy/test/process-registry.test.mjs +390 -0
- package/skills/claw-compactor/proxy/test/rate-limiter.test.mjs +121 -0
- package/skills/claw-compactor/proxy/test/redis-client.test.mjs +62 -0
- package/skills/claw-compactor/proxy/test/token-tracker.test.mjs +200 -0
- package/skills/claw-compactor/proxy/token-tracker.mjs +482 -0
- package/skills/claw-compactor/pyproject.toml +26 -0
- package/skills/claw-compactor/references/README.md +44 -0
- package/skills/claw-compactor/references/architecture.md +197 -0
- package/skills/claw-compactor/references/benchmarks.md +94 -0
- package/skills/claw-compactor/references/compression-prompts.md +39 -0
- package/skills/claw-compactor/references/compression-techniques.md +219 -0
- package/skills/claw-compactor/references/testing.md +160 -0
- package/skills/claw-compactor/scripts/audit_memory.py +216 -0
- package/skills/claw-compactor/scripts/compress_memory.py +236 -0
- package/skills/claw-compactor/scripts/compressed_context.py +280 -0
- package/skills/claw-compactor/scripts/dedup_memory.py +147 -0
- package/skills/claw-compactor/scripts/dictionary_compress.py +170 -0
- package/skills/claw-compactor/scripts/engram-auto.sh +152 -0
- package/skills/claw-compactor/scripts/engram_auto.py +695 -0
- package/skills/claw-compactor/scripts/engram_cli.py +474 -0
- package/skills/claw-compactor/scripts/estimate_tokens.py +131 -0
- package/skills/claw-compactor/scripts/generate_summary_tiers.py +292 -0
- package/skills/claw-compactor/scripts/lib/__init__.py +34 -0
- package/skills/claw-compactor/scripts/lib/config.py +289 -0
- package/skills/claw-compactor/scripts/lib/dedup.py +119 -0
- package/skills/claw-compactor/scripts/lib/dictionary.py +281 -0
- package/skills/claw-compactor/scripts/lib/engram.py +793 -0
- package/skills/claw-compactor/scripts/lib/engram_prompts.py +175 -0
- package/skills/claw-compactor/scripts/lib/engram_storage.py +254 -0
- package/skills/claw-compactor/scripts/lib/exceptions.py +24 -0
- package/skills/claw-compactor/scripts/lib/markdown.py +312 -0
- package/skills/claw-compactor/scripts/lib/rle.py +165 -0
- package/skills/claw-compactor/scripts/lib/tokenizer_optimizer.py +188 -0
- package/skills/claw-compactor/scripts/lib/tokens.py +68 -0
- package/skills/claw-compactor/scripts/mem_compress.py +788 -0
- package/skills/claw-compactor/scripts/observation_compressor.py +346 -0
- package/skills/claw-compactor/tests/__init__.py +0 -0
- package/skills/claw-compactor/tests/conftest.py +94 -0
- package/skills/claw-compactor/tests/test_audit_comprehensive.py +123 -0
- package/skills/claw-compactor/tests/test_audit_memory.py +67 -0
- package/skills/claw-compactor/tests/test_benchmark.py +122 -0
- package/skills/claw-compactor/tests/test_cli_commands.py +228 -0
- package/skills/claw-compactor/tests/test_compress_memory.py +109 -0
- package/skills/claw-compactor/tests/test_compress_memory_comprehensive.py +191 -0
- package/skills/claw-compactor/tests/test_compressed_context.py +145 -0
- package/skills/claw-compactor/tests/test_config.py +54 -0
- package/skills/claw-compactor/tests/test_dedup_memory.py +124 -0
- package/skills/claw-compactor/tests/test_dictionary.py +327 -0
- package/skills/claw-compactor/tests/test_dictionary_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_engram.py +1091 -0
- package/skills/claw-compactor/tests/test_engram_auto.py +529 -0
- package/skills/claw-compactor/tests/test_error_handling.py +194 -0
- package/skills/claw-compactor/tests/test_estimate_tokens.py +99 -0
- package/skills/claw-compactor/tests/test_generate_summary_tiers.py +105 -0
- package/skills/claw-compactor/tests/test_integration.py +249 -0
- package/skills/claw-compactor/tests/test_lib_dedup.py +135 -0
- package/skills/claw-compactor/tests/test_lib_markdown.py +388 -0
- package/skills/claw-compactor/tests/test_lib_tokens.py +82 -0
- package/skills/claw-compactor/tests/test_main_entry.py +176 -0
- package/skills/claw-compactor/tests/test_markdown_advanced.py +284 -0
- package/skills/claw-compactor/tests/test_new_features.py +77 -0
- package/skills/claw-compactor/tests/test_observation_comprehensive.py +261 -0
- package/skills/claw-compactor/tests/test_observation_compressor.py +128 -0
- package/skills/claw-compactor/tests/test_performance.py +172 -0
- package/skills/claw-compactor/tests/test_pipeline.py +109 -0
- package/skills/claw-compactor/tests/test_real_workspace.py +161 -0
- package/skills/claw-compactor/tests/test_rle.py +114 -0
- package/skills/claw-compactor/tests/test_rle_comprehensive.py +151 -0
- package/skills/claw-compactor/tests/test_roundtrip.py +253 -0
- package/skills/claw-compactor/tests/test_roundtrip_comprehensive.py +192 -0
- package/skills/claw-compactor/tests/test_tiers_comprehensive.py +171 -0
- package/skills/claw-compactor/tests/test_token_economics.py +237 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer.py +175 -0
- package/skills/claw-compactor/tests/test_tokenizer_optimizer_comprehensive.py +241 -0
- package/skills/claw-compactor/tests/test_tokens.py +27 -0
- package/skills/cmo/CHANGELOG.md +61 -0
- package/skills/cmo/SKILL.md +500 -0
- package/skills/cmo/references/ai-slop-patterns.md +56 -0
- package/skills/cmo/references/analytics-guide.md +152 -0
- package/skills/cmo/references/ideas-library.md +197 -0
- package/skills/cmo/rules/brand-file-map.md +198 -0
- package/skills/cmo/rules/brand-memory.md +158 -0
- package/skills/cmo/rules/cli-runtime-index.md +95 -0
- package/skills/cmo/rules/command-reference.md +167 -0
- package/skills/cmo/rules/communication.md +15 -0
- package/skills/cmo/rules/context-switch.md +101 -0
- package/skills/cmo/rules/ecosystem.md +125 -0
- package/skills/cmo/rules/error-recovery.md +98 -0
- package/skills/cmo/rules/learning-loop.md +170 -0
- package/skills/cmo/rules/monorepo.md +78 -0
- package/skills/cmo/rules/output-format.md +124 -0
- package/skills/cmo/rules/persona.md +15 -0
- package/skills/cmo/rules/playbooks.md +327 -0
- package/skills/cmo/rules/progressive-enhancement.md +231 -0
- package/skills/cmo/rules/publish-index.md +106 -0
- package/skills/cmo/rules/quality-gate.md +90 -0
- package/skills/cmo/rules/recency-grounding.md +124 -0
- package/skills/cmo/rules/safety.md +80 -0
- package/skills/cmo/rules/studio-api-index.md +138 -0
- package/skills/cmo/rules/studio-integration.md +147 -0
- package/skills/cmo/rules/sub-agents.md +167 -0
- package/skills/cold-email/SKILL.md +240 -0
- package/skills/cold-email/evals/evals.json +94 -0
- package/skills/cold-email/references/benchmarks.md +83 -0
- package/skills/cold-email/references/follow-up-sequences.md +81 -0
- package/skills/cold-email/references/frameworks.md +90 -0
- package/skills/cold-email/references/personalization.md +79 -0
- package/skills/cold-email/references/subject-lines.md +53 -0
- package/skills/competitive-intel/SKILL.md +433 -0
- package/skills/competitive-intel/references/competitive-frameworks.md +145 -0
- package/skills/competitor-alternatives/SKILL.md +362 -0
- package/skills/competitor-alternatives/evals/evals.json +93 -0
- package/skills/competitor-alternatives/references/content-architecture.md +271 -0
- package/skills/competitor-alternatives/references/templates.md +223 -0
- package/skills/concreteness-fixer/SKILL.md +483 -0
- package/skills/concreteness-fixer/scripts/validation/concreteness-validator.js +221 -0
- package/skills/concreteness-fixer/utils/execFileNoThrow.js +16 -0
- package/skills/content-atomizer/SKILL.md +424 -0
- package/skills/content-atomizer/references/hook-strategies.md +56 -0
- package/skills/content-atomizer/references/platform-specs.md +118 -0
- package/skills/content-atomizer/references/platforms/bluesky.md +64 -0
- package/skills/content-atomizer/references/platforms/instagram.md +77 -0
- package/skills/content-atomizer/references/platforms/linkedin.md +120 -0
- package/skills/content-atomizer/references/platforms/reddit.md +73 -0
- package/skills/content-atomizer/references/platforms/threads.md +64 -0
- package/skills/content-atomizer/references/platforms/tiktok.md +55 -0
- package/skills/content-atomizer/references/platforms/twitter.md +123 -0
- package/skills/content-atomizer/references/platforms/youtube.md +56 -0
- package/skills/content-atomizer/references/tweet-patterns.md +40 -0
- package/skills/content-repost-manager/SKILL.md +245 -0
- package/skills/content-repost-manager/scripts/content-repost-scan.py +133 -0
- package/skills/context-recovery/.clawdhub/origin.json +7 -0
- package/skills/context-recovery/SKILL.md +198 -0
- package/skills/context-recovery/_meta.json +6 -0
- package/skills/conversion-flow-cro/SKILL.md +248 -0
- package/skills/conversion-flow-cro/references/flow-benchmarks.md +158 -0
- package/skills/copy-editing/SKILL.md +474 -0
- package/skills/copy-editing/evals/evals.json +89 -0
- package/skills/copy-editing/references/plain-english-alternatives.md +394 -0
- package/skills/copywriting/SKILL.md +349 -0
- package/skills/copywriting/evals/evals.json +111 -0
- package/skills/copywriting/references/awareness-level-guide.md +227 -0
- package/skills/copywriting/references/copy-frameworks.md +389 -0
- package/skills/copywriting/references/natural-transitions.md +272 -0
- package/skills/creative/SKILL.md +365 -0
- package/skills/creative/modes/ad-creative.md +1748 -0
- package/skills/creative/modes/product-photo.md +1520 -0
- package/skills/creative/modes/product-video.md +1657 -0
- package/skills/creative/modes/social-graphics.md +1511 -0
- package/skills/creative/modes/talking-head.md +2208 -0
- package/skills/creative/references/VISUAL_INTELLIGENCE.md +1233 -0
- package/skills/deep-serp-article/SKILL.md +677 -0
- package/skills/deep-serp-article/SKILL.md.bak +530 -0
- package/skills/earned-media/SKILL.md +260 -0
- package/skills/email-sequences/SKILL.md +446 -0
- package/skills/email-sequences/references/sequence-templates.md +1217 -0
- package/skills/firecrawl/.skill-meta.json +13 -0
- package/skills/firecrawl/SKILL.md +154 -0
- package/skills/firecrawl/rules/install.md +63 -0
- package/skills/firecrawl/rules/security.md +26 -0
- package/skills/form-cro/SKILL.md +429 -0
- package/skills/form-cro/evals/evals.json +90 -0
- package/skills/free-tool-strategy/SKILL.md +325 -0
- package/skills/free-tool-strategy/evals/evals.json +90 -0
- package/skills/free-tool-strategy/references/tool-types.md +253 -0
- package/skills/frontend-slides/SKILL.md +248 -0
- package/skills/frontend-slides/STYLE_PRESETS.md +347 -0
- package/skills/frontend-slides/animation-patterns.md +110 -0
- package/skills/frontend-slides/html-template.md +347 -0
- package/skills/frontend-slides/scripts/extract-pptx.py +96 -0
- package/skills/frontend-slides/viewport-base.css +153 -0
- package/skills/guardrail-framework/SKILL.md +319 -0
- package/skills/hook-generator/SKILL.md +438 -0
- package/skills/hook-generator/database/2026-PLATFORM-RESEARCH.md +211 -0
- package/skills/hook-generator/database/instagram-hooks.json +591 -0
- package/skills/hook-generator/database/linkedin-hooks.json +502 -0
- package/skills/hook-generator/database/medium-hooks.json +181 -0
- package/skills/hook-generator/database/tiktok-hooks.json +337 -0
- package/skills/hook-generator/database/twitter-hooks.json +567 -0
- package/skills/hook-generator/database/youtube-hooks.json +275 -0
- package/skills/hook-generator/package-lock.json +24 -0
- package/skills/hook-generator/package.json +5 -0
- package/skills/hook-generator/references/hook-generation-system.md +257 -0
- package/skills/hook-generator/references/hook-performance-analysis.json +153 -0
- package/skills/hook-generator/references/hooks-library.md +128 -0
- package/skills/hook-generator/references/platform-hook-frameworks.md +275 -0
- package/skills/hook-generator/scripts/generate-hooks-unified.js +722 -0
- package/skills/hook-generator/scripts/generate-hooks.js +225 -0
- package/skills/hook-generator/scripts/generate.sh +36 -0
- package/skills/hook-generator/scripts/ralph-hook-enhancer.js +864 -0
- package/skills/hook-generator/scripts/test-gemini-output.js +51 -0
- package/skills/humanizer/README.md +120 -0
- package/skills/humanizer/SKILL.md +699 -0
- package/skills/image-gen/SKILL.md +277 -0
- package/skills/image-gen/references/prompt-patterns.md +114 -0
- package/skills/image-gen/references/visual-metaphors.md +51 -0
- package/skills/impeccable/SKILL.md +86 -0
- package/skills/impeccable/reference/adapt.md +312 -0
- package/skills/impeccable/reference/adapt.native.md +58 -0
- package/skills/impeccable/reference/android.md +40 -0
- package/skills/impeccable/reference/animate.md +86 -0
- package/skills/impeccable/reference/audit.md +136 -0
- package/skills/impeccable/reference/audit.native.md +139 -0
- package/skills/impeccable/reference/bolder.md +31 -0
- package/skills/impeccable/reference/clarify.md +94 -0
- package/skills/impeccable/reference/colorize.md +86 -0
- package/skills/impeccable/reference/craft-floor.md +42 -0
- package/skills/impeccable/reference/craft.md +5 -0
- package/skills/impeccable/reference/critique.md +788 -0
- package/skills/impeccable/reference/degraded/asset-producer.md +90 -0
- package/skills/impeccable/reference/degraded/documenter.md +24 -0
- package/skills/impeccable/reference/degraded/finish-reviewer.md +37 -0
- package/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/skills/impeccable/reference/delight.md +70 -0
- package/skills/impeccable/reference/distill.md +111 -0
- package/skills/impeccable/reference/doctor.md +53 -0
- package/skills/impeccable/reference/document.md +416 -0
- package/skills/impeccable/reference/extract.md +69 -0
- package/skills/impeccable/reference/harden.md +336 -0
- package/skills/impeccable/reference/hooks.md +105 -0
- package/skills/impeccable/reference/init.md +125 -0
- package/skills/impeccable/reference/ios.md +45 -0
- package/skills/impeccable/reference/layout.md +84 -0
- package/skills/impeccable/reference/live-setup.md +102 -0
- package/skills/impeccable/reference/live.md +323 -0
- package/skills/impeccable/reference/new-work.md +110 -0
- package/skills/impeccable/reference/onboard.md +234 -0
- package/skills/impeccable/reference/operate.md +61 -0
- package/skills/impeccable/reference/optimize.md +258 -0
- package/skills/impeccable/reference/overdrive.md +127 -0
- package/skills/impeccable/reference/polish.md +97 -0
- package/skills/impeccable/reference/quieter.md +99 -0
- package/skills/impeccable/reference/routing.md +18 -0
- package/skills/impeccable/reference/shape.md +59 -0
- package/skills/impeccable/reference/typeset.md +80 -0
- package/skills/impeccable/reference/visualize.md +49 -0
- package/skills/impeccable/scripts/command-metadata.json +94 -0
- package/skills/impeccable/scripts/concept-seed.mjs +558 -0
- package/skills/impeccable/scripts/context-signals.mjs +334 -0
- package/skills/impeccable/scripts/context.mjs +1467 -0
- package/skills/impeccable/scripts/critique-storage.mjs +213 -0
- package/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/skills/impeccable/scripts/detect.mjs +21 -0
- package/skills/impeccable/scripts/detector/browser/injected/index.mjs +2023 -0
- package/skills/impeccable/scripts/detector/cli/main.mjs +438 -0
- package/skills/impeccable/scripts/detector/design-system.mjs +1046 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +8283 -0
- package/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +372 -0
- package/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +1168 -0
- package/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1186 -0
- package/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +264 -0
- package/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/skills/impeccable/scripts/detector/findings.mjs +18 -0
- package/skills/impeccable/scripts/detector/node/file-system.mjs +203 -0
- package/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/skills/impeccable/scripts/detector/registry/antipatterns.mjs +617 -0
- package/skills/impeccable/scripts/detector/rules/checks.mjs +5580 -0
- package/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/skills/impeccable/scripts/detector/shared/constants.mjs +112 -0
- package/skills/impeccable/scripts/detector/shared/fonts.mjs +30 -0
- package/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/skills/impeccable/scripts/doctor.mjs +336 -0
- package/skills/impeccable/scripts/embed-prompt.mjs +133 -0
- package/skills/impeccable/scripts/generate-image.mjs +240 -0
- package/skills/impeccable/scripts/hook-admin.mjs +801 -0
- package/skills/impeccable/scripts/hook-before-edit.mjs +508 -0
- package/skills/impeccable/scripts/hook-lib.mjs +2153 -0
- package/skills/impeccable/scripts/hook.mjs +78 -0
- package/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
- package/skills/impeccable/scripts/lib/composition-catalog.mjs +200 -0
- package/skills/impeccable/scripts/lib/concept-catalog.mjs +384 -0
- package/skills/impeccable/scripts/lib/design-parser.mjs +925 -0
- package/skills/impeccable/scripts/lib/impeccable-config.mjs +658 -0
- package/skills/impeccable/scripts/lib/impeccable-paths.mjs +137 -0
- package/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/skills/impeccable/scripts/lib/provider.mjs +5 -0
- package/skills/impeccable/scripts/lib/roll-selection.mjs +362 -0
- package/skills/impeccable/scripts/lib/staleness-deep.mjs +478 -0
- package/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
- package/skills/impeccable/scripts/lib/staleness.mjs +457 -0
- package/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
- package/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
- package/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
- package/skills/impeccable/scripts/live/accept-css.mjs +617 -0
- package/skills/impeccable/scripts/live/accept-verify.mjs +60 -0
- package/skills/impeccable/scripts/live/browser-script-parts.mjs +55 -0
- package/skills/impeccable/scripts/live/completion.mjs +28 -0
- package/skills/impeccable/scripts/live/event-validation.mjs +199 -0
- package/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
- package/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +73 -0
- package/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
- package/skills/impeccable/scripts/live/frameworks/journal.mjs +197 -0
- package/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
- package/skills/impeccable/scripts/live/frameworks/nuxt.mjs +161 -0
- package/skills/impeccable/scripts/live/frameworks/script-src.mjs +17 -0
- package/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
- package/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
- package/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
- package/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
- package/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
- package/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
- package/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/skills/impeccable/scripts/live/instructions.mjs +142 -0
- package/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
- package/skills/impeccable/scripts/live/roots.mjs +508 -0
- package/skills/impeccable/scripts/live/session-store.mjs +563 -0
- package/skills/impeccable/scripts/live/source-lock.mjs +105 -0
- package/skills/impeccable/scripts/live/source-search.mjs +105 -0
- package/skills/impeccable/scripts/live/svelte-ast.mjs +961 -0
- package/skills/impeccable/scripts/live/svelte-component.mjs +1342 -0
- package/skills/impeccable/scripts/live/sveltekit-adapter.mjs +316 -0
- package/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
- package/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/skills/impeccable/scripts/live/vocabulary.mjs +171 -0
- package/skills/impeccable/scripts/live-accept.mjs +954 -0
- package/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/skills/impeccable/scripts/live-browser.js +12520 -0
- package/skills/impeccable/scripts/live-commit-manual-edits.mjs +1244 -0
- package/skills/impeccable/scripts/live-complete.mjs +107 -0
- package/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/skills/impeccable/scripts/live-inject.mjs +503 -0
- package/skills/impeccable/scripts/live-insert.mjs +292 -0
- package/skills/impeccable/scripts/live-manual-edit-evidence.mjs +368 -0
- package/skills/impeccable/scripts/live-poll.mjs +429 -0
- package/skills/impeccable/scripts/live-resume.mjs +123 -0
- package/skills/impeccable/scripts/live-server.mjs +1669 -0
- package/skills/impeccable/scripts/live-status.mjs +71 -0
- package/skills/impeccable/scripts/live-target.mjs +30 -0
- package/skills/impeccable/scripts/live-wrap.mjs +927 -0
- package/skills/impeccable/scripts/live.mjs +359 -0
- package/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/skills/impeccable/scripts/palette.mjs +628 -0
- package/skills/impeccable/scripts/pin.mjs +221 -0
- package/skills/impeccable/scripts/serve-question.mjs +932 -0
- package/skills/impeccable/scripts/surface-brief.mjs +74 -0
- package/skills/inkstone-admin/SKILL.md +66 -0
- package/skills/jev-hook-gate/SKILL.md +111 -0
- package/skills/keyword-research/SKILL.md +503 -0
- package/skills/keyword-research/references/dr-cap-and-confidence.md +62 -0
- package/skills/keyword-research/references/keyword-examples.md +769 -0
- package/skills/landing-page-architect/SKILL.md +585 -0
- package/skills/landing-page-architect/references/architecture-reference.md +32 -0
- package/skills/launch-strategy/SKILL.md +384 -0
- package/skills/launch-strategy/evals/evals.json +91 -0
- package/skills/launch-strategy/references/launch-checklist.md +209 -0
- package/skills/launch-strategy/references/launch-timeline.md +159 -0
- package/skills/lead-email-craft/SKILL.md +522 -0
- package/skills/lead-magnets/SKILL.md +310 -0
- package/skills/lead-magnets/references/benchmarks.md +129 -0
- package/skills/lead-magnets/references/format-guide.md +196 -0
- package/skills/link-building-seo/SKILL.md +210 -0
- package/skills/lint-report.txt +1 -0
- package/skills/manifest.json +129 -0
- package/skills/marketing-demo/SKILL.md +249 -0
- package/skills/marketing-demo/references/remotion-examples.md +281 -0
- package/skills/marketing-ideas/SKILL.md +167 -0
- package/skills/marketing-ideas/evals/evals.json +90 -0
- package/skills/marketing-ideas/references/ideas-by-category.md +366 -0
- package/skills/marketing-psychology/SKILL.md +374 -0
- package/skills/marketing-psychology/evals/evals.json +88 -0
- package/skills/marketing-psychology/references/case-studies.md +148 -0
- package/skills/narrative-research-article/SKILL.md +469 -0
- package/skills/narrative-research-article/references/lanusse-patterns.md +166 -0
- package/skills/notebooklm/SKILL.md +674 -0
- package/skills/off-page-seo/SKILL.md +219 -0
- package/skills/onboarding-cro/SKILL.md +220 -0
- package/skills/onboarding-cro/evals/evals.json +92 -0
- package/skills/onboarding-cro/references/experiments.md +258 -0
- package/skills/original-research/SKILL.md +388 -0
- package/skills/page-cro/SKILL.md +269 -0
- package/skills/page-cro/references/cro-benchmarks.md +140 -0
- package/skills/paper-marketing/SKILL.md +448 -0
- package/skills/paper-marketing/references/agent-quality-rubric.md +68 -0
- package/skills/paper-marketing/references/brand-system-template.md +120 -0
- package/skills/paper-marketing/references/paper-mcp-rules.md +71 -0
- package/skills/paper-marketing/references/platform-conventions.md +43 -0
- package/skills/paywall-upgrade-cro/SKILL.md +227 -0
- package/skills/paywall-upgrade-cro/evals/evals.json +93 -0
- package/skills/paywall-upgrade-cro/references/experiments.md +164 -0
- package/skills/platform-formatting/SKILL.md +51 -0
- package/skills/popup-cro/SKILL.md +454 -0
- package/skills/popup-cro/evals/evals.json +94 -0
- package/skills/positioning-angles/SKILL.md +524 -0
- package/skills/positioning-angles/references/ad-matrix-and-examples.md +176 -0
- package/skills/positioning-angles/references/angle-frameworks.md +187 -0
- package/skills/positioning-angles/references/dunford-positioning.md +135 -0
- package/skills/positioning-angles/references/hormozi-offer.md +247 -0
- package/skills/positioning-angles/references/schwartz-sophistication.md +166 -0
- package/skills/positioning-angles/references/unique-mechanism.md +162 -0
- package/skills/pricing-strategy/SKILL.md +346 -0
- package/skills/pricing-strategy/evals/evals.json +90 -0
- package/skills/pricing-strategy/references/research-methods.md +152 -0
- package/skills/pricing-strategy/references/tier-structure.md +307 -0
- package/skills/programmatic-seo/SKILL.md +238 -0
- package/skills/programmatic-seo/evals/evals.json +94 -0
- package/skills/programmatic-seo/references/playbooks.md +308 -0
- package/skills/project-rag/SKILL.md +127 -0
- package/skills/quality-gate/SKILL.md +519 -0
- package/skills/quality-gate/judge-personas/buyer.md +47 -0
- package/skills/quality-gate/judge-personas/expert.md +47 -0
- package/skills/quality-gate/judge-personas/outsider.md +47 -0
- package/skills/quality-gate/judge-personas/scanner.md +41 -0
- package/skills/quality-gate/judge-personas/skeptic.md +40 -0
- package/skills/referral-program/SKILL.md +290 -0
- package/skills/referral-program/evals/evals.json +89 -0
- package/skills/referral-program/references/affiliate-programs.md +163 -0
- package/skills/referral-program/references/program-examples.md +143 -0
- package/skills/review-sites/SKILL.md +279 -0
- package/skills/revops/SKILL.md +343 -0
- package/skills/revops/evals/evals.json +91 -0
- package/skills/revops/references/automation-playbooks.md +290 -0
- package/skills/revops/references/lifecycle-definitions.md +278 -0
- package/skills/revops/references/routing-rules.md +203 -0
- package/skills/revops/references/scoring-models.md +247 -0
- package/skills/saas-product-seo/SKILL.md +324 -0
- package/skills/sales-enablement/SKILL.md +349 -0
- package/skills/sales-enablement/evals/evals.json +91 -0
- package/skills/sales-enablement/references/deck-frameworks.md +263 -0
- package/skills/sales-enablement/references/demo-scripts.md +355 -0
- package/skills/sales-enablement/references/objection-library.md +270 -0
- package/skills/sales-enablement/references/one-pager-templates.md +208 -0
- package/skills/schema-markup/SKILL.md +179 -0
- package/skills/schema-markup/evals/evals.json +87 -0
- package/skills/schema-markup/references/schema-examples.md +398 -0
- package/skills/self-improve/SKILL.md +166 -0
- package/skills/self-improving-agent/README.md +243 -0
- package/skills/self-improving-agent/SKILL.md +437 -0
- package/skills/self-improving-agent/scripts/__init__.py +16 -0
- package/skills/self-improving-agent/scripts/__pycache__/auto_detect.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/nlm_curation.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/__pycache__/self_improving_agent.cpython-314.pyc +0 -0
- package/skills/self-improving-agent/scripts/auto_detect.py +270 -0
- package/skills/self-improving-agent/scripts/init_expertise_registry.py +89 -0
- package/skills/self-improving-agent/scripts/nlm_curation.py +259 -0
- package/skills/self-improving-agent/scripts/self-improving-agent +113 -0
- package/skills/self-improving-agent/scripts/self_improving_agent.py +603 -0
- package/skills/self-improving-agent/scripts/test_curation_scorer.py +20 -0
- package/skills/self-improving-agent/scripts/test_self_improving.py +184 -0
- package/skills/send-email/SKILL.md +426 -0
- package/skills/send-email/references/batch-email-examples.md +807 -0
- package/skills/send-email/references/best-practices.md +453 -0
- package/skills/send-email/references/installation.md +123 -0
- package/skills/send-email/references/single-email-examples.md +470 -0
- package/skills/send-email/references/webhooks.md +221 -0
- package/skills/seo-audit/SKILL.md +362 -0
- package/skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/skills/seo-audit/references/architecture-patterns.md +271 -0
- package/skills/seo-audit/references/schema-templates.md +427 -0
- package/skills/seo-content/SKILL.md +510 -0
- package/skills/seo-content/references/anti-ai-detection.md +184 -0
- package/skills/seo-content/references/content-structures.md +148 -0
- package/skills/seo-content/references/eeat-examples.md +235 -0
- package/skills/seo-content/references/on-page-seo.md +261 -0
- package/skills/seo-content/references/pseo-playbooks.md +226 -0
- package/skills/seo-content/references/schema-templates.md +104 -0
- package/skills/seo-content/references/serp-analysis-format.md +151 -0
- package/skills/seo-machine/SKILL.md +331 -0
- package/skills/seo-machine/assets/brand-template.md +73 -0
- package/skills/seo-machine/assets/link-inventory-template.md +74 -0
- package/skills/seo-machine/assets/roadmap-template.md +184 -0
- package/skills/seo-machine/references/api-stack-recipes.md +230 -0
- package/skills/seo-machine/references/exa-recipes.md +260 -0
- package/skills/seo-machine/references/manual-research.md +73 -0
- package/skills/seo-machine/references/methodology.md +87 -0
- package/skills/seo-machine/references/off-page.md +123 -0
- package/skills/seo-machine/references/patterns/alternatives.md +176 -0
- package/skills/seo-machine/references/patterns/compare.md +105 -0
- package/skills/seo-machine/references/patterns/playbooks.md +106 -0
- package/skills/seo-machine/references/patterns/use-case.md +109 -0
- package/skills/seo-machine/references/quality-bars.md +99 -0
- package/skills/seo-machine/references/stacks/astro.md +156 -0
- package/skills/seo-machine/references/stacks/detection.md +61 -0
- package/skills/seo-machine/references/stacks/markdown-fallback.md +181 -0
- package/skills/seo-machine/references/stacks/nextjs.md +108 -0
- package/skills/seo-machine/references/stacks/rails-inertia.md +99 -0
- package/skills/seo-machine/references/striking-distance.md +116 -0
- package/skills/seo-machine/references/technical-audit.md +153 -0
- package/skills/seo-machine/scripts/link_audit.py +265 -0
- package/skills/seo-machine/scripts/tech_audit.py +221 -0
- package/skills/seo-machine/scripts/word_count.py +154 -0
- package/skills/sharp-thesis-validator/SKILL.md +393 -0
- package/skills/sharp-thesis-validator/examples.md +186 -0
- package/skills/signup-flow-cro/SKILL.md +359 -0
- package/skills/signup-flow-cro/evals/evals.json +88 -0
- package/skills/site-architecture/SKILL.md +357 -0
- package/skills/site-architecture/evals/evals.json +88 -0
- package/skills/site-architecture/references/mermaid-templates.md +216 -0
- package/skills/site-architecture/references/navigation-patterns.md +305 -0
- package/skills/site-architecture/references/site-type-templates.md +293 -0
- package/skills/skill-self-improvement/SKILL.md +151 -0
- package/skills/slideshow-script/SKILL.md +274 -0
- package/skills/slideshow-script/references/content-spec-schema.md +77 -0
- package/skills/slideshow-script/references/frameworks.md +84 -0
- package/skills/slideshow-script/references/paips-framework.md +37 -0
- package/skills/social-campaign/SKILL.md +419 -0
- package/skills/social-campaign/references/paper-mcp-workflow.md +48 -0
- package/skills/social-content/SKILL.md +359 -0
- package/skills/social-content/evals/evals.json +92 -0
- package/skills/social-content/references/platforms.md +170 -0
- package/skills/social-content/references/post-templates.md +177 -0
- package/skills/social-content/references/reverse-engineering.md +195 -0
- package/skills/social-worker/SKILL.md +204 -0
- package/skills/startup-launcher/SKILL.md +252 -0
- package/skills/startup-launcher/references/file-router.md +64 -0
- package/skills/startup-launcher/references/platform-matrix.md +65 -0
- package/skills/startup-launcher/references/platforms/alternativeto.md +283 -0
- package/skills/startup-launcher/references/platforms/appsumo.md +495 -0
- package/skills/startup-launcher/references/platforms/auraplusplus.md +736 -0
- package/skills/startup-launcher/references/platforms/betalist.md +98 -0
- package/skills/startup-launcher/references/platforms/capterra.md +276 -0
- package/skills/startup-launcher/references/platforms/crunchbase.md +514 -0
- package/skills/startup-launcher/references/platforms/dealify.md +291 -0
- package/skills/startup-launcher/references/platforms/dealmirror.md +313 -0
- package/skills/startup-launcher/references/platforms/desifounder.md +490 -0
- package/skills/startup-launcher/references/platforms/devhunt.md +210 -0
- package/skills/startup-launcher/references/platforms/devpost.md +448 -0
- package/skills/startup-launcher/references/platforms/fazier.md +56 -0
- package/skills/startup-launcher/references/platforms/firsto.md +489 -0
- package/skills/startup-launcher/references/platforms/g2.md +226 -0
- package/skills/startup-launcher/references/platforms/hackernews.md +99 -0
- package/skills/startup-launcher/references/platforms/hackernoon.md +385 -0
- package/skills/startup-launcher/references/platforms/indiedeals.md +367 -0
- package/skills/startup-launcher/references/platforms/indiehackers.md +80 -0
- package/skills/startup-launcher/references/platforms/kenmoo.md +231 -0
- package/skills/startup-launcher/references/platforms/labstartups.md +618 -0
- package/skills/startup-launcher/references/platforms/launchboard.md +307 -0
- package/skills/startup-launcher/references/platforms/launchfast.md +560 -0
- package/skills/startup-launcher/references/platforms/launchigniter.md +56 -0
- package/skills/startup-launcher/references/platforms/launchingnext.md +674 -0
- package/skills/startup-launcher/references/platforms/launchit.md +574 -0
- package/skills/startup-launcher/references/platforms/launchyourapp.md +677 -0
- package/skills/startup-launcher/references/platforms/libhunt.md +220 -0
- package/skills/startup-launcher/references/platforms/ltdhunt.md +221 -0
- package/skills/startup-launcher/references/platforms/microlaunch.md +45 -0
- package/skills/startup-launcher/references/platforms/openalternative.md +195 -0
- package/skills/startup-launcher/references/platforms/peerlist.md +56 -0
- package/skills/startup-launcher/references/platforms/peerpush.md +64 -0
- package/skills/startup-launcher/references/platforms/primeclub.md +282 -0
- package/skills/startup-launcher/references/platforms/productcanyon.md +190 -0
- package/skills/startup-launcher/references/platforms/producthunt.md +98 -0
- package/skills/startup-launcher/references/platforms/rankinpublic.md +315 -0
- package/skills/startup-launcher/references/platforms/rockethub.md +374 -0
- package/skills/startup-launcher/references/platforms/saasgenius.md +175 -0
- package/skills/startup-launcher/references/platforms/saashub.md +205 -0
- package/skills/startup-launcher/references/platforms/saasmantra.md +221 -0
- package/skills/startup-launcher/references/platforms/saaspirate.md +287 -0
- package/skills/startup-launcher/references/platforms/saaswarrior.md +190 -0
- package/skills/startup-launcher/references/platforms/saaszilla.md +194 -0
- package/skills/startup-launcher/references/platforms/selected.md +925 -0
- package/skills/startup-launcher/references/platforms/sideprojectors.md +86 -0
- package/skills/startup-launcher/references/platforms/softonic.md +240 -0
- package/skills/startup-launcher/references/platforms/sourceforge.md +251 -0
- package/skills/startup-launcher/references/platforms/stacksocial.md +244 -0
- package/skills/startup-launcher/references/platforms/startupstash.md +326 -0
- package/skills/startup-launcher/references/platforms/theresanaiforthat.md +253 -0
- package/skills/startup-launcher/references/platforms/tinylaunch.md +70 -0
- package/skills/startup-launcher/references/platforms/tinystartups.md +72 -0
- package/skills/startup-launcher/references/platforms/toolfolio.md +291 -0
- package/skills/startup-launcher/references/platforms/trustmrr.md +194 -0
- package/skills/startup-launcher/references/platforms/trylaunch.md +531 -0
- package/skills/startup-launcher/references/platforms/uneed.md +57 -0
- package/skills/startup-launcher/references/templates/asset-checklist.md +218 -0
- package/skills/startup-launcher/references/templates/launch-tracker.md +195 -0
- package/skills/startup-launcher/references/templates/product-brief.md +98 -0
- package/skills/summarize/.skill-meta.json +13 -0
- package/skills/summarize/SKILL.md +170 -0
- package/skills/summarize/rules/install.md +157 -0
- package/skills/summarize/rules/usage.md +207 -0
- package/skills/topical-authority/SKILL.md +307 -0
- package/skills/topical-authority/references/jake-ward-framework.md +201 -0
- package/skills/topical-authority/references/serp-clustering-algorithm.md +325 -0
- package/skills/topical-authority/scripts/orchestrator.js +367 -0
- package/skills/topical-authority/scripts/seo/analyze-competitor-coverage.js +3 -0
- package/skills/topical-authority/scripts/seo/audit-internal-links.js +3 -0
- package/skills/topical-authority/scripts/seo/build-clusters-from-serp.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-keywords-from-forums.js +3 -0
- package/skills/topical-authority/scripts/seo/extract-paa-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/fetch-serp-urls.js +3 -0
- package/skills/topical-authority/scripts/seo/gemini-serp-clustering.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-content-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/identify-research-gaps.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-quora-questions.js +3 -0
- package/skills/topical-authority/scripts/seo/scrape-reddit-pain-points.js +3 -0
- package/skills/topical-authority/scripts/seo/weave-internal-links.js +3 -0
- package/skills/visual-style/SKILL.md +199 -0
- package/skills/voice-brand-alignment/SKILL.md +70 -0
- package/skills/voice-brand-alignment/references/ai-slop-patterns.md +405 -0
- package/skills/voice-brand-alignment/scripts/validation/gemini-voice-validator.js +96 -0
- package/skills/voice-extraction/SKILL.md +234 -0
- package/skills/voice-extraction/references/extraction-prompt.md +155 -0
- package/skills/voice-extraction/references/voice-dna-template.md +168 -0
- package/skills/voice-extraction/references/voice-elements.md +259 -0
- package/skills/voice-extraction/scripts/build-corpus.js +120 -0
- package/skills/voice-extraction/scripts/collect-sources.sh +168 -0
- package/skills/warm-outbound/SKILL.md +299 -0
- package/skills/warm-outbound/templates/warm-message.md +39 -0
- package/skills/weekly-newsletter-digest/SKILL.md +78 -0
- package/skills/x-playwriter/SKILL.md +428 -0
- package/skills/x-playwriter/scripts/x-browser.js +185 -0
- package/skills/x-post-generator-openclaw/SKILL.md +138 -0
- package/skills/x-post-generator-openclaw/scripts/generate-x-post.js +537 -0
- package/skills/x-posting-playwriter/SKILL.md +203 -0
- package/skills/x-research/SKILL.md +129 -0
- package/skills/x-research/x-research.sh +85 -0
- package/skills/youtube-summarize/SKILL.md +90 -0
- package/skills/youtube-summarize/scripts/youtube-summarize.sh +143 -0
- package/src/cli.js +347 -172
- package/src/harness/deepseek-adapter.js +102 -0
- package/src/harness/deepseek.js +225 -0
- package/src/harness/opencode-adapter.js +174 -0
- package/src/harness/pi-adapter.js +172 -0
- package/src/harness/registry.js +121 -0
- package/src/harness/telemetry.js +102 -0
- package/src/harness/types.js +165 -0
- package/src/interview.js +36 -4
- package/src/postinstall.js +10 -12
- package/templates/AGENTS.md +17 -17
- package/templates/ORG.md +1 -1
- package/templates/TOOLS.md +7 -2
- package/templates/opencode.json +26 -29
- package/wiki/doctor.md +54 -0
- package/wiki/inkstone.md +4 -4
- package/wiki/opencode.md +3 -3
- package/skills/curated.txt +0 -68
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Voice Elements Reference
|
|
2
|
+
|
|
3
|
+
Complete documentation of voice patterns extracted from NotebookLM Journal notebook.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Terminology Library
|
|
8
|
+
|
|
9
|
+
### Core Phrases
|
|
10
|
+
|
|
11
|
+
| Phrase | Meaning | Usage Context |
|
|
12
|
+
|--------|---------|---------------|
|
|
13
|
+
| "intelligence multiplier" | AI as amplifier of human capability | Describing AI's role in work |
|
|
14
|
+
| "digital leverage" | Using technology to multiply effort | Business automation, efficiency |
|
|
15
|
+
| "Braindump system" | Daily journaling + AI processing workflow | Personal productivity, content creation |
|
|
16
|
+
| "gold nuggets" | Valuable insights extracted from raw content | Content processing, research |
|
|
17
|
+
| "fuck you money" | Financial independence enabling freedom | Financial goals, legacy building |
|
|
18
|
+
| "hacker by nature" | Self-identification as problem solver | Identity, approach to challenges |
|
|
19
|
+
| "generalist who refuses to be a slave" | Anti-specialization, freedom-focused | Work philosophy, independence |
|
|
20
|
+
| "automate the tedious to inhabit the miraculous" | Core automation philosophy | Technology purpose, life balance |
|
|
21
|
+
| "buy back the forest" | Conservation goal, legacy aspiration | Long-term vision, environmental values |
|
|
22
|
+
| "real life > AI art" | Preference for authentic experience | Technology philosophy, values |
|
|
23
|
+
|
|
24
|
+
### Secondary Phrases
|
|
25
|
+
|
|
26
|
+
- "smarts on the ground" - mental fatigue after physical labor
|
|
27
|
+
- "poop beans" - goat droppings (farm context)
|
|
28
|
+
- "cloud forest" - location descriptor
|
|
29
|
+
- "21st-century lifestyle rooted in the land" - hybrid identity
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Philosophical Framework
|
|
34
|
+
|
|
35
|
+
### Technology Philosophy
|
|
36
|
+
|
|
37
|
+
**Core Belief**: Technology should serve life, not replace it
|
|
38
|
+
|
|
39
|
+
**Key Tenets**:
|
|
40
|
+
1. AI is a tool for amplification, not substitution
|
|
41
|
+
2. Automation frees time for meaningful work
|
|
42
|
+
3. Real experience is more valuable than digital simulation
|
|
43
|
+
4. Technology enables, not defines, success
|
|
44
|
+
|
|
45
|
+
**Trigger Topics**:
|
|
46
|
+
- AI capabilities and limitations
|
|
47
|
+
- Work automation
|
|
48
|
+
- Digital vs physical life
|
|
49
|
+
- Tech entrepreneurship ethics
|
|
50
|
+
|
|
51
|
+
### Work Philosophy
|
|
52
|
+
|
|
53
|
+
**Core Belief**: Work should fund freedom, not consume life
|
|
54
|
+
|
|
55
|
+
**Key Tenets**:
|
|
56
|
+
1. Build systems that work without you
|
|
57
|
+
2. Trade money for time, not time for money
|
|
58
|
+
3. Refuse wage slavery in all forms
|
|
59
|
+
4. Expertise beats volume
|
|
60
|
+
|
|
61
|
+
**Trigger Topics**:
|
|
62
|
+
- Business models
|
|
63
|
+
- Time management
|
|
64
|
+
- Career choices
|
|
65
|
+
- Financial independence
|
|
66
|
+
|
|
67
|
+
### Life Philosophy
|
|
68
|
+
|
|
69
|
+
**Core Belief**: Legacy > income, experience > accumulation
|
|
70
|
+
|
|
71
|
+
**Key Tenets**:
|
|
72
|
+
1. Leave the land better than you found it
|
|
73
|
+
2. Build for generations, not quarters
|
|
74
|
+
3. Physical labor grounds the mind
|
|
75
|
+
4. Family and ecosystem are inseparable
|
|
76
|
+
|
|
77
|
+
**Trigger Topics**:
|
|
78
|
+
- Parenting
|
|
79
|
+
- Land stewardship
|
|
80
|
+
- Long-term planning
|
|
81
|
+
- Work-life balance
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Contextual Anchors
|
|
86
|
+
|
|
87
|
+
### Location: Teyoapa Farm (Cloud Forest)
|
|
88
|
+
|
|
89
|
+
**Physical Elements**:
|
|
90
|
+
- Morning mist over mountains
|
|
91
|
+
- Goats and livestock
|
|
92
|
+
- Corn stalks and agriculture
|
|
93
|
+
- Forest edges and ecosystems
|
|
94
|
+
- Wet, green, elevation
|
|
95
|
+
|
|
96
|
+
**Sensory Vocabulary**:
|
|
97
|
+
- "drenched in sweat"
|
|
98
|
+
- "rhythmic sound of crickets"
|
|
99
|
+
- "sun setting over the mountains"
|
|
100
|
+
- "dirt on your hands"
|
|
101
|
+
- "mud and manure"
|
|
102
|
+
|
|
103
|
+
### Occupation: Tech Entrepreneur + Farmer
|
|
104
|
+
|
|
105
|
+
**Work Contrast**:
|
|
106
|
+
- Morning: Physical farm labor
|
|
107
|
+
- Afternoon: AI tools and code
|
|
108
|
+
- Evening: Family and reflection
|
|
109
|
+
|
|
110
|
+
**Business Elements**:
|
|
111
|
+
- Manufacturing business (20 employees, payroll systems)
|
|
112
|
+
- Digital products and SaaS
|
|
113
|
+
- AI automation tools
|
|
114
|
+
- Content creation systems
|
|
115
|
+
|
|
116
|
+
### Family: Multi-Generational Focus
|
|
117
|
+
|
|
118
|
+
**Themes**:
|
|
119
|
+
- Legacy building for children
|
|
120
|
+
- Teaching through example
|
|
121
|
+
- Protecting ecosystem for future
|
|
122
|
+
- Balancing work with presence
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Emotional Patterns
|
|
127
|
+
|
|
128
|
+
### Joy Triggers
|
|
129
|
+
- Nature immersion
|
|
130
|
+
- System working smoothly
|
|
131
|
+
- Physical accomplishment
|
|
132
|
+
- Family moments
|
|
133
|
+
- Financial milestones
|
|
134
|
+
|
|
135
|
+
### Frustration Triggers
|
|
136
|
+
- Mental exhaustion after physical labor
|
|
137
|
+
- Technology failing
|
|
138
|
+
- Time scarcity
|
|
139
|
+
- Bureaucratic obstacles
|
|
140
|
+
- Compromising values for money
|
|
141
|
+
|
|
142
|
+
### Hope Expressions
|
|
143
|
+
- "buy back the forest"
|
|
144
|
+
- "generations to come"
|
|
145
|
+
- "fund your freedom"
|
|
146
|
+
- "build something that lasts"
|
|
147
|
+
|
|
148
|
+
### Concern Expressions
|
|
149
|
+
- Ecosystem degradation
|
|
150
|
+
- Time with family
|
|
151
|
+
- Sustainable income
|
|
152
|
+
- Maintaining authenticity
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Writing Style
|
|
157
|
+
|
|
158
|
+
### Sentence Structure
|
|
159
|
+
- Short declarative statements for emphasis
|
|
160
|
+
- Contrast pairs (farm vs tech, physical vs digital)
|
|
161
|
+
- Rhetorical questions to provoke thought
|
|
162
|
+
- Lists for practical content
|
|
163
|
+
|
|
164
|
+
### Rhetorical Devices
|
|
165
|
+
- **Contrast**: Physical labor vs mental work
|
|
166
|
+
- **Metaphor**: Intelligence multiplier, digital leverage
|
|
167
|
+
- **Direct address**: "You" statements for reader engagement
|
|
168
|
+
- **Grounding**: Physical details to anchor abstractions
|
|
169
|
+
|
|
170
|
+
### Tone Markers
|
|
171
|
+
- Confident but not arrogant
|
|
172
|
+
- Practical over theoretical
|
|
173
|
+
- Personal without oversharing
|
|
174
|
+
- Direct, minimal hedging
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Platform Adaptations
|
|
179
|
+
|
|
180
|
+
### Twitter/X
|
|
181
|
+
- Maximum compression
|
|
182
|
+
- One insight per tweet
|
|
183
|
+
- Physical/digital contrast
|
|
184
|
+
- End with punch
|
|
185
|
+
|
|
186
|
+
### LinkedIn
|
|
187
|
+
- Professional credibility
|
|
188
|
+
- System-focused
|
|
189
|
+
- Thought leadership
|
|
190
|
+
- Story structure
|
|
191
|
+
|
|
192
|
+
### Instagram
|
|
193
|
+
- Visual-first language
|
|
194
|
+
- Behind-the-scenes
|
|
195
|
+
- Aspirational but grounded
|
|
196
|
+
- Community building
|
|
197
|
+
|
|
198
|
+
### Blog
|
|
199
|
+
- Deep exploration
|
|
200
|
+
- Proof through anecdote
|
|
201
|
+
- Philosophy + practical
|
|
202
|
+
- Long-form narrative
|
|
203
|
+
|
|
204
|
+
### Newsletter
|
|
205
|
+
- Personal letter feel
|
|
206
|
+
- Current context sharing
|
|
207
|
+
- Value-forward
|
|
208
|
+
- Relationship building
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Anti-Patterns (Avoid)
|
|
213
|
+
|
|
214
|
+
### Language to Avoid
|
|
215
|
+
- Generic business jargon ("synergy", "leverage" without context)
|
|
216
|
+
- Overly technical AI terminology
|
|
217
|
+
- Corporate speak
|
|
218
|
+
- Passive voice
|
|
219
|
+
- Hedging language ("kind of", "sort of", "maybe")
|
|
220
|
+
|
|
221
|
+
### Tone to Avoid
|
|
222
|
+
- Preachy or self-righteous
|
|
223
|
+
- Humble-bragging
|
|
224
|
+
- Detached or academic
|
|
225
|
+
- Overly polished or corporate
|
|
226
|
+
|
|
227
|
+
### Content to Avoid
|
|
228
|
+
- Pure theory without practice
|
|
229
|
+
- Technology for technology's sake
|
|
230
|
+
- Get-rich-quick framing
|
|
231
|
+
- Lifestyle porn without substance
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Validation Checklist
|
|
236
|
+
|
|
237
|
+
### Must Have (at least 2)
|
|
238
|
+
- [ ] Uses distinctive terminology
|
|
239
|
+
- [ ] Reflects core philosophy
|
|
240
|
+
- [ ] Includes authentic context
|
|
241
|
+
- [ ] Maintains appropriate tone
|
|
242
|
+
|
|
243
|
+
### Should Have (at least 1)
|
|
244
|
+
- [ ] Physical/digital contrast
|
|
245
|
+
- [ ] Personal anecdote
|
|
246
|
+
- [ ] Future/legacy reference
|
|
247
|
+
- [ ] Practical application
|
|
248
|
+
|
|
249
|
+
### Nice to Have
|
|
250
|
+
- [ ] Sensory details
|
|
251
|
+
- [ ] Family reference
|
|
252
|
+
- [ ] Environmental awareness
|
|
253
|
+
- [ ] Humor or self-deprecation
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Version History
|
|
258
|
+
|
|
259
|
+
- **1.0.0** (2025-12-28): Initial extraction from NotebookLM Journal
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* build-corpus.js — Normalize and combine text sources into a single corpus
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node build-corpus.js <input1> [input2] ... [--output <file>] [--max-words <n>]
|
|
8
|
+
* cat raw.txt | node build-corpus.js --stdin --output corpus.txt
|
|
9
|
+
*
|
|
10
|
+
* Strips YAML frontmatter, normalizes whitespace, removes source markers,
|
|
11
|
+
* and outputs clean text ready for voice analysis.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const fs = require('fs');
|
|
15
|
+
const path = require('path');
|
|
16
|
+
|
|
17
|
+
const args = process.argv.slice(2);
|
|
18
|
+
const inputs = [];
|
|
19
|
+
let output = null;
|
|
20
|
+
let maxWords = 0;
|
|
21
|
+
let useStdin = false;
|
|
22
|
+
|
|
23
|
+
for (let i = 0; i < args.length; i++) {
|
|
24
|
+
if (args[i] === '--output' || args[i] === '-o') {
|
|
25
|
+
output = args[++i];
|
|
26
|
+
} else if (args[i] === '--max-words') {
|
|
27
|
+
maxWords = parseInt(args[++i]);
|
|
28
|
+
} else if (args[i] === '--stdin') {
|
|
29
|
+
useStdin = true;
|
|
30
|
+
} else {
|
|
31
|
+
inputs.push(args[i]);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function stripFrontmatter(text) {
|
|
36
|
+
if (text.startsWith('---')) {
|
|
37
|
+
const end = text.indexOf('\n---', 3);
|
|
38
|
+
if (end > 0) {
|
|
39
|
+
return text.substring(end + 4).trimStart();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return text;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function normalize(text) {
|
|
46
|
+
return text
|
|
47
|
+
.replace(/\r\n/g, '\n') // normalize line endings
|
|
48
|
+
.replace(/\n{4,}/g, '\n\n\n') // collapse excessive blank lines
|
|
49
|
+
.replace(/^\[source:.*\]$/gm, '') // remove source markers
|
|
50
|
+
.replace(/^---$/gm, '') // remove separator lines
|
|
51
|
+
.trim();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function readInput(filepath) {
|
|
55
|
+
const raw = fs.readFileSync(filepath, 'utf8');
|
|
56
|
+
return stripFrontmatter(raw);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Collect all text
|
|
60
|
+
let chunks = [];
|
|
61
|
+
|
|
62
|
+
if (useStdin) {
|
|
63
|
+
const stdin = fs.readFileSync(0, 'utf8');
|
|
64
|
+
chunks.push(normalize(stripFrontmatter(stdin)));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const input of inputs) {
|
|
68
|
+
if (fs.existsSync(input)) {
|
|
69
|
+
const stat = fs.statSync(input);
|
|
70
|
+
if (stat.isDirectory()) {
|
|
71
|
+
// Recursively read .md and .txt files
|
|
72
|
+
const files = fs.readdirSync(input).filter(f =>
|
|
73
|
+
/\.(md|txt|json)$/i.test(f)
|
|
74
|
+
);
|
|
75
|
+
for (const f of files) {
|
|
76
|
+
chunks.push(`[from: ${f}]\n${normalize(readInput(path.join(input, f)))}`);
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
chunks.push(normalize(readInput(input)));
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
console.error(`Warning: ${input} not found, skipping`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
let corpus = chunks.filter(c => c.length > 50).join('\n\n---\n\n');
|
|
87
|
+
|
|
88
|
+
// Word count and capping
|
|
89
|
+
const words = corpus.split(/\s+/);
|
|
90
|
+
const wordCount = words.length;
|
|
91
|
+
|
|
92
|
+
if (maxWords > 0 && wordCount > maxWords) {
|
|
93
|
+
corpus = words.slice(0, maxWords).join(' ');
|
|
94
|
+
console.error(`Capped corpus at ${maxWords} words (was ${wordCount})`);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Stats
|
|
98
|
+
const sentences = corpus.split(/[.!?]+/).filter(s => s.trim().length > 0);
|
|
99
|
+
const avgSentenceLength = sentences.length > 0
|
|
100
|
+
? Math.round(corpus.split(/\s+/).length / sentences.length)
|
|
101
|
+
: 0;
|
|
102
|
+
|
|
103
|
+
const stats = `
|
|
104
|
+
=== CORPUS STATS ===
|
|
105
|
+
Words: ${wordCount}
|
|
106
|
+
Sentences: ${sentences.length}
|
|
107
|
+
Avg sentence length: ${avgSentenceLength} words
|
|
108
|
+
Sources: ${inputs.length + (useStdin ? 1 : 0)}
|
|
109
|
+
===================
|
|
110
|
+
`;
|
|
111
|
+
|
|
112
|
+
// Output
|
|
113
|
+
if (output) {
|
|
114
|
+
fs.writeFileSync(output, corpus);
|
|
115
|
+
console.error(stats.trim());
|
|
116
|
+
console.error(`Written to: ${output}`);
|
|
117
|
+
} else {
|
|
118
|
+
process.stderr.write(stats);
|
|
119
|
+
process.stdout.write(corpus);
|
|
120
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# collect-sources.sh — Gather writing samples from multiple source types
|
|
5
|
+
# Usage: ./collect-sources.sh [OPTIONS]
|
|
6
|
+
# Outputs combined corpus to stdout
|
|
7
|
+
|
|
8
|
+
NLM_BIN="${NLM_BIN:-$HOME/.local/bin/nlm}"
|
|
9
|
+
OUTPUT_DIR="${OUTPUT_DIR:-/tmp/voice-corpus}"
|
|
10
|
+
mkdir -p "$OUTPUT_DIR"
|
|
11
|
+
|
|
12
|
+
usage() {
|
|
13
|
+
cat <<EOF
|
|
14
|
+
Usage: collect-sources.sh [OPTIONS]
|
|
15
|
+
|
|
16
|
+
Gathers writing samples into a corpus for voice DNA extraction.
|
|
17
|
+
|
|
18
|
+
Source options (can combine multiple):
|
|
19
|
+
--files <glob> Recursively collect .md/.txt files matching glob
|
|
20
|
+
--nlm <notebook-id> Query NLM notebook for representative passages
|
|
21
|
+
--nlm-source <id> Get raw content from a specific NLM source
|
|
22
|
+
--url <url> Fetch web page content
|
|
23
|
+
--text <"raw text"> Include raw text directly
|
|
24
|
+
--birdclaw <handle> Pull original tweets from birdclaw DB
|
|
25
|
+
--stdin Read from stdin
|
|
26
|
+
|
|
27
|
+
Output options:
|
|
28
|
+
--output <path> Write corpus to file (default: stdout)
|
|
29
|
+
--max-words <n> Cap total corpus at N words (default: 50000)
|
|
30
|
+
|
|
31
|
+
Examples:
|
|
32
|
+
# From local journal files
|
|
33
|
+
collect-sources.sh --files "~/journals/*.md"
|
|
34
|
+
|
|
35
|
+
# From NLM notebook
|
|
36
|
+
collect-sources.sh --nlm "ab4bc5fe-50c7-4dfc-9763-5d4a674c264b"
|
|
37
|
+
|
|
38
|
+
# Mixed sources
|
|
39
|
+
collect-sources.sh --files "~/writing/*.md" --url "https://example.com/article" --text "Additional sample"
|
|
40
|
+
|
|
41
|
+
EOF
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# Parse args
|
|
45
|
+
declare -a SOURCES
|
|
46
|
+
MAX_WORDS=50000
|
|
47
|
+
OUTPUT=""
|
|
48
|
+
|
|
49
|
+
while [[ $# -gt 0 ]]; do
|
|
50
|
+
case "$1" in
|
|
51
|
+
--files)
|
|
52
|
+
shift
|
|
53
|
+
GLOB="$1"
|
|
54
|
+
while IFS= read -r -d '' file; do
|
|
55
|
+
echo "[source: file:$file]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
56
|
+
cat "$file" >> "$OUTPUT_DIR/raw_input.txt"
|
|
57
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
58
|
+
done < <(find ~ -maxdepth 5 -name "$GLOB" -not -path "*/node_modules/*" -not -path "*/.git/*" -print0 2>/dev/null || true)
|
|
59
|
+
shift
|
|
60
|
+
;;
|
|
61
|
+
--nlm)
|
|
62
|
+
shift
|
|
63
|
+
NOTEBOOK_ID="$1"
|
|
64
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
65
|
+
# Query NLM for representative journal entries
|
|
66
|
+
"$NLM_BIN" query notebook "$NOTEBOOK_ID" "Give me the 20 most representative passages from the sources that show the author's unique writing voice. Include full paragraphs, not summaries. Focus on passages where the author expresses opinions, tells stories, or uses distinctive language." --timeout 120 > "$OUTPUT_DIR/nlm_output.txt" 2>&1 || true
|
|
67
|
+
echo "[source: nlm-notebook:$NOTEBOOK_ID]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
68
|
+
cat "$OUTPUT_DIR/nlm_output.txt" >> "$OUTPUT_DIR/raw_input.txt"
|
|
69
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
70
|
+
shift
|
|
71
|
+
;;
|
|
72
|
+
--nlm-source)
|
|
73
|
+
shift
|
|
74
|
+
SOURCE_ID="$1"
|
|
75
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
76
|
+
"$NLM_BIN" content "$SOURCE_ID" > "$OUTPUT_DIR/nlm_source_$SOURCE_ID.txt" 2>&1 || true
|
|
77
|
+
echo "[source: nlm-source:$SOURCE_ID]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
78
|
+
cat "$OUTPUT_DIR/nlm_source_$SOURCE_ID.txt" >> "$OUTPUT_DIR/raw_input.txt"
|
|
79
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
80
|
+
shift
|
|
81
|
+
;;
|
|
82
|
+
--url)
|
|
83
|
+
shift
|
|
84
|
+
URL="$1"
|
|
85
|
+
# Use curl to fetch, strip HTML tags
|
|
86
|
+
curl -sL "$URL" | sed 's/<[^>]*>//g' | sed '/^$/d' > "$OUTPUT_DIR/url_$(echo "$URL" | md5sum | cut -c1-8).txt" 2>/dev/null || true
|
|
87
|
+
echo "[source: url:$URL]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
88
|
+
cat "$OUTPUT_DIR/url_"*.txt >> "$OUTPUT_DIR/raw_input.txt" 2>/dev/null || true
|
|
89
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
90
|
+
shift
|
|
91
|
+
;;
|
|
92
|
+
--text)
|
|
93
|
+
shift
|
|
94
|
+
echo "[source: raw-text]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
95
|
+
echo "$1" >> "$OUTPUT_DIR/raw_input.txt"
|
|
96
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
97
|
+
shift
|
|
98
|
+
;;
|
|
99
|
+
--birdclaw)
|
|
100
|
+
shift
|
|
101
|
+
HANDLE="$1"
|
|
102
|
+
DB_PATH="${BIRDCLAW_DB:-$HOME/clawd/workspace/birdclaw/data/birdclaw.db}"
|
|
103
|
+
python3 -c "
|
|
104
|
+
import sqlite3, sys
|
|
105
|
+
try:
|
|
106
|
+
db = sqlite3.connect('$DB_PATH')
|
|
107
|
+
rows = db.execute('''
|
|
108
|
+
SELECT text FROM tweets
|
|
109
|
+
WHERE text NOT LIKE 'RT @%'
|
|
110
|
+
AND text NOT LIKE '@%'
|
|
111
|
+
AND length(text) > 50
|
|
112
|
+
ORDER BY random()
|
|
113
|
+
LIMIT 100
|
|
114
|
+
''').fetchall()
|
|
115
|
+
for r in rows:
|
|
116
|
+
print(r[0])
|
|
117
|
+
print('---')
|
|
118
|
+
except Exception as e:
|
|
119
|
+
print(f'birdclaw error: {e}', file=sys.stderr)
|
|
120
|
+
" >> "$OUTPUT_DIR/raw_input.txt" 2>&1 || echo "[birdclaw: unavailable]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
121
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
122
|
+
shift
|
|
123
|
+
;;
|
|
124
|
+
--stdin)
|
|
125
|
+
echo "[source: stdin]" >> "$OUTPUT_DIR/raw_input.txt"
|
|
126
|
+
cat >> "$OUTPUT_DIR/raw_input.txt"
|
|
127
|
+
echo -e "\n\n" >> "$OUTPUT_DIR/raw_input.txt"
|
|
128
|
+
;;
|
|
129
|
+
--max-words)
|
|
130
|
+
shift
|
|
131
|
+
MAX_WORDS="$1"
|
|
132
|
+
shift
|
|
133
|
+
;;
|
|
134
|
+
--output)
|
|
135
|
+
shift
|
|
136
|
+
OUTPUT="$1"
|
|
137
|
+
shift
|
|
138
|
+
;;
|
|
139
|
+
--help|-h)
|
|
140
|
+
usage
|
|
141
|
+
exit 0
|
|
142
|
+
;;
|
|
143
|
+
*)
|
|
144
|
+
echo "Unknown option: $1" >&2
|
|
145
|
+
usage
|
|
146
|
+
exit 1
|
|
147
|
+
;;
|
|
148
|
+
esac
|
|
149
|
+
done
|
|
150
|
+
|
|
151
|
+
# If no raw_input collected, show usage
|
|
152
|
+
if [[ ! -f "$OUTPUT_DIR/raw_input.txt" ]]; then
|
|
153
|
+
echo "No sources provided." >&2
|
|
154
|
+
usage
|
|
155
|
+
exit 1
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Output
|
|
159
|
+
if [[ -n "$OUTPUT" ]]; then
|
|
160
|
+
cp "$OUTPUT_DIR/raw_input.txt" "$OUTPUT"
|
|
161
|
+
WC=$(wc -w < "$OUTPUT")
|
|
162
|
+
echo "Corpus: $WC words → $OUTPUT" >&2
|
|
163
|
+
else
|
|
164
|
+
cat "$OUTPUT_DIR/raw_input.txt"
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
# Cleanup
|
|
168
|
+
rm -f "$OUTPUT_DIR/raw_input.txt" "$OUTPUT_DIR/nlm_output.txt" "$OUTPUT_DIR/nlm_source_"*.txt "$OUTPUT_DIR/url_"*.txt 2>/dev/null || true
|