Skip to content

Commit a3f7483

Browse files
authored
feat: search(query) MCP tool — cerca cross-repo via GitHub API + topic_index (#60)
* feat: search(query) MCP tool — cerca cross-repo via GitHub API + topic_index * fix: word boundary matching in search() — 'pubblica' non matcha piu' 'pubblicati' * docs: documenta search() tool nel README * docs: riscrive README — allineato a stato reale ACB (10 repo, v3, search) - session_bootstrap non più '~40 righe' (ora 80+) - topic_index da v2 a v3 (analyses) - tool MCP: tabella con output e quando usarlo - search: sezione dedicata con esempio JSON - esempio config: ora link a dataciviclab.config.yml - sezione degrado: unificata e aggiornata (search issues) - rimosso riferimento windows (codex-context.ps1 non esiste piu') - riorganizzato: artifact prodotti/consumati prima, tool MCP dopo
1 parent 2485a3b commit a3f7483

3 files changed

Lines changed: 488 additions & 76 deletions

File tree

README.md

Lines changed: 72 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -3,135 +3,131 @@
33
Genera contesto operativo compatto per agenti [DataCivicLab](https://github.com/dataciviclab)
44
da GitHub e, se disponibile, dai checkout locali dei repo Lab.
55

6-
## Artifact
6+
ACB è il **layer di contesto** dell'ecosistema: ogni 6 ore scansiona 10 repo,
7+
colleziona segnali da source-observatory, dataset-incubator e data-explorer,
8+
e produce artifact che dicono ad agenti e umani *"cosa è successo e cosa serve attenzione"*.
9+
10+
## Artifact prodotti
711

812
| Artifact | Versione | Ruolo |
913
|---|---|---|
10-
| `session_bootstrap.md` || orientamento rapido per agenti e umani (~40 righe) |
11-
| `workspace_triage.json` | v1 | PR, issue, discussion, warning, git state |
12-
| `topic_index.json` | v2 | repos attivi, dataset per fonte, topic operativi |
14+
| `session_bootstrap.md` || orientamento rapido: segnali, PR, discussion, stato git |
15+
| `workspace_triage.json` | v1 | dati strutturati: issue, PR, discussion, warning, radar, pipeline |
16+
| `topic_index.json` | v3 | indice navigabile: repos, dataset per fonte, analisi, explorer themes |
1317

14-
La CI aggiorna gli artifact GitHub-only ogni 6 ore sul branch `context`.
18+
URL su branch `context`:
1519

16-
## Artifact Consumati
20+
```text
21+
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/session_bootstrap.md
22+
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/workspace_triage.json
23+
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/topic_index.json
24+
```
1725

18-
ACB preferisce artifact JSON generati e versionati dai repo Lab rispetto a
19-
frontmatter o README manuali. Oggi consuma:
26+
## Artifact consumati da upstream
2027

2128
| Repo | Path | Uso |
2229
|---|---|---|
23-
| `source-observatory` | `data/radar/radar_summary.json` | health complessivo delle fonti nel registry |
24-
| `source-observatory` | `data/catalog/catalog_signals.json` | drift/inventory per singola fonte |
25-
| `dataset-incubator` | `registry/pipeline_signals.json` | stato operativo dei dataset candidate |
26-
| `dataset-incubator` | `registry/clean_catalog.json` | dataset clean/queryable disponibili |
30+
| `source-observatory` | `data/radar/radar_summary.json` | health 33 fonti (GREEN/YELLOW/RED) |
31+
| `source-observatory` | `data/catalog/catalog_signals.json` | drift inventariale per fonte |
32+
| `dataset-incubator` | `registry/pipeline_signals.json` | stato 83 candidate pipeline |
33+
| `dataset-incubator` | `registry/clean_catalog.json` | 63 dataset pubblicati (slug, colonne, periodo) |
34+
| `data-explorer` | `src/data/themes.json.py` | 6 temi editoriali + gap explorer |
2735

28-
`radar_summary` presidia la connettivita' e la disponibilita'; `catalog_signals` resta sul drift inventariale.
36+
## Tool MCP
2937

30-
URL raw:
38+
Esposti via `agent-context-mcp` (server MCP `dataciviclab-context`).
3139

32-
```text
33-
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/session_bootstrap.md
34-
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/workspace_triage.json
35-
https://raw.githubusercontent.com/dataciviclab/agent-context-builder/context/topic_index.json
36-
```
37-
38-
## Utilizzo
40+
| Tool | Output | Quando usarlo |
41+
|---|---|---|
42+
| `session_bootstrap()` | Markdown | Prima chiamata della sessione — orientamento: segnali, PR, discussion, radar |
43+
| `workspace_triage()` | JSON | Dati precisi: conteggi, stato git, source health, pipeline state |
44+
| `topic_index(resolve=)` | JSON | Esplorare dataset/analisi per tema o slug |
45+
| `search(query, limit=10)` | JSON | Cercare in tutto il Lab: issue, PR, dataset, analisi |
46+
| `refresh_context()` | OK/error | Forzare rebuild CI (richiede GITHUB_TOKEN con scope workflow) |
3947

40-
### Shared mode via MCP
48+
### `search()` nel dettaglio
4149

42-
Usa `agent-context-mcp` / `dataciviclab-context` per leggere gli artifact remoti.
43-
Non richiede checkout locale.
50+
Combina due fonti in una risposta:
4451

45-
```bash
46-
pip install -e ".[mcp]"
47-
agent-context-mcp
52+
```
53+
search("disuguaglianza")
54+
├── GitHub Issues Search API → issue/PR da tutti i repo dataciviclab
55+
└── topic_index.json locale → dataset e analisi per nome/slug/fonte
4856
```
4957

50-
Tool MCP:
58+
Senza `GITHUB_TOKEN` funziona solo su dataset e analisi (topic_index).
5159

52-
| Tool | Uso |
53-
|---|---|
54-
| `session_bootstrap` | orientamento rapido: repo attivi, PR, issue, discussion |
55-
| `workspace_triage` | triage machine-readable: PR, issue, warning, git state |
56-
| `topic_index` | indice v2: repos, datasets per fonte, topic operativi |
57-
| `refresh_context` | triggera build CI; richiede `GITHUB_TOKEN` con scope `workflow` |
60+
Esempio di risposta:
5861

59-
Esempio `settings.json`:
62+
```json
63+
{
64+
"query": "rifiuti",
65+
"total": 9,
66+
"results": {
67+
"issues": [
68+
{"repo": "dataciviclab/data-explorer", "number": 201, "title": "feat: add ISPRA GHG...", "type": "pr"}
69+
],
70+
"datasets": [
71+
{"slug": "ispra_ru_base", "name": "Rifiuti Urbani", "source": "ISPRA"}
72+
],
73+
"analyses": [
74+
{"slug": "rifiuti-km2", "name": "Rifiuti per km²..."}
75+
]
76+
}
77+
}
78+
```
79+
80+
### Configurazione MCP
6081

6182
```json
6283
{
6384
"mcpServers": {
6485
"dataciviclab-context": {
6586
"command": "agent-context-mcp",
6687
"env": {
67-
"GITHUB_TOKEN": "<opzionale-per-refresh>"
88+
"GITHUB_TOKEN": "<opzionale: serve per refresh_context e search issues>"
6889
}
6990
}
7091
}
7192
}
7293
```
7394

74-
### Local mode
75-
76-
Esegue il builder localmente per includere lo stato git (branch, dirty).
95+
## Utilizzo locale
7796

7897
```bash
79-
pip install -e .
80-
agent-context build \
81-
--config dataciviclab.config.yml \
82-
--out generated/ \
83-
--workspace-root ~/dev/dataciviclab-workspace
84-
```
85-
86-
Windows:
87-
88-
```powershell
89-
.\codex-context.ps1 -WorkspaceRoot "C:\path\to\dataciviclab-workspace"
90-
```
91-
92-
Il wrapper imposta UTF-8, neutralizza `CURL_CA_BUNDLE` ereditato e usa `.venv314`
93-
o `.venv` se presenti.
94-
95-
## Configurazione (`dataciviclab.config.yml`)
98+
pip install -e ".[mcp]"
9699

97-
Definisce organizzazione, repo e topic da monitorare.
100+
# Solo GitHub (stato CI)
101+
agent-context build --config dataciviclab.config.yml --out generated/
98102

99-
```yaml
100-
github_org: dataciviclab
101-
repos:
102-
- dataset-incubator
103-
- dataciviclab
104-
topics:
105-
datasets:
106-
summary: Incubazione dataset
107-
repos: [dataset-incubator, dataciviclab]
108-
paths: [dataset-incubator/, dataciviclab/analisi/]
103+
# Con stato git locale
104+
agent-context build --config dataciviclab.config.yml --out generated/ \
105+
--workspace-root ~/dev/dataciviclab-workspace
109106
```
110107

111-
`workspace_root` resta fuori dalla config: usare `--workspace-root` o
112-
`DATACIVICLAB_WORKSPACE`. `GITHUB_TOKEN` serve per GitHub Discussions e refresh CI.
113-
114-
Variabili MCP utili: `ACB_REPO`, `ACB_BRANCH`.
108+
Variabili ambiente utili:
109+
- `GITHUB_TOKEN` per discussion, refresh, search issues
110+
- `DATACIVICLAB_WORKSPACE` — path workspace locale
111+
- `ACB_REPO`, `ACB_BRANCH` — override repo/branch MCP (default: `dataciviclab/agent-context-builder`, `context`)
115112

116113
## Degradazione controllata
117114

118-
Il builder non deve crashare per contesto parziale:
115+
Nessun crash per contesto parziale:
119116

120117
| Condizione | Comportamento |
121118
|---|---|
122119
| rate limit / 403 GitHub | campi `null`, errore in JSON |
123-
| repo privato senza token | repo saltato, warning registrato |
124-
| nessun token | discussion saltate |
120+
| nessun token | discussion e search issues saltate; topic_index search funziona |
121+
| repo upstream non disponibile | `available: false`, articolazioni interne populate |
125122
| repo locale assente | `available: false`, `reason: path_not_found` |
126-
| path non git | `available: false`, `reason: not_git_repo` |
127123
| local mode non attivo | `available: false`, `reason: local_disabled` |
128124

129125
## Sviluppo
130126

131127
```bash
132128
pip install -e ".[dev]"
133129
pytest
134-
ruff check .
130+
ruff check src/ tests/
135131
```
136132

137133
## Licenza

0 commit comments

Comments
 (0)