8a4f16a50f
v0.8.0 ships the four-feature bundle from the v0.8.0 plan plus
mid-flight fixes discovered when batch-testing 5 circulars.
New capabilities:
* Multi-file batch upload. AI classifier (Sonnet via ai-gateway)
reads the first 3 pages of each PDF and proposes kind / title /
identifier / labels / dates / summary. User reviews + edits per
card before committing. Two-phase ingest: classify →
awaiting_review → embed.
* 'tool' kind for academic assessment instruments (GMFCS, MACS).
* Labels (kb_label / kb_source_label) for sub-topic navigation;
classifier proposes shared label slugs so the graph builds
itself.
* 'תוויות' admin sub-section for merge/delete of unused labels.
* NEW 'ממתינים לאישור' panel: lists batches still in
awaiting_review with status counters so a hard-refreshed user
can resume their review — closes the RAM-only _activeBatch gap.
Mid-flight fixes folded in:
* classifier timeout 45s→90s, concurrency 5→2. ai-gateway
serializes through a single Claude OAuth session; with conc=5,
jobs 4-5 of a 5-file batch consistently timed out.
* labels schema array-of-string → comma-separated string. Claude
via ai-gateway returned [{}, {}, {}] for items:{type:"string"}.
_normalize accepts both shapes defensively.
Backfilled ai_classified_at + description + 1-3 labels for the 10
sources ingested in earlier sessions so the filter UX is uniform.
Backend (shira-hermes) in commits 0d678da (Phase 6) + bb23b8a
(this session's fixes).
Refs Task Master #20
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
203 lines
4.8 KiB
JSON
203 lines
4.8 KiB
JSON
[
|
|
{
|
|
"route": "/KnowledgeBase/action/topics",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "topics"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/search",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "search"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/sources",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "sources"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/chunks",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "chunks"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/ask",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "ask"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/upload",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "upload"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/jobs",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "jobs"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/job",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "job"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/adminSources",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "adminSources"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/updateSource",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "updateSource"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/deleteSource",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "deleteSource"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/reingestSource",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "reingestSource"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/adminTopics",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "adminTopics"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/createTopic",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "createTopic"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/updateTopic",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "updateTopic"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/deleteTopic",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "deleteTopic"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/uploadBatch",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "uploadBatch"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/batch",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "batch"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/pendingBatches",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "pendingBatches"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/commitJob",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "commitJob"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/discardJob",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "discardJob"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/labels",
|
|
"method": "get",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "labels"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/createLabel",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "createLabel"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/mergeLabels",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "mergeLabels"
|
|
}
|
|
},
|
|
{
|
|
"route": "/KnowledgeBase/action/deleteLabel",
|
|
"method": "post",
|
|
"params": {
|
|
"controller": "KnowledgeBase",
|
|
"action": "deleteLabel"
|
|
}
|
|
}
|
|
]
|