quiver-cli 1.2.0 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/cli.js +237 -10
  2. package/package.json +1 -1
  3. package/template/.agents/skills/agent-browser/SKILL.md +1 -0
  4. package/template/.agents/skills/apps/skybridge/SKILL.md +2 -0
  5. package/template/.agents/skills/data/prisma-cli/SKILL.md +25 -7
  6. package/template/.agents/skills/data/prisma-cli/references/agent-safety.md +27 -0
  7. package/template/.agents/skills/data/prisma-cli/references/complete.md +22 -0
  8. package/template/.agents/skills/data/prisma-cli/references/db-push.md +2 -0
  9. package/template/.agents/skills/data/prisma-cli/references/init.md +3 -0
  10. package/template/.agents/skills/data/prisma-cli/references/mcp.md +2 -1
  11. package/template/.agents/skills/data/prisma-cli/references/migrate-dev.md +1 -1
  12. package/template/.agents/skills/data/prisma-cli/references/migrate-reset.md +2 -0
  13. package/template/.agents/skills/data/prisma-client-api/SKILL.md +1 -1
  14. package/template/.agents/skills/data/prisma-client-api/references/constructor.md +13 -0
  15. package/template/.agents/skills/data/prisma-client-api/references/raw-queries.md +4 -0
  16. package/template/.agents/skills/design/impeccable/SKILL.md +5 -5
  17. package/template/.agents/skills/design/impeccable/reference/android.md +6 -0
  18. package/template/.agents/skills/design/impeccable/reference/animate.md +3 -0
  19. package/template/.agents/skills/design/impeccable/reference/bolder.md +3 -1
  20. package/template/.agents/skills/design/impeccable/reference/craft-floor.md +2 -0
  21. package/template/.agents/skills/design/impeccable/reference/critique.md +23 -5
  22. package/template/.agents/skills/design/impeccable/reference/degraded/asset-producer.md +15 -68
  23. package/template/.agents/skills/design/impeccable/reference/degraded/finish-reviewer.md +13 -12
  24. package/template/.agents/skills/design/impeccable/reference/distill.md +1 -1
  25. package/template/.agents/skills/design/impeccable/reference/doctor.md +1 -0
  26. package/template/.agents/skills/design/impeccable/reference/document.md +1 -1
  27. package/template/.agents/skills/design/impeccable/reference/extract.md +1 -1
  28. package/template/.agents/skills/design/impeccable/reference/hooks.md +17 -11
  29. package/template/.agents/skills/design/impeccable/reference/init.md +9 -3
  30. package/template/.agents/skills/design/impeccable/reference/ios.md +6 -0
  31. package/template/.agents/skills/design/impeccable/reference/new-work.md +69 -29
  32. package/template/.agents/skills/design/impeccable/reference/overdrive.md +1 -1
  33. package/template/.agents/skills/design/impeccable/reference/polish.md +13 -5
  34. package/template/.agents/skills/design/impeccable/reference/quieter.md +1 -1
  35. package/template/.agents/skills/design/impeccable/reference/routing.md +1 -1
  36. package/template/.agents/skills/design/impeccable/reference/visualize.md +21 -22
  37. package/template/.agents/skills/design/impeccable/scripts/build-phase.mjs +1022 -0
  38. package/template/.agents/skills/design/impeccable/scripts/comp-diff.mjs +391 -0
  39. package/template/.agents/skills/design/impeccable/scripts/comp-spec.mjs +513 -0
  40. package/template/.agents/skills/design/impeccable/scripts/concept-seed.mjs +297 -41
  41. package/template/.agents/skills/design/impeccable/scripts/context-signals.mjs +10 -19
  42. package/template/.agents/skills/design/impeccable/scripts/context.mjs +124 -9
  43. package/template/.agents/skills/design/impeccable/scripts/critique-storage.mjs +279 -19
  44. package/template/.agents/skills/design/impeccable/scripts/data/font-index-failures.json +121 -0
  45. package/template/.agents/skills/design/impeccable/scripts/data/font-index.json +1 -0
  46. package/template/.agents/skills/design/impeccable/scripts/detect.mjs +9 -0
  47. package/template/.agents/skills/design/impeccable/scripts/detector/browser/injected/index.mjs +192 -11
  48. package/template/.agents/skills/design/impeccable/scripts/detector/cli/main.mjs +10 -16
  49. package/template/.agents/skills/design/impeccable/scripts/detector/design-system.mjs +339 -11
  50. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns-browser.js +1482 -722
  51. package/template/.agents/skills/design/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
  52. package/template/.agents/skills/design/impeccable/scripts/detector/engines/browser/detect-url.mjs +64 -2
  53. package/template/.agents/skills/design/impeccable/scripts/detector/engines/regex/detect-text.mjs +580 -29
  54. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +62 -7
  55. package/template/.agents/skills/design/impeccable/scripts/detector/engines/static-html/detect-html.mjs +31 -7
  56. package/template/.agents/skills/design/impeccable/scripts/detector/node/file-system.mjs +23 -22
  57. package/template/.agents/skills/design/impeccable/scripts/detector/registry/antipatterns.mjs +18 -0
  58. package/template/.agents/skills/design/impeccable/scripts/detector/rules/checks.mjs +471 -370
  59. package/template/.agents/skills/design/impeccable/scripts/detector/shared/color.mjs +474 -2
  60. package/template/.agents/skills/design/impeccable/scripts/detector/shared/constants.mjs +17 -2
  61. package/template/.agents/skills/design/impeccable/scripts/doctor.mjs +14 -21
  62. package/template/.agents/skills/design/impeccable/scripts/embed-prompt.mjs +81 -48
  63. package/template/.agents/skills/design/impeccable/scripts/font-match.mjs +457 -0
  64. package/template/.agents/skills/design/impeccable/scripts/generate-image.mjs +219 -12
  65. package/template/.agents/skills/design/impeccable/scripts/hook-admin.mjs +93 -15
  66. package/template/.agents/skills/design/impeccable/scripts/hook-before-edit.mjs +41 -19
  67. package/template/.agents/skills/design/impeccable/scripts/hook-lib.mjs +507 -117
  68. package/template/.agents/skills/design/impeccable/scripts/hook.mjs +10 -9
  69. package/template/.agents/skills/design/impeccable/scripts/lib/concept-catalog.mjs +40 -1
  70. package/template/.agents/skills/design/impeccable/scripts/lib/design-parser.mjs +120 -82
  71. package/template/.agents/skills/design/impeccable/scripts/lib/font-fingerprint.mjs +564 -0
  72. package/template/.agents/skills/design/impeccable/scripts/lib/font-index.mjs +130 -0
  73. package/template/.agents/skills/design/impeccable/scripts/lib/hero-checks.mjs +246 -0
  74. package/template/.agents/skills/design/impeccable/scripts/lib/image-metrics.mjs +306 -0
  75. package/template/.agents/skills/design/impeccable/scripts/lib/impeccable-config.mjs +41 -59
  76. package/template/.agents/skills/design/impeccable/scripts/lib/is-generated.mjs +5 -2
  77. package/template/.agents/skills/design/impeccable/scripts/lib/live-path-globs.mjs +37 -0
  78. package/template/.agents/skills/design/impeccable/scripts/lib/open-system-browser.mjs +26 -0
  79. package/template/.agents/skills/design/impeccable/scripts/lib/png.mjs +281 -0
  80. package/template/.agents/skills/design/impeccable/scripts/lib/raster.mjs +194 -0
  81. package/template/.agents/skills/design/impeccable/scripts/lib/roll-selection.mjs +26 -19
  82. package/template/.agents/skills/design/impeccable/scripts/lib/staleness-deep.mjs +31 -3
  83. package/template/.agents/skills/design/impeccable/scripts/lib/staleness.mjs +93 -17
  84. package/template/.agents/skills/design/impeccable/scripts/lib/surface-briefs.mjs +9 -11
  85. package/template/.agents/skills/design/impeccable/scripts/live/browser-script-parts.mjs +31 -2
  86. package/template/.agents/skills/design/impeccable/scripts/live/project-ignores.mjs +139 -0
  87. package/template/.agents/skills/design/impeccable/scripts/live/svelte-ast.mjs +10 -2
  88. package/template/.agents/skills/design/impeccable/scripts/live/svelte-component.mjs +26 -2
  89. package/template/.agents/skills/design/impeccable/scripts/live/sveltekit-adapter.mjs +15 -27
  90. package/template/.agents/skills/design/impeccable/scripts/live/tanstack-adapter.mjs +4 -25
  91. package/template/.agents/skills/design/impeccable/scripts/live/ui-surfaces.mjs +75 -0
  92. package/template/.agents/skills/design/impeccable/scripts/live-accept.mjs +21 -37
  93. package/template/.agents/skills/design/impeccable/scripts/live-browser-ignores.js +242 -0
  94. package/template/.agents/skills/design/impeccable/scripts/live-browser.js +62 -23
  95. package/template/.agents/skills/design/impeccable/scripts/live-commit-manual-edits.mjs +68 -112
  96. package/template/.agents/skills/design/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
  97. package/template/.agents/skills/design/impeccable/scripts/live-inject.mjs +2 -42
  98. package/template/.agents/skills/design/impeccable/scripts/live-poll.mjs +5 -4
  99. package/template/.agents/skills/design/impeccable/scripts/live-server.mjs +56 -19
  100. package/template/.agents/skills/design/impeccable/scripts/live.mjs +12 -37
  101. package/template/.agents/skills/design/impeccable/scripts/pin.mjs +8 -5
  102. package/template/.agents/skills/design/impeccable/scripts/serve-question.mjs +1006 -155
  103. package/template/.agents/skills/design/shadcn/rules/chat.md +26 -0
  104. package/template/.agents/skills/hono/SKILL.md +17 -3
  105. package/template/.agents/skills/integrations/langfuse/SKILL.md +8 -4
  106. package/template/.agents/skills/integrations/langfuse/references/cli.md +1 -1
  107. package/template/.agents/skills/integrations/langfuse/references/create-dataset.md +35 -0
  108. package/template/.agents/skills/integrations/langfuse/references/error-analysis.md +9 -10
  109. package/template/.agents/skills/integrations/langfuse/references/judge-calibration.md +8 -6
  110. package/template/.agents/skills/integrations/langfuse/references/sdk-upgrade.md +34 -0
  111. package/template/.agents/skills/integrations/langfuse/references/setting-up-evals.md +65 -0
  112. package/template/.agents/skills/integrations/langfuse/references/skill-feedback.md +20 -40
  113. package/template/.agents/skills/integrations/langfuse/references/user-feedback.md +4 -30
  114. package/template/.agents/skills/integrations/langfuse/references/v4-project-migration.md +3 -1
  115. package/template/.agents/skills/supabase/CHANGELOG.md +7 -0
  116. package/template/.agents/skills/supabase/SKILL.md +5 -1
  117. package/template/.agents/skills/writing/humanizer/LICENSE +21 -0
  118. package/template/.agents/skills/writing/humanizer/README.md +209 -0
  119. package/template/.agents/skills/writing/humanizer/SKILL.md +173 -338
  120. package/template/.agents/upstreams.json +21 -22
  121. package/template/.agents/skills/design/impeccable/scripts/live/ui-core.mjs +0 -180
