twining-mcp 1.4.2 → 1.5.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 (44) hide show
  1. package/README.md +51 -2
  2. package/dist/analytics/analytics-engine.d.ts +18 -0
  3. package/dist/analytics/analytics-engine.d.ts.map +1 -0
  4. package/dist/analytics/analytics-engine.js +114 -0
  5. package/dist/analytics/analytics-engine.js.map +1 -0
  6. package/dist/analytics/instrumented-server.d.ts +12 -0
  7. package/dist/analytics/instrumented-server.d.ts.map +1 -0
  8. package/dist/analytics/instrumented-server.js +76 -0
  9. package/dist/analytics/instrumented-server.js.map +1 -0
  10. package/dist/analytics/metrics-collector.d.ts +15 -0
  11. package/dist/analytics/metrics-collector.d.ts.map +1 -0
  12. package/dist/analytics/metrics-collector.js +36 -0
  13. package/dist/analytics/metrics-collector.js.map +1 -0
  14. package/dist/analytics/metrics-store.d.ts +20 -0
  15. package/dist/analytics/metrics-store.d.ts.map +1 -0
  16. package/dist/analytics/metrics-store.js +109 -0
  17. package/dist/analytics/metrics-store.js.map +1 -0
  18. package/dist/analytics/telemetry-client.d.ts +19 -0
  19. package/dist/analytics/telemetry-client.d.ts.map +1 -0
  20. package/dist/analytics/telemetry-client.js +137 -0
  21. package/dist/analytics/telemetry-client.js.map +1 -0
  22. package/dist/config.d.ts.map +1 -1
  23. package/dist/config.js +10 -0
  24. package/dist/config.js.map +1 -1
  25. package/dist/dashboard/api-routes.d.ts.map +1 -1
  26. package/dist/dashboard/api-routes.js +71 -0
  27. package/dist/dashboard/api-routes.js.map +1 -1
  28. package/dist/dashboard/public/app.js +185 -0
  29. package/dist/dashboard/public/index.html +86 -1
  30. package/dist/dashboard/public/style.css +83 -0
  31. package/dist/index.js +23 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/server.d.ts +8 -1
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +8 -5
  36. package/dist/server.js.map +1 -1
  37. package/dist/storage/init.js +1 -1
  38. package/dist/storage/init.js.map +1 -1
  39. package/dist/utils/types.d.ts +79 -0
  40. package/dist/utils/types.d.ts.map +1 -1
  41. package/package.json +4 -1
  42. package/src/dashboard/public/app.js +185 -0
  43. package/src/dashboard/public/index.html +86 -1
  44. package/src/dashboard/public/style.css +83 -0
