@rubytech/create-sitedesk-code 0.1.550 → 0.1.552
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/package.json +1 -1
- package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts +22 -8
- package/payload/platform/lib/agent-dispatch-rule/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/agent-dispatch-rule/dist/index.js +47 -13
- package/payload/platform/lib/agent-dispatch-rule/dist/index.js.map +1 -1
- package/payload/platform/lib/agent-dispatch-rule/src/__tests__/rule.test.ts +68 -9
- package/payload/platform/lib/agent-dispatch-rule/src/index.ts +60 -16
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +3 -3
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +9 -0
- package/payload/platform/plugins/docs/references/admin-ui.md +2 -2
- package/payload/platform/plugins/scheduling/PLUGIN.md +22 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +107 -6
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/agent-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.js +216 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-freebusy.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.js +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/connector-sync-provision.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js +128 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js +135 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js +132 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.d.ts +86 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.js +240 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-freebusy.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.js +21 -8
- package/payload/platform/plugins/scheduling/mcp/dist/lib/connector-sync-provision.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +92 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js +193 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts +8 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/routine-run.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +94 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +299 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js +146 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts +27 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +18 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +119 -64
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js +84 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-connector-busy-sync.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +218 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +291 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts +26 -2
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js +51 -2
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +31 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +44 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts +3 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +57 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +148 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +410 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/package.json +1 -0
- package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +6 -4
- package/payload/platform/plugins/telegram/mcp/dist/index.js +62 -38
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.d.ts +18 -5
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.js +34 -6
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-token.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +25 -8
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +28 -16
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.d.ts +12 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.js +26 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/agent-active.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/secret-path.d.ts +16 -13
- package/payload/platform/plugins/telegram/mcp/dist/lib/secret-path.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/secret-path.js +19 -23
- package/payload/platform/plugins/telegram/mcp/dist/lib/secret-path.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/webhook-url.d.ts +9 -7
- package/payload/platform/plugins/telegram/mcp/dist/lib/webhook-url.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/webhook-url.js +11 -8
- package/payload/platform/plugins/telegram/mcp/dist/lib/webhook-url.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +4 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +13 -3
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -1
- package/payload/platform/plugins/telegram/references/setup-guide.md +16 -8
- package/payload/platform/plugins/telegram/skills/configure/SKILL.md +30 -32
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +1 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-census.d.ts +51 -4
- package/payload/platform/services/claude-session-manager/dist/pty-census.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-census.js +60 -10
- package/payload/platform/services/claude-session-manager/dist/pty-census.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts +64 -1
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js +189 -6
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js.map +1 -1
- package/payload/server/server.js +510 -240
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-gate-write.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/schedule-gate-write.test.ts"],"names":[],"mappings":""}
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
// Task 2378 — the write-time refusals a gate carries, on both write paths.
|
|
3
|
+
//
|
|
4
|
+
// A gate stored on a row the dispatcher never consults it for is three
|
|
5
|
+
// properties that read as configured and do nothing, which is the silent
|
|
6
|
+
// misconfiguration class Task 2130 exists to remove. So the refusals are the
|
|
7
|
+
// point of this file, not an edge case in it.
|
|
8
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
9
|
+
import { mkdtempSync, rmSync, mkdirSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
const runCalls = [];
|
|
13
|
+
const writeCalls = [];
|
|
14
|
+
/** What the pre-read reports the stored row holds; per-test. */
|
|
15
|
+
let storedRow = {};
|
|
16
|
+
vi.mock("../../lib/embedding.js", () => ({
|
|
17
|
+
computeEmbedding: vi.fn(async () => []),
|
|
18
|
+
}));
|
|
19
|
+
vi.mock("../../lib/neo4j.js", () => ({
|
|
20
|
+
getSession: () => ({
|
|
21
|
+
run: vi.fn(async (query, params) => {
|
|
22
|
+
runCalls.push({ query, params });
|
|
23
|
+
return {
|
|
24
|
+
records: [
|
|
25
|
+
{
|
|
26
|
+
get: (k) => (k in storedRow ? storedRow[k] : k === "id" ? "conv-element-id" : null),
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
}),
|
|
31
|
+
close: vi.fn(async () => { }),
|
|
32
|
+
}),
|
|
33
|
+
}));
|
|
34
|
+
vi.mock("../../../../../../lib/graph-write/dist/index.js", () => ({
|
|
35
|
+
writeNodeWithEdges: vi.fn(async ({ props }) => {
|
|
36
|
+
writeCalls.push(props);
|
|
37
|
+
}),
|
|
38
|
+
}));
|
|
39
|
+
import { scheduleUpdate } from "../schedule-update.js";
|
|
40
|
+
import { scheduleEvent } from "../schedule-event.js";
|
|
41
|
+
import { validateGate } from "../schedule-event.js";
|
|
42
|
+
const ACCOUNT_ID = "11111111-1111-4111-8111-111111111111";
|
|
43
|
+
const PHONE = "+447700900001";
|
|
44
|
+
const GATE = { plugin: "scheduling", tool: "scheduling-gate", args: { eventId: "e1", checks: [] } };
|
|
45
|
+
const DISPATCH = { channel: "whatsapp", destination: PHONE, prompt: "sweep" };
|
|
46
|
+
let platformRoot;
|
|
47
|
+
function seedAccount() {
|
|
48
|
+
const dir = join(platformRoot, "..", "data", "accounts", ACCOUNT_ID);
|
|
49
|
+
mkdirSync(dir, { recursive: true });
|
|
50
|
+
writeFileSync(join(dir, "account.json"), JSON.stringify({ role: "house", whatsapp: { adminPhones: [PHONE] } }), "utf-8");
|
|
51
|
+
}
|
|
52
|
+
function lastSet() {
|
|
53
|
+
return runCalls[runCalls.length - 1];
|
|
54
|
+
}
|
|
55
|
+
beforeEach(() => {
|
|
56
|
+
runCalls.length = 0;
|
|
57
|
+
writeCalls.length = 0;
|
|
58
|
+
storedRow = {};
|
|
59
|
+
const root = mkdtempSync(join(tmpdir(), "sched-gate-write-"));
|
|
60
|
+
platformRoot = join(root, "platform");
|
|
61
|
+
mkdirSync(platformRoot, { recursive: true });
|
|
62
|
+
mkdirSync(join(platformRoot, "plugins", "scheduling"), { recursive: true });
|
|
63
|
+
writeFileSync(join(platformRoot, "plugins", "scheduling", "PLUGIN.md"), "x", "utf-8");
|
|
64
|
+
process.env.PLATFORM_ROOT = platformRoot;
|
|
65
|
+
seedAccount();
|
|
66
|
+
});
|
|
67
|
+
afterEach(() => {
|
|
68
|
+
rmSync(join(platformRoot, ".."), { recursive: true, force: true });
|
|
69
|
+
vi.clearAllMocks();
|
|
70
|
+
});
|
|
71
|
+
describe("validateGate", () => {
|
|
72
|
+
it("accepts a gate on a complete agent dispatch", () => {
|
|
73
|
+
expect(() => validateGate(GATE, { hasAction: false, hasCompleteAgentDispatch: true })).not.toThrow();
|
|
74
|
+
});
|
|
75
|
+
it("refuses a gate on an action-mode event", () => {
|
|
76
|
+
expect(() => validateGate(GATE, { hasAction: true, hasCompleteAgentDispatch: false })).toThrow(/action already runs headlessly/);
|
|
77
|
+
});
|
|
78
|
+
it("refuses a gate with no complete agent dispatch", () => {
|
|
79
|
+
expect(() => validateGate(GATE, { hasAction: false, hasCompleteAgentDispatch: false })).toThrow(/requires a complete agentDispatch/);
|
|
80
|
+
});
|
|
81
|
+
it("refuses a gate missing plugin or tool", () => {
|
|
82
|
+
expect(() => validateGate({ plugin: "", tool: "t" }, { hasAction: false, hasCompleteAgentDispatch: true })).toThrow(/both 'plugin' and 'tool'/);
|
|
83
|
+
expect(() => validateGate({ plugin: "p", tool: "" }, { hasAction: false, hasCompleteAgentDispatch: true })).toThrow(/both 'plugin' and 'tool'/);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe("scheduleEvent — gate", () => {
|
|
87
|
+
const base = {
|
|
88
|
+
accountId: ACCOUNT_ID,
|
|
89
|
+
name: "Quarter-hourly sweep",
|
|
90
|
+
startDate: "2026-08-03T08:00:00.000Z",
|
|
91
|
+
recurrence: "*/15 * * * *",
|
|
92
|
+
sessionKey: "sess-1",
|
|
93
|
+
createdBy: { agent: "admin", session: "sess-1", tool: "schedule-event" },
|
|
94
|
+
};
|
|
95
|
+
it("stores the three props on an agent-dispatch event", async () => {
|
|
96
|
+
await scheduleEvent({ ...base, agentDispatch: DISPATCH, gate: GATE });
|
|
97
|
+
const props = writeCalls[0];
|
|
98
|
+
expect(props.gatePlugin).toBe("scheduling");
|
|
99
|
+
expect(props.gateTool).toBe("scheduling-gate");
|
|
100
|
+
expect(JSON.parse(props.gateArgs)).toEqual(GATE.args);
|
|
101
|
+
});
|
|
102
|
+
it("stores no gateArgs when the gate takes none", async () => {
|
|
103
|
+
await scheduleEvent({
|
|
104
|
+
...base,
|
|
105
|
+
agentDispatch: DISPATCH,
|
|
106
|
+
gate: { plugin: "scheduling", tool: "scheduling-gate" },
|
|
107
|
+
});
|
|
108
|
+
expect(writeCalls[0].gateArgs).toBeUndefined();
|
|
109
|
+
});
|
|
110
|
+
it("refuses a gate on an action-mode event", async () => {
|
|
111
|
+
await expect(scheduleEvent({ ...base, action: { plugin: "scheduling", tool: "schedule-list" }, gate: GATE })).rejects.toThrow(/action already runs headlessly/);
|
|
112
|
+
});
|
|
113
|
+
it("refuses a gate with no agent dispatch at all", async () => {
|
|
114
|
+
await expect(scheduleEvent({ ...base, gate: GATE })).rejects.toThrow(/requires a complete agentDispatch/);
|
|
115
|
+
});
|
|
116
|
+
it("an incomplete agent dispatch is refused by its own validator, before the gate", async () => {
|
|
117
|
+
// `validateAgentDispatch` runs first and names the field that is actually
|
|
118
|
+
// missing, which is the more useful message. The gate's own
|
|
119
|
+
// complete-dispatch refusal is therefore unreachable from this door; the
|
|
120
|
+
// reachable case on this path is "no agentDispatch at all", above. The
|
|
121
|
+
// update path, where a row can already hold a partial dispatch, is where
|
|
122
|
+
// the gate's version does the work.
|
|
123
|
+
await expect(scheduleEvent({
|
|
124
|
+
...base,
|
|
125
|
+
agentDispatch: { channel: "whatsapp", destination: PHONE, prompt: "" },
|
|
126
|
+
gate: GATE,
|
|
127
|
+
})).rejects.toThrow(/non-empty 'prompt'/);
|
|
128
|
+
expect(writeCalls).toHaveLength(0);
|
|
129
|
+
});
|
|
130
|
+
it("writes nothing at all when the gate is refused", async () => {
|
|
131
|
+
await expect(scheduleEvent({ ...base, gate: GATE })).rejects.toThrow();
|
|
132
|
+
expect(writeCalls).toHaveLength(0);
|
|
133
|
+
});
|
|
134
|
+
it("an event with no gate stores none of the three props", async () => {
|
|
135
|
+
await scheduleEvent({ ...base, agentDispatch: DISPATCH });
|
|
136
|
+
const props = writeCalls[0];
|
|
137
|
+
expect(props.gatePlugin).toBeUndefined();
|
|
138
|
+
expect(props.gateTool).toBeUndefined();
|
|
139
|
+
expect(props.gateArgs).toBeUndefined();
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe("scheduleUpdate — gate", () => {
|
|
143
|
+
it("clears all three props when gate is null", async () => {
|
|
144
|
+
await scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", gate: null });
|
|
145
|
+
const { query } = lastSet();
|
|
146
|
+
expect(query).toContain("e.gatePlugin = null");
|
|
147
|
+
expect(query).toContain("e.gateTool = null");
|
|
148
|
+
expect(query).toContain("e.gateArgs = null");
|
|
149
|
+
});
|
|
150
|
+
it("sets the gate against a stored agent dispatch", async () => {
|
|
151
|
+
storedRow = { agentChannel: "whatsapp", agentDestination: PHONE, agentPrompt: "sweep" };
|
|
152
|
+
await scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", gate: GATE });
|
|
153
|
+
const { query, params } = lastSet();
|
|
154
|
+
expect(query).toContain("e.gatePlugin = $gatePlugin");
|
|
155
|
+
expect(params.gatePlugin).toBe("scheduling");
|
|
156
|
+
expect(JSON.parse(params.gateArgs)).toEqual(GATE.args);
|
|
157
|
+
});
|
|
158
|
+
it("accepts a single call that sets both the agent dispatch and its gate", async () => {
|
|
159
|
+
storedRow = {};
|
|
160
|
+
await scheduleUpdate({
|
|
161
|
+
accountId: ACCOUNT_ID,
|
|
162
|
+
eventId: "e1",
|
|
163
|
+
agentDispatch: DISPATCH,
|
|
164
|
+
gate: GATE,
|
|
165
|
+
});
|
|
166
|
+
expect(lastSet().query).toContain("e.gatePlugin = $gatePlugin");
|
|
167
|
+
});
|
|
168
|
+
it("refuses a gate on a row that stores an action", async () => {
|
|
169
|
+
storedRow = { actionPlugin: "memory" };
|
|
170
|
+
await expect(scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", gate: GATE })).rejects.toThrow(/action already runs headlessly/);
|
|
171
|
+
});
|
|
172
|
+
it("refuses a gate on a row with no agent dispatch", async () => {
|
|
173
|
+
storedRow = {};
|
|
174
|
+
await expect(scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", gate: GATE })).rejects.toThrow(/requires a complete agentDispatch/);
|
|
175
|
+
});
|
|
176
|
+
it("refuses a gate in the same call that clears the agent dispatch", async () => {
|
|
177
|
+
storedRow = { agentChannel: "whatsapp", agentDestination: PHONE, agentPrompt: "sweep" };
|
|
178
|
+
await expect(scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", agentDispatch: null, gate: GATE })).rejects.toThrow(/requires a complete agentDispatch/);
|
|
179
|
+
});
|
|
180
|
+
it("accepts a gate on a row that stored an action the same call is clearing", async () => {
|
|
181
|
+
storedRow = { actionPlugin: "memory" };
|
|
182
|
+
await scheduleUpdate({
|
|
183
|
+
accountId: ACCOUNT_ID,
|
|
184
|
+
eventId: "e1",
|
|
185
|
+
action: null,
|
|
186
|
+
agentDispatch: DISPATCH,
|
|
187
|
+
gate: GATE,
|
|
188
|
+
});
|
|
189
|
+
expect(lastSet().query).toContain("e.gatePlugin = $gatePlugin");
|
|
190
|
+
});
|
|
191
|
+
it("replacing a gate with an argument-less one clears the old arguments", async () => {
|
|
192
|
+
storedRow = { agentChannel: "whatsapp", agentDestination: PHONE, agentPrompt: "sweep" };
|
|
193
|
+
await scheduleUpdate({
|
|
194
|
+
accountId: ACCOUNT_ID,
|
|
195
|
+
eventId: "e1",
|
|
196
|
+
gate: { plugin: "scheduling", tool: "scheduling-gate" },
|
|
197
|
+
});
|
|
198
|
+
expect(lastSet().query).toContain("e.gateArgs = null");
|
|
199
|
+
});
|
|
200
|
+
it("setting an action clears the gate with the agent dispatch", async () => {
|
|
201
|
+
await scheduleUpdate({
|
|
202
|
+
accountId: ACCOUNT_ID,
|
|
203
|
+
eventId: "e1",
|
|
204
|
+
action: { plugin: "scheduling", tool: "schedule-list" },
|
|
205
|
+
});
|
|
206
|
+
const { query } = lastSet();
|
|
207
|
+
expect(query).toContain("e.gatePlugin = null");
|
|
208
|
+
expect(query).toContain("e.gateTool = null");
|
|
209
|
+
expect(query).toContain("e.gateArgs = null");
|
|
210
|
+
});
|
|
211
|
+
it("an update that mentions no gate touches none of the three props", async () => {
|
|
212
|
+
await scheduleUpdate({ accountId: ACCOUNT_ID, eventId: "e1", name: "renamed" });
|
|
213
|
+
expect(lastSet().query).not.toContain("gatePlugin");
|
|
214
|
+
expect(lastSet().query).not.toContain("gateTool");
|
|
215
|
+
expect(lastSet().query).not.toContain("gateArgs");
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=schedule-gate-write.test.js.map
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedule-gate-write.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/schedule-gate-write.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling-gate.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/scheduling-gate.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// @vitest-environment node
|
|
2
|
+
// Task 2378 — the gate tool.
|
|
3
|
+
//
|
|
4
|
+
// Every check is asserted ONE AT A TIME. `hasWork` is a disjunction, so a suite
|
|
5
|
+
// that only ever ran all four together could not tell a working check from an
|
|
6
|
+
// always-true one riding on a sibling.
|
|
7
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
8
|
+
import { mkdtempSync, mkdirSync, readFileSync, writeFileSync, existsSync } from "node:fs";
|
|
9
|
+
import { tmpdir } from "node:os";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
vi.mock("../../lib/neo4j.js", () => ({
|
|
12
|
+
getSession: () => ({ run: vi.fn(async () => ({ records: [] })), close: vi.fn(async () => { }) }),
|
|
13
|
+
}));
|
|
14
|
+
import { runSchedulingGate, watermarkPath, parseD1Count, digestBusy, } from "../scheduling-gate.js";
|
|
15
|
+
const ACCOUNT = "20028fb5-0000-4000-8000-000000000000";
|
|
16
|
+
const EVENT = "65ef758c-0000-4000-8000-000000000000";
|
|
17
|
+
let platformRoot;
|
|
18
|
+
/** Sources that all answer "quiet". Each test overrides only what it is about. */
|
|
19
|
+
function quietSources(over = {}) {
|
|
20
|
+
return {
|
|
21
|
+
mail: async (_c, sinceUid) => ({ matched: false, highestUid: sinceUid, uidValidity: 1 }),
|
|
22
|
+
d1: async () => 0,
|
|
23
|
+
whatsappStatus: async () => ({ connected: true }),
|
|
24
|
+
whatsappInbound: async (_a, since) => ({ latest: since, newer: false }),
|
|
25
|
+
calendarDigest: async () => "DIGEST-A",
|
|
26
|
+
...over,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function seedWatermarks(marks) {
|
|
30
|
+
const path = watermarkPath(EVENT, platformRoot);
|
|
31
|
+
mkdirSync(join(path, ".."), { recursive: true });
|
|
32
|
+
writeFileSync(path, JSON.stringify(marks, null, 2));
|
|
33
|
+
}
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
const root = mkdtempSync(join(tmpdir(), "sched-gate-"));
|
|
36
|
+
platformRoot = join(root, "platform");
|
|
37
|
+
mkdirSync(platformRoot, { recursive: true });
|
|
38
|
+
vi.spyOn(console, "error").mockImplementation(() => { });
|
|
39
|
+
});
|
|
40
|
+
afterEach(() => vi.restoreAllMocks());
|
|
41
|
+
const run = (checks, sources, commit = false) => runSchedulingGate({ eventId: EVENT, checks, commit }, ACCOUNT, platformRoot, sources);
|
|
42
|
+
describe("d1 check", () => {
|
|
43
|
+
const CHECK = { type: "d1", database: "bookings", sql: "SELECT count(*) FROM b" };
|
|
44
|
+
it("is false on a zero count", async () => {
|
|
45
|
+
expect(await run([CHECK], quietSources())).toEqual({ hasWork: false, reasons: [] });
|
|
46
|
+
});
|
|
47
|
+
it("is true on one row", async () => {
|
|
48
|
+
expect(await run([CHECK], quietSources({ d1: async () => 1 }))).toEqual({
|
|
49
|
+
hasWork: true,
|
|
50
|
+
reasons: ["d1"],
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it("reports work rather than an error when the source is unreachable", async () => {
|
|
54
|
+
const sources = quietSources({
|
|
55
|
+
d1: async () => {
|
|
56
|
+
throw new Error("no cloudflare credentials");
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
expect(await run([CHECK], sources)).toEqual({ hasWork: true, reasons: ["d1"] });
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe("mail check", () => {
|
|
63
|
+
const CHECK = { type: "mail", mailbox: "ops@example.com" };
|
|
64
|
+
it("is false when nothing sits above the watermark", async () => {
|
|
65
|
+
seedWatermarks({ mail: { "ops@example.com|INBOX": { uid: 100, uidValidity: 1 } } });
|
|
66
|
+
expect(await run([CHECK], quietSources())).toEqual({ hasWork: false, reasons: [] });
|
|
67
|
+
});
|
|
68
|
+
it("is true when a UID above the watermark matches", async () => {
|
|
69
|
+
seedWatermarks({ mail: { "ops@example.com|INBOX": { uid: 100, uidValidity: 1 } } });
|
|
70
|
+
const sources = quietSources({
|
|
71
|
+
mail: async () => ({ matched: true, highestUid: 104, uidValidity: 1 }),
|
|
72
|
+
});
|
|
73
|
+
expect(await run([CHECK], sources)).toEqual({ hasWork: true, reasons: ["mail"] });
|
|
74
|
+
});
|
|
75
|
+
it("probes from UID 0 on a first run, so nothing already there is missed", async () => {
|
|
76
|
+
const seen = [];
|
|
77
|
+
const sources = quietSources({
|
|
78
|
+
mail: async (_c, since) => {
|
|
79
|
+
seen.push(since);
|
|
80
|
+
return { matched: false, highestUid: since, uidValidity: 1 };
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
await run([CHECK], sources);
|
|
84
|
+
expect(seen).toEqual([0]);
|
|
85
|
+
});
|
|
86
|
+
it("treats a UIDVALIDITY change as work — the stored UID names a different message", async () => {
|
|
87
|
+
seedWatermarks({ mail: { "ops@example.com|INBOX": { uid: 100, uidValidity: 1 } } });
|
|
88
|
+
const sources = quietSources({
|
|
89
|
+
mail: async () => ({ matched: false, highestUid: 100, uidValidity: 7 }),
|
|
90
|
+
});
|
|
91
|
+
expect(await run([CHECK], sources)).toEqual({ hasWork: true, reasons: ["mail"] });
|
|
92
|
+
});
|
|
93
|
+
it("keys the watermark by folder, so two folders of one mailbox never collide", async () => {
|
|
94
|
+
seedWatermarks({ mail: { "ops@example.com|Archive": { uid: 100, uidValidity: 1 } } });
|
|
95
|
+
const seen = [];
|
|
96
|
+
const sources = quietSources({
|
|
97
|
+
mail: async (_c, since) => {
|
|
98
|
+
seen.push(since);
|
|
99
|
+
return { matched: false, highestUid: since, uidValidity: 1 };
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
await run([CHECK], sources);
|
|
103
|
+
expect(seen).toEqual([0]);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe("whatsapp check", () => {
|
|
107
|
+
it("status is false while connected", async () => {
|
|
108
|
+
const check = { type: "whatsapp", scope: "status" };
|
|
109
|
+
expect(await run([check], quietSources())).toEqual({ hasWork: false, reasons: [] });
|
|
110
|
+
});
|
|
111
|
+
it("status is true while disconnected", async () => {
|
|
112
|
+
const check = { type: "whatsapp", scope: "status" };
|
|
113
|
+
const sources = quietSources({ whatsappStatus: async () => ({ connected: false }) });
|
|
114
|
+
expect(await run([check], sources)).toEqual({ hasWork: true, reasons: ["whatsapp"] });
|
|
115
|
+
});
|
|
116
|
+
it("inbound is true only on a message received since the watermark", async () => {
|
|
117
|
+
const check = { type: "whatsapp", scope: "inbound" };
|
|
118
|
+
seedWatermarks({ whatsapp: { inbound: 1_754_000_000 } });
|
|
119
|
+
const sources = quietSources({
|
|
120
|
+
whatsappInbound: async () => ({ latest: 1_754_000_900, newer: true }),
|
|
121
|
+
});
|
|
122
|
+
expect(await run([check], sources)).toEqual({ hasWork: true, reasons: ["whatsapp"] });
|
|
123
|
+
});
|
|
124
|
+
it("inbound passes the stored watermark to the source", async () => {
|
|
125
|
+
const check = { type: "whatsapp", scope: "inbound" };
|
|
126
|
+
seedWatermarks({ whatsapp: { inbound: 1_754_000_000 } });
|
|
127
|
+
const seen = [];
|
|
128
|
+
const sources = quietSources({
|
|
129
|
+
whatsappInbound: async (_a, since) => {
|
|
130
|
+
seen.push(since);
|
|
131
|
+
return { latest: since, newer: false };
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
await run([check], sources);
|
|
135
|
+
expect(seen).toEqual([1_754_000_000]);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe("calendar check", () => {
|
|
139
|
+
const CHECK = { type: "calendar", connector: "google" };
|
|
140
|
+
it("is false on an unchanged digest", async () => {
|
|
141
|
+
seedWatermarks({ calendar: { digest: "DIGEST-A" } });
|
|
142
|
+
expect(await run([CHECK], quietSources())).toEqual({ hasWork: false, reasons: [] });
|
|
143
|
+
});
|
|
144
|
+
it("is true on a changed digest", async () => {
|
|
145
|
+
seedWatermarks({ calendar: { digest: "DIGEST-A" } });
|
|
146
|
+
const sources = quietSources({ calendarDigest: async () => "DIGEST-B" });
|
|
147
|
+
expect(await run([CHECK], sources)).toEqual({ hasWork: true, reasons: ["calendar"] });
|
|
148
|
+
});
|
|
149
|
+
it("is true on a first run, when nothing has been committed yet", async () => {
|
|
150
|
+
expect(await run([CHECK], quietSources())).toEqual({ hasWork: true, reasons: ["calendar"] });
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe("digestBusy", () => {
|
|
154
|
+
it("is order-independent, so a re-sync that returns the same set reads unchanged", () => {
|
|
155
|
+
const a = digestBusy("google", [
|
|
156
|
+
{ start: "2026-08-03T09:00:00Z", end: "2026-08-03T10:00:00Z" },
|
|
157
|
+
{ start: "2026-08-04T09:00:00Z", end: "2026-08-04T10:00:00Z" },
|
|
158
|
+
]);
|
|
159
|
+
const b = digestBusy("google", [
|
|
160
|
+
{ start: "2026-08-04T09:00:00Z", end: "2026-08-04T10:00:00Z" },
|
|
161
|
+
{ start: "2026-08-03T09:00:00Z", end: "2026-08-03T10:00:00Z" },
|
|
162
|
+
]);
|
|
163
|
+
expect(a).toBe(b);
|
|
164
|
+
});
|
|
165
|
+
it("changes when an interval changes", () => {
|
|
166
|
+
const a = digestBusy("google", [{ start: "2026-08-03T09:00:00Z", end: "2026-08-03T10:00:00Z" }]);
|
|
167
|
+
const b = digestBusy("google", [{ start: "2026-08-03T09:00:00Z", end: "2026-08-03T11:00:00Z" }]);
|
|
168
|
+
expect(a).not.toBe(b);
|
|
169
|
+
});
|
|
170
|
+
it("changes when the connector changes, even on an identical busy set", () => {
|
|
171
|
+
const iv = [{ start: "2026-08-03T09:00:00Z", end: "2026-08-03T10:00:00Z" }];
|
|
172
|
+
expect(digestBusy("google", iv)).not.toBe(digestBusy("m365", iv));
|
|
173
|
+
});
|
|
174
|
+
it("an empty set has a stable digest, so a cleared calendar is not permanently 'changed'", () => {
|
|
175
|
+
expect(digestBusy("none", [])).toBe(digestBusy("none", []));
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe("parseD1Count", () => {
|
|
179
|
+
it("reads the first column of the first row", () => {
|
|
180
|
+
expect(parseD1Count({ result: [{ results: [{ "count(*)": 3 }] }] })).toBe(3);
|
|
181
|
+
});
|
|
182
|
+
it("is zero on an empty result set", () => {
|
|
183
|
+
expect(parseD1Count({ result: [{ results: [] }] })).toBe(0);
|
|
184
|
+
});
|
|
185
|
+
it("throws on an envelope it cannot understand, rather than reporting zero", () => {
|
|
186
|
+
// Reporting zero here would make an unreadable payload indistinguishable
|
|
187
|
+
// from an empty queue, and the routine would skip for ever.
|
|
188
|
+
expect(() => parseD1Count({ result: [{}] })).toThrow(/no results array/);
|
|
189
|
+
expect(() => parseD1Count({})).toThrow(/no results array/);
|
|
190
|
+
});
|
|
191
|
+
it("throws when the first column is not a number", () => {
|
|
192
|
+
expect(() => parseD1Count({ result: [{ results: [{ name: "alice" }] }] })).toThrow(/not a number/);
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe("all four together", () => {
|
|
196
|
+
const ALL = [
|
|
197
|
+
{ type: "mail", mailbox: "ops@example.com" },
|
|
198
|
+
{ type: "d1", database: "bookings", sql: "SELECT count(*) FROM b" },
|
|
199
|
+
{ type: "whatsapp", scope: "status" },
|
|
200
|
+
{ type: "calendar", connector: "google" },
|
|
201
|
+
];
|
|
202
|
+
it("every source quiet returns hasWork:false with no reasons", async () => {
|
|
203
|
+
seedWatermarks({
|
|
204
|
+
mail: { "ops@example.com|INBOX": { uid: 100, uidValidity: 1 } },
|
|
205
|
+
calendar: { digest: "DIGEST-A" },
|
|
206
|
+
});
|
|
207
|
+
expect(await run(ALL, quietSources())).toEqual({ hasWork: false, reasons: [] });
|
|
208
|
+
});
|
|
209
|
+
it("one noisy source is enough, and names only itself", async () => {
|
|
210
|
+
seedWatermarks({
|
|
211
|
+
mail: { "ops@example.com|INBOX": { uid: 100, uidValidity: 1 } },
|
|
212
|
+
calendar: { digest: "DIGEST-A" },
|
|
213
|
+
});
|
|
214
|
+
expect(await run(ALL, quietSources({ d1: async () => 2 }))).toEqual({
|
|
215
|
+
hasWork: true,
|
|
216
|
+
reasons: ["d1"],
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe("commit", () => {
|
|
221
|
+
const ALL = [
|
|
222
|
+
{ type: "mail", mailbox: "ops@example.com" },
|
|
223
|
+
{ type: "d1", database: "bookings", sql: "SELECT count(*) FROM b" },
|
|
224
|
+
{ type: "whatsapp", scope: "inbound" },
|
|
225
|
+
{ type: "calendar", connector: "google" },
|
|
226
|
+
];
|
|
227
|
+
it("a plain call leaves the file bytes unchanged", async () => {
|
|
228
|
+
seedWatermarks({ calendar: { digest: "DIGEST-A" } });
|
|
229
|
+
const path = watermarkPath(EVENT, platformRoot);
|
|
230
|
+
const before = readFileSync(path);
|
|
231
|
+
await run(ALL, quietSources({ calendarDigest: async () => "DIGEST-B" }));
|
|
232
|
+
expect(readFileSync(path).equals(before)).toBe(true);
|
|
233
|
+
});
|
|
234
|
+
it("a plain call on a first run writes no file at all", async () => {
|
|
235
|
+
await run(ALL, quietSources());
|
|
236
|
+
expect(existsSync(watermarkPath(EVENT, platformRoot))).toBe(false);
|
|
237
|
+
});
|
|
238
|
+
it("advances every watermark named in checks", async () => {
|
|
239
|
+
const sources = quietSources({
|
|
240
|
+
mail: async () => ({ matched: true, highestUid: 250, uidValidity: 9 }),
|
|
241
|
+
whatsappInbound: async () => ({ latest: 1_754_009_999, newer: true }),
|
|
242
|
+
calendarDigest: async () => "DIGEST-Z",
|
|
243
|
+
});
|
|
244
|
+
const result = await run(ALL, sources, true);
|
|
245
|
+
const marks = JSON.parse(readFileSync(watermarkPath(EVENT, platformRoot), "utf-8"));
|
|
246
|
+
expect(marks.mail["ops@example.com|INBOX"]).toEqual({ uid: 250, uidValidity: 9 });
|
|
247
|
+
expect(marks.whatsapp.inbound).toBe(1_754_009_999);
|
|
248
|
+
expect(marks.calendar.digest).toBe("DIGEST-Z");
|
|
249
|
+
expect(marks.lastCommitAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
250
|
+
// d1 has no watermark: its answer is a property of the present, not a
|
|
251
|
+
// position in a stream.
|
|
252
|
+
expect(result.advanced).toEqual(["ops@example.com|INBOX", "whatsapp", "calendar"]);
|
|
253
|
+
});
|
|
254
|
+
it("a commit whose sources are quiet still stamps lastCommitAt", async () => {
|
|
255
|
+
// Otherwise a routine that ran and found nothing would look, to the
|
|
256
|
+
// watermark-age audit, exactly like one whose commits had stopped.
|
|
257
|
+
await run(ALL, quietSources(), true);
|
|
258
|
+
const marks = JSON.parse(readFileSync(watermarkPath(EVENT, platformRoot), "utf-8"));
|
|
259
|
+
expect(marks.lastCommitAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
|
|
260
|
+
});
|
|
261
|
+
it("a committed watermark makes the next plain call quiet", async () => {
|
|
262
|
+
const sources = quietSources({ calendarDigest: async () => "DIGEST-Z" });
|
|
263
|
+
const checks = [{ type: "calendar", connector: "google" }];
|
|
264
|
+
expect(await run(checks, sources)).toEqual({ hasWork: true, reasons: ["calendar"] });
|
|
265
|
+
await run(checks, sources, true);
|
|
266
|
+
expect(await run(checks, sources)).toEqual({ hasWork: false, reasons: [] });
|
|
267
|
+
});
|
|
268
|
+
it("a check that errors is not committed, so its work is not marked consumed", async () => {
|
|
269
|
+
const checks = [{ type: "calendar", connector: "google" }];
|
|
270
|
+
const sources = quietSources({
|
|
271
|
+
calendarDigest: async () => {
|
|
272
|
+
throw new Error("neo4j down");
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
const result = await run(checks, sources, true);
|
|
276
|
+
expect(result).toMatchObject({ hasWork: true, reasons: ["calendar"], advanced: [] });
|
|
277
|
+
const marks = JSON.parse(readFileSync(watermarkPath(EVENT, platformRoot), "utf-8"));
|
|
278
|
+
expect(marks.calendar).toBeUndefined();
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
describe("watermark location", () => {
|
|
282
|
+
it("is install-rooted and named by eventId, with no account segment", () => {
|
|
283
|
+
// An account segment would let the dispatcher's ACCOUNT_ID and the agent
|
|
284
|
+
// turn's resolved account disagree, so the commit would write one file and
|
|
285
|
+
// the next gate read another.
|
|
286
|
+
const path = watermarkPath(EVENT, "/opt/brand/platform");
|
|
287
|
+
expect(path).toBe(`/opt/brand/state/scheduling-gate/${EVENT}.json`);
|
|
288
|
+
expect(path).not.toContain(ACCOUNT);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
//# sourceMappingURL=scheduling-gate.test.js.map
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling-gate.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/scheduling-gate.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Session } from "neo4j-driver";
|
|
2
|
+
import { type ProviderCall } from "../lib/connector-freebusy.js";
|
|
2
3
|
export type ConnectorKind = "google" | "m365" | "none";
|
|
3
4
|
export interface BusyInterval {
|
|
4
5
|
start: string;
|
|
@@ -15,7 +16,7 @@ export interface SyncResult {
|
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* Wholesale-replace the account's :ConnectorBusy nodes with the busy intervals
|
|
18
|
-
*
|
|
19
|
+
* its calendar connector reported. Delete-then-insert so an
|
|
19
20
|
* upstream-deleted connector event stops blocking on the next sync, and a
|
|
20
21
|
* deauthorised connector (connector='none', busy=[]) clears all blocks.
|
|
21
22
|
*
|
|
@@ -25,7 +26,30 @@ export interface SyncResult {
|
|
|
25
26
|
* busy time as an open slot), and a mid-write failure rolls back to the prior
|
|
26
27
|
* complete set rather than leaving a partial one.
|
|
27
28
|
*
|
|
28
|
-
*
|
|
29
|
+
* Task 2381 — the read is deterministic too now. `resolveAndSyncConnectorBusy`
|
|
30
|
+
* below resolves the connector and reads it without a model turn; a caller that
|
|
31
|
+
* has already read the intervals still calls this directly.
|
|
29
32
|
*/
|
|
30
33
|
export declare function syncConnectorBusy(session: Session, accountId: string, input: ConnectorBusyInput): Promise<SyncResult>;
|
|
34
|
+
export interface ResolveAndSyncOptions {
|
|
35
|
+
accountsDir: string;
|
|
36
|
+
platformRoot: string;
|
|
37
|
+
now: Date;
|
|
38
|
+
call: ProviderCall;
|
|
39
|
+
windowDays?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Task 2381 — read the account's own connector, then sync what it returned.
|
|
43
|
+
*
|
|
44
|
+
* This is the branch that takes the model out of the routine. The connector is
|
|
45
|
+
* resolved from the account's authorised token directories rather than chosen by
|
|
46
|
+
* a model reading a prompt, and the window is a constant rather than a sentence
|
|
47
|
+
* re-interpreted on every fire.
|
|
48
|
+
*
|
|
49
|
+
* A failed read throws BEFORE `syncConnectorBusy` is reached, so the stored busy
|
|
50
|
+
* set survives a transient provider outage. `connector='none'` is NOT a failure:
|
|
51
|
+
* it syncs an empty set, which is how a deauthorised connector's stale blocks are
|
|
52
|
+
* cleared, and it is the case the routine's prompt covers today.
|
|
53
|
+
*/
|
|
54
|
+
export declare function resolveAndSyncConnectorBusy(session: Session, accountId: string, opts: ResolveAndSyncOptions): Promise<SyncResult>;
|
|
31
55
|
//# sourceMappingURL=schedule-connector-busy-sync.d.ts.map
|
package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-connector-busy-sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-connector-busy-sync.d.ts","sourceRoot":"","sources":["../../src/tools/schedule-connector-busy-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD
|
|
1
|
+
{"version":3,"file":"schedule-connector-busy-sync.d.ts","sourceRoot":"","sources":["../../src/tools/schedule-connector-busy-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,UAAU,CAAC,CAsBrB;AAMD,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,IAAI,CAAC;IACV,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA+BrB"}
|