@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.
Files changed (46) hide show
  1. package/dist/.creezio-src-hash.json +2 -2
  2. package/dist/api-endpoints/registry.d.ts +1 -1
  3. package/dist/api-endpoints/registry.js +1 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +3 -3
  6. package/dist/index.js.map +1 -1
  7. package/dist/ops/emit.d.ts +1 -2
  8. package/dist/ops/emit.d.ts.map +1 -1
  9. package/dist/ops/emit.js +1 -2
  10. package/dist/ops/emit.js.map +1 -1
  11. package/dist/ops/fleet-activity.d.ts +1 -1
  12. package/dist/ops/fleet-activity.js +1 -1
  13. package/dist/ops/fleet-agent.d.ts +3 -3
  14. package/dist/ops/fleet-agent.js +1 -1
  15. package/dist/ops/fleet-samples.d.ts +1 -1
  16. package/dist/ops/fleet-samples.js +1 -1
  17. package/dist/ops/journal.d.ts +2 -2
  18. package/dist/ops/journal.js +2 -2
  19. package/dist/ops/rules.d.ts +1 -1
  20. package/dist/ops/rules.js +1 -1
  21. package/dist/ops/types.d.ts +7 -7
  22. package/dist/ops/types.js +7 -7
  23. package/dist/request-logs/http-routes.d.ts +1 -1
  24. package/dist/request-logs/http-routes.js +1 -1
  25. package/dist/request-logs/middleware.d.ts +1 -1
  26. package/dist/request-logs/request-logs.d.ts +1 -1
  27. package/dist/request-logs/request-logs.js +1 -1
  28. package/dist/usage/http-routes.d.ts +1 -1
  29. package/dist/usage/http-routes.js +1 -1
  30. package/dist-cjs/api-endpoints/registry.js +1 -1
  31. package/dist-cjs/index.js +3 -3
  32. package/dist-cjs/index.js.map +1 -1
  33. package/dist-cjs/ops/emit.js +1 -2
  34. package/dist-cjs/ops/emit.js.map +1 -1
  35. package/dist-cjs/ops/fleet-activity.js +1 -1
  36. package/dist-cjs/ops/fleet-agent.js +1 -1
  37. package/dist-cjs/ops/fleet-samples.js +1 -1
  38. package/dist-cjs/ops/journal.js +2 -2
  39. package/dist-cjs/ops/rules.js +1 -1
  40. package/dist-cjs/ops/types.js +7 -7
  41. package/dist-cjs/request-logs/http-routes.js +1 -1
  42. package/dist-cjs/request-logs/request-logs.js +1 -1
  43. package/dist-cjs/usage/http-routes.js +1 -1
  44. package/fleet-collector/test-server-admin.mjs +64 -0
  45. package/package.json +4 -4
  46. package/ui/usage-analytics-provider.tsx +1 -1
