{"system":"DNA OS","schema_version":"2.0","description":"Registry-Driven ERP Platform — event-centric, AI-extensible","design_shift":"2026-07: Document-centric → Relationship + Event-centric","generated_at":"2026-07-14T00:24:03.509Z","_links":{"self":{"href":"/observer.json","type":"application/json"},"observer_html":{"href":"/observer","type":"text/html","note":"Human-readable version"},"spec":{"href":"/api/v1/spec","type":"application/json","note":"OpenAI function-calling format — load this to know all callable tools"},"query":{"href":"/api/v1/query","method":"POST","auth":"Header: X-DNA-Token","note":"Send commands here"},"modules":{"href":"/api/v1/modules","type":"application/json"},"workflows":{"href":"/api/v1/workflows","type":"application/json"},"constitution":{"href":"/api/v1/constitution","type":"application/json"},"capabilities":{"href":"/api/v1/capabilities","type":"application/json"},"drivers":{"href":"/api/v1/drivers","type":"application/json"},"tokens_ui":{"href":"/admin/api-tokens","note":"Generate X-DNA-Token here (requires admin login)"}},"stats":{"total_modules":364,"total_commands":63,"modules_by_layer":{"api":41,"app":90,"config":3,"scripts":2,"supabase":32,"ui":31,"middleware.ts":1,"cognitive":37,"core":18,"engines":36,"gateway":3,"plugins":27,"presenter":5,"services":10,"registry":17,"components":11},"total_drivers":11,"total_domains":12,"total_workflows":3,"total_document_types":4},"architecture_pipeline":[{"id":"Input Gateway","code":"V1-Input","path":"lib/v1-input/","role":"Receives all events (LINE, HTTP, Webhook) and converts to JSON. Cannot write DB."},{"id":"Business Rules","code":"V2-Rules","path":"engines/validation/","role":"Dispatcher + Validation + Business Rules. Every command must pass through here."},{"id":"Business Engine","code":"V3-Engines","path":"engines/","role":"Computes business logic (pricing, debt, tax, timeline). No hardcode. No DB writes."},{"id":"AI Interpreter","code":"V4-AI","path":"services/ai/","role":"Translates natural language to commands only. Cannot make decisions or write DB."},{"id":"Presentation Layer","code":"V5-Presenter","path":"presenter/","role":"Formats output for display. Cannot import Business Engine directly."},{"id":"Execution Layer","code":"V6-Executor","path":"gateway/","role":"Single gate for DB writes, LINE messages, and external service calls."},{"id":"Decision Pipeline","code":"Cognitive","path":"cognitive/","role":"Central pipeline: Intent → Plan → Execute → Reflect"},{"id":"Security & Auth","code":"Middleware","path":"services/middleware/","role":"requireAuth + Sanitize — enforced on every API route"}],"constitution":{"version":1,"source":"/api/v1/constitution","rules":[{"id":1,"rule":"ห้าม hardcode ข้อมูลธุรกิจ — ทุกค่าจาก DB via app_configs"},{"id":2,"rule":"ห้าม mock/fake/demo data ใน source code"},{"id":72,"rule":"ทุก write ต้อง confirmed จากมนุษย์ (Rule 72)"},{"id":73,"rule":"AI ห้ามเปลี่ยนสถานะการเงิน (Rule 73)"},{"id":83,"rule":"AI ห้ามยืนยัน transaction ที่ยังไม่ผ่าน Rule Engine (Rule 83)"},{"id":10,"rule":"ทุก API route ต้องมี requireAuth"},{"id":11,"rule":"ทุก Module ต้อง register ใน module-registry.json"},{"id":12,"rule":"ทุก Command ต้อง register ใน command-registry.json"},{"id":13,"rule":"Shadow Command (ไม่อยู่ใน registry) ถูกปฏิเสธเสมอ"},{"id":14,"rule":"V2-V5 ห้าม import @supabase/supabase-js — เฉพาะ V6"},{"id":15,"rule":"V5 ห้าม import จาก V3 โดยตรง"}]},"commands_summary":[{"name":"debt.list","description_th":"แสดงรายการหนี้ที่ยังค้างชำระ (สถานะ OPEN)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"InvoiceDebt[]"},{"name":"debt.all","description_th":"แสดงรายการหนี้ทั้งหมด ทุกสถานะ","layer":"cognitive","requires_confirmation":false,"input":{},"output":"InvoiceDebt[]"},{"name":"debt.trackings","description_th":"แสดงรายการติดตามหนี้ทั้งหมด (จากตาราง debt_trackings)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"DebtTracking[]"},{"name":"debt.create","description_th":"สร้างรายการติดตามหนี้ใหม่ — ต้องผ่านขั้นตอน preview → execute","layer":"core","requires_confirmation":true,"input":{"customer_name":"string","principal_amount":"number","fee_rate?":"number","interest_start_at?":"string"},"output":"DebtTracking"},{"name":"debt.find","description_th":"ค้นหาลูกหนี้ตามชื่อ (แบบเทียบเคียงความคล้าย)","layer":"engines","requires_confirmation":false,"input":{"keyword":"string"},"output":"FindResult"},{"name":"invoice.list","description_th":"แสดงรายการใบแจ้งหนี้ (invoice) ทั้งหมด","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"invoice.latest","description_th":"แสดงใบแจ้งหนี้ (invoice) ใบสุดท้าย","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document"},{"name":"invoice.create","description_th":"สร้างใบแจ้งหนี้ — ส่งต่อไปยัง Action API (ตามกฎข้อที่ 71)","layer":"cognitive","requires_confirmation":true,"input":{},"output":"Error"},{"name":"invoice.find","description_th":"ค้นหาใบแจ้งหนี้ตามเลขที่เอกสารหรือชื่อลูกค้า","layer":"engines","requires_confirmation":false,"input":{"keyword":"string"},"output":"FindResult"},{"name":"document.list","description_th":"แสดงรายการเอกสารทุกประเภท","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"document.boq","description_th":"แสดงรายการใบเสนอราคา (BOQ)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"document.po","description_th":"แสดงรายการใบสั่งซื้อ (PO)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"document.do","description_th":"แสดงรายการใบส่งของ (DO)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"document.receipt","description_th":"แสดงรายการใบเสร็จรับเงิน","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Document[]"},{"name":"document.create","description_th":"สร้างเอกสารใหม่ — ต้องผ่านขั้นตอน preview → execute","layer":"core","requires_confirmation":true,"input":{"document_type":"string","party_name":"string","net_amount":"number","issue_date?":"string","note?":"string"},"output":"Document"},{"name":"draft.list","description_th":"แสดงรายการร่างเอกสารที่มาจาก LINE และกำลังรอการอนุมัติ","layer":"cognitive","requires_confirmation":false,"input":{},"output":"LineDraftDocument[]"},{"name":"job.list","description_th":"แสดงรายการงานทั้งหมด","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Job[]"},{"name":"job.active","description_th":"แสดงรายการงานที่กำลังดำเนินการ (สถานะ IN_PROGRESS)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Job[]"},{"name":"job.assign","description_th":"สั่งงานคนขับ — AI ช่วยแปลภาษาพูดเป็นคำสั่งที่ระบบเข้าใจ","layer":"services","requires_confirmation":true,"input":{"job_id":"string","driver":"string"},"output":"BridgeResult"},{"name":"job.track","description_th":"ติดตามสถานะของงาน","layer":"services","requires_confirmation":false,"input":{"job_id":"string"},"output":"BridgeResult"},{"name":"partner.list","description_th":"แสดงรายการคู่ค้าทั้งหมด (ลูกค้าและผู้ขาย)","layer":"cognitive","requires_confirmation":false,"input":{},"output":"Partner[]"},{"name":"partner.find","description_th":"ค้นหาคู่ค้าตามชื่อ, เบอร์โทร, หรือรหัส","layer":"engines","requires_confirmation":false,"input":{"keyword":"string"},"output":"FindResult"},{"name":"material.list","description_th":"แสดงรายการประเภทวัสดุทั้งหมด","layer":"cognitive","requires_confirmation":false,"input":{},"output":"MaterialType[]"},{"name":"pit.find","description_th":"ค้นหาแหล่งวัสดุ เช่น บ่อดิน, โรงโม่, หรือท่าทราย","layer":"engines","requires_confirmation":false,"input":{"keyword":"string"},"output":"FindResult"},{"name":"drive.open","description_th":"เปิดโฟลเดอร์ Google Drive หลักของระบบ","layer":"cognitive","requires_confirmation":false,"input":{},"output":"CommandResult"},{"name":"payment","description_th":"บันทึกการชำระหนี้ — ต้องผ่านขั้นตอน preview → execute และมีการยืนยันตัวตน","layer":"engines","requires_confirmation":true,"input":{"invoice_debt_id":"string","payment_amount":"number","note?":"string"},"output":"ActionResponse"},{"name":"pay.preview","description_th":"แสดงตัวอย่างข้อมูลก่อนยืนยันการชำระเงิน","layer":"services","requires_confirmation":false,"input":{"invoice_id":"string"},"output":"BridgeResult"},{"name":"pay.list","description_th":"ดูประวัติรายการชำระเงิน (จากตาราง events)","layer":"services","requires_confirmation":false,"input":{"date?":"string"},"output":"BridgeResult"},{"name":"doc.list","description_th":"ดูรายการเอกสาร (เป็นชื่อเรียกแทน document.list สำหรับ AI)","layer":"services","requires_confirmation":false,"input":{"type?":"string"},"output":"BridgeResult"},{"name":"doc.get","description_th":"ดูรายละเอียดเอกสารตามหมายเลขที่ระบุ","layer":"services","requires_confirmation":false,"input":{"id":"string"},"output":"BridgeResult"},{"name":"quote.calc","description_th":"คำนวณราคาเสนอขาย (ผ่าน AI Bridge)","layer":"services","requires_confirmation":false,"input":{"quantity?":"number","material?":"string"},"output":"BridgeResult"},{"name":"business.load_rules","description_th":"โหลดกฎทางธุรกิจทั้งหมดจากตาราง app_configs","layer":"engines","requires_confirmation":false,"input":{},"output":"{ ok: boolean, rules: RulesConfig, count: number }"},{"name":"business.calculate_price","description_th":"คำนวณราคาขนส่งวัสดุ (รวมต้นทุน, ส่วนเพิ่ม, ค่าน้ำมัน, และค่าแรง)","layer":"engines","requires_confirmation":false,"input":{"distance_km":"number","quantity":"number","material_price":"number"},"output":"PriceResult"},{"name":"business.calculate_debt","description_th":"คำนวณยอดหนี้แบบครบวงจร (รวมเงินต้น, ดอกเบี้ย, และค่าทวงถาม)","layer":"engines","requires_confirmation":false,"input":{"principal":"number","fee_rate":"number","interest_rate":"number","due_date":"string","paid_amount?":"number"},"output":"DebtCalcResult"},{"name":"business.calculate_tax","description_th":"คำนวณภาษีมูลค่าเพิ่ม (VAT) และภาษีหัก ณ ที่จ่าย","layer":"engines","requires_confirmation":false,"input":{"amount":"number","vat_rate?":"number","withholding_rate?":"number"},"output":"TaxResult"},{"name":"registry.load","description_th":"โหลดทะเบียนข้อมูลทั้งหมดของระบบ (modules, drivers, events)","layer":"shared","requires_confirmation":false,"input":{},"output":"{ modules: string[], drivers: string[], events: string[], loaded: boolean }"},{"name":"registry.resolve","description_th":"ค้นหาและคืนค่าโมดูลจากทะเบียนข้อมูล","layer":"shared","requires_confirmation":false,"input":{"moduleId":"string"},"output":"{ found: boolean, module: unknown }"},{"name":"registry.list_modules","description_th":"แสดงรายชื่อโมดูลทั้งหมดที่ลงทะเบียนไว้","layer":"shared","requires_confirmation":false,"input":{},"output":"string[]"},{"name":"registry.list_drivers","description_th":"แสดงรายชื่อไดรเวอร์ทั้งหมดที่ลงทะเบียนไว้","layer":"shared","requires_confirmation":false,"input":{},"output":"string[]"},{"name":"registry.list_events","description_th":"แสดงรายชื่อเหตุการณ์ (events) ทั้งหมดที่ลงทะเบียนไว้","layer":"shared","requires_confirmation":false,"input":{},"output":"string[]"},{"name":"registry.get_module","description_th":"ดึงข้อมูลโมดูลจากทะเบียนตาม ID ที่ระบุ","layer":"shared","requires_confirmation":false,"input":{"moduleId":"string"},"output":"unknown"},{"name":"registry.get_driver","description_th":"ดึงข้อมูลไดรเวอร์จากทะเบียนตามชื่อที่ระบุ","layer":"shared","requires_confirmation":false,"input":{"name":"string"},"output":"unknown"},{"name":"registry.get_service","description_th":"ดึงข้อมูลเซอร์วิสจากทะเบียนตามชื่อที่ระบุ","layer":"shared","requires_confirmation":false,"input":{"name":"string"},"output":"unknown"},{"name":"registry.get_schema","description_th":"ดึงข้อมูล Schema จากทะเบียนตามชื่อที่ระบุ","layer":"shared","requires_confirmation":false,"input":{"name":"string"},"output":"unknown"},{"name":"events.recent","description_th":"ดึงประวัติเหตุการณ์ล่าสุด (ค่าเริ่มต้น 20 รายการ)","layer":"shared","requires_confirmation":false,"input":{"count?":"number"},"output":"RuntimeEvent[]"},{"name":"events.by_trace","description_th":"ดึงประวัติเหตุการณ์ตามรหัสติดตาม (Trace ID)","layer":"shared","requires_confirmation":false,"input":{"traceId":"string"},"output":"RuntimeEvent[]"},{"name":"ai.translate","description_th":"แปลภาษาไทยเป็นเจตนา (Intent), ข้อมูล (Entity), และคำสั่ง (Command) ที่ระบบรู้จัก","layer":"services","requires_confirmation":false,"input":{"text":"string"},"output":"TranslationResult"},{"name":"computer.app.launch","description_th":"สั่งเปิดโปรแกรมบน macOS (เช่น LINE, Chrome, VS Code)","layer":"core","requires_confirmation":false,"input":{"app":"string"},"output":"WorkflowResult"},{"name":"computer.chat.read","description_th":"อ่านข้อความแชทจากโปรแกรมที่กำลังใช้งานอยู่","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.chat.summarize","description_th":"สรุปเนื้อหาจากแชทหรือข้อความที่อ่าน","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.db.search_partner","description_th":"ค้นหาคู่ค้า (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.db.search_debt","description_th":"ค้นหาหนี้ (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.db.load_invoice","description_th":"โหลดข้อมูลใบแจ้งหนี้ (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.calc.price","description_th":"คำนวณราคา (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.calc.distance","description_th":"ตรวจสอบระยะทาง (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.doc.generate","description_th":"สร้างเอกสาร (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":true,"input":{},"output":"WorkflowResult"},{"name":"computer.doc.preview","description_th":"ดูตัวอย่างเอกสาร (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":false,"input":{},"output":"WorkflowResult"},{"name":"computer.line.send","description_th":"ส่งข้อความ LINE (ผ่านการควบคุมคอมพิวเตอร์)","layer":"core","requires_confirmation":true,"input":{"contact":"string","message":"string"},"output":"WorkflowResult"},{"name":"computer.db.register","description_th":"ลงทะเบียนคู่ค้าใหม่ (ทำงานตามขั้นตอน workflow)","layer":"core","requires_confirmation":true,"input":{},"output":"WorkflowResult"},{"name":"computer.email.send","description_th":"ส่งอีเมลผ่านโปรแกรม Apple Mail","layer":"core","requires_confirmation":true,"input":{"to":"string","subject":"string","body":"string"},"output":"WorkflowResult"},{"name":"computer.dev.deploy","description_th":"สั่ง Deploy ระบบเวอร์ชันใหม่ผ่าน Terminal (vercel --prod)","layer":"core","requires_confirmation":true,"input":{},"output":"WorkflowResult"},{"name":"computer.dev.push","description_th":"สั่ง Push โค้ดล่าสุดผ่านโปรแกรม GitHub Desktop","layer":"core","requires_confirmation":true,"input":{},"output":"WorkflowResult"},{"name":"computer.system.status","description_th":"ตรวจสอบสถานะของทุกโปรแกรมที่ลงทะเบียนไว้","layer":"core","requires_confirmation":false,"input":{},"output":"Record<string, AppStatus>"}],"business_domains":{"sales":{"label":"งานขาย / เสนอราคา","status":"covered","modules":["engines/pricing","engines/cost","engines/distance","engines/fuel","engines/capacity","engines/time"],"commands":["business.calculate_price","calc.price","calc.distance"],"workflows":["doc.generate","doc.preview"],"documents":["quotation","invoice"]},"purchase":{"label":"งานจัดซื้อ","status":"covered","modules":["cognitive/partners","engines/validation/resolver"],"commands":["partner.list","partner.find"],"workflows":["db.search_partner"],"documents":["purchase-order"]},"debt":{"label":"ลูกหนี้ / ติดตามหนี้","status":"covered","modules":["engines/debt/engine","engines/debt/interest","engines/debt/collection","engines/debt/status","engines/debt/transition","engines/debt/scheduler","engines/debt/calculator","cognitive/debts"],"commands":["debt.list","debt.all","debt.trackings","debt.create","business.calculate_debt"],"workflows":["db.search_debt"],"documents":["invoice"]},"tax":{"label":"ภาษี / VAT / หัก ณ ที่จ่าย","status":"covered","modules":["engines/tax"],"commands":["business.calculate_tax"],"workflows":[],"documents":["receipt"]},"transport":{"label":"ขนส่ง / จัดส่งวัสดุ","status":"covered","modules":["engines/distance","engines/fuel","engines/capacity","engines/time","engines/cost"],"commands":["job.list","job.active"],"workflows":["calc.distance"],"documents":["delivery-order"]},"document":{"label":"เอกสาร / ใบเสนอราคา / ใบแจ้งหนี้","status":"covered","modules":["engines/documents/engine","cognitive/documents","cognitive/invoices"],"commands":["document.list","document.create","invoice.list","invoice.create","receipt.create"],"workflows":["doc.generate","doc.preview"],"documents":["quotation","invoice","receipt","boq","delivery-order","purchase-order"]},"communication":{"label":"LINE / Email / แจ้งเตือน","status":"covered","modules":["cognitive/line","plugins/drivers/line"],"commands":["line.send","line.read"],"workflows":["line.send","chat.read","email.send"],"documents":[]},"inventory":{"label":"คลังสินค้า / สต๊อกวัสดุ","status":"not_covered","modules":[],"commands":[],"workflows":[],"documents":[],"gap":"ยังไม่มี module สำหรับจัดการคลังสินค้า / สต๊อก"},"hr":{"label":"บุคลากร / คนขับรถ / ช่าง","status":"not_covered","modules":[],"commands":[],"workflows":[],"documents":[],"gap":"ยังไม่มี module สำหรับจัดการบุคลากร"},"maintenance":{"label":"ซ่อมบำรุง / เครื่องจักร","status":"partial","modules":[],"commands":[],"workflows":[],"documents":[],"gap":"มี kis-webhook สำหรับรับ event จากเครื่องจักร แต่ยังไม่มี engine จัดการซ่อมบำรุง"},"accounting":{"label":"บัญชี / งบการเงิน","status":"not_covered","modules":[],"commands":[],"workflows":[],"documents":[],"gap":"ยังไม่มี module สำหรับบัญชี/งบการเงิน"},"relationship":{"label":"ความสัมพันธ์ธุรกิจ / Business Timeline","status":"covered","design_principle":"เอกสารคือ artifact ของ event ไม่ใช่ตัว event เอง — ศูนย์กลางคือ partner + timeline","modules":["engines/partner/timeline","app/admin/partners/page","app/admin/partners/[id]/page"],"commands":["partner.list","partner.timeline"],"workflows":[],"documents":[],"gap":"business_events ยังว่างอยู่ (phase 1 ใช้ documents เป็นหลัก) — phase 2 คือ event capture จาก LINE + manual note"}},"capabilities_summary":{"vision":{"status":"available"},"gps":{"status":"available"},"voice":{"status":"not_available","gap":"ยังไม่มี Voice Input/Output"},"camera":{"status":"not_available","gap":"ยังไม่มี Camera API"},"messaging":{"status":"available"},"payment":{"status":"partial","gap":"ยังไม่มี auto payment gateway"},"printer":{"status":"available"},"sensor":{"status":"partial","gap":"รับ event ได้ แต่ยังไม่ส่งคำสั่งกลับ"},"database":{"status":"available"},"ai_text":{"status":"available"},"file_system":{"status":"available"},"terminal":{"status":"available"},"browser":{"status":"available"},"calendar":{"status":"available"},"plc":{"status":"not_available","gap":"ยังไม่มี PLC/Modbus/OPC-UA"},"mqtt":{"status":"not_available","gap":"ยังไม่มี MQTT broker"},"robot_arm":{"status":"not_available","gap":"ยังไม่มี Robot Controller"}},"drivers":{"line":{"type":"native","platform":"macos","binary":"lib/drivers/line/line-driver","status":"active"},"chrome":{"type":"ts","platform":"any","module":"lib/drivers/chrome.ts","status":"active"},"vscode":{"type":"ts","platform":"any","module":"lib/drivers/vscode.ts","status":"active"},"finder":{"type":"ts","platform":"macos","module":"lib/drivers/finder.ts","status":"active"},"terminal":{"type":"ts","platform":"macos","module":"lib/drivers/terminal.ts","status":"active"},"maps":{"type":"ts","platform":"any","module":"lib/drivers/maps.ts","status":"active"},"earth":{"type":"ts","platform":"macos","module":"lib/drivers/earth.ts","status":"active"},"mail":{"type":"ts","platform":"macos","module":"lib/drivers/mail.ts","status":"active"},"calendar":{"type":"ts","platform":"macos","module":"lib/drivers/calendar.ts","status":"active"},"pdf":{"type":"ts","platform":"macos","module":"lib/drivers/pdf.ts","status":"active"},"github":{"type":"ts","platform":"macos","module":"lib/drivers/github.ts","status":"active"}},"db_tables":[{"name":"partners","key_cols":"id, name, partner_type_label, phone, address, tax_id"},{"name":"documents","key_cols":"id, document_type, document_number, status, partner_id, net_amount, issue_date, business_event_id"},{"name":"document_items","key_cols":"id, document_id, line_no, description, qty, unit_price"},{"name":"debt_trackings","key_cols":"id, partner_id, principal_amount, fee_rate, interest_start_at"},{"name":"invoice_debts","key_cols":"id, document_id, invoice_status, outstanding_amount, paid_amount"},{"name":"business_events","key_cols":"id, partner_id, event_type, event_date, title, metadata"},{"name":"jobs","key_cols":"id, partner_id, job_status, distance_km, required_quantity"},{"name":"line_events","key_cols":"id, event_type, group_id, message_id, raw_json"},{"name":"line_draft_documents","key_cols":"id, doc_type, status, payload"},{"name":"app_configs","key_cols":"title, data  (business rules single source of truth)"},{"name":"material_types","key_cols":"id, name"},{"name":"api_tokens","key_cols":"id, user_email, token, label, scopes, last_used_at, revoked_at"}],"quick_start":["1. GET /observer.json — you are here — load this to understand the system","2. GET /api/v1/spec — load tool definitions in OpenAI function-calling format","3. GET /admin/api-tokens — generate a token (requires admin login)","4. POST /api/v1/query  Body: {command, args}  Header: X-DNA-Token: <token>","5. Read-only commands execute immediately. Write commands return requires_confirmation:true."]}