@@ -208,6 +208,32 @@ write a `useStickToBottom` hook, a `ResizeObserver`, or manual `scrollTop` math.
208
208
  and scrolls back on click. `direction="end"` (default) or `direction="start"`.
209
209
  It is a self-managing control, so don't gate it behind your own scroll-position
210
210
  state.
211
+ - **Open a saved transcript without a flash.** `defaultScrollPosition` applies
212
+ after mount. When it is `"end"` or `"last-anchor"`, the viewport has
213
+ `data-pending-scroll` until that position is applied. The styled viewport
214
+ hides. For `"end"` on first paint when messages are in the server HTML, copy
215
+ this script into the page, not into the primitive. Skip it for `"last-anchor"`
216
+ and for client-fetched messages. Keep `suppressHydrationWarning` on the
217
+ viewport. Pass a `nonce` if you use a Content Security Policy.
218
+
219
+ ```tsx
220
+ const scrollToEndScript = `(function () {
221
+ var viewport = document.getElementById("messages")
222
+ if (!viewport) {
223
+ return
224
+ }
225
+ viewport.scrollTop = viewport.scrollHeight
226
+ viewport.removeAttribute("data-pending-scroll")
227
+ })()`
228
+
229
+ <MessageScroller>
230
+ <MessageScrollerViewport id="messages" suppressHydrationWarning>
231
+ <MessageScrollerContent>{/* transcript */}</MessageScrollerContent>
232
+ </MessageScrollerViewport>
233
+ <script dangerouslySetInnerHTML={{ __html: scrollToEndScript }} />
234
+ <MessageScrollerButton />
235
+ </MessageScroller>
236
+ ```
211
237
 
