dirpush 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/dirpush/SKILL.md +92 -0
- package/.agents/skills/dirpush/references/assets.md +48 -0
- package/.agents/skills/dirpush/references/authentication.md +59 -0
- package/.agents/skills/dirpush/references/recovery.md +34 -0
- package/.agents/skills/dirpush/references/submissions.md +43 -0
- package/LICENSE +21 -0
- package/README.md +64 -5
- package/THIRD_PARTY_NOTICES.md +10 -0
- package/bin/dirpush.cjs +13 -0
- package/drizzle/0000_init.sql +59 -0
- package/drizzle/0001_jazzy_masked_marvel.sql +9 -0
- package/drizzle/0002_loose_may_parker.sql +9 -0
- package/drizzle/0003_modern_lilandra.sql +6 -0
- package/drizzle/0004_deep_master_chief.sql +11 -0
- package/drizzle/meta/0000_snapshot.json +404 -0
- package/drizzle/meta/0001_snapshot.json +466 -0
- package/drizzle/meta/0002_snapshot.json +527 -0
- package/drizzle/meta/0003_snapshot.json +566 -0
- package/drizzle/meta/0004_snapshot.json +642 -0
- package/drizzle/meta/_journal.json +41 -0
- package/examples/workspace/identity.yaml +6 -0
- package/examples/workspace/permissions.yaml +29 -0
- package/examples/workspace/product.yaml +29 -0
- package/package.json +61 -6
- package/registry/LICENSE +396 -0
- package/registry/directories/1000-tools/directory.yaml +55 -0
- package/registry/directories/1000-tools/playbook.md +5 -0
- package/registry/directories/10015-io/directory.yaml +66 -0
- package/registry/directories/10015-io/playbook.md +9 -0
- package/registry/directories/10words/directory.yaml +53 -0
- package/registry/directories/10words/playbook.md +8 -0
- package/registry/directories/600-tools/directory.yaml +48 -0
- package/registry/directories/600-tools/playbook.md +1 -0
- package/registry/directories/a1bookmarks/directory.yaml +42 -0
- package/registry/directories/aback-launch/directory.yaml +54 -0
- package/registry/directories/aback-launch/playbook.md +1 -0
- package/registry/directories/acid-tools/directory.yaml +51 -0
- package/registry/directories/acid-tools/playbook.md +8 -0
- package/registry/directories/agenthunter/directory.yaml +53 -0
- package/registry/directories/ai-agents-directory/directory.yaml +49 -0
- package/registry/directories/ai-agents-directory/playbook.md +6 -0
- package/registry/directories/ai-agents-list/directory.yaml +46 -0
- package/registry/directories/ai-agents-list/playbook.md +1 -0
- package/registry/directories/ai-agents-listing/directory.yaml +76 -0
- package/registry/directories/ai-directories/directory.yaml +45 -0
- package/registry/directories/ai-directories/playbook.md +7 -0
- package/registry/directories/ai-dust/directory.yaml +68 -0
- package/registry/directories/ai-dust/playbook.md +1 -0
- package/registry/directories/ai-nav/directory.yaml +54 -0
- package/registry/directories/ai-nav/playbook.md +1 -0
- package/registry/directories/ai-respo/directory.yaml +43 -0
- package/registry/directories/ai-respo/playbook.md +1 -0
- package/registry/directories/ai-superhub/directory.yaml +65 -0
- package/registry/directories/ai-tool-list/directory.yaml +44 -0
- package/registry/directories/ai-tool-list/playbook.md +1 -0
- package/registry/directories/ai-tool-saver/directory.yaml +52 -0
- package/registry/directories/ai-tool-saver/playbook.md +1 -0
- package/registry/directories/ai-toolex/directory.yaml +46 -0
- package/registry/directories/ai-toolex/playbook.md +1 -0
- package/registry/directories/ai-toolz-dir/directory.yaml +60 -0
- package/registry/directories/ai-website-directory/directory.yaml +66 -0
- package/registry/directories/ai-website-directory/playbook.md +1 -0
- package/registry/directories/ai-x-collection/directory.yaml +45 -0
- package/registry/directories/ai-x-collection/playbook.md +1 -0
- package/registry/directories/aiagentstore/directory.yaml +52 -0
- package/registry/directories/aiagentstore/playbook.md +1 -0
- package/registry/directories/aidirs-best/directory.yaml +46 -0
- package/registry/directories/aifindy/directory.yaml +44 -0
- package/registry/directories/aifindy/playbook.md +1 -0
- package/registry/directories/aihubs/directory.yaml +44 -0
- package/registry/directories/aihubs/playbook.md +5 -0
- package/registry/directories/aihuntlist/directory.yaml +43 -0
- package/registry/directories/aihuntlist/playbook.md +6 -0
- package/registry/directories/aihustle/directory.yaml +51 -0
- package/registry/directories/aihustle/playbook.md +5 -0
- package/registry/directories/ailaunch-space/directory.yaml +44 -0
- package/registry/directories/ailaunch-space/playbook.md +6 -0
- package/registry/directories/ailib/directory.yaml +64 -0
- package/registry/directories/ailib/playbook.md +1 -0
- package/registry/directories/aimatch-pro/directory.yaml +42 -0
- package/registry/directories/aimatch-pro/playbook.md +1 -0
- package/registry/directories/ainave/directory.yaml +71 -0
- package/registry/directories/ainave/playbook.md +10 -0
- package/registry/directories/aitechviral/directory.yaml +47 -0
- package/registry/directories/aitechviral/playbook.md +10 -0
- package/registry/directories/aitogrow/directory.yaml +52 -0
- package/registry/directories/aitogrow/playbook.md +6 -0
- package/registry/directories/aitoolhunt/directory.yaml +43 -0
- package/registry/directories/aitoolhunt/playbook.md +5 -0
- package/registry/directories/aitools-fyi/directory.yaml +52 -0
- package/registry/directories/aitools-inc/directory.yaml +48 -0
- package/registry/directories/aitools-inc/playbook.md +1 -0
- package/registry/directories/aitoolsdirectory/directory.yaml +73 -0
- package/registry/directories/aitoolsdirectory/playbook.md +8 -0
- package/registry/directories/aitoolshunt/directory.yaml +64 -0
- package/registry/directories/aitoolshunt/playbook.md +6 -0
- package/registry/directories/aitoolslist/directory.yaml +59 -0
- package/registry/directories/aitoolslist/playbook.md +6 -0
- package/registry/directories/aitoolsmagazine/directory.yaml +46 -0
- package/registry/directories/aitoolsmagazine/playbook.md +5 -0
- package/registry/directories/aitoolsmarketer/directory.yaml +56 -0
- package/registry/directories/aitoolsmarketer/playbook.md +7 -0
- package/registry/directories/aitooltrek/directory.yaml +47 -0
- package/registry/directories/aitooltrek/playbook.md +6 -0
- package/registry/directories/aitop10-tools/directory.yaml +44 -0
- package/registry/directories/aitop10-tools/playbook.md +5 -0
- package/registry/directories/aitoptools/directory.yaml +74 -0
- package/registry/directories/aitoptools/playbook.md +1 -0
- package/registry/directories/aiwithme/directory.yaml +54 -0
- package/registry/directories/aiwithme/playbook.md +10 -0
- package/registry/directories/all-in-ai-tools/directory.yaml +51 -0
- package/registry/directories/all-in-ai-tools/playbook.md +1 -0
- package/registry/directories/allmcps/directory.yaml +55 -0
- package/registry/directories/allmcps/playbook.md +7 -0
- package/registry/directories/alltopstartups/directory.yaml +43 -0
- package/registry/directories/altern-ai/directory.yaml +50 -0
- package/registry/directories/altern-ai/playbook.md +6 -0
- package/registry/directories/alternative-tools/directory.yaml +46 -0
- package/registry/directories/alternative-tools/playbook.md +4 -0
- package/registry/directories/alternativeto/directory.yaml +48 -0
- package/registry/directories/alternativeto/playbook.md +8 -0
- package/registry/directories/ant-directory/directory.yaml +52 -0
- package/registry/directories/ant-directory/playbook.md +1 -0
- package/registry/directories/app-scout/directory.yaml +60 -0
- package/registry/directories/app-scout/playbook.md +5 -0
- package/registry/directories/app-stack-builder/directory.yaml +71 -0
- package/registry/directories/appalist/directory.yaml +46 -0
- package/registry/directories/appalist/playbook.md +4 -0
- package/registry/directories/apprater/directory.yaml +65 -0
- package/registry/directories/apprater/playbook.md +1 -0
- package/registry/directories/appsumo/directory.yaml +45 -0
- package/registry/directories/appsumo/playbook.md +1 -0
- package/registry/directories/ask-ai-for-it/directory.yaml +45 -0
- package/registry/directories/ask-ai-for-it/playbook.md +1 -0
- package/registry/directories/auraplusplus/directory.yaml +56 -0
- package/registry/directories/auraplusplus/playbook.md +6 -0
- package/registry/directories/awesome-mcp-list/directory.yaml +45 -0
- package/registry/directories/awesome-mcp-list/playbook.md +7 -0
- package/registry/directories/awesome-mcp-lists/directory.yaml +44 -0
- package/registry/directories/awesome-mcp-lists/playbook.md +6 -0
- package/registry/directories/awesome-remote-mcp-servers/directory.yaml +46 -0
- package/registry/directories/awesome-remote-mcp-servers/playbook.md +8 -0
- package/registry/directories/awesome-tools/directory.yaml +55 -0
- package/registry/directories/awesome-tools/playbook.md +8 -0
- package/registry/directories/awesomeindie/directory.yaml +51 -0
- package/registry/directories/awesomeindie/playbook.md +7 -0
- package/registry/directories/axis-launch/directory.yaml +64 -0
- package/registry/directories/b2b-saas-market/directory.yaml +63 -0
- package/registry/directories/bai-tools/directory.yaml +53 -0
- package/registry/directories/bai-tools/playbook.md +7 -0
- package/registry/directories/basedtools/directory.yaml +59 -0
- package/registry/directories/basedtools/playbook.md +1 -0
- package/registry/directories/best-ai-org/directory.yaml +53 -0
- package/registry/directories/best-ai-org/playbook.md +1 -0
- package/registry/directories/best-of-ai/directory.yaml +57 -0
- package/registry/directories/best-of-ai/playbook.md +1 -0
- package/registry/directories/bestaito/directory.yaml +47 -0
- package/registry/directories/bestaito/playbook.md +6 -0
- package/registry/directories/bestofai/directory.yaml +45 -0
- package/registry/directories/bestofai/playbook.md +7 -0
- package/registry/directories/bestsky-tools/directory.yaml +44 -0
- package/registry/directories/bestsky-tools/playbook.md +5 -0
- package/registry/directories/betabound/directory.yaml +63 -0
- package/registry/directories/betabound/playbook.md +7 -0
- package/registry/directories/betalist/directory.yaml +52 -0
- package/registry/directories/betalist/playbook.md +11 -0
- package/registry/directories/betterbuys/directory.yaml +55 -0
- package/registry/directories/betterbuys/playbook.md +7 -0
- package/registry/directories/betterlaunch/directory.yaml +53 -0
- package/registry/directories/beyond-ai-tools/directory.yaml +43 -0
- package/registry/directories/beyond-ai-tools/playbook.md +1 -0
- package/registry/directories/billion-dollar-pitch-decks/directory.yaml +64 -0
- package/registry/directories/billion-dollar-pitch-decks/playbook.md +4 -0
- package/registry/directories/browserextension-dev/directory.yaml +55 -0
- package/registry/directories/browserextension-dev/playbook.md +7 -0
- package/registry/directories/bsdirectory/directory.yaml +68 -0
- package/registry/directories/bsdirectory/playbook.md +5 -0
- package/registry/directories/buildvoyage/directory.yaml +64 -0
- package/registry/directories/buildvoyage/playbook.md +1 -0
- package/registry/directories/built-here/directory.yaml +50 -0
- package/registry/directories/built-here/playbook.md +6 -0
- package/registry/directories/builtbyme/directory.yaml +55 -0
- package/registry/directories/builtbyme/playbook.md +7 -0
- package/registry/directories/builtineu/directory.yaml +70 -0
- package/registry/directories/builtineu/playbook.md +7 -0
- package/registry/directories/businesssoftware/directory.yaml +42 -0
- package/registry/directories/buy-sell-startups/directory.yaml +52 -0
- package/registry/directories/buy-sell-startups/playbook.md +5 -0
- package/registry/directories/claude-mcp-directory/directory.yaml +45 -0
- package/registry/directories/claude-mcp-directory/playbook.md +7 -0
- package/registry/directories/claude-plugin-directory/directory.yaml +48 -0
- package/registry/directories/claude-plugin-directory/playbook.md +7 -0
- package/registry/directories/cocoon-ai/directory.yaml +57 -0
- package/registry/directories/codehype/directory.yaml +68 -0
- package/registry/directories/codehype/playbook.md +7 -0
- package/registry/directories/collectai/directory.yaml +43 -0
- package/registry/directories/collectai/playbook.md +5 -0
- package/registry/directories/commune-launchpad/directory.yaml +51 -0
- package/registry/directories/confettisaas/directory.yaml +51 -0
- package/registry/directories/confettisaas/playbook.md +1 -0
- package/registry/directories/crowdstax/directory.yaml +54 -0
- package/registry/directories/crowdstax/playbook.md +6 -0
- package/registry/directories/crozdesk/directory.yaml +72 -0
- package/registry/directories/crozdesk/playbook.md +8 -0
- package/registry/directories/crypto-tools-directory/directory.yaml +60 -0
- package/registry/directories/crypto-tools-directory/playbook.md +6 -0
- package/registry/directories/ctrlaltship/directory.yaml +92 -0
- package/registry/directories/ctrlaltship/playbook.md +6 -0
- package/registry/directories/dachstartups/directory.yaml +49 -0
- package/registry/directories/dachstartups/playbook.md +4 -0
- package/registry/directories/dailypings/directory.yaml +51 -0
- package/registry/directories/dailypings/playbook.md +6 -0
- package/registry/directories/dang-ai/directory.yaml +44 -0
- package/registry/directories/dang-ai/playbook.md +1 -0
- package/registry/directories/daniellaunches/directory.yaml +47 -0
- package/registry/directories/daniellaunches/playbook.md +6 -0
- package/registry/directories/datalook/directory.yaml +60 -0
- package/registry/directories/dayslaunch/directory.yaml +46 -0
- package/registry/directories/dayslaunch/playbook.md +5 -0
- package/registry/directories/deeplaunch/directory.yaml +46 -0
- package/registry/directories/deeplaunch/playbook.md +6 -0
- package/registry/directories/desifounder-spotlight/directory.yaml +49 -0
- package/registry/directories/desifounder-spotlight/playbook.md +1 -0
- package/registry/directories/developers-digest-mcp/directory.yaml +46 -0
- package/registry/directories/developers-digest-mcp/playbook.md +7 -0
- package/registry/directories/devhunt/directory.yaml +53 -0
- package/registry/directories/devhunt/playbook.md +8 -0
- package/registry/directories/devpages/directory.yaml +62 -0
- package/registry/directories/devpages/playbook.md +7 -0
- package/registry/directories/devresourc-es/directory.yaml +49 -0
- package/registry/directories/devresourc-es/playbook.md +9 -0
- package/registry/directories/devtools-directory/directory.yaml +63 -0
- package/registry/directories/devtools-directory/playbook.md +7 -0
- package/registry/directories/dir-hub/directory.yaml +62 -0
- package/registry/directories/dir-hub/playbook.md +6 -0
- package/registry/directories/direct2app/directory.yaml +47 -0
- package/registry/directories/direct2app/playbook.md +5 -0
- package/registry/directories/directree/directory.yaml +56 -0
- package/registry/directories/directree/playbook.md +7 -0
- package/registry/directories/dirs-cc/directory.yaml +49 -0
- package/registry/directories/dirs-cc/playbook.md +1 -0
- package/registry/directories/dododirectory/directory.yaml +46 -0
- package/registry/directories/dododirectory/playbook.md +6 -0
- package/registry/directories/dofollowtools/directory.yaml +75 -0
- package/registry/directories/dofollowtools/playbook.md +7 -0
- package/registry/directories/dropyourai/directory.yaml +73 -0
- package/registry/directories/dynamite-ai/directory.yaml +59 -0
- package/registry/directories/dynamite-ai/playbook.md +1 -0
- package/registry/directories/earlyhunt/directory.yaml +44 -0
- package/registry/directories/earlyhunt/playbook.md +6 -0
- package/registry/directories/ebool/directory.yaml +72 -0
- package/registry/directories/ebool/playbook.md +8 -0
- package/registry/directories/eliteai-tools/directory.yaml +45 -0
- package/registry/directories/eliteai-tools/playbook.md +1 -0
- package/registry/directories/emoji-launch/directory.yaml +60 -0
- package/registry/directories/emoji-launch/playbook.md +1 -0
- package/registry/directories/enlisted/directory.yaml +48 -0
- package/registry/directories/enlisted/playbook.md +7 -0
- package/registry/directories/eu-software-alternatives/directory.yaml +87 -0
- package/registry/directories/eu-software-alternatives/playbook.md +5 -0
- package/registry/directories/eu-vetted/directory.yaml +64 -0
- package/registry/directories/eu-vetted/playbook.md +1 -0
- package/registry/directories/eubuilt/directory.yaml +77 -0
- package/registry/directories/eubuilt/playbook.md +5 -0
- package/registry/directories/euroalternative/directory.yaml +48 -0
- package/registry/directories/euroalternative/playbook.md +1 -0
- package/registry/directories/european-tech/directory.yaml +55 -0
- package/registry/directories/european-tech/playbook.md +5 -0
- package/registry/directories/europeanapps/directory.yaml +52 -0
- package/registry/directories/europeanapps/playbook.md +5 -0
- package/registry/directories/europeanstack/directory.yaml +66 -0
- package/registry/directories/europeanstack/playbook.md +7 -0
- package/registry/directories/eurotoolsindex/directory.yaml +68 -0
- package/registry/directories/eurotoolsindex/playbook.md +7 -0
- package/registry/directories/everydev-ai/directory.yaml +50 -0
- package/registry/directories/everydev-ai/playbook.md +6 -0
- package/registry/directories/faceless-directory/directory.yaml +52 -0
- package/registry/directories/fastd/directory.yaml +45 -0
- package/registry/directories/fastd/playbook.md +1 -0
- package/registry/directories/fastlaunch/directory.yaml +53 -0
- package/registry/directories/fastlaunch/playbook.md +10 -0
- package/registry/directories/favors/directory.yaml +72 -0
- package/registry/directories/favors/playbook.md +7 -0
- package/registry/directories/fazier/directory.yaml +44 -0
- package/registry/directories/fazier/playbook.md +8 -0
- package/registry/directories/featuredtool/directory.yaml +51 -0
- package/registry/directories/featuredtool/playbook.md +1 -0
- package/registry/directories/find-seo-tools/directory.yaml +72 -0
- package/registry/directories/find-seo-tools/playbook.md +1 -0
- package/registry/directories/findly-tools/directory.yaml +45 -0
- package/registry/directories/findly-tools/playbook.md +7 -0
- package/registry/directories/findstack/directory.yaml +46 -0
- package/registry/directories/findstack/playbook.md +1 -0
- package/registry/directories/findyoursaas/directory.yaml +47 -0
- package/registry/directories/findyoursaas/playbook.md +7 -0
- package/registry/directories/firsto/directory.yaml +54 -0
- package/registry/directories/firsto/playbook.md +10 -0
- package/registry/directories/fosspace/directory.yaml +49 -0
- package/registry/directories/founders-today/directory.yaml +52 -0
- package/registry/directories/francesaas/directory.yaml +49 -0
- package/registry/directories/francesaas/playbook.md +5 -0
- package/registry/directories/free-startup-directories/directory.yaml +70 -0
- package/registry/directories/free-startup-listing/directory.yaml +59 -0
- package/registry/directories/free-startup-listing/playbook.md +6 -0
- package/registry/directories/free-tools-directory/directory.yaml +55 -0
- package/registry/directories/free-tools-directory/playbook.md +7 -0
- package/registry/directories/freeaitools-net/directory.yaml +57 -0
- package/registry/directories/from-europe-with-love/directory.yaml +63 -0
- package/registry/directories/from-europe-with-love/playbook.md +5 -0
- package/registry/directories/fstlaunch/directory.yaml +57 -0
- package/registry/directories/fstlaunch/playbook.md +6 -0
- package/registry/directories/futuretools/directory.yaml +67 -0
- package/registry/directories/futuretools/playbook.md +10 -0
- package/registry/directories/glama/directory.yaml +46 -0
- package/registry/directories/glama/playbook.md +7 -0
- package/registry/directories/goodaitools/directory.yaml +46 -0
- package/registry/directories/goodaitools/playbook.md +7 -0
- package/registry/directories/gptbot/directory.yaml +56 -0
- package/registry/directories/gptdemo/directory.yaml +56 -0
- package/registry/directories/gptdemo/playbook.md +7 -0
- package/registry/directories/hicyou/directory.yaml +51 -0
- package/registry/directories/hicyou/playbook.md +1 -0
- package/registry/directories/hightechattic/directory.yaml +49 -0
- package/registry/directories/hightechattic/playbook.md +6 -0
- package/registry/directories/howtobuysaas/directory.yaml +59 -0
- package/registry/directories/howtobuysaas/playbook.md +1 -0
- package/registry/directories/hunt0/directory.yaml +81 -0
- package/registry/directories/hunt0/playbook.md +1 -0
- package/registry/directories/huntscreens/directory.yaml +56 -0
- package/registry/directories/huntscreens/playbook.md +11 -0
- package/registry/directories/huntstartup/directory.yaml +53 -0
- package/registry/directories/huntstartup/playbook.md +8 -0
- package/registry/directories/huzzler/directory.yaml +49 -0
- package/registry/directories/huzzler/playbook.md +7 -0
- package/registry/directories/hype-star/directory.yaml +57 -0
- package/registry/directories/hype-star/playbook.md +6 -0
- package/registry/directories/idea-kiln/directory.yaml +50 -0
- package/registry/directories/idea-kiln/playbook.md +6 -0
- package/registry/directories/ignlab-launch/directory.yaml +82 -0
- package/registry/directories/ignlab-launch/playbook.md +7 -0
- package/registry/directories/indie-deals/directory.yaml +48 -0
- package/registry/directories/indie-deals/playbook.md +8 -0
- package/registry/directories/indie-hustles/directory.yaml +61 -0
- package/registry/directories/indie-hustles/playbook.md +1 -0
- package/registry/directories/indie-makers-hub/directory.yaml +50 -0
- package/registry/directories/indie-makers-hub/playbook.md +5 -0
- package/registry/directories/indie-page/directory.yaml +47 -0
- package/registry/directories/indie-page/playbook.md +1 -0
- package/registry/directories/indiefounders/directory.yaml +48 -0
- package/registry/directories/indiefounders/playbook.md +5 -0
- package/registry/directories/indiehackers/directory.yaml +47 -0
- package/registry/directories/indiehackers/playbook.md +1 -0
- package/registry/directories/indiehackerstacks/directory.yaml +45 -0
- package/registry/directories/indiehackerstacks/playbook.md +5 -0
- package/registry/directories/indiehub/directory.yaml +45 -0
- package/registry/directories/indiehub/playbook.md +8 -0
- package/registry/directories/indiehunt/directory.yaml +45 -0
- package/registry/directories/indiehunt/playbook.md +6 -0
- package/registry/directories/indieneed/directory.yaml +78 -0
- package/registry/directories/indieneed/playbook.md +9 -0
- package/registry/directories/indieproducts/directory.yaml +47 -0
- package/registry/directories/indieproducts/playbook.md +4 -0
- package/registry/directories/indiesignal/directory.yaml +47 -0
- package/registry/directories/indietool/directory.yaml +44 -0
- package/registry/directories/indietool/playbook.md +1 -0
- package/registry/directories/indietools/directory.yaml +69 -0
- package/registry/directories/insidr-ai/directory.yaml +49 -0
- package/registry/directories/insidr-ai/playbook.md +5 -0
- package/registry/directories/intelligent-tools/directory.yaml +59 -0
- package/registry/directories/intelligent-tools/playbook.md +1 -0
- package/registry/directories/inventlist/directory.yaml +71 -0
- package/registry/directories/inventlist/playbook.md +5 -0
- package/registry/directories/joinly/directory.yaml +68 -0
- package/registry/directories/joinly/playbook.md +5 -0
- package/registry/directories/junkstartups/directory.yaml +72 -0
- package/registry/directories/junkstartups/playbook.md +1 -0
- package/registry/directories/justhunt/directory.yaml +55 -0
- package/registry/directories/justhunt/playbook.md +7 -0
- package/registry/directories/kittylaunch/directory.yaml +70 -0
- package/registry/directories/kittylaunch/playbook.md +7 -0
- package/registry/directories/lachief/directory.yaml +81 -0
- package/registry/directories/lachief/playbook.md +1 -0
- package/registry/directories/landbook/directory.yaml +48 -0
- package/registry/directories/landbook/playbook.md +1 -0
- package/registry/directories/launch-community/directory.yaml +73 -0
- package/registry/directories/launch-community/playbook.md +1 -0
- package/registry/directories/launch-list/directory.yaml +52 -0
- package/registry/directories/launch-list/playbook.md +6 -0
- package/registry/directories/launchaf/directory.yaml +51 -0
- package/registry/directories/launchbase-india/directory.yaml +53 -0
- package/registry/directories/launchboard/directory.yaml +50 -0
- package/registry/directories/launchboard/playbook.md +6 -0
- package/registry/directories/launchclash/directory.yaml +47 -0
- package/registry/directories/launchclash/playbook.md +6 -0
- package/registry/directories/launched-tools/directory.yaml +48 -0
- package/registry/directories/launchfree/directory.yaml +58 -0
- package/registry/directories/launchfree/playbook.md +1 -0
- package/registry/directories/launchigniter/directory.yaml +60 -0
- package/registry/directories/launchigniter/playbook.md +9 -0
- package/registry/directories/launchit/directory.yaml +48 -0
- package/registry/directories/launchit/playbook.md +1 -0
- package/registry/directories/launchllama/directory.yaml +53 -0
- package/registry/directories/launchllama/playbook.md +7 -0
- package/registry/directories/launchonit/directory.yaml +74 -0
- package/registry/directories/launchonit/playbook.md +7 -0
- package/registry/directories/launchpedia-tools/directory.yaml +43 -0
- package/registry/directories/launchpedia-tools/playbook.md +5 -0
- package/registry/directories/launchscaler/directory.yaml +53 -0
- package/registry/directories/launchtory/directory.yaml +47 -0
- package/registry/directories/launchtory/playbook.md +5 -0
- package/registry/directories/launchvault/directory.yaml +52 -0
- package/registry/directories/launchvault/playbook.md +5 -0
- package/registry/directories/launchvibe/directory.yaml +45 -0
- package/registry/directories/launchvibe/playbook.md +1 -0
- package/registry/directories/launchvoid/directory.yaml +45 -0
- package/registry/directories/launchvoid/playbook.md +6 -0
- package/registry/directories/letslaunch/directory.yaml +53 -0
- package/registry/directories/letslaunch/playbook.md +1 -0
- package/registry/directories/libhunt/directory.yaml +50 -0
- package/registry/directories/libhunt/playbook.md +1 -0
- package/registry/directories/linezine/directory.yaml +44 -0
- package/registry/directories/linezine/playbook.md +1 -0
- package/registry/directories/linkrena/directory.yaml +58 -0
- package/registry/directories/linkrena/playbook.md +6 -0
- package/registry/directories/list-maro/directory.yaml +74 -0
- package/registry/directories/list-your-tool/directory.yaml +76 -0
- package/registry/directories/list-your-tool/playbook.md +1 -0
- package/registry/directories/listbulb/directory.yaml +48 -0
- package/registry/directories/listbulb/playbook.md +1 -0
- package/registry/directories/listing-sh/directory.yaml +70 -0
- package/registry/directories/llm-relevance/directory.yaml +67 -0
- package/registry/directories/llm-relevance/playbook.md +1 -0
- package/registry/directories/llms-txt-hub/directory.yaml +47 -0
- package/registry/directories/llms-txt-hub/playbook.md +6 -0
- package/registry/directories/llms-txt-site/directory.yaml +53 -0
- package/registry/directories/llms-txt-site/playbook.md +7 -0
- package/registry/directories/macnative/directory.yaml +47 -0
- package/registry/directories/macnative/playbook.md +6 -0
- package/registry/directories/made-with-bolt/directory.yaml +58 -0
- package/registry/directories/made-with-bolt/playbook.md +1 -0
- package/registry/directories/made-with-lovable/directory.yaml +64 -0
- package/registry/directories/made-with-lovable/playbook.md +1 -0
- package/registry/directories/magicbox/directory.yaml +51 -0
- package/registry/directories/magicbox/playbook.md +16 -0
- package/registry/directories/maidensail/directory.yaml +54 -0
- package/registry/directories/makeitlast/directory.yaml +63 -0
- package/registry/directories/makeitlast/playbook.md +8 -0
- package/registry/directories/makerhunt/directory.yaml +56 -0
- package/registry/directories/makerhunt/playbook.md +1 -0
- package/registry/directories/makerlist/directory.yaml +49 -0
- package/registry/directories/makerlist/playbook.md +7 -0
- package/registry/directories/mapbid/directory.yaml +46 -0
- package/registry/directories/marketingdb/directory.yaml +50 -0
- package/registry/directories/marketingdb/playbook.md +8 -0
- package/registry/directories/marketraa/directory.yaml +63 -0
- package/registry/directories/marketraa/playbook.md +1 -0
- package/registry/directories/mcp-market/directory.yaml +49 -0
- package/registry/directories/mcp-market/playbook.md +7 -0
- package/registry/directories/mcp-repository/directory.yaml +45 -0
- package/registry/directories/mcp-repository/playbook.md +6 -0
- package/registry/directories/mcp-so/directory.yaml +45 -0
- package/registry/directories/mcp-so/playbook.md +6 -0
- package/registry/directories/mcpservers/directory.yaml +53 -0
- package/registry/directories/mcpservers/playbook.md +7 -0
- package/registry/directories/mf8/directory.yaml +53 -0
- package/registry/directories/mf8/playbook.md +5 -0
- package/registry/directories/microlaunch/directory.yaml +48 -0
- package/registry/directories/microlaunch/playbook.md +1 -0
- package/registry/directories/microsaasexamples/directory.yaml +50 -0
- package/registry/directories/must-tools/directory.yaml +68 -0
- package/registry/directories/must-tools/playbook.md +6 -0
- package/registry/directories/my-launch-stash/directory.yaml +47 -0
- package/registry/directories/my-launch-stash/playbook.md +8 -0
- package/registry/directories/nachonacho/directory.yaml +47 -0
- package/registry/directories/navfolders/directory.yaml +48 -0
- package/registry/directories/navfolders/playbook.md +5 -0
- package/registry/directories/navs/directory.yaml +66 -0
- package/registry/directories/navs/playbook.md +6 -0
- package/registry/directories/navtools-ai/directory.yaml +51 -0
- package/registry/directories/navtools-ai/playbook.md +1 -0
- package/registry/directories/neeed-directory/directory.yaml +60 -0
- package/registry/directories/neeed-directory/playbook.md +10 -0
- package/registry/directories/neonrev/directory.yaml +43 -0
- package/registry/directories/neonrev/playbook.md +1 -0
- package/registry/directories/newaiforyou/directory.yaml +50 -0
- package/registry/directories/newaiforyou/playbook.md +1 -0
- package/registry/directories/newtool/directory.yaml +51 -0
- package/registry/directories/newtool/playbook.md +1 -0
- package/registry/directories/nextbigwhat/directory.yaml +48 -0
- package/registry/directories/nextbigwhat/playbook.md +5 -0
- package/registry/directories/nextlaunch/directory.yaml +50 -0
- package/registry/directories/nextlaunch/playbook.md +8 -0
- package/registry/directories/nicklaunches/directory.yaml +70 -0
- package/registry/directories/nicklaunches/playbook.md +1 -0
- package/registry/directories/nocodefinder/directory.yaml +45 -0
- package/registry/directories/nocodefinder/playbook.md +6 -0
- package/registry/directories/nocodelist/directory.yaml +48 -0
- package/registry/directories/nocodelist/playbook.md +7 -0
- package/registry/directories/noonlaunch/directory.yaml +51 -0
- package/registry/directories/noonlaunch/playbook.md +6 -0
- package/registry/directories/nxgn-tools/directory.yaml +49 -0
- package/registry/directories/nxgn-tools/playbook.md +6 -0
- package/registry/directories/once-tools/directory.yaml +58 -0
- package/registry/directories/once-tools/playbook.md +1 -0
- package/registry/directories/open-launch/directory.yaml +46 -0
- package/registry/directories/open-launch/playbook.md +1 -0
- package/registry/directories/openalternative/directory.yaml +62 -0
- package/registry/directories/openalternative/playbook.md +8 -0
- package/registry/directories/openhunts/directory.yaml +52 -0
- package/registry/directories/openhunts/playbook.md +1 -0
- package/registry/directories/openresources/directory.yaml +59 -0
- package/registry/directories/openresources/playbook.md +6 -0
- package/registry/directories/opensaas-directory/directory.yaml +47 -0
- package/registry/directories/opensourcealternative-to/directory.yaml +63 -0
- package/registry/directories/opensourcealternative-to/playbook.md +6 -0
- package/registry/directories/opentools/directory.yaml +42 -0
- package/registry/directories/opentools/playbook.md +4 -0
- package/registry/directories/osssoftware/directory.yaml +66 -0
- package/registry/directories/osssoftware/playbook.md +5 -0
- package/registry/directories/oursoftware-eu/directory.yaml +69 -0
- package/registry/directories/oursoftware-eu/playbook.md +1 -0
- package/registry/directories/peerpush/directory.yaml +48 -0
- package/registry/directories/peerpush/playbook.md +8 -0
- package/registry/directories/phyco/directory.yaml +54 -0
- package/registry/directories/phygital-ai-library/directory.yaml +47 -0
- package/registry/directories/phygital-ai-library/playbook.md +6 -0
- package/registry/directories/pitchground/directory.yaml +47 -0
- package/registry/directories/pitchground/playbook.md +5 -0
- package/registry/directories/pitchwall/directory.yaml +47 -0
- package/registry/directories/pitchwall/playbook.md +1 -0
- package/registry/directories/postmake/directory.yaml +56 -0
- package/registry/directories/postmake/playbook.md +1 -0
- package/registry/directories/poweredbyai/directory.yaml +57 -0
- package/registry/directories/poweredbyai/playbook.md +1 -0
- package/registry/directories/pro-launch/directory.yaml +51 -0
- package/registry/directories/pro-launch/playbook.md +9 -0
- package/registry/directories/product-hunt/directory.yaml +54 -0
- package/registry/directories/product-hunt/playbook.md +1 -0
- package/registry/directories/product-rally/directory.yaml +50 -0
- package/registry/directories/product-rally/playbook.md +6 -0
- package/registry/directories/productivity-directory/directory.yaml +47 -0
- package/registry/directories/productivity-directory/playbook.md +7 -0
- package/registry/directories/productwatch/directory.yaml +51 -0
- package/registry/directories/productwatch/playbook.md +7 -0
- package/registry/directories/proofstories/directory.yaml +47 -0
- package/registry/directories/proofstories/playbook.md +1 -0
- package/registry/directories/prouct/directory.yaml +93 -0
- package/registry/directories/prouct/playbook.md +7 -0
- package/registry/directories/public-apis/directory.yaml +47 -0
- package/registry/directories/public-apis/playbook.md +6 -0
- package/registry/directories/publishyoursaas/directory.yaml +53 -0
- package/registry/directories/publishyoursaas/playbook.md +7 -0
- package/registry/directories/rankinpublic/directory.yaml +50 -0
- package/registry/directories/rankinpublic/playbook.md +1 -0
- package/registry/directories/rankyourai/directory.yaml +50 -0
- package/registry/directories/rankyourai/playbook.md +1 -0
- package/registry/directories/resource-fyi/directory.yaml +47 -0
- package/registry/directories/resource-fyi/playbook.md +5 -0
- package/registry/directories/roozna/directory.yaml +68 -0
- package/registry/directories/roozna/playbook.md +1 -0
- package/registry/directories/saas-fyi/directory.yaml +73 -0
- package/registry/directories/saas-fyi/playbook.md +7 -0
- package/registry/directories/saas-italia/directory.yaml +58 -0
- package/registry/directories/saas-launches/directory.yaml +47 -0
- package/registry/directories/saas-launches/playbook.md +6 -0
- package/registry/directories/saasbison/directory.yaml +44 -0
- package/registry/directories/saasbison/playbook.md +8 -0
- package/registry/directories/saascity/directory.yaml +50 -0
- package/registry/directories/saascubes/directory.yaml +49 -0
- package/registry/directories/saascubes/playbook.md +6 -0
- package/registry/directories/saasfame/directory.yaml +47 -0
- package/registry/directories/saasfame/playbook.md +6 -0
- package/registry/directories/saasgenius/directory.yaml +50 -0
- package/registry/directories/saasgenius/playbook.md +8 -0
- package/registry/directories/saasgrave-launches/directory.yaml +53 -0
- package/registry/directories/saasgrave-launches/playbook.md +7 -0
- package/registry/directories/saashammer/directory.yaml +53 -0
- package/registry/directories/saashammer/playbook.md +6 -0
- package/registry/directories/saashub/directory.yaml +51 -0
- package/registry/directories/saashub/playbook.md +9 -0
- package/registry/directories/saashunt/directory.yaml +43 -0
- package/registry/directories/saaslineup/directory.yaml +68 -0
- package/registry/directories/saaslineup/playbook.md +1 -0
- package/registry/directories/saaslist/directory.yaml +55 -0
- package/registry/directories/saaslist/playbook.md +5 -0
- package/registry/directories/saasmag-saas1000/directory.yaml +71 -0
- package/registry/directories/saaspage/directory.yaml +48 -0
- package/registry/directories/saasplace/directory.yaml +66 -0
- package/registry/directories/saasplace/playbook.md +1 -0
- package/registry/directories/saasrow/directory.yaml +51 -0
- package/registry/directories/saasrow/playbook.md +1 -0
- package/registry/directories/saassy-board/directory.yaml +54 -0
- package/registry/directories/saassy-board/playbook.md +1 -0
- package/registry/directories/saastore/directory.yaml +56 -0
- package/registry/directories/saastore/playbook.md +6 -0
- package/registry/directories/saastr-community-agents/directory.yaml +65 -0
- package/registry/directories/saastr-community-agents/playbook.md +8 -0
- package/registry/directories/saasvault/directory.yaml +48 -0
- package/registry/directories/saasvault/playbook.md +6 -0
- package/registry/directories/scrolllaunch/directory.yaml +54 -0
- package/registry/directories/scrolllaunch/playbook.md +8 -0
- package/registry/directories/seewhatnewai/directory.yaml +53 -0
- package/registry/directories/sellwithboost/directory.yaml +54 -0
- package/registry/directories/sellwithboost/playbook.md +5 -0
- package/registry/directories/serchen/directory.yaml +48 -0
- package/registry/directories/serchen/playbook.md +8 -0
- package/registry/directories/shinylaunch/directory.yaml +48 -0
- package/registry/directories/shinylaunch/playbook.md +6 -0
- package/registry/directories/shipyard-hq/directory.yaml +58 -0
- package/registry/directories/shipyard-hq/playbook.md +1 -0
- package/registry/directories/shipybara/directory.yaml +48 -0
- package/registry/directories/shipybara/playbook.md +8 -0
- package/registry/directories/shipycorn/directory.yaml +47 -0
- package/registry/directories/shipycorn/playbook.md +6 -0
- package/registry/directories/showmebest-ai/directory.yaml +50 -0
- package/registry/directories/showmebest-ai/playbook.md +1 -0
- package/registry/directories/showmysites/directory.yaml +52 -0
- package/registry/directories/showmysites/playbook.md +7 -0
- package/registry/directories/sidehunt/directory.yaml +56 -0
- package/registry/directories/sidehunt/playbook.md +1 -0
- package/registry/directories/sideprojectors/directory.yaml +55 -0
- package/registry/directories/sideprojectors/playbook.md +1 -0
- package/registry/directories/sideprojects/directory.yaml +52 -0
- package/registry/directories/sideprojects/playbook.md +1 -0
- package/registry/directories/sitepatent/directory.yaml +58 -0
- package/registry/directories/sitepatent/playbook.md +1 -0
- package/registry/directories/small-business-marketing-tools/directory.yaml +67 -0
- package/registry/directories/small-business-marketing-tools/playbook.md +1 -0
- package/registry/directories/smol-launch/directory.yaml +44 -0
- package/registry/directories/smol-launch/playbook.md +9 -0
- package/registry/directories/software-como-servicio/directory.yaml +64 -0
- package/registry/directories/software-como-servicio/playbook.md +6 -0
- package/registry/directories/software-finder/directory.yaml +47 -0
- package/registry/directories/software-finder/playbook.md +6 -0
- package/registry/directories/softwaresuggest/directory.yaml +68 -0
- package/registry/directories/softwaresuggest/playbook.md +6 -0
- package/registry/directories/solo-launches/directory.yaml +48 -0
- package/registry/directories/solo-launches/playbook.md +6 -0
- package/registry/directories/sololaunch/directory.yaml +69 -0
- package/registry/directories/sourceforge/directory.yaml +75 -0
- package/registry/directories/sourceforge/playbook.md +9 -0
- package/registry/directories/spacerrapps/directory.yaml +53 -0
- package/registry/directories/spacerrapps/playbook.md +6 -0
- package/registry/directories/speartip/directory.yaml +48 -0
- package/registry/directories/speartip/playbook.md +1 -0
- package/registry/directories/spiff-store/directory.yaml +46 -0
- package/registry/directories/spiff-store/playbook.md +6 -0
- package/registry/directories/spot-startups/directory.yaml +48 -0
- package/registry/directories/spotsaas/directory.yaml +45 -0
- package/registry/directories/squidir/directory.yaml +60 -0
- package/registry/directories/squidir/playbook.md +5 -0
- package/registry/directories/stackboo/directory.yaml +49 -0
- package/registry/directories/stackboo/playbook.md +6 -0
- package/registry/directories/stackledge/directory.yaml +84 -0
- package/registry/directories/stackledge/playbook.md +8 -0
- package/registry/directories/startup-alternatives/directory.yaml +68 -0
- package/registry/directories/startup-alternatives/playbook.md +5 -0
- package/registry/directories/startup-benchmarks/directory.yaml +59 -0
- package/registry/directories/startup-benchmarks/playbook.md +1 -0
- package/registry/directories/startup-collections/directory.yaml +56 -0
- package/registry/directories/startup-collections/playbook.md +5 -0
- package/registry/directories/startup-europe/directory.yaml +52 -0
- package/registry/directories/startup-europe/playbook.md +1 -0
- package/registry/directories/startup-fame/directory.yaml +51 -0
- package/registry/directories/startup-fame/playbook.md +8 -0
- package/registry/directories/startup-fast/directory.yaml +52 -0
- package/registry/directories/startup-fast/playbook.md +9 -0
- package/registry/directories/startup-list/directory.yaml +81 -0
- package/registry/directories/startup-list/playbook.md +8 -0
- package/registry/directories/startup-listing/directory.yaml +77 -0
- package/registry/directories/startup-listing/playbook.md +1 -0
- package/registry/directories/startup-og/directory.yaml +52 -0
- package/registry/directories/startup-ranking/directory.yaml +51 -0
- package/registry/directories/startup-ranking/playbook.md +1 -0
- package/registry/directories/startup-spotlight/directory.yaml +50 -0
- package/registry/directories/startup-spotlight/playbook.md +5 -0
- package/registry/directories/startup88/directory.yaml +46 -0
- package/registry/directories/startup88/playbook.md +1 -0
- package/registry/directories/startupaccelerator/directory.yaml +76 -0
- package/registry/directories/startupaccelerator/playbook.md +7 -0
- package/registry/directories/startupbase/directory.yaml +44 -0
- package/registry/directories/startupbase/playbook.md +1 -0
- package/registry/directories/startupbeats/directory.yaml +48 -0
- package/registry/directories/startupbeats/playbook.md +6 -0
- package/registry/directories/startupdirectory/directory.yaml +50 -0
- package/registry/directories/startupdirectory/playbook.md +1 -0
- package/registry/directories/startupinspire/directory.yaml +52 -0
- package/registry/directories/startupinspire/playbook.md +8 -0
- package/registry/directories/startuplibrary/directory.yaml +46 -0
- package/registry/directories/startuplibrary/playbook.md +1 -0
- package/registry/directories/startuplist-africa/directory.yaml +45 -0
- package/registry/directories/startuplist-africa/playbook.md +6 -0
- package/registry/directories/startups-gallery/directory.yaml +61 -0
- package/registry/directories/startups-gallery/playbook.md +5 -0
- package/registry/directories/startupsfm/directory.yaml +64 -0
- package/registry/directories/startupsfm/playbook.md +9 -0
- package/registry/directories/startupsfyi/directory.yaml +51 -0
- package/registry/directories/startupsfyi/playbook.md +4 -0
- package/registry/directories/startupslab/directory.yaml +61 -0
- package/registry/directories/startupslab/playbook.md +8 -0
- package/registry/directories/startuptile/directory.yaml +51 -0
- package/registry/directories/startuptile/playbook.md +5 -0
- package/registry/directories/startuptrusted/directory.yaml +46 -0
- package/registry/directories/startuptrusted/playbook.md +1 -0
- package/registry/directories/startuups/directory.yaml +50 -0
- package/registry/directories/steemhunt/directory.yaml +46 -0
- package/registry/directories/steemhunt/playbook.md +5 -0
- package/registry/directories/stellar-launch/directory.yaml +55 -0
- package/registry/directories/stellar-launch/playbook.md +1 -0
- package/registry/directories/stork-ai/directory.yaml +49 -0
- package/registry/directories/stork-ai/playbook.md +3 -0
- package/registry/directories/stork-mcp/directory.yaml +52 -0
- package/registry/directories/stork-mcp/playbook.md +3 -0
- package/registry/directories/submitaitools/directory.yaml +57 -0
- package/registry/directories/submitaitools/playbook.md +19 -0
- package/registry/directories/submithunt/directory.yaml +49 -0
- package/registry/directories/submithunt/playbook.md +9 -0
- package/registry/directories/submitmysaas/directory.yaml +51 -0
- package/registry/directories/submitmysaas/playbook.md +6 -0
- package/registry/directories/submitstartup/directory.yaml +73 -0
- package/registry/directories/sumodir/directory.yaml +47 -0
- package/registry/directories/sumodir/playbook.md +7 -0
- package/registry/directories/superlaunch/directory.yaml +64 -0
- package/registry/directories/superlaunch/playbook.md +7 -0
- package/registry/directories/techboard-australia/directory.yaml +54 -0
- package/registry/directories/techboard-australia/playbook.md +5 -0
- package/registry/directories/technologyadvice/directory.yaml +65 -0
- package/registry/directories/technologyadvice/playbook.md +8 -0
- package/registry/directories/tekpon/directory.yaml +44 -0
- package/registry/directories/tensorblock-mcp/directory.yaml +46 -0
- package/registry/directories/tensorblock-mcp/playbook.md +7 -0
- package/registry/directories/thankjohn/directory.yaml +42 -0
- package/registry/directories/thankjohn/playbook.md +1 -0
- package/registry/directories/that-ai-collection/directory.yaml +52 -0
- package/registry/directories/the-ai-library/directory.yaml +46 -0
- package/registry/directories/the-ai-library/playbook.md +1 -0
- package/registry/directories/the-next-ai/directory.yaml +62 -0
- package/registry/directories/the-popular-apps/directory.yaml +43 -0
- package/registry/directories/the-popular-apps/playbook.md +1 -0
- package/registry/directories/the-startup-inc/directory.yaml +90 -0
- package/registry/directories/the-startup-inc/playbook.md +4 -0
- package/registry/directories/the-startup-project/directory.yaml +67 -0
- package/registry/directories/the-startup-project/playbook.md +5 -0
- package/registry/directories/the-tool-directory/directory.yaml +75 -0
- package/registry/directories/thedevtoolsdir/directory.yaml +57 -0
- package/registry/directories/thedevtoolsdir/playbook.md +6 -0
- package/registry/directories/theres-an-ai/directory.yaml +44 -0
- package/registry/directories/theres-an-ai/playbook.md +1 -0
- package/registry/directories/theresanaiforthat/directory.yaml +51 -0
- package/registry/directories/theresanaiforthat/playbook.md +1 -0
- package/registry/directories/thesaasdir/directory.yaml +44 -0
- package/registry/directories/thesaasdir/playbook.md +6 -0
- package/registry/directories/tinylaunch/directory.yaml +50 -0
- package/registry/directories/tinylaunch/playbook.md +8 -0
- package/registry/directories/tinystartups/directory.yaml +61 -0
- package/registry/directories/tinystartups/playbook.md +6 -0
- package/registry/directories/tipseason/directory.yaml +68 -0
- package/registry/directories/tolodora/directory.yaml +59 -0
- package/registry/directories/tool-commons/directory.yaml +46 -0
- package/registry/directories/tool-commons/playbook.md +1 -0
- package/registry/directories/tool-directory-ai/directory.yaml +64 -0
- package/registry/directories/tool-directory-ai/playbook.md +5 -0
- package/registry/directories/tool-finder/directory.yaml +64 -0
- package/registry/directories/tool-finder/playbook.md +6 -0
- package/registry/directories/tooldirs/directory.yaml +64 -0
- package/registry/directories/tooldirs/playbook.md +7 -0
- package/registry/directories/toolfame/directory.yaml +47 -0
- package/registry/directories/toolfame/playbook.md +6 -0
- package/registry/directories/toolfio/directory.yaml +48 -0
- package/registry/directories/toolfio/playbook.md +7 -0
- package/registry/directories/toolfolio/directory.yaml +54 -0
- package/registry/directories/toolfolio/playbook.md +1 -0
- package/registry/directories/toolfound/directory.yaml +66 -0
- package/registry/directories/toolify/directory.yaml +52 -0
- package/registry/directories/toolify/playbook.md +8 -0
- package/registry/directories/toolkitly/directory.yaml +46 -0
- package/registry/directories/toolkitly/playbook.md +1 -0
- package/registry/directories/toollist-ai/directory.yaml +60 -0
- package/registry/directories/toollist-ai/playbook.md +1 -0
- package/registry/directories/toolomio/directory.yaml +55 -0
- package/registry/directories/toolomio/playbook.md +5 -0
- package/registry/directories/toolpasta/directory.yaml +46 -0
- package/registry/directories/toolpasta/playbook.md +1 -0
- package/registry/directories/toolpilot-ai/directory.yaml +77 -0
- package/registry/directories/toolpilot-ai/playbook.md +8 -0
- package/registry/directories/toolpromote/directory.yaml +81 -0
- package/registry/directories/toolrain/directory.yaml +48 -0
- package/registry/directories/toolrain/playbook.md +1 -0
- package/registry/directories/tools-ai-online/directory.yaml +65 -0
- package/registry/directories/tools-ai-online/playbook.md +7 -0
- package/registry/directories/tools-cafe/directory.yaml +51 -0
- package/registry/directories/tools-cafe/playbook.md +6 -0
- package/registry/directories/toolscout/directory.yaml +45 -0
- package/registry/directories/toolscout/playbook.md +5 -0
- package/registry/directories/toolsfine/directory.yaml +58 -0
- package/registry/directories/toolsfine/playbook.md +9 -0
- package/registry/directories/toolsnocode/directory.yaml +48 -0
- package/registry/directories/toolsnocode/playbook.md +6 -0
- package/registry/directories/tooltrove/directory.yaml +71 -0
- package/registry/directories/tooltrove/playbook.md +9 -0
- package/registry/directories/toolveyor/directory.yaml +44 -0
- package/registry/directories/toolveyor/playbook.md +1 -0
- package/registry/directories/toolwise/directory.yaml +67 -0
- package/registry/directories/toolwise/playbook.md +7 -0
- package/registry/directories/toools-design/directory.yaml +64 -0
- package/registry/directories/toools-design/playbook.md +8 -0
- package/registry/directories/topai-tools/directory.yaml +43 -0
- package/registry/directories/topai-tools/playbook.md +1 -0
- package/registry/directories/traffiklist/directory.yaml +55 -0
- package/registry/directories/traffiklist/playbook.md +6 -0
- package/registry/directories/trendy-startups/directory.yaml +49 -0
- package/registry/directories/trendy-startups/playbook.md +1 -0
- package/registry/directories/trillionagent/directory.yaml +57 -0
- package/registry/directories/trillionagent/playbook.md +1 -0
- package/registry/directories/truerev/directory.yaml +83 -0
- package/registry/directories/truerev/playbook.md +12 -0
- package/registry/directories/trustmrr/directory.yaml +43 -0
- package/registry/directories/trustradius/directory.yaml +67 -0
- package/registry/directories/trustradius/playbook.md +9 -0
- package/registry/directories/trylaunch/directory.yaml +51 -0
- package/registry/directories/trylaunch/playbook.md +1 -0
- package/registry/directories/tulimoa/directory.yaml +65 -0
- package/registry/directories/tulimoa/playbook.md +7 -0
- package/registry/directories/turbo0/directory.yaml +49 -0
- package/registry/directories/turbo0/playbook.md +9 -0
- package/registry/directories/twelve-tools/directory.yaml +47 -0
- package/registry/directories/twelve-tools/playbook.md +6 -0
- package/registry/directories/ultimate-free-tools/directory.yaml +49 -0
- package/registry/directories/ultimate-free-tools/playbook.md +8 -0
- package/registry/directories/uneed/directory.yaml +55 -0
- package/registry/directories/uneed/playbook.md +9 -0
- package/registry/directories/unitelist/directory.yaml +49 -0
- package/registry/directories/unitelist/playbook.md +7 -0
- package/registry/directories/uno-directory/directory.yaml +48 -0
- package/registry/directories/uno-directory/playbook.md +1 -0
- package/registry/directories/ventureradar/directory.yaml +47 -0
- package/registry/directories/ventureradar/playbook.md +5 -0
- package/registry/directories/vibe-coding-cloud/directory.yaml +45 -0
- package/registry/directories/vibe-coding-cloud/playbook.md +6 -0
- package/registry/directories/victrays/directory.yaml +55 -0
- package/registry/directories/victrays/playbook.md +8 -0
- package/registry/directories/visalytica/directory.yaml +59 -0
- package/registry/directories/wavel/directory.yaml +51 -0
- package/registry/directories/we-are-founders/directory.yaml +85 -0
- package/registry/directories/we-are-founders/playbook.md +1 -0
- package/registry/directories/web-store-extensions/directory.yaml +45 -0
- package/registry/directories/web-store-extensions/playbook.md +6 -0
- package/registry/directories/webcurate/directory.yaml +50 -0
- package/registry/directories/website-rating/directory.yaml +66 -0
- package/registry/directories/website-rating/playbook.md +9 -0
- package/registry/directories/webspot/directory.yaml +46 -0
- package/registry/directories/webspot/playbook.md +5 -0
- package/registry/directories/weekhack/directory.yaml +56 -0
- package/registry/directories/weekhack/playbook.md +5 -0
- package/registry/directories/weliketools/directory.yaml +50 -0
- package/registry/directories/weliketools/playbook.md +6 -0
- package/registry/directories/what-is-ai-tools/directory.yaml +48 -0
- package/registry/directories/what-is-ai-tools/playbook.md +1 -0
- package/registry/directories/wired-business/directory.yaml +44 -0
- package/registry/directories/wired-business/playbook.md +6 -0
- package/registry/directories/would-you-pay/directory.yaml +49 -0
- package/registry/directories/would-you-pay/playbook.md +6 -0
- package/registry/directories/xai-plugin-marketplace/directory.yaml +46 -0
- package/registry/directories/xai-plugin-marketplace/playbook.md +5 -0
- package/registry/directories/zplatform-ai/directory.yaml +75 -0
- package/registry/directories/zumvu/directory.yaml +50 -0
- package/scripts/ab +40 -0
- package/scripts/check-listings +8 -0
- package/scripts/google-login +13 -0
- package/scripts/show-browser +17 -0
- package/src/accounts.ts +81 -0
- package/src/audit.ts +229 -0
- package/src/browser.ts +123 -0
- package/src/capabilities.ts +62 -0
- package/src/cli.ts +780 -0
- package/src/db/index.ts +29 -0
- package/src/db/schema.ts +152 -0
- package/src/directory-kinds.ts +12 -0
- package/src/import-hosted.ts +156 -0
- package/src/jobs.ts +270 -0
- package/src/listings.ts +64 -0
- package/src/manual.ts +26 -0
- package/src/product-approvals.ts +31 -0
- package/src/public.ts +24 -0
- package/src/ratings.ts +71 -0
- package/src/registry-updates.ts +54 -0
- package/src/registry.ts +101 -0
- package/src/review.ts +58 -0
- package/src/server.ts +186 -0
- package/src/views.ts +71 -0
- package/src/web/app.tsx +1026 -0
- package/src/web/favicon.svg +4 -0
- package/src/web/index.html +14 -0
- package/src/web/style.css +301 -0
- package/src/workspace.ts +97 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
id: what-is-ai-tools
|
|
2
|
+
name: What Is Ai Tools
|
|
3
|
+
website: https://whatisaitools.com/
|
|
4
|
+
submission_url: https://whatisaitools.com/submit
|
|
5
|
+
cost:
|
|
6
|
+
classification: CONDITIONAL_FREE
|
|
7
|
+
notes: Free submission requires adding the supplied directory backlink HTML to the submitter homepage. Optional $9.90 plan provides 24-hour review and featured treatment.
|
|
8
|
+
audience:
|
|
9
|
+
- ai-tools
|
|
10
|
+
authentication:
|
|
11
|
+
required: false
|
|
12
|
+
signup_allowed: false
|
|
13
|
+
methods: []
|
|
14
|
+
submission:
|
|
15
|
+
url_first: true
|
|
16
|
+
fields:
|
|
17
|
+
- name: Website Name
|
|
18
|
+
required: true
|
|
19
|
+
- name: Website URL
|
|
20
|
+
required: true
|
|
21
|
+
conditions:
|
|
22
|
+
- Add the supplied directory backlink HTML to the product homepage before free submission
|
|
23
|
+
autofetch:
|
|
24
|
+
supported: false
|
|
25
|
+
expected: []
|
|
26
|
+
media:
|
|
27
|
+
logo: false
|
|
28
|
+
screenshots:
|
|
29
|
+
supported: false
|
|
30
|
+
kind: listing
|
|
31
|
+
human_only: null
|
|
32
|
+
review_time: 24 hours for the $9.90 plan; free review time not stated
|
|
33
|
+
link:
|
|
34
|
+
rel: dofollow
|
|
35
|
+
method: sample_listing
|
|
36
|
+
evidence: https://whatisaitools.com/abhyas-ai
|
|
37
|
+
samples: 3
|
|
38
|
+
noindex: false
|
|
39
|
+
claimed: dofollow
|
|
40
|
+
bot_check: none
|
|
41
|
+
checked_at: 2026-10-19
|
|
42
|
+
verification:
|
|
43
|
+
status: verified
|
|
44
|
+
checked_at: 2026-10-05
|
|
45
|
+
by: codex
|
|
46
|
+
sources:
|
|
47
|
+
- https://whatisaitools.com/submit
|
|
48
|
+
- https://whatisaitools.com/pricing
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Enter Website Name and Website URL at /submit. The free route requires adding the supplied anchor link to the product homepage first. The optional $9.90 plan promises review within 24 hours, featured placement, dofollow link, update after 7 days, and a permanent listing.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
id: wired-business
|
|
2
|
+
name: Wired Business
|
|
3
|
+
website: https://wired.business
|
|
4
|
+
submission_url: https://wired.business/submit
|
|
5
|
+
cost:
|
|
6
|
+
classification: CONDITIONAL_FREE
|
|
7
|
+
notes: "Free tier requires a backlink to Wired Business on submitter's homepage or footer; reviewed within 72 hours. $29 (often discounted to $20.30) Pro tier removes the backlink requirement and publishes instantly."
|
|
8
|
+
audience:
|
|
9
|
+
- saas
|
|
10
|
+
- startups
|
|
11
|
+
- ai-tools
|
|
12
|
+
authentication:
|
|
13
|
+
required: false
|
|
14
|
+
signup_allowed: false
|
|
15
|
+
methods: []
|
|
16
|
+
submission:
|
|
17
|
+
url_first: false
|
|
18
|
+
fields: []
|
|
19
|
+
conditions:
|
|
20
|
+
- "backlink to Wired Business required on submitter's homepage or footer for free tier"
|
|
21
|
+
- reviewed within 72 hours for free tier
|
|
22
|
+
autofetch:
|
|
23
|
+
supported: false
|
|
24
|
+
expected: []
|
|
25
|
+
media:
|
|
26
|
+
logo: true
|
|
27
|
+
screenshots:
|
|
28
|
+
supported: true
|
|
29
|
+
max: 1
|
|
30
|
+
link:
|
|
31
|
+
rel: mixed
|
|
32
|
+
method: sample_listing
|
|
33
|
+
evidence: https://wired.business/cleverbetlabs
|
|
34
|
+
samples: 4
|
|
35
|
+
noindex: false
|
|
36
|
+
claimed: null
|
|
37
|
+
bot_check: none
|
|
38
|
+
checked_at: 2026-10-19
|
|
39
|
+
verification:
|
|
40
|
+
status: verified
|
|
41
|
+
checked_at: 2026-09-27
|
|
42
|
+
by: sonnet-a
|
|
43
|
+
sources:
|
|
44
|
+
- https://wired.business/submit
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Wired Business
|
|
2
|
+
|
|
3
|
+
- /submit shows two plans: Free ($0, backlink to Wired Business required on homepage/footer, listed within 72h) and Pro ($29, often 30% off with a promo code shown on-page, no backlink required, instant publish, priority placement).
|
|
4
|
+
- No account/login needed; a confirmation email includes an edit link to update name, description, category, and retake the screenshot anytime.
|
|
5
|
+
- Broad directory covering AI, dev tools, SaaS, productivity, games, design, and many other categories — general audience, not niche.
|
|
6
|
+
- Also runs related sibling directories: Ramen Tools, 500 Tools, Twelve Tools (linked in footer) — treat as distinct candidates if seen elsewhere.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
id: would-you-pay
|
|
2
|
+
name: Would You Pay?
|
|
3
|
+
website: https://iwouldpay.dev/
|
|
4
|
+
submission_url: https://iwouldpay.dev/submit
|
|
5
|
+
cost:
|
|
6
|
+
classification: FREEMIUM
|
|
7
|
+
notes: "Startup submission is advertised free; optional Boost feature exists, but public pricing was not visible."
|
|
8
|
+
audience:
|
|
9
|
+
- startups
|
|
10
|
+
- indie-makers
|
|
11
|
+
authentication:
|
|
12
|
+
required: false
|
|
13
|
+
signup_allowed: true
|
|
14
|
+
methods: []
|
|
15
|
+
submission:
|
|
16
|
+
url_first: true
|
|
17
|
+
fields:
|
|
18
|
+
- name: website
|
|
19
|
+
required: true
|
|
20
|
+
conditions:
|
|
21
|
+
- validation results usually arrive within an hour
|
|
22
|
+
autofetch:
|
|
23
|
+
supported: true
|
|
24
|
+
expected:
|
|
25
|
+
- remaining startup details from website
|
|
26
|
+
media:
|
|
27
|
+
logo: false
|
|
28
|
+
screenshots:
|
|
29
|
+
supported: false
|
|
30
|
+
kind: listing
|
|
31
|
+
human_only: null
|
|
32
|
+
review_time: results usually within an hour
|
|
33
|
+
link:
|
|
34
|
+
rel: dofollow
|
|
35
|
+
method: own_listing
|
|
36
|
+
evidence: null
|
|
37
|
+
samples: 1
|
|
38
|
+
noindex: false
|
|
39
|
+
claimed: null
|
|
40
|
+
bot_check: none
|
|
41
|
+
checked_at: 2026-10-19
|
|
42
|
+
verification:
|
|
43
|
+
status: verified
|
|
44
|
+
checked_at: 2026-10-05
|
|
45
|
+
by: codex
|
|
46
|
+
sources:
|
|
47
|
+
- https://iwouldpay.dev/
|
|
48
|
+
- https://iwouldpay.dev/submit
|
|
49
|
+
- https://iwouldpay.dev/faq
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Would You Pay?
|
|
2
|
+
|
|
3
|
+
- Add a startup at /submit; the first step asks for its website URL and says the rest will be filled from the site.
|
|
4
|
+
- Main page advertises free submissions and usually hourly results. Swipers need no signup.
|
|
5
|
+
- The FAQ mentions an optional Boost feature, but public price/terms were not visible during research.
|
|
6
|
+
- This is a swipe-based demand-validation feed: real people indicate whether they would pay, beyond ordinary directory discovery.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
id: xai-plugin-marketplace
|
|
2
|
+
name: xAI Plugin Marketplace
|
|
3
|
+
website: https://github.com/xai-org/plugin-marketplace
|
|
4
|
+
submission_url: https://github.com/xai-org/plugin-marketplace/pulls
|
|
5
|
+
cost:
|
|
6
|
+
classification: VERIFIED_FREE
|
|
7
|
+
notes: "Official xAI announcement calls this an open catalog and explicitly invites plugin pull requests. Plugins bundle skills, commands, agents, hooks, MCP servers, or LSPs; this is not a generic SaaS listing. No submission fee stated."
|
|
8
|
+
audience:
|
|
9
|
+
- agent-plugins
|
|
10
|
+
authentication:
|
|
11
|
+
required: true
|
|
12
|
+
signup_allowed: true
|
|
13
|
+
methods:
|
|
14
|
+
- github
|
|
15
|
+
submission:
|
|
16
|
+
url_first: false
|
|
17
|
+
fields: []
|
|
18
|
+
conditions:
|
|
19
|
+
- An installable Grok Build plugin required; bare product URL is insufficient
|
|
20
|
+
- Submit pull request to official repository
|
|
21
|
+
- Catalog remote plugins are pinned to a specific commit SHA
|
|
22
|
+
autofetch:
|
|
23
|
+
supported: false
|
|
24
|
+
expected: []
|
|
25
|
+
media:
|
|
26
|
+
logo: false
|
|
27
|
+
screenshots:
|
|
28
|
+
supported: false
|
|
29
|
+
kind: plugin_marketplace
|
|
30
|
+
human_only: null
|
|
31
|
+
link:
|
|
32
|
+
rel: nofollow
|
|
33
|
+
method: platform_rule
|
|
34
|
+
evidence: https://github.com/xai-org/plugin-marketplace
|
|
35
|
+
samples: 0
|
|
36
|
+
noindex: false
|
|
37
|
+
claimed: null
|
|
38
|
+
bot_check: none
|
|
39
|
+
checked_at: 2026-10-19
|
|
40
|
+
verification:
|
|
41
|
+
status: verified
|
|
42
|
+
checked_at: 2026-10-08
|
|
43
|
+
by: codex
|
|
44
|
+
sources:
|
|
45
|
+
- https://x.ai/news/grok-plugin-marketplace
|
|
46
|
+
- https://github.com/xai-org/plugin-marketplace
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# xAI Plugin Marketplace
|
|
2
|
+
|
|
3
|
+
- Follow the current repository manifest format and immutable source pin. Do not fabricate plugin artifacts or installation instructions.
|
|
4
|
+
|
|
5
|
+
- Research only; no account created or listing submitted. Media support is not established unless stated in this playbook.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
id: zplatform-ai
|
|
2
|
+
name: zPlatform.ai
|
|
3
|
+
website: https://zplatform.ai/
|
|
4
|
+
submission_url: https://zplatform.ai/submit-ai-tool/
|
|
5
|
+
cost:
|
|
6
|
+
classification: CONDITIONAL_FREE
|
|
7
|
+
notes: "Free plan requires displaying the site's badge; review queue up to 2 weeks. Paid plans are $39 and $49 one-time with no badge."
|
|
8
|
+
audience:
|
|
9
|
+
- ai-tools
|
|
10
|
+
authentication:
|
|
11
|
+
required: false
|
|
12
|
+
signup_allowed: false
|
|
13
|
+
methods: []
|
|
14
|
+
submission:
|
|
15
|
+
url_first: true
|
|
16
|
+
fields:
|
|
17
|
+
- name: website
|
|
18
|
+
required: true
|
|
19
|
+
- name: name
|
|
20
|
+
required: true
|
|
21
|
+
- name: tagline
|
|
22
|
+
required: true
|
|
23
|
+
limit: 100
|
|
24
|
+
- name: description
|
|
25
|
+
required: true
|
|
26
|
+
limit: 1500
|
|
27
|
+
- name: category
|
|
28
|
+
required: true
|
|
29
|
+
- name: second_category
|
|
30
|
+
required: false
|
|
31
|
+
- name: use_cases
|
|
32
|
+
required: false
|
|
33
|
+
- name: pricing
|
|
34
|
+
required: true
|
|
35
|
+
- name: starting_price
|
|
36
|
+
required: false
|
|
37
|
+
- name: pricing_page
|
|
38
|
+
required: false
|
|
39
|
+
- name: platforms
|
|
40
|
+
required: false
|
|
41
|
+
- name: key_features
|
|
42
|
+
required: false
|
|
43
|
+
limit: 8
|
|
44
|
+
- name: founder_name
|
|
45
|
+
required: true
|
|
46
|
+
- name: email
|
|
47
|
+
required: true
|
|
48
|
+
conditions:
|
|
49
|
+
- "Free listing requires adding the site's badge"
|
|
50
|
+
- Manual review; free queue up to 2 weeks
|
|
51
|
+
autofetch:
|
|
52
|
+
supported: true
|
|
53
|
+
expected:
|
|
54
|
+
- draft form details from submitted website URL
|
|
55
|
+
media:
|
|
56
|
+
logo: false
|
|
57
|
+
screenshots:
|
|
58
|
+
supported: false
|
|
59
|
+
kind: listing
|
|
60
|
+
review_time: up to 2 weeks
|
|
61
|
+
link:
|
|
62
|
+
rel: nofollow
|
|
63
|
+
method: sample_listing
|
|
64
|
+
evidence: https://zplatform.ai/best-ai-tools/best-ai-affiliate-programs/
|
|
65
|
+
samples: 2
|
|
66
|
+
noindex: false
|
|
67
|
+
claimed: null
|
|
68
|
+
bot_check: none
|
|
69
|
+
checked_at: 2026-10-19
|
|
70
|
+
verification:
|
|
71
|
+
status: verified
|
|
72
|
+
checked_at: 2026-10-05
|
|
73
|
+
by: codex
|
|
74
|
+
sources:
|
|
75
|
+
- https://zplatform.ai/submit-ai-tool/
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
id: zumvu
|
|
2
|
+
name: Zumvu
|
|
3
|
+
website: https://zumvu.com
|
|
4
|
+
submission_url: https://zumvu.com/get-listed
|
|
5
|
+
cost:
|
|
6
|
+
classification: PAID
|
|
7
|
+
notes: "$49/year (Basic), $99/year (Premium), $199 lifetime (Growth). Verified badge and manual review required."
|
|
8
|
+
audience:
|
|
9
|
+
- saas
|
|
10
|
+
- startups
|
|
11
|
+
- software
|
|
12
|
+
- ai-tools
|
|
13
|
+
authentication:
|
|
14
|
+
required: true
|
|
15
|
+
signup_allowed: true
|
|
16
|
+
methods:
|
|
17
|
+
- email
|
|
18
|
+
submission:
|
|
19
|
+
url_first: false
|
|
20
|
+
fields: []
|
|
21
|
+
conditions:
|
|
22
|
+
- manual review
|
|
23
|
+
- paid plan required
|
|
24
|
+
autofetch:
|
|
25
|
+
supported: false
|
|
26
|
+
expected: []
|
|
27
|
+
media:
|
|
28
|
+
logo: true
|
|
29
|
+
screenshots:
|
|
30
|
+
supported: true
|
|
31
|
+
max: 5
|
|
32
|
+
kind: listing
|
|
33
|
+
human_only: null
|
|
34
|
+
review_time: 2-3 weeks
|
|
35
|
+
listing_url_pattern: ""
|
|
36
|
+
link:
|
|
37
|
+
rel: dofollow
|
|
38
|
+
method: sample_listing
|
|
39
|
+
evidence: https://zumvu.com/primeplumbingheatingco/
|
|
40
|
+
samples: 2
|
|
41
|
+
noindex: false
|
|
42
|
+
claimed: null
|
|
43
|
+
bot_check: recaptcha
|
|
44
|
+
checked_at: 2026-10-19
|
|
45
|
+
verification:
|
|
46
|
+
status: verified
|
|
47
|
+
checked_at: 2026-09-29
|
|
48
|
+
by: haiku-rB
|
|
49
|
+
sources:
|
|
50
|
+
- https://zumvu.com/get-listed
|
package/scripts/ab
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# The only way agents should drive the browser: persistent profile + Google-services block.
|
|
3
|
+
# The profile holds the human's Google session (for "Continue with Google"). Everything Google
|
|
4
|
+
# other than the sign-in pages is unreachable, so a confused or prompt-injected agent can't open
|
|
5
|
+
# Gmail, Drive, account settings, passwords or payments. Routes vanish when the browser restarts,
|
|
6
|
+
# so they are (re)applied on every call (~10 ms each). accounts.google.com stays open: OAuth needs it.
|
|
7
|
+
set -e
|
|
8
|
+
# Your launch data: LAUNCH_HOME, else the repo itself for a git checkout, else ~/.dirpush (installed package).
|
|
9
|
+
PKG="$(cd "$(dirname "$0")/.." && pwd)"
|
|
10
|
+
if [ -n "$LAUNCH_HOME" ]; then H="$LAUNCH_HOME"; elif [ -d "$PKG/.git" ]; then H="$PKG"; else H="$HOME/.dirpush"; fi
|
|
11
|
+
mkdir -p "$H/data" && cd "$H"
|
|
12
|
+
# Real Chrome, not Chrome for Testing: Google refuses sign-in in the testing build, and the human
|
|
13
|
+
# signs in once in this same profile with `scripts/google-login`.
|
|
14
|
+
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
15
|
+
# Always headed: submissions regularly need the human to click something in this window.
|
|
16
|
+
# AB_PROFILE / AB_SESSION let parallel workers use a throwaway profile and their own session (no-account
|
|
17
|
+
# directories only; the real profile holds the Google login and can only be open once).
|
|
18
|
+
AB="agent-browser --headed --session ${AB_SESSION:-default} --profile ${AB_PROFILE:-$H/data/browser-profile} --executable-path"
|
|
19
|
+
# `launch browser start` already runs this profile (Google services blocked by its PAC script): attach to it
|
|
20
|
+
# instead of launching a second Chrome on the same profile.
|
|
21
|
+
PORT="${LAUNCH_BROWSER_PORT:-9222}"
|
|
22
|
+
if [ -z "$AB_PROFILE" ] && curl -s -m 1 "http://127.0.0.1:$PORT/json/version" >/dev/null 2>&1; then
|
|
23
|
+
exec perl -e 'alarm shift; exec @ARGV or die "cannot run $ARGV[0]: $!\n"' "${AB_TIMEOUT:-90}" agent-browser --session "${AB_SESSION:-default}" --cdp "$PORT" "$@"
|
|
24
|
+
fi
|
|
25
|
+
for host in mail.google.com gmail.com www.gmail.com inbox.google.com \
|
|
26
|
+
drive.google.com drive.usercontent.google.com docs.google.com sheets.google.com slides.google.com forms.google.com \
|
|
27
|
+
photos.google.com keep.google.com calendar.google.com contacts.google.com \
|
|
28
|
+
myaccount.google.com security.google.com myactivity.google.com passwords.google.com \
|
|
29
|
+
pay.google.com payments.google.com wallet.google.com takeout.google.com admin.google.com \
|
|
30
|
+
script.google.com console.cloud.google.com cloud.google.com console.developers.google.com \
|
|
31
|
+
chromewebstore.google.com chrome.google.com; do
|
|
32
|
+
$AB "$CHROME" network route "*://$host/*" --abort >/dev/null 2>&1 || true
|
|
33
|
+
done
|
|
34
|
+
# The Google Account settings live under accounts.google.com too; only sign-in/consent paths are needed.
|
|
35
|
+
for path in "b/*/ManageAccount*" "ManageAccount*" "security*" "*/personal-info*" "*/data-and-privacy*"; do
|
|
36
|
+
$AB "$CHROME" network route "*://accounts.google.com/$path" --abort >/dev/null 2>&1 || true
|
|
37
|
+
done
|
|
38
|
+
# Per-call time limit (AB_TIMEOUT seconds, default 90): a hung call (seen on file uploads) must not freeze a worker.
|
|
39
|
+
# Exit 142 = timed out; then run `dirpush ab close` and start over from the last checkpoint.
|
|
40
|
+
exec perl -e 'alarm shift; exec @ARGV or die "cannot run $ARGV[0]: $!\n"' "${AB_TIMEOUT:-90}" $AB "$CHROME" "$@"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# No AI. Checks pending submissions against each directory's listing_url_pattern and marks live ones.
|
|
3
|
+
# Schedule it yourself, e.g. daily at 9:00: crontab -e → 0 9 * * * /path/to/repo/scripts/check-listings
|
|
4
|
+
# Your launch data: LAUNCH_HOME, else the repo itself for a git checkout, else ~/.dirpush (installed package).
|
|
5
|
+
PKG="$(cd "$(dirname "$0")/.." && pwd)"
|
|
6
|
+
if [ -n "$LAUNCH_HOME" ]; then H="$LAUNCH_HOME"; elif [ -d "$PKG/.git" ]; then H="$PKG"; else H="$HOME/.dirpush"; fi
|
|
7
|
+
mkdir -p "$H/data" && cd "$H"
|
|
8
|
+
bun "$PKG/src/cli.ts" submissions check >> data/check-listings.log 2>&1
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# One-time (or when the session expires): the human signs into Google in the agent's profile using
|
|
3
|
+
# plain Chrome with no automation attached. Same keychain flags agent-browser uses, so it can read
|
|
4
|
+
# the session afterwards. Quit this window (Cmd+Q) when done, before any agent uses the browser.
|
|
5
|
+
# Your launch data: LAUNCH_HOME, else the repo itself for a git checkout, else ~/.dirpush (installed package).
|
|
6
|
+
PKG="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
+
if [ -n "$LAUNCH_HOME" ]; then H="$LAUNCH_HOME"; elif [ -d "$PKG/.git" ]; then H="$PKG"; else H="$HOME/.dirpush"; fi
|
|
8
|
+
mkdir -p "$H/data" && cd "$H"
|
|
9
|
+
agent-browser close >/dev/null 2>&1
|
|
10
|
+
# The agents' Chrome (`launch browser start`) holds the same profile; close it so this window owns it.
|
|
11
|
+
bun "$PKG/src/cli.ts" browser stop >/dev/null 2>&1
|
|
12
|
+
open -na "Google Chrome" --args --user-data-dir="$PWD/data/browser-profile" --use-mock-keychain --password-store=basic \
|
|
13
|
+
--no-first-run "https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.google.com%2F"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
# Bring the agents' browser window (the one `dirpush ab` drives) to the front, on the tab the worker is using,
|
|
3
|
+
# so the human can tick a CAPTCHA etc. without hunting through windows. Called by the dashboard.
|
|
4
|
+
set -e
|
|
5
|
+
# Your launch data: LAUNCH_HOME, else the repo itself for a git checkout, else ~/.dirpush (installed package).
|
|
6
|
+
PKG="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
+
if [ -n "$LAUNCH_HOME" ]; then H="$LAUNCH_HOME"; elif [ -d "$PKG/.git" ]; then H="$PKG"; else H="$HOME/.dirpush"; fi
|
|
8
|
+
mkdir -p "$H/data" && cd "$H"
|
|
9
|
+
PORT=$("$PKG/scripts/ab" get cdp-url | sed -E 's#^ws://[^:]+:([0-9]+)/.*#\1#')
|
|
10
|
+
CUR=$("$PKG/scripts/ab" get url)
|
|
11
|
+
ID=$(curl -s "http://127.0.0.1:$PORT/json/list" | CUR="$CUR" bun -e '
|
|
12
|
+
const t = JSON.parse(await Bun.stdin.text()).filter(t => t.type === "page");
|
|
13
|
+
console.log((t.find(t => t.url === process.env.CUR) ?? t[0]).id)')
|
|
14
|
+
curl -s "http://127.0.0.1:$PORT/json/activate/$ID" >/dev/null
|
|
15
|
+
# Raise that Chrome process only (the human's own Chrome is a different process).
|
|
16
|
+
PID=$(lsof -nP -iTCP:"$PORT" -sTCP:LISTEN -t | head -1)
|
|
17
|
+
osascript -e "tell application \"System Events\" to set frontmost of (first process whose unix id is $PID) to true"
|
package/src/accounts.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory accounts: which directories we already have a login on, and how to sign in. Rows come from job
|
|
3
|
+
* checkpoints (`--data '{"account":{…}}'`), so agents never write them by hand. No secrets here: password accounts
|
|
4
|
+
* point at an agent-browser vault entry by name.
|
|
5
|
+
*/
|
|
6
|
+
import { and, eq } from "drizzle-orm";
|
|
7
|
+
import type { Db } from "./db";
|
|
8
|
+
import { accounts, jobs, type Account } from "./db/schema";
|
|
9
|
+
|
|
10
|
+
type Method = Account["method"];
|
|
11
|
+
type Tx = Parameters<Parameters<Db["transaction"]>[0]>[0];
|
|
12
|
+
|
|
13
|
+
/** Reads the account a checkpoint describes: {vault, username} or {oauth: "google"|"github"} or {method, username}. */
|
|
14
|
+
export function accountFrom(data: Record<string, unknown>): { method: Method; username: string | null; vault: string | null } | null {
|
|
15
|
+
const a = data.account;
|
|
16
|
+
if (!a) return null;
|
|
17
|
+
if (typeof a === "string") return { method: "password", username: null, vault: a }; // older checkpoints: just the vault name
|
|
18
|
+
if (typeof a !== "object") return null;
|
|
19
|
+
const o = a as Record<string, unknown>;
|
|
20
|
+
const str = (v: unknown) => (typeof v === "string" && v.trim() ? v.trim() : null);
|
|
21
|
+
const oauth = str(o.oauth)?.toLowerCase();
|
|
22
|
+
const method: Method =
|
|
23
|
+
oauth === "google" ? "google" : oauth === "github" ? "github" : oauth ? "other"
|
|
24
|
+
: str(o.method) && (["password", "google", "github", "magic_link", "other"] as string[]).includes(str(o.method)!) ? (str(o.method) as Method)
|
|
25
|
+
: str(o.vault) ? "password" : "other";
|
|
26
|
+
return { method, username: str(o.username) ?? str(o.email), vault: str(o.vault) };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Upsert from a job checkpoint; keeps the original createdAt, refreshes lastLoginAt. */
|
|
30
|
+
export function recordAccount(t: Db | Tx, job: { id: string; subject: string; productId: string }, data: Record<string, unknown>, now = Date.now()) {
|
|
31
|
+
const acc = accountFrom(data);
|
|
32
|
+
if (!acc) return null;
|
|
33
|
+
const shared = (data.account as Record<string, unknown> | undefined)?.shared === true;
|
|
34
|
+
const key = { directoryId: job.subject, productId: shared ? "" : job.productId };
|
|
35
|
+
const prev = t.select().from(accounts).where(and(eq(accounts.directoryId, key.directoryId), eq(accounts.productId, key.productId))).get();
|
|
36
|
+
const row = {
|
|
37
|
+
...key,
|
|
38
|
+
method: acc.method,
|
|
39
|
+
username: acc.username ?? prev?.username ?? null,
|
|
40
|
+
vault: acc.vault ?? prev?.vault ?? null,
|
|
41
|
+
jobId: prev?.jobId ?? job.id,
|
|
42
|
+
lastLoginAt: now,
|
|
43
|
+
};
|
|
44
|
+
if (prev) t.update(accounts).set(row).where(and(eq(accounts.directoryId, key.directoryId), eq(accounts.productId, key.productId))).run();
|
|
45
|
+
else t.insert(accounts).values({ ...row, createdAt: now }).run();
|
|
46
|
+
return row;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Accounts for a directory: the product's own first, then a shared one. */
|
|
50
|
+
export function accountsFor(db: Db, directoryId: string, productId?: string) {
|
|
51
|
+
const rows = db.select().from(accounts).where(eq(accounts.directoryId, directoryId)).all();
|
|
52
|
+
return rows.filter((r) => !productId || r.productId === productId || r.productId === "").sort((a, b) => (b.productId === productId ? 1 : 0) - (a.productId === productId ? 1 : 0));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function listAccounts(db: Db, productId?: string) {
|
|
56
|
+
return db.select().from(accounts).all().filter((r) => !productId || r.productId === productId || r.productId === "").sort((a, b) => a.directoryId.localeCompare(b.directoryId));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* One-time fill from what already exists: `account` data saved on jobs, then vault entries named
|
|
61
|
+
* `<directory-id>-<product-id>` (or `<directory-id>`) that no job mentions.
|
|
62
|
+
*/
|
|
63
|
+
export function backfillAccounts(db: Db, vault: { name: string; username: string }[], directoryIds: Set<string>, productIds: string[]) {
|
|
64
|
+
let fromJobs = 0, fromVault = 0;
|
|
65
|
+
for (const j of db.select().from(jobs).where(eq(jobs.kind, "submission")).all()) {
|
|
66
|
+
const data = (j.data ?? {}) as Record<string, unknown>;
|
|
67
|
+
if (accountFrom(data) && recordAccount(db, j, data, j.updatedAt)) fromJobs++;
|
|
68
|
+
}
|
|
69
|
+
for (const v of vault) {
|
|
70
|
+
const product = productIds.find((p) => v.name.endsWith(`-${p}`));
|
|
71
|
+
const directoryId = product ? v.name.slice(0, -(product.length + 1)) : v.name;
|
|
72
|
+
if (!directoryIds.has(directoryId)) continue;
|
|
73
|
+
const productId = product ?? "";
|
|
74
|
+
const prev = db.select().from(accounts).where(and(eq(accounts.directoryId, directoryId), eq(accounts.productId, productId))).get();
|
|
75
|
+
if (prev?.vault) continue;
|
|
76
|
+
if (prev) db.update(accounts).set({ vault: v.name, username: prev.username ?? v.username }).where(and(eq(accounts.directoryId, directoryId), eq(accounts.productId, productId))).run();
|
|
77
|
+
else db.insert(accounts).values({ directoryId, productId, method: "password", username: v.username, vault: v.name }).run();
|
|
78
|
+
fromVault++;
|
|
79
|
+
}
|
|
80
|
+
return { fromJobs, fromVault, total: db.select().from(accounts).all().length };
|
|
81
|
+
}
|