@thierrynakoa/fire-flow 12.2.1 → 13.0.1
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/CREDITS.md +25 -0
- package/DOMINION-FLOW-OVERVIEW.md +182 -38
- package/README.md +399 -455
- package/TROUBLESHOOTING.md +264 -264
- package/agents/fire-debugger.md +54 -0
- package/agents/fire-executor.md +1610 -1033
- package/agents/fire-fact-checker.md +1 -1
- package/agents/fire-planner.md +85 -17
- package/agents/fire-project-researcher.md +1 -1
- package/agents/fire-researcher.md +4 -22
- package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
- package/agents/fire-reviewer.md +552 -499
- package/agents/fire-verifier.md +114 -19
- package/bin/cli.js +18 -101
- package/commands/fire-0-orient.md +2 -2
- package/commands/fire-1a-new.md +50 -15
- package/commands/fire-1c-setup.md +33 -5
- package/commands/fire-1d-discuss.md +87 -1
- package/commands/fire-2-plan.md +556 -527
- package/commands/fire-3-execute.md +2046 -1356
- package/commands/fire-4-verify.md +975 -906
- package/commands/fire-5-handoff.md +46 -5
- package/commands/fire-6-resume.md +2 -31
- package/commands/fire-add-new-skill.md +138 -19
- package/commands/fire-autonomous.md +14 -2
- package/commands/fire-complete-milestone.md +1 -1
- package/commands/fire-cost.md +179 -183
- package/commands/fire-debug.md +1 -6
- package/commands/fire-loop-resume.md +2 -2
- package/commands/fire-loop-stop.md +1 -1
- package/commands/fire-loop.md +2 -15
- package/commands/fire-map-codebase.md +1 -1
- package/commands/fire-migrate-database.md +548 -0
- package/commands/fire-new-milestone.md +1 -1
- package/commands/fire-reflect.md +1 -2
- package/commands/fire-research.md +142 -21
- package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
- package/commands/fire-scaffold.md +297 -0
- package/commands/fire-search.md +1 -2
- package/commands/fire-security-scan.md +483 -484
- package/commands/fire-setup.md +359 -0
- package/commands/fire-skill.md +770 -0
- package/commands/fire-skills-diff.md +506 -506
- package/commands/fire-skills-history.md +388 -388
- package/commands/fire-skills-rollback.md +7 -7
- package/commands/fire-skills-sync.md +470 -470
- package/commands/fire-test.md +5 -5
- package/commands/fire-todos.md +1 -1
- package/commands/fire-update.md +5 -5
- package/commands/fire-validate-skills.md +282 -0
- package/commands/fire-vuln-scan.md +492 -493
- package/hooks/run-hook.sh +8 -8
- package/hooks/run-session-end.sh +7 -7
- package/hooks/session-end.sh +90 -90
- package/hooks/session-start.sh +1 -1
- package/package.json +4 -24
- package/plugin.json +7 -7
- package/references/autonomy-levels.md +235 -0
- package/references/behavioral-directives.md +95 -3
- package/references/blocker-tracking.md +1 -1
- package/references/circuit-breaker.md +93 -2
- package/references/context-engineering.md +227 -9
- package/references/honesty-protocols.md +70 -1
- package/references/issue-to-pr-pipeline.md +149 -150
- package/references/metrics-and-trends.md +1 -2
- package/references/research-improvements.md +4 -108
- package/references/sdlc-mapping.md +73 -0
- package/references/state-machine.md +151 -0
- package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
- package/skills-library/SKILLS-INDEX.md +57 -558
- package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
- package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
- package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
- package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
- package/skills-library/_general/automation/settings-gui-generator.md +172 -0
- package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
- package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
- package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
- package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
- package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
- package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
- package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
- package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
- package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
- package/skills-library/_general/frontend/color-token-migration.md +112 -0
- package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
- package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
- package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
- package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
- package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
- package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
- package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
- package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
- package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
- package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
- package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
- package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
- package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
- package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
- package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
- package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
- package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
- package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
- package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
- package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
- package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
- package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
- package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
- package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
- package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
- package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
- package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
- package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
- package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
- package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
- package/skills-library/_general/methodology/dead-code-activation.md +123 -0
- package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
- package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
- package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
- package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
- package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
- package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
- package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
- package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
- package/skills-library/_general/performance/liveclock-extraction.md +112 -0
- package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
- package/skills-library/_general/performance/use-visible-interval.md +131 -0
- package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
- package/skills-library/_quarantine/README.md +30 -0
- package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
- package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
- package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
- package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
- package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
- package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
- package/skills-library/api-patterns/graphql-content-queries.md +708 -0
- package/skills-library/appointment-scheduler-design.md +423 -0
- package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
- package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
- package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
- package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
- package/skills-library/automation/scheduled-content-publishing.md +608 -0
- package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
- package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
- package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
- package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
- package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
- package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
- package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
- package/skills-library/cms-patterns/content-branch-preview.md +515 -0
- package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
- package/skills-library/cms-patterns/mdx-component-content.md +649 -0
- package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
- package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
- package/skills-library/complexity-metrics/complexity-divider.md +707 -0
- package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
- package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
- package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
- package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
- package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
- package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
- package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
- package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
- package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
- package/skills-library/creative-multimedia/og-image-generator.md +635 -0
- package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
- package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
- package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
- package/skills-library/creative-multimedia/svg-generation.md +750 -0
- package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
- package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
- package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
- package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
- package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
- package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
- package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
- package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
- package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
- package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
- package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
- package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
- package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
- package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
- package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
- package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
- package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
- package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
- package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
- package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
- package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
- package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
- package/skills-library/database-solutions/content-publishing-states.md +631 -0
- package/skills-library/database-solutions/database-schema-designer.md +522 -0
- package/skills-library/database-solutions/er-diagram-components.md +569 -0
- package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
- package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
- package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
- package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
- package/skills-library/database-solutions/normalization-validator.md +778 -0
- package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
- package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
- package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
- package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
- package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
- package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
- package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
- package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
- package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
- package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
- package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
- package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
- package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
- package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
- package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
- package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
- package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
- package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
- package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
- package/skills-library/deployment-security/SECURITY.md +41 -0
- package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
- package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
- package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
- package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
- package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
- package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
- package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
- package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
- package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
- package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
- package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
- package/skills-library/deployment-security/vps-deployment.md +135 -0
- package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
- package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
- package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
- package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
- package/skills-library/document-processing/md-to-word-converter.md +318 -0
- package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
- package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
- package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
- package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
- package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
- package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
- package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
- package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
- package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
- package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
- package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
- package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
- package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
- package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
- package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
- package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
- package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
- package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
- package/skills-library/ecommerce/inventory-stock-management.md +270 -0
- package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
- package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
- package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
- package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
- package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
- package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
- package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
- package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
- package/skills-library/excalidraw-diagrams/LICENSE +21 -0
- package/skills-library/excalidraw-diagrams/README.md +178 -0
- package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
- package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
- package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
- package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
- package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
- package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
- package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
- package/skills-library/infrastructure/observability-designer.md +264 -0
- package/skills-library/infrastructure/performance-profiler.md +621 -0
- package/skills-library/installer-wizard-patterns.md +249 -0
- package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
- package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
- package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
- package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
- package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
- package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
- package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
- package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
- package/skills-library/integrations/headless-cms-architecture.md +484 -0
- package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
- package/skills-library/integrations/payload-cms-patterns.md +674 -0
- package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
- package/skills-library/integrations/rss-podcast-integration.md +300 -0
- package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
- package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
- package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
- package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
- package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
- package/skills-library/marketing/campaign-analytics.md +97 -0
- package/skills-library/marketing/content-creator.md +105 -0
- package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
- package/skills-library/marketing/social-media-analyzer.md +81 -0
- package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
- package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
- package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
- package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
- package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
- package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
- package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
- package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
- package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
- package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
- package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
- package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
- package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
- package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
- package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
- package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
- package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
- package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
- package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
- package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
- package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
- package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
- package/skills-library/methodology/tech-debt-tracker.md +570 -0
- package/skills-library/parallel-debug/SKILL.md +60 -0
- package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
- package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
- package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
- package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
- package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
- package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
- package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
- package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
- package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
- package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
- package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
- package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
- package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
- package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
- package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
- package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
- package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
- package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
- package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
- package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
- package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
- package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
- package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
- package/skills-library/security/admin-deletion-safety.md +396 -0
- package/skills-library/security/application-vuln-patterns.md +477 -0
- package/skills-library/security/env-secrets-manager.md +686 -0
- package/skills-library/security/secure-ai-application-templates.md +347 -0
- package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
- package/skills-library/supabase-connection-pooler-fix.md +102 -0
- package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
- package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
- package/skills-library/system-context/SKILL.md +40 -0
- package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
- package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
- package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
- package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
- package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
- package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
- package/skills-library/testing/playwright-api-security-tests.md +202 -0
- package/skills-library/toolbox/SKILL.md +84 -0
- package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
- package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
- package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
- package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
- package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
- package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
- package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
- package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
- package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
- package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
- package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/skills-library/wordpress-style-theme-components.md +1526 -0
- package/templates/ASSUMPTIONS.md +1 -1
- package/templates/DECISION_LOG.md +0 -1
- package/templates/phase-prompt.md +1 -1
- package/templates/phoenix-comparison.md +6 -6
- package/templates/skill-api-integration.md +106 -0
- package/templates/skill-architecture-pattern.md +92 -0
- package/templates/skill-debug-pattern.md +98 -0
- package/templates/skill-devops-recipe.md +107 -0
- package/templates/skill-general.md +65 -0
- package/templates/skill-ui-component.md +113 -0
- package/tools/uat-runner.py +179 -0
- package/version.json +7 -3
- package/workflows/handoff-session.md +2 -2
- package/workflows/new-project.md +2 -2
- package/workflows/plan-phase.md +1 -1
- package/.claude-plugin/plugin.json +0 -64
- package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
- package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
- package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
- package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
- package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
- package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
- package/skills-library/specialists/api-architecture/api-designer.md +0 -49
- package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
- package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
- package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
- package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
- package/skills-library/specialists/backend/django-expert.md +0 -52
- package/skills-library/specialists/backend/fastapi-expert.md +0 -52
- package/skills-library/specialists/backend/laravel-specialist.md +0 -52
- package/skills-library/specialists/backend/nestjs-expert.md +0 -51
- package/skills-library/specialists/backend/rails-expert.md +0 -53
- package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
- package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
- package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
- package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
- package/skills-library/specialists/data-ml/rag-architect.md +0 -51
- package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
- package/skills-library/specialists/frontend/angular-architect.md +0 -52
- package/skills-library/specialists/frontend/flutter-expert.md +0 -51
- package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
- package/skills-library/specialists/frontend/react-native-expert.md +0 -50
- package/skills-library/specialists/frontend/vue-expert.md +0 -51
- package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
- package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
- package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
- package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
- package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
- package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
- package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
- package/skills-library/specialists/languages/cpp-pro.md +0 -74
- package/skills-library/specialists/languages/csharp-developer.md +0 -69
- package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
- package/skills-library/specialists/languages/golang-pro.md +0 -51
- package/skills-library/specialists/languages/java-architect.md +0 -49
- package/skills-library/specialists/languages/javascript-pro.md +0 -68
- package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
- package/skills-library/specialists/languages/php-pro.md +0 -49
- package/skills-library/specialists/languages/python-pro.md +0 -52
- package/skills-library/specialists/languages/react-expert.md +0 -51
- package/skills-library/specialists/languages/rust-engineer.md +0 -50
- package/skills-library/specialists/languages/sql-pro.md +0 -56
- package/skills-library/specialists/languages/swift-expert.md +0 -69
- package/skills-library/specialists/languages/typescript-pro.md +0 -51
- package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
- package/skills-library/specialists/platform/embedded-systems.md +0 -53
- package/skills-library/specialists/platform/game-developer.md +0 -53
- package/skills-library/specialists/platform/salesforce-developer.md +0 -53
- package/skills-library/specialists/platform/shopify-expert.md +0 -49
- package/skills-library/specialists/platform/wordpress-pro.md +0 -49
- package/skills-library/specialists/quality/code-documenter.md +0 -51
- package/skills-library/specialists/quality/code-reviewer.md +0 -67
- package/skills-library/specialists/quality/debugging-wizard.md +0 -51
- package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
- package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
- package/skills-library/specialists/quality/playwright-expert.md +0 -65
- package/skills-library/specialists/quality/spec-miner.md +0 -56
- package/skills-library/specialists/quality/test-master.md +0 -65
- package/skills-library/specialists/security/secure-code-guardian.md +0 -55
- package/skills-library/specialists/security/security-reviewer.md +0 -53
- package/skills-library/specialists/workflow/architecture-designer.md +0 -53
- package/skills-library/specialists/workflow/cli-developer.md +0 -70
- package/skills-library/specialists/workflow/feature-forge.md +0 -65
- package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
- package/skills-library/specialists/workflow/the-fool.md +0 -62
- /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
- /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# VPS Deployment Skill
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This skill documents the deployment process for the my-other-project application to the VPS at schooloftheprophets.club.
|
|
5
|
+
|
|
6
|
+
## Key Discovery: Shared Hosting Architecture
|
|
7
|
+
|
|
8
|
+
**Critical:** The VPS uses shared hosting (cPanel/Apache), NOT nginx directly.
|
|
9
|
+
|
|
10
|
+
### Directory Structure
|
|
11
|
+
```
|
|
12
|
+
~/mern-app/ # Application source code
|
|
13
|
+
~/mern-app/client/dist/ # Vite build output (NOT served directly)
|
|
14
|
+
~/public_html/ # Apache web root (ACTUALLY served to users)
|
|
15
|
+
~/public_html/assets/ # Where JS/CSS bundles must be deployed
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### The Problem
|
|
19
|
+
When running `npm run build`, Vite outputs to `~/mern-app/client/dist/`. However, the web server (Apache) serves files from `~/public_html/`. If you don't copy the build output to public_html, users will continue seeing the old cached version.
|
|
20
|
+
|
|
21
|
+
## Complete Deployment Process
|
|
22
|
+
|
|
23
|
+
### 1. Pull Latest Code
|
|
24
|
+
```bash
|
|
25
|
+
ssh schoolo2@server1.tiberiusprimus.com
|
|
26
|
+
cd ~/mern-app
|
|
27
|
+
git pull origin student-beautification
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. Build the Client
|
|
31
|
+
```bash
|
|
32
|
+
cd ~/mern-app/client
|
|
33
|
+
rm -rf dist node_modules/.vite .vite # Clear all caches
|
|
34
|
+
npm run build
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 3. Deploy to Web Root (CRITICAL STEP)
|
|
38
|
+
```bash
|
|
39
|
+
cp -r ~/mern-app/client/dist/* ~/public_html/
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 4. Restart Server
|
|
43
|
+
```bash
|
|
44
|
+
pm2 restart all
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### One-Liner Command
|
|
48
|
+
```bash
|
|
49
|
+
ssh schoolo2@server1.tiberiusprimus.com "cd ~/mern-app && git pull origin student-beautification && cd client && rm -rf dist node_modules/.vite && npm run build && cp -r dist/* ~/public_html/ && pm2 restart all"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Debugging Deployment Issues
|
|
53
|
+
|
|
54
|
+
### Symptoms of Missing Deployment
|
|
55
|
+
- UI changes don't appear despite successful build
|
|
56
|
+
- "Hard refresh" doesn't help
|
|
57
|
+
- Different bundle hash in browser vs server
|
|
58
|
+
|
|
59
|
+
### Diagnostic Commands
|
|
60
|
+
|
|
61
|
+
**Check what's being served vs what's on disk:**
|
|
62
|
+
```bash
|
|
63
|
+
# On disk (build output)
|
|
64
|
+
head -c 200 ~/mern-app/client/dist/assets/index-*.js
|
|
65
|
+
|
|
66
|
+
# What Apache serves
|
|
67
|
+
curl -s https://schooloftheprophets.club/assets/index-*.js | head -c 200
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Verify bundle contains your code:**
|
|
71
|
+
```bash
|
|
72
|
+
grep "your-search-term" ~/mern-app/client/dist/assets/ComponentName-*.js
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Check index.html references correct bundles:**
|
|
76
|
+
```bash
|
|
77
|
+
cat ~/public_html/index.html | grep -o 'index-[^"]*'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Update version.json
|
|
81
|
+
After deployment, update version.json to reflect the current commit:
|
|
82
|
+
```bash
|
|
83
|
+
cd ~/mern-app
|
|
84
|
+
COMMIT=$(git rev-parse HEAD)
|
|
85
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
86
|
+
cat > version.json << EOF
|
|
87
|
+
{
|
|
88
|
+
"version": "1.0.X",
|
|
89
|
+
"commit": "$COMMIT",
|
|
90
|
+
"branch": "$BRANCH",
|
|
91
|
+
"updatedAt": "$(date -Iseconds)",
|
|
92
|
+
"environment": "production"
|
|
93
|
+
}
|
|
94
|
+
EOF
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## .htaccess Configuration
|
|
98
|
+
The `~/public_html/.htaccess` handles:
|
|
99
|
+
- API proxy to Node.js on port 5000
|
|
100
|
+
- SPA routing fallback to index.html
|
|
101
|
+
- Cache headers for HTML files
|
|
102
|
+
|
|
103
|
+
```apache
|
|
104
|
+
RewriteEngine On
|
|
105
|
+
|
|
106
|
+
# Proxy API requests to Node.js
|
|
107
|
+
RewriteCond %{REQUEST_URI} ^/api [NC,OR]
|
|
108
|
+
RewriteCond %{REQUEST_URI} ^/uploads [NC]
|
|
109
|
+
RewriteRule ^(.*)$ http://localhost:5000/$1 [P,L]
|
|
110
|
+
|
|
111
|
+
# SPA fallback
|
|
112
|
+
RewriteCond %{REQUEST_FILENAME} !-f
|
|
113
|
+
RewriteCond %{REQUEST_FILENAME} !-d
|
|
114
|
+
RewriteRule . /index.html [L]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Server Details
|
|
118
|
+
- **Host:** schoolo2@server1.tiberiusprimus.com
|
|
119
|
+
- **Application:** ~/mern-app
|
|
120
|
+
- **Web Root:** ~/public_html
|
|
121
|
+
- **Node Process:** PM2 (lms-server)
|
|
122
|
+
- **Port:** 5000 (proxied via Apache)
|
|
123
|
+
|
|
124
|
+
## Cleanup Old Bundles
|
|
125
|
+
Old bundles accumulate in public_html/assets. Periodically clean up:
|
|
126
|
+
```bash
|
|
127
|
+
# List old Updates bundles
|
|
128
|
+
ls -la ~/public_html/assets/Updates-*.js
|
|
129
|
+
|
|
130
|
+
# Remove old bundles (keep only current)
|
|
131
|
+
# Be careful - only remove bundles not referenced by current index.html
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Lesson Learned
|
|
135
|
+
**Always copy build output to public_html after building.** The build step alone is not sufficient for deployment on this shared hosting setup.
|
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
# Word Export Markdown Formatting - Professional Document Generation
|
|
2
|
+
|
|
3
|
+
## The Problem
|
|
4
|
+
|
|
5
|
+
Exported Word documents showed plain text with markdown syntax visible (like `**bold**`), repeated "undefined" text, and no professional formatting. Users expected rich formatting matching the chat interface: headings, bold, italic, lists, code blocks, and blockquotes.
|
|
6
|
+
|
|
7
|
+
### Error Message
|
|
8
|
+
|
|
9
|
+
No error thrown - silent formatting failure. Word document contained:
|
|
10
|
+
```
|
|
11
|
+
**Book 1 (Psalms 1-41): Humanity and Blessing**
|
|
12
|
+
undefined
|
|
13
|
+
undefined
|
|
14
|
+
**Book 2 (Psalms 42-72): Redemption and Deliverance**
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Why It Was Hard
|
|
18
|
+
|
|
19
|
+
- **Sequential parsing required**: Regex order matters (check `**bold**` before `*italic*`)
|
|
20
|
+
- **Heuristic detection**: Distinguish `**text**` as list items vs inline bold formatting
|
|
21
|
+
- **Multiple markdown elements**: Headings, lists, code blocks, blockquotes, inline formatting
|
|
22
|
+
- **Industry standards**: Convert markdown → Word formatting (not just display markdown)
|
|
23
|
+
- **Emoji handling**: Unicode range-based removal for professional documents
|
|
24
|
+
- **marked.js integration**: Parse markdown AST and map to docx elements
|
|
25
|
+
|
|
26
|
+
### Impact
|
|
27
|
+
|
|
28
|
+
- Users couldn't create professional sermon notes or study materials
|
|
29
|
+
- Export feature was unusable for ministry/theological work
|
|
30
|
+
- Plain text documents looked unprofessional
|
|
31
|
+
- Markdown syntax (`**`, `*`, `#`) visible in final output
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## The Solution
|
|
36
|
+
|
|
37
|
+
### Root Cause
|
|
38
|
+
|
|
39
|
+
The conversation export service was wrapping `message.content` as plain text without parsing markdown:
|
|
40
|
+
|
|
41
|
+
**Bad Code (Before):**
|
|
42
|
+
```typescript
|
|
43
|
+
new Paragraph({
|
|
44
|
+
text: message.content, // ❌ Shows markdown syntax literally
|
|
45
|
+
spacing: { after: 100 }
|
|
46
|
+
})
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### How to Fix
|
|
50
|
+
|
|
51
|
+
Use `marked` package to parse markdown AST, then map tokens to docx elements (Paragraph, TextRun, HeadingLevel):
|
|
52
|
+
|
|
53
|
+
**Good Code (After):**
|
|
54
|
+
```typescript
|
|
55
|
+
import { marked } from 'marked'
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Parse markdown content and convert to docx Paragraph elements.
|
|
59
|
+
* Converts **text** patterns used as list items into proper bullet lists.
|
|
60
|
+
*/
|
|
61
|
+
function parseMarkdownToParagraphs(
|
|
62
|
+
markdown: string,
|
|
63
|
+
isUser: boolean
|
|
64
|
+
): Paragraph[] {
|
|
65
|
+
const paragraphs: Paragraph[] = []
|
|
66
|
+
|
|
67
|
+
// Pre-process: Convert **text** list patterns to proper markdown lists
|
|
68
|
+
markdown = markdown.replace(/^\*\*(.+?)\*\*$/gm, (match, content) => {
|
|
69
|
+
const trimmed = content.trim()
|
|
70
|
+
// Heuristic: short lines with no sentence punctuation = list items
|
|
71
|
+
if (trimmed.length < 100 && (trimmed.endsWith(':') || !/[.!?]$/.test(trimmed))) {
|
|
72
|
+
return `- ${trimmed}`
|
|
73
|
+
}
|
|
74
|
+
return match // Keep as-is if it looks like actual bold text
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// Strip emojis from content
|
|
78
|
+
markdown = stripEmojis(markdown)
|
|
79
|
+
|
|
80
|
+
// Parse markdown tokens
|
|
81
|
+
const tokens = marked.lexer(markdown)
|
|
82
|
+
|
|
83
|
+
for (const token of tokens) {
|
|
84
|
+
switch (token.type) {
|
|
85
|
+
case 'heading': {
|
|
86
|
+
const headingMap: Record<number, HeadingLevel> = {
|
|
87
|
+
1: HeadingLevel.HEADING_1,
|
|
88
|
+
2: HeadingLevel.HEADING_2,
|
|
89
|
+
3: HeadingLevel.HEADING_3,
|
|
90
|
+
// ...
|
|
91
|
+
}
|
|
92
|
+
paragraphs.push(
|
|
93
|
+
new Paragraph({
|
|
94
|
+
text: token.text,
|
|
95
|
+
heading: headingMap[token.depth],
|
|
96
|
+
spacing: { before: 200, after: 100 }
|
|
97
|
+
})
|
|
98
|
+
)
|
|
99
|
+
break
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
case 'paragraph': {
|
|
103
|
+
const textRuns = parseInlineFormatting(token.text)
|
|
104
|
+
paragraphs.push(
|
|
105
|
+
new Paragraph({
|
|
106
|
+
children: textRuns,
|
|
107
|
+
spacing: { after: 100 }
|
|
108
|
+
})
|
|
109
|
+
)
|
|
110
|
+
break
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
case 'list': {
|
|
114
|
+
for (const item of token.items) {
|
|
115
|
+
paragraphs.push(
|
|
116
|
+
new Paragraph({
|
|
117
|
+
children: [new TextRun({ text: `• ${item.text}` })],
|
|
118
|
+
indent: { left: 400 }
|
|
119
|
+
})
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
break
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
case 'code': {
|
|
126
|
+
paragraphs.push(
|
|
127
|
+
new Paragraph({
|
|
128
|
+
children: [
|
|
129
|
+
new TextRun({
|
|
130
|
+
text: token.text,
|
|
131
|
+
font: 'Courier New',
|
|
132
|
+
size: 20
|
|
133
|
+
})
|
|
134
|
+
],
|
|
135
|
+
shading: { fill: '1e293b' }
|
|
136
|
+
})
|
|
137
|
+
)
|
|
138
|
+
break
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return paragraphs
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Sequential Inline Formatting
|
|
148
|
+
|
|
149
|
+
**Critical: Check `**bold**` before `*italic*` to avoid false matches:**
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
function parseInlineFormatting(text: string): TextRun[] {
|
|
153
|
+
const runs: TextRun[] = []
|
|
154
|
+
let currentPos = 0
|
|
155
|
+
|
|
156
|
+
while (currentPos < text.length) {
|
|
157
|
+
const remaining = text.slice(currentPos)
|
|
158
|
+
|
|
159
|
+
// 1. **bold** (MUST check before single *)
|
|
160
|
+
const boldMatch = remaining.match(/^\*\*(.+?)\*\*/)
|
|
161
|
+
if (boldMatch) {
|
|
162
|
+
runs.push(new TextRun({ text: boldMatch[1], bold: true }))
|
|
163
|
+
currentPos += boldMatch[0].length
|
|
164
|
+
continue
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// 2. *italic* (check after bold)
|
|
168
|
+
const italicMatch = remaining.match(/^\*(.+?)\*/)
|
|
169
|
+
if (italicMatch) {
|
|
170
|
+
runs.push(new TextRun({ text: italicMatch[1], italics: true }))
|
|
171
|
+
currentPos += italicMatch[0].length
|
|
172
|
+
continue
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// 3. `code`
|
|
176
|
+
const codeMatch = remaining.match(/^`(.+?)`/)
|
|
177
|
+
if (codeMatch) {
|
|
178
|
+
runs.push(new TextRun({
|
|
179
|
+
text: codeMatch[1],
|
|
180
|
+
font: 'Courier New',
|
|
181
|
+
shading: { fill: 'f1f5f9' }
|
|
182
|
+
}))
|
|
183
|
+
currentPos += codeMatch[0].length
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// 4. [link](url)
|
|
188
|
+
const linkMatch = remaining.match(/^\[(.+?)\]\((.+?)\)/)
|
|
189
|
+
if (linkMatch) {
|
|
190
|
+
runs.push(new TextRun({
|
|
191
|
+
text: linkMatch[1],
|
|
192
|
+
color: '2563eb',
|
|
193
|
+
underline: {}
|
|
194
|
+
}))
|
|
195
|
+
currentPos += linkMatch[0].length
|
|
196
|
+
continue
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// 5. Regular text
|
|
200
|
+
const plainMatch = remaining.match(/^[^*`\[]+/)
|
|
201
|
+
if (plainMatch) {
|
|
202
|
+
runs.push(new TextRun({ text: plainMatch[0] }))
|
|
203
|
+
currentPos += plainMatch[0].length
|
|
204
|
+
continue
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Fallback: consume one character
|
|
208
|
+
runs.push(new TextRun({ text: remaining[0] }))
|
|
209
|
+
currentPos++
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return runs
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Emoji Removal
|
|
217
|
+
|
|
218
|
+
Use Unicode ranges to strip emojis for professional documents:
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
function stripEmojis(text: string): string {
|
|
222
|
+
return text.replace(/[\u{1F600}-\u{1F64F}\u{1F300}-\u{1F5FF}\u{1F680}-\u{1F6FF}\u{1F700}-\u{1F77F}\u{1F780}-\u{1F7FF}\u{1F800}-\u{1F8FF}\u{1F900}-\u{1F9FF}\u{1FA00}-\u{1FA6F}\u{1FA70}-\u{1FAFF}\u{2600}-\u{26FF}\u{2700}-\u{27BF}]/gu, '').trim()
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Testing the Fix
|
|
229
|
+
|
|
230
|
+
### Before
|
|
231
|
+
- Plain text: `**Book 1 (Psalms 1-41): Humanity and Blessing**`
|
|
232
|
+
- Repeated "undefined"
|
|
233
|
+
- No headings, lists, or formatting
|
|
234
|
+
- Emojis visible: `📖 Book 1`
|
|
235
|
+
|
|
236
|
+
### After
|
|
237
|
+
- Rich formatting: **Book 1 (Psalms 1-41): Humanity and Blessing** (actual bold)
|
|
238
|
+
- Proper bullet lists
|
|
239
|
+
- H1-H6 headings with hierarchy
|
|
240
|
+
- Code blocks with monospace font + dark background
|
|
241
|
+
- Links: blue underlined text
|
|
242
|
+
- No emojis (professional appearance)
|
|
243
|
+
|
|
244
|
+
### Test Cases
|
|
245
|
+
|
|
246
|
+
```typescript
|
|
247
|
+
describe('Markdown to Word conversion', () => {
|
|
248
|
+
it('should convert headings', () => {
|
|
249
|
+
const markdown = '## Chapter Analysis'
|
|
250
|
+
const result = parseMarkdownToParagraphs(markdown, false)
|
|
251
|
+
expect(result[0].heading).toBe(HeadingLevel.HEADING_2)
|
|
252
|
+
})
|
|
253
|
+
|
|
254
|
+
it('should convert **text** list items to bullets', () => {
|
|
255
|
+
const markdown = '**Book 1:**\n**Book 2:**'
|
|
256
|
+
const result = parseMarkdownToParagraphs(markdown, false)
|
|
257
|
+
expect(result[0].children[0].text).toBe('• Book 1:')
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
it('should preserve inline **bold** in sentences', () => {
|
|
261
|
+
const markdown = 'This is **important** text.'
|
|
262
|
+
const runs = parseInlineFormatting(markdown)
|
|
263
|
+
expect(runs[1].bold).toBe(true)
|
|
264
|
+
expect(runs[1].text).toBe('important')
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
it('should remove emojis', () => {
|
|
268
|
+
const text = '📖 Book 1'
|
|
269
|
+
expect(stripEmojis(text)).toBe('Book 1')
|
|
270
|
+
})
|
|
271
|
+
})
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## Prevention
|
|
277
|
+
|
|
278
|
+
### 1. Always Parse Markdown for Document Exports
|
|
279
|
+
|
|
280
|
+
❌ **Don't:**
|
|
281
|
+
```typescript
|
|
282
|
+
new Paragraph({ text: rawMarkdown })
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
✅ **Do:**
|
|
286
|
+
```typescript
|
|
287
|
+
const paragraphs = parseMarkdownToParagraphs(rawMarkdown, isUser)
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 2. Check Regex Order
|
|
291
|
+
|
|
292
|
+
When parsing inline formatting, **order matters**:
|
|
293
|
+
1. `**bold**` (greedy, check first)
|
|
294
|
+
2. `*italic*` (check after bold)
|
|
295
|
+
3. `` `code` ``
|
|
296
|
+
4. `[link](url)`
|
|
297
|
+
5. Plain text (catch-all)
|
|
298
|
+
|
|
299
|
+
### 3. Use Heuristics for Ambiguous Patterns
|
|
300
|
+
|
|
301
|
+
`**text**` can mean:
|
|
302
|
+
- List item: `**Book 1:**` (short, ends with colon)
|
|
303
|
+
- Bold text: `This is **important**.` (mid-sentence)
|
|
304
|
+
|
|
305
|
+
Apply heuristics:
|
|
306
|
+
```typescript
|
|
307
|
+
if (trimmed.length < 100 && (trimmed.endsWith(':') || !/[.!?]$/.test(trimmed))) {
|
|
308
|
+
// Probably a list item
|
|
309
|
+
} else {
|
|
310
|
+
// Probably inline bold
|
|
311
|
+
}
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### 4. Test with Real-World Content
|
|
315
|
+
|
|
316
|
+
Export actual conversations, not lorem ipsum. Test with:
|
|
317
|
+
- Mixed formatting (headings + lists + bold)
|
|
318
|
+
- Edge cases (`**nested **bold** text**`)
|
|
319
|
+
- Long documents (100+ messages)
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Related Patterns
|
|
324
|
+
|
|
325
|
+
- [PDF Export Formatting](./PDF_EXPORT_FORMATTING.md)
|
|
326
|
+
- [Markdown Parsing Best Practices](../patterns-standards/MARKDOWN_PARSING.md)
|
|
327
|
+
- [Document Generation Patterns](./DOCUMENT_GENERATION_PATTERNS.md)
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Common Mistakes to Avoid
|
|
332
|
+
|
|
333
|
+
- ❌ **Wrong regex order** - Checking `*italic*` before `**bold**` causes false matches
|
|
334
|
+
- ❌ **Recursive regex** - Use sequential parsing (while loop + currentPos)
|
|
335
|
+
- ❌ **Treating all `**text**` as bold** - Some are list items (use heuristics)
|
|
336
|
+
- ❌ **Forgetting emoji removal** - Unprofessional in exported documents
|
|
337
|
+
- ❌ **Not handling code blocks** - Need monospace font + background color
|
|
338
|
+
- ❌ **Skipping marked.js** - Don't reinvent markdown parsing (use AST)
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## Dependencies
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
npm install marked docx
|
|
346
|
+
npm install --save-dev @types/marked @types/docx
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Packages:**
|
|
350
|
+
- `marked` (v11+) - Markdown parser with AST output
|
|
351
|
+
- `docx` (v8+) - Word document generation
|
|
352
|
+
- TypeScript types included
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Resources
|
|
357
|
+
|
|
358
|
+
- [marked.js Documentation](https://marked.js.org/)
|
|
359
|
+
- [docx Package API](https://docx.js.org/)
|
|
360
|
+
- [Markdown Spec (CommonMark)](https://commonmark.org/)
|
|
361
|
+
- [Word OOXML Reference](https://learn.microsoft.com/en-us/office/open-xml/word/)
|
|
362
|
+
- [Unicode Emoji Ranges](https://unicode.org/emoji/charts/full-emoji-list.html)
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Time to Implement
|
|
367
|
+
|
|
368
|
+
**2-3 hours** for complete markdown → Word conversion with:
|
|
369
|
+
- Headings (H1-H6)
|
|
370
|
+
- Inline formatting (bold, italic, code, links)
|
|
371
|
+
- Lists (bullets, ordered)
|
|
372
|
+
- Code blocks
|
|
373
|
+
- Blockquotes
|
|
374
|
+
- Emoji removal
|
|
375
|
+
- Heuristic list detection
|
|
376
|
+
|
|
377
|
+
**30 minutes** for basic implementation (headings + inline only)
|
|
378
|
+
|
|
379
|
+
## Difficulty Level
|
|
380
|
+
|
|
381
|
+
⭐⭐⭐⭐ (4/5)
|
|
382
|
+
|
|
383
|
+
**Why difficult:**
|
|
384
|
+
- Requires understanding markdown AST
|
|
385
|
+
- Regex order is critical (sequential parsing)
|
|
386
|
+
- Heuristics needed for ambiguous patterns
|
|
387
|
+
- Must map markdown → Word formatting correctly
|
|
388
|
+
- Edge cases with nested formatting
|
|
389
|
+
|
|
390
|
+
**Easier with:**
|
|
391
|
+
- Experience with marked.js
|
|
392
|
+
- Understanding of docx package API
|
|
393
|
+
- Knowledge of markdown CommonMark spec
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Files Modified (Reference)
|
|
398
|
+
|
|
399
|
+
**Backend:**
|
|
400
|
+
- `server/services/conversation-export.service.ts` (465 lines)
|
|
401
|
+
- Added `stripEmojis()` function
|
|
402
|
+
- Added `parseMarkdownToParagraphs()` function
|
|
403
|
+
- Added `parseInlineFormatting()` function
|
|
404
|
+
- Updated message rendering to use parsed paragraphs
|
|
405
|
+
|
|
406
|
+
**Dependencies:**
|
|
407
|
+
- `server/package.json` - Added `marked` and `@types/marked`
|
|
408
|
+
|
|
409
|
+
**No changes needed:**
|
|
410
|
+
- Frontend (uses existing export menu)
|
|
411
|
+
- Database (no schema changes)
|
|
412
|
+
- API routes (existing endpoints)
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
## Real-World Example
|
|
417
|
+
|
|
418
|
+
**Input Markdown (from chat message):**
|
|
419
|
+
```markdown
|
|
420
|
+
## The Five Books of Psalms
|
|
421
|
+
|
|
422
|
+
**Book 1 (Psalms 1-41): Humanity and Blessing**
|
|
423
|
+
- Theme: Individual relationship with God
|
|
424
|
+
- Key Psalm: Psalm 1 (The Two Ways)
|
|
425
|
+
|
|
426
|
+
**Book 2 (Psalms 42-72): Redemption and Deliverance**
|
|
427
|
+
- Theme: God's saving acts
|
|
428
|
+
- Key Psalm: Psalm 51 (Repentance)
|
|
429
|
+
|
|
430
|
+
Code example:
|
|
431
|
+
```javascript
|
|
432
|
+
const psalm = await Psalm.findOne({ number: 23 })
|
|
433
|
+
```
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
**Output Word Document:**
|
|
437
|
+
- Heading 2: "The Five Books of Psalms" (bold, larger font)
|
|
438
|
+
- Bullet list with proper indentation
|
|
439
|
+
- Inline bold: **Book 1 (Psalms 1-41): Humanity and Blessing**
|
|
440
|
+
- Code block: dark background, Courier New font
|
|
441
|
+
- Professional spacing and borders
|
|
442
|
+
|
|
443
|
+
---
|
|
444
|
+
|
|
445
|
+
## Performance Considerations
|
|
446
|
+
|
|
447
|
+
**Parsing Speed:**
|
|
448
|
+
- 1,000 words: ~50ms (marked.lexer + docx generation)
|
|
449
|
+
- 10,000 words: ~300ms
|
|
450
|
+
- 100,000 words: ~2,500ms
|
|
451
|
+
|
|
452
|
+
**Memory Usage:**
|
|
453
|
+
- Minimal (streaming not needed for typical conversation exports)
|
|
454
|
+
- Peak memory: ~10MB per 10,000 words
|
|
455
|
+
|
|
456
|
+
**Optimization Tips:**
|
|
457
|
+
1. Cache parsed markdown AST if generating multiple formats
|
|
458
|
+
2. Use worker threads for very large exports (>50,000 words)
|
|
459
|
+
3. Consider pagination for 100+ message conversations
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Author Notes
|
|
464
|
+
|
|
465
|
+
**Key Insight:** The hardest part was distinguishing `**text**` used as list items from actual inline bold formatting. The heuristic approach (check length + punctuation) works well in practice.
|
|
466
|
+
|
|
467
|
+
**Learning Curve:** Understanding marked.js AST structure was initially confusing. Reading the TypeScript types (`marked.Tokens`) helped clarify the structure.
|
|
468
|
+
|
|
469
|
+
**Production Use:** This pattern is battle-tested in ministry-llm project for theological conversation exports (Book of Psalms analysis, sermon notes, etc.).
|
|
470
|
+
|
|
471
|
+
**Future Enhancements:**
|
|
472
|
+
- Support for nested lists
|
|
473
|
+
- Table formatting
|
|
474
|
+
- Image embedding
|
|
475
|
+
- Custom Word styles/themes
|
|
476
|
+
|
|
477
|
+
---
|
|
478
|
+
|
|
479
|
+
**Created:** 2026-02-08
|
|
480
|
+
**Project:** ministry-llm (Phase 10-01)
|
|
481
|
+
**Category:** Document Processing
|
|
482
|
+
**Tags:** #markdown #word-export #docx #formatting #document-generation
|