@dzhechkov/harness-core 0.8.6 → 0.8.11

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 (164) hide show
  1. package/.dz-manifest.json +361 -97
  2. package/README.md +48 -1
  3. package/dist/amendment-trace.d.ts.map +1 -1
  4. package/dist/amendment-trace.js +12 -1
  5. package/dist/amendment-trace.js.map +1 -1
  6. package/dist/codex-invoke.d.ts +73 -0
  7. package/dist/codex-invoke.d.ts.map +1 -0
  8. package/dist/codex-invoke.js +80 -0
  9. package/dist/codex-invoke.js.map +1 -0
  10. package/dist/compounding.d.ts +54 -0
  11. package/dist/compounding.d.ts.map +1 -1
  12. package/dist/compounding.js +221 -1
  13. package/dist/compounding.js.map +1 -1
  14. package/dist/discrimination-gate.d.ts +63 -3
  15. package/dist/discrimination-gate.d.ts.map +1 -1
  16. package/dist/discrimination-gate.js +113 -16
  17. package/dist/discrimination-gate.js.map +1 -1
  18. package/dist/eta.d.ts +92 -0
  19. package/dist/eta.d.ts.map +1 -0
  20. package/dist/eta.js +488 -0
  21. package/dist/eta.js.map +1 -0
  22. package/dist/event-chain.d.ts +30 -0
  23. package/dist/event-chain.d.ts.map +1 -1
  24. package/dist/event-chain.js +24 -0
  25. package/dist/event-chain.js.map +1 -1
  26. package/dist/feature-adr-checkpoints.js +1 -1
  27. package/dist/feature-adr-decision-recall.d.ts +167 -0
  28. package/dist/feature-adr-decision-recall.d.ts.map +1 -0
  29. package/dist/feature-adr-decision-recall.js +519 -0
  30. package/dist/feature-adr-decision-recall.js.map +1 -0
  31. package/dist/feature-adr-landing.d.ts +37 -0
  32. package/dist/feature-adr-landing.d.ts.map +1 -0
  33. package/dist/feature-adr-landing.js +59 -0
  34. package/dist/feature-adr-landing.js.map +1 -0
  35. package/dist/feature-adr-routing.d.ts +2 -2
  36. package/dist/feature-adr-routing.d.ts.map +1 -1
  37. package/dist/feature-adr-routing.js +7 -11
  38. package/dist/feature-adr-routing.js.map +1 -1
  39. package/dist/guard-promotion.d.ts +41 -0
  40. package/dist/guard-promotion.d.ts.map +1 -1
  41. package/dist/guard-promotion.js +218 -4
  42. package/dist/guard-promotion.js.map +1 -1
  43. package/dist/guard-volume.d.ts +108 -0
  44. package/dist/guard-volume.d.ts.map +1 -0
  45. package/dist/guard-volume.js +536 -0
  46. package/dist/guard-volume.js.map +1 -0
  47. package/dist/guard.d.ts +17 -0
  48. package/dist/guard.d.ts.map +1 -1
  49. package/dist/guard.js +92 -4
  50. package/dist/guard.js.map +1 -1
  51. package/dist/index.d.ts +24 -7
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +19 -5
  54. package/dist/index.js.map +1 -1
  55. package/dist/integration-apply.d.ts +25 -0
  56. package/dist/integration-apply.d.ts.map +1 -0
  57. package/dist/integration-apply.js +299 -0
  58. package/dist/integration-apply.js.map +1 -0
  59. package/dist/integration-evidence.d.ts +46 -0
  60. package/dist/integration-evidence.d.ts.map +1 -0
  61. package/dist/integration-evidence.js +44 -0
  62. package/dist/integration-evidence.js.map +1 -0
  63. package/dist/integration-probe-worker.d.ts +22 -0
  64. package/dist/integration-probe-worker.d.ts.map +1 -0
  65. package/dist/integration-probe-worker.js +334 -0
  66. package/dist/integration-probe-worker.js.map +1 -0
  67. package/dist/integrations-verify.d.ts +60 -0
  68. package/dist/integrations-verify.d.ts.map +1 -0
  69. package/dist/integrations-verify.js +194 -0
  70. package/dist/integrations-verify.js.map +1 -0
  71. package/dist/lesson-generalization.d.ts +29 -0
  72. package/dist/lesson-generalization.d.ts.map +1 -0
  73. package/dist/lesson-generalization.js +84 -0
  74. package/dist/lesson-generalization.js.map +1 -0
  75. package/dist/mutation-gate.d.ts +39 -36
  76. package/dist/mutation-gate.d.ts.map +1 -1
  77. package/dist/mutation-gate.js +111 -5
  78. package/dist/mutation-gate.js.map +1 -1
  79. package/dist/operations.d.ts +27 -0
  80. package/dist/operations.d.ts.map +1 -1
  81. package/dist/operations.js +186 -7
  82. package/dist/operations.js.map +1 -1
  83. package/dist/patterns.d.ts +27 -1
  84. package/dist/patterns.d.ts.map +1 -1
  85. package/dist/patterns.js +211 -45
  86. package/dist/patterns.js.map +1 -1
  87. package/dist/plugin.d.ts.map +1 -1
  88. package/dist/plugin.js +27 -5
  89. package/dist/plugin.js.map +1 -1
  90. package/dist/recommend.d.ts +4 -5
  91. package/dist/recommend.d.ts.map +1 -1
  92. package/dist/recommend.js +110 -45
  93. package/dist/recommend.js.map +1 -1
  94. package/dist/registry.d.ts +32 -1
  95. package/dist/registry.d.ts.map +1 -1
  96. package/dist/registry.js +165 -9
  97. package/dist/registry.js.map +1 -1
  98. package/dist/run-records.d.ts +3 -0
  99. package/dist/run-records.d.ts.map +1 -1
  100. package/dist/run-records.js +18 -0
  101. package/dist/run-records.js.map +1 -1
  102. package/dist/score.d.ts +95 -0
  103. package/dist/score.d.ts.map +1 -1
  104. package/dist/score.js +274 -2
  105. package/dist/score.js.map +1 -1
  106. package/dist/setup.d.ts.map +1 -1
  107. package/dist/setup.js +20 -17
  108. package/dist/setup.js.map +1 -1
  109. package/dist/skill-selection.d.ts +72 -0
  110. package/dist/skill-selection.d.ts.map +1 -0
  111. package/dist/skill-selection.js +76 -0
  112. package/dist/skill-selection.js.map +1 -0
  113. package/dist/stem.d.ts +12 -0
  114. package/dist/stem.d.ts.map +1 -0
  115. package/dist/stem.js +89 -0
  116. package/dist/stem.js.map +1 -0
  117. package/dist/target-integrations.d.ts +65 -0
  118. package/dist/target-integrations.d.ts.map +1 -0
  119. package/dist/target-integrations.js +152 -0
  120. package/dist/target-integrations.js.map +1 -0
  121. package/dist/telemetry-vocabulary.d.ts +7 -0
  122. package/dist/telemetry-vocabulary.d.ts.map +1 -1
  123. package/dist/telemetry-vocabulary.js +29 -0
  124. package/dist/telemetry-vocabulary.js.map +1 -1
  125. package/dist/vector-tier.d.ts +6 -1
  126. package/dist/vector-tier.d.ts.map +1 -1
  127. package/dist/vector-tier.js +32 -7
  128. package/dist/vector-tier.js.map +1 -1
  129. package/package.json +7 -6
  130. package/sbom.json +772 -112
  131. package/src/amendment-trace.ts +12 -1
  132. package/src/codex-invoke.ts +138 -0
  133. package/src/compounding.ts +300 -1
  134. package/src/discrimination-gate.ts +183 -19
  135. package/src/eta.ts +590 -0
  136. package/src/event-chain.ts +41 -0
  137. package/src/feature-adr-checkpoints.ts +1 -1
  138. package/src/feature-adr-decision-recall.ts +652 -0
  139. package/src/feature-adr-landing.ts +109 -0
  140. package/src/feature-adr-routing.ts +7 -11
  141. package/src/guard-promotion.ts +245 -4
  142. package/src/guard-volume.ts +752 -0
  143. package/src/guard.ts +110 -4
  144. package/src/index.ts +73 -6
  145. package/src/integration-apply.ts +332 -0
  146. package/src/integration-evidence.ts +89 -0
  147. package/src/integration-probe-worker.ts +310 -0
  148. package/src/integration-receipts/claude-code/mcp/2.1.235.json +35 -0
  149. package/src/integrations-verify.ts +258 -0
  150. package/src/lesson-generalization.ts +115 -0
  151. package/src/mutation-gate.ts +165 -5
  152. package/src/operations.ts +207 -7
  153. package/src/patterns.ts +252 -43
  154. package/src/plugin.ts +27 -5
  155. package/src/recommend.ts +116 -46
  156. package/src/registry.ts +144 -11
  157. package/src/run-records.ts +23 -0
  158. package/src/score.ts +361 -3
  159. package/src/setup.ts +20 -17
  160. package/src/skill-selection.ts +111 -0
  161. package/src/stem.ts +87 -0
  162. package/src/target-integrations.ts +225 -0
  163. package/src/telemetry-vocabulary.ts +36 -0
  164. package/src/vector-tier.ts +44 -14
