TopGit theo dõi lencx/chat-todo-plugin trên GitHub trong nhóm AI Tools, đã đạt 253 sao. ✅ ChatGPT Plugin for managing a TODO list
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
plugin-manifest: Every plugin requires a ai-plugin.json file, which needs to be hosted on the API’s domain.
{
"schema_version": "v1",
"name_for_human": "TODO Plugin (service http)",
"name_for_model": "todo",
"description_for_human": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
"description_for_model": "Plugin for managing a TODO list, you can add, remove and view your TODOs.",
"auth": {
"type": "service_http",
"authorization_type": "bearer",
"verification_tokens": {
"openai": "<YOUR_OPENAI_KEY>"
}
},
"api": {
"type": "openapi",
"url": "https://<YOUR_REPO>.<YOUR_OWNER>.repl.co/openapi.yaml",
"is_user_authenticated": false
},
"logo_url": "https://<YOUR_REPO>.<YOUR_OWNER>.repl.co/logo.png",
"contact_email": "<YOUR_EMAIL>",
"legal_info_url": "http://www.example.com/legal"
}
<YOUR_OPENAI_KEY>: your OpenAI API key
<YOUR_REPO>: your replit app name
<YOUR_OWNER>: your replit username
<YOUR_EMAIL>: your email
openapi.yaml
openapi-definition: OpenAPI specification to document the API. The model in ChatGPT does not know anything about your API other than what is defined in the OpenAPI specification and manifest file. This means that if you have an extensive API, you need not expose all functionality to the model and can choose specific endpoints.
openapi: 3.0.1
info:
title: TODO Plugin
description: A plugin that allows the user to create and manage a TODO list using ChatGPT. If you do not know the user's username, ask them first before making queries to the plugin. Otherwise, use the username "global".
version: 'v1'
servers:
# product: http://www.example.com
- url: http://localhost:5002
paths:
/todos/{username}:
get:
operationId: getTodos
summary: Get the list of todos
parameters:
- in: path
name: username
schema:
type: string
required: true
description: The name of the user.
responses:
"200":
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/getTodosResponse'
# ...
main.py
import os
import quart
import quart_cors
from quart import Quart, jsonify, request
PORT = 5002
TODOS = {}
# Get authentication key from environment variable
SERVICE_AUTH_KEY = os.environ.get("SERVICE_AUTH_KEY")
# Create a Quart app and enable CORS
app = quart_cors.cors(
Quart(__name__),
allow_origin=[
f"http://localhost:{PORT}",
"https://chat.openai.com",
]
)
# Add a before_request hook to check for authorization header
@app.before_request
def assert_auth_header():
auth_header = request.headers.get("Authorization")
print(auth_header)
# check if the header is missing or incorrect, and return an error if needed
if not auth_header or auth_header != f"Bearer {SERVICE_AUTH_KEY}":
return jsonify({"error": "Unauthorized"}), 401
# Add a route to get all todos
@app.route("/todos", methods=["GET"])
async def get_todos():
return jsonify(TODOS)
# Add a route to get all todos for a specific user
@app.route("/todos/<string:username>", methods=["GET"])
async def get_todo_user(username):
todos = TODOS.get(username, [])
return jsonify(todos)
# Add a route to add a todo for a specific user
@app.route("/todos/<string:username>", methods=["POST"])
async def add_todo(username):
request_data = await request.get_json()
todo = request_data.get("todo", "")
TODOS.setdefault(username, []).append(todo)
return jsonify({"status": "success"})
# Add a route to delete a todo for a specific user
@app.route("/todos/<string:username>", methods=["DELETE"])
async def delete_todo(username):
request_data = await request.get_json()
todo_idx = request_data.get("todo_idx", -1)
if 0 <= todo_idx < len(TODOS.get(username, [])):
TODOS[username].pop(todo_idx)
return jsonify({"status": "success"})
@app.get("/logo.png")
async def plugin_logo():
filename = 'logo.png'
return await quart.send_file(filename, mimetype='image/png')
@app.get("/.well-known/ai-plugin.json")
async def plugin_manifest():
host = request.headers['Host']
with open("manifest.json") as f:
text = f.read()
text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
return quart.Response(text, mimetype="text/json")
@app.get("/openapi.yaml")
async def openapi_spec():
host = request.headers['Host']
with open("openapi.yaml") as f:
text = f.read()
text = text.replace("PLUGIN_HOSTNAME", f"https://{host}")
return quart.Response(text, mimetype="text/yaml")
def main():
app.run(debug=True, host="0.0.0.0", port=PORT)
if __name__ == "__main__":
main()
Plugin Deploy (Replit)
Open Replit and click the Create Repl button.
When the pop-up window appears, click the Import from GitHub button in the top right corner.
In the GitHub URL field, enter https://github.com/lencx/chat-todo-plugin and select Python as the language.
Then click the Import from GitHub button in the bottom right corner and wait for the initialization to complete.
Click the Run button and wait for the execution to finish.
lencx/chat-todo-plugin thuộc nhóm AI Tools trên TopGit, cùng 6 topic GitHub. Trang Trending và Topics liệt kê các repo cùng số sao và cùng ngôn ngữ để so sánh.
Đọc thêm về lencx/chat-todo-plugin ở đâu?
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/lencx/chat-todo-plugin là nguồn chính thức.
lencx/chat-todo-plugin có phải mã nguồn mở không?
Có — lencx/chat-todo-plugin phát hành theo license MIT, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/lencx/chat-todo-plugin.
lencx/chat-todo-plugin là gì?
lencx/chat-todo-plugin (lencx/chat-todo-plugin) là dự án Python trên GitHub. Theo mô tả gốc: ✅ ChatGPT Plugin for managing a TODO list
lencx/chat-todo-plugin so với các dự án AI Tools khác thế nào?
lencx/chat-todo-plugin được TopGit xếp vào nhóm AI Tools, với 253 sao GitHub và viết bằng Python. Xem trang chủ đề AI Tools trên TopGit để so sánh với các dự án tương tự theo số sao và mức độ hoạt động.
Vì sao lencx/chat-todo-plugin được xếp vào nhóm AI Tools?
TopGit xếp lencx/chat-todo-plugin vào nhóm AI Tools dựa trên GitHub topics và mô tả của repo (gắn thẻ: "chat-plugin", "chatgpt", "chatgpt-plugins"). Việc phân loại dựa trên metadata thật của repo, không phải đoán theo cảm tính biên tập.
Đọc đầy đủ README ở tab phía trên.
chat-todo-plugin có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về chat-todo-plugin.