feat: CursorPlugin SDK update for version 0.1.0#1
Conversation
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. WalkthroughAdds configuration and documentation for an Appwrite CursorPlugin integration. New files: Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes 🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 17
🧹 Nitpick comments (5)
.cursor-plugin/plugin.json (1)
4-4: Markdown link syntax in JSONdescriptionmay not render correctly.The
descriptionvalue contains[text](url)Markdown, which will appear as raw Markdown literal text in any tool that reads this JSON without Markdown rendering. Prefer a plain URL.✏️ Suggested fix
- "description": "... For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", + "description": "... For full API documentation and tutorials go to https://appwrite.io/docs",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.cursor-plugin/plugin.json at line 4, The description field in plugin.json uses Markdown link syntax which may render as raw text in JSON consumers; update the "description" value (the description property in .cursor-plugin/plugin.json) to replace the Markdown [https://appwrite.io/docs](https://appwrite.io/docs) with a plain URL (e.g. https://appwrite.io/docs) and ensure the sentence remains grammatically correct after the replacement.CHANGELOG.md (1)
1-1: Empty placeholder — consider adding initial version entry.The file only contains the header. Consider adding the initial
v0.1.0entry to make the changelog useful from the first release.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG.md` at line 1, The CHANGELOG.md currently only has the header "# Change Log"; add an initial release entry for v0.1.0 under that header including the version tag (v0.1.0), release date, and a short bullet list of notable initial changes or features (e.g., "Initial release: project scaffolding, core modules X/Y/Z, basic tests"); ensure the entry follows common changelog format (version heading, date, bullets) so the file is useful from the first release.commands/deploy-function.md (1)
51-51: Example runtimenode-18.0is EOL — consider updating to a current LTS.Node.js 18 reached end-of-life in April 2025. AI agents using this skill file as a reference may scaffold new functions with an unsupported runtime.
node-20.0(LTS until April 2026) ornode-22would be safer defaults.✏️ Suggested update
- "runtime": "node-18.0", + "runtime": "node-22.0",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@commands/deploy-function.md` at line 51, Update the example runtime value for the "runtime" key which currently shows "node-18.0" (EOL) to a supported LTS such as "node-20.0" or "node-22"; locate the JSON/YAML snippet containing the "runtime" field and replace the "node-18.0" token with the chosen newer runtime string so new scaffolds use a maintained Node.js LTS.skills/appwrite-swift/SKILL.md (1)
11-14: Pin to a specific version tag instead ofbranch: "main"Using
branch: "main"means anyswift package updatecan silently pull an incompatible commit. Production code and generated examples should reference a stable release:♻️ Proposed fix
-.package(url: "https://github.com/appwrite/sdk-for-swift", branch: "main") +.package(url: "https://github.com/appwrite/sdk-for-swift", from: "X.Y.Z")Replace
X.Y.Zwith the current stable release tag.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/appwrite-swift/SKILL.md` around lines 11 - 14, Replace the unstable branch reference in the .package(url: "https://github.com/appwrite/sdk-for-swift", branch: "main") declaration with a pinned release tag; update the .package(...) entry in Package.swift to reference a specific version (for example using an exact or from/upToNextMajor specifier with the current stable X.Y.Z) so dependency updates are deterministic and won't pull breaking commits from main.skills/appwrite-kotlin/SKILL.md (1)
11-17: Pin dependency versions — avoid dynamic+version selectorUsing
+as a Gradle version resolves to the absolute latest release on every dependency refresh, which can silently break builds when a major SDK version is published. Pin to a specific stable version:♻️ Proposed fix
-implementation("io.appwrite:sdk-for-android:+") +implementation("io.appwrite:sdk-for-android:X.Y.Z") -implementation("io.appwrite:sdk-for-kotlin:+") +implementation("io.appwrite:sdk-for-kotlin:X.Y.Z")Replace
X.Y.Zwith the current stable release.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@skills/appwrite-kotlin/SKILL.md` around lines 11 - 17, The dependency declarations using the dynamic + selector (implementation("io.appwrite:sdk-for-android:+") and implementation("io.appwrite:sdk-for-kotlin:+")) should be pinned to a specific stable version; update those implementation lines to use a concrete version string (e.g., replace the + with X.Y.Z) for both the Android and Kotlin JVM snippets so builds are reproducible and won't break when a new major release is published.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@LICENSE`:
- Line 12: The LICENSE file contains HTML entity " instead of plain double
quotes in the BSD-3-Clause warranty disclaimer (the "AS IS" phrase), which
breaks the canonical text; open the LICENSE file, replace all occurrences of the
HTML entity " with plain double-quote characters " so the warranty
disclaimer and the rest of the BSD-3-Clause text exactly match the canonical
template used by SPDX/Licensee/GitHub Linguist, and verify there are no other
HTML entities left in the file.
In `@README.md`:
- Line 8: Update the broken releases URL in the README entry that currently
reads "https://github.com/appwrite/cursor-plugin.git/releases" by removing the
".git" suffix so it becomes
"https://github.com/appwrite/cursor-plugin/releases"; locate and replace the URL
text in the README.md line containing the compatibility note to ensure the
releases link points to the correct GitHub releases page.
- Line 83: The README contains a license link pointing to the appwrite/appwrite
repo (the URL
"https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE"); update
that link to point to this repository's license instead — replace the hardcoded
external URL with a relative link to this repo's LICENSE (e.g., "./LICENSE" or
"LICENSE") in README.md so the license reference resolves to this plugin's
actual license file.
- Around line 50-58: Update the language name capitalizations in the Skills list
entries: change the markdown list item text "**Typescript**" to
"**TypeScript**", "**Php**" to "**PHP**", and "**Dotnet**" to "**.NET**" (these
appear in the bullets for TypeScript / PHP / .NET in the README skills list).
- Around line 18-44: The fenced code block showing the repository tree (the
block starting with ".cursor-plugin/") lacks a language tag; update the
README.md by changing the opening fence from ``` to ```text (or another
appropriate language like ```bash) so the block is explicitly marked and
satisfies markdownlint MD040.
In `@skills/appwrite-dart/SKILL.md`:
- Around line 415-417: There are blank lines inside blockquotes causing MD028;
remove the empty lines between the quoted lines and replace them with a
continuation marker so the blockquote remains contiguous — update the blockquote
sections that include the cookie guidance (`a_session_<PROJECT_ID>`) and the
forwarding call
(`sessionClient.setForwardedUserAgent(request.headers['user-agent'])`) by
deleting the blank lines and ensuring each quoted line begins with `>` so the
two occurrences (the pair around the cookie/security note and the pair around
the forwarding user agent note) form single uninterrupted blockquotes.
In `@skills/appwrite-dotnet/SKILL.md`:
- Around line 331-333: A markdown blockquote in SKILL.md contains an empty line
between quoted lines (the block containing "**Cookie security:** ... The cookie
name must be `a_session_<PROJECT_ID>`." and the block with "**Forwarding user
agent:** ...") which triggers MD028; edit the two blockquote occurrences (the
one around the Cookie security text and the matching pair near line 400) and
replace the blank line between quoted lines with a line that starts with ">" so
the lines remain part of the same blockquote (i.e., remove the empty line and
prepend ">" to the following line), ensuring no blank lines remain inside those
blockquote blocks.
In `@skills/appwrite-go/SKILL.md`:
- Around line 395-407: The snippet referencing errors.As and fmt.Println will
not compile because the standard packages are not imported; update the Go file
that contains the GetRow example to add imports for "errors" and "fmt" alongside
the existing imports so the call to errors.As(err, &appErr) and fmt.Println(...)
compile; specifically modify the import block used by the example that shows
service.GetRow("[DATABASE_ID]", "[TABLE_ID]", "[ROW_ID]") and the handling of
*apperr.AppwriteException to include the "errors" and "fmt" packages.
- Around line 389-391: There are blank lines breaking two blockquotes (the one
containing "**Cookie security:** Always use `HttpOnly`, `Secure`, and
`SameSiteStrictMode`..." and the one containing "**Forwarding user agent:** Call
`sessionClient.SetForwardedUserAgent(...)`"); remove each blank line that
interrupts the '>'-prefixed blockquote and replace it with a '>' line so the
blockquote remains continuous; apply the same exact fix to the second occurrence
later in the file (the matching pair around the other blockquote).
In `@skills/appwrite-kotlin/SKILL.md`:
- Around line 466-468: The MD028 lint error is caused by an empty line breaking
the blockquote around the sections that start with "Cookie security:" and
"Forwarding user agent:" in SKILL.md; fix it by removing the blank line between
the quoted paragraphs and replacing it with a leading ">" so the blockquote
remains continuous (apply the same change for both occurrences around the
"Cookie security: ..." and "Forwarding user agent: ..." blocks).
In `@skills/appwrite-php/SKILL.md`:
- Around line 17-31: The import list at the top is missing the Teams service,
causing a fatal Class "Teams" not found when the file later does new
Teams($client); add the line use Appwrite\Services\Teams; to the existing block
of imports (near use Appwrite\Services\Users; and other Services imports) so the
Teams class is available for new Teams($client) instantiation.
- Around line 380-386: The MD028 lint error is caused by a blank line between
two adjacent blockquotes around the "When to set permissions" and "Common
mistakes" sections; fix it by removing the blank line so the two blockquotes are
adjacent (or merge them into a single blockquote), ensuring the "When to set
permissions" and "Common mistakes" lines remain prefixed with > and no blank
line separates them to satisfy markdownlint MD028.
In `@skills/appwrite-python/SKILL.md`:
- Line 22: The import path for TablesDB is incorrect and will raise ImportError;
update the import to use the correct module name by changing the module
reference from appwrite.services.tablesdb to appwrite.services.tables_db so the
symbol TablesDB is imported from the proper package (e.g., replace any
occurrences importing TablesDB from appwrite.services.tablesdb with
appwrite.services.tables_db).
In `@skills/appwrite-ruby/SKILL.md`:
- Around line 344-346: There are blank lines between consecutive blockquotes
around the "Cookie security:" and "Forwarding user agent:" sections; remove each
blank line and replace it with a continuation blockquote marker (`>`) so the two
blockquotes are joined without an empty line (apply the same change for both
occurrences referenced in the diff).
In `@skills/appwrite-swift/SKILL.md`:
- Around line 402-404: Merge the two separate blockquote blocks into a single
blockquote around the related notes (the "**Cookie security:** Always use
`isHTTPOnly`, `isSecure`, and `sameSite: .strict`..." block and the
"**Forwarding user agent:** Call
`sessionClient.setForwardedUserAgent(req.headers.first(name: .userAgent) ??
\"\")`..." block) by removing the blank line that splits them and, if you need a
visual paragraph break, use an empty blockquote line consisting of just ">"
between paragraphs; ensure the two quoted sections become a single contiguous
blockquote.
In `@skills/appwrite-typescript/SKILL.md`:
- Around line 208-222: The example uses Databases-era fields: update the usage
of listRows results to use results.rows instead of results.documents and replace
references to $collectionId with $tableId in the comments; specifically, change
code that reads results.documents[0] to results.rows[0] and update the inline
field comments for doc.$collectionId to doc.$tableId so consumers of the
TablesDB API (listRows, results, rows, $tableId) get correct properties.
- Around line 547-549: Remove the blank line inside the two blockquotes so they
remain contiguous: in the blockquote containing "Cookie security: Always use
`httpOnly`, `secure`, and `sameSite: 'strict'`..." and in the blockquote
containing "Forwarding user agent: Call
`sessionClient.setForwardedUserAgent(req.headers['user-agent'])`...", replace
the empty line between paragraphs with a leading ">" so the quoted lines are
continuous (no blank line) to resolve MD028.
---
Nitpick comments:
In @.cursor-plugin/plugin.json:
- Line 4: The description field in plugin.json uses Markdown link syntax which
may render as raw text in JSON consumers; update the "description" value (the
description property in .cursor-plugin/plugin.json) to replace the Markdown
[https://appwrite.io/docs](https://appwrite.io/docs) with a plain URL (e.g.
https://appwrite.io/docs) and ensure the sentence remains grammatically correct
after the replacement.
In `@CHANGELOG.md`:
- Line 1: The CHANGELOG.md currently only has the header "# Change Log"; add an
initial release entry for v0.1.0 under that header including the version tag
(v0.1.0), release date, and a short bullet list of notable initial changes or
features (e.g., "Initial release: project scaffolding, core modules X/Y/Z, basic
tests"); ensure the entry follows common changelog format (version heading,
date, bullets) so the file is useful from the first release.
In `@commands/deploy-function.md`:
- Line 51: Update the example runtime value for the "runtime" key which
currently shows "node-18.0" (EOL) to a supported LTS such as "node-20.0" or
"node-22"; locate the JSON/YAML snippet containing the "runtime" field and
replace the "node-18.0" token with the chosen newer runtime string so new
scaffolds use a maintained Node.js LTS.
In `@skills/appwrite-kotlin/SKILL.md`:
- Around line 11-17: The dependency declarations using the dynamic + selector
(implementation("io.appwrite:sdk-for-android:+") and
implementation("io.appwrite:sdk-for-kotlin:+")) should be pinned to a specific
stable version; update those implementation lines to use a concrete version
string (e.g., replace the + with X.Y.Z) for both the Android and Kotlin JVM
snippets so builds are reproducible and won't break when a new major release is
published.
In `@skills/appwrite-swift/SKILL.md`:
- Around line 11-14: Replace the unstable branch reference in the .package(url:
"https://github.com/appwrite/sdk-for-swift", branch: "main") declaration with a
pinned release tag; update the .package(...) entry in Package.swift to reference
a specific version (for example using an exact or from/upToNextMajor specifier
with the current stable X.Y.Z) so dependency updates are deterministic and won't
pull breaking commits from main.
README.md
Outdated
| [](https://twitter.com/appwrite) | ||
| [](https://appwrite.io/discord) | ||
|
|
||
| **This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).** |
There was a problem hiding this comment.
Broken releases URL: .git should not appear in the path.
https://github.com/appwrite/cursor-plugin.git/releases is not a valid GitHub URL. Remove .git from the path.
🔧 Proposed fix
-**This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).**
+**This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin/releases).**📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).** | |
| **This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin/releases).** |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 8, Update the broken releases URL in the README entry that
currently reads "https://github.com/appwrite/cursor-plugin.git/releases" by
removing the ".git" suffix so it becomes
"https://github.com/appwrite/cursor-plugin/releases"; locate and replace the URL
text in the README.md line containing the compatibility note to ensure the
releases link points to the correct GitHub releases page.
| ``` | ||
| .cursor-plugin/ | ||
| └── plugin.json # Plugin manifest | ||
| skills/ # Agent skills (per language) | ||
| ├── appwrite-typescript/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-dart/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-kotlin/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-swift/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-php/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-python/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-ruby/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-go/ | ||
| │ └── SKILL.md | ||
| ├── appwrite-dotnet/ | ||
| │ └── SKILL.md | ||
| commands/ # Agent-executable commands | ||
| ├── deploy-site.md | ||
| └── deploy-function.md | ||
| .mcp.json # MCP server definitions | ||
| ``` |
There was a problem hiding this comment.
Add a language tag to the fenced code block (markdownlint MD040).
The structure tree uses a bare ``` fence without a language specifier, which triggers a markdownlint warning.
🔧 Proposed fix
-```
+```text
.cursor-plugin/📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ``` | |
| .cursor-plugin/ | |
| └── plugin.json # Plugin manifest | |
| skills/ # Agent skills (per language) | |
| ├── appwrite-typescript/ | |
| │ └── SKILL.md | |
| ├── appwrite-dart/ | |
| │ └── SKILL.md | |
| ├── appwrite-kotlin/ | |
| │ └── SKILL.md | |
| ├── appwrite-swift/ | |
| │ └── SKILL.md | |
| ├── appwrite-php/ | |
| │ └── SKILL.md | |
| ├── appwrite-python/ | |
| │ └── SKILL.md | |
| ├── appwrite-ruby/ | |
| │ └── SKILL.md | |
| ├── appwrite-go/ | |
| │ └── SKILL.md | |
| ├── appwrite-dotnet/ | |
| │ └── SKILL.md | |
| commands/ # Agent-executable commands | |
| ├── deploy-site.md | |
| └── deploy-function.md | |
| .mcp.json # MCP server definitions | |
| ``` |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 18-18: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 18 - 44, The fenced code block showing the repository
tree (the block starting with ".cursor-plugin/") lacks a language tag; update
the README.md by changing the opening fence from ``` to ```text (or another
appropriate language like ```bash) so the block is explicitly marked and
satisfies markdownlint MD040.
| - **Typescript** — `skills/appwrite-typescript/SKILL.md` | ||
| - **Dart** — `skills/appwrite-dart/SKILL.md` | ||
| - **Kotlin** — `skills/appwrite-kotlin/SKILL.md` | ||
| - **Swift** — `skills/appwrite-swift/SKILL.md` | ||
| - **Php** — `skills/appwrite-php/SKILL.md` | ||
| - **Python** — `skills/appwrite-python/SKILL.md` | ||
| - **Ruby** — `skills/appwrite-ruby/SKILL.md` | ||
| - **Go** — `skills/appwrite-go/SKILL.md` | ||
| - **Dotnet** — `skills/appwrite-dotnet/SKILL.md` |
There was a problem hiding this comment.
Fix language name capitalizations in the Skills list.
- Line 50:
**Typescript**→**TypeScript** - Line 54:
**Php**→**PHP** - Line 58:
**Dotnet**→**.NET**
🔧 Proposed fix
- - **Typescript** — `skills/appwrite-typescript/SKILL.md`
+ - **TypeScript** — `skills/appwrite-typescript/SKILL.md`
- **Dart** — `skills/appwrite-dart/SKILL.md`
- **Kotlin** — `skills/appwrite-kotlin/SKILL.md`
- **Swift** — `skills/appwrite-swift/SKILL.md`
- - **Php** — `skills/appwrite-php/SKILL.md`
+ - **PHP** — `skills/appwrite-php/SKILL.md`
- **Python** — `skills/appwrite-python/SKILL.md`
- **Ruby** — `skills/appwrite-ruby/SKILL.md`
- **Go** — `skills/appwrite-go/SKILL.md`
- - **Dotnet** — `skills/appwrite-dotnet/SKILL.md`
+ - **.NET** — `skills/appwrite-dotnet/SKILL.md`📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - **Typescript** — `skills/appwrite-typescript/SKILL.md` | |
| - **Dart** — `skills/appwrite-dart/SKILL.md` | |
| - **Kotlin** — `skills/appwrite-kotlin/SKILL.md` | |
| - **Swift** — `skills/appwrite-swift/SKILL.md` | |
| - **Php** — `skills/appwrite-php/SKILL.md` | |
| - **Python** — `skills/appwrite-python/SKILL.md` | |
| - **Ruby** — `skills/appwrite-ruby/SKILL.md` | |
| - **Go** — `skills/appwrite-go/SKILL.md` | |
| - **Dotnet** — `skills/appwrite-dotnet/SKILL.md` | |
| - **TypeScript** — `skills/appwrite-typescript/SKILL.md` | |
| - **Dart** — `skills/appwrite-dart/SKILL.md` | |
| - **Kotlin** — `skills/appwrite-kotlin/SKILL.md` | |
| - **Swift** — `skills/appwrite-swift/SKILL.md` | |
| - **PHP** — `skills/appwrite-php/SKILL.md` | |
| - **Python** — `skills/appwrite-python/SKILL.md` | |
| - **Ruby** — `skills/appwrite-ruby/SKILL.md` | |
| - **Go** — `skills/appwrite-go/SKILL.md` | |
| - **.NET** — `skills/appwrite-dotnet/SKILL.md` |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 50 - 58, Update the language name capitalizations in
the Skills list entries: change the markdown list item text "**Typescript**" to
"**TypeScript**", "**Php**" to "**PHP**", and "**Dotnet**" to "**.NET**" (these
appear in the bullets for TypeScript / PHP / .NET in the README skills list).
|
|
||
| ## License | ||
|
|
||
| Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE) file for more information. |
There was a problem hiding this comment.
License link points to the appwrite/appwrite repo instead of this repository.
Line 83 links to https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE, which is the main Appwrite server repo's license — not this plugin's license file.
🔧 Proposed fix
-Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE) file for more information.
+Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/cursor-plugin/main/LICENSE) file for more information.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE) file for more information. | |
| Please see the [BSD-3-Clause license](https://raw.githubusercontent.com/appwrite/cursor-plugin/main/LICENSE) file for more information. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 83, The README contains a license link pointing to the
appwrite/appwrite repo (the URL
"https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE"); update
that link to point to this repository's license instead — replace the hardcoded
external URL with a relative link to this repo's LICENSE (e.g., "./LICENSE" or
"LICENSE") in README.md so the license reference resolves to this plugin's
actual license file.
| from appwrite.id import ID | ||
| from appwrite.query import Query | ||
| from appwrite.services.users import Users | ||
| from appwrite.services.tablesdb import TablesDB |
There was a problem hiding this comment.
Wrong module path — will raise ImportError
The import path appwrite.services.tablesdb is missing the underscore. The official Appwrite Python quick-start uses from appwrite.services.tables_db import TablesDB (with underscore). An AI assistant using this skill file will generate code that fails immediately on import.
🐛 Proposed fix
-from appwrite.services.tablesdb import TablesDB
+from appwrite.services.tables_db import TablesDB📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| from appwrite.services.tablesdb import TablesDB | |
| from appwrite.services.tables_db import TablesDB |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/appwrite-python/SKILL.md` at line 22, The import path for TablesDB is
incorrect and will raise ImportError; update the import to use the correct
module name by changing the module reference from appwrite.services.tablesdb to
appwrite.services.tables_db so the symbol TablesDB is imported from the proper
package (e.g., replace any occurrences importing TablesDB from
appwrite.services.tablesdb with appwrite.services.tables_db).
| > **Cookie security:** Always use `httponly`, `secure`, and `same_site: :strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | ||
|
|
||
| > **Forwarding user agent:** Call `session_client.set_forwarded_user_agent(request.user_agent)` to record the end-user's browser info for debugging and security. |
There was a problem hiding this comment.
MD028: Blank line inside blockquote (lines 345 and 417)
Same linter-flagged pattern as in the other skill files. Fix both occurrences by replacing the blank line separating consecutive blockquotes with >:
♻️ Proposed fix
-> **Cookie security:** Always use `httponly`, `secure`, and `same_site: :strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
-
-> **Forwarding user agent:** Call `session_client.set_forwarded_user_agent(request.user_agent)` ...
+> **Cookie security:** Always use `httponly`, `secure`, and `same_site: :strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
+>
+> **Forwarding user agent:** Call `session_client.set_forwarded_user_agent(request.user_agent)` ...Apply the same > separator pattern to the blockquote pair at line 417.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| > **Cookie security:** Always use `httponly`, `secure`, and `same_site: :strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | |
| > **Forwarding user agent:** Call `session_client.set_forwarded_user_agent(request.user_agent)` to record the end-user's browser info for debugging and security. | |
| > **Cookie security:** Always use `httponly`, `secure`, and `same_site: :strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | |
| > | |
| > **Forwarding user agent:** Call `session_client.set_forwarded_user_agent(request.user_agent)` to record the end-user's browser info for debugging and security. |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 345-345: Blank line inside blockquote
(MD028, no-blanks-blockquote)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/appwrite-ruby/SKILL.md` around lines 344 - 346, There are blank lines
between consecutive blockquotes around the "Cookie security:" and "Forwarding
user agent:" sections; remove each blank line and replace it with a continuation
blockquote marker (`>`) so the two blockquotes are joined without an empty line
(apply the same change for both occurrences referenced in the diff).
| > **Cookie security:** Always use `isHTTPOnly`, `isSecure`, and `sameSite: .strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | ||
|
|
||
| > **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers.first(name: .userAgent) ?? "")` to record the end-user's browser info for debugging and security. |
There was a problem hiding this comment.
MD028: Blank line inside blockquote (lines 403 and 474)
Two consecutive blockquote blocks separated by a blank line are flagged by markdownlint (MD028). Merge them into one blockquote using an empty > line:
♻️ Proposed fix (applies to both occurrences at lines 403 and 474)
-> **Cookie security:** Always use `isHTTPOnly`, `isSecure`, and `sameSite: .strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
-
-> **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(...)` ...
+> **Cookie security:** Always use `isHTTPOnly`, `isSecure`, and `sameSite: .strict` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
+>
+> **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(...)` ...🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 403-403: Blank line inside blockquote
(MD028, no-blanks-blockquote)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/appwrite-swift/SKILL.md` around lines 402 - 404, Merge the two
separate blockquote blocks into a single blockquote around the related notes
(the "**Cookie security:** Always use `isHTTPOnly`, `isSecure`, and `sameSite:
.strict`..." block and the "**Forwarding user agent:** Call
`sessionClient.setForwardedUserAgent(req.headers.first(name: .userAgent) ??
\"\")`..." block) by removing the blank line that splits them and, if you need a
visual paragraph break, use an empty blockquote line consisting of just ">"
between paragraphs; ensure the two quoted sections become a single contiguous
blockquote.
| const results = await tablesDB.listRows({ | ||
| databaseId: '[DATABASE_ID]', | ||
| tableId: '[TABLE_ID]', | ||
| queries: [Query.equal('done', false)] | ||
| }); | ||
|
|
||
| // Each document includes built-in fields alongside your data | ||
| const doc = results.documents[0]; | ||
| doc.$id; // string — unique row ID | ||
| doc.$createdAt; // string — ISO 8601 creation timestamp | ||
| doc.$updatedAt; // string — ISO 8601 update timestamp | ||
| doc.$permissions; // string[] — permission strings | ||
| doc.$databaseId; // string | ||
| doc.$collectionId; // string | ||
|
|
There was a problem hiding this comment.
results.documents and $collectionId are Databases-era fields — TablesDB uses .rows and $tableId
The official Appwrite web quick-start uses response.rows to access TablesDB listRows results, not .documents. An AI consuming this skill will generate results.documents[0] which evaluates to undefined. The accompanying field comment for $collectionId is also stale — TablesDB replaces collections with tables.
🐛 Proposed fix
-const doc = results.documents[0];
+const doc = results.rows[0];
doc.$id; // string — unique row ID
doc.$createdAt; // string — ISO 8601 creation timestamp
doc.$updatedAt; // string — ISO 8601 update timestamp
doc.$permissions; // string[] — permission strings
doc.$databaseId; // string
-doc.$collectionId; // string
+doc.$tableId; // string📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const results = await tablesDB.listRows({ | |
| databaseId: '[DATABASE_ID]', | |
| tableId: '[TABLE_ID]', | |
| queries: [Query.equal('done', false)] | |
| }); | |
| // Each document includes built-in fields alongside your data | |
| const doc = results.documents[0]; | |
| doc.$id; // string — unique row ID | |
| doc.$createdAt; // string — ISO 8601 creation timestamp | |
| doc.$updatedAt; // string — ISO 8601 update timestamp | |
| doc.$permissions; // string[] — permission strings | |
| doc.$databaseId; // string | |
| doc.$collectionId; // string | |
| const results = await tablesDB.listRows({ | |
| databaseId: '[DATABASE_ID]', | |
| tableId: '[TABLE_ID]', | |
| queries: [Query.equal('done', false)] | |
| }); | |
| // Each document includes built-in fields alongside your data | |
| const doc = results.rows[0]; | |
| doc.$id; // string — unique row ID | |
| doc.$createdAt; // string — ISO 8601 creation timestamp | |
| doc.$updatedAt; // string — ISO 8601 update timestamp | |
| doc.$permissions; // string[] — permission strings | |
| doc.$databaseId; // string | |
| doc.$tableId; // string |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/appwrite-typescript/SKILL.md` around lines 208 - 222, The example uses
Databases-era fields: update the usage of listRows results to use results.rows
instead of results.documents and replace references to $collectionId with
$tableId in the comments; specifically, change code that reads
results.documents[0] to results.rows[0] and update the inline field comments for
doc.$collectionId to doc.$tableId so consumers of the TablesDB API (listRows,
results, rows, $tableId) get correct properties.
| > **Cookie security:** Always use `httpOnly`, `secure`, and `sameSite: 'strict'` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | ||
|
|
||
| > **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers['user-agent'])` to record the end-user's browser info for debugging and security. |
There was a problem hiding this comment.
MD028: Blank line inside blockquote (lines 548 and 625)
Fix both occurrences by replacing the separating blank line with >:
♻️ Proposed fix
-> **Cookie security:** Always use `httpOnly`, `secure`, and `sameSite: 'strict'` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
-
-> **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers['user-agent'])` ...
+> **Cookie security:** Always use `httpOnly`, `secure`, and `sameSite: 'strict'` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`.
+>
+> **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers['user-agent'])` ...Apply the same fix to the pair at line 625.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| > **Cookie security:** Always use `httpOnly`, `secure`, and `sameSite: 'strict'` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | |
| > **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers['user-agent'])` to record the end-user's browser info for debugging and security. | |
| > **Cookie security:** Always use `httpOnly`, `secure`, and `sameSite: 'strict'` to prevent XSS. The cookie name must be `a_session_<PROJECT_ID>`. | |
| > | |
| > **Forwarding user agent:** Call `sessionClient.setForwardedUserAgent(req.headers['user-agent'])` to record the end-user's browser info for debugging and security. |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 548-548: Blank line inside blockquote
(MD028, no-blanks-blockquote)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@skills/appwrite-typescript/SKILL.md` around lines 547 - 549, Remove the blank
line inside the two blockquotes so they remain contiguous: in the blockquote
containing "Cookie security: Always use `httpOnly`, `secure`, and `sameSite:
'strict'`..." and in the blockquote containing "Forwarding user agent: Call
`sessionClient.setForwardedUserAgent(req.headers['user-agent'])`...", replace
the empty line between paragraphs with a leading ">" so the quoted lines are
continuous (no blank line) to resolve MD028.
README.md
Outdated
| @@ -1 +1,83 @@ | |||
| # cursor-plugin No newline at end of file | |||
| # Appwrite CursorPlugin | |||
There was a problem hiding this comment.
| # Appwrite CursorPlugin | |
| # Appwrite Cursor Plugin |
| "env": { | ||
| "APPWRITE_API_KEY": "your-api-key", | ||
| "APPWRITE_PROJECT_ID": "your-project-id", | ||
| "APPWRITE_ENDPOINT": "https://<REGION>.cloud.appwrite.io/v1" |
There was a problem hiding this comment.
How does this work? how will the user update this endpoint?
There was a problem hiding this comment.
They will need to update in their MCP settings
.cursor-plugin/plugin.json
Outdated
| { | ||
| "name": "appwrite-plugin", | ||
| "version": "0.1.0", | ||
| "description": "Appwrite is an open-source backend as a service server that abstracts and simplifies complex and repetitive development tasks behind a very simple to use REST API. Appwrite aims to help you develop your apps faster and in a more secure way. Use the CursorPlugin SDK to integrate your app with the Appwrite server to easily start interacting with all of Appwrite backend APIs and tools. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)", |
There was a problem hiding this comment.
Change description to match what other descriptions on the marketplace look like
|
Also how do the commands work? did we test them? Specifically asking about the login part with the CLI |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
.cursor-plugin/plugin.json (1)
4-4: Duplicated phrase indescription."…access your projects and correctly integrate with your projects" — "your projects" appears twice.
✏️ Proposed fix
- "description": "The Appwrite plugin for Cursor includes skills and MCP servers, allowing AI agents to access your projects and correctly integrate with your projects.", + "description": "The Appwrite plugin for Cursor includes skills and MCP servers, allowing AI agents to access and correctly integrate with your Appwrite projects.",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.cursor-plugin/plugin.json at line 4, The description field in plugin.json contains a duplicated phrase ("your projects" appears twice); update the "description" value to remove the repetition and make it concise—for example change the text in the "description" property to something like "The Appwrite plugin for Cursor includes skills and MCP servers, allowing AI agents to access and correctly integrate with your projects." Ensure you only modify the "description" string and preserve surrounding JSON syntax and punctuation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.cursor-plugin/plugin.json:
- Line 10: The "logo" field in .cursor-plugin/plugin.json points to the
appwrite/appwrite repo asset; update the "logo" value to either the canonical
raw GitHub URL (raw.githubusercontent.com/...) if intentionally sharing the
Appwrite brand image, or host and point to the asset in this repository
(cursor-plugin) instead so the plugin references its own logo; modify the "logo"
entry accordingly in the plugin.json.
In `@README.md`:
- Around line 4-8: The README states compatibility with "Appwrite server version
latest" while the version badge pins 1.8.1; update the compatibility sentence to
the concrete version used in the badge (e.g., replace "latest" with "1.8.1") so
the badge and text are consistent—edit the README.md compatibility sentence that
references "Appwrite server version latest" to match the badge value "1.8.1".
- Line 79: The README's Contribution section erroneously states "This library is
auto-generated by Appwrite custom [SDK
Generator](https://github.com/appwrite/sdk-generator)" and points contributors
to the sdk-generator repo; remove or reword that sentence and replace the link
with the correct contribution guidance for this plugin (either link to this
repo's CONTRIBUTING.md or a generic contribution guidelines page). Locate the
exact sentence in README.md ("This library is auto-generated by Appwrite custom
[SDK Generator]...") and update it to accurately describe the project origin and
provide the proper contribution link or instructions.
---
Duplicate comments:
In `@README.md`:
- Around line 50-58: Fix the incorrect language name capitalizations in the
README list by replacing the exact strings "Typescript", "Php", and "Dotnet"
with their proper capitalizations: "TypeScript", "PHP", and ".NET" respectively
in the entries that reference `skills/appwrite-typescript/SKILL.md`,
`skills/appwrite-php/SKILL.md`, and `skills/appwrite-dotnet/SKILL.md`.
- Line 83: The README's license link currently points to the appwrite/appwrite
repository; update the URL in the line "Please see the [BSD-3-Clause
license](https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE)
file for more information." to reference this repository's LICENSE file instead
(replace the hardcoded
https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE with the
correct raw/github URL for this repo's LICENSE), ensuring the link text and
surrounding sentence remain unchanged.
- Line 8: The releases URL in the README contains an extra ".git" making it
invalid; update the string
**https://github.com/appwrite/cursor-plugin.git/releases** to
**https://github.com/appwrite/cursor-plugin/releases** in the README.md so the
"previous releases" link points to the correct GitHub releases page.
- Around line 18-44: The fenced code block that contains the directory tree
starting with ".cursor-plugin/" is missing a language tag; fix it by adding a
neutral language identifier to the opening fence (for example change ``` to
```text) so the block becomes "```text" (or another appropriate tag) to satisfy
MD040 and preserve the tree formatting.
---
Nitpick comments:
In @.cursor-plugin/plugin.json:
- Line 4: The description field in plugin.json contains a duplicated phrase
("your projects" appears twice); update the "description" value to remove the
repetition and make it concise—for example change the text in the "description"
property to something like "The Appwrite plugin for Cursor includes skills and
MCP servers, allowing AI agents to access and correctly integrate with your
projects." Ensure you only modify the "description" string and preserve
surrounding JSON syntax and punctuation.
.cursor-plugin/plugin.json
Outdated
| "email": "team@appwrite.io" | ||
| }, | ||
| "repository": "https://github.com/appwrite/cursor-plugin", | ||
| "logo": "https://github.com/appwrite/appwrite/raw/main/public/images/github.png" |
There was a problem hiding this comment.
logo URL references the appwrite/appwrite repo, not this one.
https://github.com/appwrite/appwrite/raw/main/public/images/github.png pulls the logo asset from the main Appwrite server repository. If intentional (shared brand logo), use the canonical raw.githubusercontent.com form; if this plugin should have its own logo asset, point to cursor-plugin instead.
🔧 Proposed fix (using canonical raw URL)
- "logo": "https://github.com/appwrite/appwrite/raw/main/public/images/github.png"
+ "logo": "https://raw.githubusercontent.com/appwrite/appwrite/main/public/images/github.png"📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "logo": "https://github.com/appwrite/appwrite/raw/main/public/images/github.png" | |
| "logo": "https://raw.githubusercontent.com/appwrite/appwrite/main/public/images/github.png" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.cursor-plugin/plugin.json at line 10, The "logo" field in
.cursor-plugin/plugin.json points to the appwrite/appwrite repo asset; update
the "logo" value to either the canonical raw GitHub URL
(raw.githubusercontent.com/...) if intentionally sharing the Appwrite brand
image, or host and point to the asset in this repository (cursor-plugin) instead
so the plugin references its own logo; modify the "logo" entry accordingly in
the plugin.json.
|  | ||
| [](https://twitter.com/appwrite) | ||
| [](https://appwrite.io/discord) | ||
|
|
||
| **This SDK is compatible with Appwrite server version latest. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).** |
There was a problem hiding this comment.
Version string "latest" is inconsistent with the badge (1.8.1).
Line 8 says "compatible with Appwrite server version latest" while the badge on line 4 pins api%20version-1.8.1. Use the concrete version number for consistency.
✏️ Proposed fix
-**This SDK is compatible with Appwrite server version latest. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).**
+**This SDK is compatible with Appwrite server version 1.8.1. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin/releases).**📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
|  | |
| [](https://twitter.com/appwrite) | |
| [](https://appwrite.io/discord) | |
| **This SDK is compatible with Appwrite server version latest. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin.git/releases).** | |
|  | |
| [](https://twitter.com/appwrite) | |
| [](https://appwrite.io/discord) | |
| **This SDK is compatible with Appwrite server version 1.8.1. For older versions, please check [previous releases](https://github.com/appwrite/cursor-plugin/releases).** |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` around lines 4 - 8, The README states compatibility with "Appwrite
server version latest" while the version badge pins 1.8.1; update the
compatibility sentence to the concrete version used in the badge (e.g., replace
"latest" with "1.8.1") so the badge and text are consistent—edit the README.md
compatibility sentence that references "Appwrite server version latest" to match
the badge value "1.8.1".
|
|
||
| ## Contribution | ||
|
|
||
| This library is auto-generated by Appwrite custom [SDK Generator](https://github.com/appwrite/sdk-generator). To learn more about how you can help us improve this SDK, please check the [contribution guide](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md) before sending a pull-request. |
There was a problem hiding this comment.
Misleading "auto-generated" boilerplate in the Contribution section.
This plugin is not auto-generated by the Appwrite SDK Generator, so directing contributors to the sdk-generator repo for contribution guidance is incorrect and may discourage contributions to this repo.
✏️ Proposed fix
-This library is auto-generated by Appwrite custom [SDK Generator](https://github.com/appwrite/sdk-generator). To learn more about how you can help us improve this SDK, please check the [contribution guide](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md) before sending a pull-request.
+Contributions are welcome! Please open an issue or pull-request in this repository. For general Appwrite contribution guidelines, see the [contribution guide](https://github.com/appwrite/appwrite/blob/master/CONTRIBUTING.md).📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| This library is auto-generated by Appwrite custom [SDK Generator](https://github.com/appwrite/sdk-generator). To learn more about how you can help us improve this SDK, please check the [contribution guide](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md) before sending a pull-request. | |
| Contributions are welcome! Please open an issue or pull-request in this repository. For general Appwrite contribution guidelines, see the [contribution guide](https://github.com/appwrite/appwrite/blob/master/CONTRIBUTING.md). |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 79, The README's Contribution section erroneously states
"This library is auto-generated by Appwrite custom [SDK
Generator](https://github.com/appwrite/sdk-generator)" and points contributors
to the sdk-generator repo; remove or reword that sentence and replace the link
with the correct contribution guidance for this plugin (either link to this
repo's CONTRIBUTING.md or a generic contribution guidelines page). Locate the
exact sentence in README.md ("This library is auto-generated by Appwrite custom
[SDK Generator]...") and update it to accurately describe the project origin and
provide the proper contribution link or instructions.
This PR contains updates to the CursorPlugin SDK for version 0.1.0.