@@ -0,0 +1,137 @@
1
+ /**
2
+ * PostHog telemetry client — opt-in anonymous usage data.
3
+ *
4
+ * Privacy safeguards:
5
+ * - Disabled by default, requires explicit config opt-in
6
+ * - Respects DO_NOT_TRACK=1 and CI=true env vars
7
+ * - Identity: SHA-256 hash of hostname + projectRoot (never raw)
8
+ * - Never sends: file paths, decision content, agent names, error messages, env vars
9
+ * - Dynamic import of posthog-node — graceful no-op if not installed
10
+ * - Non-blocking: fire-and-forget, silent on network failure
11
+ */
12
+ import { createHash } from "node:crypto";
13
+ import os from "node:os";
14
+ // Hardcoded PostHog project API key — this is a write-only ingest key,
15
+ // safe to embed in source (like any client-side analytics key).
16
+ // All opt-in installs report to the Twining project dashboard.
17
+ // Set to empty string until a PostHog project is created.
18
+ const POSTHOG_API_KEY = "phc_AN3caYGFLOajJLbGvCD2RV1d3loFzsOL3onUxzJRsQq";
19
+ const POSTHOG_HOST = "https://us.i.posthog.com";
20
+ export class TelemetryClient {
21
+ client = null;
22
+ distinctId = "";
23
+ enabled = false;
24
+ /** Initialize telemetry. Returns true if enabled and ready. */
25
+ async init(config, projectRoot, version) {
26
+ // Gate: disabled by default
27
+ if (!config?.telemetry?.enabled)
28
+ return false;
29
+ // Gate: respect DO_NOT_TRACK
30
+ if (process.env.DO_NOT_TRACK === "1")
31
+ return false;
32
+ // Gate: auto-disable in CI
33
+ if (process.env.CI === "true")
34
+ return false;
35
+ // Use hardcoded key, with config override for self-hosted PostHog
36
+ const apiKey = config.telemetry.posthog_api_key || POSTHOG_API_KEY;
37
+ const host = config.telemetry.posthog_host || POSTHOG_HOST;
38
+ if (!apiKey)
39
+ return false;
40
+ // Compute anonymous distinct ID
41
+ this.distinctId = createHash("sha256")
42
+ .update(os.hostname() + projectRoot)
43
+ .digest("hex")
44
+ .slice(0, 16);
45
+ // Dynamic import — graceful no-op if not installed
46
+ try {
47
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
48
+ const mod = await Function('return import("posthog-node")')();
49
+ const PostHog = mod.PostHog || mod.default?.PostHog;
50
+ if (!PostHog)
51
+ return false;
52
+ this.client = new PostHog(apiKey, { host });
53
+ this.enabled = true;
54
+ // Track server start
55
+ this.trackServerStarted(version);
56
+ return true;
57
+ }
58
+ catch {
59
+ // posthog-node not installed or import failed — graceful no-op
60
+ return false;
61
+ }
62
+ }
63
+ /** Track server started event */
64
+ trackServerStarted(version) {
65
+ if (!this.enabled || !this.client)
66
+ return;
67
+ try {
68
+ this.client.capture({
69
+ distinctId: this.distinctId,
70
+ event: "server_started",
71
+ properties: {
72
+ version,
73
+ node_version: process.version,
74
+ os: process.platform,
75
+ arch: process.arch,
76
+ },
77
+ });
78
+ }
79
+ catch {
80
+ // Silent failure
81
+ }
82
+ }
83
+ /** Track a tool call (sanitized — no args/content/errors) */
84
+ trackToolCalled(toolName, durationMs, success) {
85
+ if (!this.enabled || !this.client)
86
+ return;
87
+ try {
88
+ this.client.capture({
89
+ distinctId: this.distinctId,
90
+ event: "tool_called",
91
+ properties: {
92
+ tool_name: toolName,
93
+ duration_ms: durationMs,
94
+ success,
95
+ },
96
+ });
97
+ }
98
+ catch {
99
+ // Silent failure
100
+ }
101
+ }
102
+ /** Track session summary (periodic aggregate) */
103
+ trackSessionSummary(callCountsByTool, decisionCount, entityCount) {
104
+ if (!this.enabled || !this.client)
105
+ return;
106
+ try {
107
+ this.client.capture({
108
+ distinctId: this.distinctId,
109
+ event: "session_summary",
110
+ properties: {
111
+ call_counts: callCountsByTool,
112
+ decision_count: decisionCount,
113
+ entity_count: entityCount,
114
+ },
115
+ });
116
+ }
117
+ catch {
118
+ // Silent failure
119
+ }
120
+ }
121
+ /** Flush and shut down */
122
+ async shutdown() {
123
+ if (!this.enabled || !this.client)
124
+ return;
125
+ try {
126
+ await this.client.shutdown();
127
+ }
128
+ catch {
129
+ // Silent failure
130
+ }
131
+ }
132
+ /** Whether telemetry is active */
133
+ isEnabled() {
134
+ return this.enabled;
135
+ }
136
+ }
137
+ //# sourceMappingURL=telemetry-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-client.js","sourceRoot":"","sources":["../../src/analytics/telemetry-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,uEAAuE;AACvE,gEAAgE;AAChE,+DAA+D;AAC/D,0DAA0D;AAC1D,MAAM,eAAe,GAAG,iDAAiD,CAAC;AAC1E,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAOhD,MAAM,OAAO,eAAe;IAClB,MAAM,GAAuB,IAAI,CAAC;IAClC,UAAU,GAAW,EAAE,CAAC;IACxB,OAAO,GAAY,KAAK,CAAC;IAEjC,+DAA+D;IAC/D,KAAK,CAAC,IAAI,CACR,MAAmC,EACnC,WAAmB,EACnB,OAAe;QAEf,4BAA4B;QAC5B,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC;QAE9C,6BAA6B;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QAEnD,2BAA2B;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAE5C,kEAAkE;QAClE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,eAAe,IAAI,eAAe,CAAC;QACnE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,IAAI,YAAY,CAAC;QAC3D,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,gCAAgC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC;aACnC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC;aACnC,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhB,mDAAmD;QACnD,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,GAAG,GAAG,MAAO,QAAQ,CAAC,+BAA+B,CAAC,EAAuC,CAAC;YACpG,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAK,GAAG,CAAC,OAAmC,EAAE,OAAO,CAAC;YACjF,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,IAAI,CAAC,MAAM,GAAG,IAAK,OAAmD,CACpE,MAAM,EACN,EAAE,IAAI,EAAE,CACT,CAAC;YACF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,qBAAqB;YACrB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,kBAAkB,CAAC,OAAe;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAClB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,gBAAgB;gBACvB,UAAU,EAAE;oBACV,OAAO;oBACP,YAAY,EAAE,OAAO,CAAC,OAAO;oBAC7B,EAAE,EAAE,OAAO,CAAC,QAAQ;oBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,eAAe,CAAC,QAAgB,EAAE,UAAkB,EAAE,OAAgB;QACpE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAClB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,aAAa;gBACpB,UAAU,EAAE;oBACV,SAAS,EAAE,QAAQ;oBACnB,WAAW,EAAE,UAAU;oBACvB,OAAO;iBACR;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,mBAAmB,CACjB,gBAAwC,EACxC,aAAqB,EACrB,WAAmB;QAEnB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBAClB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,iBAAiB;gBACxB,UAAU,EAAE;oBACV,WAAW,EAAE,gBAAgB;oBAC7B,cAAc,EAAE,aAAa;oBAC7B,YAAY,EAAE,WAAW;iBAC1B;aACF,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,eAAO,MAAM,cAAc,EAAE,aAiC5B,CAAC;AA+BF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAc5D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,eAAO,MAAM,cAAc,EAAE,aA2C5B,CAAC;AA+BF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAc5D"}
package/dist/config.js CHANGED
@@ -37,6 +37,16 @@ export const DEFAULT_CONFIG = {
37
37
  low_ms: 14400000, // 4 hours
38
38
  },
