@momentiq/dark-factory-cli 0.1.0-alpha.4

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 (132) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +150 -0
  3. package/dist/adapters/_shared.d.ts +45 -0
  4. package/dist/adapters/_shared.d.ts.map +1 -0
  5. package/dist/adapters/_shared.js +200 -0
  6. package/dist/adapters/_shared.js.map +1 -0
  7. package/dist/adapters/codex-sdk.d.ts +279 -0
  8. package/dist/adapters/codex-sdk.d.ts.map +1 -0
  9. package/dist/adapters/codex-sdk.js +930 -0
  10. package/dist/adapters/codex-sdk.js.map +1 -0
  11. package/dist/adapters/critic-result-schema.d.ts +215 -0
  12. package/dist/adapters/critic-result-schema.d.ts.map +1 -0
  13. package/dist/adapters/critic-result-schema.js +153 -0
  14. package/dist/adapters/critic-result-schema.js.map +1 -0
  15. package/dist/adapters/critic.d.ts +62 -0
  16. package/dist/adapters/critic.d.ts.map +1 -0
  17. package/dist/adapters/critic.js +79 -0
  18. package/dist/adapters/critic.js.map +1 -0
  19. package/dist/adapters/cursor-sdk.d.ts +153 -0
  20. package/dist/adapters/cursor-sdk.d.ts.map +1 -0
  21. package/dist/adapters/cursor-sdk.js +818 -0
  22. package/dist/adapters/cursor-sdk.js.map +1 -0
  23. package/dist/adapters/gemini-sdk.d.ts +113 -0
  24. package/dist/adapters/gemini-sdk.d.ts.map +1 -0
  25. package/dist/adapters/gemini-sdk.js +532 -0
  26. package/dist/adapters/gemini-sdk.js.map +1 -0
  27. package/dist/adapters/grok-direct-sdk.d.ts +148 -0
  28. package/dist/adapters/grok-direct-sdk.d.ts.map +1 -0
  29. package/dist/adapters/grok-direct-sdk.js +694 -0
  30. package/dist/adapters/grok-direct-sdk.js.map +1 -0
  31. package/dist/branch-protection/audit_branch_protection.py +759 -0
  32. package/dist/branch-protection/index.d.ts +25 -0
  33. package/dist/branch-protection/index.d.ts.map +1 -0
  34. package/dist/branch-protection/index.js +70 -0
  35. package/dist/branch-protection/index.js.map +1 -0
  36. package/dist/branch-protection/spec-default.yaml +314 -0
  37. package/dist/cli.d.ts +3 -0
  38. package/dist/cli.d.ts.map +1 -0
  39. package/dist/cli.js +581 -0
  40. package/dist/cli.js.map +1 -0
  41. package/dist/cycle-doc-validator/index.d.ts +43 -0
  42. package/dist/cycle-doc-validator/index.d.ts.map +1 -0
  43. package/dist/cycle-doc-validator/index.js +69 -0
  44. package/dist/cycle-doc-validator/index.js.map +1 -0
  45. package/dist/cycle-doc-validator/validate_cycle_doc.py +1260 -0
  46. package/dist/cycle-tracker-sync/attribute_pr_cycle_ref.py +384 -0
  47. package/dist/cycle-tracker-sync/index.d.ts +20 -0
  48. package/dist/cycle-tracker-sync/index.d.ts.map +1 -0
  49. package/dist/cycle-tracker-sync/index.js +71 -0
  50. package/dist/cycle-tracker-sync/index.js.map +1 -0
  51. package/dist/cycle-tracker-sync/sync_cycle_trackers.py +1093 -0
  52. package/dist/evidence/audit-trail.d.ts +59 -0
  53. package/dist/evidence/audit-trail.d.ts.map +1 -0
  54. package/dist/evidence/audit-trail.js +283 -0
  55. package/dist/evidence/audit-trail.js.map +1 -0
  56. package/dist/evidence/index.d.ts +4 -0
  57. package/dist/evidence/index.d.ts.map +1 -0
  58. package/dist/evidence/index.js +29 -0
  59. package/dist/evidence/index.js.map +1 -0
  60. package/dist/evidence/per-sha.d.ts +13 -0
  61. package/dist/evidence/per-sha.d.ts.map +1 -0
  62. package/dist/evidence/per-sha.js +97 -0
  63. package/dist/evidence/per-sha.js.map +1 -0
  64. package/dist/evidence/quality-gates.d.ts +19 -0
  65. package/dist/evidence/quality-gates.d.ts.map +1 -0
  66. package/dist/evidence/quality-gates.js +212 -0
  67. package/dist/evidence/quality-gates.js.map +1 -0
  68. package/dist/git.d.ts +40 -0
  69. package/dist/git.d.ts.map +1 -0
  70. package/dist/git.js +414 -0
  71. package/dist/git.js.map +1 -0
  72. package/dist/glob.d.ts +4 -0
  73. package/dist/glob.d.ts.map +1 -0
  74. package/dist/glob.js +99 -0
  75. package/dist/glob.js.map +1 -0
  76. package/dist/index.d.ts +17 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +33 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/paths.d.ts +12 -0
  81. package/dist/paths.d.ts.map +1 -0
  82. package/dist/paths.js +42 -0
  83. package/dist/paths.js.map +1 -0
  84. package/dist/policy/baseline.d.ts +15 -0
  85. package/dist/policy/baseline.d.ts.map +1 -0
  86. package/dist/policy/baseline.js +115 -0
  87. package/dist/policy/baseline.js.map +1 -0
  88. package/dist/policy/config.d.ts +64 -0
  89. package/dist/policy/config.d.ts.map +1 -0
  90. package/dist/policy/config.js +363 -0
  91. package/dist/policy/config.js.map +1 -0
  92. package/dist/policy/gate.d.ts +80 -0
  93. package/dist/policy/gate.d.ts.map +1 -0
  94. package/dist/policy/gate.js +1019 -0
  95. package/dist/policy/gate.js.map +1 -0
  96. package/dist/policy/index.d.ts +7 -0
  97. package/dist/policy/index.d.ts.map +1 -0
  98. package/dist/policy/index.js +14 -0
  99. package/dist/policy/index.js.map +1 -0
  100. package/dist/policy/merge-queue.d.ts +183 -0
  101. package/dist/policy/merge-queue.d.ts.map +1 -0
  102. package/dist/policy/merge-queue.js +310 -0
  103. package/dist/policy/merge-queue.js.map +1 -0
  104. package/dist/policy/profile.d.ts +98 -0
  105. package/dist/policy/profile.d.ts.map +1 -0
  106. package/dist/policy/profile.js +156 -0
  107. package/dist/policy/profile.js.map +1 -0
  108. package/dist/policy/tdd-classifier.d.ts +18 -0
  109. package/dist/policy/tdd-classifier.d.ts.map +1 -0
  110. package/dist/policy/tdd-classifier.js +79 -0
  111. package/dist/policy/tdd-classifier.js.map +1 -0
  112. package/dist/prompt.d.ts +13 -0
  113. package/dist/prompt.d.ts.map +1 -0
  114. package/dist/prompt.js +175 -0
  115. package/dist/prompt.js.map +1 -0
  116. package/dist/report.d.ts +88 -0
  117. package/dist/report.d.ts.map +1 -0
  118. package/dist/report.js +376 -0
  119. package/dist/report.js.map +1 -0
  120. package/dist/runner.d.ts +30 -0
  121. package/dist/runner.d.ts.map +1 -0
  122. package/dist/runner.js +456 -0
  123. package/dist/runner.js.map +1 -0
  124. package/dist/security.d.ts +2 -0
  125. package/dist/security.d.ts.map +1 -0
  126. package/dist/security.js +19 -0
  127. package/dist/security.js.map +1 -0
  128. package/dist/trusted-surface/rebind.d.ts +10 -0
  129. package/dist/trusted-surface/rebind.d.ts.map +1 -0
  130. package/dist/trusted-surface/rebind.js +154 -0
  131. package/dist/trusted-surface/rebind.js.map +1 -0
  132. package/package.json +78 -0
