@a5c-ai/hooks-mux-core 5.0.1-staging.05a8c224

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 (170) hide show
  1. package/README.md +37 -0
  2. package/dist/api.d.ts +48 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +112 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/diagnostics/index.d.ts +4 -0
  7. package/dist/diagnostics/index.d.ts.map +1 -0
  8. package/dist/diagnostics/index.js +14 -0
  9. package/dist/diagnostics/index.js.map +1 -0
  10. package/dist/diagnostics/logger.d.ts +89 -0
  11. package/dist/diagnostics/logger.d.ts.map +1 -0
  12. package/dist/diagnostics/logger.js +157 -0
  13. package/dist/diagnostics/logger.js.map +1 -0
  14. package/dist/diagnostics/trace.d.ts +56 -0
  15. package/dist/diagnostics/trace.d.ts.map +1 -0
  16. package/dist/diagnostics/trace.js +129 -0
  17. package/dist/diagnostics/trace.js.map +1 -0
  18. package/dist/diagnostics/types.d.ts +121 -0
  19. package/dist/diagnostics/types.d.ts.map +1 -0
  20. package/dist/diagnostics/types.js +8 -0
  21. package/dist/diagnostics/types.js.map +1 -0
  22. package/dist/discovery/detector.d.ts +29 -0
  23. package/dist/discovery/detector.d.ts.map +1 -0
  24. package/dist/discovery/detector.js +62 -0
  25. package/dist/discovery/detector.js.map +1 -0
  26. package/dist/discovery/index.d.ts +3 -0
  27. package/dist/discovery/index.d.ts.map +1 -0
  28. package/dist/discovery/index.js +6 -0
  29. package/dist/discovery/index.js.map +1 -0
  30. package/dist/index.d.ts +23 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +88 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/merge-engine/diagnostics.d.ts +80 -0
  35. package/dist/merge-engine/diagnostics.d.ts.map +1 -0
  36. package/dist/merge-engine/diagnostics.js +42 -0
  37. package/dist/merge-engine/diagnostics.js.map +1 -0
  38. package/dist/merge-engine/index.d.ts +3 -0
  39. package/dist/merge-engine/index.d.ts.map +1 -0
  40. package/dist/merge-engine/index.js +13 -0
  41. package/dist/merge-engine/index.js.map +1 -0
  42. package/dist/merge-engine/merge.d.ts +46 -0
  43. package/dist/merge-engine/merge.d.ts.map +1 -0
  44. package/dist/merge-engine/merge.js +276 -0
  45. package/dist/merge-engine/merge.js.map +1 -0
  46. package/dist/normalizer/errors.d.ts +32 -0
  47. package/dist/normalizer/errors.d.ts.map +1 -0
  48. package/dist/normalizer/errors.js +42 -0
  49. package/dist/normalizer/errors.js.map +1 -0
  50. package/dist/normalizer/index.d.ts +8 -0
  51. package/dist/normalizer/index.d.ts.map +1 -0
  52. package/dist/normalizer/index.js +25 -0
  53. package/dist/normalizer/index.js.map +1 -0
  54. package/dist/normalizer/normalize.d.ts +37 -0
  55. package/dist/normalizer/normalize.d.ts.map +1 -0
  56. package/dist/normalizer/normalize.js +113 -0
  57. package/dist/normalizer/normalize.js.map +1 -0
  58. package/dist/normalizer/plan-resolver.d.ts +46 -0
  59. package/dist/normalizer/plan-resolver.d.ts.map +1 -0
  60. package/dist/normalizer/plan-resolver.js +101 -0
  61. package/dist/normalizer/plan-resolver.js.map +1 -0
  62. package/dist/normalizer/runner.d.ts +57 -0
  63. package/dist/normalizer/runner.d.ts.map +1 -0
  64. package/dist/normalizer/runner.js +203 -0
  65. package/dist/normalizer/runner.js.map +1 -0
  66. package/dist/programmatic/engine.d.ts +88 -0
  67. package/dist/programmatic/engine.d.ts.map +1 -0
  68. package/dist/programmatic/engine.js +292 -0
  69. package/dist/programmatic/engine.js.map +1 -0
  70. package/dist/programmatic/index.d.ts +4 -0
  71. package/dist/programmatic/index.d.ts.map +1 -0
  72. package/dist/programmatic/index.js +7 -0
  73. package/dist/programmatic/index.js.map +1 -0
  74. package/dist/programmatic/middleware.d.ts +38 -0
  75. package/dist/programmatic/middleware.d.ts.map +1 -0
  76. package/dist/programmatic/middleware.js +10 -0
  77. package/dist/programmatic/middleware.js.map +1 -0
  78. package/dist/propagation/adapt-output.d.ts +9 -0
  79. package/dist/propagation/adapt-output.d.ts.map +1 -0
  80. package/dist/propagation/adapt-output.js +79 -0
  81. package/dist/propagation/adapt-output.js.map +1 -0
  82. package/dist/propagation/env-file.d.ts +31 -0
  83. package/dist/propagation/env-file.d.ts.map +1 -0
  84. package/dist/propagation/env-file.js +124 -0
  85. package/dist/propagation/env-file.js.map +1 -0
  86. package/dist/propagation/index.d.ts +6 -0
  87. package/dist/propagation/index.d.ts.map +1 -0
  88. package/dist/propagation/index.js +16 -0
  89. package/dist/propagation/index.js.map +1 -0
  90. package/dist/propagation/materialize.d.ts +10 -0
  91. package/dist/propagation/materialize.d.ts.map +1 -0
  92. package/dist/propagation/materialize.js +129 -0
  93. package/dist/propagation/materialize.js.map +1 -0
  94. package/dist/propagation/propagation-backends.d.ts +12 -0
  95. package/dist/propagation/propagation-backends.d.ts.map +1 -0
  96. package/dist/propagation/propagation-backends.js +99 -0
  97. package/dist/propagation/propagation-backends.js.map +1 -0
  98. package/dist/propagation/types.d.ts +69 -0
  99. package/dist/propagation/types.d.ts.map +1 -0
  100. package/dist/propagation/types.js +3 -0
  101. package/dist/propagation/types.js.map +1 -0
  102. package/dist/sdk-interface/builder.d.ts +66 -0
  103. package/dist/sdk-interface/builder.d.ts.map +1 -0
  104. package/dist/sdk-interface/builder.js +215 -0
  105. package/dist/sdk-interface/builder.js.map +1 -0
  106. package/dist/sdk-interface/context-reader.d.ts +27 -0
  107. package/dist/sdk-interface/context-reader.d.ts.map +1 -0
  108. package/dist/sdk-interface/context-reader.js +51 -0
  109. package/dist/sdk-interface/context-reader.js.map +1 -0
  110. package/dist/sdk-interface/errors.d.ts +9 -0
  111. package/dist/sdk-interface/errors.d.ts.map +1 -0
  112. package/dist/sdk-interface/errors.js +18 -0
  113. package/dist/sdk-interface/errors.js.map +1 -0
  114. package/dist/sdk-interface/index.d.ts +7 -0
  115. package/dist/sdk-interface/index.d.ts.map +1 -0
  116. package/dist/sdk-interface/index.js +25 -0
  117. package/dist/sdk-interface/index.js.map +1 -0
  118. package/dist/sdk-interface/parser.d.ts +26 -0
  119. package/dist/sdk-interface/parser.d.ts.map +1 -0
  120. package/dist/sdk-interface/parser.js +155 -0
  121. package/dist/sdk-interface/parser.js.map +1 -0
  122. package/dist/sdk-interface/serializer.d.ts +11 -0
  123. package/dist/sdk-interface/serializer.d.ts.map +1 -0
  124. package/dist/sdk-interface/serializer.js +17 -0
  125. package/dist/sdk-interface/serializer.js.map +1 -0
  126. package/dist/session-store/index.d.ts +5 -0
  127. package/dist/session-store/index.d.ts.map +1 -0
  128. package/dist/session-store/index.js +28 -0
  129. package/dist/session-store/index.js.map +1 -0
  130. package/dist/session-store/lock.d.ts +10 -0
  131. package/dist/session-store/lock.d.ts.map +1 -0
  132. package/dist/session-store/lock.js +110 -0
  133. package/dist/session-store/lock.js.map +1 -0
  134. package/dist/session-store/markers.d.ts +47 -0
  135. package/dist/session-store/markers.d.ts.map +1 -0
  136. package/dist/session-store/markers.js +348 -0
  137. package/dist/session-store/markers.js.map +1 -0
  138. package/dist/session-store/paths.d.ts +12 -0
  139. package/dist/session-store/paths.d.ts.map +1 -0
  140. package/dist/session-store/paths.js +67 -0
  141. package/dist/session-store/paths.js.map +1 -0
  142. package/dist/session-store/store.d.ts +29 -0
  143. package/dist/session-store/store.d.ts.map +1 -0
  144. package/dist/session-store/store.js +144 -0
  145. package/dist/session-store/store.js.map +1 -0
  146. package/dist/types/adapter.d.ts +21 -0
  147. package/dist/types/adapter.d.ts.map +1 -0
  148. package/dist/types/adapter.js +3 -0
  149. package/dist/types/adapter.js.map +1 -0
  150. package/dist/types/event.d.ts +47 -0
  151. package/dist/types/event.d.ts.map +1 -0
  152. package/dist/types/event.js +3 -0
  153. package/dist/types/event.js.map +1 -0
  154. package/dist/types/lifecycle.d.ts +36 -0
  155. package/dist/types/lifecycle.d.ts.map +1 -0
  156. package/dist/types/lifecycle.js +3 -0
  157. package/dist/types/lifecycle.js.map +1 -0
  158. package/dist/types/plan.d.ts +26 -0
  159. package/dist/types/plan.d.ts.map +1 -0
  160. package/dist/types/plan.js +3 -0
  161. package/dist/types/plan.js.map +1 -0
  162. package/dist/types/result.d.ts +26 -0
  163. package/dist/types/result.d.ts.map +1 -0
  164. package/dist/types/result.js +3 -0
  165. package/dist/types/result.js.map +1 -0
  166. package/dist/types/session.d.ts +35 -0
  167. package/dist/types/session.d.ts.map +1 -0
  168. package/dist/types/session.js +3 -0
  169. package/dist/types/session.js.map +1 -0
  170. package/package.json +40 -0
