This repository has been archived on 2026-07-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
KnowledgeBase/files/custom/Espo/Modules/KnowledgeBase/Resources/routes.json
T
chaim 8a4f16a50f feat(KB): v0.8.0 — bulk upload, AI classifier, labels, tool kind
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>
2026-04-25 20:18:34 +00:00

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"
}
}
]