feat: journal dashboard widgets, agent polish, and edit-mode live previews
Journal dashboard widgets and quick-add; rich-text quick-add dialogs. Dashboard draft sync for live edit previews; assistant bubble + API tools. Journal UX: stress slider, mood grid, query cap fix.
This commit is contained in:
@@ -314,6 +314,103 @@ components:
|
||||
properties:
|
||||
occurredOn: { type: string, format: date }
|
||||
|
||||
CareLog:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
careType: { type: string }
|
||||
notes: { type: string, nullable: true }
|
||||
performedAt: { type: string, format: date-time }
|
||||
performedBy: { type: string, format: uuid, nullable: true }
|
||||
|
||||
CareLogInput:
|
||||
type: object
|
||||
required: [careType]
|
||||
properties:
|
||||
careType: { type: string }
|
||||
notes: { type: string, nullable: true }
|
||||
performedAt: { type: string, format: date-time }
|
||||
|
||||
CareSchedule:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
careType: { type: string }
|
||||
intervalDays: { type: integer }
|
||||
lastPerformedAt: { type: string, format: date-time, nullable: true }
|
||||
nextDueAt: { type: string, format: date-time, nullable: true }
|
||||
enabled: { type: boolean }
|
||||
daysUntilDue: { type: integer, nullable: true }
|
||||
isOverdue: { type: boolean }
|
||||
|
||||
CareScheduleInput:
|
||||
type: object
|
||||
required: [careType, intervalDays]
|
||||
properties:
|
||||
careType: { type: string }
|
||||
intervalDays: { type: integer, minimum: 1, maximum: 365 }
|
||||
enabled: { type: boolean }
|
||||
|
||||
CareScheduleToggleInput:
|
||||
type: object
|
||||
required: [enabled]
|
||||
properties:
|
||||
enabled: { type: boolean }
|
||||
|
||||
ScheduleOnCalendarInput:
|
||||
type: object
|
||||
required: [calendarId]
|
||||
properties:
|
||||
calendarId: { type: string, format: uuid }
|
||||
reminderMinutesBefore: { type: integer, nullable: true }
|
||||
|
||||
ShareableEntityType:
|
||||
type: object
|
||||
properties:
|
||||
type: { type: string }
|
||||
label: { type: string }
|
||||
defaultCapabilities:
|
||||
type: array
|
||||
items: { type: string }
|
||||
|
||||
ShareLink:
|
||||
type: object
|
||||
properties:
|
||||
id: { type: string, format: uuid }
|
||||
entityType: { type: string }
|
||||
entityId: { type: string, format: uuid }
|
||||
createdAt: { type: string, format: date-time }
|
||||
expiresAt: { type: string, format: date-time, nullable: true }
|
||||
capabilities:
|
||||
type: object
|
||||
properties:
|
||||
read: { type: boolean }
|
||||
write: { type: boolean }
|
||||
|
||||
ShareLinkCreateInput:
|
||||
type: object
|
||||
required: [entityType, entityId]
|
||||
properties:
|
||||
entityType: { type: string }
|
||||
entityId: { type: string, format: uuid }
|
||||
expiresAt: { type: string, format: date-time, nullable: true }
|
||||
capabilities:
|
||||
type: object
|
||||
properties:
|
||||
read: { type: boolean }
|
||||
write: { type: boolean }
|
||||
|
||||
ShareLinkCreated:
|
||||
type: object
|
||||
properties:
|
||||
url: { type: string, format: uri }
|
||||
expiresAt: { type: string, format: date-time, nullable: true }
|
||||
|
||||
PushOverdueResult:
|
||||
type: object
|
||||
properties:
|
||||
added: { type: integer }
|
||||
|
||||
paths:
|
||||
/api/v1/calendars:
|
||||
get:
|
||||
@@ -791,6 +888,193 @@ paths:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/OkResponse" }
|
||||
|
||||
/api/v1/garden/plants/{id}/care-logs:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
get:
|
||||
summary: List care logs for a plant
|
||||
tags: [Garden]
|
||||
parameters:
|
||||
- name: limit
|
||||
in: query
|
||||
schema: { type: integer, minimum: 1, maximum: 100, default: 20 }
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items: { $ref: "#/components/schemas/CareLog" }
|
||||
post:
|
||||
summary: Log care performed on a plant
|
||||
tags: [Garden]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/CareLogInput" }
|
||||
responses:
|
||||
"201":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/CareLog" }
|
||||
|
||||
/api/v1/garden/plants/{id}/care-schedules:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
get:
|
||||
summary: List care schedules for a plant
|
||||
tags: [Garden]
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items: { $ref: "#/components/schemas/CareSchedule" }
|
||||
post:
|
||||
summary: Create or update a care schedule
|
||||
tags: [Garden]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/CareScheduleInput" }
|
||||
responses:
|
||||
"201":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/CareSchedule" }
|
||||
|
||||
/api/v1/garden/care-schedules/{id}:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
patch:
|
||||
summary: Enable or disable a care schedule
|
||||
tags: [Garden]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/CareScheduleToggleInput" }
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/OkResponse" }
|
||||
delete:
|
||||
summary: Delete a care schedule
|
||||
tags: [Garden]
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/OkResponse" }
|
||||
|
||||
/api/v1/garden/care-schedules/{id}/calendar:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
post:
|
||||
summary: Add next due care to calendar
|
||||
tags: [Garden]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/ScheduleOnCalendarInput" }
|
||||
responses:
|
||||
"201":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/OkResponse" }
|
||||
|
||||
/api/v1/garden/overdue-care/push:
|
||||
post:
|
||||
summary: Push overdue care items to task list
|
||||
tags: [Garden]
|
||||
responses:
|
||||
"201":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/PushOverdueResult" }
|
||||
|
||||
/api/v1/share-links:
|
||||
get:
|
||||
summary: List share links or shareable entity types
|
||||
tags: [Sharing]
|
||||
parameters:
|
||||
- name: entityTypes
|
||||
in: query
|
||||
schema: { type: string, enum: ["true"] }
|
||||
description: When true, returns shareable entity types instead of links
|
||||
- name: entityType
|
||||
in: query
|
||||
schema: { type: string }
|
||||
- name: entityId
|
||||
in: query
|
||||
schema: { type: string, format: uuid }
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
oneOf:
|
||||
- type: array
|
||||
items: { $ref: "#/components/schemas/ShareLink" }
|
||||
- type: array
|
||||
items: { $ref: "#/components/schemas/ShareableEntityType" }
|
||||
post:
|
||||
summary: Create a share link
|
||||
tags: [Sharing]
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/ShareLinkCreateInput" }
|
||||
responses:
|
||||
"201":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/ShareLinkCreated" }
|
||||
|
||||
/api/v1/share-links/{id}:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema: { type: string, format: uuid }
|
||||
delete:
|
||||
summary: Revoke a share link
|
||||
tags: [Sharing]
|
||||
responses:
|
||||
"200":
|
||||
content:
|
||||
application/json:
|
||||
schema: { $ref: "#/components/schemas/OkResponse" }
|
||||
|
||||
/api/v1/openapi:
|
||||
get:
|
||||
summary: OpenAPI specification (YAML)
|
||||
tags: [Meta]
|
||||
responses:
|
||||
"200":
|
||||
description: OpenAPI 3.1 YAML document
|
||||
content:
|
||||
application/yaml:
|
||||
schema: { type: string }
|
||||
|
||||
/api/v1/bangs:
|
||||
get:
|
||||
summary: Bang stats (total + recent)
|
||||
@@ -916,4 +1200,6 @@ tags:
|
||||
- name: Notes
|
||||
- name: Journal
|
||||
- name: Garden
|
||||
- name: Sharing
|
||||
- name: Bangs
|
||||
- name: Meta
|
||||
|
||||
Reference in New Issue
Block a user