39
39
  },
40
+ analytics: {
41
+ metrics: {
42
+ enabled: true, // Local metrics on by default
43
+ },
44
+ telemetry: {
45
+ enabled: false, // Opt-in only
46
+ posthog_api_key: "",
47
+ posthog_host: "https://us.i.posthog.com",
48
+ },
49
+ },
40
50
  };
41
51
  /** Deep merge source into target, returning a new object */
42
52
  function deepMerge(target, source) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,OAAO,EAAE,CAAC;IACV,YAAY,EAAE,EAAE;IAChB,eAAe,EAAE,kBAAkB;IACnC,OAAO,EAAE;QACP,sBAAsB,EAAE,IAAI;QAC5B,8BAA8B,EAAE,IAAI;QACpC,qCAAqC,EAAE,GAAG;KAC3C;IACD,gBAAgB,EAAE;QAChB,kBAAkB,EAAE,IAAI;QACxB,gBAAgB,EAAE;YAChB,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,GAAG;YACd,mBAAmB,EAAE,GAAG;YACxB,aAAa,EAAE,GAAG;YAClB,kBAAkB,EAAE,GAAG;SACxB;KACF;IACD,mBAAmB,EAAE,OAAO;IAC5B,MAAM,EAAE;QACN,QAAQ,EAAE;YACR,aAAa,EAAE,MAAM,EAAE,YAAY;YACnC,aAAa,EAAE,OAAO,EAAE,aAAa;SACtC;KACF;IACD,WAAW,EAAE;QACX,QAAQ,EAAE;YACR,OAAO,EAAE,MAAM,EAAQ,YAAY;YACnC,SAAS,EAAE,OAAO,EAAK,aAAa;YACpC,MAAM,EAAE,QAAQ,EAAO,UAAU;SAClC;KACF;CACF,CAAC;AAEF,4DAA4D;AAC5D,SAAS,SAAS,CAChB,MAA+B,EAC/B,MAA+B;IAE/B,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QACtC,IACE,SAAS,KAAK,IAAI;YAClB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YACzB,SAAS,KAAK,IAAI;YAClB,OAAO,SAAS,KAAK,QAAQ;YAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EACzB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,SAAoC,EACpC,SAAoC,CACrC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,SAAS,CACd,cAAoD,EACpD,MAAiC,CACN,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api-routes.d.ts","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAsC7B;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAClB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAukB3E"}