@@ -0,0 +1,148 @@
1
+ import { type CriticConfig, type CriticResult, type DoctorCheck, type ReviewPacket } from "@momentiq/dark-factory-schemas";
2
+ import type { CriticAdapter, CriticReviewOptions } from "./critic.js";
3
+ export declare const GROK_DIRECT_SDK_ADAPTER_ID = "grok-direct-sdk";
4
+ export declare const XAI_API_KEY_ENV = "XAI_API_KEY";
5
+ export declare const XAI_BASE_URL = "https://api.x.ai/v1";
6
+ export declare const GROK_PERMANENT_STATUS: ReadonlySet<number>;
7
+ export declare const DEFAULT_REASONING_EFFORT: "high";
8
+ export type GrokReasoningEffort = "low" | "medium" | "high" | "none";
9
+ /**
10
+ * Test-shape compatible with the `openai` SDK's OpenAI client. The
11
+ * unit tests pass a mock conforming to this shape; production passes
12
+ * the real `new OpenAI({ apiKey, baseURL })` instance through the
13
+ * `createClient` factory on the adapter constructor.
14
+ *
15
+ * Documenting this shape here (rather than relying on the SDK's
16
+ * exported type) lets the test mocks stay narrow and resilient to
17
+ * SDK internal shape changes. The adapter uses ONLY the surface
18
+ * declared here — every SDK method the adapter calls is on this
19
+ * interface, so an SDK upgrade that re-shapes other surfaces won't
20
+ * silently break the adapter.
21
+ */
22
+ export interface GrokClient {
23
+ responses: {
24
+ create: (params: GrokResponsesCreateParams, requestOptions?: {
25
+ signal?: AbortSignal;
26
+ }) => Promise<AsyncIterable<GrokStreamEvent>>;
27
+ };
28
+ models: {
29
+ list: () => AsyncIterable<{
30
+ id?: string;
31
+ }> | Promise<AsyncIterable<{
32
+ id?: string;
33
+ }>>;
34
+ };
35
+ }
36
+ export interface GrokResponsesCreateParams {
37
+ model: string;
38
+ reasoning?: {
39
+ effort?: GrokReasoningEffort;
40
+ };
41
+ input: Array<{
42
+ role: "system" | "user" | "assistant";
43
+ content: string;
44
+ }>;
45
+ text?: {
46
+ format?: {
47
+ type: "json_object";
48
+ };
49
+ };
50
+ store?: false;
51
+ stream: true;
52
+ }
53
+ /**
54
+ * The shape of a single xAI Responses API stream event. xAI mirrors
55
+ * the OpenAI Responses API stream contract, where each event carries
56
+ * a `type` discriminator (`response.output_text.delta`,
57
+ * `response.completed`, `response.failed`, `response.refusal.delta`,
58
+ * etc.). The adapter only reads:
59
+ * - `type` (for dispatch)
60
+ * - `delta` (on output_text.delta — the text accumulator)
61
+ * - `response.usage.input_tokens` + `response.usage.output_tokens`
62
+ * (on response.completed — the telemetry token-usage signal)
63
+ * - `response.refusal_text` or similar (on response.refusal.*; the
64
+ * safety-block permanent-failure path)
65
+ *
66
+ * Field shapes treated as `unknown` so the adapter is resilient to
67
+ * xAI extending the event envelope between when this was written and
68
+ * when it runs. The actual stream event shape is captured in
69
+ * `tools/agent-review/evals/spike-grok-responses-2026-05.md`.
70
+ */
71
+ export interface GrokStreamEvent {
72
+ type?: string;
73
+ delta?: string;
74
+ response?: {
75
+ id?: string;
76
+ usage?: GrokUsage;
77
+ output?: Array<{
78
+ content?: Array<{
79
+ text?: string;
80
+ type?: string;
81
+ }>;
82
+ }>;
83
+ incomplete_details?: {
84
+ reason?: string;
85
+ };
86
+ };
87
+ refusal?: string;
88
+ }
89
+ export interface GrokUsage {
90
+ input_tokens?: number;
91
+ output_tokens?: number;
92
+ total_tokens?: number;
93
+ output_tokens_details?: {
94
+ reasoning_tokens?: number;
95
+ };
96
+ }
97
+ export interface GrokDirectSdkAdapterOptions {
98
+ apiKey?: string;
99
+ createClient?: (apiKey: string) => GrokClient;
100
+ sleep?: (idx: number, signal: AbortSignal | undefined) => Promise<void>;
101
+ }
102
+ /**
103
+ * Resolve the Grok reasoning-effort from the critic config's
104
+ * `model.params`. Falls back to {@link DEFAULT_REASONING_EFFORT}
105
+ * ("high") when unset. Validates against the documented
106
+ * Responses-API surface — invalid values fall back to the default
107
+ * rather than corrupting the request body.
108
+ *
109
+ * Coerces string inputs (the config schema's `value` is
110
+ * `string|number|boolean`; reasoning effort is always a string
111
+ * enum). Booleans and numbers are operator typos and use the
112
+ * default.
113
+ *
114
+ * Exported for direct unit testing (no SDK mock required).
115
+ */
116
+ export declare function resolveReasoningEffort(critic: CriticConfig): GrokReasoningEffort;
117
+ /**
118
+ * Probe a thrown error for an xAI Responses API HTTP status code.
119
+ * Returns `null` when the error didn't carry one (network error,
120
+ * non-API exception). Exported for direct unit testing.
121
+ *
122
+ * The `openai` SDK throws `APIError extends Error` with a `status:
123
+ * number` field on HTTP-level failures; a non-API failure (DNS,
124
+ * timeout in fetch, etc.) won't have this field set. Treating "no
125
+ * status" as retryable lets the loop catch real transient blips
126
+ * while not silently retrying logic errors.
127
+ */
128
+ export declare function extractXaiApiErrorStatus(err: unknown): number | null;
129
+ /**
130
+ * Policy gate: decide whether an xAI Responses API failure is
131
+ * retryable. Returns `false` for HTTP statuses in
132
+ * {@link GROK_PERMANENT_STATUS}, `true` otherwise (including
133
+ * no-status network errors).
134
+ *
135
+ * Exported for direct unit testing.
136
+ */
137
+ export declare function isGrokPermanentFailure(status: number | null): boolean;
138
+ export declare class GrokDirectSdkAdapter implements CriticAdapter {
139
+ private readonly options;
140
+ readonly id = "grok-direct-sdk";
141
+ readonly requiredEnvVars: readonly string[];
142
+ private readonly createClient;
143
+ constructor(options?: GrokDirectSdkAdapterOptions);
144
+ review(packet: ReviewPacket, critic: CriticConfig, options: CriticReviewOptions): Promise<CriticResult>;
145
+ private attemptReview;
146
+ doctor(critic: CriticConfig): Promise<DoctorCheck[]>;
147
+ }
148
+ //# sourceMappingURL=grok-direct-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grok-direct-sdk.d.ts","sourceRoot":"","sources":["../../src/adapters/grok-direct-sdk.ts"],"names":[],"mappings":"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"}