@creezio/observability 0.24.0 → 0.25.0
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/dist/.creezio-src-hash.json +2 -2
- package/dist/api-endpoints/registry.d.ts +1 -1
- package/dist/api-endpoints/registry.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/ops/emit.d.ts +1 -2
- package/dist/ops/emit.d.ts.map +1 -1
- package/dist/ops/emit.js +1 -2
- package/dist/ops/emit.js.map +1 -1
- package/dist/ops/fleet-activity.d.ts +1 -1
- package/dist/ops/fleet-activity.js +1 -1
- package/dist/ops/fleet-agent.d.ts +3 -3
- package/dist/ops/fleet-agent.js +1 -1
- package/dist/ops/fleet-samples.d.ts +1 -1
- package/dist/ops/fleet-samples.js +1 -1
- package/dist/ops/journal.d.ts +2 -2
- package/dist/ops/journal.js +2 -2
- package/dist/ops/rules.d.ts +1 -1
- package/dist/ops/rules.js +1 -1
- package/dist/ops/types.d.ts +7 -7
- package/dist/ops/types.js +7 -7
- package/dist/request-logs/http-routes.d.ts +1 -1
- package/dist/request-logs/http-routes.js +1 -1
- package/dist/request-logs/middleware.d.ts +1 -1
- package/dist/request-logs/request-logs.d.ts +1 -1
- package/dist/request-logs/request-logs.js +1 -1
- package/dist/usage/http-routes.d.ts +1 -1
- package/dist/usage/http-routes.js +1 -1
- package/dist-cjs/api-endpoints/registry.js +1 -1
- package/dist-cjs/index.js +3 -3
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/ops/emit.js +1 -2
- package/dist-cjs/ops/emit.js.map +1 -1
- package/dist-cjs/ops/fleet-activity.js +1 -1
- package/dist-cjs/ops/fleet-agent.js +1 -1
- package/dist-cjs/ops/fleet-samples.js +1 -1
- package/dist-cjs/ops/journal.js +2 -2
- package/dist-cjs/ops/rules.js +1 -1
- package/dist-cjs/ops/types.js +7 -7
- package/dist-cjs/request-logs/http-routes.js +1 -1
- package/dist-cjs/request-logs/request-logs.js +1 -1
- package/dist-cjs/usage/http-routes.js +1 -1
- package/fleet-collector/test-server-admin.mjs +64 -0
- package/package.json +4 -4
- package/ui/usage-analytics-provider.tsx +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @creezio/observability — activité / usages / CP (V2 SQLite) + boîte noire
|
|
3
|
-
* desktop ops/fleet (R4
|
|
3
|
+
* desktop ops/fleet (R4).
|
|
4
4
|
*/
|
|
5
5
|
export type { ActivityAction, ControlPlaneAction, ObservabilityEvent, ObservabilityEventKind, ObservabilityQuery, ObservabilityStore, OrgActivityAggregate, PluginUsageAggregate, RecordObservabilityEventInput, } from "./types.js";
|
|
6
6
|
export { OBSERVABILITY_EVENT_KINDS } from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @creezio/observability — activité / usages / CP (V2 SQLite) + boîte noire
|
|
3
|
-
* desktop ops/fleet (R4
|
|
3
|
+
* desktop ops/fleet (R4).
|
|
4
4
|
*/
|
|
5
5
|
export { OBSERVABILITY_EVENT_KINDS } from "./types.js";
|
|
6
6
|
export { OBSERVABILITY_CORE_SQL } from "./schema.js";
|
|
@@ -16,9 +16,9 @@ export { emitOpsEvent } from "./ops/emit.js";
|
|
|
16
16
|
export { createFleetAgent } from "./ops/fleet-agent.js";
|
|
17
17
|
export { _resetFleetActivityForTests, drainFleetActions, getFleetSessionContext, recordFleetAction, sampleFleetActions, setFleetSessionContext, } from "./ops/fleet-activity.js";
|
|
18
18
|
export { createFleetSamples } from "./ops/fleet-samples.js";
|
|
19
|
-
/* ── N6 : usage analytics
|
|
19
|
+
/* ── N6 : usage analytics ── */
|
|
20
20
|
export { configureUsageAnalytics, getUsageAnalyticsAdapters, resetUsageAnalyticsAdaptersForTests, configureUsageAnalyticsUiBrand, getUsageAnalyticsUiBrand, resetUsageAnalyticsUiBrandForTests, formatDuration, usageAnalyticsReady, ensureUsageAnalyticsSchema, insertUsageEvents, recordUsageEvent, resolvePeriodFilters, getUsageOverview, getUsageTimeline, getTopPages, getTopClicks, getUserStats, listUsageEvents, purgeUsageEvents, BREAK_MIN_MS, BREAK_MAX_MS, getProductivityReport, createUsageAnalyticsIngestRoutes, createUsageAnalyticsAdminRoutes, } from "./usage/index.js";
|
|
21
|
-
/* ── O5 : request-logs admin
|
|
21
|
+
/* ── O5 : request-logs admin ── */
|
|
22
22
|
export { configureRequestLogs, getRequestLogsConfig, resetRequestLogsConfigForTests, resolveFleetStateDir, getRequestLogCapacity, _resetRequestLogsForTests, isSecretKey, redactSecrets, pushRequestLog, listRequestLogs, clearRequestLogs, parseJsonRpcMessages, summarizeMcpRequest, summarizeMcpResponse, extractApiErrorMessage, shouldSkipRequestLog, requestLogApiMiddleware, requestLogMcpMiddleware, createRequestLogsRoutes, } from "./request-logs/index.js";
|
|
23
23
|
export { buildApiEndpointsRegistry, buildOpenApiDocumentFromRegistry, collectHonoRoutes, createApiEndpointsRoutes, } from "./api-endpoints/index.js";
|
|
24
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAMnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAMnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,gCAAgC;AAEhC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mCAAmC,EACnC,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,EAClC,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AA4B1B,mCAAmC;AAEnC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAkBjC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,EAChC,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
|
package/dist/ops/emit.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
|
|
3
|
-
* (meili-indexer, migrations…) : ligne
|
|
4
|
-
* Extrait de TempoFlow ops-emit.ts (R4).
|
|
3
|
+
* (meili-indexer, migrations…) : ligne ops JSONL sur stdout.
|
|
5
4
|
*/
|
|
6
5
|
import { type OpsEventInput } from "./types.js";
|
|
7
6
|
export declare function emitOpsEvent(evt: OpsEventInput): void;
|
package/dist/ops/emit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAMrD"}
|
package/dist/ops/emit.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
|
|
3
|
-
* (meili-indexer, migrations…) : ligne
|
|
4
|
-
* Extrait de TempoFlow ops-emit.ts (R4).
|
|
3
|
+
* (meili-indexer, migrations…) : ligne ops JSONL sur stdout.
|
|
5
4
|
*/
|
|
6
5
|
import { TF2EVENT_PREFIX } from "./types.js";
|
|
7
6
|
export function emitOpsEvent(evt) {
|
package/dist/ops/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Journal d’événements produit flotte (ring mémoire).
|
|
3
3
|
* Schema FleetProductEvent v1 — attribution session + dwell.
|
|
4
|
-
*
|
|
4
|
+
* Buffer actions flotte (M7).
|
|
5
5
|
*/
|
|
6
6
|
export type FleetSurface = "crm" | "supplier_tab" | "hermes" | "n8n" | "ai_workspace" | "system";
|
|
7
7
|
export type FleetAction = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent télémétrie flotte — heartbeat + sync opt-in.
|
|
3
|
-
*
|
|
3
|
+
* Agent flotte (R4) — endpoint / consent / IDs = hooks.
|
|
4
4
|
* Best-effort : jamais de throw vers le boot.
|
|
5
5
|
*/
|
|
6
6
|
export type FleetHealthSnapshot = {
|
|
@@ -61,8 +61,8 @@ export type FleetAgentRuntimeHooks = {
|
|
|
61
61
|
getAssistantChatsSample?: () => Array<Record<string, unknown>> | Promise<Array<Record<string, unknown>>>;
|
|
62
62
|
getActionsSample?: () => Array<Record<string, unknown>> | Promise<Array<Record<string, unknown>>>;
|
|
63
63
|
/**
|
|
64
|
-
* Champs métier marque à fusionner dans le heartbeat (ex.
|
|
65
|
-
*
|
|
64
|
+
* Champs métier marque à fusionner dans le heartbeat (ex. stats dossier)
|
|
65
|
+
* — best-effort, scope heartbeat.
|
|
66
66
|
*/
|
|
67
67
|
getHeartbeatExtras?: () => Record<string, unknown> | null | Promise<Record<string, unknown> | null>;
|
|
68
68
|
executeRemoteCommand?: (cmd: string, args?: Record<string, unknown>) => Promise<{
|
package/dist/ops/fleet-agent.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent télémétrie flotte — heartbeat + sync opt-in.
|
|
3
|
-
*
|
|
3
|
+
* Agent flotte (R4) — endpoint / consent / IDs = hooks.
|
|
4
4
|
* Best-effort : jamais de throw vers le boot.
|
|
5
5
|
*/
|
|
6
6
|
import os from "node:os";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Échantillons télémétrie flotte (best-effort, lecture seule, redactée).
|
|
3
3
|
* Pas de better-sqlite3 dans le process Electron (ABI) — spawn Node vanilla.
|
|
4
|
-
*
|
|
4
|
+
* Samples diagnostics (M7) — chemins = hooks marque.
|
|
5
5
|
*/
|
|
6
6
|
export type FleetSamplesPaths = {
|
|
7
7
|
assistantDbPath: () => string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Échantillons télémétrie flotte (best-effort, lecture seule, redactée).
|
|
3
3
|
* Pas de better-sqlite3 dans le process Electron (ABI) — spawn Node vanilla.
|
|
4
|
-
*
|
|
4
|
+
* Samples diagnostics (M7) — chemins = hooks marque.
|
|
5
5
|
*/
|
|
6
6
|
import fs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
package/dist/ops/journal.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Boîte noire desktop — journal d'événements structurés (JSONL / boot).
|
|
3
|
-
*
|
|
3
|
+
* Hooks marque pour log + anomaly.
|
|
4
4
|
*
|
|
5
5
|
* Best-effort intégral : le journal ne doit JAMAIS être une source de crash.
|
|
6
6
|
*/
|
|
@@ -37,7 +37,7 @@ export declare function trackDecision(kind: string, outcome: string, opts?: {
|
|
|
37
37
|
*/
|
|
38
38
|
export declare function trackCrashMirror(kind: string, detail: Record<string, unknown>): void;
|
|
39
39
|
/**
|
|
40
|
-
* Ligne stdout d'un sous-process : consommée si
|
|
40
|
+
* Ligne stdout d'un sous-process : consommée si préfixe ops + JSON.
|
|
41
41
|
* Renvoie true si la ligne était un événement (à ne pas logger en texte).
|
|
42
42
|
*/
|
|
43
43
|
export declare function consumeOpsLine(source: string, line: string): boolean;
|
package/dist/ops/journal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Boîte noire desktop — journal d'événements structurés (JSONL / boot).
|
|
3
|
-
*
|
|
3
|
+
* Hooks marque pour log + anomaly.
|
|
4
4
|
*
|
|
5
5
|
* Best-effort intégral : le journal ne doit JAMAIS être une source de crash.
|
|
6
6
|
*/
|
|
@@ -194,7 +194,7 @@ export function trackCrashMirror(kind, detail) {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
/**
|
|
197
|
-
* Ligne stdout d'un sous-process : consommée si
|
|
197
|
+
* Ligne stdout d'un sous-process : consommée si préfixe ops + JSON.
|
|
198
198
|
* Renvoie true si la ligne était un événement (à ne pas logger en texte).
|
|
199
199
|
*/
|
|
200
200
|
export function consumeOpsLine(source, line) {
|
package/dist/ops/rules.d.ts
CHANGED
package/dist/ops/rules.js
CHANGED
package/dist/ops/types.d.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Boîte noire desktop — types + helpers PURS (aucun import Electron).
|
|
3
|
-
* Contrat JSONL ops (R4 / P29) — préfixe d'émission historique
|
|
4
|
-
* conservé (wire sous-process Electron ×3). Lecture
|
|
5
|
-
*
|
|
3
|
+
* Contrat JSONL ops (R4 / P29) — préfixe d'émission filaire historique
|
|
4
|
+
* conservé (wire sous-process Electron ×3). Lecture via `OPS_EVENT_PREFIXES` ;
|
|
5
|
+
* ne pas changer le préfixe d'émission sans cutover des installs existantes.
|
|
6
6
|
*/
|
|
7
7
|
export declare const TF2EVENT_PREFIX = "TF2EVENT ";
|
|
8
8
|
/** Alias générique — même valeur que `TF2EVENT_PREFIX` (émission). */
|
|
9
9
|
export declare const OPS_EVENT_PREFIX = "TF2EVENT ";
|
|
10
10
|
/**
|
|
11
|
-
* Préfixes stdout acceptés en lecture (M7p / P29)
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* Préfixes stdout acceptés en lecture (M7p / P29).
|
|
12
|
+
* L'émission SoT reste le préfixe filaire historique ; un alias de lecture
|
|
13
|
+
* est conservé pour les journaux déjà écrits (contrat wire, pas un fallback env).
|
|
14
14
|
*/
|
|
15
15
|
export declare const OPS_EVENT_PREFIXES: readonly ["TF2EVENT ", "CertivanEVENT "];
|
|
16
16
|
export type OpsLevel = "decision" | "event" | "anomaly" | "error" | "crash";
|
|
@@ -47,7 +47,7 @@ export declare function sanitizeOpsEventInput(raw: unknown): OpsEventInput | nul
|
|
|
47
47
|
export declare function serializeOpsEvent(evt: OpsEvent): string;
|
|
48
48
|
/**
|
|
49
49
|
* Parse une ligne stdout d'un sous-process.
|
|
50
|
-
* Renvoie l'input si la ligne est un
|
|
50
|
+
* Renvoie l'input si la ligne est un événement ops valide, sinon null.
|
|
51
51
|
*/
|
|
52
52
|
export declare function parseOpsLine(line: string): OpsEventInput | null;
|
|
53
53
|
/** Résumé d'un boot (ops/index.json + heartbeat flotte). */
|
package/dist/ops/types.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Boîte noire desktop — types + helpers PURS (aucun import Electron).
|
|
3
|
-
* Contrat JSONL ops (R4 / P29) — préfixe d'émission historique
|
|
4
|
-
* conservé (wire sous-process Electron ×3). Lecture
|
|
5
|
-
*
|
|
3
|
+
* Contrat JSONL ops (R4 / P29) — préfixe d'émission filaire historique
|
|
4
|
+
* conservé (wire sous-process Electron ×3). Lecture via `OPS_EVENT_PREFIXES` ;
|
|
5
|
+
* ne pas changer le préfixe d'émission sans cutover des installs existantes.
|
|
6
6
|
*/
|
|
7
7
|
export const TF2EVENT_PREFIX = "TF2EVENT ";
|
|
8
8
|
/** Alias générique — même valeur que `TF2EVENT_PREFIX` (émission). */
|
|
9
9
|
export const OPS_EVENT_PREFIX = TF2EVENT_PREFIX;
|
|
10
10
|
/**
|
|
11
|
-
* Préfixes stdout acceptés en lecture (M7p / P29)
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* Préfixes stdout acceptés en lecture (M7p / P29).
|
|
12
|
+
* L'émission SoT reste le préfixe filaire historique ; un alias de lecture
|
|
13
|
+
* est conservé pour les journaux déjà écrits (contrat wire, pas un fallback env).
|
|
14
14
|
*/
|
|
15
15
|
export const OPS_EVENT_PREFIXES = [
|
|
16
16
|
TF2EVENT_PREFIX,
|
|
@@ -100,7 +100,7 @@ export function serializeOpsEvent(evt) {
|
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
102
|
* Parse une ligne stdout d'un sous-process.
|
|
103
|
-
* Renvoie l'input si la ligne est un
|
|
103
|
+
* Renvoie l'input si la ligne est un événement ops valide, sinon null.
|
|
104
104
|
*/
|
|
105
105
|
export function parseOpsLine(line) {
|
|
106
106
|
const trimmed = line.trim();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin — lecture / purge des logs API + MCP (session UI).
|
|
3
3
|
* Hono « nu » : hors doc OpenAPI publique.
|
|
4
|
-
* O5 —
|
|
4
|
+
* O5 — gold. Auth owner reste côté marque (montage).
|
|
5
5
|
*/
|
|
6
6
|
import { Hono } from "hono";
|
|
7
7
|
export declare function createRequestLogsRoutes(): Hono;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Admin — lecture / purge des logs API + MCP (session UI).
|
|
3
3
|
* Hono « nu » : hors doc OpenAPI publique.
|
|
4
|
-
* O5 —
|
|
4
|
+
* O5 — gold. Auth owner reste côté marque (montage).
|
|
5
5
|
*/
|
|
6
6
|
import { Hono } from "hono";
|
|
7
7
|
import { clearRequestLogs, listRequestLogs, } from "./request-logs.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Middlewares de collecte des logs API / MCP → ring buffer mémoire.
|
|
3
3
|
* Ne doit jamais faire échouer la requête (tout est try/catch).
|
|
4
|
-
* O5 —
|
|
4
|
+
* O5 — gold.
|
|
5
5
|
*/
|
|
6
6
|
import type { MiddlewareHandler } from "hono";
|
|
7
7
|
/** Middleware API v1 — à brancher tôt (avant auth). */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ring buffer en mémoire des appels API v1 + MCP (diagnostic desktop).
|
|
3
3
|
* Pas de persistance SQLite pour le MVP — process-local, max ~1000 entrées.
|
|
4
|
-
* O5 —
|
|
4
|
+
* O5 — gold, marque-agnostique.
|
|
5
5
|
*/
|
|
6
6
|
export type RequestLogSource = "api" | "mcp";
|
|
7
7
|
export type RequestLogDetail = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ring buffer en mémoire des appels API v1 + MCP (diagnostic desktop).
|
|
3
3
|
* Pas de persistance SQLite pour le MVP — process-local, max ~1000 entrées.
|
|
4
|
-
* O5 —
|
|
4
|
+
* O5 — gold, marque-agnostique.
|
|
5
5
|
*/
|
|
6
6
|
import fs from "node:fs";
|
|
7
7
|
import path from "node:path";
|
package/dist-cjs/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* @creezio/observability — activité / usages / CP (V2 SQLite) + boîte noire
|
|
4
|
-
* desktop ops/fleet (R4
|
|
4
|
+
* desktop ops/fleet (R4).
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.formatDuration = exports.resetUsageAnalyticsUiBrandForTests = exports.getUsageAnalyticsUiBrand = exports.configureUsageAnalyticsUiBrand = exports.resetUsageAnalyticsAdaptersForTests = exports.getUsageAnalyticsAdapters = exports.configureUsageAnalytics = exports.createFleetSamples = exports.setFleetSessionContext = exports.sampleFleetActions = exports.recordFleetAction = exports.getFleetSessionContext = exports.drainFleetActions = exports._resetFleetActivityForTests = exports.createFleetAgent = exports.emitOpsEvent = exports.evaluateRulesPure = exports.evaluateBootRules = exports.trackExternal = exports.trackDecision = exports.trackCrashMirror = exports.track = exports.setOpsJournalHooks = exports.readPreviousBootSummaries = exports.persistBootSummary = exports.initOpsJournal = exports.getOpsDir = exports.getOpsBootId = exports.drainPendingOpsEvents = exports.currentBootSummary = exports.consumeOpsLine = exports.__resetOpsJournalForTests = exports.serializeOpsEvent = exports.sanitizeOpsEventInput = exports.redactOpsCtx = exports.parseOpsLine = exports.TF2EVENT_PREFIX = exports.OPS_LEVELS = exports.OPS_EVENT_PREFIXES = exports.OPS_EVENT_PREFIX = exports.MAX_CTX_BYTES = exports.createObservabilityApiMount = exports.recordPluginUsage = exports.recordControlPlaneEvent = exports.recordActivity = exports.openNodeSqliteDatabase = exports.createSqliteObservabilityStore = exports.createMemoryObservabilityStore = exports.OBSERVABILITY_CORE_SQL = exports.OBSERVABILITY_EVENT_KINDS = void 0;
|
|
@@ -63,7 +63,7 @@ Object.defineProperty(exports, "sampleFleetActions", { enumerable: true, get: fu
|
|
|
63
63
|
Object.defineProperty(exports, "setFleetSessionContext", { enumerable: true, get: function () { return fleet_activity_js_1.setFleetSessionContext; } });
|
|
64
64
|
var fleet_samples_js_1 = require("./ops/fleet-samples.js");
|
|
65
65
|
Object.defineProperty(exports, "createFleetSamples", { enumerable: true, get: function () { return fleet_samples_js_1.createFleetSamples; } });
|
|
66
|
-
/* ── N6 : usage analytics
|
|
66
|
+
/* ── N6 : usage analytics ── */
|
|
67
67
|
var index_js_1 = require("./usage/index.js");
|
|
68
68
|
Object.defineProperty(exports, "configureUsageAnalytics", { enumerable: true, get: function () { return index_js_1.configureUsageAnalytics; } });
|
|
69
69
|
Object.defineProperty(exports, "getUsageAnalyticsAdapters", { enumerable: true, get: function () { return index_js_1.getUsageAnalyticsAdapters; } });
|
|
@@ -89,7 +89,7 @@ Object.defineProperty(exports, "BREAK_MAX_MS", { enumerable: true, get: function
|
|
|
89
89
|
Object.defineProperty(exports, "getProductivityReport", { enumerable: true, get: function () { return index_js_1.getProductivityReport; } });
|
|
90
90
|
Object.defineProperty(exports, "createUsageAnalyticsIngestRoutes", { enumerable: true, get: function () { return index_js_1.createUsageAnalyticsIngestRoutes; } });
|
|
91
91
|
Object.defineProperty(exports, "createUsageAnalyticsAdminRoutes", { enumerable: true, get: function () { return index_js_1.createUsageAnalyticsAdminRoutes; } });
|
|
92
|
-
/* ── O5 : request-logs admin
|
|
92
|
+
/* ── O5 : request-logs admin ── */
|
|
93
93
|
var index_js_2 = require("./request-logs/index.js");
|
|
94
94
|
Object.defineProperty(exports, "configureRequestLogs", { enumerable: true, get: function () { return index_js_2.configureRequestLogs; } });
|
|
95
95
|
Object.defineProperty(exports, "getRequestLogsConfig", { enumerable: true, get: function () { return index_js_2.getRequestLogsConfig; } });
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAaH,uCAAuD;AAA9C,qHAAA,yBAAyB,OAAA;AAElC,yCAAqD;AAA5C,mHAAA,sBAAsB,OAAA;AAE/B,qDAAmE;AAA1D,iIAAA,8BAA8B,OAAA;AAMvC,qDAAmE;AAA1D,iIAAA,8BAA8B,OAAA;AAGvC,uDAA4D;AAAnD,0HAAA,sBAAsB,OAAA;AAG/B,2CAIsB;AAHpB,4GAAA,cAAc,OAAA;AACd,qHAAA,uBAAuB,OAAA;AACvB,+GAAA,iBAAiB,OAAA;AAGnB,+CAA6D;AAApD,2HAAA,2BAA2B,OAAA;AAUpC,2CAUwB;AATtB,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAChB,8GAAA,kBAAkB,OAAA;AAClB,sGAAA,UAAU,OAAA;AACV,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,iHAAA,qBAAqB,OAAA;AACrB,6GAAA,iBAAiB,OAAA;AAInB,+CAe0B;AAdxB,uHAAA,yBAAyB,OAAA;AACzB,4GAAA,cAAc,OAAA;AACd,gHAAA,kBAAkB,OAAA;AAClB,mHAAA,qBAAqB,OAAA;AACrB,0GAAA,YAAY,OAAA;AACZ,uGAAA,SAAS,OAAA;AACT,4GAAA,cAAc,OAAA;AACd,gHAAA,kBAAkB,OAAA;AAClB,uHAAA,yBAAyB,OAAA;AACzB,gHAAA,kBAAkB,OAAA;AAClB,mGAAA,KAAK,OAAA;AACL,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AACb,2GAAA,aAAa,OAAA;AAIf,2CAAsE;AAA7D,6GAAA,iBAAiB,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAE7C,yCAA6C;AAApC,uGAAA,YAAY,OAAA;AASrB,uDAAwD;AAA/C,kHAAA,gBAAgB,OAAA;AASzB,6DAOiC;AAN/B,gIAAA,2BAA2B,OAAA;AAC3B,sHAAA,iBAAiB,OAAA;AACjB,2HAAA,sBAAsB,OAAA;AACtB,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,2HAAA,sBAAsB,OAAA;AAIxB,2DAA4D;AAAnD,sHAAA,kBAAkB,OAAA;AAE3B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist-cjs/ops/emit.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
|
|
4
|
-
* (meili-indexer, migrations…) : ligne
|
|
5
|
-
* Extrait de TempoFlow ops-emit.ts (R4).
|
|
4
|
+
* (meili-indexer, migrations…) : ligne ops JSONL sur stdout.
|
|
6
5
|
*/
|
|
7
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
7
|
exports.emitOpsEvent = emitOpsEvent;
|
package/dist-cjs/ops/emit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAIH,oCAMC;AARD,yCAAiE;AAEjE,SAAgB,YAAY,CAAC,GAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,0BAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Journal d’événements produit flotte (ring mémoire).
|
|
4
4
|
* Schema FleetProductEvent v1 — attribution session + dwell.
|
|
5
|
-
*
|
|
5
|
+
* Buffer actions flotte (M7).
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
exports.setFleetSessionContext = setFleetSessionContext;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Agent télémétrie flotte — heartbeat + sync opt-in.
|
|
4
|
-
*
|
|
4
|
+
* Agent flotte (R4) — endpoint / consent / IDs = hooks.
|
|
5
5
|
* Best-effort : jamais de throw vers le boot.
|
|
6
6
|
*/
|
|
7
7
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Échantillons télémétrie flotte (best-effort, lecture seule, redactée).
|
|
4
4
|
* Pas de better-sqlite3 dans le process Electron (ABI) — spawn Node vanilla.
|
|
5
|
-
*
|
|
5
|
+
* Samples diagnostics (M7) — chemins = hooks marque.
|
|
6
6
|
*/
|
|
7
7
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
package/dist-cjs/ops/journal.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Boîte noire desktop — journal d'événements structurés (JSONL / boot).
|
|
4
|
-
*
|
|
4
|
+
* Hooks marque pour log + anomaly.
|
|
5
5
|
*
|
|
6
6
|
* Best-effort intégral : le journal ne doit JAMAIS être une source de crash.
|
|
7
7
|
*/
|
|
@@ -213,7 +213,7 @@ function trackCrashMirror(kind, detail) {
|
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
215
|
/**
|
|
216
|
-
* Ligne stdout d'un sous-process : consommée si
|
|
216
|
+
* Ligne stdout d'un sous-process : consommée si préfixe ops + JSON.
|
|
217
217
|
* Renvoie true si la ligne était un événement (à ne pas logger en texte).
|
|
218
218
|
*/
|
|
219
219
|
function consumeOpsLine(source, line) {
|
package/dist-cjs/ops/rules.js
CHANGED
package/dist-cjs/ops/types.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* Boîte noire desktop — types + helpers PURS (aucun import Electron).
|
|
4
|
-
* Contrat JSONL ops (R4 / P29) — préfixe d'émission historique
|
|
5
|
-
* conservé (wire sous-process Electron ×3). Lecture
|
|
6
|
-
*
|
|
4
|
+
* Contrat JSONL ops (R4 / P29) — préfixe d'émission filaire historique
|
|
5
|
+
* conservé (wire sous-process Electron ×3). Lecture via `OPS_EVENT_PREFIXES` ;
|
|
6
|
+
* ne pas changer le préfixe d'émission sans cutover des installs existantes.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.MAX_CTX_BYTES = exports.OPS_LEVELS = exports.OPS_EVENT_PREFIXES = exports.OPS_EVENT_PREFIX = exports.TF2EVENT_PREFIX = void 0;
|
|
@@ -15,9 +15,9 @@ exports.TF2EVENT_PREFIX = "TF2EVENT ";
|
|
|
15
15
|
/** Alias générique — même valeur que `TF2EVENT_PREFIX` (émission). */
|
|
16
16
|
exports.OPS_EVENT_PREFIX = exports.TF2EVENT_PREFIX;
|
|
17
17
|
/**
|
|
18
|
-
* Préfixes stdout acceptés en lecture (M7p / P29)
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* Préfixes stdout acceptés en lecture (M7p / P29).
|
|
19
|
+
* L'émission SoT reste le préfixe filaire historique ; un alias de lecture
|
|
20
|
+
* est conservé pour les journaux déjà écrits (contrat wire, pas un fallback env).
|
|
21
21
|
*/
|
|
22
22
|
exports.OPS_EVENT_PREFIXES = [
|
|
23
23
|
exports.TF2EVENT_PREFIX,
|
|
@@ -107,7 +107,7 @@ function serializeOpsEvent(evt) {
|
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
109
109
|
* Parse une ligne stdout d'un sous-process.
|
|
110
|
-
* Renvoie l'input si la ligne est un
|
|
110
|
+
* Renvoie l'input si la ligne est un événement ops valide, sinon null.
|
|
111
111
|
*/
|
|
112
112
|
function parseOpsLine(line) {
|
|
113
113
|
const trimmed = line.trim();
|
|
@@ -4,7 +4,7 @@ exports.createRequestLogsRoutes = createRequestLogsRoutes;
|
|
|
4
4
|
/**
|
|
5
5
|
* Admin — lecture / purge des logs API + MCP (session UI).
|
|
6
6
|
* Hono « nu » : hors doc OpenAPI publique.
|
|
7
|
-
* O5 —
|
|
7
|
+
* O5 — gold. Auth owner reste côté marque (montage).
|
|
8
8
|
*/
|
|
9
9
|
const hono_1 = require("hono");
|
|
10
10
|
const request_logs_js_1 = require("./request-logs.js");
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Ring buffer en mémoire des appels API v1 + MCP (diagnostic desktop).
|
|
4
4
|
* Pas de persistance SQLite pour le MVP — process-local, max ~1000 entrées.
|
|
5
|
-
* O5 —
|
|
5
|
+
* O5 — gold, marque-agnostique.
|
|
6
6
|
*/
|
|
7
7
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
8
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createUsageAnalyticsIngestRoutes = createUsageAnalyticsIngestRoutes;
|
|
4
4
|
exports.createUsageAnalyticsAdminRoutes = createUsageAnalyticsAdminRoutes;
|
|
5
5
|
/**
|
|
6
|
-
* Routes Hono usage analytics — ingest + admin (
|
|
6
|
+
* Routes Hono usage analytics — ingest + admin (N6).
|
|
7
7
|
* Auth owner pour admin reste côté marque (montage).
|
|
8
8
|
*/
|
|
9
9
|
const hono_1 = require("hono");
|
|
@@ -246,6 +246,70 @@ try {
|
|
|
246
246
|
assert.deepEqual(hosts.json.hosts, []);
|
|
247
247
|
assert.ok(hosts.json.refreshedAt, "refreshedAt attendu sur /hosts");
|
|
248
248
|
|
|
249
|
+
// agent up pousse l'URL dédiée (POST /admin/api/hosts/agent-url, pas de Basic).
|
|
250
|
+
const tok = await req(
|
|
251
|
+
"POST",
|
|
252
|
+
"/admin/api/hosts/enroll-token",
|
|
253
|
+
JSON.stringify({ label: "gate-agenturl" }),
|
|
254
|
+
{ Authorization: BASIC },
|
|
255
|
+
);
|
|
256
|
+
assert.equal(tok.status, 200);
|
|
257
|
+
assert.ok(tok.json.enrollToken);
|
|
258
|
+
const enroll = await req(
|
|
259
|
+
"POST",
|
|
260
|
+
"/admin/api/enroll",
|
|
261
|
+
JSON.stringify({
|
|
262
|
+
enrollToken: tok.json.enrollToken,
|
|
263
|
+
hostId: "host-gate",
|
|
264
|
+
label: "gate",
|
|
265
|
+
agentUrl: "https://agent.resto.example.test",
|
|
266
|
+
agentToken: "agent-tok-gate-1",
|
|
267
|
+
}),
|
|
268
|
+
);
|
|
269
|
+
assert.equal(enroll.status, 200, enroll.raw);
|
|
270
|
+
assert.equal(enroll.json.ok, true);
|
|
271
|
+
const pushUrl = await req(
|
|
272
|
+
"POST",
|
|
273
|
+
"/admin/api/hosts/agent-url",
|
|
274
|
+
JSON.stringify({
|
|
275
|
+
hostId: "host-gate",
|
|
276
|
+
agentUrl: "https://agent-resto.example.test/",
|
|
277
|
+
agentToken: "agent-tok-gate-1",
|
|
278
|
+
}),
|
|
279
|
+
);
|
|
280
|
+
assert.equal(pushUrl.status, 200, pushUrl.raw);
|
|
281
|
+
assert.equal(pushUrl.json.ok, true);
|
|
282
|
+
assert.equal(pushUrl.json.agentUrl, "https://agent-resto.example.test");
|
|
283
|
+
assert.equal(pushUrl.json.changed, true);
|
|
284
|
+
const hostsFile = JSON.parse(
|
|
285
|
+
fs.readFileSync(path.join(BRAND_ROOT, "docker-data", "fleet-hosts.json"), "utf8"),
|
|
286
|
+
);
|
|
287
|
+
assert.equal(
|
|
288
|
+
hostsFile.hosts[0].agentUrl,
|
|
289
|
+
"https://agent-resto.example.test",
|
|
290
|
+
"fleet-hosts.json : plus l'URL nested partagée",
|
|
291
|
+
);
|
|
292
|
+
const badTok = await req(
|
|
293
|
+
"POST",
|
|
294
|
+
"/admin/api/hosts/agent-url",
|
|
295
|
+
JSON.stringify({
|
|
296
|
+
hostId: "host-gate",
|
|
297
|
+
agentUrl: "https://agent-resto.example.test",
|
|
298
|
+
agentToken: "wrong",
|
|
299
|
+
}),
|
|
300
|
+
);
|
|
301
|
+
assert.equal(badTok.status, 401);
|
|
302
|
+
const noHttps = await req(
|
|
303
|
+
"POST",
|
|
304
|
+
"/admin/api/hosts/agent-url",
|
|
305
|
+
JSON.stringify({
|
|
306
|
+
hostId: "host-gate",
|
|
307
|
+
agentUrl: "http://agent-resto.example.test",
|
|
308
|
+
agentToken: "agent-tok-gate-1",
|
|
309
|
+
}),
|
|
310
|
+
);
|
|
311
|
+
assert.equal(noHttps.status, 400);
|
|
312
|
+
|
|
249
313
|
// Ops JSONL : événements parsés, lignes invalides ignorées.
|
|
250
314
|
const ops = await req(
|
|
251
315
|
"GET",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@creezio/observability",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "Observabilité — activité/CP + ops/fleet + fleet-collector (P25) + usage analytics (N6) + request-logs admin (O5)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist-cjs/index.js",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"test:api-endpoints": "node scripts/test-api-endpoints-registry.mjs"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@creezio/api-kernel": "^0.
|
|
42
|
-
"@creezio/fleet": "^0.
|
|
43
|
-
"@creezio/platform-core": "^0.
|
|
41
|
+
"@creezio/api-kernel": "^0.25.0",
|
|
42
|
+
"@creezio/fleet": "^0.25.0",
|
|
43
|
+
"@creezio/platform-core": "^0.25.0",
|
|
44
44
|
"hono": "^4.12.32"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Monte le tracker d'usage local : session, page views (dwell), capture clics.
|
|
5
5
|
* Persiste via /api/v1/analytics/events (SQLite) + miroir flotte Electron.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* N6. Session injectée (pas de `@/` marque).
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { useEffect, useRef, type ReactNode } from "react";
|