package/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # @a5c-ai/hooks-mux-core
2
+
3
+ Canonical schemas, types, session store, merge engine, and programmatic runtime for hooks-mux.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @a5c-ai/hooks-mux-core
9
+ ```
10
+
11
+ This package ships the built runtime in `dist/` and this package README for npm publish-surface auditing.
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import {
17
+ createHooksEngine,
18
+ createAdapter,
19
+ registerHandler,
20
+ runNormalized,
21
+ type UnifiedHookEvent,
22
+ type UnifiedHookResult,
23
+ } from "@a5c-ai/hooks-mux-core";
24
+ ```
25
+
26
+ The public surface includes:
27
+
28
+ - canonical event, result, adapter, plan, and session types
29
+ - normalization, merge, propagation, and diagnostics helpers
30
+ - session-store utilities and harness discovery
31
+ - the programmatic hooks engine for in-process integrations
32
+
33
+ See the workspace overview in [`packages/hooks-mux/README.md`](../README.md) and the adapter guide in `packages/hooks-mux/docs/`.
34
+
35
+ ## License
36
+
37
+ MIT © a5c-ai
package/dist/api.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Programmatic integration API.
3
+ *
4
+ * Spec section 19.2.
5
+ */
6
+ import type { UnifiedHookEvent } from './types/event';
7
+ import type { AdapterCapabilities } from './types/adapter';
8
+ import type { HookPlanEntry } from './types/plan';
9
+ import { type MergedExecutionResult } from './merge-engine';
10
+ /**
11
+ * Implementation callbacks provided by an adapter.
12
+ */
13
+ export interface AdapterImpl {
14
+ /** Normalize raw input into a UnifiedHookEvent. */
15
+ normalize(rawInput: unknown): UnifiedHookEvent;
16
+ /** Render a merged result into harness-native output. */
17
+ renderOutput?(mergedResult: MergedExecutionResult): unknown;
18
+ }
19
+ /**
20
+ * A registered adapter with capabilities and implementation.
21
+ */
22
+ export interface RegisteredAdapter {
23
+ name: string;
24
+ capabilities: AdapterCapabilities;
25
+ impl: AdapterImpl;
26
+ }
27
+ /**
28
+ * Register a new adapter with its capabilities and implementation.
29
+ */
30
+ export declare function createAdapter(name: string, capabilities: AdapterCapabilities, impl: AdapterImpl): RegisteredAdapter;
31
+ /**
32
+ * Register a handler in the global plan.
33
+ */
34
+ export declare function registerHandler(planEntry: HookPlanEntry): void;
35
+ /**
36
+ * Run the full normalized pipeline: execute all matching handlers for
37
+ * the event's phase and return the merged result.
38
+ */
39
+ export declare function runNormalized(event: UnifiedHookEvent): Promise<MergedExecutionResult>;
40
+ /**
41
+ * Get a registered adapter by name.
42
+ */
43
+ export declare function getAdapter(name: string): RegisteredAdapter | undefined;
44
+ /**
45
+ * Clear all registrations (useful for testing).
46
+ */
47
+ export declare function clearRegistries(): void;
48
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAAC;IAC/C,yDAAyD;IACzD,YAAY,CAAC,CAAC,YAAY,EAAE,qBAAqB,GAAG,OAAO,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,mBAAmB,CAAC;IAClC,IAAI,EAAE,WAAW,CAAC;CACnB;AAaD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,mBAAmB,EACjC,IAAI,EAAE,WAAW,GAChB,iBAAiB,CAInB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAyBhC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC"}
package/dist/api.js ADDED
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Programmatic integration API.
4
+ *
5
+ * Spec section 19.2.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.createAdapter = createAdapter;
42
+ exports.registerHandler = registerHandler;
43
+ exports.runNormalized = runNormalized;
44
+ exports.getAdapter = getAdapter;
45
+ exports.clearRegistries = clearRegistries;
46
+ const merge_engine_1 = require("./merge-engine");
47
+ // ---------------------------------------------------------------------------
48
+ // Internal registries
49
+ // ---------------------------------------------------------------------------
50
+ const adapterRegistry = new Map();
51
+ const handlerRegistry = [];
52
+ // ---------------------------------------------------------------------------
53
+ // Public API
54
+ // ---------------------------------------------------------------------------
55
+ /**
56
+ * Register a new adapter with its capabilities and implementation.
57
+ */
58
+ function createAdapter(name, capabilities, impl) {
59
+ const adapter = { name, capabilities, impl };
60
+ adapterRegistry.set(name, adapter);
61
+ return adapter;
62
+ }
63
+ /**
64
+ * Register a handler in the global plan.
65
+ */
66
+ function registerHandler(planEntry) {
67
+ handlerRegistry.push(planEntry);
68
+ }
69
+ /**
70
+ * Run the full normalized pipeline: execute all matching handlers for
71
+ * the event's phase and return the merged result.
72
+ */
73
+ async function runNormalized(event) {
74
+ const matchingEntries = handlerRegistry
75
+ .filter((e) => e.phase === event.phase)
76
+ .sort((a, b) => {
77
+ if (a.priority !== b.priority)
78
+ return a.priority - b.priority;
79
+ const sp = a.pluginId.localeCompare(b.pluginId);
80
+ if (sp !== 0)
81
+ return sp;
82
+ return a.id.localeCompare(b.id);
83
+ });
84
+ const results = [];
85
+ for (const entry of matchingEntries) {
86
+ // Handler.source is the shell command to execute as a child process.
87
+ const { runHandler } = await Promise.resolve().then(() => __importStar(require('./normalizer/runner')));
88
+ try {
89
+ const result = await runHandler(event, entry.handler);
90
+ results.push(result);
91
+ }
92
+ catch (_err) {
93
+ // Fail-open by default in programmatic API
94
+ results.push({ decision: 'noop', reason: 'handler error (fail-open)' });
95
+ }
96
+ }
97
+ return (0, merge_engine_1.mergeResults)(results);
98
+ }
99
+ /**
100
+ * Get a registered adapter by name.
101
+ */
102
+ function getAdapter(name) {
103
+ return adapterRegistry.get(name);
104
+ }
105
+ /**
106
+ * Clear all registrations (useful for testing).
107
+ */
108
+ function clearRegistries() {
109
+ adapterRegistry.clear();
110
+ handlerRegistry.length = 0;
111
+ }
112
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCH,sCAQC;AAKD,0CAEC;AAMD,sCA2BC;AAKD,gCAEC;AAKD,0CAGC;AAlGD,iDAA0E;AAqB1E,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,MAAM,eAAe,GAAG,IAAI,GAAG,EAA6B,CAAC;AAC7D,MAAM,eAAe,GAAoB,EAAE,CAAC;AAE5C,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,SAAgB,aAAa,CAC3B,IAAY,EACZ,YAAiC,EACjC,IAAiB;IAEjB,MAAM,OAAO,GAAsB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAChE,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,SAAwB;IACtD,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,aAAa,CACjC,KAAuB;IAEvB,MAAM,eAAe,GAAG,eAAe;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;SACtC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;YAAE,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC9D,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEL,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,qEAAqE;QACrE,MAAM,EAAE,UAAU,EAAE,GAAG,wDAAa,qBAAqB,GAAC,CAAC;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,IAAI,EAAE,CAAC;YACd,2CAA2C;YAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,OAAO,IAAA,2BAAY,EAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe;IAC7B,eAAe,CAAC,KAAK,EAAE,CAAC;IACxB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type { DiagnosticEntry, DiagnosticLoggerOptions, MergeDecisionSummary, SessionIdQuality, TraceWriterOptions, TraceRecord, TraceHandlerRecord, } from './types';
2
+ export { DiagnosticLogger, createDiagnosticLogger } from './logger';
3
+ export { TraceWriter, createTraceWriter, generateTraceId, buildTraceRecord, } from './trace';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/diagnostics/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAGpE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTraceRecord = exports.generateTraceId = exports.createTraceWriter = exports.TraceWriter = exports.createDiagnosticLogger = exports.DiagnosticLogger = void 0;
4
+ // Logger
5
+ var logger_1 = require("./logger");
6
+ Object.defineProperty(exports, "DiagnosticLogger", { enumerable: true, get: function () { return logger_1.DiagnosticLogger; } });
7
+ Object.defineProperty(exports, "createDiagnosticLogger", { enumerable: true, get: function () { return logger_1.createDiagnosticLogger; } });
8
+ // Trace
9
+ var trace_1 = require("./trace");
10
+ Object.defineProperty(exports, "TraceWriter", { enumerable: true, get: function () { return trace_1.TraceWriter; } });
11
+ Object.defineProperty(exports, "createTraceWriter", { enumerable: true, get: function () { return trace_1.createTraceWriter; } });
12
+ Object.defineProperty(exports, "generateTraceId", { enumerable: true, get: function () { return trace_1.generateTraceId; } });
13
+ Object.defineProperty(exports, "buildTraceRecord", { enumerable: true, get: function () { return trace_1.buildTraceRecord; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/diagnostics/index.ts"],"names":[],"mappings":";;;AAWA,SAAS;AACT,mCAAoE;AAA3D,0GAAA,gBAAgB,OAAA;AAAE,gHAAA,sBAAsB,OAAA;AAEjD,QAAQ;AACR,iCAKiB;AAJf,oGAAA,WAAW,OAAA;AACX,0GAAA,iBAAiB,OAAA;AACjB,wGAAA,eAAe,OAAA;AACf,yGAAA,gBAAgB,OAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Structured diagnostic logger for hooks-mux execution.
3
+ *
4
+ * Outputs to stderr with structured fields per spec section 23:
5
+ * adapter, canonical phase, native event name, session ID quality,
6
+ * handler IDs executed, merge decisions, output degradation flags.
7
+ */
8
+ import type { DiagnosticEntry, DiagnosticLoggerOptions, MergeDecisionSummary, SessionIdQuality } from './types';
9
+ declare const LOG_LEVELS: {
10
+ readonly debug: 0;
11
+ readonly info: 1;
12
+ readonly warn: 2;
13
+ readonly error: 3;
14
+ };
15
+ type LogLevel = keyof typeof LOG_LEVELS;
16
+ /**
17
+ * Structured logger that emits diagnostics to stderr (or a custom stream).
18
+ *
19
+ * Separates diagnostic output (stderr) from hook output (stdout) per
20
+ * the security requirement in spec section 22.
21
+ */
22
+ export declare class DiagnosticLogger {
23
+ private readonly minLevel;
24
+ private readonly output;
25
+ private readonly json;
26
+ private adapter;
27
+ private canonicalPhase;
28
+ private nativeEventName;
29
+ private sessionIdQuality;
30
+ private sessionId;
31
+ private handlerIds;
32
+ private mergeDecisions;
33
+ private outputDegradationFlags;
34
+ constructor(options?: DiagnosticLoggerOptions);
35
+ /**
36
+ * Set the adapter context for subsequent log entries.
37
+ */
38
+ setAdapter(adapter: string): void;
39
+ /**
40
+ * Set the phase context for subsequent log entries.
41
+ */
42
+ setPhase(canonicalPhase: string, nativeEventName: string): void;
43
+ /**
44
+ * Set session context for subsequent log entries.
45
+ */
46
+ setSession(sessionId: string | undefined, quality: SessionIdQuality): void;
47
+ /**
48
+ * Record the handler IDs that were executed.
49
+ */
50
+ setHandlerIds(ids: string[]): void;
51
+ /**
52
+ * Record merge decisions from the fan-out merge phase.
53
+ */
54
+ setMergeDecisions(decisions: MergeDecisionSummary[]): void;
55
+ /**
56
+ * Record output degradation flags.
57
+ */
58
+ setOutputDegradationFlags(flags: string[]): void;
59
+ /**
60
+ * Emit a debug-level diagnostic.
61
+ */
62
+ debug(message: string, extra?: Record<string, unknown>): void;
63
+ /**
64
+ * Emit an info-level diagnostic.
65
+ */
66
+ info(message: string, extra?: Record<string, unknown>): void;
67
+ /**
68
+ * Emit a warn-level diagnostic.
69
+ */
70
+ warn(message: string, extra?: Record<string, unknown>): void;
71
+ /**
72
+ * Emit an error-level diagnostic.
73
+ */
74
+ error(message: string, extra?: Record<string, unknown>): void;
75
+ /**
76
+ * Build and return a DiagnosticEntry without emitting it.
77
+ * Useful for testing or collecting entries.
78
+ */
79
+ buildEntry(level: LogLevel, message: string, extra?: Record<string, unknown>): DiagnosticEntry;
80
+ private emit;
81
+ private formatHuman;
82
+ }
83
+ /**
84
+ * Create a DiagnosticLogger with default settings.
85
+ * Intended for use by the invoke pipeline.
86
+ */
87
+ export declare function createDiagnosticLogger(options?: DiagnosticLoggerOptions): DiagnosticLogger;
88
+ export {};
89
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/diagnostics/logger.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,UAAU;;;;;CAAoD,CAAC;AACrE,KAAK,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAG/B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,sBAAsB,CAAgB;gBAElC,OAAO,CAAC,EAAE,uBAAuB;IAM7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IAK/D;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAK1E;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAIlC;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAI1D;;OAEG;IACH,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIhD;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7D;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,eAAe;IAiB9F,OAAO,CAAC,IAAI;IAYZ,OAAO,CAAC,WAAW;CAoBpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAE1F"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Structured diagnostic logger for hooks-mux execution.
4
+ *
5
+ * Outputs to stderr with structured fields per spec section 23:
6
+ * adapter, canonical phase, native event name, session ID quality,
7
+ * handler IDs executed, merge decisions, output degradation flags.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DiagnosticLogger = void 0;
11
+ exports.createDiagnosticLogger = createDiagnosticLogger;
12
+ const LOG_LEVELS = { debug: 0, info: 1, warn: 2, error: 3 };
13
+ /**
14
+ * Structured logger that emits diagnostics to stderr (or a custom stream).
15
+ *
16
+ * Separates diagnostic output (stderr) from hook output (stdout) per
17
+ * the security requirement in spec section 22.
18
+ */
19
+ class DiagnosticLogger {
20
+ minLevel;
21
+ output;
22
+ json;
23
+ // Contextual fields set once and reused across log calls within one invocation.
24
+ adapter = '';
25
+ canonicalPhase = '';
26
+ nativeEventName = '';
27
+ sessionIdQuality = 'none';
28
+ sessionId;
29
+ handlerIds = [];
30
+ mergeDecisions = [];
31
+ outputDegradationFlags = [];
32
+ constructor(options) {
33
+ this.minLevel = LOG_LEVELS[options?.level ?? 'info'];
34
+ this.output = options?.output ?? process.stderr;
35
+ this.json = options?.json ?? true;
36
+ }
37
+ /**
38
+ * Set the adapter context for subsequent log entries.
39
+ */
40
+ setAdapter(adapter) {
41
+ this.adapter = adapter;
42
+ }
43
+ /**
44
+ * Set the phase context for subsequent log entries.
45
+ */
46
+ setPhase(canonicalPhase, nativeEventName) {
47
+ this.canonicalPhase = canonicalPhase;
48
+ this.nativeEventName = nativeEventName;
49
+ }
50
+ /**
51
+ * Set session context for subsequent log entries.
52
+ */
53
+ setSession(sessionId, quality) {
54
+ this.sessionId = sessionId;
55
+ this.sessionIdQuality = quality;
56
+ }
57
+ /**
58
+ * Record the handler IDs that were executed.
59
+ */
60
+ setHandlerIds(ids) {
61
+ this.handlerIds = ids;
62
+ }
63
+ /**
64
+ * Record merge decisions from the fan-out merge phase.
65
+ */
66
+ setMergeDecisions(decisions) {
67
+ this.mergeDecisions = decisions;
68
+ }
69
+ /**
70
+ * Record output degradation flags.
71
+ */
72
+ setOutputDegradationFlags(flags) {
73
+ this.outputDegradationFlags = flags;
74
+ }
75
+ /**
76
+ * Emit a debug-level diagnostic.
77
+ */
78
+ debug(message, extra) {
79
+ this.emit('debug', message, extra);
80
+ }
81
+ /**
82
+ * Emit an info-level diagnostic.
83
+ */
84
+ info(message, extra) {
85
+ this.emit('info', message, extra);
86
+ }
87
+ /**
88
+ * Emit a warn-level diagnostic.
89
+ */
90
+ warn(message, extra) {
91
+ this.emit('warn', message, extra);
92
+ }
93
+ /**
94
+ * Emit an error-level diagnostic.
95
+ */
96
+ error(message, extra) {
97
+ this.emit('error', message, extra);
98
+ }
99
+ /**
100
+ * Build and return a DiagnosticEntry without emitting it.
101
+ * Useful for testing or collecting entries.
102
+ */
103
+ buildEntry(level, message, extra) {
104
+ return {
105
+ timestamp: new Date().toISOString(),
106
+ level,
107
+ message,
108
+ adapter: this.adapter,
109
+ canonicalPhase: this.canonicalPhase,
110
+ nativeEventName: this.nativeEventName,
111
+ sessionIdQuality: this.sessionIdQuality,
112
+ sessionId: this.sessionId,
113
+ handlerIds: [...this.handlerIds],
114
+ mergeDecisions: [...this.mergeDecisions],
115
+ outputDegradationFlags: [...this.outputDegradationFlags],
116
+ extra,
117
+ };
118
+ }
119
+ emit(level, message, extra) {
120
+ if (LOG_LEVELS[level] < this.minLevel)
121
+ return;
122
+ const entry = this.buildEntry(level, message, extra);
123
+ if (this.json) {
124
+ this.output.write(JSON.stringify(entry) + '\n');
125
+ }
126
+ else {
127
+ this.output.write(this.formatHuman(entry) + '\n');
128
+ }
129
+ }
130
+ formatHuman(entry) {
131
+ const parts = [
132
+ `[${entry.level.toUpperCase()}]`,
133
+ `[${entry.adapter || '-'}]`,
134
+ `[${entry.canonicalPhase || '-'}]`,
135
+ entry.message,
136
+ ];
137
+ if (entry.sessionId) {
138
+ parts.push(`session=${entry.sessionId}`);
139
+ }
140
+ if (entry.handlerIds.length > 0) {
141
+ parts.push(`handlers=[${entry.handlerIds.join(',')}]`);
142
+ }
143
+ if (entry.outputDegradationFlags.length > 0) {
144
+ parts.push(`degraded=[${entry.outputDegradationFlags.join(',')}]`);
145
+ }
146
+ return parts.join(' ');
147
+ }
148
+ }
149
+ exports.DiagnosticLogger = DiagnosticLogger;
150
+ /**
151
+ * Create a DiagnosticLogger with default settings.
152
+ * Intended for use by the invoke pipeline.
153
+ */
154
+ function createDiagnosticLogger(options) {
155
+ return new DiagnosticLogger(options);
156
+ }
157
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/diagnostics/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Optional JSONL trace file support for debugging.
3
+ *
4
+ * Spec section 23 (optional future support: JSONL trace files).
5
+ *
6
+ * When enabled, writes one JSON line per hook invocation to a trace file.
7
+ * Useful for post-hoc debugging of hook execution sequences.
8
+ */
9
+ import type { TraceRecord, TraceWriterOptions, TraceHandlerRecord, SessionIdQuality } from './types';
10
+ /**
11
+ * Writer that appends JSONL trace records to a file.
12
+ */
13
+ export declare class TraceWriter {
14
+ private readonly filePath;
15
+ private readonly append;
16
+ private initialized;
17
+ constructor(options: TraceWriterOptions);
18
+ /**
19
+ * Ensure the trace directory exists and the file is ready for writing.
20
+ */
21
+ private ensureInitialized;
22
+ /**
23
+ * Write a trace record as a single JSONL line.
24
+ */
25
+ writeRecord(record: TraceRecord): Promise<void>;
26
+ /**
27
+ * Get the trace file path.
28
+ */
29
+ getFilePath(): string;
30
+ }
31
+ /**
32
+ * Create a trace writer. Returns null if no trace file path is configured.
33
+ */
34
+ export declare function createTraceWriter(options?: TraceWriterOptions | null): TraceWriter | null;
35
+ /**
36
+ * Generate a simple trace ID for this invocation.
37
+ */
38
+ export declare function generateTraceId(): string;
39
+ /**
40
+ * Build a complete TraceRecord from invocation data.
41
+ */
42
+ export declare function buildTraceRecord(params: {
43
+ traceId: string;
44
+ startedAt: string;
45
+ completedAt: string;
46
+ adapter: string;
47
+ phase: string;
48
+ nativeEventName: string;
49
+ sessionIdQuality: SessionIdQuality;
50
+ sessionId?: string;
51
+ handlers: TraceHandlerRecord[];
52
+ mergedDecision: string;
53
+ degraded: boolean;
54
+ errors: string[];
55
+ }): TraceRecord;
56
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/diagnostics/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAErG;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,kBAAkB;IAKvC;;OAEG;YACW,iBAAiB;IAU/B;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;OAEG;IACH,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,CAGzF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAIxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG,WAAW,CAoBd"}