@@ -1,4 +1,4 @@
1
1
  {
2
- "srcHash": "f55dae2107e89fb49c6f8b18dac98a2db469d0688ad0e94142ea71edbd143489",
3
- "generatedAt": "2026-09-02T14:42:55.203Z"
2
+ "srcHash": "55b305e51c5e881ef6595653a70ecda49bda6764a6301e4e1f3f6f253aa40aa0",
3
+ "generatedAt": "2026-09-02T18:27:10.885Z"
4
4
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Registre Admin des endpoints runtime (port TempoFlow O5 — gold).
2
+ * Registre Admin des endpoints runtime (O5 — gold).
3
3
  * Enrichit les routes réellement montées avec les métadonnées OpenAPI
4
4
  * quand un document est fourni.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Registre Admin des endpoints runtime (port TempoFlow O5 — gold).
2
+ * Registre Admin des endpoints runtime (O5 — gold).
3
3
  * Enrichit les routes réellement montées avec les métadonnées OpenAPI
4
4
  * quand un document est fourni.
5
5
  */
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, extrait TempoFlow).
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, extrait TempoFlow).
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 (port TempoFlow) ── */
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 (port TempoFlow) ── */
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,iDAAiD;AAEjD,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,oDAAoD;AAEpD,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"}
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"}
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
3
- * (meili-indexer, migrations…) : ligne `TF2EVENT {json}` sur stdout.
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;
@@ -1 +1 @@
1
- {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAMrD"}
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 `TF2EVENT {json}` sur stdout.
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;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
+ {"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
- * Extrait TempoFlow fleet-activity.ts (M7).
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,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
- * Extrait TempoFlow fleet-activity.ts (M7).
4
+ * Buffer actions flotte (M7).
5
5
  */
6
6
  const MAX = 800;
7
7
  const ring = [];
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Agent télémétrie flotte — heartbeat + sync opt-in.
3
- * Extrait de TempoFlow fleet-agent.ts (R4) — endpoint / consent / IDs = hooks.
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. dossierStats
65
- * Certivan) — best-effort, scope heartbeat.
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<{
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Agent télémétrie flotte — heartbeat + sync opt-in.
3
- * Extrait de TempoFlow fleet-agent.ts (R4) — endpoint / consent / IDs = hooks.
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
- * Extrait TempoFlow fleet-samples.ts (M7) — chemins = hooks marque.
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
- * Extrait TempoFlow fleet-samples.ts (M7) — chemins = hooks marque.
4
+ * Samples diagnostics (M7) — chemins = hooks marque.
5
5
  */
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Boîte noire desktop — journal d'événements structurés (JSONL / boot).
3
- * Extrait de TempoFlow ops-journal.ts (R4). Hooks marque pour log + anomaly.
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 `TF2EVENT {json}`.
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;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Boîte noire desktop — journal d'événements structurés (JSONL / boot).
3
- * Extrait de TempoFlow ops-journal.ts (R4). Hooks marque pour log + anomaly.
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 `TF2EVENT {json}`.
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) {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Boîte noire — moteur d'anomalies générique.
3
- * Extrait de TempoFlow ops-rules.ts (R4).
3
+ * Règles boot ops (R4).
4
4
  */
5
5
  import type { OpsBootSummary } from "./types.js";
6
6
  export type BootRuleFinding = {
package/dist/ops/rules.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Boîte noire — moteur d'anomalies générique.
3
- * Extrait de TempoFlow ops-rules.ts (R4).
3
+ * Règles boot ops (R4).
4
4
  */
5
5
  import { currentBootSummary, readPreviousBootSummaries, track, } from "./journal.js";
6
6
  /**
@@ -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 `TF2EVENT`
4
- * conservé (wire sous-process Electron ×3). Lecture = dual-read via
5
- * `OPS_EVENT_PREFIXES` ; ne pas retirer `TF2EVENT` sans cutover marques.
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
- * - émission SoT = `TF2EVENT`
13
- * - `CertivanEVENT` = dual-read legacy marques (ne pas casser)
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 TF2EVENT valide, sinon null.
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 `TF2EVENT`
4
- * conservé (wire sous-process Electron ×3). Lecture = dual-read via
5
- * `OPS_EVENT_PREFIXES` ; ne pas retirer `TF2EVENT` sans cutover marques.
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
- * - émission SoT = `TF2EVENT`
13
- * - `CertivanEVENT` = dual-read legacy marques (ne pas casser)
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 TF2EVENT valide, sinon null.
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 — extrait TempoFlow (gold). Auth owner reste côté marque (montage).
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 — extrait TempoFlow (gold). Auth owner reste côté marque (montage).
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 — extrait TempoFlow (gold).
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 — extrait TempoFlow (gold), marque-agnostique.
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 — extrait TempoFlow (gold), marque-agnostique.
4
+ * O5 — gold, marque-agnostique.
5
5
  */
6
6
  import fs from "node:fs";
7
7
  import path from "node:path";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Routes Hono usage analytics — ingest + admin (port TempoFlow — N6).
2
+ * Routes Hono usage analytics — ingest + admin (N6).
3
3
  * Auth owner pour admin reste côté marque (montage).
4
4
  */
5
5
  import { Hono } from "hono";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Routes Hono usage analytics — ingest + admin (port TempoFlow — N6).
2
+ * Routes Hono usage analytics — ingest + admin (N6).
3
3
  * Auth owner pour admin reste côté marque (montage).
4
4
  */
5
5
  import { Hono } from "hono";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * Registre Admin des endpoints runtime (port TempoFlow O5 — gold).
3
+ * Registre Admin des endpoints runtime (O5 — gold).
4
4
  * Enrichit les routes réellement montées avec les métadonnées OpenAPI
5
5
  * quand un document est fourni.
6
6
  */
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, extrait TempoFlow).
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 (port TempoFlow) ── */
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 (port TempoFlow) ── */
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; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -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 `TF2EVENT {json}` sur stdout.
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;
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;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"}
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
- * Extrait TempoFlow fleet-activity.ts (M7).
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
- * Extrait de TempoFlow fleet-agent.ts (R4) — endpoint / consent / IDs = hooks.
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
- * Extrait TempoFlow fleet-samples.ts (M7) — chemins = hooks marque.
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 };
@@ -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
- * Extrait de TempoFlow ops-journal.ts (R4). Hooks marque pour log + anomaly.
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 `TF2EVENT {json}`.
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) {
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Boîte noire — moteur d'anomalies générique.
4
- * Extrait de TempoFlow ops-rules.ts (R4).
4
+ * Règles boot ops (R4).
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.evaluateRulesPure = evaluateRulesPure;
@@ -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 `TF2EVENT`
5
- * conservé (wire sous-process Electron ×3). Lecture = dual-read via
6
- * `OPS_EVENT_PREFIXES` ; ne pas retirer `TF2EVENT` sans cutover marques.
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
- * - émission SoT = `TF2EVENT`
20
- * - `CertivanEVENT` = dual-read legacy marques (ne pas casser)
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 TF2EVENT valide, sinon null.
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 — extrait TempoFlow (gold). Auth owner reste côté marque (montage).
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 — extrait TempoFlow (gold), marque-agnostique.
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 (port TempoFlow — N6).
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.24.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.24.0",
42
- "@creezio/fleet": "^0.24.0",
43
- "@creezio/platform-core": "^0.24.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
- * Port TempoFlow — N6. Session injectée (pas de `@/` marque).
7
+ * N6. Session injectée (pas de `@/` marque).
8
8
  */
9
9
 
10
10
  import { useEffect, useRef, type ReactNode } from "react";