@chill-sharp/ui-core 1.1.12 → 1.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -103
- package/fesm2022/chill-sharp-ui-core.mjs +2446 -2446
- package/fesm2022/chill-sharp-ui-core.mjs.map +1 -1
- package/lib/lib/chill-form.component.d.ts +1 -1
- package/package.json +3 -3
- package/service-worker/chill-sharp-service-worker.js +166 -166
- package/styles/core-theme.scss +1235 -1235
- package/.agents/skills/chillsharp-current-user-preferences/SKILL.md +0 -70
- package/.agents/skills/chillsharp-ui-template/SKILL.md +0 -18
- package/doc/AIAssistedDevelopment/README.md +0 -185
- package/doc/AttachmentModel/README.md +0 -173
- package/doc/AuthenticationModel/README.md +0 -213
- package/doc/AuthenticationModel/how-to-integreate-auth-minimal-api.md +0 -293
- package/doc/ChillSharpClient.md +0 -464
- package/doc/ClientGeneration/README.md +0 -172
- package/doc/ComplianceGuide/README.md +0 -178
- package/doc/Configuration/README.md +0 -94
- package/doc/CurrentUserPreferences.md +0 -114
- package/doc/DateTimePolicy/README.md +0 -154
- package/doc/DateTimeSerialization.md +0 -423
- package/doc/Endpoints.md +0 -260
- package/doc/HowTo/01-simple-blog-sqlite.md +0 -153
- package/doc/HowTo/02-blog-schema-labels.md +0 -140
- package/doc/HowTo/03-authentication.md +0 -218
- package/doc/HowTo/04-blog-posts-one-to-many.md +0 -194
- package/doc/HowTo/05-docker-env-variables.md +0 -274
- package/doc/HowTo/06-chunk-transactions-autocomplete.md +0 -196
- package/doc/Mcp/ChatGPT.md +0 -291
- package/doc/Mcp/README.md +0 -799
- package/doc/MenuGuide/README.md +0 -49
- package/doc/ModelPreparation.md +0 -255
- package/doc/PermissionModel/README.md +0 -277
- package/doc/README.md +0 -228
- package/doc/ReferenceExistence.md +0 -130
- package/doc/RegisterContext.md +0 -217
- package/doc/UiCore/CRUD.md +0 -170
- package/doc/UiCore/README.md +0 -13
- package/doc/ValidationModel/README.md +0 -117
- package/doc/it/AIAssistedDevelopment/README.md +0 -185
- package/doc/it/AttachmentModel/README.md +0 -173
- package/doc/it/AuthenticationModel/README.md +0 -171
- package/doc/it/AuthenticationModel/how-to-integreate-auth-minimal-api.md +0 -292
- package/doc/it/ChillSharpClient.md +0 -464
- package/doc/it/ClientGeneration/README.md +0 -152
- package/doc/it/ComplianceGuide/README.md +0 -178
- package/doc/it/Configuration/README.md +0 -94
- package/doc/it/CurrentUserPreferences.md +0 -114
- package/doc/it/DateTimePolicy/README.md +0 -154
- package/doc/it/DateTimeSerialization.md +0 -423
- package/doc/it/Endpoints.md +0 -260
- package/doc/it/HowTo/01-simple-blog-sqlite.md +0 -152
- package/doc/it/HowTo/02-blog-schema-labels.md +0 -139
- package/doc/it/HowTo/03-authentication.md +0 -221
- package/doc/it/HowTo/04-blog-posts-one-to-many.md +0 -193
- package/doc/it/HowTo/05-docker-env-variables.md +0 -268
- package/doc/it/HowTo/06-chunk-transactions-autocomplete.md +0 -196
- package/doc/it/Mcp/ChatGPT.md +0 -291
- package/doc/it/Mcp/README.md +0 -799
- package/doc/it/MenuGuide/README.md +0 -49
- package/doc/it/ModelPreparation.md +0 -254
- package/doc/it/PermissionModel/README.md +0 -190
- package/doc/it/README.md +0 -172
- package/doc/it/ReferenceExistence.md +0 -130
- package/doc/it/RegisterContext.md +0 -218
- package/doc/it/UiCore/CRUD.md +0 -170
- package/doc/it/UiCore/README.md +0 -13
- package/doc/it/ValidationModel/README.md +0 -117
- package/template-customization/upgrade.ps1.template +0 -342
- package/template-customization/upgrade.sh.template +0 -271
package/doc/it/Mcp/ChatGPT.md
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
# COME FARE: Connetti ChillSharp MCP a ChatGPT
|
|
2
|
-
|
|
3
|
-
Versione originale in inglese: [English](../../Mcp/ChatGPT.md)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Questa guida mostra come esporre un server MCP ChillSharp protetto su HTTPS e collegarlo da ChatGPT utilizzando il flusso OAuth ChillSharp integrato.
|
|
7
|
-
|
|
8
|
-
## Obiettivo
|
|
9
|
-
|
|
10
|
-
Consenti a ChatGPT di connettersi a:
|
|
11
|
-
|
|
12
|
-
```text
|
|
13
|
-
https://your-domain.example/api/chill-mcp
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
e fare in modo che ogni richiesta MCP venga eseguita con le stesse limitazioni di utente, ruolo e autorizzazione ChillSharp utilizzate dalla normale API autenticata dalla portante.
|
|
17
|
-
|
|
18
|
-
## Requisiti
|
|
19
|
-
|
|
20
|
-
-Un dominio HTTPS pubblico che può raggiungere l'host ASP.NET Core
|
|
21
|
-
- Un `DbContext` che supporta ChillSharp, metadati dello schema e autenticazione
|
|
22
|
-
- Identità ASP.NET Core configurata per i tuoi utenti
|
|
23
|
-
-
|
|
24
|
-
- Almeno un'entità o query abilitata per MCP
|
|
25
|
-
|
|
26
|
-
ChatGPT non può connettersi direttamente a `localhost`. Per lo sviluppo locale, esponi l'app con un tunnel HTTPS pubblico e utilizza l'URL pubblico in ChatGPT.
|
|
27
|
-
|
|
28
|
-
## 1. Preparare il DbContext
|
|
29
|
-
|
|
30
|
-
Il contesto deve supportare il normale modello ChillSharp, i metadati dello schema per il rilevamento MCP e le tabelle di autenticazione per utenti, ruoli, autorizzazioni e sessioni token.
|
|
31
|
-
|
|
32
|
-
```csharp
|
|
33
|
-
using ChillSharp;
|
|
34
|
-
using ChillSharp.Auth;
|
|
35
|
-
using ChillSharp.Schema;
|
|
36
|
-
using Microsoft.AspNetCore.Identity;
|
|
37
|
-
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|
38
|
-
using Microsoft.EntityFrameworkCore;
|
|
39
|
-
|
|
40
|
-
namespace MyApp;
|
|
41
|
-
|
|
42
|
-
public class AppDbContext : IdentityDbContext<IdentityUser>, IChillContext, IChillAuthDbContext, IChillSchemaDbContext
|
|
43
|
-
{
|
|
44
|
-
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
|
|
45
|
-
{
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public string GetChillTypePrefix() => "MyApp";
|
|
49
|
-
|
|
50
|
-
public string GetPrimaryCultureName() => "en-US";
|
|
51
|
-
|
|
52
|
-
public string GetSecondaryCultureName() => "it-IT";
|
|
53
|
-
|
|
54
|
-
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
55
|
-
{
|
|
56
|
-
base.OnModelCreating(modelBuilder);
|
|
57
|
-
modelBuilder.AddChillAuthModel();
|
|
58
|
-
modelBuilder.AddChillSchemaModel();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Se la tua app utilizza anche i18n o allegati, conserva anche le registrazioni dei modelli.
|
|
64
|
-
|
|
65
|
-
## 2. Registra identità, autenticazione del portatore, ChillSharp e MCP
|
|
66
|
-
|
|
67
|
-
La registrazione `AddChillApi<TContext, TUser>()` supportata dall'identità abilita gli endpoint di autenticazione, il modulo MCP e gli endpoint OAuth di cui ChatGPT ha bisogno.
|
|
68
|
-
|
|
69
|
-
```csharp
|
|
70
|
-
using ChillSharp.Api;
|
|
71
|
-
using ChillSharp.Auth.Api;
|
|
72
|
-
using Microsoft.AspNetCore.Identity;
|
|
73
|
-
using Microsoft.EntityFrameworkCore;
|
|
74
|
-
|
|
75
|
-
var builder = WebApplication.CreateBuilder(args);
|
|
76
|
-
|
|
77
|
-
builder.Services.AddDbContext<AppDbContext>(options =>
|
|
78
|
-
options.UseSqlite("Data Source=app.db"));
|
|
79
|
-
|
|
80
|
-
builder.Services.AddIdentityCore<IdentityUser>()
|
|
81
|
-
.AddEntityFrameworkStores<AppDbContext>()
|
|
82
|
-
.AddSignInManager()
|
|
83
|
-
.AddDefaultTokenProviders();
|
|
84
|
-
|
|
85
|
-
builder.Services.AddAuthentication(ChillAuthIdentityDefaults.AuthenticationScheme)
|
|
86
|
-
.AddChillAuthBearer();
|
|
87
|
-
|
|
88
|
-
builder.Services.AddAuthorization();
|
|
89
|
-
|
|
90
|
-
builder.Services.AddChillApi<AppDbContext, IdentityUser>(options =>
|
|
91
|
-
{
|
|
92
|
-
options.ProtectedApi = true;
|
|
93
|
-
|
|
94
|
-
// Defaults shown explicitly for clarity.
|
|
95
|
-
options.EnableMcpApi = true;
|
|
96
|
-
options.EnableOAuthEndpoints = true;
|
|
97
|
-
options.OAuthBasePath = "/api/chill-auth/oauth";
|
|
98
|
-
options.OAuthProtectedResourcePath = "/api/chill-mcp";
|
|
99
|
-
options.OAuthAuthorizationCodeLifetime = TimeSpan.FromMinutes(5);
|
|
100
|
-
});
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## 3. Mappare l'API
|
|
104
|
-
|
|
105
|
-
Il middleware di autenticazione e autorizzazione deve essere eseguito prima di `MapChillApi()`.
|
|
106
|
-
|
|
107
|
-
```csharp
|
|
108
|
-
var app = builder.Build();
|
|
109
|
-
|
|
110
|
-
app.UseAuthentication();
|
|
111
|
-
app.UseAuthorization();
|
|
112
|
-
|
|
113
|
-
using (var scope = app.Services.CreateScope())
|
|
114
|
-
{
|
|
115
|
-
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
|
116
|
-
db.Database.EnsureCreated();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
app.MapChillApi();
|
|
120
|
-
app.Run();
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Con le impostazioni predefinite, questo espone:
|
|
124
|
-
|
|
125
|
-
| Scopo | URL |
|
|
126
|
-
| --- | --- |
|
|
127
|
-
| Server MCP | |
|
|
128
|
-
| Metadati di autorizzazione OAuth | |
|
|
129
|
-
| Metadati delle risorse protette MCP | |
|
|
130
|
-
| Registrazione dinamica del cliente | |
|
|
131
|
-
| Pagina di autorizzazione e consenso | |
|
|
132
|
-
| Endpoint token | |
|
|
133
|
-
|
|
134
|
-
## 4. Crea o avvia un utente
|
|
135
|
-
|
|
136
|
-
ChatGPT accede tramite la pagina di autorizzazione OAuth di ChillSharp usando gli stessi utenti ASP.NET Core Identity usati dalla normale autenticazione portante ChillSharp.
|
|
137
|
-
|
|
138
|
-
Per un primo sistema protetto, puoi eseguire il bootstrap di un utente root:
|
|
139
|
-
|
|
140
|
-
```csharp
|
|
141
|
-
builder.Services.AddChillApi<AppDbContext, IdentityUser>(options =>
|
|
142
|
-
{
|
|
143
|
-
options.ProtectedApi = true;
|
|
144
|
-
options.InitializeRootUserOnStartup = true;
|
|
145
|
-
options.CreateChillAuthUserForRoot = true;
|
|
146
|
-
options.RootUserName = "root";
|
|
147
|
-
options.RootPassword = "Pass123$";
|
|
148
|
-
options.RootEmail = "root@example.com";
|
|
149
|
-
options.RootDisplayName = "Root Administrator";
|
|
150
|
-
});
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
Quando `CreateChillAuthUserForRoot = true`, ChillSharp crea anche il record `AuthUser` collegato utilizzato dai controlli delle autorizzazioni.
|
|
154
|
-
|
|
155
|
-
## 5. Abilita solo schemi MCP sicuri
|
|
156
|
-
|
|
157
|
-
ChatGPT può vedere solo gli schemi abilitati per MCP. Contrassegna solo le entità e le query sicure e utili per l'accesso all'intelligenza artificiale.
|
|
158
|
-
|
|
159
|
-
```csharp
|
|
160
|
-
using ChillSharp.Annotations;
|
|
161
|
-
using ChillSharp.EF;
|
|
162
|
-
|
|
163
|
-
[ChillEntity(
|
|
164
|
-
UniquePropertyKeyString: "4E16F6C0-6B95-4D67-98BC-9F4D0D63EAF1",
|
|
165
|
-
PrimaryLanguageLabel: "Invoice",
|
|
166
|
-
SecondaryLanguageLabel: "Fattura",
|
|
167
|
-
EnableMCP = true,
|
|
168
|
-
MCPDescription = "Customer invoice header. Use it to inspect invoice identity, customer, dates, totals, and payment state.")]
|
|
169
|
-
public class Invoice : ChillEntity
|
|
170
|
-
{
|
|
171
|
-
[ChillProperty(
|
|
172
|
-
UniquePropertyKeyString: "50B1BB6C-D794-41E4-A85C-D4F9D7A6FA7E",
|
|
173
|
-
PrimaryLanguageLabel: "Invoice number",
|
|
174
|
-
SecondaryLanguageLabel: "Numero fattura",
|
|
175
|
-
MCPDescription = "Human-readable invoice number used by accountants and customers.")]
|
|
176
|
-
public string InvoiceNumber { get; set; } = string.Empty;
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
Utilizza testo `MCPDescription` chiaro su entità, query e proprietà. ChatGPT fa molto affidamento su tali descrizioni quando si scelgono gli strumenti e si creano payload di query.
|
|
181
|
-
|
|
182
|
-
ChatGPT non dovrebbe inventare oggetti di richiesta ChillSharp. Il flusso di lavoro previsto è:
|
|
183
|
-
|
|
184
|
-
1. chiamare `ChillSharp get-schema-list`
|
|
185
|
-
2. chiamare `ChillSharp get-schema` per l'entità o la query
|
|
186
|
-
3. utilizzare nomi di proprietà dello schema esatti in `Properties`
|
|
187
|
-
4. abbinare i valori a `simplePropertyType` di ciascuna proprietà
|
|
188
|
-
|
|
189
|
-
Ad esempio, utilizza stringhe JSON per `string`, numeri JSON per `int` e `decimal`, booleani JSON per `bool` e riferimenti `ChillDtoEntity` con `ChillType` e `Guid` per le proprietà `chill-entity`. Per `ResultProperties`, utilizzare oggetti come `{ "name": "InvoiceNumber" }` dallo schema di entità restituito.
|
|
190
|
-
|
|
191
|
-
Per le proprietà della query, ChatGPT dovrebbe leggere `MCPDescription` di ciascuna proprietà per dedurre il comportamento di ricerca. Se una proprietà della query non ha una descrizione o la descrizione non spiega il comportamento di corrispondenza, presuppone che la corrispondenza esatta sia uguale. Ogni query Chill accetta anche `Properties.FullTextSearch`; usalo per la ricerca di parole chiave generiche quando l'utente non richiede un filtro strutturato specifico.
|
|
192
|
-
|
|
193
|
-
`Properties.FullTextSearch` effettua ricerche contro ChillSharp `FullTextContent`. Il testo senza virgolette senza selettori avanzati viene normalizzato, suddiviso in spazi bianchi e abbinato con AND, quindi ogni token deve essere presente. Le parentesi più gli operatori `and`/`or` autonomi al di fuori delle virgolette consentono la ricerca booleana raggruppata, ad esempio `[la and nazione] or roma`. Cerca le parole letterali `and` o `or` racchiudendole tra virgolette corrispondenti, ad esempio `"and"`. Le virgolette singole o doppie corrispondenti cercano una frase normalizzata con limiti di parole: `"la nazione"` corrisponde a `bla bla la nazione bla bla` ma non a `bla bla della nazione bla bla`. Un carattere jolly `*` o `%` iniziale o finale racchiuso tra virgolette rilassa quel lato del confine, ad esempio `"*la nazione"` o `"%la nazione"` può corrispondere a `della nazione` e `"la nazione*"` può corrispondere a un suffisso. Se `*` o `%` appare nel mezzo di una frase tra virgolette, ChillSharp lo tratta come separatori di token e applica la normale corrispondenza AND dei token.
|
|
194
|
-
|
|
195
|
-
## 6. Connettiti da ChatGPT
|
|
196
|
-
|
|
197
|
-
In ChatGPT, aggiungi un connettore personalizzato o un server MCP remoto utilizzando l'URL MCP HTTPS pubblico:
|
|
198
|
-
|
|
199
|
-
```text
|
|
200
|
-
https://your-domain.example/api/chill-mcp
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
ChatGPT dovrebbe rilevare i metadati OAuth, registrarsi come client OAuth pubblico e aprire la pagina di autorizzazione di ChillSharp.
|
|
204
|
-
|
|
205
|
-
Dopo che l'utente ha effettuato l'accesso e ha acconsentito:
|
|
206
|
-
|
|
207
|
-
1. ChatGPT riceve un codice di autorizzazione.
|
|
208
|
-
2. ChatGPT scambia il codice e il verificatore PKCE con un token di accesso al portatore ChillSharp.
|
|
209
|
-
3. ChatGPT chiama l'endpoint MCP con:
|
|
210
|
-
|
|
211
|
-
```http
|
|
212
|
-
Authorization: Bearer <access-token>
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
OAuth è solo il flusso di consenso e acquisizione di token. L'endpoint MCP utilizza ancora la normale autenticazione della portante ChillSharp.
|
|
216
|
-
|
|
217
|
-
## Comportamento dei permessi
|
|
218
|
-
|
|
219
|
-
Gli utenti OAuth non sono utenti separati.
|
|
220
|
-
|
|
221
|
-
Il flusso OAuth autentica un utente ASP.NET Core Identity ed emette lo stesso tipo di token di connessione ChillSharp usato dall'accesso normale. Il token contiene le stesse attestazioni dell'identificatore utente, quindi ChillSharp risolve lo stesso `AuthUser.ExternalId` e applica gli stessi ruoli, regole di autorizzazione, autorizzazioni dello schema e limitazioni API.
|
|
222
|
-
|
|
223
|
-
Ciò significa:
|
|
224
|
-
|
|
225
|
-
- un utente bloccato da una normale operazione protetta di ChillSharp viene bloccato anche tramite ChatGPT
|
|
226
|
-
- un utente con ruolo limitato mantiene le stesse limitazioni tramite MCP
|
|
227
|
-
- La visibilità MCP richiede ancora `EnableMCP`; la visibilità della query segue la relativa entità restituita
|
|
228
|
-
- Gli ambiti OAuth attualmente non creano un livello di autorizzazione separato
|
|
229
|
-
|
|
230
|
-
## URL pubblici utili da testare
|
|
231
|
-
|
|
232
|
-
Aprili dall'esterno della rete del tuo server:
|
|
233
|
-
|
|
234
|
-
```text
|
|
235
|
-
https://your-domain.example/.well-known/oauth-authorization-server
|
|
236
|
-
https://your-domain.example/.well-known/oauth-protected-resource
|
|
237
|
-
https://your-domain.example/api/chill-mcp
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
L'URL MCP deve rifiutare l'accesso anonimo quando `ProtectedApi = true` e la risposta deve pubblicizzare i metadati delle risorse protette OAuth nell'intestazione `WWW-Authenticate`.
|
|
241
|
-
|
|
242
|
-
## Risoluzione dei problemi
|
|
243
|
-
|
|
244
|
-
### ChatGPT non può raggiungere il server
|
|
245
|
-
|
|
246
|
-
Verificare che l'URL MCP utilizzi HTTPS pubblico e non sia una rete privata o un indirizzo `localhost`.
|
|
247
|
-
|
|
248
|
-
### ChatGPT non avvia OAuth
|
|
249
|
-
|
|
250
|
-
Controllo:
|
|
251
|
-
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
-
- `AddChillAuthBearer()` è registrato
|
|
255
|
-
- `UseAuthentication()` e `UseAuthorization()` vengono eseguiti prima di `MapChillApi()`
|
|
256
|
-
- `/.well-known/oauth-authorization-server` è raggiungibile tramite HTTPS
|
|
257
|
-
- `/.well-known/oauth-protected-resource` è raggiungibile tramite HTTPS
|
|
258
|
-
|
|
259
|
-
### L'accesso riesce ma le azioni MCP sono vietate
|
|
260
|
-
|
|
261
|
-
L'accesso all'identità è riuscito, ma ChillSharp `AuthUser` collegato o i suoi ruoli non consentono l'operazione richiesta. Controlla `AuthUser.ExternalId`, assegnazioni di ruoli e regole di autorizzazione.
|
|
262
|
-
|
|
263
|
-
### ChatGPT non vede schemi utili
|
|
264
|
-
|
|
265
|
-
Verifica che l'entità o la query di destinazione sia abilitata per MCP e contenga descrizioni utili:
|
|
266
|
-
|
|
267
|
-
-
|
|
268
|
-
- entità/query `MCPDescription`
|
|
269
|
-
- `MCPDescription` a livello di proprietà
|
|
270
|
-
- tipi di query mirati per flussi di lavoro AI comuni
|
|
271
|
-
|
|
272
|
-
### Più istanze dell'app perdono le registrazioni OAuth
|
|
273
|
-
|
|
274
|
-
Il registro client OAuth dinamico integrato è attualmente in memoria. Per la produzione a più istanze o le registrazioni stabili al riavvio, mantenere le registrazioni del client OAuth nel database di autenticazione.
|
|
275
|
-
|
|
276
|
-
## Lista di controllo della produzione
|
|
277
|
-
|
|
278
|
-
- Utilizza solo HTTPS
|
|
279
|
-
- Mantieni `ProtectedApi = true`
|
|
280
|
-
- Abilita MCP solo su schemi sicuri
|
|
281
|
-
- Utilizza superfici di query mirate invece di esporre tutto
|
|
282
|
-
- Assegna a ChatGPT un utente o un ruolo con privilegi minimi
|
|
283
|
-
- Esamina gli strumenti di modifica come creazione, aggiornamento, eliminazione e blocco
|
|
284
|
-
- Mantieni le registrazioni del client OAuth se si esegue più di un'istanza dell'app
|
|
285
|
-
- Mantieni breve la durata dei token di accesso
|
|
286
|
-
|
|
287
|
-
## Documenti correlati
|
|
288
|
-
|
|
289
|
-
- [Riferimento modulo MCP](README.md)
|
|
290
|
-
- [Procedura per l'autenticazione](../HowTo/03-authentication.md)
|
|
291
|
-
- [Preparazione del modello](../ModelPreparation.md)
|