claude-code-templates 1.21.6 → 1.21.8
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/components/sandbox/e2b/e2b-launcher.py +0 -1
- package/package.json +2 -2
- package/components/agents/ai-specialists/ai-ethics-advisor.md +0 -195
- package/components/agents/ai-specialists/hackathon-ai-strategist.md +0 -46
- package/components/agents/ai-specialists/llms-maintainer.md +0 -94
- package/components/agents/ai-specialists/model-evaluator.md +0 -150
- package/components/agents/ai-specialists/prompt-engineer.md +0 -112
- package/components/agents/ai-specialists/search-specialist.md +0 -59
- package/components/agents/ai-specialists/task-decomposition-expert.md +0 -97
- package/components/agents/api-graphql/graphql-architect.md +0 -208
- package/components/agents/api-graphql/graphql-performance-optimizer.md +0 -357
- package/components/agents/api-graphql/graphql-security-specialist.md +0 -519
- package/components/agents/blockchain-web3/smart-contract-auditor.md +0 -32
- package/components/agents/blockchain-web3/smart-contract-specialist.md +0 -32
- package/components/agents/blockchain-web3/web3-integration-specialist.md +0 -32
- package/components/agents/business-marketing/business-analyst.md +0 -194
- package/components/agents/business-marketing/content-marketer.md +0 -36
- package/components/agents/business-marketing/customer-support.md +0 -36
- package/components/agents/business-marketing/legal-advisor.md +0 -50
- package/components/agents/business-marketing/marketing-attribution-analyst.md +0 -352
- package/components/agents/business-marketing/payment-integration.md +0 -33
- package/components/agents/business-marketing/product-strategist.md +0 -212
- package/components/agents/business-marketing/risk-manager.md +0 -42
- package/components/agents/business-marketing/sales-automator.md +0 -36
- package/components/agents/data-ai/ai-engineer.md +0 -33
- package/components/agents/data-ai/computer-vision-engineer.md +0 -562
- package/components/agents/data-ai/data-engineer.md +0 -33
- package/components/agents/data-ai/data-scientist.md +0 -337
- package/components/agents/data-ai/ml-engineer.md +0 -33
- package/components/agents/data-ai/mlops-engineer.md +0 -58
- package/components/agents/data-ai/nlp-engineer.md +0 -680
- package/components/agents/data-ai/quant-analyst.md +0 -33
- package/components/agents/database/database-admin.md +0 -33
- package/components/agents/database/database-architect.md +0 -590
- package/components/agents/database/database-optimization.md +0 -33
- package/components/agents/database/database-optimizer.md +0 -33
- package/components/agents/database/nosql-specialist.md +0 -708
- package/components/agents/database/supabase-schema-architect.md +0 -138
- package/components/agents/deep-research-team/academic-researcher.md +0 -33
- package/components/agents/deep-research-team/agent-overview.md +0 -235
- package/components/agents/deep-research-team/competitive-intelligence-analyst.md +0 -530
- package/components/agents/deep-research-team/data-analyst.md +0 -112
- package/components/agents/deep-research-team/fact-checker.md +0 -553
- package/components/agents/deep-research-team/query-clarifier.md +0 -73
- package/components/agents/deep-research-team/report-generator.md +0 -108
- package/components/agents/deep-research-team/research-brief-generator.md +0 -108
- package/components/agents/deep-research-team/research-coordinator.md +0 -94
- package/components/agents/deep-research-team/research-orchestrator.md +0 -119
- package/components/agents/deep-research-team/research-synthesizer.md +0 -109
- package/components/agents/deep-research-team/technical-researcher.md +0 -95
- package/components/agents/development-team/backend-architect.md +0 -31
- package/components/agents/development-team/cli-ui-designer.md +0 -405
- package/components/agents/development-team/devops-engineer.md +0 -886
- package/components/agents/development-team/frontend-developer.md +0 -32
- package/components/agents/development-team/fullstack-developer.md +0 -1205
- package/components/agents/development-team/ios-developer.md +0 -36
- package/components/agents/development-team/mobile-developer.md +0 -33
- package/components/agents/development-team/ui-ux-designer.md +0 -36
- package/components/agents/development-tools/code-reviewer.md +0 -30
- package/components/agents/development-tools/command-expert.md +0 -422
- package/components/agents/development-tools/context-manager.md +0 -65
- package/components/agents/development-tools/debugger.md +0 -31
- package/components/agents/development-tools/dx-optimizer.md +0 -64
- package/components/agents/development-tools/error-detective.md +0 -33
- package/components/agents/development-tools/mcp-expert.md +0 -259
- package/components/agents/development-tools/performance-profiler.md +0 -799
- package/components/agents/development-tools/test-engineer.md +0 -936
- package/components/agents/devops-infrastructure/cloud-architect.md +0 -33
- package/components/agents/devops-infrastructure/deployment-engineer.md +0 -33
- package/components/agents/devops-infrastructure/devops-troubleshooter.md +0 -33
- package/components/agents/devops-infrastructure/monitoring-specialist.md +0 -36
- package/components/agents/devops-infrastructure/network-engineer.md +0 -33
- package/components/agents/devops-infrastructure/security-engineer.md +0 -971
- package/components/agents/devops-infrastructure/terraform-specialist.md +0 -36
- package/components/agents/devops-infrastructure/vercel-deployment-specialist.md +0 -357
- package/components/agents/documentation/api-documenter.md +0 -33
- package/components/agents/documentation/changelog-generator.md +0 -37
- package/components/agents/documentation/docusaurus-expert.md +0 -52
- package/components/agents/documentation/technical-writer.md +0 -37
- package/components/agents/expert-advisors/agent-expert.md +0 -477
- package/components/agents/expert-advisors/architect-review.md +0 -50
- package/components/agents/expert-advisors/dependency-manager.md +0 -45
- package/components/agents/expert-advisors/documentation-expert.md +0 -47
- package/components/agents/ffmpeg-clip-team/audio-mixer.md +0 -37
- package/components/agents/ffmpeg-clip-team/audio-quality-controller.md +0 -100
- package/components/agents/ffmpeg-clip-team/podcast-content-analyzer.md +0 -60
- package/components/agents/ffmpeg-clip-team/podcast-metadata-specialist.md +0 -46
- package/components/agents/ffmpeg-clip-team/podcast-transcriber.md +0 -68
- package/components/agents/ffmpeg-clip-team/social-media-clip-creator.md +0 -69
- package/components/agents/ffmpeg-clip-team/timestamp-precision-specialist.md +0 -98
- package/components/agents/ffmpeg-clip-team/video-editor.md +0 -37
- package/components/agents/game-development/3d-artist.md +0 -37
- package/components/agents/game-development/game-designer.md +0 -37
- package/components/agents/game-development/unity-game-developer.md +0 -110
- package/components/agents/game-development/unreal-engine-developer.md +0 -128
- package/components/agents/mcp-dev-team/mcp-deployment-orchestrator.md +0 -101
- package/components/agents/mcp-dev-team/mcp-integration-engineer.md +0 -37
- package/components/agents/mcp-dev-team/mcp-protocol-specialist.md +0 -37
- package/components/agents/mcp-dev-team/mcp-registry-navigator.md +0 -112
- package/components/agents/mcp-dev-team/mcp-security-auditor.md +0 -70
- package/components/agents/mcp-dev-team/mcp-server-architect.md +0 -74
- package/components/agents/mcp-dev-team/mcp-testing-engineer.md +0 -106
- package/components/agents/modernization/architecture-modernizer.md +0 -37
- package/components/agents/modernization/cloud-migration-specialist.md +0 -37
- package/components/agents/modernization/legacy-modernizer.md +0 -33
- package/components/agents/obsidian-ops-team/Scripts/daily_notes_connector.py +0 -306
- package/components/agents/obsidian-ops-team/Scripts/enhance_tag_standardizer.py +0 -343
- package/components/agents/obsidian-ops-team/Scripts/find_keyword_connections.py +0 -216
- package/components/agents/obsidian-ops-team/Scripts/fix_quoted_tags.py +0 -82
- package/components/agents/obsidian-ops-team/Scripts/implement_entity_connections.py +0 -195
- package/components/agents/obsidian-ops-team/Scripts/link_suggester.py +0 -301
- package/components/agents/obsidian-ops-team/Scripts/metadata_adder.py +0 -197
- package/components/agents/obsidian-ops-team/Scripts/moc_generator.py +0 -296
- package/components/agents/obsidian-ops-team/Scripts/parse_keyword_connections.py +0 -122
- package/components/agents/obsidian-ops-team/Scripts/tag_standardizer.py +0 -387
- package/components/agents/obsidian-ops-team/connection-agent.md +0 -67
- package/components/agents/obsidian-ops-team/content-curator.md +0 -81
- package/components/agents/obsidian-ops-team/metadata-agent.md +0 -51
- package/components/agents/obsidian-ops-team/moc-agent.md +0 -112
- package/components/agents/obsidian-ops-team/review-agent.md +0 -94
- package/components/agents/obsidian-ops-team/tag-agent.md +0 -92
- package/components/agents/obsidian-ops-team/vault-optimizer.md +0 -76
- package/components/agents/ocr-extraction-team/document-structure-analyzer.md +0 -37
- package/components/agents/ocr-extraction-team/markdown-syntax-formatter.md +0 -58
- package/components/agents/ocr-extraction-team/ocr-grammar-fixer.md +0 -36
- package/components/agents/ocr-extraction-team/ocr-preprocessing-optimizer.md +0 -37
- package/components/agents/ocr-extraction-team/ocr-quality-assurance.md +0 -62
- package/components/agents/ocr-extraction-team/text-comparison-validator.md +0 -60
- package/components/agents/ocr-extraction-team/visual-analysis-ocr.md +0 -52
- package/components/agents/performance-testing/load-testing-specialist.md +0 -37
- package/components/agents/performance-testing/performance-engineer.md +0 -33
- package/components/agents/performance-testing/react-performance-optimization.md +0 -65
- package/components/agents/performance-testing/test-automator.md +0 -33
- package/components/agents/performance-testing/web-vitals-optimizer.md +0 -37
- package/components/agents/podcast-creator-team/academic-research-synthesizer.md +0 -61
- package/components/agents/podcast-creator-team/comprehensive-researcher.md +0 -49
- package/components/agents/podcast-creator-team/episode-orchestrator.md +0 -52
- package/components/agents/podcast-creator-team/guest-outreach-coordinator.md +0 -37
- package/components/agents/podcast-creator-team/market-research-analyst.md +0 -54
- package/components/agents/podcast-creator-team/podcast-editor.md +0 -37
- package/components/agents/podcast-creator-team/podcast-trend-scout.md +0 -60
- package/components/agents/podcast-creator-team/project-supervisor-orchestrator.md +0 -48
- package/components/agents/podcast-creator-team/seo-podcast-optimizer.md +0 -58
- package/components/agents/podcast-creator-team/social-media-copywriter.md +0 -57
- package/components/agents/podcast-creator-team/twitter-ai-influencer-manager.md +0 -62
- package/components/agents/programming-languages/c-pro.md +0 -36
- package/components/agents/programming-languages/c-sharp-pro.md +0 -40
- package/components/agents/programming-languages/cpp-pro.md +0 -39
- package/components/agents/programming-languages/golang-pro.md +0 -33
- package/components/agents/programming-languages/javascript-pro.md +0 -36
- package/components/agents/programming-languages/php-pro.md +0 -44
- package/components/agents/programming-languages/python-pro.md +0 -33
- package/components/agents/programming-languages/rust-pro.md +0 -36
- package/components/agents/programming-languages/shell-scripting-pro.md +0 -38
- package/components/agents/programming-languages/sql-pro.md +0 -36
- package/components/agents/programming-languages/typescript-pro.md +0 -38
- package/components/agents/realtime/supabase-realtime-optimizer.md +0 -193
- package/components/agents/security/api-security-audit.md +0 -93
- package/components/agents/security/compliance-specialist.md +0 -37
- package/components/agents/security/incident-responder.md +0 -75
- package/components/agents/security/penetration-tester.md +0 -37
- package/components/agents/security/security-auditor.md +0 -33
- package/components/agents/web-tools/nextjs-architecture-expert.md +0 -194
- package/components/agents/web-tools/react-performance-optimizer.md +0 -425
- package/components/agents/web-tools/seo-analyzer.md +0 -37
- package/components/agents/web-tools/url-context-validator.md +0 -61
- package/components/agents/web-tools/url-link-extractor.md +0 -59
- package/components/agents/web-tools/web-accessibility-checker.md +0 -37
- package/components/commands/automation/act.md +0 -57
- package/components/commands/automation/ci-pipeline.md +0 -378
- package/components/commands/automation/husky.md +0 -130
- package/components/commands/automation/workflow-orchestrator.md +0 -576
- package/components/commands/database/supabase-backup-manager.md +0 -37
- package/components/commands/database/supabase-data-explorer.md +0 -37
- package/components/commands/database/supabase-migration-assistant.md +0 -37
- package/components/commands/database/supabase-performance-optimizer.md +0 -37
- package/components/commands/database/supabase-realtime-monitor.md +0 -37
- package/components/commands/database/supabase-schema-sync.md +0 -37
- package/components/commands/database/supabase-security-audit.md +0 -37
- package/components/commands/database/supabase-type-generator.md +0 -37
- package/components/commands/deployment/add-changelog.md +0 -92
- package/components/commands/deployment/blue-green-deployment.md +0 -824
- package/components/commands/deployment/changelog-demo-command.md +0 -43
- package/components/commands/deployment/ci-setup.md +0 -323
- package/components/commands/deployment/containerize-application.md +0 -93
- package/components/commands/deployment/deployment-monitoring.md +0 -1228
- package/components/commands/deployment/hotfix-deploy.md +0 -283
- package/components/commands/deployment/prepare-release.md +0 -357
- package/components/commands/deployment/rollback-deploy.md +0 -145
- package/components/commands/deployment/setup-automated-releases.md +0 -143
- package/components/commands/deployment/setup-kubernetes-deployment.md +0 -93
- package/components/commands/documentation/create-architecture-documentation.md +0 -95
- package/components/commands/documentation/create-onboarding-guide.md +0 -93
- package/components/commands/documentation/doc-api.md +0 -242
- package/components/commands/documentation/docs-maintenance.md +0 -119
- package/components/commands/documentation/generate-api-documentation.md +0 -97
- package/components/commands/documentation/interactive-documentation.md +0 -133
- package/components/commands/documentation/load-llms-txt.md +0 -39
- package/components/commands/documentation/migration-guide.md +0 -250
- package/components/commands/documentation/troubleshooting-guide.md +0 -370
- package/components/commands/documentation/update-docs.md +0 -107
- package/components/commands/game-development/game-analytics-integration.md +0 -128
- package/components/commands/game-development/game-asset-pipeline.md +0 -108
- package/components/commands/game-development/game-performance-profiler.md +0 -78
- package/components/commands/game-development/game-testing-framework.md +0 -112
- package/components/commands/game-development/unity-project-setup.md +0 -190
- package/components/commands/git-workflow/branch-cleanup.md +0 -181
- package/components/commands/git-workflow/commit.md +0 -167
- package/components/commands/git-workflow/create-pr.md +0 -19
- package/components/commands/git-workflow/create-pull-request.md +0 -126
- package/components/commands/git-workflow/create-worktrees.md +0 -174
- package/components/commands/git-workflow/fix-github-issue.md +0 -13
- package/components/commands/git-workflow/git-bisect-helper.md +0 -261
- package/components/commands/git-workflow/pr-review.md +0 -76
- package/components/commands/git-workflow/update-branch-name.md +0 -9
- package/components/commands/nextjs-vercel/nextjs-api-tester.md +0 -480
- package/components/commands/nextjs-vercel/nextjs-bundle-analyzer.md +0 -406
- package/components/commands/nextjs-vercel/nextjs-component-generator.md +0 -489
- package/components/commands/nextjs-vercel/nextjs-middleware-creator.md +0 -712
- package/components/commands/nextjs-vercel/nextjs-migration-helper.md +0 -778
- package/components/commands/nextjs-vercel/nextjs-performance-audit.md +0 -653
- package/components/commands/nextjs-vercel/nextjs-scaffold.md +0 -237
- package/components/commands/nextjs-vercel/vercel-deploy-optimize.md +0 -341
- package/components/commands/nextjs-vercel/vercel-edge-function.md +0 -810
- package/components/commands/nextjs-vercel/vercel-env-sync.md +0 -666
- package/components/commands/orchestration/archive.md +0 -414
- package/components/commands/orchestration/commit.md +0 -305
- package/components/commands/orchestration/find.md +0 -272
- package/components/commands/orchestration/log.md +0 -355
- package/components/commands/orchestration/move.md +0 -220
- package/components/commands/orchestration/optimize.md +0 -375
- package/components/commands/orchestration/remove.md +0 -301
- package/components/commands/orchestration/report.md +0 -292
- package/components/commands/orchestration/resume.md +0 -256
- package/components/commands/orchestration/start.md +0 -169
- package/components/commands/orchestration/status.md +0 -219
- package/components/commands/orchestration/sync.md +0 -294
- package/components/commands/performance/add-performance-monitoring.md +0 -84
- package/components/commands/performance/implement-caching-strategy.md +0 -84
- package/components/commands/performance/optimize-api-performance.md +0 -119
- package/components/commands/performance/optimize-build.md +0 -139
- package/components/commands/performance/optimize-bundle-size.md +0 -84
- package/components/commands/performance/optimize-database-performance.md +0 -84
- package/components/commands/performance/optimize-memory-usage.md +0 -91
- package/components/commands/performance/performance-audit.md +0 -89
- package/components/commands/performance/setup-cdn-optimization.md +0 -84
- package/components/commands/performance/system-behavior-simulator.md +0 -415
- package/components/commands/project-management/add-package.md +0 -90
- package/components/commands/project-management/add-to-changelog.md +0 -37
- package/components/commands/project-management/create-feature.md +0 -130
- package/components/commands/project-management/create-jtbd.md +0 -37
- package/components/commands/project-management/create-prd.md +0 -36
- package/components/commands/project-management/create-prp.md +0 -37
- package/components/commands/project-management/init-project.md +0 -80
- package/components/commands/project-management/milestone-tracker.md +0 -44
- package/components/commands/project-management/pac-configure.md +0 -32
- package/components/commands/project-management/pac-create-epic.md +0 -41
- package/components/commands/project-management/pac-create-ticket.md +0 -42
- package/components/commands/project-management/pac-update-status.md +0 -39
- package/components/commands/project-management/pac-validate.md +0 -35
- package/components/commands/project-management/project-health-check.md +0 -58
- package/components/commands/project-management/project-timeline-simulator.md +0 -37
- package/components/commands/project-management/project-to-linear.md +0 -38
- package/components/commands/project-management/release.md +0 -31
- package/components/commands/project-management/todo.md +0 -62
- package/components/commands/security/add-authentication-system.md +0 -34
- package/components/commands/security/dependency-audit.md +0 -32
- package/components/commands/security/penetration-test.md +0 -40
- package/components/commands/security/secrets-scanner.md +0 -39
- package/components/commands/security/security-audit.md +0 -82
- package/components/commands/security/security-hardening.md +0 -33
- package/components/commands/setup/create-database-migrations.md +0 -35
- package/components/commands/setup/design-database-schema.md +0 -37
- package/components/commands/setup/design-rest-api.md +0 -37
- package/components/commands/setup/implement-graphql-api.md +0 -37
- package/components/commands/setup/migrate-to-typescript.md +0 -37
- package/components/commands/setup/setup-ci-cd-pipeline.md +0 -37
- package/components/commands/setup/setup-development-environment.md +0 -37
- package/components/commands/setup/setup-docker-containers.md +0 -37
- package/components/commands/setup/setup-formatting.md +0 -37
- package/components/commands/setup/setup-linting.md +0 -37
- package/components/commands/setup/setup-monitoring-observability.md +0 -37
- package/components/commands/setup/setup-monorepo.md +0 -37
- package/components/commands/setup/setup-rate-limiting.md +0 -37
- package/components/commands/setup/update-dependencies.md +0 -35
- package/components/commands/simulation/business-scenario-explorer.md +0 -37
- package/components/commands/simulation/constraint-modeler.md +0 -37
- package/components/commands/simulation/decision-tree-explorer.md +0 -37
- package/components/commands/simulation/digital-twin-creator.md +0 -37
- package/components/commands/simulation/future-scenario-generator.md +0 -37
- package/components/commands/simulation/market-response-modeler.md +0 -37
- package/components/commands/simulation/monte-carlo-simulator.md +0 -37
- package/components/commands/simulation/simulation-calibrator.md +0 -37
- package/components/commands/simulation/system-dynamics-modeler.md +0 -37
- package/components/commands/simulation/timeline-compressor.md +0 -37
- package/components/commands/svelte/svelte:a11y.md +0 -105
- package/components/commands/svelte/svelte:component.md +0 -81
- package/components/commands/svelte/svelte:debug.md +0 -48
- package/components/commands/svelte/svelte:migrate.md +0 -79
- package/components/commands/svelte/svelte:optimize.md +0 -99
- package/components/commands/svelte/svelte:scaffold.md +0 -89
- package/components/commands/svelte/svelte:storybook-migrate.md +0 -204
- package/components/commands/svelte/svelte:storybook-mock.md +0 -213
- package/components/commands/svelte/svelte:storybook-setup.md +0 -113
- package/components/commands/svelte/svelte:storybook-story.md +0 -145
- package/components/commands/svelte/svelte:storybook-troubleshoot.md +0 -191
- package/components/commands/svelte/svelte:storybook.md +0 -48
- package/components/commands/svelte/svelte:test-coverage.md +0 -77
- package/components/commands/svelte/svelte:test-fix.md +0 -74
- package/components/commands/svelte/svelte:test-setup.md +0 -85
- package/components/commands/svelte/svelte:test.md +0 -60
- package/components/commands/sync/bidirectional-sync.md +0 -37
- package/components/commands/sync/bulk-import-issues.md +0 -37
- package/components/commands/sync/cross-reference-manager.md +0 -37
- package/components/commands/sync/issue-to-linear-task.md +0 -37
- package/components/commands/sync/linear-task-to-issue.md +0 -37
- package/components/commands/sync/sync-automation-setup.md +0 -37
- package/components/commands/sync/sync-conflict-resolver.md +0 -37
- package/components/commands/sync/sync-health-monitor.md +0 -37
- package/components/commands/sync/sync-issues-to-linear.md +0 -37
- package/components/commands/sync/sync-linear-to-issues.md +0 -37
- package/components/commands/sync/sync-migration-assistant.md +0 -37
- package/components/commands/sync/sync-pr-to-task.md +0 -37
- package/components/commands/sync/sync-status.md +0 -391
- package/components/commands/sync/task-from-pr.md +0 -37
- package/components/commands/team/architecture-review.md +0 -37
- package/components/commands/team/decision-quality-analyzer.md +0 -37
- package/components/commands/team/dependency-mapper.md +0 -37
- package/components/commands/team/estimate-assistant.md +0 -37
- package/components/commands/team/issue-triage.md +0 -37
- package/components/commands/team/memory-spring-cleaning.md +0 -37
- package/components/commands/team/migration-assistant.md +0 -37
- package/components/commands/team/retrospective-analyzer.md +0 -37
- package/components/commands/team/session-learning-capture.md +0 -37
- package/components/commands/team/sprint-planning.md +0 -189
- package/components/commands/team/standup-report.md +0 -37
- package/components/commands/team/team-knowledge-mapper.md +0 -37
- package/components/commands/team/team-velocity-tracker.md +0 -37
- package/components/commands/team/team-workload-balancer.md +0 -37
- package/components/commands/testing/add-mutation-testing.md +0 -37
- package/components/commands/testing/add-property-based-testing.md +0 -37
- package/components/commands/testing/e2e-setup.md +0 -37
- package/components/commands/testing/generate-test-cases.md +0 -37
- package/components/commands/testing/generate-tests.md +0 -82
- package/components/commands/testing/setup-comprehensive-testing.md +0 -37
- package/components/commands/testing/setup-load-testing.md +0 -37
- package/components/commands/testing/setup-visual-testing.md +0 -37
- package/components/commands/testing/test-automation-orchestrator.md +0 -37
- package/components/commands/testing/test-changelog-automation.md +0 -37
- package/components/commands/testing/test-coverage.md +0 -37
- package/components/commands/testing/test-quality-analyzer.md +0 -37
- package/components/commands/testing/testing_plan_integration.md +0 -37
- package/components/commands/testing/write-tests.md +0 -37
- package/components/commands/utilities/all-tools.md +0 -31
- package/components/commands/utilities/architecture-scenario-explorer.md +0 -375
- package/components/commands/utilities/check-file.md +0 -53
- package/components/commands/utilities/clean-branches.md +0 -243
- package/components/commands/utilities/clean.md +0 -1
- package/components/commands/utilities/code-permutation-tester.md +0 -341
- package/components/commands/utilities/code-review.md +0 -70
- package/components/commands/utilities/code-to-task.md +0 -583
- package/components/commands/utilities/context-prime.md +0 -1
- package/components/commands/utilities/debug-error.md +0 -121
- package/components/commands/utilities/directory-deep-dive.md +0 -34
- package/components/commands/utilities/explain-code.md +0 -194
- package/components/commands/utilities/fix-issue.md +0 -85
- package/components/commands/utilities/generate-linear-worklog.md +0 -113
- package/components/commands/utilities/git-status.md +0 -39
- package/components/commands/utilities/initref.md +0 -3
- package/components/commands/utilities/prime.md +0 -41
- package/components/commands/utilities/refactor-code.md +0 -116
- package/components/commands/utilities/ultra-think.md +0 -153
- package/components/hooks/HOOK_PATTERNS_COMPRESSED.json +0 -1
- package/components/hooks/automation/build-on-change.json +0 -16
- package/components/hooks/automation/dependency-checker.json +0 -16
- package/components/hooks/automation/deployment-health-monitor.json +0 -29
- package/components/hooks/automation/discord-detailed-notifications.json +0 -26
- package/components/hooks/automation/discord-error-notifications.json +0 -37
- package/components/hooks/automation/discord-notifications.json +0 -25
- package/components/hooks/automation/simple-notifications.json +0 -16
- package/components/hooks/automation/slack-detailed-notifications.json +0 -26
- package/components/hooks/automation/slack-error-notifications.json +0 -37
- package/components/hooks/automation/slack-notifications.json +0 -25
- package/components/hooks/automation/telegram-detailed-notifications.json +0 -26
- package/components/hooks/automation/telegram-error-notifications.json +0 -37
- package/components/hooks/automation/telegram-notifications.json +0 -25
- package/components/hooks/automation/vercel-auto-deploy.json +0 -17
- package/components/hooks/automation/vercel-environment-sync.json +0 -29
- package/components/hooks/development-tools/change-tracker.json +0 -25
- package/components/hooks/development-tools/command-logger.json +0 -16
- package/components/hooks/development-tools/file-backup.json +0 -16
- package/components/hooks/development-tools/lint-on-save.json +0 -16
- package/components/hooks/development-tools/nextjs-code-quality-enforcer.json +0 -17
- package/components/hooks/development-tools/smart-formatting.json +0 -16
- package/components/hooks/git-workflow/auto-git-add.json +0 -16
- package/components/hooks/git-workflow/smart-commit.json +0 -25
- package/components/hooks/performance/performance-budget-guard.json +0 -27
- package/components/hooks/performance/performance-monitor.json +0 -27
- package/components/hooks/post-tool/format-javascript-files.json +0 -16
- package/components/hooks/post-tool/format-python-files.json +0 -16
- package/components/hooks/post-tool/git-add-changes.json +0 -25
- package/components/hooks/post-tool/run-tests-after-changes.json +0 -16
- package/components/hooks/pre-tool/backup-before-edit.json +0 -16
- package/components/hooks/pre-tool/notify-before-bash.json +0 -16
- package/components/hooks/security/file-protection.json +0 -16
- package/components/hooks/security/security-scanner.json +0 -16
- package/components/hooks/testing/test-runner.json +0 -16
- package/components/mcps/browser_automation/browser-use-mcp-server.json +0 -20
- package/components/mcps/browser_automation/browsermcp.json +0 -9
- package/components/mcps/browser_automation/mcp-server-browserbase.json +0 -14
- package/components/mcps/browser_automation/mcp-server-playwright.json +0 -9
- package/components/mcps/browser_automation/playwright-mcp-server.json +0 -9
- package/components/mcps/browser_automation/playwright-mcp.json +0 -11
- package/components/mcps/database/mysql-integration.json +0 -12
- package/components/mcps/database/postgresql-integration.json +0 -12
- package/components/mcps/database/supabase.json +0 -17
- package/components/mcps/deepgraph/deepgraph-nextjs.json +0 -13
- package/components/mcps/deepgraph/deepgraph-react.json +0 -13
- package/components/mcps/deepgraph/deepgraph-typescript.json +0 -13
- package/components/mcps/deepgraph/deepgraph-vue.json +0 -13
- package/components/mcps/devtools/circleci.json +0 -13
- package/components/mcps/devtools/context7.json +0 -9
- package/components/mcps/devtools/firefly-mcp.json +0 -13
- package/components/mcps/devtools/ios-simulator-mcp.json +0 -9
- package/components/mcps/devtools/just-mcp.json +0 -9
- package/components/mcps/devtools/leetcode.json +0 -8
- package/components/mcps/devtools/mcp-server-atlassian-bitbucket.json +0 -9
- package/components/mcps/devtools/mcp-server-trello.json +0 -12
- package/components/mcps/filesystem/filesystem-access.json +0 -13
- package/components/mcps/integration/github-integration.json +0 -12
- package/components/mcps/integration/memory-integration.json +0 -9
- package/components/mcps/marketing/facebook-ads-mcp-server.json +0 -13
- package/components/mcps/marketing/google-ads-mcp-server.json +0 -11
- package/components/mcps/web/web-fetch.json +0 -9
- package/components/settings/api/bedrock-configuration.json +0 -7
- package/components/settings/api/corporate-proxy.json +0 -7
- package/components/settings/api/custom-headers.json +0 -6
- package/components/settings/api/vertex-configuration.json +0 -8
- package/components/settings/authentication/api-key-helper.json +0 -7
- package/components/settings/authentication/force-claudeai-login.json +0 -4
- package/components/settings/authentication/force-console-login.json +0 -4
- package/components/settings/cleanup/retention-7-days.json +0 -4
- package/components/settings/cleanup/retention-90-days.json +0 -4
- package/components/settings/environment/bash-timeouts.json +0 -8
- package/components/settings/environment/development-utils.json +0 -8
- package/components/settings/environment/performance-optimization.json +0 -8
- package/components/settings/environment/privacy-focused.json +0 -10
- package/components/settings/global/aws-credentials.json +0 -5
- package/components/settings/global/custom-model.json +0 -7
- package/components/settings/global/git-commit-settings.json +0 -4
- package/components/settings/mcp/disable-risky-servers.json +0 -8
- package/components/settings/mcp/enable-all-project-servers.json +0 -4
- package/components/settings/mcp/enable-specific-servers.json +0 -8
- package/components/settings/mcp/mcp-timeouts.json +0 -8
- package/components/settings/model/use-haiku.json +0 -4
- package/components/settings/model/use-sonnet.json +0 -4
- package/components/settings/permissions/additional-directories.json +0 -11
- package/components/settings/permissions/allow-git-operations.json +0 -14
- package/components/settings/permissions/allow-npm-commands.json +0 -11
- package/components/settings/permissions/deny-sensitive-files.json +0 -11
- package/components/settings/permissions/development-mode.json +0 -31
- package/components/settings/permissions/read-only-mode.json +0 -18
- package/components/settings/statusline/asset-pipeline-controller-statusline.json +0 -7
- package/components/settings/statusline/bug-circus-statusline.json +0 -7
- package/components/settings/statusline/code-casino-statusline.json +0 -7
- package/components/settings/statusline/code-spaceship-statusline.json +0 -7
- package/components/settings/statusline/colorful-statusline.json +0 -7
- package/components/settings/statusline/command-statusline.json +0 -8
- package/components/settings/statusline/context-monitor.json +0 -7
- package/components/settings/statusline/context-monitor.py +0 -236
- package/components/settings/statusline/data-ocean-statusline.json +0 -7
- package/components/settings/statusline/emotion-theater-statusline.json +0 -7
- package/components/settings/statusline/game-performance-monitor-statusline.json +0 -7
- package/components/settings/statusline/git-branch-statusline.json +0 -7
- package/components/settings/statusline/minimal-statusline.json +0 -7
- package/components/settings/statusline/multiplatform-build-status-statusline.json +0 -7
- package/components/settings/statusline/productivity-rainbow-statusline.json +0 -7
- package/components/settings/statusline/programmer-tamagotchi-statusline.json +0 -7
- package/components/settings/statusline/programming-fitness-tracker-statusline.json +0 -7
- package/components/settings/statusline/project-info-statusline.json +0 -7
- package/components/settings/statusline/rpg-status-bar-statusline.json +0 -7
- package/components/settings/statusline/time-statusline.json +0 -7
- package/components/settings/statusline/unity-project-dashboard-statusline.json +0 -7
- package/components/settings/statusline/vercel-deployment-monitor.json +0 -7
- package/components/settings/statusline/vercel-error-alert-system.json +0 -7
- package/components/settings/statusline/vercel-multi-env-status.json +0 -7
- package/components/settings/statusline/virtual-code-garden-statusline.json +0 -7
- package/components/settings/statusline/zero-config-deployment-monitor.json +0 -7
- package/components/settings/telemetry/custom-telemetry.json +0 -7
- package/components/settings/telemetry/disable-telemetry.json +0 -6
- package/components/settings/telemetry/enable-telemetry.json +0 -6
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""Implement entity-based connections from Link Suggestions Report."""
|
|
3
|
-
|
|
4
|
-
import re
|
|
5
|
-
import os
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
|
|
8
|
-
# Priority entities to focus on
|
|
9
|
-
PRIORITY_ENTITIES = {
|
|
10
|
-
'langchain', 'langgraph', 'llm', 'rag', 'embedding', 'vector',
|
|
11
|
-
'mcp', 'model context protocol', 'api integration', 'function calling',
|
|
12
|
-
'anthropic', 'openai', 'google', 'claude', 'gpt',
|
|
13
|
-
'autonomous agent', 'ai agent', 'chain of thought', 'prompt engineering',
|
|
14
|
-
'retrieval augmented', 'graphrag', 'multimodal', 'tool use'
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
def read_file(file_path):
|
|
18
|
-
"""Read file content."""
|
|
19
|
-
try:
|
|
20
|
-
with open(file_path, 'r', encoding='utf-8') as f:
|
|
21
|
-
return f.read()
|
|
22
|
-
except:
|
|
23
|
-
return None
|
|
24
|
-
|
|
25
|
-
def write_file(file_path, content):
|
|
26
|
-
"""Write content to file."""
|
|
27
|
-
try:
|
|
28
|
-
with open(file_path, 'w', encoding='utf-8') as f:
|
|
29
|
-
f.write(content)
|
|
30
|
-
return True
|
|
31
|
-
except:
|
|
32
|
-
return False
|
|
33
|
-
|
|
34
|
-
def find_file(filename, search_dirs):
|
|
35
|
-
"""Find a file in the vault."""
|
|
36
|
-
for dir_path in search_dirs:
|
|
37
|
-
for root, dirs, files in os.walk(dir_path):
|
|
38
|
-
for file in files:
|
|
39
|
-
if file == filename or file == filename + '.md':
|
|
40
|
-
return os.path.join(root, file)
|
|
41
|
-
return None
|
|
42
|
-
|
|
43
|
-
def add_link_to_file(file_path, link_to_add, link_text=None):
|
|
44
|
-
"""Add a link to a file if it doesn't already exist."""
|
|
45
|
-
content = read_file(file_path)
|
|
46
|
-
if not content:
|
|
47
|
-
return False
|
|
48
|
-
|
|
49
|
-
# Check if link already exists
|
|
50
|
-
if f'[[{link_to_add}]]' in content:
|
|
51
|
-
return False
|
|
52
|
-
|
|
53
|
-
# Find a good place to add the link
|
|
54
|
-
# Look for existing "Related:" or "See also:" sections
|
|
55
|
-
related_patterns = [
|
|
56
|
-
r'^#+\s*Related.*?$',
|
|
57
|
-
r'^#+\s*See also.*?$',
|
|
58
|
-
r'^#+\s*Links.*?$',
|
|
59
|
-
r'^#+\s*References.*?$'
|
|
60
|
-
]
|
|
61
|
-
|
|
62
|
-
insert_pos = None
|
|
63
|
-
for pattern in related_patterns:
|
|
64
|
-
match = re.search(pattern, content, re.MULTILINE | re.IGNORECASE)
|
|
65
|
-
if match:
|
|
66
|
-
# Find the end of this section
|
|
67
|
-
insert_pos = match.end()
|
|
68
|
-
# Skip to next line
|
|
69
|
-
next_line = content.find('\n', insert_pos)
|
|
70
|
-
if next_line != -1:
|
|
71
|
-
insert_pos = next_line + 1
|
|
72
|
-
break
|
|
73
|
-
|
|
74
|
-
# If no related section found, add at the end of frontmatter
|
|
75
|
-
if insert_pos is None:
|
|
76
|
-
# Find end of frontmatter
|
|
77
|
-
frontmatter_end = content.find('---', 3)
|
|
78
|
-
if frontmatter_end != -1:
|
|
79
|
-
insert_pos = content.find('\n', frontmatter_end + 3) + 1
|
|
80
|
-
else:
|
|
81
|
-
# No frontmatter, add at beginning
|
|
82
|
-
insert_pos = 0
|
|
83
|
-
|
|
84
|
-
# Create the link line
|
|
85
|
-
if link_text:
|
|
86
|
-
link_line = f"- [[{link_to_add}]] - {link_text}\n"
|
|
87
|
-
else:
|
|
88
|
-
link_line = f"- [[{link_to_add}]]\n"
|
|
89
|
-
|
|
90
|
-
# If we're not in a list section, create one
|
|
91
|
-
if insert_pos is None or (insert_pos > 0 and content[insert_pos-2:insert_pos] != '\n\n'):
|
|
92
|
-
# Check if we need to add a Related section
|
|
93
|
-
needs_section = True
|
|
94
|
-
for pattern in related_patterns:
|
|
95
|
-
if re.search(pattern, content, re.MULTILINE | re.IGNORECASE):
|
|
96
|
-
needs_section = False
|
|
97
|
-
break
|
|
98
|
-
|
|
99
|
-
if needs_section:
|
|
100
|
-
# Add at end of file with new Related section
|
|
101
|
-
if not content.endswith('\n'):
|
|
102
|
-
content += '\n'
|
|
103
|
-
content += '\n## Related\n'
|
|
104
|
-
content += link_line
|
|
105
|
-
else:
|
|
106
|
-
# Insert in existing section
|
|
107
|
-
new_content = content[:insert_pos] + link_line + content[insert_pos:]
|
|
108
|
-
content = new_content
|
|
109
|
-
else:
|
|
110
|
-
# Insert at found position
|
|
111
|
-
new_content = content[:insert_pos] + link_line + content[insert_pos:]
|
|
112
|
-
content = new_content
|
|
113
|
-
|
|
114
|
-
return write_file(file_path, content)
|
|
115
|
-
|
|
116
|
-
def implement_connections():
|
|
117
|
-
"""Implement priority entity connections."""
|
|
118
|
-
vault_root = Path("/Users/cam/VAULT01")
|
|
119
|
-
search_dirs = [
|
|
120
|
-
vault_root / "AI Development",
|
|
121
|
-
vault_root / "AI Articles and Research",
|
|
122
|
-
vault_root / "AI IDEAS",
|
|
123
|
-
vault_root / "AI Courses",
|
|
124
|
-
vault_root / "CamRohn LLC",
|
|
125
|
-
vault_root / "Clippings"
|
|
126
|
-
]
|
|
127
|
-
|
|
128
|
-
# Read the report
|
|
129
|
-
report_path = vault_root / "System_Files" / "Link_Suggestions_Report.md"
|
|
130
|
-
report_content = read_file(report_path)
|
|
131
|
-
|
|
132
|
-
if not report_content:
|
|
133
|
-
print("Could not read report")
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
# Parse entity connections
|
|
137
|
-
connections_made = 0
|
|
138
|
-
connections_by_entity = {}
|
|
139
|
-
|
|
140
|
-
# Find entity sections
|
|
141
|
-
entity_pattern = r'^### (.+)$'
|
|
142
|
-
connection_pattern = r'- \[\[([^\]]+)\]\] ↔ \[\[([^\]]+)\]\]'
|
|
143
|
-
|
|
144
|
-
current_entity = None
|
|
145
|
-
for line in report_content.split('\n'):
|
|
146
|
-
# Check for entity header
|
|
147
|
-
entity_match = re.match(entity_pattern, line)
|
|
148
|
-
if entity_match:
|
|
149
|
-
current_entity = entity_match.group(1).strip().lower()
|
|
150
|
-
continue
|
|
151
|
-
|
|
152
|
-
# Check for connection
|
|
153
|
-
if current_entity and current_entity in [e.lower() for e in PRIORITY_ENTITIES]:
|
|
154
|
-
conn_match = re.match(connection_pattern, line)
|
|
155
|
-
if conn_match:
|
|
156
|
-
file1 = conn_match.group(1).strip()
|
|
157
|
-
file2 = conn_match.group(2).strip()
|
|
158
|
-
|
|
159
|
-
# Skip self-connections
|
|
160
|
-
if file1 == file2:
|
|
161
|
-
continue
|
|
162
|
-
|
|
163
|
-
# Find actual file paths
|
|
164
|
-
file1_path = find_file(file1 + '.md', search_dirs)
|
|
165
|
-
file2_path = find_file(file2 + '.md', search_dirs)
|
|
166
|
-
|
|
167
|
-
if file1_path and file2_path:
|
|
168
|
-
# Add bidirectional links
|
|
169
|
-
if add_link_to_file(file1_path, file2, f"Related to {current_entity}"):
|
|
170
|
-
connections_made += 1
|
|
171
|
-
if current_entity not in connections_by_entity:
|
|
172
|
-
connections_by_entity[current_entity] = 0
|
|
173
|
-
connections_by_entity[current_entity] += 1
|
|
174
|
-
print(f"Added link from {file1} to {file2}")
|
|
175
|
-
|
|
176
|
-
if add_link_to_file(file2_path, file1, f"Related to {current_entity}"):
|
|
177
|
-
connections_made += 1
|
|
178
|
-
if current_entity not in connections_by_entity:
|
|
179
|
-
connections_by_entity[current_entity] = 0
|
|
180
|
-
connections_by_entity[current_entity] += 1
|
|
181
|
-
print(f"Added link from {file2} to {file1}")
|
|
182
|
-
|
|
183
|
-
# Generate report
|
|
184
|
-
print("\n=== Connection Implementation Report ===")
|
|
185
|
-
print(f"Total connections made: {connections_made}")
|
|
186
|
-
print("\nConnections by entity:")
|
|
187
|
-
for entity, count in sorted(connections_by_entity.items(), key=lambda x: x[1], reverse=True):
|
|
188
|
-
print(f" {entity}: {count} connections")
|
|
189
|
-
|
|
190
|
-
# Find cross-domain connections
|
|
191
|
-
print("\nCross-domain connections created:")
|
|
192
|
-
# This would require more complex analysis of file paths
|
|
193
|
-
|
|
194
|
-
if __name__ == "__main__":
|
|
195
|
-
implement_connections()
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Link Suggester for Obsidian Vault
|
|
4
|
-
Identifies potential connections between notes based on content analysis.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import os
|
|
8
|
-
import re
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from collections import defaultdict, Counter
|
|
11
|
-
import argparse
|
|
12
|
-
import json
|
|
13
|
-
|
|
14
|
-
class LinkSuggester:
|
|
15
|
-
def __init__(self, vault_path):
|
|
16
|
-
self.vault_path = Path(vault_path)
|
|
17
|
-
self.notes = {}
|
|
18
|
-
self.entity_mentions = defaultdict(set)
|
|
19
|
-
self.potential_links = []
|
|
20
|
-
|
|
21
|
-
# Common entities to look for
|
|
22
|
-
self.entities = {
|
|
23
|
-
'technologies': [
|
|
24
|
-
'langchain', 'langgraph', 'mcp', 'model context protocol',
|
|
25
|
-
'graphrag', 'openai', 'anthropic', 'claude', 'gpt', 'llm',
|
|
26
|
-
'ollama', 'huggingface', 'github', 'python', 'javascript',
|
|
27
|
-
'cloudflare', 'supabase', 'vector database', 'embedding',
|
|
28
|
-
'ai agent', 'autonomous agent', 'rag', 'retrieval augmented'
|
|
29
|
-
],
|
|
30
|
-
'concepts': [
|
|
31
|
-
'machine learning', 'deep learning', 'neural network',
|
|
32
|
-
'transformer', 'attention mechanism', 'fine-tuning',
|
|
33
|
-
'prompt engineering', 'chain of thought', 'reasoning',
|
|
34
|
-
'multimodal', 'text generation', 'code generation',
|
|
35
|
-
'tool use', 'function calling', 'api integration'
|
|
36
|
-
],
|
|
37
|
-
'companies': [
|
|
38
|
-
'google', 'microsoft', 'amazon', 'meta', 'apple',
|
|
39
|
-
'nvidia', 'intel', 'amd', 'tesla', 'stripe',
|
|
40
|
-
'y combinator', 'techstars', 'propel', 'dental'
|
|
41
|
-
],
|
|
42
|
-
'people': [
|
|
43
|
-
'andrew ng', 'geoffrey hinton', 'yann lecun', 'ilya sutskever',
|
|
44
|
-
'sam altman', 'dario amodei', 'demis hassabis', 'jensen huang'
|
|
45
|
-
]
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
# Flatten entities for easier searching
|
|
49
|
-
self.all_entities = []
|
|
50
|
-
for category, entities in self.entities.items():
|
|
51
|
-
self.all_entities.extend(entities)
|
|
52
|
-
|
|
53
|
-
def load_notes(self):
|
|
54
|
-
"""Load all markdown files and their content."""
|
|
55
|
-
skip_dirs = {'.obsidian', '.trash', 'System_Files', '.git'}
|
|
56
|
-
|
|
57
|
-
for file_path in self.vault_path.rglob('*.md'):
|
|
58
|
-
if any(skip_dir in file_path.parts for skip_dir in skip_dirs):
|
|
59
|
-
continue
|
|
60
|
-
|
|
61
|
-
try:
|
|
62
|
-
with open(file_path, 'r', encoding='utf-8') as f:
|
|
63
|
-
content = f.read()
|
|
64
|
-
|
|
65
|
-
# Extract title
|
|
66
|
-
title_match = re.search(r'^#\s+(.+)$', content, re.MULTILINE)
|
|
67
|
-
title = title_match.group(1) if title_match else file_path.stem
|
|
68
|
-
|
|
69
|
-
# Extract existing links
|
|
70
|
-
existing_links = set(re.findall(r'\[\[([^\]]+)\]\]', content))
|
|
71
|
-
|
|
72
|
-
self.notes[file_path] = {
|
|
73
|
-
'title': title,
|
|
74
|
-
'content': content.lower(),
|
|
75
|
-
'existing_links': existing_links,
|
|
76
|
-
'word_count': len(content.split())
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
except Exception as e:
|
|
80
|
-
print(f"Error reading {file_path}: {e}")
|
|
81
|
-
|
|
82
|
-
def find_entity_mentions(self):
|
|
83
|
-
"""Find mentions of entities across all notes."""
|
|
84
|
-
for file_path, note_data in self.notes.items():
|
|
85
|
-
content = note_data['content']
|
|
86
|
-
|
|
87
|
-
for entity in self.all_entities:
|
|
88
|
-
if entity in content:
|
|
89
|
-
self.entity_mentions[entity].add(file_path)
|
|
90
|
-
|
|
91
|
-
def suggest_links_by_entities(self):
|
|
92
|
-
"""Suggest links based on common entity mentions."""
|
|
93
|
-
suggestions = []
|
|
94
|
-
|
|
95
|
-
for entity, files in self.entity_mentions.items():
|
|
96
|
-
if len(files) >= 2: # Entity mentioned in at least 2 files
|
|
97
|
-
file_list = list(files)
|
|
98
|
-
|
|
99
|
-
for i, file1 in enumerate(file_list):
|
|
100
|
-
for file2 in file_list[i+1:]:
|
|
101
|
-
# Check if files don't already link to each other
|
|
102
|
-
note1 = self.notes[file1]
|
|
103
|
-
note2 = self.notes[file2]
|
|
104
|
-
|
|
105
|
-
if (note2['title'] not in note1['existing_links'] and
|
|
106
|
-
note1['title'] not in note2['existing_links']):
|
|
107
|
-
|
|
108
|
-
suggestions.append({
|
|
109
|
-
'file1': file1,
|
|
110
|
-
'file2': file2,
|
|
111
|
-
'title1': note1['title'],
|
|
112
|
-
'title2': note2['title'],
|
|
113
|
-
'common_entity': entity,
|
|
114
|
-
'type': 'entity_mention',
|
|
115
|
-
'confidence': len(files) / 10 # Simple confidence score
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
return suggestions
|
|
119
|
-
|
|
120
|
-
def suggest_links_by_keywords(self):
|
|
121
|
-
"""Suggest links based on keyword overlap."""
|
|
122
|
-
suggestions = []
|
|
123
|
-
|
|
124
|
-
# Extract keywords from titles and content
|
|
125
|
-
for file_path, note_data in self.notes.items():
|
|
126
|
-
if note_data['word_count'] < 100: # Skip very short notes
|
|
127
|
-
continue
|
|
128
|
-
|
|
129
|
-
# Get keywords from title
|
|
130
|
-
title_words = set(re.findall(r'\b\w{4,}\b', note_data['title'].lower()))
|
|
131
|
-
|
|
132
|
-
# Find other notes with similar keywords
|
|
133
|
-
for other_path, other_data in self.notes.items():
|
|
134
|
-
if file_path == other_path:
|
|
135
|
-
continue
|
|
136
|
-
|
|
137
|
-
other_title_words = set(re.findall(r'\b\w{4,}\b', other_data['title'].lower()))
|
|
138
|
-
|
|
139
|
-
# Check for keyword overlap
|
|
140
|
-
common_words = title_words.intersection(other_title_words)
|
|
141
|
-
if len(common_words) >= 2: # At least 2 common significant words
|
|
142
|
-
|
|
143
|
-
# Check if files don't already link to each other
|
|
144
|
-
if (other_data['title'] not in note_data['existing_links'] and
|
|
145
|
-
note_data['title'] not in other_data['existing_links']):
|
|
146
|
-
|
|
147
|
-
suggestions.append({
|
|
148
|
-
'file1': file_path,
|
|
149
|
-
'file2': other_path,
|
|
150
|
-
'title1': note_data['title'],
|
|
151
|
-
'title2': other_data['title'],
|
|
152
|
-
'common_words': list(common_words),
|
|
153
|
-
'type': 'keyword_overlap',
|
|
154
|
-
'confidence': len(common_words) / 5
|
|
155
|
-
})
|
|
156
|
-
|
|
157
|
-
return suggestions
|
|
158
|
-
|
|
159
|
-
def find_orphaned_notes(self):
|
|
160
|
-
"""Find notes with no incoming or outgoing links."""
|
|
161
|
-
orphaned = []
|
|
162
|
-
|
|
163
|
-
for file_path, note_data in self.notes.items():
|
|
164
|
-
if len(note_data['existing_links']) == 0:
|
|
165
|
-
# Check if any other notes link to this one
|
|
166
|
-
mentioned_in = []
|
|
167
|
-
for other_path, other_data in self.notes.items():
|
|
168
|
-
if note_data['title'] in other_data['existing_links']:
|
|
169
|
-
mentioned_in.append(other_path)
|
|
170
|
-
|
|
171
|
-
if not mentioned_in:
|
|
172
|
-
orphaned.append({
|
|
173
|
-
'file': file_path,
|
|
174
|
-
'title': note_data['title'],
|
|
175
|
-
'word_count': note_data['word_count']
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
return orphaned
|
|
179
|
-
|
|
180
|
-
def analyze_vault(self):
|
|
181
|
-
"""Perform complete analysis of the vault."""
|
|
182
|
-
print("Loading notes...")
|
|
183
|
-
self.load_notes()
|
|
184
|
-
print(f"Loaded {len(self.notes)} notes")
|
|
185
|
-
|
|
186
|
-
print("Finding entity mentions...")
|
|
187
|
-
self.find_entity_mentions()
|
|
188
|
-
|
|
189
|
-
print("Generating link suggestions...")
|
|
190
|
-
entity_suggestions = self.suggest_links_by_entities()
|
|
191
|
-
keyword_suggestions = self.suggest_links_by_keywords()
|
|
192
|
-
orphaned_notes = self.find_orphaned_notes()
|
|
193
|
-
|
|
194
|
-
return {
|
|
195
|
-
'entity_suggestions': entity_suggestions,
|
|
196
|
-
'keyword_suggestions': keyword_suggestions,
|
|
197
|
-
'orphaned_notes': orphaned_notes,
|
|
198
|
-
'stats': {
|
|
199
|
-
'total_notes': len(self.notes),
|
|
200
|
-
'entity_suggestions': len(entity_suggestions),
|
|
201
|
-
'keyword_suggestions': len(keyword_suggestions),
|
|
202
|
-
'orphaned_notes': len(orphaned_notes)
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
def generate_report(self, results, output_file=None):
|
|
207
|
-
"""Generate a human-readable report."""
|
|
208
|
-
report = []
|
|
209
|
-
|
|
210
|
-
report.append("# Link Suggestions Report")
|
|
211
|
-
report.append(f"Generated for vault: {self.vault_path}")
|
|
212
|
-
report.append(f"Total notes analyzed: {results['stats']['total_notes']}")
|
|
213
|
-
report.append("")
|
|
214
|
-
|
|
215
|
-
# Entity-based suggestions
|
|
216
|
-
report.append("## Entity-Based Link Suggestions")
|
|
217
|
-
report.append(f"Found {len(results['entity_suggestions'])} potential connections")
|
|
218
|
-
report.append("")
|
|
219
|
-
|
|
220
|
-
# Group by entity
|
|
221
|
-
entity_groups = defaultdict(list)
|
|
222
|
-
for suggestion in results['entity_suggestions']:
|
|
223
|
-
entity_groups[suggestion['common_entity']].append(suggestion)
|
|
224
|
-
|
|
225
|
-
for entity, suggestions in sorted(entity_groups.items()):
|
|
226
|
-
report.append(f"### {entity.title()}")
|
|
227
|
-
for suggestion in suggestions[:5]: # Top 5 per entity
|
|
228
|
-
report.append(f"- [[{suggestion['title1']}]] ↔ [[{suggestion['title2']}]]")
|
|
229
|
-
report.append("")
|
|
230
|
-
|
|
231
|
-
# Keyword-based suggestions
|
|
232
|
-
report.append("## Keyword-Based Link Suggestions")
|
|
233
|
-
report.append(f"Found {len(results['keyword_suggestions'])} potential connections")
|
|
234
|
-
report.append("")
|
|
235
|
-
|
|
236
|
-
# Sort by confidence
|
|
237
|
-
sorted_keywords = sorted(results['keyword_suggestions'],
|
|
238
|
-
key=lambda x: x['confidence'], reverse=True)
|
|
239
|
-
|
|
240
|
-
for suggestion in sorted_keywords[:20]: # Top 20
|
|
241
|
-
common_words = ', '.join(suggestion['common_words'])
|
|
242
|
-
report.append(f"- [[{suggestion['title1']}]] ↔ [[{suggestion['title2']}]]")
|
|
243
|
-
report.append(f" Common words: {common_words}")
|
|
244
|
-
report.append("")
|
|
245
|
-
|
|
246
|
-
# Orphaned notes
|
|
247
|
-
report.append("## Orphaned Notes (No Links)")
|
|
248
|
-
report.append(f"Found {len(results['orphaned_notes'])} notes with no connections")
|
|
249
|
-
report.append("")
|
|
250
|
-
|
|
251
|
-
# Sort by word count (longer notes first)
|
|
252
|
-
sorted_orphaned = sorted(results['orphaned_notes'],
|
|
253
|
-
key=lambda x: x['word_count'], reverse=True)
|
|
254
|
-
|
|
255
|
-
for note in sorted_orphaned[:30]: # Top 30
|
|
256
|
-
report.append(f"- [[{note['title']}]] ({note['word_count']} words)")
|
|
257
|
-
|
|
258
|
-
report_text = '\n'.join(report)
|
|
259
|
-
|
|
260
|
-
if output_file:
|
|
261
|
-
with open(output_file, 'w', encoding='utf-8') as f:
|
|
262
|
-
f.write(report_text)
|
|
263
|
-
print(f"Report saved to: {output_file}")
|
|
264
|
-
|
|
265
|
-
return report_text
|
|
266
|
-
|
|
267
|
-
def main():
|
|
268
|
-
parser = argparse.ArgumentParser(description='Suggest links for Obsidian vault')
|
|
269
|
-
parser.add_argument('--vault', default='/Users/cam/VAULT01',
|
|
270
|
-
help='Path to Obsidian vault')
|
|
271
|
-
parser.add_argument('--output',
|
|
272
|
-
default='/Users/cam/VAULT01/System_Files/Link_Suggestions_Report.md',
|
|
273
|
-
help='Output file for report')
|
|
274
|
-
parser.add_argument('--json',
|
|
275
|
-
help='Output JSON file for programmatic use')
|
|
276
|
-
|
|
277
|
-
args = parser.parse_args()
|
|
278
|
-
|
|
279
|
-
suggester = LinkSuggester(args.vault)
|
|
280
|
-
results = suggester.analyze_vault()
|
|
281
|
-
|
|
282
|
-
# Generate report
|
|
283
|
-
report = suggester.generate_report(results, args.output)
|
|
284
|
-
|
|
285
|
-
# Save JSON if requested
|
|
286
|
-
if args.json:
|
|
287
|
-
with open(args.json, 'w') as f:
|
|
288
|
-
json.dump(results, f, indent=2, default=str)
|
|
289
|
-
print(f"JSON data saved to: {args.json}")
|
|
290
|
-
|
|
291
|
-
# Print summary
|
|
292
|
-
print("\n" + "="*50)
|
|
293
|
-
print("LINK SUGGESTIONS SUMMARY")
|
|
294
|
-
print("="*50)
|
|
295
|
-
print(f"Total notes: {results['stats']['total_notes']}")
|
|
296
|
-
print(f"Entity-based suggestions: {results['stats']['entity_suggestions']}")
|
|
297
|
-
print(f"Keyword-based suggestions: {results['stats']['keyword_suggestions']}")
|
|
298
|
-
print(f"Orphaned notes: {results['stats']['orphaned_notes']}")
|
|
299
|
-
|
|
300
|
-
if __name__ == '__main__':
|
|
301
|
-
main()
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Metadata Adder for Obsidian Vault
|
|
4
|
-
Adds standardized frontmatter to markdown files that lack it.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import os
|
|
8
|
-
import re
|
|
9
|
-
from datetime import datetime
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
import argparse
|
|
12
|
-
|
|
13
|
-
class MetadataAdder:
|
|
14
|
-
def __init__(self, vault_path):
|
|
15
|
-
self.vault_path = Path(vault_path)
|
|
16
|
-
self.stats = {
|
|
17
|
-
'processed': 0,
|
|
18
|
-
'updated': 0,
|
|
19
|
-
'skipped': 0,
|
|
20
|
-
'errors': 0
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
def get_file_creation_date(self, file_path):
|
|
24
|
-
"""Get file creation date from filesystem."""
|
|
25
|
-
try:
|
|
26
|
-
stat = os.stat(file_path)
|
|
27
|
-
# Use birthtime on macOS, ctime on others
|
|
28
|
-
timestamp = stat.st_birthtime if hasattr(stat, 'st_birthtime') else stat.st_ctime
|
|
29
|
-
return datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d')
|
|
30
|
-
except:
|
|
31
|
-
return datetime.now().strftime('%Y-%m-%d')
|
|
32
|
-
|
|
33
|
-
def determine_file_type(self, file_path):
|
|
34
|
-
"""Determine the type of note based on path and content."""
|
|
35
|
-
path_str = str(file_path).lower()
|
|
36
|
-
|
|
37
|
-
if 'moc' in path_str or 'map of content' in path_str:
|
|
38
|
-
return 'map-of-content'
|
|
39
|
-
elif 'daily notes' in path_str or 'daily note' in path_str:
|
|
40
|
-
return 'daily'
|
|
41
|
-
elif 'research' in path_str or 'articles' in path_str:
|
|
42
|
-
return 'research'
|
|
43
|
-
elif 'client' in path_str or 'camrohn llc' in path_str:
|
|
44
|
-
return 'client-work'
|
|
45
|
-
elif 'tutorial' in path_str or 'course' in path_str:
|
|
46
|
-
return 'tutorial'
|
|
47
|
-
elif 'idea' in path_str:
|
|
48
|
-
return 'idea'
|
|
49
|
-
elif 'meeting' in path_str:
|
|
50
|
-
return 'meeting'
|
|
51
|
-
elif 'email' in path_str:
|
|
52
|
-
return 'email'
|
|
53
|
-
else:
|
|
54
|
-
return 'note'
|
|
55
|
-
|
|
56
|
-
def generate_tags_from_path(self, file_path):
|
|
57
|
-
"""Generate tags based on file path."""
|
|
58
|
-
tags = []
|
|
59
|
-
path_parts = file_path.relative_to(self.vault_path).parts[:-1] # Exclude filename
|
|
60
|
-
|
|
61
|
-
# Map directory names to tags
|
|
62
|
-
tag_mapping = {
|
|
63
|
-
'ai development': 'ai/development',
|
|
64
|
-
'ai articles': 'ai/research',
|
|
65
|
-
'ai courses': 'tutorial/course',
|
|
66
|
-
'ai ideas': 'idea',
|
|
67
|
-
'camrohn llc': 'client',
|
|
68
|
-
'daily notes': 'daily',
|
|
69
|
-
'clippings': 'clippings',
|
|
70
|
-
'mcp': 'mcp',
|
|
71
|
-
'langchain': 'langchain',
|
|
72
|
-
'graphrag': 'graphrag'
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
for part in path_parts:
|
|
76
|
-
part_lower = part.lower()
|
|
77
|
-
for key, tag in tag_mapping.items():
|
|
78
|
-
if key in part_lower:
|
|
79
|
-
tags.append(tag)
|
|
80
|
-
break
|
|
81
|
-
|
|
82
|
-
# Add date tags for daily notes
|
|
83
|
-
if 'daily' in tags:
|
|
84
|
-
created_date = self.get_file_creation_date(file_path)
|
|
85
|
-
year_month = datetime.strptime(created_date, '%Y-%m-%d').strftime('%Y/%m')
|
|
86
|
-
tags.append(f'daily/{year_month}')
|
|
87
|
-
|
|
88
|
-
return list(set(tags)) # Remove duplicates
|
|
89
|
-
|
|
90
|
-
def has_frontmatter(self, content):
|
|
91
|
-
"""Check if content already has frontmatter."""
|
|
92
|
-
return content.strip().startswith('---')
|
|
93
|
-
|
|
94
|
-
def create_frontmatter(self, file_path, existing_content):
|
|
95
|
-
"""Create appropriate frontmatter for the file."""
|
|
96
|
-
created_date = self.get_file_creation_date(file_path)
|
|
97
|
-
file_type = self.determine_file_type(file_path)
|
|
98
|
-
tags = self.generate_tags_from_path(file_path)
|
|
99
|
-
|
|
100
|
-
# Extract title from first heading or filename
|
|
101
|
-
title_match = re.search(r'^#\s+(.+)$', existing_content, re.MULTILINE)
|
|
102
|
-
if title_match:
|
|
103
|
-
title = title_match.group(1)
|
|
104
|
-
else:
|
|
105
|
-
title = file_path.stem.replace('_', ' ').replace('-', ' ')
|
|
106
|
-
|
|
107
|
-
frontmatter = f"""---
|
|
108
|
-
tags: {tags}
|
|
109
|
-
type: {file_type}
|
|
110
|
-
created: {created_date}
|
|
111
|
-
modified: {datetime.now().strftime('%Y-%m-%d')}
|
|
112
|
-
status: active
|
|
113
|
-
related: []
|
|
114
|
-
aliases: []
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
return frontmatter
|
|
120
|
-
|
|
121
|
-
def process_file(self, file_path):
|
|
122
|
-
"""Process a single markdown file."""
|
|
123
|
-
try:
|
|
124
|
-
with open(file_path, 'r', encoding='utf-8') as f:
|
|
125
|
-
content = f.read()
|
|
126
|
-
|
|
127
|
-
if self.has_frontmatter(content):
|
|
128
|
-
self.stats['skipped'] += 1
|
|
129
|
-
return False
|
|
130
|
-
|
|
131
|
-
# Create and prepend frontmatter
|
|
132
|
-
frontmatter = self.create_frontmatter(file_path, content)
|
|
133
|
-
new_content = frontmatter + content
|
|
134
|
-
|
|
135
|
-
# Write back to file
|
|
136
|
-
with open(file_path, 'w', encoding='utf-8') as f:
|
|
137
|
-
f.write(new_content)
|
|
138
|
-
|
|
139
|
-
self.stats['updated'] += 1
|
|
140
|
-
return True
|
|
141
|
-
|
|
142
|
-
except Exception as e:
|
|
143
|
-
print(f"Error processing {file_path}: {e}")
|
|
144
|
-
self.stats['errors'] += 1
|
|
145
|
-
return False
|
|
146
|
-
|
|
147
|
-
def process_vault(self, dry_run=False):
|
|
148
|
-
"""Process all markdown files in the vault."""
|
|
149
|
-
# Directories to skip
|
|
150
|
-
skip_dirs = {'.obsidian', '.trash', 'System_Files', '.git'}
|
|
151
|
-
|
|
152
|
-
for file_path in self.vault_path.rglob('*.md'):
|
|
153
|
-
# Skip files in excluded directories
|
|
154
|
-
if any(skip_dir in file_path.parts for skip_dir in skip_dirs):
|
|
155
|
-
continue
|
|
156
|
-
|
|
157
|
-
self.stats['processed'] += 1
|
|
158
|
-
|
|
159
|
-
if dry_run:
|
|
160
|
-
with open(file_path, 'r', encoding='utf-8') as f:
|
|
161
|
-
content = f.read()
|
|
162
|
-
|
|
163
|
-
if not self.has_frontmatter(content):
|
|
164
|
-
print(f"Would update: {file_path.relative_to(self.vault_path)}")
|
|
165
|
-
self.stats['updated'] += 1
|
|
166
|
-
else:
|
|
167
|
-
self.stats['skipped'] += 1
|
|
168
|
-
else:
|
|
169
|
-
if self.process_file(file_path):
|
|
170
|
-
print(f"Updated: {file_path.relative_to(self.vault_path)}")
|
|
171
|
-
|
|
172
|
-
return self.stats
|
|
173
|
-
|
|
174
|
-
def main():
|
|
175
|
-
parser = argparse.ArgumentParser(description='Add metadata to Obsidian vault files')
|
|
176
|
-
parser.add_argument('--vault', default='/Users/cam/VAULT01',
|
|
177
|
-
help='Path to Obsidian vault')
|
|
178
|
-
parser.add_argument('--dry-run', action='store_true',
|
|
179
|
-
help='Show what would be updated without making changes')
|
|
180
|
-
|
|
181
|
-
args = parser.parse_args()
|
|
182
|
-
|
|
183
|
-
adder = MetadataAdder(args.vault)
|
|
184
|
-
print(f"Processing vault at: {args.vault}")
|
|
185
|
-
print("Dry run mode" if args.dry_run else "Making changes")
|
|
186
|
-
print("-" * 50)
|
|
187
|
-
|
|
188
|
-
stats = adder.process_vault(dry_run=args.dry_run)
|
|
189
|
-
|
|
190
|
-
print("-" * 50)
|
|
191
|
-
print(f"Files processed: {stats['processed']}")
|
|
192
|
-
print(f"Files updated: {stats['updated']}")
|
|
193
|
-
print(f"Files skipped (already have metadata): {stats['skipped']}")
|
|
194
|
-
print(f"Errors: {stats['errors']}")
|
|
195
|
-
|
|
196
|
-
if __name__ == '__main__':
|
|
197
|
-
main()
|