@warpgogol/forge 2.21.6 → 2.21.7

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 (41) hide show
  1. package/AGENTS.md +27 -1
  2. package/os/adr/adr-0000-template.md +8 -0
  3. package/os/adr/handlers/validate.test.ts +203 -0
  4. package/os/adr/handlers/validate.ts +54 -1
  5. package/os/adr/types.ts +7 -0
  6. package/os/compass/handlers/compass-inventory-handler.ts +11 -1
  7. package/os/compass/handlers/compass-inventory.ts +10 -0
  8. package/os/core/handlers/validate.ts +56 -5
  9. package/os/naming/naming-convention.ts +9 -0
  10. package/os/plugin/plugin.module.ts +1 -1
  11. package/os/rfc/acceptance.ts +133 -4
  12. package/os/rfc/handlers/implement-stamp.ts +14 -1
  13. package/os/rfc/handlers/validate-rules-rfc0997.test.ts +394 -0
  14. package/os/rfc/handlers/validate-rules-rfc1006.test.ts +478 -0
  15. package/os/rfc/handlers/validate-rules.ts +450 -9
  16. package/os/rfc/handlers/validate.ts +20 -2
  17. package/os/rfc/rfc-0000-template.md +24 -8
  18. package/os/rfc/rfc.module.ts +28 -0
  19. package/os/rfc/types.ts +72 -6
  20. package/os/rfc/verification-evidence.ts +5 -4
  21. package/os/rfc/verification-refresh.test.ts +320 -0
  22. package/os/rfc/verification-refresh.ts +216 -0
  23. package/os/session/handlers/save.ts +10 -0
  24. package/os/spec/spec-validate.test.ts +59 -0
  25. package/os/spec/spec-validate.ts +6 -4
  26. package/package.json +2 -1
  27. package/skills/fo/fo-handoff/SKILL.md +15 -6
  28. package/skills/fo/fo-idea-audit/SKILL.md +1 -1
  29. package/skills/fo/fo-idea-create-rfc/SKILL.md +1 -1
  30. package/skills/fo/fo-idea-create-rfc/acceptance-criteria-standard.md +75 -0
  31. package/skills/fo/fo-idea-implement/SKILL.md +3 -2
  32. package/src/compass/contract-registry.ts +25 -6
  33. package/src/index.ts +1 -1
  34. package/src/onboarding/doctor.ts +1 -1
  35. package/src/registry.ts +1 -1
  36. package/src/tests/acceptance-probe-kinds.test.ts +262 -0
  37. package/src/tests/plugin-manifest.test.ts +1 -1
  38. package/src/tests/session-handlers.test.ts +29 -0
  39. package/src/types/werkstatt-engine-shims.d.ts +0 -21
  40. package/src/types/werkstatt-shared-shims.d.ts +68 -147
  41. /package/src/plugin/{ForgePluginManifest.ts → forge-plugin-manifest.ts} +0 -0
