@bendyline/gilde 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/authoring/knowledge-keywords/README.md +100 -0
- package/authoring/knowledge-keywords/rules.json +850 -0
- package/data/craftbook-templates/a1/a11y-audit/art.json +13 -8
- package/data/craftbook-templates/a1/a11y-audit/logo.webp +0 -0
- package/data/craftbook-templates/ab/ab-test-readout/art.json +13 -9
- package/data/craftbook-templates/ab/ab-test-readout/logo.webp +0 -0
- package/data/craftbook-templates/ac/accessibility-retrofit/art.json +14 -9
- package/data/craftbook-templates/ac/accessibility-retrofit/logo.webp +0 -0
- package/data/craftbook-templates/ad/ad-variations/art.json +14 -10
- package/data/craftbook-templates/ad/ad-variations/logo.webp +0 -0
- package/data/craftbook-templates/al/album-curate/art.json +13 -9
- package/data/craftbook-templates/al/album-curate/logo.webp +0 -0
- package/data/craftbook-templates/al/alert-rules/art.json +13 -8
- package/data/craftbook-templates/al/alert-rules/logo.webp +0 -0
- package/data/craftbook-templates/al/alt-text-pass/art.json +13 -8
- package/data/craftbook-templates/al/alt-text-pass/logo.webp +0 -0
- package/data/craftbook-templates/an/anniversary-cut/art.json +13 -9
- package/data/craftbook-templates/an/anniversary-cut/logo.webp +0 -0
- package/data/craftbook-templates/an/annotated-bibliography/art.json +14 -10
- package/data/craftbook-templates/an/annotated-bibliography/logo.webp +0 -0
- package/data/craftbook-templates/an/annual-document-review/art.json +13 -9
- package/data/craftbook-templates/an/annual-document-review/logo.webp +0 -0
- package/data/craftbook-templates/an/anomaly-scan/art.json +13 -8
- package/data/craftbook-templates/an/anomaly-scan/logo.webp +0 -0
- package/data/craftbook-templates/ap/api-contract-review/art.json +13 -9
- package/data/craftbook-templates/ap/api-contract-review/logo.webp +0 -0
- package/data/craftbook-templates/ap/apply-review-findings/art.json +14 -9
- package/data/craftbook-templates/ap/apply-review-findings/logo.webp +0 -0
- package/data/craftbook-templates/ar/artifact-integrity-review/art.json +13 -9
- package/data/craftbook-templates/ar/artifact-integrity-review/logo.webp +0 -0
- package/data/craftbook-templates/au/audio-ad-spot/art.json +13 -9
- package/data/craftbook-templates/au/audio-ad-spot/logo.webp +0 -0
- package/data/craftbook-templates/au/audio-highlight-reel/art.json +13 -9
- package/data/craftbook-templates/au/audio-highlight-reel/logo.webp +0 -0
- package/data/craftbook-templates/au/audiobook-master-pack/art.json +14 -10
- package/data/craftbook-templates/au/audiobook-master-pack/logo.webp +0 -0
- package/data/craftbook-templates/au/auth-flow/art.json +13 -8
- package/data/craftbook-templates/au/auth-flow/logo.webp +0 -0
- package/data/craftbook-templates/au/automation-recipe/art.json +13 -9
- package/data/craftbook-templates/au/automation-recipe/logo.webp +0 -0
- package/data/craftbook-templates/ba/backup-routine/art.json +13 -9
- package/data/craftbook-templates/ba/backup-routine/logo.webp +0 -0
- package/data/craftbook-templates/bl/blog-post/art.json +14 -10
- package/data/craftbook-templates/bl/blog-post/logo.webp +0 -0
- package/data/craftbook-templates/bo/board-deck/art.json +13 -9
- package/data/craftbook-templates/bo/board-deck/logo.webp +0 -0
- package/data/craftbook-templates/bo/board-game-web/art.json +13 -9
- package/data/craftbook-templates/bo/board-game-web/logo.webp +0 -0
- package/data/craftbook-templates/bo/booking-automation/art.json +13 -8
- package/data/craftbook-templates/bo/booking-automation/logo.webp +0 -0
- package/data/craftbook-templates/br/branding-website/art.json +13 -9
- package/data/craftbook-templates/br/branding-website/logo.webp +0 -0
- package/data/craftbook-templates/br/broadcast-announcement/art.json +13 -9
- package/data/craftbook-templates/br/broadcast-announcement/logo.webp +0 -0
- package/data/craftbook-templates/br/browser-qa-audit/art.json +13 -8
- package/data/craftbook-templates/br/browser-qa-audit/logo.webp +0 -0
- package/data/craftbook-templates/bu/bug-fix-tdd/art.json +14 -9
- package/data/craftbook-templates/bu/bug-fix-tdd/logo.webp +0 -0
- package/data/craftbook-templates/bu/build-loop/art.json +13 -9
- package/data/craftbook-templates/bu/build-loop/logo.webp +0 -0
- package/data/craftbook-templates/ca/calendar-brief/art.json +13 -9
- package/data/craftbook-templates/ca/calendar-brief/logo.webp +0 -0
- package/data/craftbook-templates/ca/canvas-generative-art/art.json +13 -9
- package/data/craftbook-templates/ca/canvas-generative-art/logo.webp +0 -0
- package/data/craftbook-templates/ca/careful-mode/art.json +14 -10
- package/data/craftbook-templates/ca/careful-mode/logo.webp +0 -0
- package/data/craftbook-templates/ca/case-study/art.json +14 -10
- package/data/craftbook-templates/ca/case-study/logo.webp +0 -0
- package/data/craftbook-templates/ca/case-study-writeup/art.json +13 -9
- package/data/craftbook-templates/ca/case-study-writeup/logo.webp +0 -0
- package/data/craftbook-templates/ch/changelog-cut/art.json +13 -8
- package/data/craftbook-templates/ch/changelog-cut/logo.webp +0 -0
- package/data/craftbook-templates/ch/changelog-writeup/art.json +14 -10
- package/data/craftbook-templates/ch/changelog-writeup/logo.webp +0 -0
- package/data/craftbook-templates/ch/chapter-narration-run/art.json +13 -9
- package/data/craftbook-templates/ch/chapter-narration-run/logo.webp +0 -0
- package/data/craftbook-templates/ch/chapter-weave/art.json +13 -9
- package/data/craftbook-templates/ch/chapter-weave/logo.webp +0 -0
- package/data/craftbook-templates/ch/character-sheet/art.json +13 -9
- package/data/craftbook-templates/ch/character-sheet/logo.webp +0 -0
- package/data/craftbook-templates/ch/character-turnaround/art.json +13 -9
- package/data/craftbook-templates/ch/character-turnaround/logo.webp +0 -0
- package/data/craftbook-templates/ch/chart-pack/art.json +13 -9
- package/data/craftbook-templates/ch/chart-pack/logo.webp +0 -0
- package/data/craftbook-templates/ch/chrome-extension/art.json +13 -9
- package/data/craftbook-templates/ch/chrome-extension/logo.webp +0 -0
- package/data/craftbook-templates/ci/ci-pipeline/art.json +14 -9
- package/data/craftbook-templates/ci/ci-pipeline/logo.webp +0 -0
- package/data/craftbook-templates/ci/citation-audit/art.json +14 -9
- package/data/craftbook-templates/ci/citation-audit/logo.webp +0 -0
- package/data/craftbook-templates/cl/cli-tool/art.json +13 -9
- package/data/craftbook-templates/cl/cli-tool/logo.webp +0 -0
- package/data/craftbook-templates/co/code-review/art.json +14 -9
- package/data/craftbook-templates/co/code-review/logo.webp +0 -0
- package/data/craftbook-templates/co/codebase-refactoring-review/art.json +13 -8
- package/data/craftbook-templates/co/codebase-refactoring-review/logo.webp +0 -0
- package/data/craftbook-templates/co/codebase-ux-review/art.json +13 -9
- package/data/craftbook-templates/co/codebase-ux-review/logo.webp +0 -0
- package/data/craftbook-templates/co/codemod-sweep/art.json +14 -9
- package/data/craftbook-templates/co/codemod-sweep/logo.webp +0 -0
- package/data/craftbook-templates/co/cohort-analysis/art.json +13 -9
- package/data/craftbook-templates/co/cohort-analysis/logo.webp +0 -0
- package/data/craftbook-templates/co/company-research-brief/art.json +13 -9
- package/data/craftbook-templates/co/company-research-brief/logo.webp +0 -0
- package/data/craftbook-templates/co/comparison-matrix/art.json +14 -10
- package/data/craftbook-templates/co/comparison-matrix/logo.webp +0 -0
- package/data/craftbook-templates/co/compat-check/art.json +13 -9
- package/data/craftbook-templates/co/compat-check/logo.webp +0 -0
- package/data/craftbook-templates/co/competitive-analysis/art.json +14 -10
- package/data/craftbook-templates/co/competitive-analysis/logo.webp +0 -0
- package/data/craftbook-templates/co/comprehensive-codebase-review/art.json +14 -9
- package/data/craftbook-templates/co/comprehensive-codebase-review/logo.webp +0 -0
- package/data/craftbook-templates/co/config-scaffold/art.json +13 -9
- package/data/craftbook-templates/co/config-scaffold/logo.webp +0 -0
- package/data/craftbook-templates/co/content-accuracy-review/art.json +13 -8
- package/data/craftbook-templates/co/content-accuracy-review/logo.webp +0 -0
- package/data/craftbook-templates/co/content-deck/art.json +13 -9
- package/data/craftbook-templates/co/content-deck/logo.webp +0 -0
- package/data/craftbook-templates/co/contract-template/art.json +13 -8
- package/data/craftbook-templates/co/contract-template/logo.webp +0 -0
- package/data/craftbook-templates/co/cookbook-layout/art.json +13 -9
- package/data/craftbook-templates/co/cookbook-layout/logo.webp +0 -0
- package/data/craftbook-templates/co/copy-review/art.json +13 -9
- package/data/craftbook-templates/co/copy-review/logo.webp +0 -0
- package/data/craftbook-templates/co/corpus-email-digest/art.json +13 -9
- package/data/craftbook-templates/co/corpus-email-digest/logo.webp +0 -0
- package/data/craftbook-templates/co/corpus-synthesis/art.json +14 -10
- package/data/craftbook-templates/co/corpus-synthesis/logo.webp +0 -0
- package/data/craftbook-templates/co/cover-letter/art.json +14 -10
- package/data/craftbook-templates/co/cover-letter/logo.webp +0 -0
- package/data/craftbook-templates/cr/crm-update-batch/art.json +13 -8
- package/data/craftbook-templates/cr/crm-update-batch/logo.webp +0 -0
- package/data/craftbook-templates/cr/cron-job/art.json +13 -9
- package/data/craftbook-templates/cr/cron-job/logo.webp +0 -0
- package/data/craftbook-templates/cr/crossword-forge/art.json +13 -9
- package/data/craftbook-templates/cr/crossword-forge/logo.webp +0 -0
- package/data/craftbook-templates/cs/csv-transformer/art.json +13 -9
- package/data/craftbook-templates/cs/csv-transformer/logo.webp +0 -0
- package/data/craftbook-templates/da/dashboard-spec/art.json +13 -9
- package/data/craftbook-templates/da/dashboard-spec/logo.webp +0 -0
- package/data/craftbook-templates/da/data-dictionary/art.json +13 -9
- package/data/craftbook-templates/da/data-dictionary/logo.webp +0 -0
- package/data/craftbook-templates/da/data-export-migrate/art.json +13 -9
- package/data/craftbook-templates/da/data-export-migrate/logo.webp +0 -0
- package/data/craftbook-templates/da/data-join-merge/art.json +13 -9
- package/data/craftbook-templates/da/data-join-merge/logo.webp +0 -0
- package/data/craftbook-templates/da/data-pipeline-etl/art.json +13 -8
- package/data/craftbook-templates/da/data-pipeline-etl/logo.webp +0 -0
- package/data/craftbook-templates/da/data-quality-audit/art.json +13 -8
- package/data/craftbook-templates/da/data-quality-audit/logo.webp +0 -0
- package/data/craftbook-templates/da/data-to-report/art.json +13 -9
- package/data/craftbook-templates/da/data-to-report/logo.webp +0 -0
- package/data/craftbook-templates/da/data-viz-page/art.json +13 -9
- package/data/craftbook-templates/da/data-viz-page/logo.webp +0 -0
- package/data/craftbook-templates/da/dataset-clean/art.json +13 -9
- package/data/craftbook-templates/da/dataset-clean/logo.webp +0 -0
- package/data/craftbook-templates/db/db-index-tuning/art.json +13 -9
- package/data/craftbook-templates/db/db-index-tuning/logo.webp +0 -0
- package/data/craftbook-templates/de/deep-security-review/art.json +13 -8
- package/data/craftbook-templates/de/deep-security-review/logo.webp +0 -0
- package/data/craftbook-templates/de/dependency-audit/art.json +13 -8
- package/data/craftbook-templates/de/dependency-audit/logo.webp +0 -0
- package/data/craftbook-templates/de/dependency-upgrade/art.json +14 -9
- package/data/craftbook-templates/de/dependency-upgrade/logo.webp +0 -0
- package/data/craftbook-templates/de/deploy-checklist/art.json +14 -10
- package/data/craftbook-templates/de/deploy-checklist/logo.webp +0 -0
- package/data/craftbook-templates/de/design-review/art.json +13 -9
- package/data/craftbook-templates/de/design-review/logo.webp +0 -0
- package/data/craftbook-templates/de/design-system-consultation/art.json +13 -9
- package/data/craftbook-templates/de/design-system-consultation/logo.webp +0 -0
- package/data/craftbook-templates/di/diagram-from-text/art.json +13 -9
- package/data/craftbook-templates/di/diagram-from-text/logo.webp +0 -0
- package/data/craftbook-templates/di/digest-from-feeds/art.json +13 -9
- package/data/craftbook-templates/di/digest-from-feeds/logo.webp +0 -0
- package/data/craftbook-templates/do/doc-intake-pipeline/art.json +13 -9
- package/data/craftbook-templates/do/doc-intake-pipeline/logo.webp +0 -0
- package/data/craftbook-templates/do/doc-rewrite/art.json +14 -10
- package/data/craftbook-templates/do/doc-rewrite/logo.webp +0 -0
- package/data/craftbook-templates/do/dockerize-app/art.json +13 -8
- package/data/craftbook-templates/do/dockerize-app/logo.webp +0 -0
- package/data/craftbook-templates/do/docs-site/art.json +13 -9
- package/data/craftbook-templates/do/docs-site/logo.webp +0 -0
- package/data/craftbook-templates/do/documentation-drift-review/art.json +13 -9
- package/data/craftbook-templates/do/documentation-drift-review/logo.webp +0 -0
- package/data/craftbook-templates/dr/draft-social-post/art.json +17 -0
- package/data/craftbook-templates/dr/draft-social-post/logo.webp +0 -0
- package/data/craftbook-templates/dr/drive-wrap-up/art.json +13 -9
- package/data/craftbook-templates/dr/drive-wrap-up/logo.webp +0 -0
- package/data/craftbook-templates/du/due-diligence-brief/art.json +14 -10
- package/data/craftbook-templates/du/due-diligence-brief/logo.webp +0 -0
- package/data/craftbook-templates/eb/ebook-compile/art.json +13 -9
- package/data/craftbook-templates/eb/ebook-compile/logo.webp +0 -0
- package/data/craftbook-templates/ed/edit-notes/art.json +13 -9
- package/data/craftbook-templates/ed/edit-notes/logo.webp +0 -0
- package/data/craftbook-templates/em/email-sequence/art.json +14 -10
- package/data/craftbook-templates/em/email-sequence/logo.webp +0 -0
- package/data/craftbook-templates/em/email-template/art.json +13 -9
- package/data/craftbook-templates/em/email-template/logo.webp +0 -0
- package/data/craftbook-templates/en/engineering-retrospective/art.json +13 -8
- package/data/craftbook-templates/en/engineering-retrospective/logo.webp +0 -0
- package/data/craftbook-templates/ep/episode-plan/art.json +13 -9
- package/data/craftbook-templates/ep/episode-plan/logo.webp +0 -0
- package/data/craftbook-templates/es/escalation-playbook/art.json +13 -8
- package/data/craftbook-templates/es/escalation-playbook/logo.webp +0 -0
- package/data/craftbook-templates/ev/evidence-brief/art.json +14 -10
- package/data/craftbook-templates/ev/evidence-brief/logo.webp +0 -0
- package/data/craftbook-templates/ex/executive-level-review/art.json +13 -9
- package/data/craftbook-templates/ex/executive-level-review/logo.webp +0 -0
- package/data/craftbook-templates/ex/expense-categorize/art.json +13 -8
- package/data/craftbook-templates/ex/expense-categorize/logo.webp +0 -0
- package/data/craftbook-templates/ex/explain-code-folder/art.json +17 -0
- package/data/craftbook-templates/ex/explain-code-folder/logo.webp +0 -0
- package/data/craftbook-templates/ex/explain-code-folder/manifest.json +1 -0
- package/data/craftbook-templates/fa/fact-check/art.json +13 -8
- package/data/craftbook-templates/fa/fact-check/logo.webp +0 -0
- package/data/craftbook-templates/fa/family-story-chapter/art.json +13 -9
- package/data/craftbook-templates/fa/family-story-chapter/logo.webp +0 -0
- package/data/craftbook-templates/fa/faq-from-docs/art.json +14 -10
- package/data/craftbook-templates/fa/faq-from-docs/logo.webp +0 -0
- package/data/craftbook-templates/fa/favicon-set/art.json +13 -9
- package/data/craftbook-templates/fa/favicon-set/logo.webp +0 -0
- package/data/craftbook-templates/fe/feature-flag-release/art.json +14 -10
- package/data/craftbook-templates/fe/feature-flag-release/logo.webp +0 -0
- package/data/craftbook-templates/fe/feature-flag-rollout/art.json +13 -9
- package/data/craftbook-templates/fe/feature-flag-rollout/logo.webp +0 -0
- package/data/craftbook-templates/fe/feedback-widget/art.json +13 -9
- package/data/craftbook-templates/fe/feedback-widget/logo.webp +0 -0
- package/data/craftbook-templates/fl/flaky-test-fix/art.json +14 -9
- package/data/craftbook-templates/fl/flaky-test-fix/logo.webp +0 -0
- package/data/craftbook-templates/fo/folder-to-audio/art.json +13 -9
- package/data/craftbook-templates/fo/folder-to-audio/logo.webp +0 -0
- package/data/craftbook-templates/fo/forecast-model/art.json +13 -9
- package/data/craftbook-templates/fo/forecast-model/logo.webp +0 -0
- package/data/craftbook-templates/fo/form-fill-batch/art.json +13 -9
- package/data/craftbook-templates/fo/form-fill-batch/logo.webp +0 -0
- package/data/craftbook-templates/fo/form-wizard/art.json +13 -9
- package/data/craftbook-templates/fo/form-wizard/logo.webp +0 -0
- package/data/craftbook-templates/fr/freeze-scope/art.json +14 -10
- package/data/craftbook-templates/fr/freeze-scope/logo.webp +0 -0
- package/data/craftbook-templates/ga/game-with-screens/art.json +13 -9
- package/data/craftbook-templates/ga/game-with-screens/logo.webp +0 -0
- package/data/craftbook-templates/gl/glossary-build/art.json +13 -9
- package/data/craftbook-templates/gl/glossary-build/logo.webp +0 -0
- package/data/craftbook-templates/gr/graphql-api/art.json +13 -9
- package/data/craftbook-templates/gr/graphql-api/logo.webp +0 -0
- package/data/craftbook-templates/gr/grpc-service/art.json +13 -9
- package/data/craftbook-templates/gr/grpc-service/logo.webp +0 -0
- package/data/craftbook-templates/ha/handbook-section/art.json +13 -9
- package/data/craftbook-templates/ha/handbook-section/logo.webp +0 -0
- package/data/craftbook-templates/he/hero-image/art.json +13 -9
- package/data/craftbook-templates/he/hero-image/logo.webp +0 -0
- package/data/craftbook-templates/ho/holiday-card-run/art.json +13 -9
- package/data/craftbook-templates/ho/holiday-card-run/logo.webp +0 -0
- package/data/craftbook-templates/ho/hotfix-flow/art.json +14 -10
- package/data/craftbook-templates/ho/hotfix-flow/logo.webp +0 -0
- package/data/craftbook-templates/ht/html-arcade-game/art.json +13 -9
- package/data/craftbook-templates/ht/html-arcade-game/logo.webp +0 -0
- package/data/craftbook-templates/ht/html-puzzle-game/art.json +13 -9
- package/data/craftbook-templates/ht/html-puzzle-game/logo.webp +0 -0
- package/data/craftbook-templates/ic/icon-pack/art.json +13 -9
- package/data/craftbook-templates/ic/icon-pack/logo.webp +0 -0
- package/data/craftbook-templates/id/idea-office-hours/art.json +13 -8
- package/data/craftbook-templates/id/idea-office-hours/logo.webp +0 -0
- package/data/craftbook-templates/id/idle-clicker-game/art.json +13 -9
- package/data/craftbook-templates/id/idle-clicker-game/logo.webp +0 -0
- package/data/craftbook-templates/im/image-batch-edit/art.json +13 -8
- package/data/craftbook-templates/im/image-batch-edit/logo.webp +0 -0
- package/data/craftbook-templates/im/image-dedup-cluster/art.json +13 -9
- package/data/craftbook-templates/im/image-dedup-cluster/logo.webp +0 -0
- package/data/craftbook-templates/im/image-palette-extract/art.json +13 -9
- package/data/craftbook-templates/im/image-palette-extract/logo.webp +0 -0
- package/data/craftbook-templates/im/image-seo-rename/art.json +13 -9
- package/data/craftbook-templates/im/image-seo-rename/logo.webp +0 -0
- package/data/craftbook-templates/im/image-set-index/art.json +13 -9
- package/data/craftbook-templates/im/image-set-index/logo.webp +0 -0
- package/data/craftbook-templates/in/inbox-triage/art.json +13 -9
- package/data/craftbook-templates/in/inbox-triage/logo.webp +0 -0
- package/data/craftbook-templates/in/incident-comms-templates/art.json +13 -8
- package/data/craftbook-templates/in/incident-comms-templates/logo.webp +0 -0
- package/data/craftbook-templates/in/incident-postmortem/art.json +14 -9
- package/data/craftbook-templates/in/incident-postmortem/logo.webp +0 -0
- package/data/craftbook-templates/in/insurance-inventory/art.json +13 -9
- package/data/craftbook-templates/in/insurance-inventory/logo.webp +0 -0
- package/data/craftbook-templates/in/interactive-quiz/art.json +13 -9
- package/data/craftbook-templates/in/interactive-quiz/logo.webp +0 -0
- package/data/craftbook-templates/in/investigate/art.json +13 -8
- package/data/craftbook-templates/in/investigate/logo.webp +0 -0
- package/data/craftbook-templates/in/investigate-root-cause/art.json +13 -8
- package/data/craftbook-templates/in/investigate-root-cause/logo.webp +0 -0
- package/data/craftbook-templates/in/invitation-design/art.json +13 -9
- package/data/craftbook-templates/in/invitation-design/logo.webp +0 -0
- package/data/craftbook-templates/in/invoice-generator/art.json +13 -9
- package/data/craftbook-templates/in/invoice-generator/logo.webp +0 -0
- package/data/craftbook-templates/in/invoice-run/art.json +13 -9
- package/data/craftbook-templates/in/invoice-run/logo.webp +0 -0
- package/data/craftbook-templates/index.json +1 -1
- package/data/craftbook-templates/it/item-intake/art.json +13 -9
- package/data/craftbook-templates/it/item-intake/logo.webp +0 -0
- package/data/craftbook-templates/ju/juice-pass/art.json +13 -9
- package/data/craftbook-templates/ju/juice-pass/logo.webp +0 -0
- package/data/craftbook-templates/kn/knowledge-base-article/art.json +14 -10
- package/data/craftbook-templates/kn/knowledge-base-article/logo.webp +0 -0
- package/data/craftbook-templates/kp/kpi-scorecard/art.json +13 -9
- package/data/craftbook-templates/kp/kpi-scorecard/logo.webp +0 -0
- package/data/craftbook-templates/la/landing-copy/art.json +14 -10
- package/data/craftbook-templates/la/landing-copy/logo.webp +0 -0
- package/data/craftbook-templates/la/landing-page/art.json +13 -9
- package/data/craftbook-templates/la/landing-page/logo.webp +0 -0
- package/data/craftbook-templates/le/lead-enrichment/art.json +13 -8
- package/data/craftbook-templates/le/lead-enrichment/logo.webp +0 -0
- package/data/craftbook-templates/li/library-package/art.json +13 -9
- package/data/craftbook-templates/li/library-package/logo.webp +0 -0
- package/data/craftbook-templates/li/literature-review/art.json +14 -10
- package/data/craftbook-templates/li/literature-review/logo.webp +0 -0
- package/data/craftbook-templates/li/live-browser-qa/art.json +13 -8
- package/data/craftbook-templates/li/live-browser-qa/logo.webp +0 -0
- package/data/craftbook-templates/lo/localize-content/art.json +14 -9
- package/data/craftbook-templates/lo/localize-content/logo.webp +0 -0
- package/data/craftbook-templates/lo/logo-set/art.json +13 -9
- package/data/craftbook-templates/lo/logo-set/logo.webp +0 -0
- package/data/craftbook-templates/ma/market-scan/art.json +14 -10
- package/data/craftbook-templates/ma/market-scan/logo.webp +0 -0
- package/data/craftbook-templates/me/meeting-minutes/art.json +13 -9
- package/data/craftbook-templates/me/meeting-minutes/logo.webp +0 -0
- package/data/craftbook-templates/me/meeting-notes-to-actions/art.json +13 -9
- package/data/craftbook-templates/me/meeting-notes-to-actions/logo.webp +0 -0
- package/data/craftbook-templates/me/meeting-prep-brief/art.json +13 -9
- package/data/craftbook-templates/me/meeting-prep-brief/logo.webp +0 -0
- package/data/craftbook-templates/me/meeting-summary-audio/art.json +13 -9
- package/data/craftbook-templates/me/meeting-summary-audio/logo.webp +0 -0
- package/data/craftbook-templates/me/memory-prompt-session/art.json +13 -9
- package/data/craftbook-templates/me/memory-prompt-session/logo.webp +0 -0
- package/data/craftbook-templates/me/message-queue-consumer/art.json +13 -9
- package/data/craftbook-templates/me/message-queue-consumer/logo.webp +0 -0
- package/data/craftbook-templates/mi/micro-game-jam/art.json +13 -9
- package/data/craftbook-templates/mi/micro-game-jam/logo.webp +0 -0
- package/data/craftbook-templates/mo/mock-interview/art.json +13 -9
- package/data/craftbook-templates/mo/mock-interview/logo.webp +0 -0
- package/data/craftbook-templates/mo/mod-scaffold/art.json +13 -9
- package/data/craftbook-templates/mo/mod-scaffold/logo.webp +0 -0
- package/data/craftbook-templates/mo/monitor-and-alert/art.json +13 -9
- package/data/craftbook-templates/mo/monitor-and-alert/logo.webp +0 -0
- package/data/craftbook-templates/mo/month-close/art.json +13 -9
- package/data/craftbook-templates/mo/month-close/logo.webp +0 -0
- package/data/craftbook-templates/mo/monthly-recording-review/art.json +13 -8
- package/data/craftbook-templates/mo/monthly-recording-review/logo.webp +0 -0
- package/data/craftbook-templates/mo/moodboard/art.json +13 -9
- package/data/craftbook-templates/mo/moodboard/logo.webp +0 -0
- package/data/craftbook-templates/mo/morning-brief/art.json +13 -9
- package/data/craftbook-templates/mo/morning-brief/logo.webp +0 -0
- package/data/craftbook-templates/mo/morning-report/art.json +13 -9
- package/data/craftbook-templates/mo/morning-report/logo.webp +0 -0
- package/data/craftbook-templates/mu/music-metadata-tag/art.json +13 -9
- package/data/craftbook-templates/mu/music-metadata-tag/logo.webp +0 -0
- package/data/craftbook-templates/na/narrated-slideshow/art.json +14 -10
- package/data/craftbook-templates/na/narrated-slideshow/logo.webp +0 -0
- package/data/craftbook-templates/ne/newsletter-issue/art.json +13 -9
- package/data/craftbook-templates/ne/newsletter-issue/logo.webp +0 -0
- package/data/craftbook-templates/ni/nightly-fix-sweep/art.json +14 -9
- package/data/craftbook-templates/ni/nightly-fix-sweep/logo.webp +0 -0
- package/data/craftbook-templates/no/notification-router/art.json +13 -9
- package/data/craftbook-templates/no/notification-router/logo.webp +0 -0
- package/data/craftbook-templates/oc/ocr-extract/art.json +13 -9
- package/data/craftbook-templates/oc/ocr-extract/logo.webp +0 -0
- package/data/craftbook-templates/of/offer-compare/art.json +14 -10
- package/data/craftbook-templates/of/offer-compare/logo.webp +0 -0
- package/data/craftbook-templates/of/office-hours/art.json +13 -8
- package/data/craftbook-templates/of/office-hours/logo.webp +0 -0
- package/data/craftbook-templates/on/onboarding-checklist/art.json +13 -9
- package/data/craftbook-templates/on/onboarding-checklist/logo.webp +0 -0
- package/data/craftbook-templates/on/onboarding-flow/art.json +13 -9
- package/data/craftbook-templates/on/onboarding-flow/logo.webp +0 -0
- package/data/craftbook-templates/on/oncall-handoff/art.json +13 -8
- package/data/craftbook-templates/on/oncall-handoff/logo.webp +0 -0
- package/data/craftbook-templates/on/one-pager/art.json +13 -9
- package/data/craftbook-templates/on/one-pager/logo.webp +0 -0
- package/data/craftbook-templates/op/ops-runbook/art.json +13 -9
- package/data/craftbook-templates/op/ops-runbook/logo.webp +0 -0
- package/data/craftbook-templates/pa/page-spread/art.json +13 -9
- package/data/craftbook-templates/pa/page-spread/logo.webp +0 -0
- package/data/craftbook-templates/pa/parser-grammar/art.json +13 -9
- package/data/craftbook-templates/pa/parser-grammar/logo.webp +0 -0
- package/data/craftbook-templates/pe/perf-audit/art.json +13 -8
- package/data/craftbook-templates/pe/perf-audit/logo.webp +0 -0
- package/data/craftbook-templates/pe/perf-optimization/art.json +14 -9
- package/data/craftbook-templates/pe/perf-optimization/logo.webp +0 -0
- package/data/craftbook-templates/pe/pest-diagnosis/art.json +13 -9
- package/data/craftbook-templates/pe/pest-diagnosis/logo.webp +0 -0
- package/data/craftbook-templates/ph/photo-cull/art.json +13 -9
- package/data/craftbook-templates/ph/photo-cull/logo.webp +0 -0
- package/data/craftbook-templates/ph/photo-library-nightly/art.json +17 -0
- package/data/craftbook-templates/ph/photo-library-nightly/logo.webp +0 -0
- package/data/craftbook-templates/ph/photo-library-nightly/manifest.json +1 -0
- package/data/craftbook-templates/ph/physics-toy/art.json +13 -9
- package/data/craftbook-templates/ph/physics-toy/logo.webp +0 -0
- package/data/craftbook-templates/pi/pitch-deck/art.json +13 -9
- package/data/craftbook-templates/pi/pitch-deck/logo.webp +0 -0
- package/data/craftbook-templates/pl/plan/art.json +13 -8
- package/data/craftbook-templates/pl/plan/logo.webp +0 -0
- package/data/craftbook-templates/pl/playtest-report/art.json +13 -8
- package/data/craftbook-templates/pl/playtest-report/logo.webp +0 -0
- package/data/craftbook-templates/po/podcast-chaptering/art.json +13 -9
- package/data/craftbook-templates/po/podcast-chaptering/logo.webp +0 -0
- package/data/craftbook-templates/po/portfolio-site/art.json +13 -9
- package/data/craftbook-templates/po/portfolio-site/logo.webp +0 -0
- package/data/craftbook-templates/po/powerpoint-deck/art.json +14 -10
- package/data/craftbook-templates/po/powerpoint-deck/logo.webp +0 -0
- package/data/craftbook-templates/pr/pr-security-review/art.json +13 -8
- package/data/craftbook-templates/pr/pr-security-review/logo.webp +0 -0
- package/data/craftbook-templates/pr/practice-exam/art.json +13 -8
- package/data/craftbook-templates/pr/practice-exam/logo.webp +0 -0
- package/data/craftbook-templates/pr/practice-session/art.json +13 -9
- package/data/craftbook-templates/pr/practice-session/logo.webp +0 -0
- package/data/craftbook-templates/pr/pre-departure-countdown/art.json +13 -9
- package/data/craftbook-templates/pr/pre-departure-countdown/logo.webp +0 -0
- package/data/craftbook-templates/pr/press-release/art.json +14 -10
- package/data/craftbook-templates/pr/press-release/logo.webp +0 -0
- package/data/craftbook-templates/pr/price-tracker/art.json +13 -9
- package/data/craftbook-templates/pr/price-tracker/logo.webp +0 -0
- package/data/craftbook-templates/pr/pricing-page/art.json +13 -9
- package/data/craftbook-templates/pr/pricing-page/logo.webp +0 -0
- package/data/craftbook-templates/pr/product-descriptions/art.json +14 -10
- package/data/craftbook-templates/pr/product-descriptions/logo.webp +0 -0
- package/data/craftbook-templates/pr/proposal-sow/art.json +13 -9
- package/data/craftbook-templates/pr/proposal-sow/logo.webp +0 -0
- package/data/craftbook-templates/pu/pull-request-review/art.json +14 -9
- package/data/craftbook-templates/pu/pull-request-review/logo.webp +0 -0
- package/data/craftbook-templates/pu/puzzle-pack-layout/art.json +13 -9
- package/data/craftbook-templates/pu/puzzle-pack-layout/logo.webp +0 -0
- package/data/craftbook-templates/pw/pwa-offline/art.json +13 -9
- package/data/craftbook-templates/pw/pwa-offline/logo.webp +0 -0
- package/data/craftbook-templates/qa/qa/art.json +13 -8
- package/data/craftbook-templates/qa/qa/logo.webp +0 -0
- package/data/craftbook-templates/qu/quarterly-summary/art.json +13 -9
- package/data/craftbook-templates/qu/quarterly-summary/logo.webp +0 -0
- package/data/craftbook-templates/raw-index.json +1 -1
- package/data/craftbook-templates/re/reading-list/art.json +13 -9
- package/data/craftbook-templates/re/reading-list/logo.webp +0 -0
- package/data/craftbook-templates/re/receipt-intake/art.json +13 -9
- package/data/craftbook-templates/re/receipt-intake/logo.webp +0 -0
- package/data/craftbook-templates/re/receipt-ocr-ledger/art.json +13 -9
- package/data/craftbook-templates/re/receipt-ocr-ledger/logo.webp +0 -0
- package/data/craftbook-templates/re/reception-report/art.json +17 -0
- package/data/craftbook-templates/re/reception-report/logo.webp +0 -0
- package/data/craftbook-templates/re/recipe-capture/art.json +13 -8
- package/data/craftbook-templates/re/recipe-capture/logo.webp +0 -0
- package/data/craftbook-templates/re/record-a-relative/art.json +13 -9
- package/data/craftbook-templates/re/record-a-relative/logo.webp +0 -0
- package/data/craftbook-templates/re/recurring-invoice-run/art.json +13 -9
- package/data/craftbook-templates/re/recurring-invoice-run/logo.webp +0 -0
- package/data/craftbook-templates/re/refactor-module/art.json +14 -9
- package/data/craftbook-templates/re/refactor-module/logo.webp +0 -0
- package/data/craftbook-templates/re/regex-builder/art.json +13 -8
- package/data/craftbook-templates/re/regex-builder/logo.webp +0 -0
- package/data/craftbook-templates/re/release-announcement/art.json +14 -10
- package/data/craftbook-templates/re/release-announcement/logo.webp +0 -0
- package/data/craftbook-templates/re/release-artifact-sanity-check/art.json +14 -10
- package/data/craftbook-templates/re/release-artifact-sanity-check/logo.webp +0 -0
- package/data/craftbook-templates/re/release-notes/art.json +13 -9
- package/data/craftbook-templates/re/release-notes/logo.webp +0 -0
- package/data/craftbook-templates/re/release-pipeline-ci/art.json +14 -10
- package/data/craftbook-templates/re/release-pipeline-ci/logo.webp +0 -0
- package/data/craftbook-templates/re/release-readiness-review/art.json +13 -9
- package/data/craftbook-templates/re/release-readiness-review/logo.webp +0 -0
- package/data/craftbook-templates/re/reliability-review/art.json +13 -8
- package/data/craftbook-templates/re/reliability-review/logo.webp +0 -0
- package/data/craftbook-templates/re/report-pdf/art.json +14 -10
- package/data/craftbook-templates/re/report-pdf/logo.webp +0 -0
- package/data/craftbook-templates/re/research-report/art.json +14 -10
- package/data/craftbook-templates/re/research-report/logo.webp +0 -0
- package/data/craftbook-templates/re/research-to-document/art.json +14 -10
- package/data/craftbook-templates/re/research-to-document/logo.webp +0 -0
- package/data/craftbook-templates/re/rest-api/art.json +13 -9
- package/data/craftbook-templates/re/rest-api/logo.webp +0 -0
- package/data/craftbook-templates/re/resume-cv/art.json +13 -9
- package/data/craftbook-templates/re/resume-cv/logo.webp +0 -0
- package/data/craftbook-templates/re/review-code-folder/art.json +17 -0
- package/data/craftbook-templates/re/review-code-folder/logo.webp +0 -0
- package/data/craftbook-templates/re/review-code-folder/manifest.json +1 -0
- package/data/craftbook-templates/re/reviewer-loop/art.json +13 -8
- package/data/craftbook-templates/re/reviewer-loop/logo.webp +0 -0
- package/data/craftbook-templates/ro/rollback-plan/art.json +14 -10
- package/data/craftbook-templates/ro/rollback-plan/logo.webp +0 -0
- package/data/craftbook-templates/ro/root-cause-investigation/art.json +13 -8
- package/data/craftbook-templates/ro/root-cause-investigation/logo.webp +0 -0
- package/data/craftbook-templates/ro/rough-cut-assembly/art.json +13 -9
- package/data/craftbook-templates/ro/rough-cut-assembly/logo.webp +0 -0
- package/data/craftbook-templates/ru/runbook/art.json +13 -8
- package/data/craftbook-templates/ru/runbook/logo.webp +0 -0
- package/data/craftbook-templates/sc/schema-migration/art.json +14 -10
- package/data/craftbook-templates/sc/schema-migration/logo.webp +0 -0
- package/data/craftbook-templates/sc/scrape-to-structured/art.json +13 -9
- package/data/craftbook-templates/sc/scrape-to-structured/logo.webp +0 -0
- package/data/craftbook-templates/sc/script-automation/art.json +13 -8
- package/data/craftbook-templates/sc/script-automation/logo.webp +0 -0
- package/data/craftbook-templates/sd/sdk-wrapper/art.json +13 -9
- package/data/craftbook-templates/sd/sdk-wrapper/logo.webp +0 -0
- package/data/craftbook-templates/se/seasonal-maintenance-sweep/art.json +13 -9
- package/data/craftbook-templates/se/seasonal-maintenance-sweep/logo.webp +0 -0
- package/data/craftbook-templates/se/security-architecture-review/art.json +13 -8
- package/data/craftbook-templates/se/security-architecture-review/logo.webp +0 -0
- package/data/craftbook-templates/se/seo-meta-pack/art.json +14 -10
- package/data/craftbook-templates/se/seo-meta-pack/logo.webp +0 -0
- package/data/craftbook-templates/sh/ship/art.json +13 -8
- package/data/craftbook-templates/sh/ship/logo.webp +0 -0
- package/data/craftbook-templates/so/social-digest/art.json +17 -0
- package/data/craftbook-templates/so/social-digest/logo.webp +0 -0
- package/data/craftbook-templates/so/social-thread/art.json +13 -9
- package/data/craftbook-templates/so/social-thread/logo.webp +0 -0
- package/data/craftbook-templates/so/source-quality-audit/art.json +13 -8
- package/data/craftbook-templates/so/source-quality-audit/logo.webp +0 -0
- package/data/craftbook-templates/sp/spa-dashboard/art.json +13 -9
- package/data/craftbook-templates/sp/spa-dashboard/logo.webp +0 -0
- package/data/craftbook-templates/sp/spec-authoring/art.json +13 -9
- package/data/craftbook-templates/sp/spec-authoring/logo.webp +0 -0
- package/data/craftbook-templates/sp/spec-doc/art.json +13 -9
- package/data/craftbook-templates/sp/spec-doc/logo.webp +0 -0
- package/data/craftbook-templates/sp/spreadsheet-findings/art.json +17 -0
- package/data/craftbook-templates/sp/spreadsheet-findings/logo.webp +0 -0
- package/data/craftbook-templates/sp/spreadsheet-findings/manifest.json +1 -0
- package/data/craftbook-templates/sp/spreadsheet-model/art.json +13 -9
- package/data/craftbook-templates/sp/spreadsheet-model/logo.webp +0 -0
- package/data/craftbook-templates/sp/sprite-sheet/art.json +13 -9
- package/data/craftbook-templates/sp/sprite-sheet/logo.webp +0 -0
- package/data/craftbook-templates/sq/sql-analysis/art.json +13 -9
- package/data/craftbook-templates/sq/sql-analysis/logo.webp +0 -0
- package/data/craftbook-templates/st/standup-summary/art.json +13 -9
- package/data/craftbook-templates/st/standup-summary/logo.webp +0 -0
- package/data/craftbook-templates/st/state-machine/art.json +13 -8
- package/data/craftbook-templates/st/state-machine/logo.webp +0 -0
- package/data/craftbook-templates/st/status-report/art.json +13 -9
- package/data/craftbook-templates/st/status-report/logo.webp +0 -0
- package/data/craftbook-templates/su/subscription-audit/art.json +13 -8
- package/data/craftbook-templates/su/subscription-audit/logo.webp +0 -0
- package/data/craftbook-templates/su/subtitle-generator/art.json +13 -9
- package/data/craftbook-templates/su/subtitle-generator/logo.webp +0 -0
- package/data/craftbook-templates/su/summarize-long/art.json +14 -10
- package/data/craftbook-templates/su/summarize-long/logo.webp +0 -0
- package/data/craftbook-templates/su/survey-analysis/art.json +13 -9
- package/data/craftbook-templates/su/survey-analysis/logo.webp +0 -0
- package/data/craftbook-templates/sv/svg-animation/art.json +13 -9
- package/data/craftbook-templates/sv/svg-animation/logo.webp +0 -0
- package/data/craftbook-templates/ta/tailor-resume/art.json +13 -9
- package/data/craftbook-templates/ta/tailor-resume/logo.webp +0 -0
- package/data/craftbook-templates/te/technical-documentation/art.json +13 -9
- package/data/craftbook-templates/te/technical-documentation/logo.webp +0 -0
- package/data/craftbook-templates/te/test-coverage-review/art.json +13 -8
- package/data/craftbook-templates/te/test-coverage-review/logo.webp +0 -0
- package/data/craftbook-templates/te/test-suite-backfill/art.json +14 -9
- package/data/craftbook-templates/te/test-suite-backfill/logo.webp +0 -0
- package/data/craftbook-templates/th/thank-you-batch/art.json +13 -9
- package/data/craftbook-templates/th/thank-you-batch/logo.webp +0 -0
- package/data/craftbook-templates/th/thank-you-sweep/art.json +13 -9
- package/data/craftbook-templates/th/thank-you-sweep/logo.webp +0 -0
- package/data/craftbook-templates/th/threat-model/art.json +13 -9
- package/data/craftbook-templates/th/threat-model/logo.webp +0 -0
- package/data/craftbook-templates/th/thumbnail-generator/art.json +13 -9
- package/data/craftbook-templates/th/thumbnail-generator/logo.webp +0 -0
- package/data/craftbook-templates/ti/tidy-spreadsheet/art.json +17 -0
- package/data/craftbook-templates/ti/tidy-spreadsheet/logo.webp +0 -0
- package/data/craftbook-templates/ti/tidy-spreadsheet/manifest.json +1 -0
- package/data/craftbook-templates/ti/tileset-batch/art.json +13 -9
- package/data/craftbook-templates/ti/tileset-batch/logo.webp +0 -0
- package/data/craftbook-templates/to/tone-rewrite/art.json +14 -10
- package/data/craftbook-templates/to/tone-rewrite/logo.webp +0 -0
- package/data/craftbook-templates/to/topic-explainer/art.json +14 -10
- package/data/craftbook-templates/to/topic-explainer/logo.webp +0 -0
- package/data/craftbook-templates/tr/transcribe-and-shownotes/art.json +13 -9
- package/data/craftbook-templates/tr/transcribe-and-shownotes/logo.webp +0 -0
- package/data/craftbook-templates/tr/transcribe-audio/art.json +13 -9
- package/data/craftbook-templates/tr/transcribe-audio/logo.webp +0 -0
- package/data/craftbook-templates/tr/transcribe-index/art.json +13 -9
- package/data/craftbook-templates/tr/transcribe-index/logo.webp +0 -0
- package/data/craftbook-templates/tr/translate-content/art.json +17 -0
- package/data/craftbook-templates/tr/translate-content/logo.webp +0 -0
- package/data/craftbook-templates/ty/type-safety-pass/art.json +14 -9
- package/data/craftbook-templates/ty/type-safety-pass/logo.webp +0 -0
- package/data/craftbook-templates/ux/ux-update/art.json +14 -9
- package/data/craftbook-templates/ux/ux-update/logo.webp +0 -0
- package/data/craftbook-templates/ve/version-bump/art.json +13 -9
- package/data/craftbook-templates/ve/version-bump/logo.webp +0 -0
- package/data/craftbook-templates/vi/video-storyboard/art.json +13 -9
- package/data/craftbook-templates/vi/video-storyboard/logo.webp +0 -0
- package/data/craftbook-templates/vi/visit-prep/art.json +13 -9
- package/data/craftbook-templates/vi/visit-prep/logo.webp +0 -0
- package/data/craftbook-templates/vo/voiceover-script/art.json +13 -9
- package/data/craftbook-templates/vo/voiceover-script/logo.webp +0 -0
- package/data/craftbook-templates/we/weak-spot-drill/art.json +13 -9
- package/data/craftbook-templates/we/weak-spot-drill/logo.webp +0 -0
- package/data/craftbook-templates/we/web-app-crud/art.json +13 -9
- package/data/craftbook-templates/we/web-app-crud/logo.webp +0 -0
- package/data/craftbook-templates/we/web-component/art.json +13 -9
- package/data/craftbook-templates/we/web-component/logo.webp +0 -0
- package/data/craftbook-templates/we/webhook-handler/art.json +13 -9
- package/data/craftbook-templates/we/webhook-handler/logo.webp +0 -0
- package/data/craftbook-templates/we/week-plan/art.json +13 -9
- package/data/craftbook-templates/we/week-plan/logo.webp +0 -0
- package/data/craftbook-templates/we/weekly-menu-plan/art.json +13 -9
- package/data/craftbook-templates/we/weekly-menu-plan/logo.webp +0 -0
- package/data/craftbook-templates/we/weekly-pipeline-review/art.json +13 -9
- package/data/craftbook-templates/we/weekly-pipeline-review/logo.webp +0 -0
- package/data/craftbook-templates/we/weekly-review/art.json +13 -9
- package/data/craftbook-templates/we/weekly-review/logo.webp +0 -0
- package/data/craftbook-templates/we/weekly-walkthrough/art.json +13 -9
- package/data/craftbook-templates/we/weekly-walkthrough/logo.webp +0 -0
- package/data/craftbook-templates/wh/whitepaper/art.json +13 -9
- package/data/craftbook-templates/wh/whitepaper/logo.webp +0 -0
- package/data/craftbook-templates/ye/year-in-review/art.json +13 -9
- package/data/craftbook-templates/ye/year-in-review/logo.webp +0 -0
- package/data/craftbook-templates/yo/youtube-chapters-seo/art.json +13 -9
- package/data/craftbook-templates/yo/youtube-chapters-seo/logo.webp +0 -0
- package/data/image-models/index.json +1 -1
- package/data/image-models/mo/moss-image-sft-q4/manifest.json +38 -0
- package/data/image-models/mo/moss-image-sft-q4/versions/1.0.0/manifest.json +37 -0
- package/data/image-models/raw-index.json +1 -1
- package/data/knowledge-catalogs/be/bendyline-how-to-books/keywords.json +56 -0
- package/data/knowledge-catalogs/ca/caselaw-alaska-part-0001/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-nevada-part-0001/keywords.json +13 -0
- package/data/knowledge-catalogs/ca/caselaw-us-300-399-part-0001/keywords.json +14 -0
- package/data/knowledge-catalogs/ca/caselaw-us-347-349/keywords.json +17 -0
- package/data/knowledge-catalogs/ca/caselaw-utah-part-0001/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-utah-part-0002/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-washington-part-0001/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-washington-part-0002/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-washington-part-0003/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-washington-part-0004/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-washington-part-0005/keywords.json +12 -0
- package/data/knowledge-catalogs/ca/caselaw-wyoming-part-0001/keywords.json +12 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-aspnet-core-en/keywords.json +21 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-azure-ai-platform-en/keywords.json +27 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-azure-apps-compute-en/keywords.json +23 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-azure-data-aiot-en/keywords.json +26 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-azure-management-hybrid-en/keywords.json +28 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-azure-network-security-en/keywords.json +29 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-dotnet-en/keywords.json +21 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-entity-framework-en/keywords.json +14 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-microsoft-365-en/keywords.json +20 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-powershell-en/keywords.json +24 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-sql-server-en/keywords.json +27 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-windows-apps-en/keywords.json +18 -0
- package/data/knowledge-catalogs/mi/microsoftdocs-windows-server-en/keywords.json +28 -0
- package/data/knowledge-catalogs/re/regional-american-south/keywords.json +1700 -0
- package/data/knowledge-catalogs/re/regional-andes-amazon/keywords.json +750 -0
- package/data/knowledge-catalogs/re/regional-australia-nz/keywords.json +1281 -0
- package/data/knowledge-catalogs/re/regional-brazil/keywords.json +1125 -0
- package/data/knowledge-catalogs/re/regional-britain-ireland/keywords.json +3287 -0
- package/data/knowledge-catalogs/re/regional-california-southwest/keywords.json +1835 -0
- package/data/knowledge-catalogs/re/regional-canada-alaska/keywords.json +1184 -0
- package/data/knowledge-catalogs/re/regional-central-eastern-europe/keywords.json +1503 -0
- package/data/knowledge-catalogs/re/regional-east-asia/keywords.json +2836 -0
- package/data/knowledge-catalogs/re/regional-east-southern-africa/keywords.json +813 -0
- package/data/knowledge-catalogs/re/regional-mediterranean/keywords.json +2082 -0
- package/data/knowledge-catalogs/re/regional-mexico-central-america/keywords.json +1481 -0
- package/data/knowledge-catalogs/re/regional-middle-east/keywords.json +1272 -0
- package/data/knowledge-catalogs/re/regional-midwest/keywords.json +758 -0
- package/data/knowledge-catalogs/re/regional-north-africa/keywords.json +896 -0
- package/data/knowledge-catalogs/re/regional-northeast/keywords.json +1281 -0
- package/data/knowledge-catalogs/re/regional-northern-eurasia/keywords.json +346 -0
- package/data/knowledge-catalogs/re/regional-northern-europe/keywords.json +2688 -0
- package/data/knowledge-catalogs/re/regional-pacific-islands/keywords.json +973 -0
- package/data/knowledge-catalogs/re/regional-pacific-northwest/keywords.json +937 -0
- package/data/knowledge-catalogs/re/regional-rockies-plains/keywords.json +608 -0
- package/data/knowledge-catalogs/re/regional-south-asia/keywords.json +633 -0
- package/data/knowledge-catalogs/re/regional-southeast-asia/keywords.json +2697 -0
- package/data/knowledge-catalogs/re/regional-southern-cone/keywords.json +606 -0
- package/data/knowledge-catalogs/re/regional-west-central-africa/keywords.json +564 -0
- package/data/knowledge-catalogs/re/regional-western-europe/keywords.json +3247 -0
- package/data/knowledge-catalogs/wi/wikipedia-arts/keywords.json +5437 -0
- package/data/knowledge-catalogs/wi/wikipedia-astronomy/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-biology/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-business/keywords.json +5583 -0
- package/data/knowledge-catalogs/wi/wikipedia-film-tv/keywords.json +6386 -0
- package/data/knowledge-catalogs/wi/wikipedia-food-drink/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-games/keywords.json +5672 -0
- package/data/knowledge-catalogs/wi/wikipedia-language/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-law/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-literature/keywords.json +5719 -0
- package/data/knowledge-catalogs/wi/wikipedia-mathematics/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-medicine/keywords.json +16009 -0
- package/data/knowledge-catalogs/wi/wikipedia-military/keywords.json +5843 -0
- package/data/knowledge-catalogs/wi/wikipedia-music/keywords.json +6264 -0
- package/data/knowledge-catalogs/wi/wikipedia-politics/keywords.json +5447 -0
- package/data/knowledge-catalogs/wi/wikipedia-religion-philosophy/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-science/keywords.json +4009 -0
- package/data/knowledge-catalogs/wi/wikipedia-sports/keywords.json +5209 -0
- package/data/knowledge-catalogs/wi/wikipedia-technology/keywords.json +6537 -0
- package/data/knowledge-catalogs/wi/wikipedia-transportation/keywords.json +5989 -0
- package/data/project-types/ca/caregiving-binder/art.json +17 -0
- package/data/project-types/ca/caregiving-binder/logo.webp +0 -0
- package/data/project-types/ca/caregiving-binder/manifest.json +1 -0
- package/data/project-types/ch/checkers/art.json +17 -0
- package/data/project-types/ch/checkers/logo.webp +0 -0
- package/data/project-types/ch/checkers/manifest.json +1 -0
- package/data/project-types/ch/chess/art.json +17 -0
- package/data/project-types/ch/chess/logo.webp +0 -0
- package/data/project-types/ch/chess/manifest.json +1 -0
- package/data/project-types/da/data-analysis/art.json +17 -0
- package/data/project-types/da/data-analysis/logo.webp +0 -0
- package/data/project-types/da/data-analysis/manifest.json +22 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/about.md +18 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/manifest.json +26 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/mission.md +4 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/analytics.js +63 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.css +89 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/dashboard.js +180 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/datasets.js +44 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/index.html +199 -0
- package/data/project-types/da/data-analysis/versions/1.0.0/pages/insights.js +129 -0
- package/data/project-types/de/design-scheme/art.json +17 -0
- package/data/project-types/de/design-scheme/logo.webp +0 -0
- package/data/project-types/de/design-scheme/manifest.json +1 -0
- package/data/project-types/em/email/art.json +17 -0
- package/data/project-types/em/email/logo.webp +0 -0
- package/data/project-types/em/email/manifest.json +1 -0
- package/data/project-types/ev/event-planner/art.json +17 -0
- package/data/project-types/ev/event-planner/logo.webp +0 -0
- package/data/project-types/ev/event-planner/manifest.json +1 -0
- package/data/project-types/fi/fitness-coach/art.json +17 -0
- package/data/project-types/fi/fitness-coach/logo.webp +0 -0
- package/data/project-types/fi/fitness-coach/manifest.json +1 -0
- package/data/project-types/fl/flashcards/art.json +17 -0
- package/data/project-types/fl/flashcards/logo.webp +0 -0
- package/data/project-types/fl/flashcards/manifest.json +1 -0
- package/data/project-types/fr/freelance-office/art.json +17 -0
- package/data/project-types/fr/freelance-office/logo.webp +0 -0
- package/data/project-types/fr/freelance-office/manifest.json +1 -0
- package/data/project-types/fu/fundraiser-hq/art.json +17 -0
- package/data/project-types/fu/fundraiser-hq/logo.webp +0 -0
- package/data/project-types/fu/fundraiser-hq/manifest.json +1 -0
- package/data/project-types/go/go/art.json +17 -0
- package/data/project-types/go/go/logo.webp +0 -0
- package/data/project-types/go/go/manifest.json +1 -0
- package/data/project-types/ho/household-budget/art.json +17 -0
- package/data/project-types/ho/household-budget/logo.webp +0 -0
- package/data/project-types/ho/household-budget/manifest.json +1 -0
- package/data/project-types/ho/household-manual/art.json +17 -0
- package/data/project-types/ho/household-manual/logo.webp +0 -0
- package/data/project-types/ho/household-manual/manifest.json +1 -0
- package/data/project-types/im/image-feed/art.json +17 -0
- package/data/project-types/im/image-feed/logo.webp +0 -0
- package/data/project-types/im/image-feed/manifest.json +1 -0
- package/data/project-types/index.json +1 -1
- package/data/project-types/jo/job-hunt/art.json +17 -0
- package/data/project-types/jo/job-hunt/logo.webp +0 -0
- package/data/project-types/jo/job-hunt/manifest.json +1 -0
- package/data/project-types/ju/just-chat/art.json +17 -0
- package/data/project-types/ju/just-chat/logo.webp +0 -0
- package/data/project-types/ju/just-chat/manifest.json +1 -0
- package/data/project-types/la/language-trainer/art.json +17 -0
- package/data/project-types/la/language-trainer/logo.webp +0 -0
- package/data/project-types/la/language-trainer/manifest.json +1 -0
- package/data/project-types/li/life-binder/art.json +17 -0
- package/data/project-types/li/life-binder/logo.webp +0 -0
- package/data/project-types/li/life-binder/manifest.json +1 -0
- package/data/project-types/me/meal-planner/art.json +17 -0
- package/data/project-types/me/meal-planner/logo.webp +0 -0
- package/data/project-types/me/meal-planner/manifest.json +1 -0
- package/data/project-types/me/media-library/art.json +17 -0
- package/data/project-types/me/media-library/logo.webp +0 -0
- package/data/project-types/me/media-library/manifest.json +23 -0
- package/data/project-types/me/media-library/versions/1.0.0/about.md +17 -0
- package/data/project-types/me/media-library/versions/1.0.0/manifest.json +20 -0
- package/data/project-types/me/media-library/versions/1.0.0/mission.md +6 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/alpine.svg +1 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/coast.svg +1 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/evening.svg +1 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/forest.svg +1 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/light.webm +0 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/notes.wav +0 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/assets/study.svg +1 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.css +85 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/gallery.js +165 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/index.html +128 -0
- package/data/project-types/me/media-library/versions/1.0.0/pages/media-files.js +41 -0
- package/data/project-types/no/novel-writing-room/art.json +17 -0
- package/data/project-types/no/novel-writing-room/logo.webp +0 -0
- package/data/project-types/no/novel-writing-room/manifest.json +1 -0
- package/data/project-types/raw-index.json +1 -1
- package/data/project-types/so/social-feed/art.json +17 -0
- package/data/project-types/so/social-feed/logo.webp +0 -0
- package/data/project-types/so/social-feed/manifest.json +1 -0
- package/data/project-types/so/software-project/art.json +17 -0
- package/data/project-types/so/software-project/logo.webp +0 -0
- package/data/project-types/so/software-project/manifest.json +1 -0
- package/data/project-types/tr/trip-planner/art.json +17 -0
- package/data/project-types/tr/trip-planner/logo.webp +0 -0
- package/data/project-types/tr/trip-planner/manifest.json +1 -0
- package/data/project-types/wo/word-clues/art.json +17 -0
- package/data/project-types/wo/word-clues/logo.webp +0 -0
- package/data/project-types/wo/word-clues/manifest.json +1 -0
- package/package.json +2 -1
- package/schemas/knowledge-catalog-keywords.schema.json +50 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"promptVersion": "workshop-mark-cutout-v3",
|
|
4
|
+
"subject": "a heart beside a small seven-compartment pill organizer",
|
|
5
|
+
"sourceSummary": "Coordinate a loved one's care without losing the thread.",
|
|
6
|
+
"styleReference": "wikipedia-astronomy",
|
|
7
|
+
"setReference": "data-dictionary-cutout-v3",
|
|
8
|
+
"sheet": "round3-projects",
|
|
9
|
+
"cell": 5,
|
|
10
|
+
"fill": 0.88,
|
|
11
|
+
"shadow": {
|
|
12
|
+
"color": "#1c120a",
|
|
13
|
+
"opacity": 0.38,
|
|
14
|
+
"blur": 0.035,
|
|
15
|
+
"offsetY": 0.025
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"promptVersion": "workshop-mark-cutout-v3",
|
|
4
|
+
"subject": "a short stack of round checker pieces in two colors, the top one wearing a small crown",
|
|
5
|
+
"sourceSummary": "Play checkers against a gezel opponent on a live board.",
|
|
6
|
+
"styleReference": "wikipedia-astronomy",
|
|
7
|
+
"setReference": "data-dictionary-cutout-v3",
|
|
8
|
+
"sheet": "s02",
|
|
9
|
+
"cell": 1,
|
|
10
|
+
"fill": 0.88,
|
|
11
|
+
"shadow": {
|
|
12
|
+
"color": "#1c120a",
|
|
13
|
+
"opacity": 0.38,
|
|
14
|
+
"blur": 0.035,
|
|
15
|
+
"offsetY": 0.025
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"promptVersion": "workshop-mark-cutout-v3",
|
|
4
|
+
"subject": "a single chess knight piece",
|
|
5
|
+
"sourceSummary": "Play a complete game of chess against a gezel opponent on a live board.",
|
|
6
|
+
"styleReference": "wikipedia-astronomy",
|
|
7
|
+
"setReference": "data-dictionary-cutout-v3",
|
|
8
|
+
"sheet": "round3-projects",
|
|
9
|
+
"cell": 4,
|
|
10
|
+
"fill": 0.88,
|
|
11
|
+
"shadow": {
|
|
12
|
+
"color": "#1c120a",
|
|
13
|
+
"opacity": 0.38,
|
|
14
|
+
"blur": 0.035,
|
|
15
|
+
"offsetY": 0.025
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"promptVersion": "workshop-mark-cutout-v3",
|
|
4
|
+
"subject": "a tilted spreadsheet grid with a small pie chart standing on it",
|
|
5
|
+
"sourceSummary": "Explore the datasets in a project folder.",
|
|
6
|
+
"styleReference": "wikipedia-astronomy",
|
|
7
|
+
"setReference": "data-dictionary-cutout-v3",
|
|
8
|
+
"sheet": "s01",
|
|
9
|
+
"cell": 6,
|
|
10
|
+
"fill": 0.88,
|
|
11
|
+
"shadow": {
|
|
12
|
+
"color": "#1c120a",
|
|
13
|
+
"opacity": 0.38,
|
|
14
|
+
"blur": 0.035,
|
|
15
|
+
"offsetY": 0.025
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "project-type",
|
|
4
|
+
"id": "data-analysis",
|
|
5
|
+
"name": "Data Analysis",
|
|
6
|
+
"description": "Explore the datasets in a project folder. A live dashboard finds spreadsheets and data files and opens them in Gezel's file viewers.",
|
|
7
|
+
"tags": [
|
|
8
|
+
"data",
|
|
9
|
+
"analysis",
|
|
10
|
+
"spreadsheets",
|
|
11
|
+
"csv",
|
|
12
|
+
"dashboard",
|
|
13
|
+
"reports"
|
|
14
|
+
],
|
|
15
|
+
"category": "data",
|
|
16
|
+
"icon": "chart",
|
|
17
|
+
"maintainer": {
|
|
18
|
+
"name": "Gezel"
|
|
19
|
+
},
|
|
20
|
+
"logo": "logo.webp",
|
|
21
|
+
"license": "MIT"
|
|
22
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Data Analysis
|
|
2
|
+
|
|
3
|
+
This project explores the datasets in its workspace. Its dashboard discovers
|
|
4
|
+
spreadsheets, delimited tables, structured data, and database files in the
|
|
5
|
+
project folder and its subfolders. Open a file to use Gezel's existing viewer.
|
|
6
|
+
|
|
7
|
+
Start with the question the person wants to answer. Inspect the relevant data,
|
|
8
|
+
explain missing values and assumptions, and support conclusions with evidence.
|
|
9
|
+
Keep original datasets intact; save derived data and reports as separate files.
|
|
10
|
+
|
|
11
|
+
The dashboard lists files and metadata, and uses Gezel's shared table APIs to
|
|
12
|
+
show row counts, numeric summaries, column types, and charts for indexed tables.
|
|
13
|
+
Charts start with record counts and offer explicit numeric averages. These are
|
|
14
|
+
descriptive summaries of the indexed snapshot, not conclusions about causality.
|
|
15
|
+
Unindexed files remain browsable; missing query support is explained on the page.
|
|
16
|
+
Hidden folders, document companion
|
|
17
|
+
folders, and dependency folders are omitted. Large or partly unreadable folders
|
|
18
|
+
are explicitly labeled as incomplete.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"releasedAt": "2026-10-19T00:00:00Z",
|
|
5
|
+
"extends": "data-analysis",
|
|
6
|
+
"nameTemplate": "Data Analysis",
|
|
7
|
+
"aboutTemplate": "about.md",
|
|
8
|
+
"missionTemplate": "mission.md",
|
|
9
|
+
"gezels": [
|
|
10
|
+
{
|
|
11
|
+
"templateId": "researcher",
|
|
12
|
+
"voorman": true
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"pages": {
|
|
16
|
+
"entry": "index.html",
|
|
17
|
+
"api": 1,
|
|
18
|
+
"reads": [
|
|
19
|
+
{
|
|
20
|
+
"source": "workspace",
|
|
21
|
+
"path": ".",
|
|
22
|
+
"subtree": true
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
- Make the project's datasets easy to find and open.
|
|
2
|
+
- Answer the user's questions with reproducible analysis and clear evidence.
|
|
3
|
+
- Preserve source data and explain uncertainty, assumptions, and limitations.
|
|
4
|
+
- Keep derived datasets, reports, and notes easy to trace back to their sources.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
'use strict';
|
|
3
|
+
const quote = (name) => `"${String(name).replaceAll('"', '""')}"`;
|
|
4
|
+
const numeric = (columns) => columns.filter((c) => ['BIGINT', 'DOUBLE'].includes(c.type) && c.role !== 'identifier');
|
|
5
|
+
const groups = (columns) => columns.filter((c) => c.type !== 'JSON').sort((a, b) => {
|
|
6
|
+
const rank = (c) => c.role === 'dimension' ? 0 : c.role === 'time' ? 1 : c.role === 'identifier' ? 3 : 2;
|
|
7
|
+
return rank(a) - rank(b);
|
|
8
|
+
});
|
|
9
|
+
function summary(table, columns) {
|
|
10
|
+
const measures = numeric(columns).slice(0, 6);
|
|
11
|
+
const fields = ['count(*) AS row_count'];
|
|
12
|
+
measures.forEach((c, i) => {
|
|
13
|
+
for (const fn of ['count', 'min', 'max', 'avg']) fields.push(`${fn}(${quote(c.name)}) AS ${fn}_${i}`);
|
|
14
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
sql: `SELECT ${fields.join(', ')} FROM ${quote(table)}`,
|
|
17
|
+
measures,
|
|
18
|
+
sample(rows) {
|
|
19
|
+
const result = { row_count: rows.length };
|
|
20
|
+
measures.forEach((c, i) => {
|
|
21
|
+
const values = rows.map((r) => r[c.name]).filter((v) => v !== null && v !== undefined);
|
|
22
|
+
result[`count_${i}`] = values.length;
|
|
23
|
+
result[`min_${i}`] = values.length ? Math.min(...values) : null;
|
|
24
|
+
result[`max_${i}`] = values.length ? Math.max(...values) : null;
|
|
25
|
+
result[`avg_${i}`] = values.length ? values.reduce((a, b) => a + b, 0) / values.length : null;
|
|
26
|
+
});
|
|
27
|
+
return [result];
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function chart(table, group, measure) {
|
|
32
|
+
const time = ['DATE', 'TIMESTAMP'].includes(group.type);
|
|
33
|
+
const key = time ? `CAST(date_trunc('month', ${quote(group.name)}) AS VARCHAR)` : `CAST(${quote(group.name)} AS VARCHAR)`;
|
|
34
|
+
const value = measure ? `avg(${quote(measure.name)})` : 'count(*)';
|
|
35
|
+
return {
|
|
36
|
+
sql: `SELECT ${key} AS label, ${value} AS value FROM ${quote(table)} WHERE ${quote(group.name)} IS NOT NULL GROUP BY 1 ORDER BY ${time ? 'label DESC' : 'value DESC NULLS LAST, label ASC'} LIMIT 12`,
|
|
37
|
+
time,
|
|
38
|
+
sample(rows) {
|
|
39
|
+
const buckets = new Map();
|
|
40
|
+
for (const row of rows) {
|
|
41
|
+
if (row[group.name] == null) continue;
|
|
42
|
+
const label = time ? `${String(row[group.name]).slice(0, 7)}-01 00:00:00` : String(row[group.name]);
|
|
43
|
+
if (!buckets.has(label)) buckets.set(label, []);
|
|
44
|
+
buckets.get(label).push(row);
|
|
45
|
+
}
|
|
46
|
+
return [...buckets].map(([label, bucket]) => {
|
|
47
|
+
const values = measure ? bucket.map((r) => r[measure.name]).filter((v) => v != null) : [];
|
|
48
|
+
return { label, value: measure ? (values.length ? values.reduce((a, b) => a + b, 0) / values.length : null) : bucket.length };
|
|
49
|
+
}).sort((a, b) => time ? b.label.localeCompare(a.label) : (b.value ?? -Infinity) - (a.value ?? -Infinity) || a.label.localeCompare(b.label)).slice(0, 12);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function bars(rows) {
|
|
54
|
+
const values = rows.map((r) => Number(r.value)).filter(Number.isFinite);
|
|
55
|
+
const low = Math.min(0, ...values), high = Math.max(0, ...values);
|
|
56
|
+
const span = high - low || 1;
|
|
57
|
+
return { zero: -low / span * 100, rows: rows.map((row) => {
|
|
58
|
+
const value = Number(row.value);
|
|
59
|
+
return { ...row, left: (Math.min(0, value) - low) / span * 100, width: Math.abs(value) / span * 100 };
|
|
60
|
+
}) };
|
|
61
|
+
}
|
|
62
|
+
window.dataAnalysisQueries = { quote, numeric, groups, summary, chart, bars };
|
|
63
|
+
})();
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
--bg: #faf7f2; --surface: #fffdf9; --text: #2b2620; --text-muted: #71675c;
|
|
4
|
+
--border: #dcd4c8; --accent: #835333; --accent-soft: #eee5da; --danger: #a42b2b;
|
|
5
|
+
--radius-md: 6px; --radius-lg: 10px;
|
|
6
|
+
font-family: var(--font-body, system-ui, sans-serif); font-size: 16px;
|
|
7
|
+
}
|
|
8
|
+
@media (prefers-color-scheme: dark) {
|
|
9
|
+
:root { --bg: #1c1a17; --surface: #262320; --text: #efe9e0; --text-muted: #b9aea0; --border: #464039; --accent: #e2b38c; --accent-soft: #332b24; --danger: #ffaaaa; }
|
|
10
|
+
}
|
|
11
|
+
:root[data-theme="light"] { color-scheme: light; --bg: #faf7f2; --surface: #fffdf9; --text: #2b2620; --text-muted: #71675c; --border: #dcd4c8; --accent: #835333; --accent-soft: #eee5da; --danger: #a42b2b; }
|
|
12
|
+
:root[data-theme="dark"] { color-scheme: dark; --bg: #1c1a17; --surface: #262320; --text: #efe9e0; --text-muted: #b9aea0; --border: #464039; --accent: #e2b38c; --accent-soft: #332b24; --danger: #ffaaaa; }
|
|
13
|
+
* { box-sizing: border-box; }
|
|
14
|
+
[hidden] { display: none !important; }
|
|
15
|
+
body { margin: 0; background: var(--bg); color: var(--text); line-height: 1.5; }
|
|
16
|
+
main { max-width: 1040px; margin: 0 auto; padding: clamp(16px, 4vw, 44px); }
|
|
17
|
+
h1, h2, h3 { font-family: var(--font-heading, Georgia, serif); font-weight: 400; line-height: 1.25; }
|
|
18
|
+
h1 { font-size: clamp(1.8rem, 5vw, 2.5rem); margin: 0; }
|
|
19
|
+
h2 { font-size: 1.3rem; margin: 0; }
|
|
20
|
+
h3 { font-size: 1.15rem; margin-top: 0; }
|
|
21
|
+
p { margin: 0 0 12px; }
|
|
22
|
+
header, .section-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
|
|
23
|
+
header { margin: 24px 0; }
|
|
24
|
+
.eyebrow { color: var(--accent); font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; margin-bottom: 8px; }
|
|
25
|
+
.intro { color: var(--text-muted); margin: 8px 0 0; }
|
|
26
|
+
button, input, select { font: inherit; font-family: var(--font-ui, system-ui, sans-serif); border: 1px solid var(--border); border-radius: var(--radius-md); color: var(--text); background: var(--surface); min-height: 44px; padding: 9px 12px; }
|
|
27
|
+
button { cursor: pointer; box-shadow: inset 0 1px 0 color-mix(in srgb, var(--text) 5%, transparent), 0 1px 2px #0000000d; }
|
|
28
|
+
button:hover { background: var(--accent-soft); border-color: var(--accent); }
|
|
29
|
+
button:disabled { cursor: wait; opacity: .6; }
|
|
30
|
+
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
|
|
31
|
+
.summary { display: grid; grid-template-columns: repeat(3, 1fr); margin: 24px 0 32px; border-block: 1px solid var(--border); }
|
|
32
|
+
.summary > div { padding: 16px 12px 16px 0; }
|
|
33
|
+
dt { color: var(--text-muted); font-size: .85rem; }
|
|
34
|
+
dd { margin: 4px 0 0; font-size: 1.5rem; font-variant-numeric: tabular-nums; }
|
|
35
|
+
.muted, .hint, footer, #status { color: var(--text-muted); font-size: .85rem; }
|
|
36
|
+
.section-heading p { margin: 0; }
|
|
37
|
+
.hint { margin: 12px 0 20px; }
|
|
38
|
+
.filters { display: flex; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; }
|
|
39
|
+
.filters label { font-size: .8rem; color: var(--text-muted); flex: 1 1 130px; min-width: 0; }
|
|
40
|
+
.filters label:first-child { flex: 3 1 200px; }
|
|
41
|
+
input, select { display: block; width: 100%; margin-top: 5px; font-size: .9rem; }
|
|
42
|
+
.file-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--border); }
|
|
43
|
+
.file-list li { display: flex; align-items: center; gap: 14px; padding: 16px 0; border-bottom: 1px solid var(--border); }
|
|
44
|
+
.file-format { font-size: .72rem; font-weight: 600; color: var(--accent); background: var(--accent-soft); border-radius: var(--radius-md); padding: 10px 6px; min-width: 56px; text-align: center; }
|
|
45
|
+
.file-info { flex: 1; min-width: 0; }
|
|
46
|
+
.file-name { display: block; font-weight: 600; overflow-wrap: anywhere; }
|
|
47
|
+
.file-detail { color: var(--text-muted); font-size: .8rem; overflow-wrap: anywhere; }
|
|
48
|
+
.file-open { color: var(--accent); flex-shrink: 0; font-size: .85rem; }
|
|
49
|
+
.empty { text-align: center; padding: 32px 16px; background: var(--surface); border: 1px dashed var(--border); border-radius: var(--radius-lg); color: var(--text-muted); }
|
|
50
|
+
.empty p { margin-bottom: 0; }
|
|
51
|
+
#error { color: var(--danger); }
|
|
52
|
+
.notice, [data-gezel-demo-banner] { padding: 12px 16px; background: var(--accent-soft); border-radius: var(--radius-md); font-size: .85rem; }
|
|
53
|
+
[data-gezel-demo-banner] { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
|
|
54
|
+
section + section { margin-top: 32px; }
|
|
55
|
+
#reports-section h2 { margin-bottom: 16px; }
|
|
56
|
+
footer { margin-top: 28px; }
|
|
57
|
+
.source-line { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; font-size: .85rem; overflow-wrap: anywhere; }
|
|
58
|
+
.table-summary { margin-block: 16px 24px; }
|
|
59
|
+
#table-stamp { font-size: .85rem; overflow-wrap: anywhere; }
|
|
60
|
+
#insights-error { color: var(--danger); font-size: .85rem; overflow-wrap: anywhere; }
|
|
61
|
+
.chart-figure { margin: 20px 0 28px; }
|
|
62
|
+
figcaption { color: var(--text-muted); font-size: .85rem; margin-bottom: 16px; }
|
|
63
|
+
#chart { list-style: none; padding: 0; margin: 0; }
|
|
64
|
+
#chart li { display: grid; grid-template-columns: minmax(70px, 1fr) minmax(80px, 3fr) minmax(56px, 1fr); gap: 12px; align-items: center; font-size: .85rem; margin-block: 10px; }
|
|
65
|
+
#chart li > :first-child { overflow-wrap: anywhere; }
|
|
66
|
+
#chart li > :last-child { text-align: right; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
67
|
+
.bar-track { display: block; position: relative; height: 24px; background: var(--accent-soft); }
|
|
68
|
+
.bar-track::after { content: ''; position: absolute; left: var(--zero, 0%); top: -3px; bottom: -3px; border-left: 1px solid var(--text-muted); }
|
|
69
|
+
.bar { position: absolute; height: 100%; background: var(--accent); }
|
|
70
|
+
details { border-top: 1px solid var(--border); padding-block: 12px; }
|
|
71
|
+
summary { cursor: pointer; font-weight: 600; padding: 8px 0; }
|
|
72
|
+
.table-scroll { overflow-x: auto; }
|
|
73
|
+
.table-scroll th { font-weight: 600; }
|
|
74
|
+
.table-scroll td { font-variant-numeric: tabular-nums; }
|
|
75
|
+
#numeric-summary th, #numeric-summary td { white-space: nowrap; }
|
|
76
|
+
#schema-body th, #schema-body td { max-width: 240px; overflow-wrap: anywhere; }
|
|
77
|
+
dialog { max-width: min(540px, calc(100% - 32px)); border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--surface); color: var(--text); padding: 24px; }
|
|
78
|
+
dialog::backdrop { background: #0008; }
|
|
79
|
+
dialog h2 { overflow-wrap: anywhere; }
|
|
80
|
+
dialog p { margin-top: 12px; }
|
|
81
|
+
table { border-collapse: collapse; width: 100%; margin-bottom: 20px; font-size: .85rem; }
|
|
82
|
+
th, td { text-align: left; padding: 8px; border-bottom: 1px solid var(--border); }
|
|
83
|
+
@media (max-width: 480px) {
|
|
84
|
+
.file-format { display: none; }
|
|
85
|
+
.file-list li { gap: 8px; }
|
|
86
|
+
.section-heading { align-items: flex-start; flex-direction: column; gap: 4px; }
|
|
87
|
+
dd { font-size: 1.2rem; }
|
|
88
|
+
[data-gezel-demo-banner] { align-items: flex-start; flex-direction: column; }
|
|
89
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { data: DATA, reports: REPORTS, extension, scan } = window.dataAnalysisFiles;
|
|
5
|
+
const $ = (id) => document.getElementById(id);
|
|
6
|
+
const api = window.gezel;
|
|
7
|
+
const demo = demoMode;
|
|
8
|
+
let files = [];
|
|
9
|
+
let busy = false;
|
|
10
|
+
let again = false;
|
|
11
|
+
let stopped = false;
|
|
12
|
+
let debounce;
|
|
13
|
+
const watches = new Map();
|
|
14
|
+
const sampleFiles = [
|
|
15
|
+
{ path: 'sales/quarterly-sales.csv', size: 12480, mtime: 1791849600000 },
|
|
16
|
+
{ path: 'sales/revenue-plan.xlsx', size: 48210, mtime: 1791763200000 },
|
|
17
|
+
{ path: 'customers.json', size: 22680, mtime: 1791676800000 },
|
|
18
|
+
{ path: 'research/survey-responses.tsv', size: 8640, mtime: 1791590400000 },
|
|
19
|
+
{ path: 'archive/orders.parquet', size: 3145728, mtime: 1791504000000 },
|
|
20
|
+
{ path: 'reports/quarterly-summary.pdf', size: 128040, mtime: 1791849600000 },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
function sizeLabel(size) {
|
|
24
|
+
if (size < 1024) return `${size} B`;
|
|
25
|
+
const units = ['KB', 'MB', 'GB', 'TB'];
|
|
26
|
+
let value = size / 1024;
|
|
27
|
+
let unit = 0;
|
|
28
|
+
while (value >= 1024 && unit < units.length - 1) { value /= 1024; unit++; }
|
|
29
|
+
return `${new Intl.NumberFormat(undefined, { maximumFractionDigits: 1 }).format(value)} ${units[unit]}`;
|
|
30
|
+
}
|
|
31
|
+
function message(id, text) { $(id).textContent = text; $(id).hidden = !text; }
|
|
32
|
+
function compare(a, b) {
|
|
33
|
+
const sort = $('sort').value;
|
|
34
|
+
const delta = sort === 'size' ? b.size - a.size : sort === 'modified' ? b.mtime - a.mtime : 0;
|
|
35
|
+
return delta || a.path.localeCompare(b.path, undefined, { numeric: true, sensitivity: 'base' });
|
|
36
|
+
}
|
|
37
|
+
function scheduleRefresh() {
|
|
38
|
+
clearTimeout(debounce);
|
|
39
|
+
debounce = setTimeout(() => { if (!stopped) void refresh(); }, 200);
|
|
40
|
+
}
|
|
41
|
+
async function discover() {
|
|
42
|
+
const result = await scan((path) => api.data.list(path), { cancelled: () => stopped });
|
|
43
|
+
const visited = new Set(result.folders);
|
|
44
|
+
if (!stopped) {
|
|
45
|
+
for (const [path, stop] of watches) {
|
|
46
|
+
if (!visited.has(path)) { stop(); watches.delete(path); }
|
|
47
|
+
}
|
|
48
|
+
for (const path of visited) {
|
|
49
|
+
if (!watches.has(path)) watches.set(path, api.data.watch(path, scheduleRefresh));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const notes = [];
|
|
53
|
+
if (result.limited) notes.push(`This is a partial listing: scanning is limited to ${result.maxFolders} folders and ${result.maxFiles.toLocaleString()} files.`);
|
|
54
|
+
if (result.skipped) notes.push(`${result.skipped} subfolder${result.skipped === 1 ? '' : 's'} could not be read. Refresh to try again.`);
|
|
55
|
+
return { files: result.files, notice: notes.join(' ') };
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async function openFile(file) {
|
|
59
|
+
message('error', '');
|
|
60
|
+
if (demo) {
|
|
61
|
+
$('demo-title').textContent = file.path;
|
|
62
|
+
$('demo-preview').showModal();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (api.page.mode !== 'embedded' || typeof api.data.open !== 'function') {
|
|
66
|
+
message('error', 'Open this project in the latest Gezel app to use its file viewers.');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
try { await api.data.open(file.path); }
|
|
70
|
+
catch (error) { message('error', `Could not open ${file.path}: ${error.message || 'Please try again.'}`); }
|
|
71
|
+
}
|
|
72
|
+
function row(file) {
|
|
73
|
+
const li = document.createElement('li');
|
|
74
|
+
const badge = document.createElement('span');
|
|
75
|
+
badge.className = 'file-format';
|
|
76
|
+
badge.textContent = extension(file.path).toUpperCase();
|
|
77
|
+
const info = document.createElement('div');
|
|
78
|
+
info.className = 'file-info';
|
|
79
|
+
const name = document.createElement('span');
|
|
80
|
+
name.className = 'file-name';
|
|
81
|
+
name.textContent = file.path.split('/').pop();
|
|
82
|
+
const detail = document.createElement('span');
|
|
83
|
+
detail.className = 'file-detail';
|
|
84
|
+
const folder = file.path.includes('/') ? file.path.slice(0, file.path.lastIndexOf('/')) : 'Project folder';
|
|
85
|
+
const date = file.mtime ? new Date(file.mtime).toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' }) : 'Date unavailable';
|
|
86
|
+
detail.textContent = `${folder} · ${sizeLabel(file.size)} · ${date}`;
|
|
87
|
+
info.append(name, detail);
|
|
88
|
+
const open = document.createElement('button');
|
|
89
|
+
open.type = 'button';
|
|
90
|
+
open.className = 'file-open';
|
|
91
|
+
open.textContent = 'Open';
|
|
92
|
+
open.setAttribute('aria-label', `Open ${file.path}`);
|
|
93
|
+
open.addEventListener('click', () => { void openFile(file); });
|
|
94
|
+
li.append(badge, info, open);
|
|
95
|
+
return li;
|
|
96
|
+
}
|
|
97
|
+
function render() {
|
|
98
|
+
const datasets = files.filter((file) => DATA.has(extension(file.path)));
|
|
99
|
+
const formats = [...new Set(datasets.map((file) => extension(file.path)))].sort();
|
|
100
|
+
const chosen = $('format').value;
|
|
101
|
+
const all = document.createElement('option');
|
|
102
|
+
all.value = ''; all.textContent = 'All formats';
|
|
103
|
+
$('format').replaceChildren(all, ...formats.map((format) => {
|
|
104
|
+
const option = document.createElement('option');
|
|
105
|
+
option.value = format; option.textContent = format.toUpperCase();
|
|
106
|
+
return option;
|
|
107
|
+
}));
|
|
108
|
+
$('format').value = formats.includes(chosen) ? chosen : '';
|
|
109
|
+
const query = $('search').value.trim().toLowerCase();
|
|
110
|
+
const shown = datasets.filter((file) => file.path.toLowerCase().includes(query) && (!$('format').value || extension(file.path) === $('format').value)).sort(compare);
|
|
111
|
+
$('datasets').replaceChildren(...shown.map(row));
|
|
112
|
+
$('dataset-count').textContent = datasets.length.toLocaleString();
|
|
113
|
+
$('format-count').textContent = formats.length.toLocaleString();
|
|
114
|
+
$('total-size').textContent = sizeLabel(datasets.reduce((sum, file) => sum + file.size, 0));
|
|
115
|
+
$('empty').hidden = datasets.length > 0;
|
|
116
|
+
$('no-matches').hidden = datasets.length === 0 || shown.length > 0;
|
|
117
|
+
$('datasets').hidden = shown.length === 0;
|
|
118
|
+
const reports = files.filter((file) => REPORTS.has(extension(file.path)) && file.path.toLowerCase().includes(query)).sort(compare);
|
|
119
|
+
$('reports').replaceChildren(...reports.map(row));
|
|
120
|
+
$('reports-section').hidden = reports.length === 0;
|
|
121
|
+
$('status').textContent = `${shown.length} of ${datasets.length} dataset${datasets.length === 1 ? '' : 's'}`;
|
|
122
|
+
}
|
|
123
|
+
async function refresh() {
|
|
124
|
+
if (busy) { again = true; return; }
|
|
125
|
+
window.dataAnalysisInsights.refresh();
|
|
126
|
+
busy = true;
|
|
127
|
+
$('refresh').disabled = true;
|
|
128
|
+
$('datasets').setAttribute('aria-busy', 'true');
|
|
129
|
+
message('error', '');
|
|
130
|
+
try {
|
|
131
|
+
const result = demo ? { files: sampleFiles.map((file) => ({ ...file })), notice: '' } : await discover();
|
|
132
|
+
if (stopped) return;
|
|
133
|
+
files = result.files;
|
|
134
|
+
message('notice', result.notice);
|
|
135
|
+
render();
|
|
136
|
+
$('updated').textContent = demo ? 'Sample files' : `Updated ${new Date().toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' })}`;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
message('error', `Could not read the project folder: ${error.message || 'Please try again.'}`);
|
|
139
|
+
$('status').textContent = files.length ? 'Showing the previous listing.' : 'Folder unavailable. Use Refresh to try again.';
|
|
140
|
+
$('updated').textContent = 'Refresh needed';
|
|
141
|
+
} finally {
|
|
142
|
+
busy = false;
|
|
143
|
+
$('refresh').disabled = false;
|
|
144
|
+
$('datasets').removeAttribute('aria-busy');
|
|
145
|
+
if (again && !stopped) { again = false; scheduleRefresh(); }
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
$('search').addEventListener('input', render);
|
|
150
|
+
$('format').addEventListener('change', render);
|
|
151
|
+
$('sort').addEventListener('change', render);
|
|
152
|
+
$('refresh').addEventListener('click', () => { void refresh(); });
|
|
153
|
+
$('reset-demo').addEventListener('click', () => {
|
|
154
|
+
$('search').value = ''; $('format').value = ''; $('sort').value = 'name';
|
|
155
|
+
$('demo-preview').close();
|
|
156
|
+
window.dataAnalysisInsights.reset();
|
|
157
|
+
void refresh();
|
|
158
|
+
});
|
|
159
|
+
document.querySelector('[data-gezel-demo-banner]').hidden = !demo;
|
|
160
|
+
let stopTheme;
|
|
161
|
+
if (api) {
|
|
162
|
+
const applyTheme = ({ mode }) => { document.documentElement.dataset.theme = mode; };
|
|
163
|
+
applyTheme(api.ui.theme);
|
|
164
|
+
stopTheme = api.ui.onTheme(applyTheme);
|
|
165
|
+
}
|
|
166
|
+
// A periodic sweep also closes the gap between a listing and its first watch stamp.
|
|
167
|
+
const timer = demo ? null : setInterval(() => {
|
|
168
|
+
if (document.visibilityState !== 'hidden') void refresh();
|
|
169
|
+
}, 30000);
|
|
170
|
+
document.addEventListener('visibilitychange', () => {
|
|
171
|
+
if (!demo && document.visibilityState !== 'hidden') scheduleRefresh();
|
|
172
|
+
});
|
|
173
|
+
window.addEventListener('pagehide', () => {
|
|
174
|
+
stopped = true;
|
|
175
|
+
clearTimeout(debounce); clearInterval(timer);
|
|
176
|
+
for (const stop of watches.values()) stop();
|
|
177
|
+
stopTheme?.();
|
|
178
|
+
}, { once: true });
|
|
179
|
+
void refresh();
|
|
180
|
+
})();
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
(() => {
|
|
2
|
+
'use strict';
|
|
3
|
+
const data = new Set(['csv', 'tsv', 'tab', 'xlsx', 'xls', 'xlsm', 'xlsb', 'ods', 'numbers', 'json', 'jsonl', 'ndjson', 'parquet', 'arrow', 'feather', 'sqlite', 'sqlite3', 'db', 'duckdb', 'h5', 'hdf5', 'rds', 'rdata', 'sav', 'dta', 'sas7bdat', 'xml']);
|
|
4
|
+
const reports = new Set(['html', 'htm', 'pdf', 'md', 'docx', 'pptx', 'ipynb']);
|
|
5
|
+
const skip = new Set(['node_modules', '__pycache__', 'venv', 'env']);
|
|
6
|
+
const extension = (path) => (path.split('.').pop() || '').toLowerCase();
|
|
7
|
+
|
|
8
|
+
async function scan(list, { maxFolders = 100, maxFiles = 10000, cancelled = () => false } = {}) {
|
|
9
|
+
const queue = ['.'];
|
|
10
|
+
const folders = new Set();
|
|
11
|
+
const files = [];
|
|
12
|
+
let skipped = 0;
|
|
13
|
+
let seenFiles = 0;
|
|
14
|
+
let limited = false;
|
|
15
|
+
while (queue.length && folders.size < maxFolders && seenFiles < maxFiles && !cancelled()) {
|
|
16
|
+
const folder = queue.shift();
|
|
17
|
+
folders.add(folder);
|
|
18
|
+
let entries;
|
|
19
|
+
try { entries = await list(folder); }
|
|
20
|
+
catch (error) {
|
|
21
|
+
if (folder === '.') throw error;
|
|
22
|
+
skipped++;
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
for (const entry of entries) {
|
|
26
|
+
if (!entry.name || /[\\/]/.test(entry.name) || entry.name.startsWith('.') || entry.name.startsWith('~$')) continue;
|
|
27
|
+
const path = folder === '.' ? entry.name : `${folder}/${entry.name}`;
|
|
28
|
+
if (entry.kind === 'dir') {
|
|
29
|
+
if (!skip.has(entry.name) && !entry.name.endsWith('_files')) {
|
|
30
|
+
if (queue.length + folders.size < maxFolders) queue.push(path);
|
|
31
|
+
else limited = true;
|
|
32
|
+
}
|
|
33
|
+
} else {
|
|
34
|
+
seenFiles++;
|
|
35
|
+
const ext = extension(path);
|
|
36
|
+
if (data.has(ext) || reports.has(ext)) files.push({ path, size: entry.size, mtime: entry.mtime });
|
|
37
|
+
if (seenFiles >= maxFiles) { limited = true; break; }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { files, folders: [...folders], skipped, limited, maxFolders, maxFiles };
|
|
42
|
+
}
|
|
43
|
+
window.dataAnalysisFiles = { data, reports, extension, scan };
|
|
44
|
+
})();
|