212
238
  For a "thinking…" indicator while the model generates, apply the `shimmer`
213
239
  utility to text. Don't author a custom keyframe animation. See
@@ -5,7 +5,15 @@ description: Use when building Hono web applications or when the user asks about
5
5
 
6
6
  # Hono Skill
7
7
 
8
- Build Hono web applications. This skill provides inline API knowledge for AI. Use `npx hono request` to test endpoints. If the `hono-docs` MCP server is configured, prefer its tools for the latest documentation over the inline reference.
8
+ Build Hono web applications. This skill provides inline API knowledge for AI. Use `npx hono request` to test endpoints.
9
+
10
+ ## Latest Documentation
11
+
12
+ For details beyond this inline reference, fetch the latest documentation from https://hono.dev. Get the index of doc pages from `https://hono.dev/llms.txt`, then fetch a page with the `Accept: text/markdown` header to receive it as Markdown:
13
+
14
+ ```bash
15
+ curl -H "Accept: text/markdown" https://hono.dev/docs/helpers/cookie
16
+ ```
9
17
 
10
18
  ## Hono CLI Usage
11
19
 
@@ -231,11 +239,17 @@ import { timing } from 'hono/timing'
231
239
  import { cache } from 'hono/cache'
232
240
  import { bearerAuth } from 'hono/bearer-auth'
233
241
  import { jwt } from 'hono/jwt'
242
+ import { jwk } from 'hono/jwk'
234
243
  import { csrf } from 'hono/csrf'
235
244
  import { ipRestriction } from 'hono/ip-restriction'
236
245
  import { bodyLimit } from 'hono/body-limit'
246
+ import { timeout } from 'hono/timeout'
237
247
  import { requestId } from 'hono/request-id'
238
248
  import { methodOverride } from 'hono/method-override'
249
+ import { methodNotAllowed } from 'hono/method-not-allowed'
250
+ import { languageDetector } from 'hono/language'
251
+ import { some, every, except } from 'hono/combine'
252
+ import { contextStorage, getContext } from 'hono/context-storage'
239
253
  import { trailingSlash, trimTrailingSlash } from 'hono/trailing-slash'
240
254
 
241
255
  // Registration