@@ -0,0 +1,46 @@
1
+ /** Exact-version receipt and evidence classifiers. */
2
+ import type { IntegrationComponent, IntegrationReasonCode } from '@dzhechkov/core';
3
+ import type { TargetName } from './targets.js';
4
+ export interface ProbeReceipt {
5
+ readonly schemaVersion: 1;
6
+ readonly target: TargetName;
7
+ readonly component: IntegrationComponent;
8
+ readonly productSurface: string;
9
+ readonly runtimeVersion: string;
10
+ readonly scope: 'project' | 'user' | 'plugin';
11
+ readonly carrierPath: string;
12
+ readonly serializerId: string;
13
+ readonly probeCommandId: string;
14
+ readonly probeCommand: readonly string[];
15
+ readonly timeoutMs: number;
16
+ readonly observedExitCode: number;
17
+ readonly transcriptSha256: `sha256:${string}`;
18
+ readonly parsedObservation: {
19
+ readonly registrationId: string;
20
+ readonly scope: 'project';
21
+ readonly status: string;
22
+ readonly approval: 'pending' | 'approved' | 'unknown';
23
+ readonly ready: boolean;
24
+ };
25
+ readonly wrongPathNegativeControl: {
26
+ readonly carrierPath: string;
27
+ readonly probeCommand: readonly string[];
28
+ readonly timeoutMs: number;
29
+ readonly observedExitCode: number;
30
+ readonly transcriptSha256: `sha256:${string}`;
31
+ readonly registrationObserved: false;
32
+ readonly reasonCode: 'POST_WRITE_REGISTRATION_NOT_OBSERVED';
33
+ };
34
+ readonly transportFamily: 'stdio-local' | 'http';
35
+ readonly fieldFamilies: readonly string[];
36
+ readonly observedAt: string;
37
+ readonly documentation: readonly string[];
38
+ }
39
+ export declare const CLAUDE_MCP_RECEIPT: ProbeReceipt;
40
+ export interface EvidenceAssessment {
41
+ readonly eligible: boolean;
42
+ readonly reasonCode?: IntegrationReasonCode;
43
+ readonly receipt?: ProbeReceipt;
44
+ }
45
+ export declare function assessClaudeMcpEvidence(runtimeVersion: string | undefined): EvidenceAssessment;
46
+ //# sourceMappingURL=integration-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-evidence.d.ts","sourceRoot":"","sources":["../src/integration-evidence.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;QACtD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,wBAAwB,EAAE;QACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;QACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,MAAM,EAAE,CAAC;QAC9C,QAAQ,CAAC,oBAAoB,EAAE,KAAK,CAAC;QACrC,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC7D,CAAC;IACF,QAAQ,CAAC,eAAe,EAAE,aAAa,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,eAAO,MAAM,kBAAkB,EAAE,YAkChC,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;CACjC;AAED,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAI9F"}
@@ -0,0 +1,44 @@
1
+ /** Exact-version receipt and evidence classifiers. */
2
+ export const CLAUDE_MCP_RECEIPT = {
3
+ schemaVersion: 1,
4
+ target: 'claude-code',
5
+ component: 'mcp',
6
+ productSurface: 'claude-code-cli',
7
+ runtimeVersion: '2.1.235',
8
+ scope: 'project',
9
+ carrierPath: '.mcp.json',
10
+ serializerId: 'claude-project-mcp-json-v1',
11
+ probeCommandId: 'claude-project-mcp-get-v1',
12
+ probeCommand: ['claude', 'mcp', 'get', 'dz-registration-probe'],
13
+ timeoutMs: 30_000,
14
+ observedExitCode: 0,
15
+ transcriptSha256: 'sha256:0e30c79de6381c7e7b93a39cc644cb282b6c95ceaeb4a0f5a94fbfecb5c71549',
16
+ parsedObservation: {
17
+ registrationId: 'dz-registration-probe',
18
+ scope: 'project',
19
+ status: 'Pending approval',
20
+ approval: 'pending',
21
+ ready: false,
22
+ },
23
+ wrongPathNegativeControl: {
24
+ carrierPath: '.claude/.mcp.json',
25
+ probeCommand: ['claude', 'mcp', 'get', 'dz-wrong-path-probe'],
26
+ timeoutMs: 30_000,
27
+ observedExitCode: 1,
28
+ transcriptSha256: 'sha256:aba424ed140ee785947f314942566ae4bccc7b7c44ca9be785efbf36be0f62d5',
29
+ registrationObserved: false,
30
+ reasonCode: 'POST_WRITE_REGISTRATION_NOT_OBSERVED',
31
+ },
32
+ transportFamily: 'stdio-local',
33
+ fieldFamilies: ['type', 'command', 'args'],
34
+ observedAt: '2026-08-30T19:22:15.366Z',
35
+ documentation: ['https://code.claude.com/docs/en/mcp'],
36
+ };
37
+ export function assessClaudeMcpEvidence(runtimeVersion) {
38
+ if (runtimeVersion === undefined)
39
+ return { eligible: false, reasonCode: 'TARGET_BINARY_UNAVAILABLE' };
40
+ if (runtimeVersion !== CLAUDE_MCP_RECEIPT.runtimeVersion)
41
+ return { eligible: false, reasonCode: 'RECEIPT_STALE' };
42
+ return { eligible: true, receipt: CLAUDE_MCP_RECEIPT };
43
+ }
44
+ //# sourceMappingURL=integration-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-evidence.js","sourceRoot":"","sources":["../src/integration-evidence.ts"],"names":[],"mappings":"AAAA,sDAAsD;AA0CtD,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,aAAa,EAAE,CAAC;IAChB,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,KAAK;IAChB,cAAc,EAAE,iBAAiB;IACjC,cAAc,EAAE,SAAS;IACzB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,4BAA4B;IAC1C,cAAc,EAAE,2BAA2B;IAC3C,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,CAAC;IAC/D,SAAS,EAAE,MAAM;IACjB,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,yEAAyE;IAC3F,iBAAiB,EAAE;QACjB,cAAc,EAAE,uBAAuB;QACvC,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,kBAAkB;QAC1B,QAAQ,EAAE,SAAS;QACnB,KAAK,EAAE,KAAK;KACb;IACD,wBAAwB,EAAE;QACxB,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC;QAC7D,SAAS,EAAE,MAAM;QACjB,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,yEAAyE;QAC3F,oBAAoB,EAAE,KAAK;QAC3B,UAAU,EAAE,sCAAsC;KACnD;IACD,eAAe,EAAE,aAAa;IAC9B,aAAa,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;IAC1C,UAAU,EAAE,0BAA0B;IACtC,aAAa,EAAE,CAAC,qCAAqC,CAAC;CACvD,CAAC;AAQF,MAAM,UAAU,uBAAuB,CAAC,cAAkC;IACxE,IAAI,cAAc,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,2BAA2B,EAAE,CAAC;IACtG,IAAI,cAAc,KAAK,kBAAkB,CAAC,cAAc;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAClH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,22 @@
1
+ /** Isolated bounded subprocess runner used by integration registration probes. */
2
+ export declare const PROBE_REDACTION_MARKER = "[REDACTED]";
3
+ export declare const PROBE_TRUNCATION_MARKER = "[TRUNCATED]";
4
+ export interface ProbeWorkerRequest {
5
+ readonly command: string;
6
+ readonly args: readonly string[];
7
+ readonly cwd: string;
8
+ readonly timeoutMs: number;
9
+ readonly streamMaxBytes: number;
10
+ readonly aggregateMaxBytes: number;
11
+ }
12
+ export interface ProbeWorkerResult {
13
+ readonly status: number | null;
14
+ readonly signal: string | null;
15
+ readonly stdoutBase64: string;
16
+ readonly stderrBase64: string;
17
+ readonly errorCode?: string;
18
+ readonly truncated: boolean;
19
+ }
20
+ export declare function redactProbeText(input: string): string;
21
+ export declare function runProbeWorker(request: ProbeWorkerRequest): Promise<ProbeWorkerResult>;
22
+ //# sourceMappingURL=integration-probe-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-probe-worker.d.ts","sourceRoot":"","sources":["../src/integration-probe-worker.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAOlF,eAAO,MAAM,sBAAsB,eAAe,CAAC;AACnD,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAKrD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAgHD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD;AAwDD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuFtF"}
@@ -0,0 +1,334 @@
1
+ /** Isolated bounded subprocess runner used by integration registration probes. */
2
+ import { spawn } from 'node:child_process';
3
+ import { realpathSync } from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { resolve } from 'node:path';
6
+ export const PROBE_REDACTION_MARKER = '[REDACTED]';
7
+ export const PROBE_TRUNCATION_MARKER = '[TRUNCATED]';
8
+ const WORKER_INPUT_MAX_BYTES = 64 * 1024;
9
+ const REDACTION_WORDS = ['bearer', 'token', 'secret', 'password', 'apikey', 'api_key', 'api-key'];
10
+ const ASSIGNMENT_WORDS = new Set(REDACTION_WORDS.slice(1));
11
+ /** Stateful UTF-8 redactor: raw chunks are transformed immediately and are never retained. */
12
+ class StreamingProbeRedactor {
13
+ #decoder = new TextDecoder('utf-8', { fatal: true });
14
+ #sanitized = [];
15
+ #state = 'normal';
16
+ #word = '';
17
+ #keyBuffer = '';
18
+ #invalidUtf8 = false;
19
+ #finished = false;
20
+ write(chunk) {
21
+ if (this.#finished || this.#invalidUtf8)
22
+ return false;
23
+ try {
24
+ this.#consume(this.#decoder.decode(chunk, { stream: true }));
25
+ return true;
26
+ }
27
+ catch {
28
+ this.#invalidUtf8 = true;
29
+ this.#sanitized.length = 0;
30
+ return false;
31
+ }
32
+ }
33
+ finish() {
34
+ if (!this.#finished && !this.#invalidUtf8) {
35
+ try {
36
+ this.#consume(this.#decoder.decode());
37
+ if (this.#state === 'word')
38
+ this.#emit(this.#word);
39
+ else if (this.#state === 'key-space')
40
+ this.#emit(this.#keyBuffer);
41
+ }
42
+ catch {
43
+ this.#invalidUtf8 = true;
44
+ this.#sanitized.length = 0;
45
+ }
46
+ }
47
+ this.#finished = true;
48
+ return {
49
+ bytes: this.#invalidUtf8 ? Buffer.alloc(0) : Buffer.from(this.#sanitized.join(''), 'utf8'),
50
+ invalidUtf8: this.#invalidUtf8,
51
+ };
52
+ }
53
+ #emit(value) { this.#sanitized.push(value); }
54
+ #wordChar(value) { return /^[A-Za-z0-9_-]$/.test(value); }
55
+ #secretEnd(value, comma) {
56
+ return /\s/.test(value) || value === '"' || value === "'" || (comma && value === ',');
57
+ }
58
+ #consume(text) {
59
+ for (const value of text)
60
+ this.#character(value);
61
+ }
62
+ #character(value) {
63
+ if (this.#state === 'normal') {
64
+ if (this.#wordChar(value)) {
65
+ this.#word = value;
66
+ this.#state = 'word';
67
+ }
68
+ else
69
+ this.#emit(value);
70
+ return;
71
+ }
72
+ if (this.#state === 'word') {
73
+ if (this.#wordChar(value)) {
74
+ this.#word += value;
75
+ if (!REDACTION_WORDS.some((word) => word.startsWith(this.#word.toLowerCase()))) {
76
+ this.#emit(this.#word);
77
+ this.#word = '';
78
+ this.#state = 'passthrough-word';
79
+ }
80
+ return;
81
+ }
82
+ const word = this.#word;
83
+ const lower = word.toLowerCase();
84
+ this.#word = '';
85
+ if (lower === 'bearer' && /\s/.test(value)) {
86
+ this.#emit(word + value);
87
+ this.#state = 'bearer-space';
88
+ return;
89
+ }
90
+ if (ASSIGNMENT_WORDS.has(lower) && (/\s/.test(value) || value === ':' || value === '=')) {
91
+ if (value === ':' || value === '=') {
92
+ this.#emit(word + value);
93
+ this.#state = 'key-value-space';
94
+ }
95
+ else {
96
+ this.#keyBuffer = word + value;
97
+ this.#state = 'key-space';
98
+ }
99
+ return;
100
+ }
101
+ this.#emit(word);
102
+ this.#state = 'normal';
103
+ this.#character(value);
104
+ return;
105
+ }
106
+ if (this.#state === 'passthrough-word') {
107
+ if (this.#wordChar(value))
108
+ this.#emit(value);
109
+ else {
110
+ this.#state = 'normal';
111
+ this.#character(value);
112
+ }
113
+ return;
114
+ }
115
+ if (this.#state === 'bearer-space') {
116
+ if (/\s/.test(value))
117
+ this.#emit(value);
118
+ else if (this.#secretEnd(value, false)) {
119
+ this.#state = 'normal';
120
+ this.#character(value);
121
+ }
122
+ else {
123
+ this.#emit(PROBE_REDACTION_MARKER);
124
+ this.#state = 'bearer-value';
125
+ }
126
+ return;
127
+ }
128
+ if (this.#state === 'bearer-value') {
129
+ if (this.#secretEnd(value, false)) {
130
+ this.#state = 'normal';
131
+ this.#character(value);
132
+ }
133
+ return;
134
+ }
135
+ if (this.#state === 'key-space') {
136
+ if (/\s/.test(value))
137
+ this.#keyBuffer += value;
138
+ else if (value === ':' || value === '=') {
139
+ this.#emit(this.#keyBuffer + value);
140
+ this.#keyBuffer = '';
141
+ this.#state = 'key-value-space';
142
+ }
143
+ else {
144
+ this.#emit(this.#keyBuffer);
145
+ this.#keyBuffer = '';
146
+ this.#state = 'normal';
147
+ this.#character(value);
148
+ }
149
+ return;
150
+ }
151
+ if (this.#state === 'key-value-space') {
152
+ if (/\s/.test(value))
153
+ this.#emit(value);
154
+ else if (this.#secretEnd(value, true)) {
155
+ this.#state = 'normal';
156
+ this.#character(value);
157
+ }
158
+ else {
159
+ this.#emit(PROBE_REDACTION_MARKER);
160
+ this.#state = 'key-value';
161
+ }
162
+ return;
163
+ }
164
+ if (this.#secretEnd(value, true)) {
165
+ this.#state = 'normal';
166
+ this.#character(value);
167
+ }
168
+ }
169
+ }
170
+ export function redactProbeText(input) {
171
+ const redactor = new StreamingProbeRedactor();
172
+ redactor.write(Buffer.from(input, 'utf8'));
173
+ return redactor.finish().bytes.toString('utf8');
174
+ }
175
+ function killProcessTree(child) {
176
+ if (child.pid === undefined)
177
+ return;
178
+ if (process.platform !== 'win32') {
179
+ try {
180
+ process.kill(-child.pid, 'SIGKILL');
181
+ return;
182
+ }
183
+ catch {
184
+ child.kill('SIGKILL');
185
+ return;
186
+ }
187
+ }
188
+ // Windows has no negative-PID process groups. taskkill /T is the native tree
189
+ // primitive; the direct kill remains a fail-safe if taskkill itself is absent.
190
+ const killer = spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], {
191
+ stdio: 'ignore',
192
+ windowsHide: true,
193
+ });
194
+ killer.once('error', () => child.kill('SIGKILL'));
195
+ }
196
+ function validateRequest(value) {
197
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
198
+ throw new Error('invalid worker request');
199
+ const row = value;
200
+ if (typeof row['command'] !== 'string' || typeof row['cwd'] !== 'string' ||
201
+ !Array.isArray(row['args']) || !row['args'].every((arg) => typeof arg === 'string')) {
202
+ throw new Error('invalid worker command');
203
+ }
204
+ for (const key of ['timeoutMs', 'streamMaxBytes', 'aggregateMaxBytes']) {
205
+ if (!Number.isSafeInteger(row[key]) || row[key] <= 0)
206
+ throw new Error(`invalid worker ${key}`);
207
+ }
208
+ return {
209
+ command: row['command'], cwd: row['cwd'], args: row['args'],
210
+ timeoutMs: row['timeoutMs'],
211
+ streamMaxBytes: row['streamMaxBytes'],
212
+ aggregateMaxBytes: row['aggregateMaxBytes'],
213
+ };
214
+ }
215
+ function withTruncationMarker(bytes, maxBytes) {
216
+ const marker = Buffer.from(PROBE_TRUNCATION_MARKER, 'utf8');
217
+ if (marker.length >= maxBytes)
218
+ return marker.subarray(0, maxBytes);
219
+ const keep = Math.min(bytes.length, maxBytes - marker.length);
220
+ let prefix = bytes.subarray(0, keep);
221
+ while (prefix.length > 0) {
222
+ try {
223
+ new TextDecoder('utf-8', { fatal: true }).decode(prefix);
224
+ break;
225
+ }
226
+ catch {
227
+ prefix = prefix.subarray(0, prefix.length - 1);
228
+ }
229
+ }
230
+ return Buffer.concat([prefix, marker]);
231
+ }
232
+ export function runProbeWorker(request) {
233
+ return new Promise((resolveResult) => {
234
+ const stdout = new StreamingProbeRedactor();
235
+ const stderr = new StreamingProbeRedactor();
236
+ let stdoutBytes = 0;
237
+ let stderrBytes = 0;
238
+ let truncated = false;
239
+ let truncatedStream;
240
+ let timedOut = false;
241
+ let settled = false;
242
+ let invalidUtf8 = false;
243
+ let spawnError;
244
+ const child = spawn(request.command, [...request.args], {
245
+ cwd: request.cwd,
246
+ detached: process.platform !== 'win32',
247
+ env: process.env,
248
+ stdio: ['ignore', 'pipe', 'pipe'],
249
+ windowsHide: true,
250
+ });
251
+ const killOnce = () => {
252
+ if (!child.killed)
253
+ killProcessTree(child);
254
+ };
255
+ const capture = (stream, chunk) => {
256
+ if (settled || truncated)
257
+ return;
258
+ const ownBytes = stream === 'stdout' ? stdoutBytes : stderrBytes;
259
+ const remaining = Math.max(0, Math.min(request.streamMaxBytes - ownBytes, request.aggregateMaxBytes - stdoutBytes - stderrBytes));
260
+ const accepted = chunk.subarray(0, Math.min(chunk.length, remaining));
261
+ if (accepted.length > 0 && !(stream === 'stdout' ? stdout : stderr).write(accepted)) {
262
+ invalidUtf8 = true;
263
+ killOnce();
264
+ return;
265
+ }
266
+ if (stream === 'stdout')
267
+ stdoutBytes += accepted.length;
268
+ else
269
+ stderrBytes += accepted.length;
270
+ if (accepted.length < chunk.length) {
271
+ truncated = true;
272
+ truncatedStream = stream;
273
+ killOnce();
274
+ }
275
+ };
276
+ child.stdout?.on('data', (chunk) => capture('stdout', chunk));
277
+ child.stderr?.on('data', (chunk) => capture('stderr', chunk));
278
+ child.once('error', (error) => {
279
+ spawnError = error.code ?? 'PROCESS_ERROR';
280
+ });
281
+ const timer = setTimeout(() => {
282
+ timedOut = true;
283
+ killOnce();
284
+ }, request.timeoutMs);
285
+ timer.unref();
286
+ child.once('close', (status, signal) => {
287
+ settled = true;
288
+ clearTimeout(timer);
289
+ const cleanOut = stdout.finish();
290
+ const cleanErr = stderr.finish();
291
+ invalidUtf8 ||= cleanOut.invalidUtf8 || cleanErr.invalidUtf8;
292
+ const stdoutLimit = Math.min(request.streamMaxBytes, Math.max(0, request.aggregateMaxBytes - cleanErr.bytes.length));
293
+ const stderrLimit = Math.min(request.streamMaxBytes, Math.max(0, request.aggregateMaxBytes - cleanOut.bytes.length));
294
+ const stdoutBytesOut = truncatedStream === 'stdout'
295
+ ? withTruncationMarker(cleanOut.bytes, stdoutLimit)
296
+ : cleanOut.bytes;
297
+ const stderrBytesOut = truncatedStream === 'stderr'
298
+ ? withTruncationMarker(cleanErr.bytes, stderrLimit)
299
+ : cleanErr.bytes;
300
+ resolveResult({
301
+ status,
302
+ signal,
303
+ stdoutBase64: stdoutBytesOut.toString('base64'),
304
+ stderrBase64: stderrBytesOut.toString('base64'),
305
+ ...(timedOut ? { errorCode: 'ETIMEDOUT' }
306
+ : truncated ? { errorCode: 'OUTPUT_TRUNCATED' }
307
+ : invalidUtf8 ? { errorCode: 'INVALID_UTF8' }
308
+ : spawnError !== undefined ? { errorCode: spawnError } : {}),
309
+ truncated,
310
+ });
311
+ });
312
+ });
313
+ }
314
+ async function main() {
315
+ const chunks = [];
316
+ let size = 0;
317
+ for await (const chunk of process.stdin) {
318
+ const bytes = Buffer.from(chunk);
319
+ size += bytes.length;
320
+ if (size > WORKER_INPUT_MAX_BYTES)
321
+ throw new Error('worker request too large');
322
+ chunks.push(bytes);
323
+ }
324
+ const request = validateRequest(JSON.parse(Buffer.concat(chunks).toString('utf8')));
325
+ process.stdout.write(`${JSON.stringify(await runProbeWorker(request))}\n`);
326
+ }
327
+ const invokedPath = process.argv[1];
328
+ if (invokedPath !== undefined && realpathSync(resolve(invokedPath)) === realpathSync(fileURLToPath(import.meta.url))) {
329
+ main().catch((error) => {
330
+ process.stderr.write(`integration probe worker failed: ${error instanceof Error ? error.message : String(error)}\n`);
331
+ process.exitCode = 1;
332
+ });
333
+ }
334
+ //# sourceMappingURL=integration-probe-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-probe-worker.js","sourceRoot":"","sources":["../src/integration-probe-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /** Bounded, non-executing target registration verification. */
2
+ import type { IntegrationComponent, IntegrationReasonCode } from '@dzhechkov/core';
3
+ import { type RegistrationObservation } from './target-integrations.js';
4
+ import type { TargetName } from './targets.js';
5
+ export declare const INTEGRATION_PROBE_TIMEOUT_MS = 30000;
6
+ export declare const INTEGRATION_PROBE_STREAM_MAX_BYTES: number;
7
+ export declare const INTEGRATION_PROBE_AGGREGATE_MAX_BYTES: number;
8
+ export interface IntegrationProcessRequest {
9
+ readonly command: string;
10
+ readonly args: readonly string[];
11
+ readonly cwd: string;
12
+ readonly timeoutMs: number;
13
+ }
14
+ export interface IntegrationProcessObservation {
15
+ readonly status: number | null;
16
+ readonly signal: string | null;
17
+ readonly stdout: Uint8Array;
18
+ readonly stderr: Uint8Array;
19
+ readonly errorCode?: string;
20
+ }
21
+ export interface IntegrationProcessPort {
22
+ run(request: IntegrationProcessRequest): IntegrationProcessObservation;
23
+ }
24
+ export type IntegrationExecutableResolution = {
25
+ readonly ok: true;
26
+ readonly path: string;
27
+ } | {
28
+ readonly ok: false;
29
+ readonly errorCode: 'ENOENT' | 'UNSAFE_EXECUTABLE';
30
+ };
31
+ /** Resolve PATH once and reject a project-controlled probe binary before spawning it. */
32
+ export declare function resolveIntegrationExecutable(command: string, cwd: string, pathValue?: string): IntegrationExecutableResolution;
33
+ export declare const defaultIntegrationProcessPort: IntegrationProcessPort;
34
+ export interface VerifyTargetIntegrationOptions {
35
+ readonly target: TargetName;
36
+ readonly component: IntegrationComponent;
37
+ readonly projectRoot: string;
38
+ readonly registrationId?: string;
39
+ readonly phase?: 'preflight' | 'post-write';
40
+ readonly processPort?: IntegrationProcessPort;
41
+ }
42
+ export interface IntegrationVerification {
43
+ readonly ok: boolean;
44
+ readonly target: TargetName;
45
+ readonly component: IntegrationComponent;
46
+ readonly runtimeVersion?: string;
47
+ readonly evidenceVersion?: string;
48
+ readonly reasonCode?: IntegrationReasonCode;
49
+ readonly remediation?: string;
50
+ readonly registrations: readonly RegistrationObservation[];
51
+ }
52
+ /**
53
+ * Verify only code-owned native list/get surfaces. Manifest command/URL fields
54
+ * are intentionally absent from this API, so they cannot be executed here.
55
+ */
56
+ export declare function verifyTargetIntegration(options: VerifyTargetIntegrationOptions): IntegrationVerification;
57
+ export interface RunIntegrationsVerifyOptions extends VerifyTargetIntegrationOptions {
58
+ }
59
+ export declare function runIntegrationsVerify(options: RunIntegrationsVerifyOptions): IntegrationVerification;
60
+ //# sourceMappingURL=integrations-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations-verify.d.ts","sourceRoot":"","sources":["../src/integrations-verify.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAQ/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGnF,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,eAAO,MAAM,kCAAkC,QAAc,CAAC;AAC9D,eAAO,MAAM,qCAAqC,QAAkB,CAAC;AAErE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,OAAO,EAAE,yBAAyB,GAAG,6BAA6B,CAAC;CACxE;AAED,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,mBAAmB,CAAA;CAAE,CAAC;AAE/E,yFAAyF;AACzF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,SAAS,SAA4B,GACpC,+BAA+B,CAqBjC;AAED,eAAO,MAAM,6BAA6B,EAAE,sBA4C3C,CAAC;AAEF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,uBAAuB,EAAE,CAAC;CAC5D;AAsED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,uBAAuB,CA2CxG;AAED,MAAM,WAAW,4BAA6B,SAAQ,8BAA8B;CAAG;AAEvF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,uBAAuB,CAEpG"}