1
+ {"version":3,"file":"api-routes.d.ts","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAwC7B;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAClB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAkpB3E"}
@@ -23,6 +23,8 @@ import { IndexManager } from "../embeddings/index-manager.js";
23
23
  import { SearchEngine } from "../embeddings/search.js";
24
24
  import { scoreAgent, parseDelegationMetadata, isDelegationExpired, } from "../engine/coordination.js";
25
25
  import { computeLiveness, DEFAULT_LIVENESS_THRESHOLDS, } from "../utils/liveness.js";
26
+ import { AnalyticsEngine } from "../analytics/analytics-engine.js";
27
+ import { MetricsStore } from "../analytics/metrics-store.js";
26
28
  /** Send a JSON response with standard headers. */
27
29
  function sendJSON(res, data, statusCode = 200) {
28
30
  const body = JSON.stringify(data);
@@ -48,6 +50,8 @@ export function createApiHandler(projectRoot) {
48
50
  const graphStore = new GraphStore(twiningDir);
49
51
  const agentStore = new AgentStore(twiningDir);
50
52
  const handoffStore = new HandoffStore(twiningDir);
53
+ const analyticsEngine = new AnalyticsEngine(blackboardStore, decisionStore, graphStore, handoffStore);
54
+ const metricsStore = new MetricsStore(twiningDir);
51
55
  // Engine layer for search — lazily initialized to avoid creating
52
56
  // .twining/embeddings/ directory on uninitialized projects
53
57
  let searchEngines = null;
@@ -212,6 +216,7 @@ export function createApiHandler(projectRoot) {
212
216
  if (!fs.existsSync(twiningDir)) {
213
217
  sendJSON(res, {
214
218
  initialized: false,
219
+ project_name: path.basename(projectRoot),
215
220
  blackboard_entries: 0,
216
221
  active_decisions: 0,
217
222
  provisional_decisions: 0,
@@ -271,6 +276,7 @@ export function createApiHandler(projectRoot) {
271
276
  const total_handoffs = handoffs.length;
272
277
  sendJSON(res, {
273
278
  initialized: true,
279
+ project_name: path.basename(projectRoot),
274
280
  blackboard_entries,
275
281
  active_decisions,
276
282
  provisional_decisions,
@@ -509,6 +515,71 @@ export function createApiHandler(projectRoot) {
509
515
  }
510
516
  return true;
511
517
  }
518
+ // GET /api/analytics/value-stats
519
+ if (url === "/api/analytics/value-stats") {
520
+ try {
521
+ if (!fs.existsSync(twiningDir)) {
522
+ sendJSON(res, {
523
+ blind_decisions_prevented: { total_decisions: 0, assembled_before: 0, prevention_rate: 0 },
524
+ warnings_surfaced: { total: 0, acknowledged: 0, resolved: 0, ignored: 0 },
525
+ test_coverage: { total_decisions: 0, with_tested_by: 0, coverage_rate: 0 },
526
+ decision_lifecycle: { active: 0, provisional: 0, superseded: 0, overridden: 0 },
527
+ commit_traceability: { total_decisions: 0, with_commits: 0, traceability_rate: 0 },
528
+ knowledge_graph: { entities: 0, relations: 0, entities_by_type: {}, relations_by_type: {} },
529
+ agent_coordination: { total_handoffs: 0, by_result_status: {}, acknowledgment_rate: 0 },
530
+ });
531
+ return true;
532
+ }
533
+ const stats = await analyticsEngine.computeValueStats();
534
+ sendJSON(res, stats);
535
+ }
536
+ catch (err) {
537
+ console.error("[twining] API /api/analytics/value-stats error:", err);
538
+ sendJSON(res, { error: "Internal server error" }, 500);
539
+ }
540
+ return true;
541
+ }
542
+ // GET /api/analytics/tool-usage?since=ISO
543
+ if (url.startsWith("/api/analytics/tool-usage") && !url.includes("over-time")) {
544
+ try {
545
+ const parsed = new URL(url, "http://localhost");
546
+ const since = parsed.searchParams.get("since") || undefined;
547
+ const summary = await metricsStore.getToolUsageSummary(since);
548
+ sendJSON(res, { tools: summary, total: summary.length });
549
+ }
550
+ catch (err) {
551
+ console.error("[twining] API /api/analytics/tool-usage error:", err);
552
+ sendJSON(res, { error: "Internal server error" }, 500);
553
+ }
554
+ return true;
555
+ }
556
+ // GET /api/analytics/tool-usage-over-time?bucket=60
557
+ if (url.startsWith("/api/analytics/tool-usage-over-time")) {
558
+ try {
559
+ const parsed = new URL(url, "http://localhost");
560
+ const bucketParam = parsed.searchParams.get("bucket");
561
+ const bucketMinutes = bucketParam ? parseInt(bucketParam, 10) : 60;
562
+ const buckets = await metricsStore.getUsageOverTime(bucketMinutes);
563
+ sendJSON(res, { buckets, total: buckets.length });
564
+ }
565
+ catch (err) {
566
+ console.error("[twining] API /api/analytics/tool-usage-over-time error:", err);
567
+ sendJSON(res, { error: "Internal server error" }, 500);
568
+ }
569
+ return true;
570
+ }
571
+ // GET /api/analytics/errors
572
+ if (url === "/api/analytics/errors") {
573
+ try {
574
+ const errors = await metricsStore.getErrorBreakdown();
575
+ sendJSON(res, { errors, total: errors.length });
576
+ }
577
+ catch (err) {
578
+ console.error("[twining] API /api/analytics/errors error:", err);
579
+ sendJSON(res, { error: "Internal server error" }, 500);
580
+ }
581
+ return true;
582
+ }
512
583
  // Not an API route we handle
513
584
  return false;
514
585
  };
@@ -1 +1 @@
1
- {"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ var state = {
18
18
  delegations: { data: [], sortKey: "timestamp", sortDir: "desc", page: 1, pageSize: 25, selectedId: null },
19
19
  handoffs: { data: [], sortKey: "created_at", sortDir: "desc", page: 1, pageSize: 25, selectedId: null },
20
20
  agentsSubView: "agents-list",
21
+ insights: { valueStats: null, toolUsage: [], errors: [] },
21
22
  globalScope: "",
22
23
  status: null,
23
24
  pollTimer: null,
@@ -278,6 +279,44 @@ function fetchHandoffDetail(id) {
278
279
  });
279
280
  }
280
281
 
282
+ /* ========== Insights Fetching ========== */
283
+
284
+ function fetchValueStats() {
285
+ fetch("/api/analytics/value-stats")
286
+ .then(function(res) { return res.json(); })
287
+ .then(function(data) {
288
+ state.insights.valueStats = data;
289
+ renderValueStats();
290
+ })
291
+ .catch(function() {});
292
+ }
293
+
294
+ function fetchToolUsage() {
295
+ fetch("/api/analytics/tool-usage")
296
+ .then(function(res) { return res.json(); })
297
+ .then(function(data) {
298
+ state.insights.toolUsage = data.tools || [];
299
+ renderToolUsage();
300
+ })
301
+ .catch(function() {});
302
+ }
303
+
304
+ function fetchErrorBreakdown() {
305
+ fetch("/api/analytics/errors")
306
+ .then(function(res) { return res.json(); })
307
+ .then(function(data) {
308
+ state.insights.errors = data.errors || [];
309
+ renderErrorBreakdown();
310
+ })
311
+ .catch(function() {});
312
+ }
313
+
314
+ function fetchInsights() {
315
+ fetchValueStats();
316
+ fetchToolUsage();
317
+ fetchErrorBreakdown();
318
+ }
319
+
281
320
  /* ========== Polling Lifecycle ========== */
282
321
 
283
322
  function refreshData() {
@@ -293,6 +332,7 @@ function refreshData() {
293
332
  else if (state.agentsSubView === "delegations") fetchDelegations();
294
333
  else if (state.agentsSubView === "handoffs") fetchHandoffs();
295
334
  }
335
+ else if (tab === "insights") fetchInsights();
296
336
  }
297
337
 
298
338
  function startPolling() {
@@ -456,6 +496,13 @@ function renderStatus() {
456
496
  setVal("stat-pending-delegations", s.pending_delegations);
457
497
  setVal("stat-total-handoffs", s.total_handoffs);
458
498
 
499
+ // Update project name in header and page title
500
+ if (s.project_name) {
501
+ var titleEl = document.getElementById("dashboard-title");
502
+ if (titleEl) titleEl.textContent = s.project_name + " — Twining";
503
+ document.title = s.project_name + " — Twining Dashboard";
504
+ }
505
+
459
506
  var msgEl = document.getElementById("uninitialized-msg");
460
507
  if (msgEl) {
461
508
  msgEl.style.display = (s.initialized === false) ? "block" : "none";
@@ -2391,6 +2438,144 @@ function updateGraphData() {
2391
2438
  }
2392
2439
  }
2393
2440
 
2441
+ /* ========== Insights Rendering ========== */
2442
+
2443
+ function renderValueStats() {
2444
+ var vs = state.insights.valueStats;
2445
+ if (!vs) return;
2446
+
2447
+ // Blind decisions prevented
2448
+ var prevRate = document.getElementById("insight-prevention-rate");
2449
+ var prevDetail = document.getElementById("insight-prevention-detail");
2450
+ if (prevRate) prevRate.textContent = Math.round(vs.blind_decisions_prevented.prevention_rate * 100) + "%";
2451
+ if (prevDetail) prevDetail.textContent = vs.blind_decisions_prevented.assembled_before + " of " + vs.blind_decisions_prevented.total_decisions + " decisions had context assembled first";
2452
+
2453
+ // Warnings surfaced
2454
+ var warnTotal = document.getElementById("insight-warnings-total");
2455
+ var warnDetail = document.getElementById("insight-warnings-detail");
2456
+ if (warnTotal) warnTotal.textContent = vs.warnings_surfaced.total;
2457
+ if (warnDetail) warnDetail.textContent = vs.warnings_surfaced.acknowledged + " acknowledged, " + vs.warnings_surfaced.resolved + " resolved, " + vs.warnings_surfaced.ignored + " unaddressed";
2458
+
2459
+ // Test coverage
2460
+ var testCov = document.getElementById("insight-test-coverage");
2461
+ var testDetail = document.getElementById("insight-test-detail");
2462
+ if (testCov) testCov.textContent = Math.round(vs.test_coverage.coverage_rate * 100) + "%";
2463
+ if (testDetail) testDetail.textContent = vs.test_coverage.with_tested_by + " of " + vs.test_coverage.total_decisions + " decisions have tested_by relations";
2464
+
2465
+ // Commit traceability
2466
+ var traceVal = document.getElementById("insight-traceability");
2467
+ var traceDetail = document.getElementById("insight-traceability-detail");
2468
+ if (traceVal) traceVal.textContent = Math.round(vs.commit_traceability.traceability_rate * 100) + "%";
2469
+ if (traceDetail) traceDetail.textContent = vs.commit_traceability.with_commits + " of " + vs.commit_traceability.total_decisions + " decisions linked to commits";
2470
+
2471
+ // Decision lifecycle
2472
+ var lcVal = document.getElementById("insight-lifecycle");
2473
+ var lcDetail = document.getElementById("insight-lifecycle-detail");
2474
+ var lc = vs.decision_lifecycle;
2475
+ if (lcVal) lcVal.textContent = (lc.active + lc.provisional + lc.superseded + lc.overridden);
2476
+ if (lcDetail) lcDetail.textContent = lc.active + " active, " + lc.provisional + " provisional, " + lc.superseded + " superseded, " + lc.overridden + " overridden";
2477
+
2478
+ // Knowledge graph
2479
+ var graphVal = document.getElementById("insight-graph");
2480
+ var graphDetail = document.getElementById("insight-graph-detail");
2481
+ if (graphVal) graphVal.textContent = vs.knowledge_graph.entities + " / " + vs.knowledge_graph.relations;
2482
+ if (graphDetail) {
2483
+ var typeStrs = [];
2484
+ var ebt = vs.knowledge_graph.entities_by_type;
2485
+ for (var ek in ebt) { if (ebt.hasOwnProperty(ek)) typeStrs.push(ek + ": " + ebt[ek]); }
2486
+ graphDetail.textContent = typeStrs.length > 0 ? "Entities: " + typeStrs.join(", ") : "No entities";
2487
+ }
2488
+
2489
+ // Agent coordination
2490
+ var coordVal = document.getElementById("insight-coordination");
2491
+ var coordDetail = document.getElementById("insight-coordination-detail");
2492
+ if (coordVal) coordVal.textContent = vs.agent_coordination.total_handoffs;
2493
+ if (coordDetail) coordDetail.textContent = "Acknowledgment rate: " + Math.round(vs.agent_coordination.acknowledgment_rate * 100) + "%";
2494
+ }
2495
+
2496
+ function renderToolUsage() {
2497
+ var tbody = document.querySelector("#tool-usage-table tbody");
2498
+ if (!tbody) return;
2499
+ clearElement(tbody);
2500
+
2501
+ var tools = state.insights.toolUsage;
2502
+ if (tools.length === 0) {
2503
+ var row = document.createElement("tr");
2504
+ var cell = document.createElement("td");
2505
+ cell.colSpan = 6;
2506
+ cell.textContent = "No tool calls recorded";
2507
+ cell.className = "placeholder";
2508
+ row.appendChild(cell);
2509
+ tbody.appendChild(row);
2510
+ return;
2511
+ }
2512
+
2513
+ for (var i = 0; i < tools.length; i++) {
2514
+ var t = tools[i];
2515
+ var tr = document.createElement("tr");
2516
+
2517
+ var tdName = document.createElement("td");
2518
+ tdName.textContent = t.tool_name;
2519
+ tr.appendChild(tdName);
2520
+
2521
+ var tdCalls = document.createElement("td");
2522
+ tdCalls.textContent = t.call_count;
2523
+ tr.appendChild(tdCalls);
2524
+
2525
+ var tdErrors = document.createElement("td");
2526
+ tdErrors.textContent = t.error_count;
2527
+ if (t.error_count > 0) tdErrors.className = "error-count";
2528
+ tr.appendChild(tdErrors);
2529
+
2530
+ var tdAvg = document.createElement("td");
2531
+ tdAvg.textContent = t.avg_duration_ms;
2532
+ tr.appendChild(tdAvg);
2533
+
2534
+ var tdP95 = document.createElement("td");
2535
+ tdP95.textContent = t.p95_duration_ms;
2536
+ tr.appendChild(tdP95);
2537
+
2538
+ var tdLast = document.createElement("td");
2539
+ tdLast.textContent = formatTime(t.last_called);
2540
+ tr.appendChild(tdLast);
2541
+
2542
+ tbody.appendChild(tr);
2543
+ }
2544
+ }
2545
+
2546
+ function renderErrorBreakdown() {
2547
+ var tbody = document.querySelector("#error-breakdown-table tbody");
2548
+ var noMsg = document.getElementById("no-errors-msg");
2549
+ if (!tbody) return;
2550
+ clearElement(tbody);
2551
+
2552
+ var errors = state.insights.errors;
2553
+ if (errors.length === 0) {
2554
+ if (noMsg) noMsg.style.display = "block";
2555
+ return;
2556
+ }
2557
+ if (noMsg) noMsg.style.display = "none";
2558
+
2559
+ for (var i = 0; i < errors.length; i++) {
2560
+ var e = errors[i];
2561
+ var tr = document.createElement("tr");
2562
+
2563
+ var tdTool = document.createElement("td");
2564
+ tdTool.textContent = e.tool_name;
2565
+ tr.appendChild(tdTool);
2566
+
2567
+ var tdCode = document.createElement("td");
2568
+ tdCode.textContent = e.error_code;
2569
+ tr.appendChild(tdCode);
2570
+
2571
+ var tdCount = document.createElement("td");
2572
+ tdCount.textContent = e.count;
2573
+ tr.appendChild(tdCount);
2574
+
2575
+ tbody.appendChild(tr);
2576
+ }
2577
+ }
2578
+
2394
2579
  /* ========== Initialization ========== */
2395
2580
 
2396
2581
  document.addEventListener("DOMContentLoaded", function() {