Compare commits
82 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
7b30cc6706
|
|||
|
13e745bf6d
|
|||
|
c053143db3
|
|||
|
cfa36633e1
|
|||
|
cbc52f554a
|
|||
|
2f6bab165b
|
|||
|
7713fa1729
|
|||
|
2500c4e14a
|
|||
|
0d61b725a8
|
|||
|
2d182ff412
|
|||
|
6850c11f06
|
|||
|
415ae30d3b
|
|||
|
af22446c47
|
|||
|
570dce37e1
|
|||
|
7c8fa2e5c4
|
|||
|
ddbd0c761f
|
|||
|
6e8dea6252
|
|||
|
dc5218b1ad
|
|||
|
ba15759595
|
|||
|
99a9833df8
|
|||
|
f75c0373ed
|
|||
|
53404e187a
|
|||
|
387ed4cbc4
|
|||
|
e823628090
|
|||
|
058965f58e
|
|||
|
22f34377ec
|
|||
|
12422d275c
|
|||
|
fa0b68d622
|
|||
|
5870541b96
|
|||
|
e5cccaca39
|
|||
|
c124492561
|
|||
|
279f952c99
|
|||
|
b1fdd211b4
|
|||
|
f60369d2c8
|
|||
|
c2044c5bd8
|
|||
|
ca6bb5319c
|
|||
|
cefe7981ee
|
|||
|
6dd9d2466e
|
|||
|
cba0228e70
|
|||
|
7021036a5c
|
|||
|
6d9f61620d
|
|||
|
3af7894995
|
|||
|
84161e1cad
|
|||
|
bd26f817d9
|
|||
|
e0fc85fa1c
|
|||
|
57aeaed91f
|
|||
|
2f19984f0c
|
|||
|
a873e5cbf1
|
|||
|
d1fba083b4
|
|||
|
b5dd740541
|
|||
|
5824c42e8b
|
|||
|
63b24c7e1e
|
|||
|
9519c8c477
|
|||
|
da45b31029
|
|||
|
653814ee70
|
|||
|
09483cfb7e
|
|||
|
586e16cc54
|
|||
|
80cd0888f3
|
|||
|
6b3be20a5f
|
|||
|
48e5d3bc82
|
|||
|
06ccae58a2
|
|||
|
ff09594801
|
|||
|
06ca713dc8
|
|||
|
a2dda25ab6
|
|||
|
d91c37d73a
|
|||
|
a5ef15e4ee
|
|||
|
968ea019a6
|
|||
|
b2f36073ec
|
|||
|
12797dde7f
|
|||
|
1ec04deb9c
|
|||
|
cc11fb8d3f
|
|||
|
49f4b71866
|
|||
|
e4cae37e4b
|
|||
|
59b79d5098
|
|||
|
39308cdc85
|
|||
|
a77dde0366
|
|||
|
1d3aa51fb6
|
|||
|
6f5290753d
|
|||
|
e8cf46465f
|
|||
|
676c8942de
|
|||
|
623fe61468
|
|||
|
ce00222537
|
13
.env.example
Normal file
@@ -0,0 +1,13 @@
|
||||
# LMS Translation API
|
||||
TRANSLATE_URL=http://127.0.0.1:1234/v1
|
||||
TRANSLATE_MODEL=plamo-2-translate
|
||||
|
||||
# Chat API
|
||||
CHAT_URL=http://127.0.0.1:1234/v1
|
||||
CHAT_MODEL=gpt-oss-20b
|
||||
CHAT_LANG=en
|
||||
# CHAT_MAX_TOKENS=2048
|
||||
|
||||
# Character/system prompt (choose one)
|
||||
# CHAT_SYSTEM="You are ai, a friendly AI assistant."
|
||||
# CHAT_SYSTEM_FILE=./character.txt
|
||||
36
.github/workflows/cf-pages.yml
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
name: Deploy to Cloudflare Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
deployments: write
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Build content from ATProto
|
||||
run: npm run build
|
||||
|
||||
- name: Deploy to Cloudflare Pages
|
||||
uses: cloudflare/pages-action@v1
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
projectName: ${{ secrets.CLOUDFLARE_PROJECT_NAME }}
|
||||
directory: dist
|
||||
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
1
.gitignore
vendored
@@ -7,3 +7,4 @@ node_modules
|
||||
package-lock.json
|
||||
Cargo.lock
|
||||
.env
|
||||
.mcp.json
|
||||
|
||||
25
Cargo.toml
Normal file
@@ -0,0 +1,25 @@
|
||||
[package]
|
||||
name = "ailog"
|
||||
version = "0.0.1"
|
||||
edition = "2021"
|
||||
description = "ATProto blog CLI"
|
||||
authors = ["syui"]
|
||||
homepage = "https://syui.ai"
|
||||
repository = "https://git.syui.ai/ai/log"
|
||||
|
||||
[[bin]]
|
||||
name = "ailog"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5", features = ["derive"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
|
||||
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
|
||||
anyhow = "1.0"
|
||||
dirs = "5.0"
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
rand = "0.8"
|
||||
dotenvy = "0.15"
|
||||
rustyline = "15"
|
||||
48
lexicons/ai.syui.at.link.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.at.link",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"description": "Record containing links to external service profiles.",
|
||||
"key": "literal:self",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["links", "createdAt"],
|
||||
"properties": {
|
||||
"links": {
|
||||
"type": "array",
|
||||
"items": { "type": "ref", "ref": "#linkItem" },
|
||||
"description": "Array of external service links."
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string",
|
||||
"format": "datetime",
|
||||
"description": "Client-declared timestamp when this record was created."
|
||||
},
|
||||
"updatedAt": {
|
||||
"type": "string",
|
||||
"format": "datetime",
|
||||
"description": "Client-declared timestamp when this record was last updated."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"linkItem": {
|
||||
"type": "object",
|
||||
"required": ["service", "username"],
|
||||
"properties": {
|
||||
"service": {
|
||||
"type": "string",
|
||||
"knownValues": ["github", "youtube", "x"],
|
||||
"description": "Service identifier."
|
||||
},
|
||||
"username": {
|
||||
"type": "string",
|
||||
"maxLength": 300,
|
||||
"description": "Username or ID on the service."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
71
lexicons/ai.syui.card.admin.json
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"$type": "com.atproto.lexicon.schema",
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.card.admin",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"key": "literal:self",
|
||||
"description": "Card game configuration and master data (admin only)",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["gacha", "card", "createdAt", "updatedAt"],
|
||||
"properties": {
|
||||
"gacha": {
|
||||
"type": "object",
|
||||
"required": ["pickup", "rate", "pool"],
|
||||
"properties": {
|
||||
"pickup": { "type": "integer", "description": "Pickup card ID" },
|
||||
"rate": {
|
||||
"type": "object",
|
||||
"required": ["pickup", "rare"],
|
||||
"properties": {
|
||||
"pickup": { "type": "integer", "description": "1/n for pickup rate (100 = 1%)" },
|
||||
"rare": { "type": "integer", "description": "1/n for rare:1 rate (10 = 10%), rare:2 = 1/(n*10), rare:3 = 1/(n*100)" }
|
||||
}
|
||||
},
|
||||
"pool": {
|
||||
"type": "array",
|
||||
"description": "Card IDs available in gacha pool",
|
||||
"items": { "type": "integer" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"type": "array",
|
||||
"description": "Card master data",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "character", "name", "text", "cp", "effect"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Card ID" },
|
||||
"character": { "type": "integer", "description": "Associated character ID" },
|
||||
"name": {
|
||||
"type": "object",
|
||||
"required": ["ja", "en"],
|
||||
"properties": {
|
||||
"ja": { "type": "string" },
|
||||
"en": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"text": {
|
||||
"type": "object",
|
||||
"required": ["ja", "en"],
|
||||
"properties": {
|
||||
"ja": { "type": "string" },
|
||||
"en": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"cp": { "type": "string", "description": "CP type (status, time, damage)" },
|
||||
"effect": { "type": "string", "description": "Effect type (status, fly, mode, damage)" },
|
||||
"key": { "type": "string", "description": "Key binding (R1, L1, Y, X, etc.)" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"createdAt": { "type": "string", "format": "datetime" },
|
||||
"updatedAt": { "type": "string", "format": "datetime" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
52
lexicons/ai.syui.card.old.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.card.old",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"key": "literal:self",
|
||||
"description": "Migrated card data from api.syui.ai",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["user", "card", "migratedAt"],
|
||||
"properties": {
|
||||
"user": {
|
||||
"type": "object",
|
||||
"required": ["username"],
|
||||
"properties": {
|
||||
"username": { "type": "string" },
|
||||
"did": { "type": "string" },
|
||||
"aiten": { "type": "integer" },
|
||||
"fav": { "type": "integer" },
|
||||
"coin": { "type": "integer" },
|
||||
"planet": { "type": "integer" },
|
||||
"createdAt": { "type": "string", "format": "datetime" },
|
||||
"updatedAt": { "type": "string", "format": "datetime" }
|
||||
}
|
||||
},
|
||||
"card": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "cp", "rare", "cid", "unique"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Card type ID" },
|
||||
"cp": { "type": "integer", "description": "Card power" },
|
||||
"rare": { "type": "integer", "description": "Rarity level" },
|
||||
"cid": { "type": "string", "description": "Unique card instance ID" },
|
||||
"unique": { "type": "boolean", "description": "Unique card flag" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"checksum": {
|
||||
"type": "string"
|
||||
},
|
||||
"migratedAt": {
|
||||
"type": "string",
|
||||
"format": "datetime"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
34
lexicons/ai.syui.card.user.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"$type": "com.atproto.lexicon.schema",
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.card.user",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"key": "literal:self",
|
||||
"description": "User card collection",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["card", "createdAt", "updatedAt"],
|
||||
"properties": {
|
||||
"card": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "cp", "rare", "cid", "unique"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Card type ID" },
|
||||
"cp": { "type": "integer", "description": "Card power" },
|
||||
"rare": { "type": "integer", "description": "Rarity level" },
|
||||
"cid": { "type": "string", "description": "Unique card instance ID" },
|
||||
"unique": { "type": "boolean", "description": "Unique card flag" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"createdAt": { "type": "string", "format": "datetime" },
|
||||
"updatedAt": { "type": "string", "format": "datetime" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
72
lexicons/ai.syui.log.chat.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.log.chat",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"description": "Record containing a chat message in a conversation.",
|
||||
"key": "tid",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["content", "author", "createdAt"],
|
||||
"properties": {
|
||||
"content": {
|
||||
"type": "string",
|
||||
"maxLength": 100000,
|
||||
"maxGraphemes": 10000,
|
||||
"description": "The content of the message."
|
||||
},
|
||||
"author": {
|
||||
"type": "string",
|
||||
"format": "did",
|
||||
"description": "DID of the message author."
|
||||
},
|
||||
"root": {
|
||||
"type": "string",
|
||||
"format": "at-uri",
|
||||
"description": "AT-URI of the root message in the thread."
|
||||
},
|
||||
"parent": {
|
||||
"type": "string",
|
||||
"format": "at-uri",
|
||||
"description": "AT-URI of the parent message being replied to."
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string",
|
||||
"format": "datetime",
|
||||
"description": "Client-declared timestamp when this message was created."
|
||||
},
|
||||
"lang": {
|
||||
"type": "string",
|
||||
"maxLength": 10,
|
||||
"description": "Language code of the original content (e.g., 'ja', 'en')."
|
||||
},
|
||||
"translations": {
|
||||
"type": "ref",
|
||||
"ref": "#translationMap",
|
||||
"description": "Translations of the message in other languages."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"translationMap": {
|
||||
"type": "object",
|
||||
"description": "Map of language codes to translations.",
|
||||
"properties": {
|
||||
"en": { "type": "ref", "ref": "#translation" },
|
||||
"ja": { "type": "ref", "ref": "#translation" }
|
||||
}
|
||||
},
|
||||
"translation": {
|
||||
"type": "object",
|
||||
"description": "A translation of a chat message.",
|
||||
"properties": {
|
||||
"content": {
|
||||
"type": "string",
|
||||
"maxLength": 100000,
|
||||
"maxGraphemes": 10000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
68
lexicons/ai.syui.log.post.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.log.post",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"description": "Record containing a blog post.",
|
||||
"key": "tid",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["title", "content", "createdAt"],
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"maxLength": 3000,
|
||||
"maxGraphemes": 300,
|
||||
"description": "The title of the post."
|
||||
},
|
||||
"content": {
|
||||
"type": "string",
|
||||
"maxLength": 1000000,
|
||||
"maxGraphemes": 100000,
|
||||
"description": "The content of the post (markdown)."
|
||||
},
|
||||
"createdAt": {
|
||||
"type": "string",
|
||||
"format": "datetime",
|
||||
"description": "Client-declared timestamp when this post was originally created."
|
||||
},
|
||||
"lang": {
|
||||
"type": "string",
|
||||
"maxLength": 10,
|
||||
"description": "Language code of the original content (e.g., 'ja', 'en')."
|
||||
},
|
||||
"translations": {
|
||||
"type": "ref",
|
||||
"ref": "#translationMap",
|
||||
"description": "Translations of the post in other languages."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"translationMap": {
|
||||
"type": "object",
|
||||
"description": "Map of language codes to translations.",
|
||||
"properties": {
|
||||
"en": { "type": "ref", "ref": "#translation" },
|
||||
"ja": { "type": "ref", "ref": "#translation" }
|
||||
}
|
||||
},
|
||||
"translation": {
|
||||
"type": "object",
|
||||
"description": "A translation of a post.",
|
||||
"properties": {
|
||||
"title": {
|
||||
"type": "string",
|
||||
"maxLength": 3000,
|
||||
"maxGraphemes": 300
|
||||
},
|
||||
"content": {
|
||||
"type": "string",
|
||||
"maxLength": 1000000,
|
||||
"maxGraphemes": 100000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
99
lexicons/ai.syui.rse.admin.json
Normal file
@@ -0,0 +1,99 @@
|
||||
{
|
||||
"$type": "com.atproto.lexicon.schema",
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.rse.admin",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"key": "literal:self",
|
||||
"description": "RSE admin configuration - abilities, characters, systems and collections",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["ability", "createdAt", "updatedAt"],
|
||||
"properties": {
|
||||
"ability": {
|
||||
"type": "array",
|
||||
"description": "Ability/attribute definitions",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "kind"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Ability ID" },
|
||||
"name": { "type": "string", "description": "Ability name (ai, quark, neutron, atom, sun)" },
|
||||
"kind": { "type": "string", "description": "Attribute type (consciousness, matter)" },
|
||||
"color": { "type": "string", "description": "Color code (e.g., #ffd700)" },
|
||||
"level": { "type": "integer", "description": "Hierarchy level (0=fundamental)" },
|
||||
"relation": { "type": "array", "items": { "type": "integer" }, "description": "Advantage IDs" },
|
||||
"weakness": { "type": "array", "items": { "type": "integer" }, "description": "Weakness IDs" },
|
||||
"multiplier": { "type": "integer", "description": "Damage multiplier percent (e.g., 150 = 1.5x)" },
|
||||
"phantom": { "type": "boolean", "description": "Whether this ability is phantom/lost" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"type": "array",
|
||||
"description": "Character definitions",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "ability", "mode"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Character ID" },
|
||||
"name": { "type": "string", "description": "Character name" },
|
||||
"ability": { "type": "integer", "description": "Ability ID reference" },
|
||||
"mode": { "type": "integer", "description": "Character mode" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"type": "array",
|
||||
"description": "System definitions",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "domain"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "System ID" },
|
||||
"name": { "type": "string", "description": "System name" },
|
||||
"domain": { "type": "string", "description": "System domain (ability, unique, account, planet, origin)" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"type": "array",
|
||||
"description": "Item definitions",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "text"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Item ID" },
|
||||
"name": { "type": "string", "description": "Item name" },
|
||||
"text": {
|
||||
"type": "object",
|
||||
"description": "Item description (localized)",
|
||||
"properties": {
|
||||
"en": { "type": "string", "description": "English text" },
|
||||
"ja": { "type": "string", "description": "Japanese text" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"collection": {
|
||||
"type": "array",
|
||||
"description": "ATProto collection definitions",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "nsid", "name"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Collection ID" },
|
||||
"nsid": { "type": "string", "description": "Namespaced identifier (e.g., ai.syui.card)" },
|
||||
"name": { "type": "string", "description": "Collection short name" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"createdAt": { "type": "string", "format": "datetime" },
|
||||
"updatedAt": { "type": "string", "format": "datetime" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
48
lexicons/ai.syui.rse.user.json
Normal file
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"$type": "com.atproto.lexicon.schema",
|
||||
"lexicon": 1,
|
||||
"id": "ai.syui.rse.user",
|
||||
"defs": {
|
||||
"main": {
|
||||
"type": "record",
|
||||
"key": "literal:self",
|
||||
"description": "User character and item collection",
|
||||
"record": {
|
||||
"type": "object",
|
||||
"required": ["character", "item", "createdAt", "updatedAt"],
|
||||
"properties": {
|
||||
"character": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "cp", "rare", "cid", "unique"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Character type ID" },
|
||||
"cp": { "type": "integer", "description": "Character power" },
|
||||
"rare": { "type": "integer", "description": "Rarity level" },
|
||||
"cid": { "type": "string", "description": "Unique character instance ID" },
|
||||
"unique": { "type": "boolean", "description": "Unique character flag" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"item": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "cp", "rare", "cid", "unique"],
|
||||
"properties": {
|
||||
"id": { "type": "integer", "description": "Item type ID" },
|
||||
"cp": { "type": "integer", "description": "Item power" },
|
||||
"rare": { "type": "integer", "description": "Rarity level" },
|
||||
"cid": { "type": "string", "description": "Unique item instance ID" },
|
||||
"unique": { "type": "boolean", "description": "Unique item flag" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"createdAt": { "type": "string", "format": "datetime" },
|
||||
"updatedAt": { "type": "string", "format": "datetime" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,14 +4,16 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"prebuild": "ailog index 2>/dev/null || true",
|
||||
"build": "tsc && vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@atproto/api": "^0.15.12",
|
||||
"@atproto/lexicon": "^0.6.0",
|
||||
"@atproto/oauth-client-browser": "^0.3.19",
|
||||
"marked": "^15.0.6",
|
||||
"highlight.js": "^11.11.1"
|
||||
"highlight.js": "^11.11.1",
|
||||
"marked": "^15.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.3",
|
||||
|
||||
BIN
public/card/0.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/card/1.webp
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
public/card/10.webp
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
public/card/100.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/101.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/card/102.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/card/103.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/card/104.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/card/105.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/card/106.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/card/107.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/card/108.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/card/109.webp
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/card/11.webp
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
public/card/110.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/card/111.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/card/112.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
public/card/113.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/card/114.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/card/115.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/card/116.webp
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
public/card/117.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/card/118.webp
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/card/119.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/card/12.webp
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/card/120.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/121.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/card/122.webp
Normal file
|
After Width: | Height: | Size: 124 KiB |
BIN
public/card/123.webp
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
public/card/124.webp
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
public/card/125.webp
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/card/126.webp
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
public/card/127.webp
Normal file
|
After Width: | Height: | Size: 221 KiB |
BIN
public/card/128.webp
Normal file
|
After Width: | Height: | Size: 166 KiB |
BIN
public/card/129.webp
Normal file
|
After Width: | Height: | Size: 112 KiB |
BIN
public/card/13.webp
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
public/card/130.webp
Normal file
|
After Width: | Height: | Size: 205 KiB |
BIN
public/card/131.webp
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
public/card/132.webp
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
public/card/133.webp
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
public/card/134.webp
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/card/14.webp
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
public/card/15.webp
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/card/16.webp
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/card/17.webp
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
public/card/18.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
public/card/19.webp
Normal file
|
After Width: | Height: | Size: 62 KiB |
BIN
public/card/2.webp
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
public/card/20.webp
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/card/200.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/201.webp
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
public/card/21.webp
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/card/22.webp
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/card/23.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/card/24.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/card/25.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/card/26.webp
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/card/27.webp
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
public/card/28.webp
Normal file
|
After Width: | Height: | Size: 97 KiB |
BIN
public/card/29.webp
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/card/3.webp
Normal file
|
After Width: | Height: | Size: 116 KiB |
BIN
public/card/30.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/300.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/301.webp
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
public/card/31.webp
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/card/32.webp
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/card/33.webp
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
public/card/34.webp
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/card/35.webp
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
public/card/36.webp
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
public/card/37.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/38.webp
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
public/card/39.webp
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
public/card/4.webp
Normal file
|
After Width: | Height: | Size: 119 KiB |
BIN
public/card/40.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/card/41.webp
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/card/42.webp
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
public/card/43.webp
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/card/44.webp
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
public/card/45.webp
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
public/card/46.webp
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
public/card/47.webp
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
public/card/48.webp
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
public/card/49.webp
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
public/card/5.webp
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/card/50.webp
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
public/card/51.webp
Normal file
|
After Width: | Height: | Size: 44 KiB |