@@ -0,0 +1,262 @@
1
+ // @vitest-environment node
2
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
3
+ import { mkdtemp, writeFile, rm } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import path from "node:path";
6
+ import { EventEmitter } from "node:events";
7
+ import { validateAcceptanceShape, runProbe } from "../../os/rfc/acceptance.ts";
8
+ import type { AcceptanceProbe } from "../../os/rfc/types.ts";
9
+
10
+ const mockSpawn = vi.hoisted(() => {
11
+ return vi.fn();
12
+ });
13
+
14
+ vi.mock("node:child_process", () => ({
15
+ spawn: mockSpawn,
16
+ }));
17
+
18
+ function createMockChild(exitCode: number | null): {
19
+ child: EventEmitter & { kill: () => void };
20
+ } {
21
+ const child = new EventEmitter() as EventEmitter & { kill: () => void };
22
+ child.kill = vi.fn();
23
+ mockSpawn.mockReturnValueOnce(child);
24
+ process.nextTick(() => {
25
+ child.emit("close", exitCode);
26
+ });
27
+ return { child };
28
+ }
29
+
30
+ describe("validateAcceptanceShape — test probe", () => {
31
+ it("accepts a well-formed test probe", () => {
32
+ const issues = validateAcceptanceShape([
33
+ { probe: "test", file: "src/test.ts", expect: { exitCode: 0 }, criterion: "AC-1" },
34
+ ]);
35
+ expect(issues).toEqual([]);
36
+ });
37
+
38
+ it("rejects a test probe missing file", () => {
39
+ const issues = validateAcceptanceShape([
40
+ { probe: "test", expect: { exitCode: 0 } },
41
+ ]);
42
+ expect(issues).toHaveLength(1);
43
+ expect(issues[0].message).toContain('requires a string "file"');
44
+ });
45
+
46
+ it("rejects a test probe missing expect.exitCode", () => {
47
+ const issues = validateAcceptanceShape([
48
+ { probe: "test", file: "src/test.ts" },
49
+ ]);
50
+ expect(issues).toHaveLength(1);
51
+ expect(issues[0].message).toContain("requires expect: { exitCode");
52
+ });
53
+
54
+ it("rejects a test probe with non-string testName", () => {
55
+ const issues = validateAcceptanceShape([
56
+ { probe: "test", file: "src/test.ts", testName: 123, expect: { exitCode: 0 } },
57
+ ]);
58
+ expect(issues).toHaveLength(1);
59
+ expect(issues[0].message).toContain("testName must be a string");
60
+ });
61
+ });
62
+
63
+ describe("validateAcceptanceShape — json-schema probe", () => {
64
+ it("accepts a well-formed json-schema probe", () => {
65
+ const issues = validateAcceptanceShape([
66
+ {
67
+ probe: "json-schema",
68
+ artifact: "docs/config.json",
69
+ schemaInline: { type: "object" },
70
+ criterion: "AC-3",
71
+ },
72
+ ]);
73
+ expect(issues).toEqual([]);
74
+ });
75
+
76
+ it("rejects a json-schema probe missing artifact", () => {
77
+ const issues = validateAcceptanceShape([
78
+ { probe: "json-schema", schemaInline: { type: "object" } },
79
+ ]);
80
+ expect(issues).toHaveLength(1);
81
+ expect(issues[0].message).toContain('requires a string "artifact"');
82
+ });
83
+
84
+ it("rejects a json-schema probe missing schemaInline", () => {
85
+ const issues = validateAcceptanceShape([
86
+ { probe: "json-schema", artifact: "docs/config.json" },
87
+ ]);
88
+ expect(issues).toHaveLength(1);
89
+ expect(issues[0].message).toContain('requires an object "schemaInline"');
90
+ });
91
+ });
92
+
93
+ describe("validateAcceptanceShape — unknown probe kind", () => {
94
+ it("lists test and json-schema in the expected kinds", () => {
95
+ const issues = validateAcceptanceShape([{ probe: "unknown-kind" }]);
96
+ expect(issues).toHaveLength(1);
97
+ expect(issues[0].message).toContain("test");
98
+ expect(issues[0].message).toContain("json-schema");
99
+ });
100
+ });
101
+
102
+ describe("validateAcceptanceShape — existing probe kinds (regression)", () => {
103
+ it("accepts well-formed run probe", () => {
104
+ const issues = validateAcceptanceShape([
105
+ { probe: "run", command: "werkstatt test", expect: { exitCode: 0 } },
106
+ ]);
107
+ expect(issues).toEqual([]);
108
+ });
109
+
110
+ it("accepts well-formed file-exists probe", () => {
111
+ const issues = validateAcceptanceShape([
112
+ { probe: "file-exists", path: "src/index.ts" },
113
+ ]);
114
+ expect(issues).toEqual([]);
115
+ });
116
+
117
+ it("accepts well-formed file-contains probe", () => {
118
+ const issues = validateAcceptanceShape([
119
+ { probe: "file-contains", path: "src/index.ts", pattern: "export" },
120
+ ]);
121
+ expect(issues).toEqual([]);
122
+ });
123
+
124
+ it("accepts well-formed command-registered probe", () => {
125
+ const issues = validateAcceptanceShape([
126
+ { probe: "command-registered", name: "rfc.validate" },
127
+ ]);
128
+ expect(issues).toEqual([]);
129
+ });
130
+
131
+ it("accepts well-formed page probe", () => {
132
+ const issues = validateAcceptanceShape([
133
+ { probe: "page", path: "/about" },
134
+ ]);
135
+ expect(issues).toEqual([]);
136
+ });
137
+ });
138
+
139
+ describe("runProbe — test probe", () => {
140
+ beforeEach(() => {
141
+ mockSpawn.mockClear();
142
+ });
143
+
144
+ it("returns ok:true when vitest exits with expected code (AC-1)", async () => {
145
+ createMockChild(0);
146
+ const probe: AcceptanceProbe = {
147
+ probe: "test",
148
+ file: "src/foo.test.ts",
149
+ expect: { exitCode: 0 },
150
+ criterion: "AC-1",
151
+ };
152
+ const result = await runProbe(probe, "/fake/workspace");
153
+ expect(result.ok).toBe(true);
154
+ expect(result.detail).toContain("exitCode=0");
155
+ });
156
+
157
+ it("returns ok:false when vitest exits with unexpected code (AC-2)", async () => {
158
+ createMockChild(1);
159
+ const probe: AcceptanceProbe = {
160
+ probe: "test",
161
+ file: "src/foo.test.ts",
162
+ expect: { exitCode: 0 },
163
+ criterion: "AC-2",
164
+ };
165
+ const result = await runProbe(probe, "/fake/workspace");
166
+ expect(result.ok).toBe(false);
167
+ expect(result.detail).toContain("exitCode=1");
168
+ });
169
+
170
+ it("passes testName as -t argument to vitest", async () => {
171
+ createMockChild(0);
172
+ const probe: AcceptanceProbe = {
173
+ probe: "test",
174
+ file: "src/foo.test.ts",
175
+ testName: "my test",
176
+ expect: { exitCode: 0 },
177
+ };
178
+ await runProbe(probe, "/fake/workspace");
179
+ expect(mockSpawn).toHaveBeenCalledWith(
180
+ "pnpm",
181
+ ["exec", "vitest", "run", "src/foo.test.ts", "-t", "my test"],
182
+ { cwd: "/fake/workspace", stdio: "ignore" },
183
+ );
184
+ });
185
+ });
186
+
187
+ describe("runProbe — json-schema probe", () => {
188
+ let tempDir: string;
189
+
190
+ beforeEach(async () => {
191
+ tempDir = await mkdtemp(path.join(tmpdir(), "rfc0998-test-"));
192
+ });
193
+
194
+ afterEach(async () => {
195
+ await rm(tempDir, { recursive: true, force: true });
196
+ });
197
+
198
+ it("returns ok:true when artifact matches schema (AC-3)", async () => {
199
+ const artifactPath = path.join(tempDir, "valid.json");
200
+ await writeFile(artifactPath, JSON.stringify({ name: "test", version: 1 }));
201
+ const probe: AcceptanceProbe = {
202
+ probe: "json-schema",
203
+ artifact: path.relative("/fake/workspace", artifactPath),
204
+ schemaInline: {
205
+ type: "object",
206
+ properties: {
207
+ name: { type: "string" },
208
+ version: { type: "number" },
209
+ },
210
+ required: ["name", "version"],
211
+ },
212
+ criterion: "AC-3",
213
+ };
214
+ const result = await runProbe(probe, tempDir);
215
+ expect(result.ok).toBe(true);
216
+ expect(result.detail).toContain("schema valid");
217
+ });
218
+
219
+ it("returns ok:false when artifact does not match schema (AC-4)", async () => {
220
+ const artifactPath = path.join(tempDir, "invalid.json");
221
+ await writeFile(artifactPath, JSON.stringify({ name: 123 }));
222
+ const probe: AcceptanceProbe = {
223
+ probe: "json-schema",
224
+ artifact: "invalid.json",
225
+ schemaInline: {
226
+ type: "object",
227
+ properties: {
228
+ name: { type: "string" },
229
+ },
230
+ required: ["name"],
231
+ },
232
+ criterion: "AC-4",
233
+ };
234
+ const result = await runProbe(probe, tempDir);
235
+ expect(result.ok).toBe(false);
236
+ expect(result.detail).toContain("Ajv error");
237
+ });
238
+
239
+ it("returns ok:false when artifact file not found", async () => {
240
+ const probe: AcceptanceProbe = {
241
+ probe: "json-schema",
242
+ artifact: "nonexistent.json",
243
+ schemaInline: { type: "object" },
244
+ };
245
+ const result = await runProbe(probe, tempDir);
246
+ expect(result.ok).toBe(false);
247
+ expect(result.detail).toContain("artifact file not found");
248
+ });
249
+
250
+ it("returns ok:false when artifact is unparseable", async () => {
251
+ const artifactPath = path.join(tempDir, "bad.json");
252
+ await writeFile(artifactPath, "{ not valid json");
253
+ const probe: AcceptanceProbe = {
254
+ probe: "json-schema",
255
+ artifact: "bad.json",
256
+ schemaInline: { type: "object" },
257
+ };
258
+ const result = await runProbe(probe, tempDir);
259
+ expect(result.ok).toBe(false);
260
+ expect(result.detail).toContain("could not be parsed");
261
+ });
262
+ });
@@ -1,5 +1,5 @@
1
1
  import { test, expect, describe } from "vitest";
2
- import { forgePluginManifestSchema } from "../plugin/ForgePluginManifest.ts";
2
+ import { forgePluginManifestSchema } from "../plugin/forge-plugin-manifest.ts";
3
3
 
4
4
  describe("forgePluginManifestSchema (RFC-0941, RFC-0943)", () => {
5
5
  test("accepts valid manifest with id and version", () => {
@@ -99,6 +99,35 @@ describe("session.save", () => {
99
99
  expect(data2.skipped[0]).toHaveProperty("reason", "already converted");
100
100
  });
101
101
 
102
+ test("deletes raw file on skip when --keep-raw is not set (idempotency cleanup)", async () => {
103
+ const uniqueAtif = `2026-07-27T09:15:00+02:00
104
+ User: Fix the session.save idempotency bug in save.ts.
105
+ Assistant: Done. Raw files are now deleted even when the output .md already exists.
106
+ Commit: b7e3f9a fixed idempotency cleanup in skip branch.
107
+ Files: packages/forge/os/session/handlers/save.ts
108
+ Commands: session.save`;
109
+ const rawPath = join(dir, "docs/sessions/.raw", "2026-07-27-session-idempotency.atif");
110
+ await writeFile(rawPath, uniqueAtif, "utf-8");
111
+
112
+ // First save converts and deletes raw (no --keep-raw)
113
+ const result1 = await runSessionSave(makeInput(), makeContext(dir));
114
+ const data1 = result1.data as SessionSaveResult & { skipped: unknown[] };
115
+ expect(data1.id).toBeDefined();
116
+ expect(data1.rawDeleted).toBe(true);
117
+
118
+ // Write the same raw file again to simulate a re-run
119
+ await writeFile(rawPath, uniqueAtif, "utf-8");
120
+
121
+ // Second save should skip (already converted) AND delete the raw file
122
+ const result2 = await runSessionSave(makeInput(), makeContext(dir));
123
+ const data2 = result2.data as SessionSaveResult & { skipped: unknown[] };
124
+ expect(data2.skipped.length).toBeGreaterThan(0);
125
+ expect(data2.skipped[0]).toHaveProperty("reason", "already converted");
126
+
127
+ // Raw file must be deleted even on skip — this is the bug fix
128
+ await expect(readFile(rawPath, "utf-8")).rejects.toThrow();
129
+ });
130
+
102
131
  test("no raw files — exit zero with summary", async () => {
103
132
  const emptyDir = await makeTempDir();
104
133
  try {
@@ -110,13 +110,6 @@ declare module "@warpgogol/werkstatt-engine/kernel" {
110
110
  export interface DirEntry {}
111
111
  export interface WorkspaceIO {}
112
112
  export interface WriteIntent {}
113
- export function runLagebildTenantAdd(...args: any[]): any;
114
- export function runLagebildTenantEnable(...args: any[]): any;
115
- export function runLagebildTenantDisable(...args: any[]): any;
116
- export function runLagebildTenantStatus(...args: any[]): any;
117
- export function runLagebildTenantRotateSecret(...args: any[]): any;
118
- export function runLagebildValidate(...args: any[]): any;
119
- export const lagebildModule: any;
120
113
  export function classifyPaths(...args: any[]): any;
121
114
  export function deriveImpactedApps(...args: any[]): any;
122
115
  export function recommendProfile(...args: any[]): any;
@@ -315,20 +308,6 @@ declare module "@warpgogol/werkstatt-engine/kernel/swim-module" {
315
308
  export const swimModule: any;
316
309
  }
317
310
 
318
- declare module "@warpgogol/werkstatt-engine/kernel/lagebild" {
319
- export function runLagebildTenantAdd(...args: any[]): any;
320
- export function runLagebildTenantEnable(...args: any[]): any;
321
- export function runLagebildTenantDisable(...args: any[]): any;
322
- export function runLagebildTenantStatus(...args: any[]): any;
323
- export function runLagebildTenantRotateSecret(...args: any[]): any;
324
- export function runLagebildValidate(...args: any[]): any;
325
- export const lagebildModule: any;
326
- }
327
-
328
- declare module "@warpgogol/werkstatt-engine/kernel/lagebild-module" {
329
- export const lagebildModule: any;
330
- }
331
-
332
311
  declare module "@warpgogol/werkstatt-engine/kernel/pipeline-budget" {
333
312
  export const pipelineBudgetModule: any;
334
313
  }
@@ -137,12 +137,6 @@ declare module "@warpgogol/werkstatt-shared/integration" {
137
137
  export const EXECUTION_MODES: any;
138
138
  export const eventToLeadMessage: any;
139
139
  export const eventToLead: any;
140
- export const BUFFER_DEAL_STAGES: any;
141
- export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
142
- export const bridgeFunnelStage: any;
143
- export const isFunnelStage: any;
144
- export const SYNC_OUTBOX_STATUSES: any;
145
- export const SYNC_OUTBOX_OPS: any;
146
140
  export const FUNNEL_VERSION: any;
147
141
  export const VISITOR_FUNNEL_STAGES: any;
148
142
  export const FUNNEL_ENTRY_STAGE: any;
@@ -153,6 +147,11 @@ declare module "@warpgogol/werkstatt-shared/integration" {
153
147
  export const VISITOR_BUYER_TYPES: any;
154
148
  export const FUNNEL_TRANSITIONS: any;
155
149
  export const isValidFunnelStage: any;
150
+ export const BUFFER_DEAL_STAGES: any;
151
+ export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
152
+ export const bridgeFunnelStage: any;
153
+ export const SYNC_OUTBOX_STATUSES: any;
154
+ export const SYNC_OUTBOX_OPS: any;
156
155
  export const canTransition: any;
157
156
  export const nextStages: any;
158
157
  export const reachableStages: any;
@@ -203,66 +202,19 @@ declare module "@warpgogol/werkstatt-shared/integration" {
203
202
  export const enqueueEvent: any;
204
203
  export const consumeIntegrationBatch: any;
205
204
  export const upsertLead: any;
206
- }
207
-
208
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm" {
209
- export const supabaseBufferDestinationAdapter: any;
210
- export const SUPABASE_BUFFER_SECRETS: any;
211
- export const createSupabaseCrmBufferClient: any;
212
- export const SupabaseCrmBufferClient: any;
213
- export const createSyncTarget: any;
214
- export const PipedriveSyncTarget: any;
215
- export const resolvePipedriveStageUpdate: any;
216
- export const STAGE_MAP: any;
217
- }
218
-
219
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/tenant-registry" {
220
- export function resolveTenantSecrets(...args: any[]): any;
221
- export function getEnabledTenants(...args: any[]): any;
222
- export function updateTenantHealth(...args: any[]): any;
223
- export function createTenant(...args: any[]): any;
224
- export function getTenantBySiteName(...args: any[]): any;
225
- export function setTenantEnabled(...args: any[]): any;
226
- export function updateTenantSecretRef(...args: any[]): any;
227
- export function countOutboxByStatus(...args: any[]): any;
228
- export interface SyncTenant {}
229
- export interface TenantSecretRefs {}
230
- export interface TenantWithSecrets {}
231
- export interface RegistryClient {}
232
- export interface CreateTenantInput {}
233
- export type SecretKind = any;
234
- }
235
-
236
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/worker" {
237
- export function createLagebildSharedSyncWorker(...args: any[]): any;
238
- export interface LagebildSharedWorkerEnv {}
239
- }
240
-
241
- declare module "@warpgogol/werkstatt-shared/integration/crm-buffer" {
242
- export function bridgeFunnelStage(...args: any[]): any;
243
- export function isFunnelStage(...args: any[]): any;
244
- export const BUFFER_DEAL_STAGES: any;
245
- export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
246
- export const SYNC_OUTBOX_STATUSES: any;
247
- export const SYNC_OUTBOX_OPS: any;
248
- export interface BufferContact {}
249
- export interface BufferOrganization {}
250
- export interface BufferDeal {}
251
- export interface BufferStageTransition {}
252
- export interface BufferFunnelEvent {}
253
- export interface BufferConsentEvent {}
254
- export interface BufferSubscription {}
255
- export interface BufferInvoice {}
256
- export interface SyncOutboxRow {}
257
- export interface BufferUpsertResult {}
258
- export interface OutboxWriteResult {}
259
- export interface CrmBufferWriter {}
260
- export interface DealPipedriveIdPatch {}
261
- export interface CrmBufferReader {}
262
- export type BufferDealStage = any;
263
- export type SyncOutboxStatus = any;
264
- export type SyncOutboxOp = any;
265
- export type CrmBufferClient = any;
205
+ export const submitIngress: any;
206
+ export const buildIdempotencyKey: any;
207
+ export const LAGEBILD_INGRESS_CONTRACT_VERSION: any;
208
+ export const LagebildIngressConfig: any;
209
+ export const IngressSubmitInput: any;
210
+ export const WebsiteIngressPayload: any;
211
+ export const IngressResult: any;
212
+ export const IngressInteractionKind: any;
213
+ export const IdentityClaimType: any;
214
+ export const IdentityClaim: any;
215
+ export const IngressOrigin: any;
216
+ export const ExplicitPolicyAssertion: any;
217
+ export const PolicyAssertionKind: any;
266
218
  }
267
219
 
268
220
  declare module "@warpgogol/werkstatt-shared/integration/port" {
@@ -1122,6 +1074,7 @@ declare module "@warpgogol/werkstatt-shared/share" {
1122
1074
 
1123
1075
  declare module "@warpgogol/werkstatt-shared/share/agent" {
1124
1076
  export function canonicalJson(...args: any[]): any;
1077
+ export function computeSignedContentHash(...args: any[]): any;
1125
1078
  export function computeAgentManifestContentHash(...args: any[]): any;
1126
1079
  export function buildAgentSurfaceManifest(...args: any[]): any;
1127
1080
  export const AGENT_SURFACE_VERSION: any;
@@ -2349,6 +2302,7 @@ declare module "@warpgogol/werkstatt-shared/integration/funnel" {
2349
2302
  export function nextStages(...args: any[]): any;
2350
2303
  export function reachableStages(...args: any[]): any;
2351
2304
  export function scanForMakeComReferences(...args: any[]): any;
2305
+ export function bridgeFunnelStage(...args: any[]): any;
2352
2306
  export const FUNNEL_VERSION: any;
2353
2307
  export const VISITOR_FUNNEL_STAGES: any;
2354
2308
  export const FUNNEL_ENTRY_STAGE: any;
@@ -2361,6 +2315,10 @@ declare module "@warpgogol/werkstatt-shared/integration/funnel" {
2361
2315
  export const FUNNEL_SYSTEM_TRIGGERS: any;
2362
2316
  export const FUNNEL_TRANSITION_TRIGGERS: any;
2363
2317
  export const LEGACY_FUNNEL_STAGES: any;
2318
+ export const BUFFER_DEAL_STAGES: any;
2319
+ export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
2320
+ export const SYNC_OUTBOX_STATUSES: any;
2321
+ export const SYNC_OUTBOX_OPS: any;
2364
2322
  export interface VisitorFunnelEventPayload {}
2365
2323
  export type VisitorFunnelStage = any;
2366
2324
  export type VisitorFunnelEventKind = any;
@@ -2369,6 +2327,9 @@ declare module "@warpgogol/werkstatt-shared/integration/funnel" {
2369
2327
  export type VisitorBuyerType = any;
2370
2328
  export type FunnelSystemTrigger = any;
2371
2329
  export type FunnelTransitionTrigger = any;
2330
+ export type BufferDealStage = any;
2331
+ export type SyncOutboxStatus = any;
2332
+ export type SyncOutboxOp = any;
2372
2333
  }
2373
2334
 
2374
2335
  declare module "@warpgogol/werkstatt-shared/integration/index" {
@@ -2376,12 +2337,6 @@ declare module "@warpgogol/werkstatt-shared/integration/index" {
2376
2337
  export const EXECUTION_MODES: any;
2377
2338
  export const eventToLeadMessage: any;
2378
2339
  export const eventToLead: any;
2379
- export const BUFFER_DEAL_STAGES: any;
2380
- export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
2381
- export const bridgeFunnelStage: any;
2382
- export const isFunnelStage: any;
2383
- export const SYNC_OUTBOX_STATUSES: any;
2384
- export const SYNC_OUTBOX_OPS: any;
2385
2340
  export const FUNNEL_VERSION: any;
2386
2341
  export const VISITOR_FUNNEL_STAGES: any;
2387
2342
  export const FUNNEL_ENTRY_STAGE: any;
@@ -2392,6 +2347,11 @@ declare module "@warpgogol/werkstatt-shared/integration/index" {
2392
2347
  export const VISITOR_BUYER_TYPES: any;
2393
2348
  export const FUNNEL_TRANSITIONS: any;
2394
2349
  export const isValidFunnelStage: any;
2350
+ export const BUFFER_DEAL_STAGES: any;
2351
+ export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
2352
+ export const bridgeFunnelStage: any;
2353
+ export const SYNC_OUTBOX_STATUSES: any;
2354
+ export const SYNC_OUTBOX_OPS: any;
2395
2355
  export const canTransition: any;
2396
2356
  export const nextStages: any;
2397
2357
  export const reachableStages: any;
@@ -2442,6 +2402,19 @@ declare module "@warpgogol/werkstatt-shared/integration/index" {
2442
2402
  export const enqueueEvent: any;
2443
2403
  export const consumeIntegrationBatch: any;
2444
2404
  export const upsertLead: any;
2405
+ export const submitIngress: any;
2406
+ export const buildIdempotencyKey: any;
2407
+ export const LAGEBILD_INGRESS_CONTRACT_VERSION: any;
2408
+ export const LagebildIngressConfig: any;
2409
+ export const IngressSubmitInput: any;
2410
+ export const WebsiteIngressPayload: any;
2411
+ export const IngressResult: any;
2412
+ export const IngressInteractionKind: any;
2413
+ export const IdentityClaimType: any;
2414
+ export const IdentityClaim: any;
2415
+ export const IngressOrigin: any;
2416
+ export const ExplicitPolicyAssertion: any;
2417
+ export const PolicyAssertionKind: any;
2445
2418
  }
2446
2419
 
2447
2420
  declare module "@warpgogol/werkstatt-shared/integration/lifecycle" {
@@ -2498,12 +2471,6 @@ declare module "@warpgogol/werkstatt-shared/integration/port-barrel" {
2498
2471
  export const EXECUTION_MODES: any;
2499
2472
  export const eventToLeadMessage: any;
2500
2473
  export const eventToLead: any;
2501
- export const BUFFER_DEAL_STAGES: any;
2502
- export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
2503
- export const bridgeFunnelStage: any;
2504
- export const isFunnelStage: any;
2505
- export const SYNC_OUTBOX_STATUSES: any;
2506
- export const SYNC_OUTBOX_OPS: any;
2507
2474
  export const FUNNEL_VERSION: any;
2508
2475
  export const VISITOR_FUNNEL_STAGES: any;
2509
2476
  export const FUNNEL_ENTRY_STAGE: any;
@@ -2514,6 +2481,11 @@ declare module "@warpgogol/werkstatt-shared/integration/port-barrel" {
2514
2481
  export const VISITOR_BUYER_TYPES: any;
2515
2482
  export const FUNNEL_TRANSITIONS: any;
2516
2483
  export const isValidFunnelStage: any;
2484
+ export const BUFFER_DEAL_STAGES: any;
2485
+ export const FUNNEL_STAGE_TO_BUFFER_STAGE: any;
2486
+ export const bridgeFunnelStage: any;
2487
+ export const SYNC_OUTBOX_STATUSES: any;
2488
+ export const SYNC_OUTBOX_OPS: any;
2517
2489
  export const canTransition: any;
2518
2490
  export const nextStages: any;
2519
2491
  export const reachableStages: any;
@@ -2573,52 +2545,6 @@ declare module "@warpgogol/werkstatt-shared/integration/vitest.config" {
2573
2545
  export = _;
2574
2546
  }
2575
2547
 
2576
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/adapter" {
2577
- export function persistEventToBuffer(...args: any[]): any;
2578
- export const SUPABASE_BUFFER_SECRETS: any;
2579
- export const supabaseBufferDestinationAdapter: any;
2580
- }
2581
-
2582
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/client" {
2583
- export function createSupabaseCrmBufferClient(...args: any[]): any;
2584
- export class SupabaseCrmBufferClient { constructor(...args: any[]); }
2585
- }
2586
-
2587
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/index" {
2588
- export const supabaseBufferDestinationAdapter: any;
2589
- export const SUPABASE_BUFFER_SECRETS: any;
2590
- export const createSupabaseCrmBufferClient: any;
2591
- export const SupabaseCrmBufferClient: any;
2592
- export const createSyncTarget: any;
2593
- export const PipedriveSyncTarget: any;
2594
- export const resolvePipedriveStageUpdate: any;
2595
- export const STAGE_MAP: any;
2596
- }
2597
-
2598
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/pipedrive-sync-target" {
2599
- export function resolvePipedriveStageUpdate(...args: any[]): any;
2600
- export function createSyncTarget(...args: any[]): any;
2601
- export const STAGE_MAP: any;
2602
- export class PipedriveSyncTarget { constructor(...args: any[]); }
2603
- export interface SyncTargetCredentials {}
2604
- export interface CrmSyncTarget {}
2605
- export interface P4StageMap {}
2606
- export interface PipedriveCredentials {}
2607
- export type P3StageMap = any;
2608
- }
2609
-
2610
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/supabase-rest" {
2611
- export function rpc(...args: any[]): any;
2612
- export function rest(...args: any[]): any;
2613
- export interface SupabaseClientConfig {}
2614
- export type FetchImpl = any;
2615
- }
2616
-
2617
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/vitest.config" {
2618
- const _: any;
2619
- export = _;
2620
- }
2621
-
2622
2548
  declare module "@warpgogol/werkstatt-shared/observability/conventions" {
2623
2549
  export function buildResourceAttributes(...args: any[]): any;
2624
2550
  export const WARPGOGOL_LAYERS: any;
@@ -3169,6 +3095,7 @@ declare module "@warpgogol/werkstatt-shared/share/agent/fleet-catalog" {
3169
3095
 
3170
3096
  declare module "@warpgogol/werkstatt-shared/share/agent/index" {
3171
3097
  export function canonicalJson(...args: any[]): any;
3098
+ export function computeSignedContentHash(...args: any[]): any;
3172
3099
  export function computeAgentManifestContentHash(...args: any[]): any;
3173
3100
  export function buildAgentSurfaceManifest(...args: any[]): any;
3174
3101
  export const AGENT_SURFACE_VERSION: any;
@@ -3246,6 +3173,7 @@ declare module "@warpgogol/werkstatt-shared/share/agent/knowledge" {
3246
3173
 
3247
3174
  declare module "@warpgogol/werkstatt-shared/share/agent/manifest" {
3248
3175
  export function canonicalJson(...args: any[]): any;
3176
+ export function computeSignedContentHash(...args: any[]): any;
3249
3177
  export function computeAgentManifestContentHash(...args: any[]): any;
3250
3178
  export function buildAgentSurfaceManifest(...args: any[]): any;
3251
3179
  export const AGENT_SURFACE_VERSION: any;
@@ -3405,9 +3333,6 @@ declare module "@warpgogol/werkstatt-shared/share/env.d" {
3405
3333
  export const UPSTASH_QSTASH_NEXT_SIGNING_KEY: any;
3406
3334
  export const UPSTASH_REDIS_REST_URL: any;
3407
3335
  export const UPSTASH_REDIS_REST_TOKEN: any;
3408
- export const SUPABASE_BUFFER_URL: any;
3409
- export const SUPABASE_BUFFER_SERVICE_KEY: any;
3410
- export const SUPABASE_BUFFER_TENANT_ID: any;
3411
3336
  export const STRIPE_WEBHOOK_SECRET: any;
3412
3337
  export const STRIPE_SECRET_KEY: any;
3413
3338
  export const env: any;
@@ -5338,26 +5263,6 @@ declare module "@warpgogol/werkstatt-shared/integration/tests/sharding.test" {
5338
5263
  export = _;
5339
5264
  }
5340
5265
 
5341
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/tests/change-balance.pbt.test" {
5342
- const _: any;
5343
- export = _;
5344
- }
5345
-
5346
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/tests/funnel-persistence.test" {
5347
- const _: any;
5348
- export = _;
5349
- }
5350
-
5351
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/tests/lifecycle-sync.test" {
5352
- const _: any;
5353
- export = _;
5354
- }
5355
-
5356
- declare module "@warpgogol/werkstatt-shared/integration-adapter-supabase-crm/tests/stage-map.test" {
5357
- const _: any;
5358
- export = _;
5359
- }
5360
-
5361
5266
  declare module "@warpgogol/werkstatt-shared/observability/tests/conventions.test" {
5362
5267
  const _: any;
5363
5268
  export = _;
@@ -5628,3 +5533,19 @@ declare module "@warpgogol/werkstatt-shared/share/scripts" {
5628
5533
  export function runStandardLayoutOrchestration(...args: any[]): any;
5629
5534
  export interface OrchestrationOptions {}
5630
5535
  }
5536
+
5537
+ declare module "@warpgogol/werkstatt-shared/integration/lagebild-ingress" {
5538
+ export function submitIngress(...args: any[]): any;
5539
+ export function buildIdempotencyKey(...args: any[]): any;
5540
+ export const LAGEBILD_INGRESS_CONTRACT_VERSION: any;
5541
+ export interface IdentityClaim {}
5542
+ export interface IngressOrigin {}
5543
+ export interface ExplicitPolicyAssertion {}
5544
+ export interface WebsiteIngressPayload {}
5545
+ export interface IngressResult {}
5546
+ export interface LagebildIngressConfig {}
5547
+ export interface IngressSubmitInput {}
5548
+ export type IngressInteractionKind = any;
5549
+ export type IdentityClaimType = any;
5550
+ export type PolicyAssertionKind = any;
5551
+ }