Complete snapshot of /opt/microdao-daarion/ from NODE1 (144.76.224.179).
This represents the actual running production code that has diverged
significantly from the previous main branch.
Key changes from old main:
- Gateway (http_api.py): expanded from ~40KB to 164KB with full agent support
- Router: new /v1/agents/{id}/infer endpoint with vision + DeepSeek routing
- Behavior Policy: SOWA v2.2 (3-level: FULL/ACK/SILENT)
- Agent Registry: config/agent_registry.yml as single source of truth
- 13 agents configured (was 3)
- Memory service integration
- CrewAI teams and roles
Excluded from snapshot: venv/, .env, data/, backups, .tgz archives
Co-authored-by: Cursor <cursoragent@cursor.com>
1317 lines
52 KiB
HTML
1317 lines
52 KiB
HTML
|
||
<!doctype html>
|
||
<html lang="en" class="no-js">
|
||
<head>
|
||
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
|
||
|
||
|
||
<link rel="canonical" href="https://IvanTytar.github.io/microdao-daarion/tasks/TASK_PHASE_NODE1_REPAIR/">
|
||
|
||
|
||
|
||
|
||
<link rel="icon" href="../../assets/images/favicon.png">
|
||
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.18">
|
||
|
||
|
||
|
||
<title>TASK_PHASE_NODE1_REPAIR.md - DAARION Documentation</title>
|
||
|
||
|
||
|
||
<link rel="stylesheet" href="../../assets/stylesheets/main.66ac8b77.min.css">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
||
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
||
|
||
|
||
|
||
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</head>
|
||
|
||
|
||
<body dir="ltr">
|
||
|
||
|
||
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
||
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
||
<label class="md-overlay" for="__drawer"></label>
|
||
<div data-md-component="skip">
|
||
|
||
|
||
<a href="#task_phase_node1_repairmd" class="md-skip">
|
||
Skip to content
|
||
</a>
|
||
|
||
</div>
|
||
<div data-md-component="announce">
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<header class="md-header md-header--shadow" data-md-component="header">
|
||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||
<a href="../.." title="DAARION Documentation" class="md-header__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
|
||
|
||
</a>
|
||
<label class="md-header__button md-icon" for="__drawer">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
|
||
</label>
|
||
<div class="md-header__title" data-md-component="header-title">
|
||
<div class="md-header__ellipsis">
|
||
<div class="md-header__topic">
|
||
<span class="md-ellipsis">
|
||
DAARION Documentation
|
||
</span>
|
||
</div>
|
||
<div class="md-header__topic" data-md-component="header-topic">
|
||
<span class="md-ellipsis">
|
||
|
||
TASK_PHASE_NODE1_REPAIR.md
|
||
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
||
|
||
|
||
|
||
<label class="md-header__button md-icon" for="__search">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
</label>
|
||
<div class="md-search" data-md-component="search" role="dialog">
|
||
<label class="md-search__overlay" for="__search"></label>
|
||
<div class="md-search__inner" role="search">
|
||
<form class="md-search__form" name="search">
|
||
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
||
<label class="md-search__icon md-icon" for="__search">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||
</label>
|
||
<nav class="md-search__options" aria-label="Search">
|
||
|
||
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
|
||
</button>
|
||
</nav>
|
||
|
||
</form>
|
||
<div class="md-search__output">
|
||
<div class="md-search__scrollwrap" data-md-scrollfix>
|
||
<div class="md-search-result" data-md-component="search-result">
|
||
<div class="md-search-result__meta">
|
||
Initializing search
|
||
</div>
|
||
<ol class="md-search-result__list" role="presentation"></ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</nav>
|
||
|
||
</header>
|
||
|
||
<div class="md-container" data-md-component="container">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<main class="md-main" data-md-component="main">
|
||
<div class="md-main__inner md-grid">
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
|
||
|
||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
||
<label class="md-nav__title" for="__drawer">
|
||
<a href="../.." title="DAARION Documentation" class="md-nav__button md-logo" aria-label="DAARION Documentation" data-md-component="logo">
|
||
|
||
|
||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"/></svg>
|
||
|
||
</a>
|
||
DAARION Documentation
|
||
</label>
|
||
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Home
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/getting-started/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Getting Started
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/architecture-overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Architecture
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../public/daiS_daos_overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
DAIS & DAOS
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Internal
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Internal
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_1" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5_1" id="__nav_5_1_label" tabindex="0">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Infra
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_1_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5_1">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Infra
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/INFRA_AUTOMATION_PACK_V1/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Infra Automation Pack v1
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/monitoring_overview/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Monitoring Overview
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/infra/nodes_registry_v0/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Nodes Registry v0
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item md-nav__item--nested">
|
||
|
||
|
||
|
||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
|
||
|
||
|
||
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Specs
|
||
</span>
|
||
|
||
|
||
<span class="md-nav__icon md-icon"></span>
|
||
</label>
|
||
|
||
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
|
||
<label class="md-nav__title" for="__nav_5_2">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Specs
|
||
</label>
|
||
<ul class="md-nav__list" data-md-scrollfix>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/matrix_presence_aggregator/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Matrix Presence Aggregator
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/city_map_spec/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
City Map Spec
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="md-nav__item">
|
||
<a href="../../internal/specs/node_join_protocol_draft/" class="md-nav__link">
|
||
|
||
|
||
<span class="md-ellipsis">
|
||
Node Join Protocol (Draft)
|
||
</span>
|
||
|
||
|
||
</a>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
|
||
|
||
</ul>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
||
<div class="md-sidebar__scrollwrap">
|
||
<div class="md-sidebar__inner">
|
||
|
||
|
||
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<label class="md-nav__title" for="__toc">
|
||
<span class="md-nav__icon md-icon"></span>
|
||
Table of contents
|
||
</label>
|
||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#phase-name" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Phase name
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#goal" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Goal
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#context-facts-do-not-redefine-them-in-code" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Context (facts — do not "redefine" them in code)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#scope" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Scope
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Scope">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#in-scope" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
In scope
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#out-of-scope" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Out of scope
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#prerequisites" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Prerequisites
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#tasks" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Tasks
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="Tasks">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#1-bring-codebase-up-to-task-039044-rooms-orchestrator-and-align-db-schema" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
1. Bring codebase up to TASK 039–044 (rooms / orchestrator) and align DB schema
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#2-fix-daarion-web-api-base-urls-and-ssr-errors" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
2. Fix daarion-web API base URLs and SSR errors
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#3-fix-healthchecks-for-dagi-router-and-sttocrwebsearchswapper" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
3. Fix healthchecks for dagi-router and STT/OCR/WebSearch/Swapper
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="3. Fix healthchecks for dagi-router and STT/OCR/WebSearch/Swapper">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#31-dagi-router-healthcheck-python-requests" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
3.1. dagi-router healthcheck (Python requests)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#32-sttocrwebsearchswapper-healthchecks-curl" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
3.2. STT/OCR/WebSearch/Swapper healthchecks (curl)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#4-fix-dagi-vector-db-service-dependencies-torch-sentence-transformers" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
4. Fix dagi-vector-db-service dependencies (Torch / sentence-transformers)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#5-fix-dagi-rag-service-dependencies-haystack" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
5. Fix dagi-rag-service dependencies (Haystack)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#6-fix-telegram-gateway-configuration-and-nats-usage" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
6. Fix Telegram gateway configuration and NATS usage
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="6. Fix Telegram gateway configuration and NATS usage">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#61-router-url-dns-service-name" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
6.1. Router URL (DNS / service name)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#62-avoid-notjsmessageerror-msgack-on-non-jetstream" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
6.2. Avoid NotJSMessageError (msg.ack on non-JetStream)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#7-add-health-endpoint-for-gatewaydaarioncity" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
7. Add /health endpoint for gateway.daarion.city
|
||
</span>
|
||
</a>
|
||
|
||
<nav class="md-nav" aria-label="7. Add /health endpoint for gateway.daarion.city">
|
||
<ul class="md-nav__list">
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#71-if-gateway-is-a-backend-service-nodefastapietc" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
7.1. If gateway is a backend service (Node/FastAPI/etc.)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#72-if-gatewaydaarioncity-is-served-via-nginx" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
7.2. If gateway.daarion.city is served via nginx
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#8-deployment-flow-for-node1-instructions" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
8. Deployment flow for NODE1 (instructions)
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
</nav>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#acceptance-checklist" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Acceptance checklist
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
<li class="md-nav__item">
|
||
<a href="#notes-for-agents" class="md-nav__link">
|
||
<span class="md-ellipsis">
|
||
Notes for agents
|
||
</span>
|
||
</a>
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<div class="md-content" data-md-component="content">
|
||
<article class="md-content__inner md-typeset">
|
||
|
||
|
||
|
||
|
||
<h1 id="task_phase_node1_repairmd">TASK_PHASE_NODE1_REPAIR.md<a class="headerlink" href="#task_phase_node1_repairmd" title="Permanent link">¶</a></h1>
|
||
<h2 id="phase-name">Phase name<a class="headerlink" href="#phase-name" title="Permanent link">¶</a></h2>
|
||
<p>NODE1_REPAIR — bring NODE1 to a healthy, MVP-ready state.</p>
|
||
<h2 id="goal">Goal<a class="headerlink" href="#goal" title="Permanent link">¶</a></h2>
|
||
<ol>
|
||
<li>All core services on NODE1 are <code>running</code> and <code>healthy</code> in <code>docker ps</code>.</li>
|
||
<li><code>daarion-web</code> serves working UI for:</li>
|
||
<li><code>/microdao/daarion</code> (orchestrator room view),</li>
|
||
<li><code>/nodes/node-1</code> (NODE1 status),</li>
|
||
<li><code>/agents/...</code> (agents/crew views).</li>
|
||
<li>Telegram bot(s) can route a message through <code>telegram-gateway → dagi-router → LLM</code> and return a response.</li>
|
||
<li><code>https://gateway.daarion.city/health</code> returns HTTP 200.</li>
|
||
<li>DB schema and code are aligned with the MVP product brief and room/orchestrator features (TASK 039–044).</li>
|
||
</ol>
|
||
<hr />
|
||
<h2 id="context-facts-do-not-redefine-them-in-code">Context (facts — do not "redefine" them in code)<a class="headerlink" href="#context-facts-do-not-redefine-them-in-code" title="Permanent link">¶</a></h2>
|
||
<p>NODE1 (144.76.224.179):</p>
|
||
<ul>
|
||
<li><code>docker ps</code> shows multiple services as <code>unhealthy</code> or <code>Restarting</code>:</li>
|
||
<li><code>daarion-web</code>,</li>
|
||
<li><code>dagi-router</code>,</li>
|
||
<li><code>dagi-stt-service</code>,</li>
|
||
<li><code>dagi-ocr-service</code>,</li>
|
||
<li><code>dagi-web-search-service</code>,</li>
|
||
<li><code>dagi-swapper-service</code>,</li>
|
||
<li><code>dagi-vector-db-service</code>,</li>
|
||
<li><code>dagi-rag-service</code>.</li>
|
||
<li>Git HEAD on server = TASK 038 (no TASK 039–044 applied).</li>
|
||
<li><code>daarion-web</code> (Next.js) fails on SSR with:</li>
|
||
<li><code>connect ECONNREFUSED 127.0.0.1:80</code></li>
|
||
<li>It tries to <code>fetch http://127.0.0.1:80/...</code></li>
|
||
<li><code>daarion-city-service</code> is alive:</li>
|
||
<li><code>curl http://localhost:7001/health</code> → healthy</li>
|
||
<li>But DB schema is missing new columns (e.g. <code>room_role</code>, <code>is_public</code>, <code>sort_order</code>) for orchestrator rooms.</li>
|
||
<li><code>dagi-router</code> responds:</li>
|
||
<li><code>curl localhost:9102/health</code> → <code>ok</code></li>
|
||
<li>Docker healthcheck runs <code>python -c "import requests"</code>; <code>requests</code> is not installed → container marked <code>unhealthy</code>.</li>
|
||
<li>STT/OCR/WebSearch/Swapper:</li>
|
||
<li>Healthchecks run <code>curl</code> inside slim images without <code>curl</code> installed → false <code>unhealthy</code>.</li>
|
||
<li><code>dagi-vector-db-service</code>:</li>
|
||
<li>Keeps restarting with:<ul>
|
||
<li><code>AttributeError: module 'torch.utils._pytree' has no attribute 'register_pytree_node'</code></li>
|
||
</ul>
|
||
</li>
|
||
<li>Torch version is incompatible with <code>sentence-transformers</code>.</li>
|
||
<li><code>dagi-rag-service</code>:</li>
|
||
<li>Crashes with:<ul>
|
||
<li><code>ModuleNotFoundError: No module named 'haystack'</code></li>
|
||
</ul>
|
||
</li>
|
||
<li><code>telegram-gateway</code>:</li>
|
||
<li>Logs <code>Temporary failure in name resolution</code> for <code>http://router:9102/route</code><ul>
|
||
<li>Real service name in Docker is <code>dagi-router</code>, not <code>router</code>.</li>
|
||
</ul>
|
||
</li>
|
||
<li>Logs <code>NotJSMessageError</code> when calling <code>msg.ack()</code> – ack is used on a non-JetStream subject.</li>
|
||
<li><code>https://gateway.daarion.city/health</code> returns 404 (SSL OK but no health endpoint).</li>
|
||
<li>Because <code>daarion-web</code> is <code>unhealthy</code>, MVP UI for NODE1 (microDAO, nodes, agents) is effectively offline.</li>
|
||
<li>Product brief requires at least six core flows live for MVP:</li>
|
||
<li>MicroDAO onboarding,</li>
|
||
<li>Public channel for guests,</li>
|
||
<li>MicroDAO chat,</li>
|
||
<li>Follow-ups,</li>
|
||
<li>Kanban tasks,</li>
|
||
<li>Private agent.</li>
|
||
</ul>
|
||
<p>Do NOT change these facts; change code/config to fix the system.</p>
|
||
<hr />
|
||
<h2 id="scope">Scope<a class="headerlink" href="#scope" title="Permanent link">¶</a></h2>
|
||
<h3 id="in-scope">In scope<a class="headerlink" href="#in-scope" title="Permanent link">¶</a></h3>
|
||
<ul>
|
||
<li>Code and config changes in the main repo:</li>
|
||
<li>Dockerfiles and <code>docker-compose.yml</code> (and any overrides).</li>
|
||
<li><code>daarion-web</code> env/SSR config.</li>
|
||
<li><code>daarion-city-service</code> migrations and DB schema updates.</li>
|
||
<li><code>dagi-router</code>, STT/OCR/WebSearch/Swapper healthchecks.</li>
|
||
<li><code>dagi-vector-db-service</code> dependencies (Torch, sentence-transformers).</li>
|
||
<li><code>dagi-rag-service</code> dependencies (Haystack).</li>
|
||
<li><code>telegram-gateway</code> configuration and NATS usage.</li>
|
||
<li>Gateway <code>/health</code> endpoint (backend or nginx, depending on actual stack).</li>
|
||
<li>Local verification (via <code>docker compose</code>) + instructions for running on NODE1.</li>
|
||
</ul>
|
||
<h3 id="out-of-scope">Out of scope<a class="headerlink" href="#out-of-scope" title="Permanent link">¶</a></h3>
|
||
<ul>
|
||
<li>New product features beyond MVP (no new flows).</li>
|
||
<li>Large refactors of architecture.</li>
|
||
<li>Switching to a different LLM stack or DB vendor.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="prerequisites">Prerequisites<a class="headerlink" href="#prerequisites" title="Permanent link">¶</a></h2>
|
||
<p>Before editing:</p>
|
||
<ol>
|
||
<li>Inspect repo structure to locate:</li>
|
||
<li>Docker compose files (e.g. <code>docker-compose.yml</code>, <code>docker-compose.prod.yml</code>).</li>
|
||
<li>Services:<ul>
|
||
<li><code>daarion-web</code>,</li>
|
||
<li><code>daarion-city-service</code>,</li>
|
||
<li><code>dagi-router</code>,</li>
|
||
<li><code>dagi-stt-service</code>,</li>
|
||
<li><code>dagi-ocr-service</code>,</li>
|
||
<li><code>dagi-web-search-service</code>,</li>
|
||
<li><code>dagi-swapper-service</code>,</li>
|
||
<li><code>dagi-vector-db-service</code>,</li>
|
||
<li><code>dagi-rag-service</code>,</li>
|
||
<li><code>telegram-gateway</code>,</li>
|
||
<li><code>gateway</code> (or equivalent).</li>
|
||
</ul>
|
||
</li>
|
||
<li>Migration tooling for <code>daarion-city-service</code> (Alembic / Prisma / Drizzle / etc.).</li>
|
||
<li>Existing deploy scripts:<ul>
|
||
<li><code>scripts/deploy-prod.sh</code>,</li>
|
||
<li><code>scripts/migrate-prod.sh</code> (or equivalents).</li>
|
||
</ul>
|
||
</li>
|
||
<li>Read:</li>
|
||
<li><code>01_product_brief_mvp.md</code> — especially sections about microDAO, rooms, orchestrator, onboarding, follow-ups, Kanban, private agent.</li>
|
||
<li><code>docs/DEPLOY_MIGRATIONS.md</code> or any deployment doc describing DB migrations.</li>
|
||
<li><code>microdao — Data Model & Event Catalog</code> (if present in repo/docs) to understand expected DB fields for rooms.</li>
|
||
</ol>
|
||
<hr />
|
||
<h2 id="tasks">Tasks<a class="headerlink" href="#tasks" title="Permanent link">¶</a></h2>
|
||
<h3 id="1-bring-codebase-up-to-task-039044-rooms-orchestrator-and-align-db-schema">1. Bring codebase up to TASK 039–044 (rooms / orchestrator) and align DB schema<a class="headerlink" href="#1-bring-codebase-up-to-task-039044-rooms-orchestrator-and-align-db-schema" title="Permanent link">¶</a></h3>
|
||
<p>1.1. Locate tasks 039–044 (look under <code>docs/cursor/</code> / <code>docs/tasks/</code> / similar).
|
||
- Identify what changes they describe:
|
||
- new fields for rooms (e.g. <code>room_role</code>, <code>is_public</code>, <code>sort_order</code>),
|
||
- any additional tables/relations required for orchestrator rooms and microDAO UI.</p>
|
||
<p>1.2. Implement DB/schema changes:
|
||
- Use existing migration framework for <code>daarion-city-service</code>.
|
||
- Create a new migration that:
|
||
- adds missing columns (e.g. <code>room_role</code>, <code>is_public</code>, <code>sort_order</code>) to relevant tables (e.g. <code>rooms</code>),
|
||
- adds any indices or constraints described in the docs,
|
||
- is <strong>idempotent</strong> and safe to apply on existing prod DB.
|
||
- Ensure migration can run in both dev and prod environments.</p>
|
||
<p>1.3. Update <code>daarion-city-service</code> models/ORM to match the new schema.
|
||
- All API endpoints that return rooms/microDAO views must expose these fields (if required by frontend).</p>
|
||
<p>1.4. Ensure deploy pipeline uses these migrations:
|
||
- Confirm <code>scripts/migrate-prod.sh</code> (or equivalent) calls the migration tool.
|
||
- If not, update it so that running the script applies the new migration.</p>
|
||
<p>1.5. Add/update minimal tests:
|
||
- Unit/integration test for room creation / listing that uses the new fields.
|
||
- At least one test for the orchestrator room API.</p>
|
||
<hr />
|
||
<h3 id="2-fix-daarion-web-api-base-urls-and-ssr-errors">2. Fix <code>daarion-web</code> API base URLs and SSR errors<a class="headerlink" href="#2-fix-daarion-web-api-base-urls-and-ssr-errors" title="Permanent link">¶</a></h3>
|
||
<p>2.1. Locate <code>daarion-web</code> config:
|
||
- <code>.env</code> / <code>.env.production</code> / <code>next.config.js</code> / <code>app/config.ts</code> etc.</p>
|
||
<p>2.2. Define correct base URL for city-service:</p>
|
||
<p>For <strong>server-side</strong> calls:</p>
|
||
<div class="codehilite"><pre><span></span><code>CITY_API_BASE_URL=http://daarion-city-service:7001
|
||
</code></pre></div>
|
||
|
||
<p>For <strong>client-side</strong> calls (if needed):</p>
|
||
<div class="codehilite"><pre><span></span><code>NEXT_PUBLIC_CITY_API_BASE_URL=https://gateway.daarion.city/api
|
||
<span class="gh">#</span> or, for internal-only, http://daarion-city-service:7001
|
||
</code></pre></div>
|
||
|
||
<p>2.3. Update all fetch calls in <code>daarion-web</code> to use these env vars instead of hardcoded <code>http://127.0.0.1:80</code>.</p>
|
||
<ul>
|
||
<li>Search for <code>127.0.0.1</code>, <code>localhost</code>, and update to use <code>CITY_API_BASE_URL</code> / <code>NEXT_PUBLIC_CITY_API_BASE_URL</code>.</li>
|
||
<li>Ensure Next.js server components and API routes read values from <code>process.env</code>.</li>
|
||
</ul>
|
||
<p>2.4. Local smoke test:</p>
|
||
<div class="codehilite"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>daarion-city-service
|
||
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>--build<span class="w"> </span>daarion-web
|
||
</code></pre></div>
|
||
|
||
<ul>
|
||
<li>Open <code>http://localhost:<WEB_PORT>/microdao/daarion</code> and check there are no SSR 500 errors.</li>
|
||
<li>Check <code>/nodes/node-1</code> and one of <code>/agents/...</code> pages.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="3-fix-healthchecks-for-dagi-router-and-sttocrwebsearchswapper">3. Fix healthchecks for dagi-router and STT/OCR/WebSearch/Swapper<a class="headerlink" href="#3-fix-healthchecks-for-dagi-router-and-sttocrwebsearchswapper" title="Permanent link">¶</a></h3>
|
||
<h4 id="31-dagi-router-healthcheck-python-requests">3.1. dagi-router healthcheck (Python requests)<a class="headerlink" href="#31-dagi-router-healthcheck-python-requests" title="Permanent link">¶</a></h4>
|
||
<p>3.1.1. Locate <code>dagi-router</code> Dockerfile and <code>docker-compose</code> service.</p>
|
||
<p>3.1.2. Replace healthcheck that uses <code>python -c "import requests"</code> with an HTTP healthcheck pointing at the service's <code>/health</code> endpoint.</p>
|
||
<p>Example <code>docker-compose.yml</code> snippet:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="nt">services</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">dagi-router</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="c1"># ...</span>
|
||
<span class="w"> </span><span class="nt">healthcheck</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">"CMD-SHELL"</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">"wget</span><span class="nv"> </span><span class="s">-qO-</span><span class="nv"> </span><span class="s">http://localhost:9102/health</span><span class="nv"> </span><span class="s">||</span><span class="nv"> </span><span class="s">exit</span><span class="nv"> </span><span class="s">1"</span><span class="p p-Indicator">]</span>
|
||
<span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10s</span>
|
||
<span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">3s</span>
|
||
<span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5</span>
|
||
</code></pre></div>
|
||
|
||
<p>3.1.3. Ensure the image has <code>wget</code> (or <code>curl</code>):</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="k">RUN</span><span class="w"> </span>apt-get<span class="w"> </span>update<span class="w"> </span><span class="o">&&</span><span class="w"> </span>apt-get<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>--no-install-recommends<span class="w"> </span>wget<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span><span class="o">&&</span><span class="w"> </span>rm<span class="w"> </span>-rf<span class="w"> </span>/var/lib/apt/lists/*
|
||
</code></pre></div>
|
||
|
||
<h4 id="32-sttocrwebsearchswapper-healthchecks-curl">3.2. STT/OCR/WebSearch/Swapper healthchecks (curl)<a class="headerlink" href="#32-sttocrwebsearchswapper-healthchecks-curl" title="Permanent link">¶</a></h4>
|
||
<p>3.2.1. For each of:</p>
|
||
<ul>
|
||
<li><code>dagi-stt-service</code>,</li>
|
||
<li><code>dagi-ocr-service</code>,</li>
|
||
<li><code>dagi-web-search-service</code>,</li>
|
||
<li><code>dagi-swapper-service</code>,</li>
|
||
</ul>
|
||
<p>replace <code>curl</code>-based healthcheck with <code>wget</code> or an equivalent command that is available in the image, or add <code>wget</code>/<code>curl</code> to Dockerfile as above.</p>
|
||
<p>Example:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="nt">healthcheck</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">"CMD-SHELL"</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="s">"wget</span><span class="nv"> </span><span class="s">-qO-</span><span class="nv"> </span><span class="s">http://localhost:<PORT>/health</span><span class="nv"> </span><span class="s">||</span><span class="nv"> </span><span class="s">exit</span><span class="nv"> </span><span class="s">1"</span><span class="p p-Indicator">]</span>
|
||
<span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10s</span>
|
||
<span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">3s</span>
|
||
<span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5</span>
|
||
</code></pre></div>
|
||
|
||
<p>3.2.2. Rebuild and run locally:</p>
|
||
<div class="codehilite"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>build<span class="w"> </span>dagi-router<span class="w"> </span>dagi-stt-service<span class="w"> </span>dagi-ocr-service<span class="w"> </span>dagi-web-search-service<span class="w"> </span>dagi-swapper-service
|
||
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>dagi-router<span class="w"> </span>dagi-stt-service<span class="w"> </span>dagi-ocr-service<span class="w"> </span>dagi-web-search-service<span class="w"> </span>dagi-swapper-service
|
||
docker<span class="w"> </span>ps
|
||
</code></pre></div>
|
||
|
||
<ul>
|
||
<li>Verify <code>STATUS</code> shows <code>healthy</code> after the healthcheck grace period.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="4-fix-dagi-vector-db-service-dependencies-torch-sentence-transformers">4. Fix <code>dagi-vector-db-service</code> dependencies (Torch / sentence-transformers)<a class="headerlink" href="#4-fix-dagi-vector-db-service-dependencies-torch-sentence-transformers" title="Permanent link">¶</a></h3>
|
||
<p>4.1. Locate Dockerfile / requirements for <code>dagi-vector-db-service</code>.</p>
|
||
<p>4.2. Update Python dependencies to a compatible set, e.g.:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="k">RUN</span><span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>--no-cache-dir<span class="w"> </span><span class="s2">"torch==2.4.0"</span><span class="w"> </span><span class="s2">"sentence-transformers==2.6.1"</span>
|
||
</code></pre></div>
|
||
|
||
<p>(or another version pair that is known to work together).</p>
|
||
<p>4.3. Rebuild and run:</p>
|
||
<div class="codehilite"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>build<span class="w"> </span>dagi-vector-db-service
|
||
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>dagi-vector-db-service
|
||
docker<span class="w"> </span>logs<span class="w"> </span>-f<span class="w"> </span>dagi-vector-db-service
|
||
</code></pre></div>
|
||
|
||
<ul>
|
||
<li>Ensure there is no <code>torch.utils._pytree</code> error and service reaches "ready" state.</li>
|
||
<li>Add a simple <code>/health</code> endpoint test if not present.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="5-fix-dagi-rag-service-dependencies-haystack">5. Fix <code>dagi-rag-service</code> dependencies (Haystack)<a class="headerlink" href="#5-fix-dagi-rag-service-dependencies-haystack" title="Permanent link">¶</a></h3>
|
||
<p>5.1. Locate Dockerfile / requirements for <code>dagi-rag-service</code>.</p>
|
||
<p>5.2. Add Haystack dependency, for example:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="k">RUN</span><span class="w"> </span>pip<span class="w"> </span>install<span class="w"> </span>--no-cache-dir<span class="w"> </span><span class="s2">"farm-haystack[all]==1.26.2"</span>
|
||
</code></pre></div>
|
||
|
||
<p>(or the version used locally).</p>
|
||
<p>5.3. Rebuild and run:</p>
|
||
<div class="codehilite"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>build<span class="w"> </span>dagi-rag-service
|
||
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>dagi-rag-service
|
||
docker<span class="w"> </span>logs<span class="w"> </span>-f<span class="w"> </span>dagi-rag-service
|
||
</code></pre></div>
|
||
|
||
<ul>
|
||
<li>Confirm <code>ModuleNotFoundError: No module named 'haystack'</code> is gone.</li>
|
||
<li>Add/verify <code>/health</code> endpoint and healthcheck.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="6-fix-telegram-gateway-configuration-and-nats-usage">6. Fix Telegram gateway configuration and NATS usage<a class="headerlink" href="#6-fix-telegram-gateway-configuration-and-nats-usage" title="Permanent link">¶</a></h3>
|
||
<h4 id="61-router-url-dns-service-name">6.1. Router URL (DNS / service name)<a class="headerlink" href="#61-router-url-dns-service-name" title="Permanent link">¶</a></h4>
|
||
<p>6.1.1. Find <code>telegram-gateway</code> service in <code>docker-compose.yml</code> and its env/config.</p>
|
||
<p>6.1.2. Set correct router URL:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="nt">services</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">telegram-gateway</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="c1"># ...</span>
|
||
<span class="w"> </span><span class="nt">ROUTER_URL</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">http://dagi-router:9102</span>
|
||
</code></pre></div>
|
||
|
||
<p>6.1.3. Alternatively, define network alias:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="nt">services</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">dagi-router</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">networks</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">default</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="nt">aliases</span><span class="p">:</span>
|
||
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">router</span>
|
||
</code></pre></div>
|
||
|
||
<p>and keep <code>ROUTER_URL=http://router:9102</code>.</p>
|
||
<h4 id="62-avoid-notjsmessageerror-msgack-on-non-jetstream">6.2. Avoid <code>NotJSMessageError</code> (msg.ack on non-JetStream)<a class="headerlink" href="#62-avoid-notjsmessageerror-msgack-on-non-jetstream" title="Permanent link">¶</a></h4>
|
||
<p>6.2.1. Locate the code where <code>telegram-gateway</code> subscribes to NATS and calls <code>msg.ack()</code>.</p>
|
||
<p>6.2.2. If the subject is not part of a JetStream stream, remove <code>msg.ack()</code>:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="c1"># Before</span>
|
||
<span class="n">msg</span> <span class="o">=</span> <span class="k">await</span> <span class="n">sub</span><span class="o">.</span><span class="fm">__anext__</span><span class="p">()</span>
|
||
<span class="c1"># ... process ...</span>
|
||
<span class="k">await</span> <span class="n">msg</span><span class="o">.</span><span class="n">ack</span><span class="p">()</span>
|
||
|
||
<span class="c1"># After (simple NATS)</span>
|
||
<span class="n">msg</span> <span class="o">=</span> <span class="k">await</span> <span class="n">sub</span><span class="o">.</span><span class="fm">__anext__</span><span class="p">()</span>
|
||
<span class="c1"># ... process ...</span>
|
||
<span class="c1"># no ack for core NATS</span>
|
||
</code></pre></div>
|
||
|
||
<p>6.2.3. If you want JetStream in the future, add TODO comments and separate task; for this phase keep it simple and working.</p>
|
||
<p>6.2.4. Local smoke test:</p>
|
||
<ul>
|
||
<li>Start NATS, <code>dagi-router</code>, and <code>telegram-gateway</code>.</li>
|
||
<li>Simulate a message (if test tooling exists) and ensure no <code>NotJSMessageError</code> appears.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="7-add-health-endpoint-for-gatewaydaarioncity">7. Add <code>/health</code> endpoint for <code>gateway.daarion.city</code><a class="headerlink" href="#7-add-health-endpoint-for-gatewaydaarioncity" title="Permanent link">¶</a></h3>
|
||
<p>Depending on implementation:</p>
|
||
<h4 id="71-if-gateway-is-a-backend-service-nodefastapietc">7.1. If gateway is a backend service (Node/FastAPI/etc.)<a class="headerlink" href="#71-if-gateway-is-a-backend-service-nodefastapietc" title="Permanent link">¶</a></h4>
|
||
<p>7.1.1. Add minimal endpoint:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="c1">// Node/Express example</span>
|
||
<span class="nx">app</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s1">'/health'</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="nx">req</span><span class="p">,</span><span class="w"> </span><span class="nx">res</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="nx">res</span><span class="p">.</span><span class="nx">status</span><span class="p">(</span><span class="mf">200</span><span class="p">).</span><span class="nx">json</span><span class="p">({</span><span class="w"> </span><span class="nx">status</span><span class="o">:</span><span class="w"> </span><span class="s1">'ok'</span><span class="w"> </span><span class="p">});</span>
|
||
<span class="p">});</span>
|
||
</code></pre></div>
|
||
|
||
<p>or</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="c1"># FastAPI example</span>
|
||
<span class="nd">@app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/health"</span><span class="p">)</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">health</span><span class="p">():</span>
|
||
<span class="k">return</span> <span class="p">{</span><span class="s2">"status"</span><span class="p">:</span> <span class="s2">"ok"</span><span class="p">}</span>
|
||
</code></pre></div>
|
||
|
||
<p>7.1.2. Ensure this endpoint is mounted at the top level of the gateway service.</p>
|
||
<h4 id="72-if-gatewaydaarioncity-is-served-via-nginx">7.2. If <code>gateway.daarion.city</code> is served via nginx<a class="headerlink" href="#72-if-gatewaydaarioncity-is-served-via-nginx" title="Permanent link">¶</a></h4>
|
||
<p>7.2.1. Update nginx config (e.g. <code>/etc/nginx/sites-available/gateway.conf</code>) to include:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="k">location</span><span class="w"> </span><span class="s">/health</span><span class="w"> </span><span class="p">{</span>
|
||
<span class="w"> </span><span class="kn">return</span><span class="w"> </span><span class="mi">200</span><span class="w"> </span><span class="s">'OK'</span><span class="p">;</span>
|
||
<span class="w"> </span><span class="kn">add_header</span><span class="w"> </span><span class="s">Content-Type</span><span class="w"> </span><span class="s">text/plain</span><span class="p">;</span>
|
||
<span class="p">}</span>
|
||
</code></pre></div>
|
||
|
||
<p>7.2.2. Reload nginx:</p>
|
||
<div class="codehilite"><pre><span></span><code>nginx<span class="w"> </span>-t<span class="w"> </span><span class="o">&&</span><span class="w"> </span>nginx<span class="w"> </span>-s<span class="w"> </span>reload
|
||
</code></pre></div>
|
||
|
||
<p>7.2.3. Local/container test:</p>
|
||
<ul>
|
||
<li><code>curl -k https://gateway.daarion.city/health</code> should return HTTP 200.</li>
|
||
</ul>
|
||
<hr />
|
||
<h3 id="8-deployment-flow-for-node1-instructions">8. Deployment flow for NODE1 (instructions)<a class="headerlink" href="#8-deployment-flow-for-node1-instructions" title="Permanent link">¶</a></h3>
|
||
<p>Agent should prepare / update deployment docs (e.g. <code>docs/DEPLOY_NODE1_REPAIR.md</code>) with:</p>
|
||
<p>8.1. Git update on NODE1:</p>
|
||
<div class="codehilite"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span>/opt/microdao-daarion
|
||
git<span class="w"> </span>fetch
|
||
git<span class="w"> </span>checkout<span class="w"> </span>main<span class="w"> </span><span class="c1"># or production branch</span>
|
||
git<span class="w"> </span>pull
|
||
</code></pre></div>
|
||
|
||
<p>8.2. Apply migrations:</p>
|
||
<div class="codehilite"><pre><span></span><code>./scripts/migrate-prod.sh<span class="w"> </span><span class="c1"># or documented migrations command</span>
|
||
</code></pre></div>
|
||
|
||
<p>8.3. Rebuild and restart only relevant services:</p>
|
||
<div class="codehilite"><pre><span></span><code>docker<span class="w"> </span>compose<span class="w"> </span>build<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>daarion-city-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>daarion-web<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-router<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-stt-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-ocr-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-web-search-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-swapper-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-vector-db-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-rag-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>telegram-gateway<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>gateway
|
||
|
||
docker<span class="w"> </span>compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>daarion-city-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>daarion-web<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-router<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-stt-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-ocr-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-web-search-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-swapper-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-vector-db-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>dagi-rag-service<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>telegram-gateway<span class="w"> </span><span class="se">\</span>
|
||
<span class="w"> </span>gateway
|
||
</code></pre></div>
|
||
|
||
<p>8.4. Quick <code>docker ps</code> check:</p>
|
||
<ul>
|
||
<li>All listed services must be <code>Up</code> and <code>healthy</code> after grace period.</li>
|
||
</ul>
|
||
<hr />
|
||
<h2 id="acceptance-checklist">Acceptance checklist<a class="headerlink" href="#acceptance-checklist" title="Permanent link">¶</a></h2>
|
||
<p>Task is done when all of the following are true:</p>
|
||
<ol>
|
||
<li>
|
||
<p><strong>Services/health</strong></p>
|
||
</li>
|
||
<li>
|
||
<p>[ ] On NODE1, <code>docker ps</code> shows:</p>
|
||
<ul>
|
||
<li><code>daarion-web</code>, <code>daarion-city-service</code>,</li>
|
||
<li><code>dagi-router</code>, <code>dagi-stt-service</code>, <code>dagi-ocr-service</code>,</li>
|
||
<li><code>dagi-web-search-service</code>, <code>dagi-swapper-service</code>,</li>
|
||
<li><code>dagi-vector-db-service</code>, <code>dagi-rag-service</code>,</li>
|
||
<li><code>telegram-gateway</code>, <code>gateway</code>
|
||
in state <code>Up</code> and <code>healthy</code>.</li>
|
||
<li>[ ] <code>curl http://localhost:7001/health</code> (city-service) → 200.</li>
|
||
<li>[ ] <code>curl http://localhost:9102/health</code> (dagi-router) → 200.</li>
|
||
<li>[ ] <code>curl -k https://gateway.daarion.city/health</code> → 200.</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p><strong>DB & API</strong></p>
|
||
</li>
|
||
<li>
|
||
<p>[ ] DB schema contains required fields for rooms (e.g. <code>room_role</code>, <code>is_public</code>, <code>sort_order</code>), matching Data Model & product brief.</p>
|
||
</li>
|
||
<li>[ ] Migration for these changes runs successfully on DEV and PROD.</li>
|
||
<li>
|
||
<p>[ ] API endpoints that frontend uses for microDAO/rooms/orchestrator return the new fields (where specified in docs).</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>daarion-web UI</strong></p>
|
||
</li>
|
||
<li>
|
||
<p>[ ] <code>/microdao/daarion</code> loads without SSR error and displays orchestrator/microDAO context.</p>
|
||
</li>
|
||
<li>[ ] <code>/nodes/node-1</code> loads and shows NODE1 data.</li>
|
||
<li>[ ] At least one <code>/agents/...</code> page loads and shows crew/agents data.</li>
|
||
<li>
|
||
<p>[ ] No <code>ECONNREFUSED 127.0.0.1:80</code> in <code>daarion-web</code> logs.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Telegram routing</strong></p>
|
||
</li>
|
||
<li>
|
||
<p>[ ] <code>telegram-gateway</code> uses the correct router URL (<code>http://dagi-router:9102</code> or via alias <code>router</code>).</p>
|
||
</li>
|
||
<li>[ ] No <code>Temporary failure in name resolution</code> or <code>NotJSMessageError</code> in <code>telegram-gateway</code> logs under normal operation.</li>
|
||
<li>
|
||
<p>[ ] Sending a message through the Telegram bot results in a valid LLM-based reply via <code>dagi-router</code>.</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>Docs</strong></p>
|
||
</li>
|
||
<li>
|
||
<p>[ ] This task file <code>TASK_PHASE_NODE1_REPAIR.md</code> is saved under <code>docs/tasks/</code> (or the project's task folder).</p>
|
||
</li>
|
||
<li>[ ] A short deploy how-to for NODE1 (from "git pull" to "docker compose up") is added/updated (e.g. <code>docs/DEPLOY_NODE1_REPAIR.md</code>).</li>
|
||
</ol>
|
||
<hr />
|
||
<h2 id="notes-for-agents">Notes for agents<a class="headerlink" href="#notes-for-agents" title="Permanent link">¶</a></h2>
|
||
<ul>
|
||
<li>Prefer minimal, targeted changes over large refactors.</li>
|
||
<li>Reuse existing patterns from other services (Dockerfiles, healthchecks, migrations).</li>
|
||
<li>
|
||
<p>When in doubt which version of a library to pin (Torch, Haystack), check:</p>
|
||
</li>
|
||
<li>
|
||
<p>existing working services in this repo,</p>
|
||
</li>
|
||
<li>or the versions used in local/dev containers (if recorded in lockfiles).</li>
|
||
<li>Keep logs and errors in comments / commit messages to help future debugging.</li>
|
||
</ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</article>
|
||
</div>
|
||
|
||
|
||
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
||
</div>
|
||
|
||
</main>
|
||
|
||
<footer class="md-footer">
|
||
|
||
<div class="md-footer-meta md-typeset">
|
||
<div class="md-footer-meta__inner md-grid">
|
||
<div class="md-copyright">
|
||
|
||
|
||
Made with
|
||
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
||
Material for MkDocs
|
||
</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
</div>
|
||
<div class="md-dialog" data-md-component="dialog">
|
||
<div class="md-dialog__inner md-typeset"></div>
|
||
</div>
|
||
|
||
|
||
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.sections", "navigation.instant", "content.code.copy"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
|
||
|
||
|
||
<script src="../../assets/javascripts/bundle.3220b9d7.min.js"></script>
|
||
|
||
|
||
</body>
|
||
</html> |