@@ -372,7 +386,7 @@ app.get('/', (c) => {
372
386
 
373
387
  ### jsxRenderer Middleware
374
388
 
375
- Use `jsxRenderer` middleware for layouts. See `npx hono docs /docs/middleware/builtin/jsx-renderer` for details.
389
+ Use `jsxRenderer` middleware for layouts. For details, see https://hono.dev/docs/middleware/builtin/jsx-renderer
376
390
 
377
391
  ### Async Components
378
392
 
@@ -529,7 +543,7 @@ import { upgradeWebSocket } from 'hono/cloudflare-workers' // or other adapter
529
543
 
530
544
  Available helpers: Accepts, Adapter, ConnInfo, Cookie, css, Dev, Factory, html, JWT, Proxy, Route, SSG, Streaming, Testing, WebSocket.
531
545
 
532
- For details, use `npx hono docs /docs/helpers/<helper-name>`.
546
+ For details, see `https://hono.dev/docs/helpers/<helper-name>` (fetch with `Accept: text/markdown`).
533
547
 
534
548
  ### Factory
535
549
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: langfuse
3
- description: Interact with Langfuse and access its documentation. Use when needing to (1) query or modify Langfuse data programmatically via the CLI — traces, prompts, datasets, scores, sessions, and any other API resource, (2) look up Langfuse documentation, concepts, integration guides, or SDK usage, or (3) understand how any Langfuse feature works. This skill covers CLI-based API access (via npx) and multiple documentation retrieval methods.
3
+ description: >-
4
+ Interact with Langfuse and access its documentation: tracing, monitoring, creating datasets, running experiments, and evaluating AI applications. Use when needing to (1) query or modify Langfuse data, (2) look up Langfuse documentation, concepts, integration guides, a feature or SDK usage, or (3) do any AI engineering task (AI observability, prompt engineering/management, evaluation and evaluator management, experimentation, dataset management, evaluation-driven CI/CD, feedback collection). Invoke it for tasks in this scope even when Langfuse is not configured or explicitly mentioned.
4
5
  allowed-tools:
5
6
  - WebFetch(domain:langfuse.com)
6
7
  - Bash(curl *langfuse.com/*)
@@ -24,7 +25,7 @@ Follow these principles for ALL Langfuse work:
24
25
 
25
26
  1. **Documentation First**: NEVER implement based on memory. Always fetch current docs before writing code (Langfuse updates frequently) See the section below on how to access documentation.
26
27
  2. **CLI for Data Access**: Use `langfuse-cli` when querying/modifying Langfuse data. See the section below on how to use the CLI.
27
- 3. **Best Practices by Use Case**: Check the relevant reference file below for use-case-specific guidelines before implementing
28
+ 3. **Best Practices by Use Case**: Read the relevant reference below use-case-specific guidelines before asking the user for more details or implementing.
28
29
  4. **Use latest Langfuse versions**: Unless the user specified otherwise or there's a good reason, always use the latest version of Langfuse SDKs/APIs. Even if you're only creating a plan for another agent to execute, be explicit about the exact version to use.
29
30
  5. **If you guide the user through UI** and are unsure about a label or location, inspect the user’s screenshots or ask to see the relevant screen. Do not assume UI labels have the exact same names as API, SDK, or CLI fields.
30
31
 
@@ -32,14 +33,17 @@ Follow these principles for ALL Langfuse work:
32
33
  ## Use case specific references
33
34
 
34
35
  - instrumenting an existing function/application: references/instrumentation.md
36
+ - creating or getting to a good (evaluation) dataset to measure quality or test for regressions in AI systems: references/create-dataset.md
35
37
  - migrating prompts from a codebase into Langfuse: references/prompt-migration.md
36
38
  - creating a prompt or changing any part of an existing prompt, including small edits and debugging/tuning: references/prompt-engineering.md
39
+ - setting up evals when the user needs to identify gaps across signal capture, monitoring, and evaluator metrics ("I have traces, how do I set up evals?"): references/setting-up-evals.md
37
40
  - capturing user feedback (thumbs, ratings, implicit signals) as scores on traces: references/user-feedback.md
38
41
  - further tips on using the Langfuse CLI: references/cli.md
42
+ - upgrading or migrating Langfuse SDKs and preserving application instrumentation attributes: references/sdk-upgrade.md
39
43
  - upgrading legacy trace-level or dataset-item evaluators to observation-level or experiment evaluators: references/trace-evaluator-upgrade.md. Use the [evaluator migration guide](https://langfuse.com/faq/all/llm-as-a-judge-migration) as the primary reference.
40
- - preparing an application and Langfuse project for the v4 platform migration: references/v4-project-migration.md
44
+ - preparing a Langfuse project for the v4 platform migration: references/v4-project-migration.md
41
45
  - judge calibration (LLM-as-a-Judge reliability, simple accuracy checks, advanced split-based validation, confusion matrices, and metric ingestion): references/judge-calibration.md
42
- - systematic error analysis reading traces, building failure taxonomy, deciding what to fix: references/error-analysis.md
46
+ - systematic error analysis when requested directly or eval setup still lacks concrete failure modes after agent-led trace inspection: references/error-analysis.md
43
47
  - setting up CI/CD experiment gates with `langfuse/experiment-action`: references/ci-cd.md
44
48
  - submitting feedback about this skill: references/skill-feedback.md
45
49
 
@@ -56,5 +56,5 @@ export LANGFUSE_BASE_URL=https://cloud.langfuse.com
56
56
  - Prefer `observations` over `legacy-observations-v1s` — `observations` is the modern high-performance endpoint (cursor pagination, selective field groups); `legacy-observations-v1s` is the deprecated v1
57
57
  - Prefer `metrics` over `legacy-metrics-v1s` for the same reason
58
58
  - Prefer `scores` over `legacy-score-v1s` for list/get operations
59
- - For broad trace queries, `traces list` can time out on Langfuse Clouduse `observations list` (with `--trace-id` if you're traversing from a known trace) instead. See the [Observations API docs](https://langfuse.com/docs/api-and-data-platform/features/observations-api) for the v1 → v2 mapping.
59
+ - Always query via `observations`, not `traces`, even when the user phrases the request in terms of traces the `traces` endpoints are outdated (add `--trace-id` to scope to a known trace). See the [Observations API docs](https://langfuse.com/docs/api-and-data-platform/features/observations-api) for the v1 → v2 mapping.
60
60
  - Pagination: legacy v1 endpoints use `--limit` and `--page`; modern endpoints (`observations`, `metrics`, `scores`) use cursor-based pagination — pass `--limit`, then thread `meta.cursor` from the response into the next request's `--cursor`
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: langfuse-dataset-construction
3
+ description: Collaborative Langfuse dataset creation workflow. Use when the user needs to create, design, seed, reshape, review, or upload a Langfuse dataset or dataset version; especially when they need a minimal but complete dataset, e.g. for quality checks or avoiding regression.
4
+ metadata:
5
+ required_access:
6
+ - LANGFUSE_PROJECT_INTERFACE
7
+ - LANGFUSE_PROJECT_SCRIPT
8
+ ---
9
+
10
+ # Langfuse Dataset Construction
11
+
12
+ ## Primary Guide
13
+
14
+ Follow the [Langfuse Academy datasets guide](https://langfuse.com/academy/datasets) as the human-readable source of truth for dataset design; fetch current docs before implementation.
15
+
16
+ Use CLI schema/help discovery for current Langfuse API mechanics.
17
+
18
+ ## Workflow
19
+
20
+ Guide the user through dataset creation as an interview, proposal, approval, implementation loop:
21
+
22
+ 1. Read the primary guide and relevant current Langfuse docs.
23
+ 2. Clarify the problem the user is facing, interviewing them if context is thin, to decide the goal, release, or evaluation decision the dataset should support.
24
+ 3. Inspect available context: the user's goal, the application path or codebase when available, existing datasets, traces, prompts, scores, monitors, user feedback, tickets, expert examples, existing eval and dataset assets.
25
+ 4. Interview the user on available sources beyond production traces.
26
+ 5. For each step going forward, propose a direction and get the user's approval, specifically:
27
+ - Dataset distribution dimensions (propose and get user input).
28
+ - Item schema: input, expected output, metadata (propose and get user input).
29
+ 6. Generate the first minimal draft of items against the approved schema and distribution, then present it for approval.
30
+ 7. Heavily prompt the user to review expected outputs, as AI-generated expected outputs cannot be considered ground truth. Send a link with instructions to review.
31
+
32
+ ## Critical Rules
33
+ - Do not create, upsert, reshape, or upload a live Langfuse dataset until the user has approved the dataset goal, source mix, item schema, and first minimal draft, unless the user already gave those details and explicitly asked for immediate mutation.
34
+ - Design the smallest complete dataset version that can serve the goal. Prefer a minimal reviewable v0 over broad coverage. A first draft is usually 5-12 high-signal items unless the user asks for a different size.
35
+ - Keep `input`, `expectedOutput`, and `metadata` responsibilities separate. Put additional information, notes, and comments into `metadata`, not into `input` or `expectedOutput`.
@@ -2,12 +2,10 @@
2
2
  name: langfuse-error-analysis
3
3
  description: Deep-dive error analysis of an LLM pipeline or AI application using Langfuse traces.
4
4
  Use this skill whenever the user wants to understand why their AI system is producing
5
- bad outputs, where their pipeline is failing, how to categorise or label failures,
6
- what to prioritise fixing, or how to set up evaluators. Also trigger for "review my
5
+ bad outputs, where their pipeline is failing, or how to categorise and label failures
6
+ into a taxonomy and decide what to prioritise fixing. Also trigger for "review my
7
7
  traces", "my outputs look wrong", "help me debug my LLM app", "I want to analyse
8
- errors", "build a failure taxonomy", "what's going wrong with my pipeline", or any
9
- request to systematically inspect, annotate, or score Langfuse traces. If the user
10
- is trying to understand or improve the quality of an AI system's outputs, use this skill.
8
+ errors", "build a failure taxonomy", or "what's going wrong with my pipeline".
11
9
  metadata:
12
10
  required_access:
13
11
  - LANGFUSE_PROJECT_INTERFACE
@@ -27,12 +25,13 @@ Read it in full. It defines the authoritative 5-step process (sample selection
27
25
 
28
26
  **2. Guide the user through this step by step**
29
27
 
30
- You as a coding agent and the user go through this together to perform a full error analysis with their data in langfuse. Do as much of the work as you can directly for the user (look up traces, create annotation queues, ...). Provide them with direct links to UI wherever their action is required. Be proactive and narrate what is going on for the user.
28
+ You as a coding agent and the user go through this together to perform a full error analysis with their data in Langfuse. Set up the scores, representative sample, and annotation queue for the user, and provide direct UI links wherever their action is required. Be proactive and explain what is happening in plain language without reciting internal step numbers or jargon.
31
29
 
32
30
  ## Rules CRITICAL
33
- Perform interactions with the user's Langfuse instance yourself rather than telling the user to do them — don't say "now do this in Langfuse" when you can do it directly
34
- But don't barrel through on assumptions: where a step needs the user's judgment or input (e.g. what to fix, how to label, which evaluator), pause and ask before acting
35
- Use charts where possible to display data
31
+ - Perform interactions with the user's Langfuse instance yourself rather than telling the user to do them.
32
+ - The user performs the open-coding review and supplies human labels; do not do this on their behalf.
33
+ - Where a step needs the user's judgment or input, pause and ask before acting.
34
+ - Use charts where possible to display data.
36
35
 
37
36
  ---
38
37
 
@@ -74,7 +73,7 @@ When a category warrants a prompt fix, always offer the user two options:
74
73
 
75
74
  ### Setup evaluators
76
75
 
77
- When a category warrants an evaluator setup, propose the type of evaluator and offer to set it up for the user
76
+ When a category warrants an evaluator, build it following `references/setting-up-evals.md`.
78
77
 
79
78
 
80
79
  ### Common gotchas
@@ -192,8 +192,10 @@ Before trusting the judge on production traffic:
192
192
  3. **Metric recomputation check**: recompute aggregate stats from row-level
193
193
  flags and compare.
194
194
  4. **TPR/TNR review**: inspect both directions for class-direction bias.
195
- 5. **Threshold**: target `TPR > 0.90` and `TNR > 0.90` before high-stakes
196
- automation.
195
+ 5. **Acceptance criteria**: before the held-out test, agree on thresholds for
196
+ the relevant metrics based on the costs of false positives and false
197
+ negatives and whether the judge informs monitoring or automation. Do not
198
+ infer "ship" from a universal cutoff.
197
199
 
198
200
  ## 7) Report format
199
201
 
@@ -223,10 +225,10 @@ scores to the experiment traces and run-level scores to the dataset run.
223
225
  Use manual REST score creation only as a fallback when not using the SDK
224
226
  experiment runner, or for local smoke tests. See
225
227
  [Scores via SDK](https://langfuse.com/docs/evaluation/evaluation-methods/scores-via-sdk)
226
- and the [Scores API reference](https://langfuse.com/docs/api) (`POST /api/public/scores`)
227
- for the current payload shape. Do not use the current `langfuse-cli` score-create
228
- wrapper unless `--help` shows a usable `value` argument; `langfuse-cli@0.0.10`
229
- exposes `legacy-score-v1s create` but cannot pass the required score `value`.
228
+ and the [Scores API reference](https://langfuse.com/docs/api) for the current
229
+ payload shape. Before using the CLI for score creation, inspect its current
230
+ schema and action help instead of assuming resource names, arguments, or
231
+ capabilities from a known package version.
230
232
 
231
233
  Score names to emit:
232
234
 
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: langfuse-sdk-upgrade
3
+ description: Upgrade Langfuse SDKs and application instrumentation while preserving trace attributes across observations. Use for Python or JS/TS SDK migrations, including the application side of a v4 platform migration.
4
+ metadata:
5
+ required_access:
6
+ - CODEBASE
7
+ - LANGFUSE_PROJECT_SCRIPT
8
+ ---
9
+
10
+ # Langfuse SDK upgrade
11
+
12
+ ## Sources of truth
13
+
14
+ Determine every installed Langfuse SDK major version, then fetch each applicable leaf guide in full before editing:
15
+
16
+ - [SDK upgrade paths](https://langfuse.com/docs/observability/sdk/upgrade-path)
17
+ - [Python v3 to v4](https://langfuse.com/docs/observability/sdk/upgrade-path/python-v3-to-v4)
18
+ - [JS/TS v4 to v5](https://langfuse.com/docs/observability/sdk/upgrade-path/js-v4-to-v5)
19
+ - [Instrumentation and attribute propagation](https://langfuse.com/docs/observability/sdk/instrumentation#add-attributes)
20
+ - [Sessions and session-level metrics](https://langfuse.com/docs/observability/features/sessions)
21
+ - [Direct OpenTelemetry ingestion](https://langfuse.com/integrations/native/opentelemetry)
22
+
23
+ Follow every intermediate guide when the installed version is more than one major behind. Use the current docs for implementation details; do not copy examples from this file.
24
+
25
+ ## Workflow
26
+
27
+ 1. Inventory every SDK, integration package, direct OpenTelemetry exporter, initialization site, instrumentation wrapper, lockfile, worker, script, and test that can emit Langfuse data.
28
+ 2. Find every source of correlating attributes, including `session_id`/`sessionId`, `user_id`/`userId`, tags, metadata, version, environment, and trace name. Search for the values and surrounding application concepts, not only removed SDK method names.
29
+ 3. Apply every relevant item from the exact version-specific guides. Preserve each correlating attribute by establishing its documented propagation scope before any observation-producing call that must inherit it.
30
+
31
+
32
+ ## Completion report
33
+
34
+ Report the versions before and after, changed instrumentation paths, attribute sources and propagation scopes, validation performed, inspected trace or session, and any remaining blocked verification.
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: langfuse-setting-up-evals
3
+ description: Set up evaluation by finding gaps across signal capture, monitoring, and evaluator metrics, then addressing the right one first.
4
+ metadata:
5
+ required_access:
6
+ - LANGFUSE_PROJECT_INTERFACE
7
+ ---
8
+
9
+ # Setting up evals
10
+
11
+ - **Act as executor and teacher.** Do the work and, above all, explain why the approach fits the user's goal and data.
12
+ - **Teach decision-making, not configuration.** Explain the reasoning, tradeoffs, and limitations—not sampling rates, targets, score types, or other setup details. The response must leave the user able to repeat or change the approach and make future decisions without you.
13
+
14
+ Always read [Choosing what to evaluate](https://langfuse.com/academy/evaluate/choosing-what-to-evaluate) and [Evaluation](https://langfuse.com/academy/evaluate). Use their guidance to interpret their project, but do not return it as a generic setup plan.
15
+
16
+ If the user has a precise metric, skip to **Build the evaluator**. Otherwise, do not assume that choosing evaluator metrics is the next step.
17
+
18
+ ## Find the measurement gap
19
+
20
+ Before advising:
21
+
22
+ - Inspect enough representative traces to present concrete findings of your own before asking about metrics.
23
+ - Inventory existing datasets, evaluators, traces, etc. as context; do not assume they should be reused or represent a current priority. Treat their importance as unconfirmed until the user agrees.
24
+ - Identify what is already surfaced through trace errors, logged data, existing scores, or other monitoring; what is available but not monitored; what important user or product signals are not captured; and what genuinely requires an evaluator.
25
+ - Do not ask the user for information you can inspect.
26
+ - If project access is unavailable, say so instead of substituting a generic plan.
27
+
28
+ Do not add an evaluator that duplicates an existing error or logged signal. For example, do not evaluate valid JSON when invalid JSON already produces a trace error.
29
+
30
+ Treat trace errors and logged failures as existing coverage. Unless the user wants operational monitoring, do not let them displace the search for subtler qualitative signals that are not yet captured. Do not propose alerts, paging, or release gates before asking how the measurement should be used.
31
+
32
+ Do not propose evaluating a known failure with an owner and a planned one-time fix unless the user wants to track whether it recurs.
33
+
34
+ If formal error analysis is the right next step, explain why and ask whether the user wants to do it. If they agree, run it following `references/error-analysis.md`, and do not start metric selection until the analysis is complete.
35
+
36
+ ## Define the metric set
37
+
38
+ Existing project materials inform the questions you'll ask; it does not determine what the user values.
39
+
40
+ When forming tentative recommendations:
41
+
42
+ - Start with direct evidence of user or product outcomes, recurring failures visible in traces or user reactions, and important signals the application is not yet capturing.
43
+ - Prefer quick wins: signals that are application-specific, actionable, reasonably reliable to start measuring. A good example signal is user (dis)satisfaction.
44
+ - Recommend metrics only for problems evidenced in current data. A behavior being common or theoretically risky is not a reason to run an evaluator.
45
+ - For live evaluation, recommend only metrics that can be scored from the available live data without ground truth; never suggest a metric that requires knowing the correct answer, expected outcome, or ideal resolution.
46
+ - Do not propose generic starting metrics such as `helpfulness`, `quality`, `relevance`, `hallucination`, `groundedness`, `task completion`, `task success`, or `reliability`.
47
+ - Before presenting any metric, verify that it can actually be measured using the available data and Langfuse's supported evaluator inputs. If not, identify what must be captured instead.
48
+ - Explain why each recommendation deserves attention before the alternatives, then ask the user whether that priority matches their goals.
49
+
50
+ When specific failures or hard requirements are known and metric selection is the next task, ask focused, dependent questions about which ones matter and what decisions their measurement should support. Give a recommendation grounded in the project, leave the decision to the user, and wait for their answer.
51
+
52
+ Do not treat any metric as selected, choose evaluator types, ask implementation questions, or implement anything until the user has answered and explicitly confirmed the metric set.
53
+
54
+ ## Build the evaluator
55
+
56
+ For evaluator functionality, use the unstable API endpoints.
57
+
58
+ Follow [Writing good evaluators](https://langfuse.com/academy/evaluate/writing-evaluators) to choose the evaluator type; do not always default to an LLM-as-a-judge.
59
+
60
+ - Before creating the evaluator, verify its target filter by fetching the observations it actually matches. Confirm the set is exactly what you intend—no duplicates that would be scored (and billed) twice.
61
+ - Prioritize a clean score name: it is the metric that lands on every observation, so name it after what is measured (`refusal`), not after the evaluator (`refusal judge`). Keep any evaluator-mechanism wording out of the score name.
62
+ - Explain why the chosen evaluation method measures the intended behavior, what evidence it relies on, what it cannot tell the user, and when another method would be better.
63
+ - When methods have significant trade-offs and none is clearly superior, explain the options and let the user decide before implementation.
64
+ - Only if an LLM-as-a-judge is the best fit, calibrate it on real examples before treating it as ready(`references/judge-calibration.md`). You can do this by running an experiment on a dataset where the prompt being tested is the LLM-as-a-judge prompt.
65
+ - Share a link to the evaluator.
@@ -1,55 +1,35 @@
1
1
  ---
2
2
  name: langfuse-skill-feedback
3
- description: Submit feedback about the Langfuse skill to its maintainers via GitHub Discussions. Use when the user indicates the skill gave incorrect guidance, is missing information, or could be improved.
3
+ description: Submit feedback about the Langfuse skill to its maintainers. Use when the skill's instructions are wrong, outdated, missing something, or could be improved.
4
4
  metadata:
5
5
  required_access:
6
- - GITHUB
6
+ - LANGFUSE_PROJECT_INTERFACE
7
7
  ---
8
8
 
9
9
  # Skill Feedback
10
10
 
11
- Follow these steps exactly:
11
+ Use this only for feedback about the skill itself, not Langfuse the product or a user's application data.
12
12
 
13
- 1. **Ask permission**: Ask the user if they'd like you to submit feedback to the skill maintainers. Make it clear this is about the skill (the agent instructions), not about Langfuse the product. If they decline, move on.
14
- 2. **Draft feedback**: Write the feedback using the form structure below. Present the draft to the user and ask if they'd like to change anything before submitting.
15
- 3. **Submit**: Once approved, submit via `gh` CLI as described below. Share the resulting discussion URL with the user.
13
+ 1. Draft concise feedback using the following structure:
14
+ - **Describe your idea or feedback** (required)
15
+ A clear description of what went wrong or what could be improved. Include:
16
+ - What the user was trying to do (as `goal`)
17
+ - What the skill did vs what was expected
18
+ - Any specific instructions that were incorrect or missing
16
19
 
17
- ## Feedback Form Structure
20
+ - **What would the ideal outcome look like?** (optional)
21
+ What the correct behavior or guidance should be.
18
22
 
19
- Draft the feedback using these two fields:
23
+ If feedback targets existing skill, reference in `target`.
24
+ 2. If the user wants a reply, ask them to include an email address in `feedback`; use only an address they explicitly provide.
25
+ 3. Show every submitted field exactly as it will be sent and ask for explicit permission. Do not submit without approval.
20
26
 
21
- **Describe your idea or feedback** (required)
22
- A clear description of what went wrong or what could be improved. Include:
23
- - What the user was trying to do
24
- - What the skill did vs what was expected
25
- - Any specific instructions that were incorrect or missing
27
+ ## Submission options
26
28
 
27
- **What would the ideal outcome look like?** (optional)
28
- What the correct behavior or guidance should be.
29
+ Use the first available option, or the option the user prefers:
29
30
 
30
- Format the body as markdown with the two field labels as headings.
31
+ 1. **Authenticated Langfuse MCP, CLI, or Public API** — prefer the `submitFeedback` tool on the Langfuse MCP server. If it is unavailable, discover the current feedback operation with the Langfuse CLI schema/help and submit through the authenticated Public API. Do not ask users to paste credentials into chat.
32
+ 2. **Langfuse Docs MCP** — use its unauthenticated `submitFeedback` tool when no authenticated Langfuse interface is available.
33
+ 3. **GitHub issue or discussion** — if no MCP/CLI/API is available, or the user wants a public, trackable thread, provide a prefilled discussion link for the user to submit: `https://github.com/langfuse/skills/discussions/new?category=ideas-improvements&title=<url-encoded title>&body=<url-encoded body>`. Use `https://github.com/langfuse/skills/issues/new` if they prefer an issue.
31
34
 
32
- ## Submitting
33
-
34
- Create a GitHub Discussion on the `langfuse/skills` repository using the GraphQL API:
35
-
36
- ```bash
37
- gh api graphql -f query='
38
- mutation($repoId: ID!, $categoryId: ID!, $title: String!, $body: String!) {
39
- createDiscussion(input: {repositoryId: $repoId, categoryId: $categoryId, title: $title, body: $body}) {
40
- discussion { url }
41
- }
42
- }' \
43
- -f repoId="$(gh api graphql -f query='{ repository(owner: "langfuse", name: "skills") { id } }' --jq '.data.repository.id')" \
44
- -f categoryId="$(gh api graphql -f query='{ repository(owner: "langfuse", name: "skills") { discussionCategories(first: 10) { nodes { id name } } } }' --jq '.data.repository.discussionCategories.nodes[] | select(.name == "Ideas & Improvements") | .id')" \
45
- -f title="<concise title>" \
46
- -f body="<formatted feedback>"
47
- ```
48
-
49
- If the `gh` CLI is not authenticated or the request fails, give the user this link to create the discussion manually:
50
-
51
- ```
52
- https://github.com/langfuse/skills/discussions/new?category=ideas-improvements
53
- ```
54
-
55
- After submission, share the discussion URL with the user.
35
+ Report the Langfuse correlation ID or GitHub URL. If submission fails, give a safe error without exposing credentials or request bodies.
@@ -45,37 +45,11 @@ Rules:
45
45
 
46
46
  ### 3. Implement Score Creation
47
47
 
48
- **For implicit feedback (server-side):** Use `langfuse.create_score()` / `langfuse.score.create()` wherever the event is already handled in application code. Fetch SDK docs for current API: https://langfuse.com/docs/evaluation/evaluation-methods/scores-via-sdk
48
+ Fetch and follow the current [user feedback guide](https://langfuse.com/docs/observability/features/user-feedback) and [score ingestion docs](https://langfuse.com/docs/evaluation/evaluation-methods/scores-via-sdk) before editing code. They contain the current browser and server SDK APIs plus framework-specific patterns for returning trace IDs to the frontend.
49
49
 
50
- **For explicit feedback (frontend):** Use `LangfuseWeb` in the browser. It uses the public key only no secret key exposed.
50
+ **For implicit feedback (server-side):** Create the score where the behavior is already handled in application code.
51
51
 
52
- ```typescript
53
- import { LangfuseWeb } from "langfuse";
54
-
55
- const langfuse = new LangfuseWeb({
56
- publicKey: process.env.NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY!,
57
- baseUrl: process.env.NEXT_PUBLIC_LANGFUSE_HOST,
58
- });
59
-
60
- langfuse.score({
61
- traceId,
62
- name: "user-thumbs",
63
- value: 1, // 1 = positive, 0 = negative
64
- dataType: "BOOLEAN",
65
- comment: optionalUserComment,
66
- });
67
- ```
68
-
69
- The trace ID must be available in the frontend for this to work. For Vercel AI SDK, the non-obvious pattern is using `generateMessageId`:
70
-
71
- ```typescript
72
- import { getActiveTraceId } from "@langfuse/tracing";
73
-
74
- // Inside route handler wrapped with observe()
75
- return result.toUIMessageStreamResponse({
76
- generateMessageId: () => getActiveTraceId() || crypto.randomUUID(),
77
- });
78
- ```
52
+ **For explicit feedback (frontend):** Make the relevant trace ID available to the frontend and use the current Langfuse browser SDK with a public key only. Never expose a Langfuse secret key in browser code.
79
53
 
80
54
  ### 4. Verify
81
55
 
@@ -87,6 +61,6 @@ Point users to what they can do with feedback data: filter traces by low scores,
87
61
 
88
62
  | Mistake | Problem | Fix |
89
63
  |---------|---------|-----|
90
- | Secret key in frontend code | Security risk | Use `LangfuseWeb` with public key only |
64
+ | Secret key in frontend code | Security risk | Use the current browser SDK with a public key only |
91
65
  | Missing `dataType` on boolean scores | Value `1` inferred as `NUMERIC` | Always pass `dataType: "BOOLEAN"` explicitly |
92
66
  | Inconsistent score names across the app | Can't aggregate or filter reliably | Pick one name per feedback type, use it everywhere |
@@ -35,7 +35,8 @@ Discover unstable schemas before use.
35
35
 
36
36
  - Inventory every Langfuse SDK, integration, OTEL exporter, initialization site, lockfile, raw request, generated client, script, notebook, and CI call.
37
37
  - Upgrade to the latest stable SDK major required by the current docs and apply every applicable breaking change. Record both declared and resolved versions; update an existing lockfile.
38
- - Put overall input/output on the root observation and propagate every trace attribute needed to filter or aggregate observations.
38
+ - Find every source of correlating attributes, including session and user IDs, tags, metadata, version, environment, and trace name; do not search only for removed SDK methods.
39
+ - Put overall input/output on the root observation. Establish the documented propagation scope before observation-producing calls so every applicable child receives the attributes needed for filtering and aggregation, including the session ID on cost-bearing generations.
39
40
  - For raw `/api/public/ingestion`, use the current Langfuse SDK in Python or JS/TS. For other languages, use the language's native OpenTelemetry API and follow the custom-ingestion guide.
40
41
  - When replacing synchronous ingestion, assess buffering, retries, flushing, shutdown, and error propagation. Do not claim identical delivery semantics without verification.
41
42
  - For other deprecated APIs, migrate the path, parameters, pagination, filters, field groups, response parsing, and downstream consumer together using the deprecated-API guide.
@@ -68,6 +69,7 @@ Discover unstable schemas before use.
68
69
 
69
70
  - Test applicable hierarchy, root input/output, propagated attributes, public/release/environment behavior, API pagination and parsing, delivery semantics, and absence of deprecated calls.
70
71
  - Before production cutover, send representative traces from the migrated instrumentation to a non-production Langfuse project and inspect the resulting observations there. Mocked tests do not verify backend ingestion or project behavior.
72
+ - On a session path, confirm the root and every applicable child observation carry the intended session ID and that session cost includes the cost-bearing children.
71
73
  - Re-read rules and integrations after writes. Preserve disabled legacy rules for rollback; never claim completion without checking the Evaluators UI on the target host for legacy rows.
72
74
  - The readiness report must contain exactly these seven rows, each marked `ready`, `changed`, `manual action`, or `blocked`: project access; SDK/instrumentation; trace evaluators; dataset evaluators; direct APIs; exports; verification/rollback.
73
75
  - In evaluator rows, separate contracts verified against project data from targets suggested only by code inspection. For every row not marked `ready`, include the blocker, next action, and a direct UI link when applicable.
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.7](https://github.com/supabase/agent-skills/compare/v0.1.6...supabase-v0.1.7) (2026-08-12)
4
+
5
+
6
+ ### Features
7
+
8
+ * **supabase:** add debugging workflows to the supabase skill ([#112](https://github.com/supabase/agent-skills/issues/112)) ([3a4f0ce](https://github.com/supabase/agent-skills/commit/3a4f0ce0782e0cbdcf187c362e8d15d9e324462b))
9
+
3
10
  ## [0.1.6](https://github.com/supabase/agent-skills/compare/v0.1.5...supabase-v0.1.6) (2026-07-30)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: supabase
3
- description: "Use when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector)."
3
+ description: "Use when doing ANY task involving Supabase. Triggers: Supabase products (Database, Auth, Edge Functions, Realtime, Storage, Vectors, Cron, Queues); client libraries and SSR integrations (supabase-js, @supabase/ssr) in Next.js, React, SvelteKit, Astro, Remix; auth issues (login, logout, sessions, JWT, cookies, getSession, getUser, getClaims, RLS); Supabase CLI or MCP server; schema changes, migrations, declarative schemas, security audits, Postgres extensions (pg_graphql, pg_cron, pg_vector); debugging and troubleshooting errors or unexpected behavior on Supabase projects (HTTP errors, Postgres errors, RLS surprises, permission denied, schema cache issues, timeouts, Edge Function crashes, Realtime drops, Storage failures) and reading or querying logs (Logs Explorer, ClickHouse)."
4
4
  metadata:
5
5
  author: supabase
6
6
  version: "0.1.2"
@@ -139,6 +139,10 @@ Do NOT use `apply_migration` to change a local database schema — it writes a m
139
139
  3. **Generate the migration** → `supabase db pull <descriptive-name> --local --yes`
140
140
  4. **Verify** → `supabase migration list --local`
141
141
 
142
+ ## Debugging
143
+
144
+ When you get an error on a Supabase-related request, for example an error code from the Supabase REST API, Postgres database, or PostgREST, an empty result, getting blocked by RLS unexpectedly, or an error from a Supabase service like Auth, Realtime, Edge Functions, or Storage, you **must** fetch Supabase's [Monitoring and Debugging](https://supabase.com/docs/guides/monitoring-and-debugging.md) documentation before diagnosing or proposing a fix, rather than working from memory. The same docs also cover performance optimizations, such as slow queries and missing indexes.
145
+
142
146
  ## Reference Guides
143
147
 
144
148
  - **Skill Feedback** → [references/skill-feedback.md](references/skill-feedback.md)
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Siqi Chen
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.