@caddis/cli 0.1.0 ā 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -16
- package/bundles/antigravity-plugin-extras/plugin.json +5 -0
- package/bundles/antigravity-plugin-extras/skills/_registry.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +293 -0
- package/bundles/antigravity-plugin-extras/skills/anchor-review/SKILL.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +367 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-design/SKILL.md +244 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +156 -0
- package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +321 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +144 -0
- package/bundles/antigravity-plugin-extras/skills/asking-questions/SKILL.md +81 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/cross-service/credential-management.md +450 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/browser/README.md +363 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/code-interpreter/README.md +232 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/README.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deploy-template.sh +117 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/deployment-strategies.md +416 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/troubleshooting-guide.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/gateway/validate-deployment.sh +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/identity/README.md +186 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/memory/README.md +253 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/observability/README.md +517 -0
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/services/runtime/README.md +215 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +279 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/references/cdk-patterns.md +431 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/scripts/validate-stack.sh +240 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +318 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/cloudwatch-alarms.md +567 -0
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/references/operations-patterns.md +394 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +758 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/deployment-best-practices.md +830 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/eda-patterns.md +1002 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/observability-best-practices.md +770 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/performance-optimization.md +671 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/security-best-practices.md +625 -0
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/references/serverless-patterns.md +838 -0
- package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +139 -0
- package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +298 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +118 -0
- package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +93 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +392 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/agent-patterns.md +461 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/examples.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/state-patterns.md +360 -0
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/references/troubleshooting.md +362 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +266 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/examples.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +317 -0
- package/bundles/antigravity-plugin-extras/skills/caching-patterns/SKILL.md +385 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/bundles/antigravity-plugin-extras/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +91 -0
- package/bundles/antigravity-plugin-extras/skills/competitive-ads-extractor/SKILL.md +294 -0
- package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +310 -0
- package/bundles/antigravity-plugin-extras/skills/content-research-writer/SKILL.md +539 -0
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-analysis/SKILL.md +111 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/README.md +248 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +203 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/adapter.py.template +44 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/api-router.py.template +43 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/contract-test.py.template +384 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/display-dto.py.template +39 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-service.ts.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/frontend-types.ts.template +38 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/ingestion-model.py.template +42 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/mapping-doc.md.template +46 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/normalizer.py.template +48 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_requirements.md +36 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/extract_ui_demand.md +35 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/prompts/reconcile_mapping.md +66 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/assets/query-catalog.md.template +62 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/consumer-driven-contracts.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/drift-check-catalog.md +305 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/references/layer-responsibilities.md +333 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_connections.py +170 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/discover_sources.py +161 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/drift_check.py +171 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/extract_schema.py +1363 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_gap_report.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/generate_mapping_doc.py +294 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/ts_dto_compare.py +214 -0
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/scripts/validate_lineage.py +51 -0
- package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +753 -0
- package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +220 -0
- package/bundles/antigravity-plugin-extras/skills/db-testing/SKILL.md +117 -0
- package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +259 -0
- package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +167 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +240 -0
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/references/DESIGN-SYSTEM-TEMPLATE.md +577 -0
- package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +323 -0
- package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +378 -0
- package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +78 -0
- package/bundles/antigravity-plugin-extras/skills/domain-name-brainstormer/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/SKILL.md +193 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/element-types.md +497 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/excalidraw-schema.md +356 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/references/reliable-diagrams.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/README.md +60 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-arrow.py +354 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/add-icon-to-diagram.py +412 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/scripts/split-excalidraw-library.py +183 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/business-flow-swimlane-template.excalidraw +334 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/class-diagram-template.excalidraw +558 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/data-flow-diagram-template.excalidraw +279 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/er-diagram-template.excalidraw +662 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/flowchart-template.excalidraw +179 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/mindmap-template.excalidraw +244 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/relationship-template.excalidraw +145 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/reliable-flowchart.excalidraw +1 -0
- package/bundles/antigravity-plugin-extras/skills/excalidraw/templates/sequence-diagram-template.excalidraw +509 -0
- package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +434 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/README.md +221 -0
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/SKILL.md +359 -0
- package/bundles/antigravity-plugin-extras/skills/github-issues/references/templates.md +90 -0
- package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/humanizer/SKILL.md +194 -0
- package/bundles/antigravity-plugin-extras/skills/image-enhancer/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/intent-writer/SKILL.md +201 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +124 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/3p-updates.md +47 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/faq-answers.md +30 -0
- package/bundles/antigravity-plugin-extras/skills/internal-comms/examples/general-comms.md +16 -0
- package/bundles/antigravity-plugin-extras/skills/invoice-organizer/SKILL.md +447 -0
- package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +182 -0
- package/bundles/antigravity-plugin-extras/skills/job-application/SKILL.md +188 -0
- package/bundles/antigravity-plugin-extras/skills/lead-research-assistant/SKILL.md +200 -0
- package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +217 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +100 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/evaluation.md +602 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/mcp_best_practices.md +915 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/node_mcp_server.md +916 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/references/python_mcp_server.md +752 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/connections.py +151 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/bundles/antigravity-plugin-extras/skills/meeting-insights-analyzer/SKILL.md +328 -0
- package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +267 -0
- package/bundles/antigravity-plugin-extras/skills/naming-analyzer/SKILL.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +271 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/AUTHENTICATION.md +154 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/SKILL.md +270 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/api_reference.md +309 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/troubleshooting.md +376 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/references/usage_patterns.md +338 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/__init__.py +81 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/ask_question.py +256 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/auth_manager.py +358 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_session.py +255 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/browser_utils.py +107 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/cleanup_manager.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/config.py +44 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/notebook_manager.py +410 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/run.py +102 -0
- package/bundles/antigravity-plugin-extras/skills/notebooklm/scripts/setup_environment.py +204 -0
- package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +371 -0
- package/bundles/antigravity-plugin-extras/skills/onboard-project/SKILL.md +192 -0
- package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/pipeline-state/SKILL.md +208 -0
- package/bundles/antigravity-plugin-extras/skills/plantuml/SKILL.md +228 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +142 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/linear.app.md +196 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/stripe.md +214 -0
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/templates/vercel.md +218 -0
- package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/raffle-winner-picker/SKILL.md +159 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/README.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +53 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/alternatives.md +258 -0
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/anti-patterns.md +290 -0
- package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +213 -0
- package/bundles/antigravity-plugin-extras/skills/relay/SKILL.md +246 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/SKILL.md +105 -0
- package/bundles/antigravity-plugin-extras/skills/requesting-code-review/code-reviewer.md +146 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +350 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/pwa-checklist.md +226 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/touch-and-interaction.md +265 -0
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/references/transformation-catalogue.md +326 -0
- package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +275 -0
- package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +120 -0
- package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +330 -0
- package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +104 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/SKILL.md +646 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/color_palettes.py +302 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/easing.py +230 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/frame_composer.py +469 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/gif_builder.py +246 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/typography.py +357 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/validators.py +264 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/core/visual_effects.py +494 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/requirements.txt +4 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/bounce.py +106 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/explode.py +331 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/fade.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/flip.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/morph.py +329 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/move.py +293 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/pulse.py +268 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/shake.py +127 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/slide.py +291 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/spin.py +269 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/wiggle.py +300 -0
- package/bundles/antigravity-plugin-extras/skills/slack-gif-creator/templates/zoom.py +312 -0
- package/bundles/antigravity-plugin-extras/skills/slides/SKILL.md +38 -0
- package/bundles/antigravity-plugin-extras/skills/state-tracking/SKILL.md +131 -0
- package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +268 -0
- package/bundles/antigravity-plugin-extras/skills/svg-create/SKILL.md +251 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +59 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/theme-showcase.pdf +0 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/desert-rose.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/golden-hour.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/LICENSE.txt +202 -0
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +320 -0
- package/bundles/antigravity-plugin-extras/skills/ui-testing/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +660 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/_sync_all.py +414 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/app-interface.csv +31 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/charts.csv +26 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/colors.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/design.csv +1776 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/draft.csv +1779 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/google-fonts.csv +1924 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/icons.csv +106 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/landing.csv +35 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/products.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/react-performance.csv +45 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/styles.csv +85 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/typography.csv +74 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ui-reasoning.csv +162 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/data/ux-guidelines.csv +100 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/core.py +247 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/design_system.py +1067 -0
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/scripts/search.py +114 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +140 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/commands.md +252 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/graph-schema.md +116 -0
- package/bundles/antigravity-plugin-extras/skills/understand-anything/references/pipeline.md +331 -0
- package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +74 -0
- package/bundles/antigravity-plugin-extras/skills/verification-loop/SKILL.md +209 -0
- package/bundles/antigravity-plugin-extras/skills/video-downloader/SKILL.md +107 -0
- package/bundles/antigravity-plugin-extras/skills/webapp-development/SKILL.md +288 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +339 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/agents/agent-interface.md +175 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/html.md +384 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/nlp-keywords.md +127 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/palettes.md +149 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/python.md +249 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/react.md +427 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/shapes.md +135 -0
- package/bundles/antigravity-plugin-extras/skills/word-cloud/references/stopwords.md +115 -0
- package/bundles/antigravity-plugin-extras/skills/youtube-transcript/SKILL.md +416 -0
- package/bundles/manifest.json +2 -1
- package/dist/cli.js +166 -37
- package/package.json +1 -1
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
# NotebookLM Skill Usage Patterns
|
|
2
|
+
|
|
3
|
+
Advanced patterns for using the NotebookLM skill effectively.
|
|
4
|
+
|
|
5
|
+
## Critical: Always Use run.py
|
|
6
|
+
|
|
7
|
+
**Every command must use the run.py wrapper:**
|
|
8
|
+
```bash
|
|
9
|
+
# ā
CORRECT:
|
|
10
|
+
python scripts/run.py auth_manager.py status
|
|
11
|
+
python scripts/run.py ask_question.py --question "..."
|
|
12
|
+
|
|
13
|
+
# ā WRONG:
|
|
14
|
+
python scripts/auth_manager.py status # Will fail!
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Pattern 1: Initial Setup
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 1. Check authentication (using run.py!)
|
|
21
|
+
python scripts/run.py auth_manager.py status
|
|
22
|
+
|
|
23
|
+
# 2. If not authenticated, setup (Browser MUST be visible!)
|
|
24
|
+
python scripts/run.py auth_manager.py setup
|
|
25
|
+
# Tell user: "Please log in to Google in the browser window"
|
|
26
|
+
|
|
27
|
+
# 3. Add first notebook - ASK USER FOR DETAILS FIRST!
|
|
28
|
+
# Ask: "What does this notebook contain?"
|
|
29
|
+
# Ask: "What topics should I tag it with?"
|
|
30
|
+
python scripts/run.py notebook_manager.py add \
|
|
31
|
+
--url "https://notebooklm.google.com/notebook/..." \
|
|
32
|
+
--name "User provided name" \
|
|
33
|
+
--description "User provided description" \ # NEVER GUESS!
|
|
34
|
+
--topics "user,provided,topics" # NEVER GUESS!
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Critical Notes:**
|
|
38
|
+
- Virtual environment created automatically by run.py
|
|
39
|
+
- Browser MUST be visible for authentication
|
|
40
|
+
- ALWAYS discover content via query OR ask user for notebook metadata
|
|
41
|
+
|
|
42
|
+
## Pattern 2: Adding Notebooks (Smart Discovery!)
|
|
43
|
+
|
|
44
|
+
**When user shares a NotebookLM URL:**
|
|
45
|
+
|
|
46
|
+
**OPTION A: Smart Discovery (Recommended)**
|
|
47
|
+
```bash
|
|
48
|
+
# 1. Query the notebook to discover its content
|
|
49
|
+
python scripts/run.py ask_question.py \
|
|
50
|
+
--question "What is the content of this notebook? What topics are covered? Provide a complete overview briefly and concisely" \
|
|
51
|
+
--notebook-url "[URL]"
|
|
52
|
+
|
|
53
|
+
# 2. Use discovered info to add it
|
|
54
|
+
python scripts/run.py notebook_manager.py add \
|
|
55
|
+
--url "[URL]" \
|
|
56
|
+
--name "[Based on content]" \
|
|
57
|
+
--description "[From discovery]" \
|
|
58
|
+
--topics "[Extracted topics]"
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**OPTION B: Ask User (Fallback)**
|
|
62
|
+
```bash
|
|
63
|
+
# If discovery fails, ask user:
|
|
64
|
+
"What does this notebook contain?"
|
|
65
|
+
"What topics does it cover?"
|
|
66
|
+
|
|
67
|
+
# Then add with user-provided info:
|
|
68
|
+
python scripts/run.py notebook_manager.py add \
|
|
69
|
+
--url "[URL]" \
|
|
70
|
+
--name "[User's answer]" \
|
|
71
|
+
--description "[User's description]" \
|
|
72
|
+
--topics "[User's topics]"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**NEVER:**
|
|
76
|
+
- Guess what's in a notebook
|
|
77
|
+
- Use generic descriptions
|
|
78
|
+
- Skip discovering content
|
|
79
|
+
|
|
80
|
+
## Pattern 3: Daily Research Workflow
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Check library
|
|
84
|
+
python scripts/run.py notebook_manager.py list
|
|
85
|
+
|
|
86
|
+
# Research with comprehensive questions
|
|
87
|
+
python scripts/run.py ask_question.py \
|
|
88
|
+
--question "Detailed question with all context" \
|
|
89
|
+
--notebook-id notebook-id
|
|
90
|
+
|
|
91
|
+
# Follow-up when you see "Is that ALL you need to know?"
|
|
92
|
+
python scripts/run.py ask_question.py \
|
|
93
|
+
--question "Follow-up question with previous context"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Pattern 4: Follow-Up Questions (CRITICAL!)
|
|
97
|
+
|
|
98
|
+
When NotebookLM responds with "EXTREMELY IMPORTANT: Is that ALL you need to know?":
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
# 1. STOP - Don't respond to user yet
|
|
102
|
+
# 2. ANALYZE - Is answer complete?
|
|
103
|
+
# 3. If gaps exist, ask follow-up:
|
|
104
|
+
python scripts/run.py ask_question.py \
|
|
105
|
+
--question "Specific follow-up with context from previous answer"
|
|
106
|
+
|
|
107
|
+
# 4. Repeat until complete
|
|
108
|
+
# 5. Only then synthesize and respond to user
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Pattern 5: Multi-Notebook Research
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
# Query different notebooks for comparison
|
|
115
|
+
python scripts/run.py notebook_manager.py activate --id notebook-1
|
|
116
|
+
python scripts/run.py ask_question.py --question "Question"
|
|
117
|
+
|
|
118
|
+
python scripts/run.py notebook_manager.py activate --id notebook-2
|
|
119
|
+
python scripts/run.py ask_question.py --question "Same question"
|
|
120
|
+
|
|
121
|
+
# Compare and synthesize answers
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Pattern 6: Error Recovery
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# If authentication fails
|
|
128
|
+
python scripts/run.py auth_manager.py status
|
|
129
|
+
python scripts/run.py auth_manager.py reauth # Browser visible!
|
|
130
|
+
|
|
131
|
+
# If browser crashes
|
|
132
|
+
python scripts/run.py cleanup_manager.py --preserve-library
|
|
133
|
+
python scripts/run.py auth_manager.py setup # Browser visible!
|
|
134
|
+
|
|
135
|
+
# If rate limited
|
|
136
|
+
# Wait or switch accounts
|
|
137
|
+
python scripts/run.py auth_manager.py reauth # Login with different account
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Pattern 7: Batch Processing
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
#!/bin/bash
|
|
144
|
+
NOTEBOOK_ID="notebook-id"
|
|
145
|
+
QUESTIONS=(
|
|
146
|
+
"First comprehensive question"
|
|
147
|
+
"Second comprehensive question"
|
|
148
|
+
"Third comprehensive question"
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
for question in "${QUESTIONS[@]}"; do
|
|
152
|
+
echo "Asking: $question"
|
|
153
|
+
python scripts/run.py ask_question.py \
|
|
154
|
+
--question "$question" \
|
|
155
|
+
--notebook-id "$NOTEBOOK_ID"
|
|
156
|
+
sleep 2 # Avoid rate limits
|
|
157
|
+
done
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Pattern 8: Automated Research Script
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
#!/usr/bin/env python
|
|
164
|
+
import subprocess
|
|
165
|
+
|
|
166
|
+
def research_topic(topic, notebook_id):
|
|
167
|
+
# Comprehensive question
|
|
168
|
+
question = f"""
|
|
169
|
+
Explain {topic} in detail:
|
|
170
|
+
1. Core concepts
|
|
171
|
+
2. Implementation details
|
|
172
|
+
3. Best practices
|
|
173
|
+
4. Common pitfalls
|
|
174
|
+
5. Examples
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
result = subprocess.run([
|
|
178
|
+
"python", "scripts/run.py", "ask_question.py",
|
|
179
|
+
"--question", question,
|
|
180
|
+
"--notebook-id", notebook_id
|
|
181
|
+
], capture_output=True, text=True)
|
|
182
|
+
|
|
183
|
+
return result.stdout
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Pattern 9: Notebook Organization
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
# Organize by domain - with proper metadata
|
|
190
|
+
# ALWAYS ask user for descriptions!
|
|
191
|
+
|
|
192
|
+
# Backend notebooks
|
|
193
|
+
add_notebook("Backend API", "Complete API documentation", "api,rest,backend")
|
|
194
|
+
add_notebook("Database", "Schema and queries", "database,sql,backend")
|
|
195
|
+
|
|
196
|
+
# Frontend notebooks
|
|
197
|
+
add_notebook("React Docs", "React framework documentation", "react,frontend")
|
|
198
|
+
add_notebook("CSS Framework", "Styling documentation", "css,styling,frontend")
|
|
199
|
+
|
|
200
|
+
# Search by domain
|
|
201
|
+
python scripts/run.py notebook_manager.py search --query "backend"
|
|
202
|
+
python scripts/run.py notebook_manager.py search --query "frontend"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Pattern 10: Integration with Development
|
|
206
|
+
|
|
207
|
+
```python
|
|
208
|
+
# Query documentation during development
|
|
209
|
+
def check_api_usage(api_endpoint):
|
|
210
|
+
result = subprocess.run([
|
|
211
|
+
"python", "scripts/run.py", "ask_question.py",
|
|
212
|
+
"--question", f"Parameters and response format for {api_endpoint}",
|
|
213
|
+
"--notebook-id", "api-docs"
|
|
214
|
+
], capture_output=True, text=True)
|
|
215
|
+
|
|
216
|
+
# If follow-up needed
|
|
217
|
+
if "Is that ALL you need" in result.stdout:
|
|
218
|
+
# Ask for examples
|
|
219
|
+
follow_up = subprocess.run([
|
|
220
|
+
"python", "scripts/run.py", "ask_question.py",
|
|
221
|
+
"--question", f"Show code examples for {api_endpoint}",
|
|
222
|
+
"--notebook-id", "api-docs"
|
|
223
|
+
], capture_output=True, text=True)
|
|
224
|
+
|
|
225
|
+
return combine_answers(result.stdout, follow_up.stdout)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Best Practices
|
|
229
|
+
|
|
230
|
+
### 1. Question Formulation
|
|
231
|
+
- Be specific and comprehensive
|
|
232
|
+
- Include all context in each question
|
|
233
|
+
- Request structured responses
|
|
234
|
+
- Ask for examples when needed
|
|
235
|
+
|
|
236
|
+
### 2. Notebook Management
|
|
237
|
+
- **ALWAYS ask user for metadata**
|
|
238
|
+
- Use descriptive names
|
|
239
|
+
- Add comprehensive topics
|
|
240
|
+
- Keep URLs current
|
|
241
|
+
|
|
242
|
+
### 3. Performance
|
|
243
|
+
- Batch related questions
|
|
244
|
+
- Use parallel processing for different notebooks
|
|
245
|
+
- Monitor rate limits (50/day)
|
|
246
|
+
- Switch accounts if needed
|
|
247
|
+
|
|
248
|
+
### 4. Error Handling
|
|
249
|
+
- Always use run.py to prevent venv issues
|
|
250
|
+
- Check auth before operations
|
|
251
|
+
- Implement retry logic
|
|
252
|
+
- Have fallback notebooks ready
|
|
253
|
+
|
|
254
|
+
### 5. Security
|
|
255
|
+
- Use dedicated Google account
|
|
256
|
+
- Never commit data/ directory
|
|
257
|
+
- Regularly refresh auth
|
|
258
|
+
- Track all access
|
|
259
|
+
|
|
260
|
+
## Common Workflows for Claude
|
|
261
|
+
|
|
262
|
+
### Workflow 1: User Sends NotebookLM URL
|
|
263
|
+
|
|
264
|
+
```python
|
|
265
|
+
# 1. Detect URL in message
|
|
266
|
+
if "notebooklm.google.com" in user_message:
|
|
267
|
+
url = extract_url(user_message)
|
|
268
|
+
|
|
269
|
+
# 2. Check if in library
|
|
270
|
+
notebooks = run("notebook_manager.py list")
|
|
271
|
+
|
|
272
|
+
if url not in notebooks:
|
|
273
|
+
# 3. ASK USER FOR METADATA (CRITICAL!)
|
|
274
|
+
name = ask_user("What should I call this notebook?")
|
|
275
|
+
description = ask_user("What does this notebook contain?")
|
|
276
|
+
topics = ask_user("What topics does it cover?")
|
|
277
|
+
|
|
278
|
+
# 4. Add with user-provided info
|
|
279
|
+
run(f"notebook_manager.py add --url {url} --name '{name}' --description '{description}' --topics '{topics}'")
|
|
280
|
+
|
|
281
|
+
# 5. Use the notebook
|
|
282
|
+
answer = run(f"ask_question.py --question '{user_question}'")
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Workflow 2: Research Task
|
|
286
|
+
|
|
287
|
+
```python
|
|
288
|
+
# 1. Understand task
|
|
289
|
+
task = "Implement feature X"
|
|
290
|
+
|
|
291
|
+
# 2. Formulate comprehensive questions
|
|
292
|
+
questions = [
|
|
293
|
+
"Complete implementation guide for X",
|
|
294
|
+
"Error handling for X",
|
|
295
|
+
"Performance considerations for X"
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
# 3. Query with follow-ups
|
|
299
|
+
for q in questions:
|
|
300
|
+
answer = run(f"ask_question.py --question '{q}'")
|
|
301
|
+
|
|
302
|
+
# Check if follow-up needed
|
|
303
|
+
if "Is that ALL you need" in answer:
|
|
304
|
+
# Ask more specific question
|
|
305
|
+
follow_up = run(f"ask_question.py --question 'Specific detail about {q}'")
|
|
306
|
+
|
|
307
|
+
# 4. Synthesize and implement
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Tips and Tricks
|
|
311
|
+
|
|
312
|
+
1. **Always use run.py** - Prevents all venv issues
|
|
313
|
+
2. **Ask for metadata** - Never guess notebook contents
|
|
314
|
+
3. **Use verbose questions** - Include all context
|
|
315
|
+
4. **Follow up automatically** - When you see the prompt
|
|
316
|
+
5. **Monitor rate limits** - 50 queries per day
|
|
317
|
+
6. **Batch operations** - Group related queries
|
|
318
|
+
7. **Export important answers** - Save locally
|
|
319
|
+
8. **Version control notebooks** - Track changes
|
|
320
|
+
9. **Test auth regularly** - Before important tasks
|
|
321
|
+
10. **Document everything** - Keep notes on notebooks
|
|
322
|
+
|
|
323
|
+
## Quick Reference
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
# Always use run.py!
|
|
327
|
+
python scripts/run.py [script].py [args]
|
|
328
|
+
|
|
329
|
+
# Common operations
|
|
330
|
+
run.py auth_manager.py status # Check auth
|
|
331
|
+
run.py auth_manager.py setup # Login (browser visible!)
|
|
332
|
+
run.py notebook_manager.py list # List notebooks
|
|
333
|
+
run.py notebook_manager.py add ... # Add (ask user for metadata!)
|
|
334
|
+
run.py ask_question.py --question ... # Query
|
|
335
|
+
run.py cleanup_manager.py ... # Clean up
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Remember:** When in doubt, use run.py and ask the user for notebook details!
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
NotebookLM Skill Scripts Package
|
|
4
|
+
Provides automatic environment management for all scripts
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import subprocess
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def ensure_venv_and_run():
|
|
14
|
+
"""
|
|
15
|
+
Ensure virtual environment exists and run the requested script.
|
|
16
|
+
This is called when any script is imported or run directly.
|
|
17
|
+
"""
|
|
18
|
+
# Only do this if we're not already in the skill's venv
|
|
19
|
+
skill_dir = Path(__file__).parent.parent
|
|
20
|
+
venv_dir = skill_dir / ".venv"
|
|
21
|
+
|
|
22
|
+
# Check if we're in a venv
|
|
23
|
+
in_venv = hasattr(sys, 'real_prefix') or (
|
|
24
|
+
hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Check if it's OUR venv
|
|
28
|
+
if in_venv:
|
|
29
|
+
venv_path = Path(sys.prefix)
|
|
30
|
+
if venv_path == venv_dir:
|
|
31
|
+
# We're already in the correct venv
|
|
32
|
+
return
|
|
33
|
+
|
|
34
|
+
# We need to set up or switch to our venv
|
|
35
|
+
if not venv_dir.exists():
|
|
36
|
+
print("š§ First-time setup detected...")
|
|
37
|
+
print(" Creating isolated environment for NotebookLM skill...")
|
|
38
|
+
print(" This ensures clean dependency management...")
|
|
39
|
+
|
|
40
|
+
# Create venv
|
|
41
|
+
import venv
|
|
42
|
+
venv.create(venv_dir, with_pip=True)
|
|
43
|
+
|
|
44
|
+
# Install requirements
|
|
45
|
+
requirements_file = skill_dir / "requirements.txt"
|
|
46
|
+
if requirements_file.exists():
|
|
47
|
+
if os.name == 'nt': # Windows
|
|
48
|
+
pip_exe = venv_dir / "Scripts" / "pip.exe"
|
|
49
|
+
else:
|
|
50
|
+
pip_exe = venv_dir / "bin" / "pip"
|
|
51
|
+
|
|
52
|
+
print(" Installing dependencies in isolated environment...")
|
|
53
|
+
subprocess.run(
|
|
54
|
+
[str(pip_exe), "install", "-q", "-r", str(requirements_file)],
|
|
55
|
+
check=True
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Also install patchright's chromium
|
|
59
|
+
print(" Setting up browser automation...")
|
|
60
|
+
if os.name == 'nt':
|
|
61
|
+
python_exe = venv_dir / "Scripts" / "python.exe"
|
|
62
|
+
else:
|
|
63
|
+
python_exe = venv_dir / "bin" / "python"
|
|
64
|
+
|
|
65
|
+
subprocess.run(
|
|
66
|
+
[str(python_exe), "-m", "patchright", "install", "chromium"],
|
|
67
|
+
check=True,
|
|
68
|
+
capture_output=True
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
print("ā
Environment ready! All dependencies isolated in .venv/")
|
|
72
|
+
|
|
73
|
+
# If we're here and not in the venv, we should recommend using the venv
|
|
74
|
+
if not in_venv:
|
|
75
|
+
print("\nā ļø Running outside virtual environment")
|
|
76
|
+
print(" Recommended: Use scripts/run.py to ensure clean execution")
|
|
77
|
+
print(" Or activate: source .venv/bin/activate")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Check environment when module is imported
|
|
81
|
+
ensure_venv_and_run()
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Simple NotebookLM Question Interface
|
|
4
|
+
Based on MCP server implementation - simplified without sessions
|
|
5
|
+
|
|
6
|
+
Implements hybrid auth approach:
|
|
7
|
+
- Persistent browser profile (user_data_dir) for fingerprint consistency
|
|
8
|
+
- Manual cookie injection from state.json for session cookies (Playwright bug workaround)
|
|
9
|
+
See: https://github.com/microsoft/playwright/issues/36139
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import argparse
|
|
13
|
+
import sys
|
|
14
|
+
import time
|
|
15
|
+
import re
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from patchright.sync_api import sync_playwright
|
|
19
|
+
|
|
20
|
+
# Add parent directory to path
|
|
21
|
+
sys.path.insert(0, str(Path(__file__).parent))
|
|
22
|
+
|
|
23
|
+
from auth_manager import AuthManager
|
|
24
|
+
from notebook_manager import NotebookLibrary
|
|
25
|
+
from config import QUERY_INPUT_SELECTORS, RESPONSE_SELECTORS
|
|
26
|
+
from browser_utils import BrowserFactory, StealthUtils
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Follow-up reminder (adapted from MCP server for stateless operation)
|
|
30
|
+
# Since we don't have persistent sessions, we encourage comprehensive questions
|
|
31
|
+
FOLLOW_UP_REMINDER = (
|
|
32
|
+
"\n\nEXTREMELY IMPORTANT: Is that ALL you need to know? "
|
|
33
|
+
"You can always ask another question! Think about it carefully: "
|
|
34
|
+
"before you reply to the user, review their original request and this answer. "
|
|
35
|
+
"If anything is still unclear or missing, ask me another comprehensive question "
|
|
36
|
+
"that includes all necessary context (since each question opens a new browser session)."
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def ask_notebooklm(question: str, notebook_url: str, headless: bool = True) -> str:
|
|
41
|
+
"""
|
|
42
|
+
Ask a question to NotebookLM
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
question: Question to ask
|
|
46
|
+
notebook_url: NotebookLM notebook URL
|
|
47
|
+
headless: Run browser in headless mode
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
Answer text from NotebookLM
|
|
51
|
+
"""
|
|
52
|
+
auth = AuthManager()
|
|
53
|
+
|
|
54
|
+
if not auth.is_authenticated():
|
|
55
|
+
print("ā ļø Not authenticated. Run: python auth_manager.py setup")
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
print(f"š¬ Asking: {question}")
|
|
59
|
+
print(f"š Notebook: {notebook_url}")
|
|
60
|
+
|
|
61
|
+
playwright = None
|
|
62
|
+
context = None
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
# Start playwright
|
|
66
|
+
playwright = sync_playwright().start()
|
|
67
|
+
|
|
68
|
+
# Launch persistent browser context using factory
|
|
69
|
+
context = BrowserFactory.launch_persistent_context(
|
|
70
|
+
playwright,
|
|
71
|
+
headless=headless
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Navigate to notebook
|
|
75
|
+
page = context.new_page()
|
|
76
|
+
print(" š Opening notebook...")
|
|
77
|
+
page.goto(notebook_url, wait_until="domcontentloaded")
|
|
78
|
+
|
|
79
|
+
# Wait for NotebookLM
|
|
80
|
+
page.wait_for_url(re.compile(r"^https://notebooklm\.google\.com/"), timeout=10000)
|
|
81
|
+
|
|
82
|
+
# Wait for query input (MCP approach)
|
|
83
|
+
print(" ā³ Waiting for query input...")
|
|
84
|
+
query_element = None
|
|
85
|
+
|
|
86
|
+
for selector in QUERY_INPUT_SELECTORS:
|
|
87
|
+
try:
|
|
88
|
+
query_element = page.wait_for_selector(
|
|
89
|
+
selector,
|
|
90
|
+
timeout=10000,
|
|
91
|
+
state="visible" # Only check visibility, not disabled!
|
|
92
|
+
)
|
|
93
|
+
if query_element:
|
|
94
|
+
print(f" ā Found input: {selector}")
|
|
95
|
+
break
|
|
96
|
+
except:
|
|
97
|
+
continue
|
|
98
|
+
|
|
99
|
+
if not query_element:
|
|
100
|
+
print(" ā Could not find query input")
|
|
101
|
+
return None
|
|
102
|
+
|
|
103
|
+
# Type question (human-like, fast)
|
|
104
|
+
print(" ā³ Typing question...")
|
|
105
|
+
|
|
106
|
+
# Use primary selector for typing
|
|
107
|
+
input_selector = QUERY_INPUT_SELECTORS[0]
|
|
108
|
+
StealthUtils.human_type(page, input_selector, question)
|
|
109
|
+
|
|
110
|
+
# Submit
|
|
111
|
+
print(" š¤ Submitting...")
|
|
112
|
+
page.keyboard.press("Enter")
|
|
113
|
+
|
|
114
|
+
# Small pause
|
|
115
|
+
StealthUtils.random_delay(500, 1500)
|
|
116
|
+
|
|
117
|
+
# Wait for response (MCP approach: poll for stable text)
|
|
118
|
+
print(" ā³ Waiting for answer...")
|
|
119
|
+
|
|
120
|
+
answer = None
|
|
121
|
+
stable_count = 0
|
|
122
|
+
last_text = None
|
|
123
|
+
deadline = time.time() + 120 # 2 minutes timeout
|
|
124
|
+
|
|
125
|
+
while time.time() < deadline:
|
|
126
|
+
# Check if NotebookLM is still thinking (most reliable indicator)
|
|
127
|
+
try:
|
|
128
|
+
thinking_element = page.query_selector('div.thinking-message')
|
|
129
|
+
if thinking_element and thinking_element.is_visible():
|
|
130
|
+
time.sleep(1)
|
|
131
|
+
continue
|
|
132
|
+
except:
|
|
133
|
+
pass
|
|
134
|
+
|
|
135
|
+
# Try to find response with MCP selectors
|
|
136
|
+
for selector in RESPONSE_SELECTORS:
|
|
137
|
+
try:
|
|
138
|
+
elements = page.query_selector_all(selector)
|
|
139
|
+
if elements:
|
|
140
|
+
# Get last (newest) response
|
|
141
|
+
latest = elements[-1]
|
|
142
|
+
text = latest.inner_text().strip()
|
|
143
|
+
|
|
144
|
+
if text:
|
|
145
|
+
if text == last_text:
|
|
146
|
+
stable_count += 1
|
|
147
|
+
if stable_count >= 3: # Stable for 3 polls
|
|
148
|
+
answer = text
|
|
149
|
+
break
|
|
150
|
+
else:
|
|
151
|
+
stable_count = 0
|
|
152
|
+
last_text = text
|
|
153
|
+
except:
|
|
154
|
+
continue
|
|
155
|
+
|
|
156
|
+
if answer:
|
|
157
|
+
break
|
|
158
|
+
|
|
159
|
+
time.sleep(1)
|
|
160
|
+
|
|
161
|
+
if not answer:
|
|
162
|
+
print(" ā Timeout waiting for answer")
|
|
163
|
+
return None
|
|
164
|
+
|
|
165
|
+
print(" ā
Got answer!")
|
|
166
|
+
# Add follow-up reminder to encourage Claude to ask more questions
|
|
167
|
+
return answer + FOLLOW_UP_REMINDER
|
|
168
|
+
|
|
169
|
+
except Exception as e:
|
|
170
|
+
print(f" ā Error: {e}")
|
|
171
|
+
import traceback
|
|
172
|
+
traceback.print_exc()
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
finally:
|
|
176
|
+
# Always clean up
|
|
177
|
+
if context:
|
|
178
|
+
try:
|
|
179
|
+
context.close()
|
|
180
|
+
except:
|
|
181
|
+
pass
|
|
182
|
+
|
|
183
|
+
if playwright:
|
|
184
|
+
try:
|
|
185
|
+
playwright.stop()
|
|
186
|
+
except:
|
|
187
|
+
pass
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def main():
|
|
191
|
+
parser = argparse.ArgumentParser(description='Ask NotebookLM a question')
|
|
192
|
+
|
|
193
|
+
parser.add_argument('--question', required=True, help='Question to ask')
|
|
194
|
+
parser.add_argument('--notebook-url', help='NotebookLM notebook URL')
|
|
195
|
+
parser.add_argument('--notebook-id', help='Notebook ID from library')
|
|
196
|
+
parser.add_argument('--show-browser', action='store_true', help='Show browser')
|
|
197
|
+
|
|
198
|
+
args = parser.parse_args()
|
|
199
|
+
|
|
200
|
+
# Resolve notebook URL
|
|
201
|
+
notebook_url = args.notebook_url
|
|
202
|
+
|
|
203
|
+
if not notebook_url and args.notebook_id:
|
|
204
|
+
library = NotebookLibrary()
|
|
205
|
+
notebook = library.get_notebook(args.notebook_id)
|
|
206
|
+
if notebook:
|
|
207
|
+
notebook_url = notebook['url']
|
|
208
|
+
else:
|
|
209
|
+
print(f"ā Notebook '{args.notebook_id}' not found")
|
|
210
|
+
return 1
|
|
211
|
+
|
|
212
|
+
if not notebook_url:
|
|
213
|
+
# Check for active notebook first
|
|
214
|
+
library = NotebookLibrary()
|
|
215
|
+
active = library.get_active_notebook()
|
|
216
|
+
if active:
|
|
217
|
+
notebook_url = active['url']
|
|
218
|
+
print(f"š Using active notebook: {active['name']}")
|
|
219
|
+
else:
|
|
220
|
+
# Show available notebooks
|
|
221
|
+
notebooks = library.list_notebooks()
|
|
222
|
+
if notebooks:
|
|
223
|
+
print("\nš Available notebooks:")
|
|
224
|
+
for nb in notebooks:
|
|
225
|
+
mark = " [ACTIVE]" if nb.get('id') == library.active_notebook_id else ""
|
|
226
|
+
print(f" {nb['id']}: {nb['name']}{mark}")
|
|
227
|
+
print("\nSpecify with --notebook-id or set active:")
|
|
228
|
+
print("python scripts/run.py notebook_manager.py activate --id ID")
|
|
229
|
+
else:
|
|
230
|
+
print("ā No notebooks in library. Add one first:")
|
|
231
|
+
print("python scripts/run.py notebook_manager.py add --url URL --name NAME --description DESC --topics TOPICS")
|
|
232
|
+
return 1
|
|
233
|
+
|
|
234
|
+
# Ask the question
|
|
235
|
+
answer = ask_notebooklm(
|
|
236
|
+
question=args.question,
|
|
237
|
+
notebook_url=notebook_url,
|
|
238
|
+
headless=not args.show_browser
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
if answer:
|
|
242
|
+
print("\n" + "=" * 60)
|
|
243
|
+
print(f"Question: {args.question}")
|
|
244
|
+
print("=" * 60)
|
|
245
|
+
print()
|
|
246
|
+
print(answer)
|
|
247
|
+
print()
|
|
248
|
+
print("=" * 60)
|
|
249
|
+
return 0
|
|
250
|
+
else:
|
|
251
|
+
print("\nā Failed to get answer")
|
|
252
|
+
return 1
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
if __name__ == "__main__":
|
|
256
|
+
sys.exit(main())
|