quiver-cli 0.1.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 +188 -0
- package/bin/quiver-cli.mjs +2 -0
- package/dist/cli.js +3074 -0
- package/package.json +55 -0
- package/template/.agents/AGENTS.md +25 -0
- package/template/.agents/commands/cp.md +116 -0
- package/template/.agents/commands/next-setup.md +1064 -0
- package/template/.agents/commands/tf-readme.md +38 -0
- package/template/.agents/config.json +60 -0
- package/template/.agents/skills/agent-browser/SKILL.md +55 -0
- package/template/.agents/skills/apps/skybridge/SKILL.md +46 -0
- package/template/.agents/skills/apps/skybridge/references/architecture.md +175 -0
- package/template/.agents/skills/apps/skybridge/references/copy-template.md +24 -0
- package/template/.agents/skills/apps/skybridge/references/csp.md +33 -0
- package/template/.agents/skills/apps/skybridge/references/deploy.md +33 -0
- package/template/.agents/skills/apps/skybridge/references/discover.md +84 -0
- package/template/.agents/skills/apps/skybridge/references/download-file.md +77 -0
- package/template/.agents/skills/apps/skybridge/references/fetch-and-render-data.md +151 -0
- package/template/.agents/skills/apps/skybridge/references/oauth.md +115 -0
- package/template/.agents/skills/apps/skybridge/references/open-external-links.md +71 -0
- package/template/.agents/skills/apps/skybridge/references/prompt-llm.md +20 -0
- package/template/.agents/skills/apps/skybridge/references/publish.md +19 -0
- package/template/.agents/skills/apps/skybridge/references/run-locally.md +51 -0
- package/template/.agents/skills/apps/skybridge/references/state-and-context.md +151 -0
- package/template/.agents/skills/apps/skybridge/references/ui-guidelines.md +205 -0
- package/template/.agents/skills/code/cleanup/SKILL.md +26 -0
- package/template/.agents/skills/code/vercel-react-best-practices/AGENTS.md +3810 -0
- package/template/.agents/skills/code/vercel-react-best-practices/README.md +123 -0
- package/template/.agents/skills/code/vercel-react-best-practices/SKILL.md +149 -0
- package/template/.agents/skills/code/vercel-react-best-practices/metadata.json +15 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_sections.md +46 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/_template.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/template/.agents/skills/code/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/template/.agents/skills/data/prisma-cli/SKILL.md +247 -0
- package/template/.agents/skills/data/prisma-cli/references/db-execute.md +78 -0
- package/template/.agents/skills/data/prisma-cli/references/db-pull.md +185 -0
- package/template/.agents/skills/data/prisma-cli/references/db-push.md +148 -0
- package/template/.agents/skills/data/prisma-cli/references/db-seed.md +188 -0
- package/template/.agents/skills/data/prisma-cli/references/debug.md +46 -0
- package/template/.agents/skills/data/prisma-cli/references/dev.md +157 -0
- package/template/.agents/skills/data/prisma-cli/references/format.md +48 -0
- package/template/.agents/skills/data/prisma-cli/references/generate.md +173 -0
- package/template/.agents/skills/data/prisma-cli/references/init.md +136 -0
- package/template/.agents/skills/data/prisma-cli/references/mcp.md +38 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-deploy.md +127 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +145 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-diff.md +89 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +78 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-resolve.md +57 -0
- package/template/.agents/skills/data/prisma-cli/references/migrate-status.md +65 -0
- package/template/.agents/skills/data/prisma-cli/references/studio.md +137 -0
- package/template/.agents/skills/data/prisma-cli/references/validate.md +53 -0
- package/template/.agents/skills/data/prisma-client-api/SKILL.md +216 -0
- package/template/.agents/skills/data/prisma-client-api/references/client-methods.md +223 -0
- package/template/.agents/skills/data/prisma-client-api/references/constructor.md +208 -0
- package/template/.agents/skills/data/prisma-client-api/references/filters.md +256 -0
- package/template/.agents/skills/data/prisma-client-api/references/model-queries.md +281 -0
- package/template/.agents/skills/data/prisma-client-api/references/query-options.md +276 -0
- package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +194 -0
- package/template/.agents/skills/data/prisma-client-api/references/relations.md +308 -0
- package/template/.agents/skills/data/prisma-client-api/references/transactions.md +184 -0
- package/template/.agents/skills/design/impeccable/SKILL.md +176 -0
- package/template/.agents/skills/design/impeccable/reference/adapt.md +311 -0
- package/template/.agents/skills/design/impeccable/reference/animate.md +201 -0
- package/template/.agents/skills/design/impeccable/reference/audit.md +133 -0
- package/template/.agents/skills/design/impeccable/reference/bolder.md +113 -0
- package/template/.agents/skills/design/impeccable/reference/brand.md +108 -0
- package/template/.agents/skills/design/impeccable/reference/clarify.md +288 -0
- package/template/.agents/skills/design/impeccable/reference/codex.md +105 -0
- package/template/.agents/skills/design/impeccable/reference/colorize.md +257 -0
- package/template/.agents/skills/design/impeccable/reference/craft.md +123 -0
- package/template/.agents/skills/design/impeccable/reference/critique.md +767 -0
- package/template/.agents/skills/design/impeccable/reference/delight.md +302 -0
- package/template/.agents/skills/design/impeccable/reference/distill.md +111 -0
- package/template/.agents/skills/design/impeccable/reference/document.md +429 -0
- package/template/.agents/skills/design/impeccable/reference/extract.md +69 -0
- package/template/.agents/skills/design/impeccable/reference/harden.md +347 -0
- package/template/.agents/skills/design/impeccable/reference/init.md +172 -0
- package/template/.agents/skills/design/impeccable/reference/interaction-design.md +189 -0
- package/template/.agents/skills/design/impeccable/reference/layout.md +161 -0
- package/template/.agents/skills/design/impeccable/reference/live.md +718 -0
- package/template/.agents/skills/design/impeccable/reference/onboard.md +234 -0
- package/template/.agents/skills/design/impeccable/reference/optimize.md +258 -0
- package/template/.agents/skills/design/impeccable/reference/overdrive.md +130 -0
- package/template/.agents/skills/design/impeccable/reference/polish.md +241 -0
- package/template/.agents/skills/design/impeccable/reference/product.md +60 -0
- package/template/.agents/skills/design/impeccable/reference/quieter.md +99 -0
- package/template/.agents/skills/design/impeccable/reference/shape.md +165 -0
- package/template/.agents/skills/design/impeccable/reference/typeset.md +279 -0
- package/template/.agents/skills/design/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/template/.agents/skills/design/impeccable/scripts/command-metadata.json +94 -0
- package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +225 -0
- package/template/.agents/skills/design/impeccable/scripts/context.mjs +270 -0
- package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +242 -0
- package/template/.agents/skills/design/impeccable/scripts/design-parser.mjs +835 -0
- package/template/.agents/skills/design/impeccable/scripts/detect-csp.mjs +198 -0
- package/template/.agents/skills/design/impeccable/scripts/detect.mjs +21 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +1733 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +244 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +4551 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +43 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +252 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +535 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +986 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +208 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/findings.mjs +12 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +419 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +2316 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/template/.agents/skills/design/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/template/.agents/skills/design/impeccable/scripts/impeccable-paths.mjs +126 -0
- package/template/.agents/skills/design/impeccable/scripts/is-generated.mjs +69 -0
- package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +812 -0
- package/template/.agents/skills/design/impeccable/scripts/live-browser-session.js +123 -0
- package/template/.agents/skills/design/impeccable/scripts/live-browser.js +10316 -0
- package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/template/.agents/skills/design/impeccable/scripts/live-complete.mjs +75 -0
- package/template/.agents/skills/design/impeccable/scripts/live-completion.mjs +19 -0
- package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/template/.agents/skills/design/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/template/.agents/skills/design/impeccable/scripts/live-event-validation.mjs +136 -0
- package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +557 -0
- package/template/.agents/skills/design/impeccable/scripts/live-insert-ui.mjs +458 -0
- package/template/.agents/skills/design/impeccable/scripts/live-insert.mjs +272 -0
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/template/.agents/skills/design/impeccable/scripts/live-manual-edits-buffer.mjs +152 -0
- package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +379 -0
- package/template/.agents/skills/design/impeccable/scripts/live-resume.mjs +94 -0
- package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +2322 -0
- package/template/.agents/skills/design/impeccable/scripts/live-session-store.mjs +289 -0
- package/template/.agents/skills/design/impeccable/scripts/live-status.mjs +61 -0
- package/template/.agents/skills/design/impeccable/scripts/live-svelte-component.mjs +826 -0
- package/template/.agents/skills/design/impeccable/scripts/live-sveltekit-adapter.mjs +274 -0
- package/template/.agents/skills/design/impeccable/scripts/live-ui-core.mjs +179 -0
- package/template/.agents/skills/design/impeccable/scripts/live-wrap.mjs +894 -0
- package/template/.agents/skills/design/impeccable/scripts/live.mjs +246 -0
- package/template/.agents/skills/design/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/template/.agents/skills/design/impeccable/scripts/palette.mjs +633 -0
- package/template/.agents/skills/design/impeccable/scripts/pin.mjs +214 -0
- package/template/.agents/skills/design/shadcn/SKILL.md +242 -0
- package/template/.agents/skills/design/shadcn/agents/openai.yml +5 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn-small.png +0 -0
- package/template/.agents/skills/design/shadcn/assets/shadcn.png +0 -0
- package/template/.agents/skills/design/shadcn/cli.md +257 -0
- package/template/.agents/skills/design/shadcn/customization.md +202 -0
- package/template/.agents/skills/design/shadcn/evals/evals.json +47 -0
- package/template/.agents/skills/design/shadcn/mcp.md +94 -0
- package/template/.agents/skills/design/shadcn/rules/base-vs-radix.md +306 -0
- package/template/.agents/skills/design/shadcn/rules/composition.md +195 -0
- package/template/.agents/skills/design/shadcn/rules/forms.md +192 -0
- package/template/.agents/skills/design/shadcn/rules/icons.md +101 -0
- package/template/.agents/skills/design/shadcn/rules/styling.md +162 -0
- package/template/.agents/skills/find-skills/SKILL.md +142 -0
- package/template/.agents/skills/integrations/langfuse/SKILL.md +142 -0
- package/template/.agents/skills/integrations/langfuse/references/cli.md +52 -0
- package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +100 -0
- package/template/.agents/skills/integrations/langfuse/references/instrumentation.md +134 -0
- package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +288 -0
- package/template/.agents/skills/integrations/langfuse/references/prompt-migration.md +234 -0
- package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +175 -0
- package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +52 -0
- package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +88 -0
- package/template/.agents/skills/integrations/posthog/SKILL.md +102 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-alerts.md +63 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-assigning-issues.md +77 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-fingerprints.md +57 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-monitoring.md +140 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-nextjs.md +490 -0
- package/template/.agents/skills/integrations/posthog/references/error-tracking-source-maps.md +45 -0
- package/template/.agents/skills/integrations/posthog/references/feature-flags-best-practices.md +139 -0
- package/template/.agents/skills/integrations/posthog/references/feature-flags-react.md +302 -0
- package/template/.agents/skills/integrations/posthog/references/identify-users.md +202 -0
- package/template/.agents/skills/integrations/posthog/references/integration-example.md +706 -0
- package/template/.agents/skills/integrations/posthog/references/integration-nextjs.md +385 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-1-begin.md +43 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-2-edit.md +37 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-3-revise.md +22 -0
- package/template/.agents/skills/integrations/posthog/references/integration-step-4-conclude.md +38 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-anthropic.md +200 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-basics.md +62 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-costs.md +197 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-manual-capture.md +397 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-traces.md +98 -0
- package/template/.agents/skills/integrations/posthog/references/llm-analytics-vercel-ai.md +120 -0
- package/template/.agents/skills/repo/repo-ci/SKILL.md +265 -0
- package/template/.agents/skills/repo/repo-init-next-js/SKILL.md +129 -0
- package/template/.agents/skills/repo/repo-init-next-js/references/file-contents.md +800 -0
- package/template/.agents/skills/repo/repo-init-next-js/scripts/setup.sh +47 -0
- package/template/.agents/skills/repo/repo-init-node/SKILL.md +196 -0
- package/template/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agents/skills/skill-creator/SKILL.md +485 -0
- package/template/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/template/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/template/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/template/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/template/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/template/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/template/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/template/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/template/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/template/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/template/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/template/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/template/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/template/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/template/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/template/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/template/.agents/upstreams.json +80 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Check if terraform/README.md is up to date and update if needed
|
|
3
|
+
subtask: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
You are a Terraform documentation auditor. Your task is to verify that `terraform/README.md` accurately reflects the current Terraform configuration and update it if anything is outdated.
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
Current Terraform files:
|
|
11
|
+
!`ls terraform/*.tf 2>/dev/null`
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
|
|
15
|
+
1. **Read all `.tf` files** in the `terraform/` directory.
|
|
16
|
+
2. **Read the current `terraform/README.md`**.
|
|
17
|
+
3. **Compare every section** of the README against the actual Terraform code. Check all of the following:
|
|
18
|
+
- **File Structure table**: Does it list exactly the `.tf` files that exist? Are descriptions accurate?
|
|
19
|
+
- **Resources sections**: Do Cloud Run, Cloud Build, Redis, Secret Manager, IAM, Artifact Registry, and Network sections match the actual resource configurations? Check CPU/memory, scaling limits, ports, Redis version/tier, secret names, service account names/roles, VPC CIDRs, cleanup policies, etc.
|
|
20
|
+
- **Variables table**: Does it list every `variable` block from `variables.tf` with correct type, default, and description?
|
|
21
|
+
- **Outputs table**: Does it list every `output` block from `outputs.tf` with correct description and sensitivity?
|
|
22
|
+
- **GCP APIs list**: Does it list every `google_project_service` resource from `main.tf`?
|
|
23
|
+
- **Environment variables table**: Does it match the env vars and secrets injected into Cloud Run?
|
|
24
|
+
- **Architecture diagram**: Is it roughly consistent with the actual resources?
|
|
25
|
+
- **Usage section**: Are the commands and steps still accurate?
|
|
26
|
+
|
|
27
|
+
4. **If everything is up to date**: Respond with exactly "Alles aktuell." and nothing else.
|
|
28
|
+
|
|
29
|
+
5. **If anything is outdated**: Update `terraform/README.md` to match the current state. Preserve the existing structure, formatting style, and markdown conventions. Only change what is actually wrong or missing. After updating, provide a brief summary of what changed.
|
|
30
|
+
|
|
31
|
+
## Rules
|
|
32
|
+
|
|
33
|
+
- Do NOT add new sections or restructure the document.
|
|
34
|
+
- Do NOT change formatting style, heading levels, or table alignment conventions.
|
|
35
|
+
- Do NOT touch content that is already correct.
|
|
36
|
+
- Be precise: if a value changed from `512 Mi` to `1 Gi`, update exactly that.
|
|
37
|
+
- If a new `.tf` file was added, add it to the File Structure table and create a corresponding Resources subsection if appropriate.
|
|
38
|
+
- If a `.tf` file was removed, remove its entries from the README.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"shared": {
|
|
3
|
+
"devCommand": "pnpm run dev"
|
|
4
|
+
},
|
|
5
|
+
"mcpServers": {
|
|
6
|
+
"playwright": {
|
|
7
|
+
"transport": "stdio",
|
|
8
|
+
"command": "npx",
|
|
9
|
+
"args": ["-y", "@playwright/mcp@latest", "--isolated"]
|
|
10
|
+
},
|
|
11
|
+
"langfuse-docs": {
|
|
12
|
+
"transport": "http",
|
|
13
|
+
"url": "https://langfuse.com/api/mcp"
|
|
14
|
+
},
|
|
15
|
+
"context7": {
|
|
16
|
+
"transport": "http",
|
|
17
|
+
"url": "https://mcp.context7.com/mcp"
|
|
18
|
+
},
|
|
19
|
+
"neon": {
|
|
20
|
+
"transport": "http",
|
|
21
|
+
"url": "https://mcp.neon.tech/mcp",
|
|
22
|
+
"headers": {
|
|
23
|
+
"Authorization": "Bearer ${NEON_API_KEY}"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"vercel": {
|
|
27
|
+
"transport": "http",
|
|
28
|
+
"url": "https://mcp.vercel.com"
|
|
29
|
+
},
|
|
30
|
+
"notion": {
|
|
31
|
+
"transport": "http",
|
|
32
|
+
"url": "https://mcp.notion.com/mcp"
|
|
33
|
+
},
|
|
34
|
+
"posthog": {
|
|
35
|
+
"transport": "http",
|
|
36
|
+
"url": "https://mcp.posthog.com/mcp"
|
|
37
|
+
},
|
|
38
|
+
"langfuse": {
|
|
39
|
+
"transport": "http",
|
|
40
|
+
"url": "https://cloud.langfuse.com/api/public/mcp",
|
|
41
|
+
"headers": {
|
|
42
|
+
"Authorization": "Basic ${LANGFUSE_MCP_TOKEN}"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"claude": {
|
|
47
|
+
"settings": {
|
|
48
|
+
"permissions": {
|
|
49
|
+
"allow": [
|
|
50
|
+
"Bash(pnpm run:*)",
|
|
51
|
+
"Bash(pnpm exec:*)",
|
|
52
|
+
"Bash(gh pr:*)",
|
|
53
|
+
"Bash(gh release:*)",
|
|
54
|
+
"Bash(git:*)"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"enableAllProjectMcpServers": true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-browser
|
|
3
|
+
description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
|
|
4
|
+
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
|
|
5
|
+
hidden: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# agent-browser
|
|
9
|
+
|
|
10
|
+
Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with
|
|
11
|
+
accessibility-tree snapshots and compact `@eN` element refs.
|
|
12
|
+
|
|
13
|
+
Install: `npm i -g agent-browser && agent-browser install`
|
|
14
|
+
|
|
15
|
+
## Start here
|
|
16
|
+
|
|
17
|
+
This file is a discovery stub, not the usage guide. Before running any
|
|
18
|
+
`agent-browser` command, load the actual workflow content from the CLI:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
agent-browser skills get core # start here — workflows, common patterns, troubleshooting
|
|
22
|
+
agent-browser skills get core --full # include full command reference and templates
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The CLI serves skill content that always matches the installed version,
|
|
26
|
+
so instructions never go stale. The content in this stub cannot change
|
|
27
|
+
between releases, which is why it just points at `skills get core`.
|
|
28
|
+
|
|
29
|
+
## Specialized skills
|
|
30
|
+
|
|
31
|
+
Load a specialized skill when the task falls outside browser web pages:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
agent-browser skills get electron # Electron desktop apps (VS Code, Slack, Discord, Figma, ...)
|
|
35
|
+
agent-browser skills get slack # Slack workspace automation
|
|
36
|
+
agent-browser skills get dogfood # Exploratory testing / QA / bug hunts
|
|
37
|
+
agent-browser skills get vercel-sandbox # agent-browser inside Vercel Sandbox microVMs
|
|
38
|
+
agent-browser skills get agentcore # AWS Bedrock AgentCore cloud browsers
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Run `agent-browser skills list` to see everything available on the
|
|
42
|
+
installed version.
|
|
43
|
+
|
|
44
|
+
## Why agent-browser
|
|
45
|
+
|
|
46
|
+
- Fast native Rust CLI, not a Node.js wrapper
|
|
47
|
+
- Works with any AI agent (Cursor, Claude Code, Codex, Continue, Windsurf, etc.)
|
|
48
|
+
- Chrome/Chromium via CDP with no Playwright or Puppeteer dependency
|
|
49
|
+
- Accessibility-tree snapshots with element refs for reliable interaction
|
|
50
|
+
- Sessions, authentication vault, state persistence, video recording
|
|
51
|
+
- Specialized skills for Electron apps, Slack, exploratory testing, cloud providers
|
|
52
|
+
|
|
53
|
+
## Observability Dashboard
|
|
54
|
+
|
|
55
|
+
The dashboard runs independently of browser sessions on port 4848 and can also be opened through a proxied or forwarded URL such as `https://dashboard.agent-browser.localhost`. Agents should stay on the dashboard origin: session tabs, status, and stream traffic are proxied internally, so session ports do not need to be exposed.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: skybridge
|
|
3
|
+
description: |
|
|
4
|
+
Guide developers through creating and updating ChatGPT and MCP apps.
|
|
5
|
+
Covers the full lifecycle: brainstorming ideas against UX guidelines, bootstrapping projects, implementing tools/views, debugging, running dev servers, deploying and connecting apps to ChatGPT.
|
|
6
|
+
Use when a user wants to create or update a ChatGPT app, MCP app, MCP server or use the Skybridge framework.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Creating Apps For LLMs
|
|
10
|
+
|
|
11
|
+
Those are conversational experiences that extend AI assistants through tools and custom UI views. They're built as MCP servers invoked during conversations.
|
|
12
|
+
|
|
13
|
+
⚠️ The app is consumed by two users at once: the **human** and the **AI Assistant LLM**. They collaborate through the view—the human interacts with it, the LLM sees its state. Internalize this before writing code: the view is your shared surface.
|
|
14
|
+
|
|
15
|
+
SPEC.md keeps track of the app's requirements and design decisions. Keep it up to date as you work on the app.
|
|
16
|
+
|
|
17
|
+
**No SPEC.md?** → Read [discover.md](references/discover.md) first. Nothing else until SPEC.md exists.
|
|
18
|
+
|
|
19
|
+
**SPEC.md exists?** → Read SPEC.md, then follow [architecture.md](references/architecture.md) to design the change. Update SPEC.md, then read the relevant Implementation references below before writing code.
|
|
20
|
+
|
|
21
|
+
## Setup
|
|
22
|
+
|
|
23
|
+
1. **Copy template** → [copy-template.md](references/copy-template.md): when starting a new project with ready SPEC.md
|
|
24
|
+
2. **Run locally** → [run-locally.md](references/run-locally.md): when ready to test, need dev server or ChatGPT/Claude connection
|
|
25
|
+
|
|
26
|
+
## Architecture
|
|
27
|
+
|
|
28
|
+
Design or evolve UX flows and API shape → [architecture.md](references/architecture.md)
|
|
29
|
+
|
|
30
|
+
## Implementation
|
|
31
|
+
|
|
32
|
+
- **Fetch and render data** → [fetch-and-render-data.md](references/fetch-and-render-data.md): when implementing server handlers and view data fetching
|
|
33
|
+
- **State and context** → [state-and-context.md](references/state-and-context.md): when persisting view UI state and updating LLM context
|
|
34
|
+
- **Prompt LLM** → [prompt-llm.md](references/prompt-llm.md): when view needs to trigger LLM response
|
|
35
|
+
- **UI guidelines** → [ui-guidelines.md](references/ui-guidelines.md): display modes, layout constraints, theme, device, and locale
|
|
36
|
+
- **External links** → [open-external-links.md](references/open-external-links.md): when redirecting to external URLs or setting "open in app" target
|
|
37
|
+
- **Download file** → [download-file.md](references/download-file.md): when saving content to the user's filesystem
|
|
38
|
+
- **OAuth** → [oauth.md](references/oauth.md): when tools need user authentication to access user-specific data
|
|
39
|
+
- **CSP** → [csp.md](references/csp.md): when declaring allowed domains for fetch, assets, redirects, or iframes
|
|
40
|
+
|
|
41
|
+
## Deploy
|
|
42
|
+
|
|
43
|
+
- **Ship to production** → [deploy.md](references/deploy.md): when ready to deploy via Alpic
|
|
44
|
+
- **Publish to ChatGPT/Claude Directories** → [publish.md](references/publish.md): when ready to submit for review
|
|
45
|
+
|
|
46
|
+
Full API docs: [https://docs.skybridge.tech/api-reference.md](https://docs.skybridge.tech/api-reference.md)
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Architecture Workflow
|
|
2
|
+
|
|
3
|
+
## Concepts
|
|
4
|
+
|
|
5
|
+
A **tool** is a backend action with no UI. It takes input and returns structured output. It can CRUD data and perform operations (checkout, submit, etc.).
|
|
6
|
+
|
|
7
|
+
A **view** is a tool with a UI. It renders the tool output visually. The UI is a React app that can:
|
|
8
|
+
- navigate multiple views (search → detail → confirmation)
|
|
9
|
+
- manage its own state
|
|
10
|
+
- call other tools to fetch data absent from the view output schema or trigger actions.
|
|
11
|
+
|
|
12
|
+
## Step 1: Identify the UX Flows
|
|
13
|
+
|
|
14
|
+
A **flow** is an end-to-end user journey that accomplishes one goal (e.g., "book a flight" = search → select → checkout).
|
|
15
|
+
Extract flows from the SPEC's value proposition. **Stick to the spec**: don't invent flows or infer intermediate steps.
|
|
16
|
+
|
|
17
|
+
**Example:**
|
|
18
|
+
|
|
19
|
+
Input (SPEC):
|
|
20
|
+
> Book flights by destination and dates, and cancel existing bookings by booking ID.
|
|
21
|
+
|
|
22
|
+
✅ Good output:
|
|
23
|
+
```
|
|
24
|
+
Book flight:
|
|
25
|
+
1. Search flights
|
|
26
|
+
2. Select flight
|
|
27
|
+
3. Checkout
|
|
28
|
+
Cancel booking:
|
|
29
|
+
1. Cancel booking
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
❌ Bad output:
|
|
33
|
+
```
|
|
34
|
+
Search flights:
|
|
35
|
+
1. Search flights
|
|
36
|
+
2. View results
|
|
37
|
+
Book flight: ← wrong: split booking into separate flow
|
|
38
|
+
1. Select flight
|
|
39
|
+
2. Enter passenger details
|
|
40
|
+
3. Checkout
|
|
41
|
+
Cancel booking:
|
|
42
|
+
1. List bookings ← wrong: invented step
|
|
43
|
+
2. Cancel booking
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Do not proceed to Step 2 yet**: validate with user, adjust based on feedback.
|
|
47
|
+
|
|
48
|
+
## Step 2: Does the flow need UI?
|
|
49
|
+
|
|
50
|
+
Based on the UX flow:
|
|
51
|
+
|
|
52
|
+
**YES if:**
|
|
53
|
+
- Browsing/comparing multiple items
|
|
54
|
+
- Visual data improves understanding (maps, charts, images)
|
|
55
|
+
- Selections are easier in a visual layout
|
|
56
|
+
|
|
57
|
+
**NO if:**
|
|
58
|
+
- Inputs are naturally conversational (amounts, dates, descriptions)
|
|
59
|
+
- Output is simple enough as text
|
|
60
|
+
- No visual element would meaningfully improve the experience
|
|
61
|
+
|
|
62
|
+
## Step 3: Design the API
|
|
63
|
+
|
|
64
|
+
### Best Practices
|
|
65
|
+
|
|
66
|
+
**Naming:** Both views and tools start with a verb: `search_flights`, `get_details`, `create_checkout`.
|
|
67
|
+
|
|
68
|
+
**One view per flow/intent:** Different flows can have separate views
|
|
69
|
+
❌ `search_flights` view + `view_flight` view (same flow → merge into one view)
|
|
70
|
+
✅ `search_flights` view + `manage_bookings` view (different flows)
|
|
71
|
+
|
|
72
|
+
**Don't duplicate:** View output is returned to the LLM for conversation. View can be re-invoked. Don't create a tool that duplicates what the view fetches.
|
|
73
|
+
❌ `search_flights` view + `get_flights` tool (same data → view already fetches this)
|
|
74
|
+
✅ unique `search_flights` view that can be re-invoked by LLM or user
|
|
75
|
+
|
|
76
|
+
**View UI handles its own state:** Cart, selections, and form inputs live in the view - not as tools.
|
|
77
|
+
❌ `add_to_cart` tool (cart is view state)
|
|
78
|
+
❌ `select_seat` tool (selection is view state)
|
|
79
|
+
❌ `update_quantity` tool (form input is view state)
|
|
80
|
+
✅ Tools are for backend operations only: `create_checkout`, `submit_order`, `make_reservation`
|
|
81
|
+
|
|
82
|
+
**Don't lazy-load:** Tool calls are expensive. Return all needed data upfront.
|
|
83
|
+
❌ `search_flights` view + `get_flight_details` tool (lazy-loading details)
|
|
84
|
+
✅ `search_flights` view returns full flight data including details
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
For each identified flow:
|
|
89
|
+
|
|
90
|
+
### If NEEDS UI → View + Optional Tool(s)
|
|
91
|
+
|
|
92
|
+
**Example: Flight Booking**
|
|
93
|
+
|
|
94
|
+
UX Flow:
|
|
95
|
+
1. Search flights by dates, destination
|
|
96
|
+
2. Browse results, select flight
|
|
97
|
+
3. View flight details
|
|
98
|
+
4. Click checkout → redirect to payment
|
|
99
|
+
|
|
100
|
+
API:
|
|
101
|
+
|
|
102
|
+
**View: search_flights**
|
|
103
|
+
- Input: `{ dates, destination }`
|
|
104
|
+
- Output: `{ flights }` → rendered as list
|
|
105
|
+
- Views: search results, flight detail + passenger form
|
|
106
|
+
- Calls `create_checkout` tool → redirects to payment
|
|
107
|
+
|
|
108
|
+
**Tool: create_checkout**
|
|
109
|
+
- Input: `{ flightId, passengers[] }`
|
|
110
|
+
- Output: `{ checkoutUrl }` → view redirects to Stripe
|
|
111
|
+
|
|
112
|
+
### If DOES NOT NEED UI → Tool(s) Only
|
|
113
|
+
|
|
114
|
+
**Example: Manage Bookings**
|
|
115
|
+
|
|
116
|
+
UX Flow:
|
|
117
|
+
1. User: "Cancel my flight to Paris"
|
|
118
|
+
2. LLM asks for email, fetches bookings, asks clarifying questions if needed
|
|
119
|
+
3. LLM confirms and cancels
|
|
120
|
+
|
|
121
|
+
API:
|
|
122
|
+
|
|
123
|
+
**Tool: list_bookings**
|
|
124
|
+
- Input: `{ email }`
|
|
125
|
+
- Output: `{ booking[] }` → LLM says "You have two upcoming flights for Paris, which one do you want to cancel?"
|
|
126
|
+
|
|
127
|
+
**Tool: cancel_booking**
|
|
128
|
+
- Input: `{ bookingId }`
|
|
129
|
+
- Output: `{ booking }` → LLM summarizes: "Your booking for Paris on Jan 1 has been canceled."
|
|
130
|
+
|
|
131
|
+
## Step 4: Review
|
|
132
|
+
|
|
133
|
+
Present the final architecture to the user, adjust based on feedback.
|
|
134
|
+
|
|
135
|
+
## Step 5: Update SPEC.md
|
|
136
|
+
|
|
137
|
+
Update SPEC.md with the UX flows and API design.
|
|
138
|
+
|
|
139
|
+
**Example:**
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
...
|
|
143
|
+
|
|
144
|
+
## UX Flows
|
|
145
|
+
|
|
146
|
+
Book a flight:
|
|
147
|
+
1. Search flights by destination and dates
|
|
148
|
+
2. Browse results, select flight
|
|
149
|
+
3. Enter passenger details
|
|
150
|
+
4. Checkout (redirect to Stripe)
|
|
151
|
+
|
|
152
|
+
Cancel booking:
|
|
153
|
+
1. Provide email
|
|
154
|
+
2. Select booking to cancel
|
|
155
|
+
|
|
156
|
+
## Tools and Views
|
|
157
|
+
|
|
158
|
+
**View: search_flights**
|
|
159
|
+
- **Input**: `{ destination, dates }`
|
|
160
|
+
- **Output**: `{ flights[] }`
|
|
161
|
+
- **Views**: results list, flight detail, passenger form
|
|
162
|
+
- **Behavior**: manages passenger state locally, calls `create_checkout` tool
|
|
163
|
+
|
|
164
|
+
**Tool: create_checkout**
|
|
165
|
+
- **Input**: `{ flightId, passengers[] }`
|
|
166
|
+
- **Output**: `{ checkoutUrl }`
|
|
167
|
+
|
|
168
|
+
**Tool: list_bookings**
|
|
169
|
+
- **Input**: `{ email }`
|
|
170
|
+
- **Output**: `{ bookings[] }`
|
|
171
|
+
|
|
172
|
+
**Tool: cancel_booking**
|
|
173
|
+
- **Input**: `{ bookingId }`
|
|
174
|
+
- **Output**: `{ success, booking }`
|
|
175
|
+
```
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Start From Template
|
|
2
|
+
|
|
3
|
+
Scaffold a project by setting up the Skybridge template starter. Skybridge is a TypeScript framework for building MCP servers with type-safe APIs and React views.
|
|
4
|
+
|
|
5
|
+
## Workflow
|
|
6
|
+
|
|
7
|
+
1. Ask: "Which package manager?" (npm / pnpm / yarn / bun / deno)
|
|
8
|
+
|
|
9
|
+
2. Run (do not `rm` beforehand—create handles conflicts):
|
|
10
|
+
```bash
|
|
11
|
+
{pm} create skybridge@latest {target-dir}
|
|
12
|
+
|
|
13
|
+
# deno
|
|
14
|
+
deno init --npm skybridge {target-dir}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
3. [Start the dev server](run-locally.md). Read logs to assess readiness/health; fix any errors (TypeScript, etc.) before proceeding.
|
|
18
|
+
|
|
19
|
+
4. Start implementing your app using these core concepts:
|
|
20
|
+
- Server handlers and view components → [fetch-and-render-data.md](fetch-and-render-data.md)
|
|
21
|
+
- View state and LLM context → [state-and-context.md](state-and-context.md)
|
|
22
|
+
- Display modes → [ui-guidelines.md](ui-guidelines.md)
|
|
23
|
+
|
|
24
|
+
5. Delete unused views files and leftover code.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Content Security Policy
|
|
2
|
+
|
|
3
|
+
Views run in sandboxed iframes with strict CSP. Whitelist external domains under the tool's `view.csp`:
|
|
4
|
+
|
|
5
|
+
| Property | Purpose |
|
|
6
|
+
|----------|---------|
|
|
7
|
+
| `connectDomains` | Fetch/XHR requests to external APIs |
|
|
8
|
+
| `resourceDomains` | Static assets (images, fonts, scripts, styles) |
|
|
9
|
+
| `redirectDomains` | (optional) `openExternal` destinations without safe-link modal |
|
|
10
|
+
| `frameDomains` | (optional) Iframe embeds — triggers stricter review |
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
server.registerTool(
|
|
14
|
+
{
|
|
15
|
+
name: "search-flights",
|
|
16
|
+
description: "Search flights",
|
|
17
|
+
inputSchema: { ... },
|
|
18
|
+
view: {
|
|
19
|
+
component: "search-flights",
|
|
20
|
+
description: "Flight results",
|
|
21
|
+
csp: {
|
|
22
|
+
connectDomains: ["https://api.example.com"],
|
|
23
|
+
resourceDomains: ["https://cdn.example.com"],
|
|
24
|
+
frameDomains: ["https://maps.example.com"],
|
|
25
|
+
redirectDomains: ["https://checkout.example.com"],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
async (input) => ({ ... })
|
|
30
|
+
);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Skybridge auto-includes the server's domain. Only add external domains.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Deploy
|
|
2
|
+
|
|
3
|
+
Deploy to Alpic using Alpic CLI.
|
|
4
|
+
|
|
5
|
+
## Parameters
|
|
6
|
+
|
|
7
|
+
- {path-to-project} is the path to the project directory. It is relative to the current working directory.
|
|
8
|
+
- When executing a command requiring `{path-to-project}`, check that you provided the correct path to the project.
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
|
|
12
|
+
1. **Make sure the user is logged in to Alpic**
|
|
13
|
+
|
|
14
|
+
Execute `npx alpic@latest login` to login to Alpic.
|
|
15
|
+
|
|
16
|
+
2. **Deploy to Alpic**
|
|
17
|
+
|
|
18
|
+
If it's a first time deployment (absence of `.alpic/` folder in the project directory), **ask the user for the project name**.
|
|
19
|
+
Then, execute `npx alpic@latest deploy --yes --project-name {project-name} {path-to-project}`.
|
|
20
|
+
|
|
21
|
+
3. **Subsequent deployments**
|
|
22
|
+
|
|
23
|
+
For subsequent deployments (presence of `.alpic/` folder in the project directory), execute `npx alpic@latest deploy --yes {path-to-project}`.
|
|
24
|
+
|
|
25
|
+
4. **Setup GitHub integration**
|
|
26
|
+
|
|
27
|
+
If it's a new project, ask the user first if they want to setup git.
|
|
28
|
+
If yes:
|
|
29
|
+
|
|
30
|
+
- **Push to GitHub** — Commit and push code
|
|
31
|
+
- **Link to Alpic project** - Use `npx alpic@latest git connect --yes {path-to-project}`
|
|
32
|
+
|
|
33
|
+
Full docs: [docs.alpic.ai/quickstart](https://docs.alpic.ai/quickstart)
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Discovery Workflow
|
|
2
|
+
|
|
3
|
+
**Goal: Idea maturation, not speed.**
|
|
4
|
+
|
|
5
|
+
**Proceed in phases.** Even if the user provides details, complete each phase through conversation. Do not infer or assume but discuss and validate with user. Proceed one phase at a time—do not write SPEC.md nor proceed to implementation until all phases are validated.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Phase 1: Value Proposition
|
|
10
|
+
|
|
11
|
+
1. **Problem + User**: What problem? For whom?
|
|
12
|
+
2. **Pain**: How solved today? What's painful?
|
|
13
|
+
3. **Core actions**: 1-3 focused actions (not a full app port)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Phase 2: Why LLM?
|
|
18
|
+
|
|
19
|
+
1. **Conversational win**: Where does "just say it" beat clicking?
|
|
20
|
+
2. **LLM adds**: What does the LLM contribute? (intent, generation, reasoning)
|
|
21
|
+
3. **What LLM lacks**: Your data? APIs? Ability to take real actions?
|
|
22
|
+
|
|
23
|
+
**Fail patterns** (stop if any match):
|
|
24
|
+
- Long-form or static content better suited for a website
|
|
25
|
+
- Complex multi-step workflows that exceed display modes
|
|
26
|
+
- Dashboards (use tables, lists, or short paragraphs instead)
|
|
27
|
+
- Full app ports instead of focused atomic actions
|
|
28
|
+
- No clear answer to "why inside an AI assistant vs standalone?"
|
|
29
|
+
|
|
30
|
+
→ If fails: explain gap, suggest different interface or narrower scope.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Phase 3: UI Overview
|
|
35
|
+
|
|
36
|
+
Describe the user journey through core actions:
|
|
37
|
+
|
|
38
|
+
1. **First view**: What does the user see when they start?
|
|
39
|
+
2. **Key interactions**: What happens at each core action?
|
|
40
|
+
3. **End state**: How does the experience conclude?
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Phase 4: Product Context
|
|
45
|
+
|
|
46
|
+
Gather: existing products, APIs/data, auth method, constraints.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Phase 5: Create SPEC.md
|
|
51
|
+
|
|
52
|
+
**Only after phases 1-4 are discussed and validated with the user.** Do not write SPEC.md from the initial query alone.
|
|
53
|
+
|
|
54
|
+
Assemble from phases. Target: cwd if empty, else `{app-name}/`.
|
|
55
|
+
|
|
56
|
+
### Example
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
# Pizza Ordering App
|
|
60
|
+
|
|
61
|
+
## Value Proposition
|
|
62
|
+
Order pizza through conversation. Target: PizzaCo customers wanting quick orders. Pain: navigating menus is slower than describing what you want.
|
|
63
|
+
|
|
64
|
+
**Core actions**: Browse menu, customize order, track delivery.
|
|
65
|
+
|
|
66
|
+
## Why LLM?
|
|
67
|
+
**Conversational win**: "My usual but with mushrooms" = one sentence vs. multiple screens.
|
|
68
|
+
**LLM adds**: Intent from natural descriptions, handles modifications.
|
|
69
|
+
**What LLM lacks**: Real menu and pricing data, order placement.
|
|
70
|
+
|
|
71
|
+
## UI Overview
|
|
72
|
+
**First view**: Popular pizzas with quick "reorder last" option.
|
|
73
|
+
**Browsing**: Menu with categories, filters, and customization options.
|
|
74
|
+
**Checkout**: Order summary, confirm, and place order.
|
|
75
|
+
**Tracking**: Live delivery status with ETA and map.
|
|
76
|
+
|
|
77
|
+
## Product Context
|
|
78
|
+
- **Existing products**: Mobile app, website
|
|
79
|
+
- **API**: REST at api.pizzaco.com (OAuth2, 100 req/min)
|
|
80
|
+
- **Auth**: PizzaCo account (OAuth2)
|
|
81
|
+
- **Constraints**: Payment via existing account only
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
After SPEC.md is created, confirm with user before proceeding to implementation.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Download file
|
|
2
|
+
|
|
3
|
+
Save content to the user's filesystem → `useDownload`
|
|
4
|
+
|
|
5
|
+
Views run in sandboxed iframes where `<a download>` and `URL.createObjectURL` are blocked. `useDownload` asks the host to perform the save; the host shows a confirmation dialog first.
|
|
6
|
+
|
|
7
|
+
> MCP Apps only. On ChatGPT (Apps SDK), use `useFiles` to work with attachments instead.
|
|
8
|
+
|
|
9
|
+
## Inline text (CSV, JSON, markdown)
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { useDownload } from "skybridge/web";
|
|
13
|
+
|
|
14
|
+
function ExportButton({ rows }: { rows: Row[] }) {
|
|
15
|
+
const { download } = useDownload();
|
|
16
|
+
|
|
17
|
+
const handleClick = async () => {
|
|
18
|
+
const csv = rows.map((r) => `${r.id},${r.name}`).join("\n");
|
|
19
|
+
const { isError } = await download({
|
|
20
|
+
contents: [
|
|
21
|
+
{
|
|
22
|
+
type: "resource",
|
|
23
|
+
resource: {
|
|
24
|
+
uri: "file:///orders.csv", // filename hint
|
|
25
|
+
mimeType: "text/csv",
|
|
26
|
+
text: csv,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
});
|
|
31
|
+
if (isError) {
|
|
32
|
+
// user cancelled or host denied — soft fail, not an exception
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return <button onClick={handleClick}>Export CSV</button>;
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Inline binary
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
await download({
|
|
44
|
+
contents: [
|
|
45
|
+
{
|
|
46
|
+
type: "resource",
|
|
47
|
+
resource: {
|
|
48
|
+
uri: "file:///chart.png",
|
|
49
|
+
mimeType: "image/png",
|
|
50
|
+
blob: base64EncodedPng,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Resource link (host fetches)
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
await download({
|
|
61
|
+
contents: [
|
|
62
|
+
{
|
|
63
|
+
type: "resource_link",
|
|
64
|
+
uri: "https://api.example.com/reports/q4.pdf",
|
|
65
|
+
name: "Q4 Report",
|
|
66
|
+
mimeType: "application/pdf",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Notes
|
|
73
|
+
|
|
74
|
+
- Must be user-initiated (button/menu click). Calls from mount effects will be rejected.
|
|
75
|
+
- The `uri` is a filename hint; the host derives the suggested save name from the last path segment.
|
|
76
|
+
- `isError: true` is a soft signal (user cancelled / host denied). Transport errors throw.
|
|
77
|
+
- For binary content above a few hundred KB, prefer `resource_link` over inline base64.
|