Some checks failed
CI/CD / detect-changes (pull_request) Successful in 21s
CI/CD / build-and-deploy (pull_request) Has been cancelled
CI/CD / test-frontend (pull_request) Has been cancelled
CI/CD / test-sqlite (pull_request) Has been cancelled
CI/CD / test-go-pg (pull_request) Has been cancelled
Conversation search (db.query search_like, chat-core /search endpoint, sidebar search UI), message pagination polish (scroll preservation, loading spinner), workflow-chat integration package, and multi-user E2E test infrastructure. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
82 lines
2.3 KiB
JSON
82 lines
2.3 KiB
JSON
{
|
|
"id": "chat-core",
|
|
"title": "Chat Core",
|
|
"type": "library",
|
|
"tier": "starlark",
|
|
"version": "0.2.0",
|
|
"description": "Core chat library — conversations, messages, participants, read cursors. Usable by other packages via lib.require().",
|
|
"author": "switchboard",
|
|
|
|
"permissions": ["db.write", "realtime.publish"],
|
|
|
|
"exports": [
|
|
"create", "send", "history",
|
|
"add_participant", "remove_participant", "mark_read"
|
|
],
|
|
|
|
"api_routes": [
|
|
{"method": "GET", "path": "/conversations"},
|
|
{"method": "POST", "path": "/conversations"},
|
|
{"method": "GET", "path": "/conversations/*"},
|
|
{"method": "PUT", "path": "/conversations/*"},
|
|
{"method": "DELETE", "path": "/conversations/*"},
|
|
{"method": "GET", "path": "/messages/*"},
|
|
{"method": "POST", "path": "/messages/*"},
|
|
{"method": "PUT", "path": "/messages/*"},
|
|
{"method": "DELETE", "path": "/messages/*"},
|
|
{"method": "GET", "path": "/participants/*"},
|
|
{"method": "POST", "path": "/participants/*"},
|
|
{"method": "DELETE", "path": "/participants/*"},
|
|
{"method": "POST", "path": "/read/*"},
|
|
{"method": "GET", "path": "/search"},
|
|
{"method": "GET", "path": "/unread"}
|
|
],
|
|
|
|
"db_tables": {
|
|
"conversations": {
|
|
"columns": {
|
|
"title": "text",
|
|
"type": "text",
|
|
"created_by": "text",
|
|
"updated_at": "text"
|
|
},
|
|
"indexes": [["created_by"], ["updated_at"]]
|
|
},
|
|
"participants": {
|
|
"columns": {
|
|
"conversation_id": "text",
|
|
"participant_id": "text",
|
|
"participant_type": "text",
|
|
"display_name": "text",
|
|
"role": "text",
|
|
"joined_at": "text"
|
|
},
|
|
"indexes": [
|
|
["conversation_id"],
|
|
["participant_id"],
|
|
["conversation_id", "participant_id"]
|
|
]
|
|
},
|
|
"messages": {
|
|
"columns": {
|
|
"conversation_id": "text",
|
|
"participant_id": "text",
|
|
"content": "text",
|
|
"content_type": "text",
|
|
"edited_at": "text"
|
|
},
|
|
"indexes": [["conversation_id"]]
|
|
},
|
|
"read_cursors": {
|
|
"columns": {
|
|
"conversation_id": "text",
|
|
"participant_id": "text",
|
|
"last_read_message_id": "text"
|
|
},
|
|
"indexes": [["conversation_id", "participant_id"]]
|
|
}
|
|
},
|
|
|
|
"schema_version": 1
|
|
}
|