diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..118c3d4 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,27 @@ +# AGENTS.md + +## Cursor Cloud specific instructions + +This is a **Next.js 16 static marketing/docs website** for Memos (usememos.com). No external services, databases, or environment variables are required. + +### Services + +| Service | Command | Port | Notes | +|---------|---------|------|-------| +| Dev server | `pnpm dev` | 3000 | Uses Turbopack; hot-reloads on file changes | + +### Key commands + +Refer to `CLAUDE.md` and `package.json` scripts for the full list. Quick reference: + +- **Lint**: `pnpm lint` (runs Biome) +- **Format**: `pnpm format` (runs Biome format with `--write`) +- **Build**: `pnpm build` (full production build, generates 300+ static pages) +- **Dev**: `pnpm dev` (starts on port 3000 with Turbopack) + +### Gotchas + +- The `postinstall` script downloads OpenAPI specs from GitHub (`raw.githubusercontent.com`) and generates MDX + Fumadocs source files. If the network fetch fails during `pnpm install`, the generated API docs will be missing. Rerun `pnpm install` to retry. +- pnpm may warn about ignored build scripts for `esbuild` and `sharp`. This warning is cosmetic and does not block development or builds. +- There are no automated test suites (no `test` script in `package.json`). Verification is done via `pnpm lint` and `pnpm build`. +- The `.source/` directory is auto-generated by `fumadocs-mdx` during `postinstall`. Do not edit files in it directly. diff --git a/content/docs/api/latest/attachmentservice/BatchDeleteAttachments.mdx b/content/docs/api/latest/attachmentservice/BatchDeleteAttachments.mdx new file mode 100644 index 0000000..374aac0 --- /dev/null +++ b/content/docs/api/latest/attachmentservice/BatchDeleteAttachments.mdx @@ -0,0 +1,15 @@ +--- +title: Batch Delete Attachments +description: BatchDeleteAttachments deletes multiple attachments in one request. +_openapi: + method: POST + toc: [] + structuredData: + headings: [] + contents: + - content: BatchDeleteAttachments deletes multiple attachments in one request. +--- + +{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} + + \ No newline at end of file diff --git a/content/docs/api/latest/attachmentservice/meta.json b/content/docs/api/latest/attachmentservice/meta.json index 88131c5..ab8873a 100644 --- a/content/docs/api/latest/attachmentservice/meta.json +++ b/content/docs/api/latest/attachmentservice/meta.json @@ -1,4 +1,4 @@ { "title": "Attachment Service", - "pages": ["CreateAttachment", "DeleteAttachment", "GetAttachment", "ListAttachments", "UpdateAttachment"] + "pages": ["BatchDeleteAttachments", "CreateAttachment", "DeleteAttachment", "GetAttachment", "ListAttachments", "UpdateAttachment"] } diff --git a/content/docs/api/latest/userservice/BatchGetUsers.mdx b/content/docs/api/latest/userservice/BatchGetUsers.mdx new file mode 100644 index 0000000..30a7c98 --- /dev/null +++ b/content/docs/api/latest/userservice/BatchGetUsers.mdx @@ -0,0 +1,15 @@ +--- +title: Batch Get Users +description: BatchGetUsers returns active users by usernames. +_openapi: + method: POST + toc: [] + structuredData: + headings: [] + contents: + - content: BatchGetUsers returns active users by usernames. +--- + +{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} + + \ No newline at end of file diff --git a/content/docs/api/latest/userservice/meta.json b/content/docs/api/latest/userservice/meta.json index 693f4d2..3d669c1 100644 --- a/content/docs/api/latest/userservice/meta.json +++ b/content/docs/api/latest/userservice/meta.json @@ -1,6 +1,7 @@ { "title": "User Service", "pages": [ + "BatchGetUsers", "CreatePersonalAccessToken", "CreateUser", "CreateUserWebhook", diff --git a/openapi/latest.yaml b/openapi/latest.yaml index c516046..6c72cda 100644 --- a/openapi/latest.yaml +++ b/openapi/latest.yaml @@ -176,6 +176,28 @@ paths: application/json: schema: $ref: '#/components/schemas/Status' + /api/v1/attachments:batchDelete: + post: + tags: + - AttachmentService + description: BatchDeleteAttachments deletes multiple attachments in one request. + operationId: AttachmentService_BatchDeleteAttachments + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BatchDeleteAttachmentsRequest' + required: true + responses: + "200": + description: OK + content: {} + default: + description: Default error response + content: + application/json: + schema: + $ref: '#/components/schemas/Status' /api/v1/auth/me: get: tags: @@ -1955,6 +1977,31 @@ paths: application/json: schema: $ref: '#/components/schemas/Status' + /api/v1/users:batchGet: + post: + tags: + - UserService + description: BatchGetUsers returns active users by usernames. + operationId: UserService_BatchGetUsers + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BatchGetUsersRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/BatchGetUsersResponse' + default: + description: Default error response + content: + application/json: + schema: + $ref: '#/components/schemas/Status' /api/v1/users:stats: get: tags: @@ -2015,6 +2062,33 @@ components: description: |- Optional. The related memo. Refer to `Memo.name`. Format: memos/{memo} + motionMedia: + allOf: + - $ref: '#/components/schemas/MotionMedia' + description: Optional. Motion media metadata. + BatchDeleteAttachmentsRequest: + required: + - names + type: object + properties: + names: + type: array + items: + type: string + BatchGetUsersRequest: + type: object + properties: + usernames: + type: array + items: + type: string + BatchGetUsersResponse: + type: object + properties: + users: + type: array + items: + $ref: '#/components/schemas/User' Color: type: object properties: @@ -2781,6 +2855,30 @@ components: type: string description: The title extracted from the first H1 heading, if present. description: Computed properties of a memo. + MotionMedia: + type: object + properties: + family: + enum: + - MOTION_MEDIA_FAMILY_UNSPECIFIED + - APPLE_LIVE_PHOTO + - ANDROID_MOTION_PHOTO + type: string + format: enum + role: + enum: + - MOTION_MEDIA_ROLE_UNSPECIFIED + - STILL + - VIDEO + - CONTAINER + type: string + format: enum + groupId: + type: string + presentationTimestampUs: + type: string + hasEmbeddedVideo: + type: boolean NotificationSetting_EmailSetting: type: object properties: @@ -3133,6 +3231,11 @@ components: description: |- The sender of the notification. Format: users/{user} + senderUser: + readOnly: true + allOf: + - $ref: '#/components/schemas/User' + description: The sender user details. status: enum: - STATUS_UNSPECIFIED @@ -3151,6 +3254,7 @@ components: enum: - TYPE_UNSPECIFIED - MEMO_COMMENT + - MEMO_MENTION type: string description: The type of the notification. format: enum @@ -3158,6 +3262,10 @@ components: readOnly: true allOf: - $ref: '#/components/schemas/UserNotification_MemoCommentPayload' + memoMention: + readOnly: true + allOf: + - $ref: '#/components/schemas/UserNotification_MemoMentionPayload' UserNotification_MemoCommentPayload: type: object properties: @@ -3171,6 +3279,31 @@ components: description: |- The name of related memo. Format: memos/{memo} + memoSnippet: + type: string + description: Preview text of the comment memo. + relatedMemoSnippet: + type: string + description: Preview text of the related memo. + UserNotification_MemoMentionPayload: + type: object + properties: + memo: + type: string + description: |- + The memo that contains the mention. + Format: memos/{memo} + relatedMemo: + type: string + description: |- + The related parent memo when the mention was created in a comment. + Format: memos/{memo} + memoSnippet: + type: string + description: Preview text of the memo that contains the mention. + relatedMemoSnippet: + type: string + description: Preview text of the related parent memo. UserSetting: type: object properties: