@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.
- package/AGENTS.md +27 -1
- package/os/adr/adr-0000-template.md +8 -0
- package/os/adr/handlers/validate.test.ts +203 -0
- package/os/adr/handlers/validate.ts +54 -1
- package/os/adr/types.ts +7 -0
- package/os/compass/handlers/compass-inventory-handler.ts +11 -1
- package/os/compass/handlers/compass-inventory.ts +10 -0
- package/os/core/handlers/validate.ts +56 -5
- package/os/naming/naming-convention.ts +9 -0
- package/os/plugin/plugin.module.ts +1 -1
- package/os/rfc/acceptance.ts +133 -4
- package/os/rfc/handlers/implement-stamp.ts +14 -1
- package/os/rfc/handlers/validate-rules-rfc0997.test.ts +394 -0
- package/os/rfc/handlers/validate-rules-rfc1006.test.ts +478 -0
- package/os/rfc/handlers/validate-rules.ts +450 -9
- package/os/rfc/handlers/validate.ts +20 -2
- package/os/rfc/rfc-0000-template.md +24 -8
- package/os/rfc/rfc.module.ts +28 -0
- package/os/rfc/types.ts +72 -6
- package/os/rfc/verification-evidence.ts +5 -4
- package/os/rfc/verification-refresh.test.ts +320 -0
- package/os/rfc/verification-refresh.ts +216 -0
- package/os/session/handlers/save.ts +10 -0
- package/os/spec/spec-validate.test.ts +59 -0
- package/os/spec/spec-validate.ts +6 -4
- package/package.json +2 -1
- package/skills/fo/fo-handoff/SKILL.md +15 -6
- package/skills/fo/fo-idea-audit/SKILL.md +1 -1
- package/skills/fo/fo-idea-create-rfc/SKILL.md +1 -1
- package/skills/fo/fo-idea-create-rfc/acceptance-criteria-standard.md +75 -0
- package/skills/fo/fo-idea-implement/SKILL.md +3 -2
- package/src/compass/contract-registry.ts +25 -6
- package/src/index.ts +1 -1
- package/src/onboarding/doctor.ts +1 -1
- package/src/registry.ts +1 -1
- package/src/tests/acceptance-probe-kinds.test.ts +262 -0
- package/src/tests/plugin-manifest.test.ts +1 -1
- package/src/tests/session-handlers.test.ts +29 -0
- package/src/types/werkstatt-engine-shims.d.ts +0 -21
- package/src/types/werkstatt-shared-shims.d.ts +68 -147
- /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/
|
|
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
|
-
|
|
209
|
-
export const
|
|
210
|
-
export const
|
|
211
|
-
export const
|
|
212
|
-
export const
|
|
213
|
-
export const
|
|
214
|
-
export const
|
|
215
|
-
export const
|
|
216
|
-
export const
|
|
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
|
+
}
|
|
File without changes
|