@rubytech/create-maxy-code 0.1.558 → 0.1.560
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/plugins/admin/mcp/dist/index.js +34 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/lib/roster-census.d.ts +39 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/roster-census.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/roster-census.js +67 -0
- package/payload/platform/plugins/admin/mcp/dist/lib/roster-census.js.map +1 -0
- package/payload/platform/plugins/admin/skills/agent-builder/SKILL.md +15 -10
- package/payload/platform/plugins/admin/skills/agent-builder/references/agent-pattern.md +6 -3
- package/payload/platform/plugins/admin/skills/specialist-management/SKILL.md +26 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +10 -0
- package/payload/platform/plugins/filesystem/mcp/dist/lib/result.d.ts +5 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/result.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/result.js +4 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/result.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js +2 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-read.js.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js +2 -1
- package/payload/platform/plugins/filesystem/mcp/dist/tools/file-write.js.map +1 -1
- package/payload/platform/plugins/scheduling/PLUGIN.md +4 -2
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +15 -3
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js +72 -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/__tests__/workflow-census.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/workflow-census.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/workflow-census.test.js +112 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/workflow-census.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts +59 -6
- 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 +154 -18
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +17 -2
- 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-list-kind.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list-kind.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list-kind.test.js +25 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-list-kind.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts +15 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js +66 -46
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-list.js.map +1 -1
- package/payload/platform/plugins/storage-broker/mcp/dist/index.js +5 -2
- package/payload/platform/plugins/storage-broker/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/url-get/mcp/dist/index.js +13 -13
- package/payload/platform/plugins/url-get/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/PLUGIN.md +4 -1
- package/payload/platform/plugins/workflows/mcp/dist/__tests__/retry-delay.test.d.ts +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/__tests__/retry-delay.test.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/__tests__/retry-delay.test.js +33 -0
- package/payload/platform/plugins/workflows/mcp/dist/__tests__/retry-delay.test.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/__tests__/step-resolver.test.d.ts +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/__tests__/step-resolver.test.d.ts.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/__tests__/step-resolver.test.js +42 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/__tests__/step-resolver.test.js.map +1 -0
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts +23 -5
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.d.ts.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js +20 -12
- package/payload/platform/plugins/workflows/mcp/dist/lib/step-resolver.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.d.ts.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts +10 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.d.ts.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +53 -7
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.d.ts.map +1 -1
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +2 -0
- package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
- package/payload/platform/scripts/__tests__/authored-agent-durable-copy.test.sh +78 -0
- package/payload/platform/scripts/__tests__/provision-bundle-orphan.test.sh +132 -0
- package/payload/platform/scripts/__tests__/provision-honours-disabled-agents.test.sh +4 -3
- package/payload/platform/scripts/__tests__/provision-specialist-retirement.test.sh +115 -0
- package/payload/platform/scripts/lib/provision-account-dir.sh +135 -13
- package/payload/platform/scripts/logs-rotate.sh +6 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +42 -5
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-tee.d.ts +16 -0
- package/payload/platform/services/claude-session-manager/dist/pty-tee.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-tee.js +84 -0
- package/payload/platform/services/claude-session-manager/dist/pty-tee.js.map +1 -0
- package/payload/premium-plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +2 -0
- package/payload/server/public/activity.html +5 -5
- package/payload/server/public/agents.html +4 -4
- package/payload/server/public/assets/{AdminLoginScreens-BUv_EOfw.js → AdminLoginScreens-DLogIsJT.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-DLogIsJT.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-DLogIsJT.js.gz +0 -0
- package/payload/server/public/assets/{AdminShell-BVKfxSgh.js → AdminShell-B67tPTyE.js} +1 -1
- package/payload/server/public/assets/AdminShell-B67tPTyE.js.br +0 -0
- package/payload/server/public/assets/AdminShell-B67tPTyE.js.gz +0 -0
- package/payload/server/public/assets/{activity-CBcvL5MZ.js → activity-AVJSFESV.js} +1 -1
- package/payload/server/public/assets/activity-AVJSFESV.js.br +0 -0
- package/payload/server/public/assets/activity-AVJSFESV.js.gz +0 -0
- package/payload/server/public/assets/{admin-BUor8KRy.js → admin-eFgbld42.js} +1 -1
- package/payload/server/public/assets/admin-eFgbld42.js.br +0 -0
- package/payload/server/public/assets/admin-eFgbld42.js.gz +0 -0
- package/payload/server/public/assets/{agents-Dzx8Uxgz.js → agents-CoWLZMf7.js} +1 -1
- package/payload/server/public/assets/agents-CoWLZMf7.js.br +0 -0
- package/payload/server/public/assets/agents-CoWLZMf7.js.gz +0 -0
- package/payload/server/public/assets/{browser-B7EsGyVd.js → browser-C6K66_fw.js} +1 -1
- package/payload/server/public/assets/browser-C6K66_fw.js.br +0 -0
- package/payload/server/public/assets/browser-C6K66_fw.js.gz +0 -0
- package/payload/server/public/assets/{calendar-D4qD0upn.js → calendar-Dnw_cP4b.js} +1 -1
- package/payload/server/public/assets/calendar-Dnw_cP4b.js.br +0 -0
- package/payload/server/public/assets/calendar-Dnw_cP4b.js.gz +0 -0
- package/payload/server/public/assets/chat-Cm0fkpg1.js +1 -0
- package/payload/server/public/assets/chat-Cm0fkpg1.js.br +0 -0
- package/payload/server/public/assets/chat-Cm0fkpg1.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-CjRH-BtF.js +1 -0
- package/payload/server/public/assets/chevron-left-CjRH-BtF.js.br +0 -0
- package/payload/server/public/assets/clock-wbYEt1kM.js +1 -0
- package/payload/server/public/assets/clock-wbYEt1kM.js.br +0 -0
- package/payload/server/public/assets/clock-wbYEt1kM.js.gz +0 -0
- package/payload/server/public/assets/{copy-CG2tAK16.js → copy-kuNM0Etw.js} +1 -1
- package/payload/server/public/assets/copy-kuNM0Etw.js.br +0 -0
- package/payload/server/public/assets/copy-kuNM0Etw.js.gz +0 -0
- package/payload/server/public/assets/data-c47T2NCd.js +1 -0
- package/payload/server/public/assets/data-c47T2NCd.js.br +1 -0
- package/payload/server/public/assets/data-c47T2NCd.js.gz +0 -0
- package/payload/server/public/assets/{file-text-47cIljhV.js → file-text-BWkobrcx.js} +1 -1
- package/payload/server/public/assets/file-text-BWkobrcx.js.br +0 -0
- package/payload/server/public/assets/file-text-BWkobrcx.js.gz +0 -0
- package/payload/server/public/assets/{graph-CDbi-eqF.js → graph-BGjTL5Vz.js} +1 -1
- package/payload/server/public/assets/graph-BGjTL5Vz.js.br +0 -0
- package/payload/server/public/assets/graph-BGjTL5Vz.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-Byp2RkVg.js → graph-labels-Dvc5Kw_r.js} +1 -1
- package/payload/server/public/assets/graph-labels-Dvc5Kw_r.js.br +0 -0
- package/payload/server/public/assets/graph-labels-Dvc5Kw_r.js.gz +0 -0
- package/payload/server/public/assets/{operator-t15ZvJER.js → operator-CzBGv_he.js} +1 -1
- package/payload/server/public/assets/operator-CzBGv_he.js.br +0 -0
- package/payload/server/public/assets/operator-CzBGv_he.js.gz +0 -0
- package/payload/server/public/assets/{page-DcKH1PVD.js → page-BIY4Ku8Q.js} +1 -1
- package/payload/server/public/assets/page-BIY4Ku8Q.js.br +0 -0
- package/payload/server/public/assets/page-BIY4Ku8Q.js.gz +0 -0
- package/payload/server/public/assets/{page-CogD1Hho.js → page-DaySqamH.js} +1 -1
- package/payload/server/public/assets/page-DaySqamH.js.br +0 -0
- package/payload/server/public/assets/page-DaySqamH.js.gz +0 -0
- package/payload/server/public/assets/play-C8RA52_i.js +1 -0
- package/payload/server/public/assets/play-C8RA52_i.js.br +0 -0
- package/payload/server/public/assets/play-C8RA52_i.js.gz +0 -0
- package/payload/server/public/assets/{public-UlLvs9vV.js → public-pwDSvhBv.js} +1 -1
- package/payload/server/public/assets/public-pwDSvhBv.js.br +0 -0
- package/payload/server/public/assets/public-pwDSvhBv.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-Dbj7NrEB.js → rotate-ccw-B6s7tkEt.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-B6s7tkEt.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-B6s7tkEt.js.gz +0 -0
- package/payload/server/public/assets/routines-CFlyRdYg.js +2 -0
- package/payload/server/public/assets/routines-CFlyRdYg.js.br +0 -0
- package/payload/server/public/assets/routines-CFlyRdYg.js.gz +0 -0
- package/payload/server/public/assets/{skills-EtKyNK_3.js → skills-C45kfL_Q.js} +1 -1
- package/payload/server/public/assets/skills-C45kfL_Q.js.br +0 -0
- package/payload/server/public/assets/skills-C45kfL_Q.js.gz +0 -0
- package/payload/server/public/assets/{tasks-U0poqfi9.js → tasks-BwoCTCu5.js} +1 -1
- package/payload/server/public/assets/tasks-BwoCTCu5.js.br +0 -0
- package/payload/server/public/assets/tasks-BwoCTCu5.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-D7zwttJW.js → triangle-alert-B3bthSzx.js} +1 -1
- package/payload/server/public/assets/triangle-alert-B3bthSzx.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-B3bthSzx.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-Ae_va0Ps.js → useCopyFeedback-BzJAkFEb.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-BzJAkFEb.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-BzJAkFEb.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-HRgPNA8l.css → useMediaQuery-DW_xRrMl.css} +1 -1
- package/payload/server/public/assets/useMediaQuery-DW_xRrMl.css.br +0 -0
- package/payload/server/public/assets/{useMediaQuery-HRgPNA8l.css.gz → useMediaQuery-DW_xRrMl.css.gz} +0 -0
- package/payload/server/public/assets/{useVoiceRecorder-q9U5ahfg.js → useVoiceRecorder-_qI_BAOo.js} +1 -1
- package/payload/server/public/assets/useVoiceRecorder-_qI_BAOo.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-_qI_BAOo.js.gz +0 -0
- package/payload/server/public/assets/{wrench-BmXV4Tmh.js → wrench-Bqux9jaw.js} +1 -1
- package/payload/server/public/assets/wrench-Bqux9jaw.js.br +0 -0
- package/payload/server/public/assets/wrench-Bqux9jaw.js.gz +0 -0
- package/payload/server/public/browser.html +4 -4
- package/payload/server/public/calendar.html +7 -7
- package/payload/server/public/chat.html +13 -13
- package/payload/server/public/data.html +11 -11
- package/payload/server/public/graph.html +9 -9
- package/payload/server/public/index.html +13 -13
- package/payload/server/public/operator.html +14 -14
- package/payload/server/public/public.html +13 -13
- package/payload/server/public/routines.html +7 -7
- package/payload/server/public/skills.html +5 -5
- package/payload/server/public/tasks.html +6 -6
- package/payload/server/server.js +169 -43
- package/payload/server/public/assets/AdminLoginScreens-BUv_EOfw.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BUv_EOfw.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-BVKfxSgh.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BVKfxSgh.js.gz +0 -0
- package/payload/server/public/assets/activity-CBcvL5MZ.js.br +0 -0
- package/payload/server/public/assets/activity-CBcvL5MZ.js.gz +0 -0
- package/payload/server/public/assets/admin-BUor8KRy.js.br +0 -0
- package/payload/server/public/assets/admin-BUor8KRy.js.gz +0 -0
- package/payload/server/public/assets/agents-Dzx8Uxgz.js.br +0 -0
- package/payload/server/public/assets/agents-Dzx8Uxgz.js.gz +0 -0
- package/payload/server/public/assets/browser-B7EsGyVd.js.br +0 -0
- package/payload/server/public/assets/browser-B7EsGyVd.js.gz +0 -0
- package/payload/server/public/assets/calendar-D4qD0upn.js.br +0 -0
- package/payload/server/public/assets/calendar-D4qD0upn.js.gz +0 -0
- package/payload/server/public/assets/chat-D7LjNerV.js +0 -1
- package/payload/server/public/assets/chat-D7LjNerV.js.br +0 -0
- package/payload/server/public/assets/chat-D7LjNerV.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-CGsW9Vsp.js +0 -1
- package/payload/server/public/assets/chevron-left-CGsW9Vsp.js.br +0 -0
- package/payload/server/public/assets/clock-B_xWWLQW.js +0 -1
- package/payload/server/public/assets/clock-B_xWWLQW.js.br +0 -0
- package/payload/server/public/assets/clock-B_xWWLQW.js.gz +0 -0
- package/payload/server/public/assets/copy-CG2tAK16.js.br +0 -0
- package/payload/server/public/assets/copy-CG2tAK16.js.gz +0 -0
- package/payload/server/public/assets/data-BU60tJiv.js +0 -1
- package/payload/server/public/assets/data-BU60tJiv.js.br +0 -0
- package/payload/server/public/assets/data-BU60tJiv.js.gz +0 -0
- package/payload/server/public/assets/file-text-47cIljhV.js.br +0 -0
- package/payload/server/public/assets/file-text-47cIljhV.js.gz +0 -0
- package/payload/server/public/assets/graph-CDbi-eqF.js.br +0 -0
- package/payload/server/public/assets/graph-CDbi-eqF.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-Byp2RkVg.js.br +0 -0
- package/payload/server/public/assets/graph-labels-Byp2RkVg.js.gz +0 -0
- package/payload/server/public/assets/operator-t15ZvJER.js.br +0 -0
- package/payload/server/public/assets/operator-t15ZvJER.js.gz +0 -0
- package/payload/server/public/assets/page-CogD1Hho.js.br +0 -0
- package/payload/server/public/assets/page-CogD1Hho.js.gz +0 -0
- package/payload/server/public/assets/page-DcKH1PVD.js.br +0 -0
- package/payload/server/public/assets/page-DcKH1PVD.js.gz +0 -0
- package/payload/server/public/assets/play-Bankj0zU.js +0 -1
- package/payload/server/public/assets/play-Bankj0zU.js.br +0 -0
- package/payload/server/public/assets/play-Bankj0zU.js.gz +0 -0
- package/payload/server/public/assets/public-UlLvs9vV.js.br +0 -0
- package/payload/server/public/assets/public-UlLvs9vV.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-Dbj7NrEB.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-Dbj7NrEB.js.gz +0 -0
- package/payload/server/public/assets/routines-CdqGJwyD.js +0 -2
- package/payload/server/public/assets/routines-CdqGJwyD.js.br +0 -0
- package/payload/server/public/assets/routines-CdqGJwyD.js.gz +0 -0
- package/payload/server/public/assets/skills-EtKyNK_3.js.br +0 -0
- package/payload/server/public/assets/skills-EtKyNK_3.js.gz +0 -0
- package/payload/server/public/assets/tasks-U0poqfi9.js.br +0 -0
- package/payload/server/public/assets/tasks-U0poqfi9.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-D7zwttJW.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-D7zwttJW.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-Ae_va0Ps.js.br +0 -4
- package/payload/server/public/assets/useCopyFeedback-Ae_va0Ps.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-HRgPNA8l.css.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-q9U5ahfg.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-q9U5ahfg.js.gz +0 -0
- package/payload/server/public/assets/wrench-BmXV4Tmh.js.br +0 -0
- package/payload/server/public/assets/wrench-BmXV4Tmh.js.gz +0 -0
- /package/payload/server/public/assets/{useMediaQuery-DIm6yGOl.js → useMediaQuery-DJ6XeNN7.js} +0 -0
- /package/payload/server/public/assets/{useMediaQuery-DIm6yGOl.js.br → useMediaQuery-DJ6XeNN7.js.br} +0 -0
- /package/payload/server/public/assets/{useMediaQuery-DIm6yGOl.js.gz → useMediaQuery-DJ6XeNN7.js.gz} +0 -0
|
@@ -189,12 +189,29 @@ function censusDriver(rows) {
|
|
|
189
189
|
}),
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
|
+
/** A complete agent-rail row: the shape the pre-2405 query's three-property
|
|
193
|
+
* predicate admitted, so the assertions below measure the same population. */
|
|
192
194
|
const censusRow = (over = {}) => ({
|
|
193
195
|
accountId: "acct-1111-2222",
|
|
194
196
|
eventId: "evt-3333-4444",
|
|
195
197
|
recurrence: "0 * * * *",
|
|
196
198
|
timezone: "Europe/London",
|
|
197
199
|
eventStatus: "scheduled",
|
|
200
|
+
agentChannel: "whatsapp",
|
|
201
|
+
agentDestination: "+447700900123",
|
|
202
|
+
agentPrompt: "Send me the day ahead.",
|
|
203
|
+
actionPlugin: null,
|
|
204
|
+
actionTool: null,
|
|
205
|
+
...over,
|
|
206
|
+
});
|
|
207
|
+
/** An action-rail row: plugin AND tool, no agent fields. */
|
|
208
|
+
const actionRow = (over = {}) => censusRow({
|
|
209
|
+
eventId: "evt-5555-6666",
|
|
210
|
+
agentChannel: null,
|
|
211
|
+
agentDestination: null,
|
|
212
|
+
agentPrompt: null,
|
|
213
|
+
actionPlugin: "scheduling",
|
|
214
|
+
actionTool: "schedule-connector-busy-sync",
|
|
198
215
|
...over,
|
|
199
216
|
});
|
|
200
217
|
describe("auditFireRateCensus (Task 2380)", () => {
|
|
@@ -231,6 +248,8 @@ describe("auditFireRateCensus (Task 2380)", () => {
|
|
|
231
248
|
await auditFireRateCensus(censusDriver([]), ["acct-1111-2222"]);
|
|
232
249
|
expect(censusLine()).toContain("agentRoutines=0");
|
|
233
250
|
expect(censusLine()).toContain("agentFiresPerDay=0");
|
|
251
|
+
expect(censusLine()).toContain("actionRoutines=0");
|
|
252
|
+
expect(censusLine()).toContain("actionFiresPerDay=0");
|
|
234
253
|
expect(censusLine()).toContain("ok=true");
|
|
235
254
|
});
|
|
236
255
|
it("fails the vacuity guard when agent rows exist but none is counted", async () => {
|
|
@@ -252,5 +271,58 @@ describe("auditFireRateCensus (Task 2380)", () => {
|
|
|
252
271
|
await auditFireRateCensus(censusDriver([censusRow()]), []);
|
|
253
272
|
expect(censusLine()).toBeUndefined();
|
|
254
273
|
});
|
|
274
|
+
// Task 2405 — the action rail. 2380 counted a numerator with no total: no
|
|
275
|
+
// audit counted `actionPlugin`-bearing rows, so the shift off the model had
|
|
276
|
+
// nothing to be measured against.
|
|
277
|
+
it("tallies the action rail through the same firesPerDay path", async () => {
|
|
278
|
+
await auditFireRateCensus(censusDriver([censusRow(), actionRow({ recurrence: "*/15 * * * *" })]), ["acct-1111-2222"]);
|
|
279
|
+
expect(censusLine()).toContain("agentRoutines=1");
|
|
280
|
+
expect(censusLine()).toContain("agentFiresPerDay=24");
|
|
281
|
+
expect(censusLine()).toContain("actionRoutines=1");
|
|
282
|
+
expect(censusLine()).toContain("actionFiresPerDay=96");
|
|
283
|
+
expect(censusLine()).toContain("ok=true");
|
|
284
|
+
});
|
|
285
|
+
it("keeps the account total unchanged when a row converts from agent to action", async () => {
|
|
286
|
+
// The equality is what proves the two tallies read one row set rather than
|
|
287
|
+
// two: a converted row moves both pairs and the sum stays put.
|
|
288
|
+
await auditFireRateCensus(censusDriver([censusRow(), censusRow({ eventId: "evt-b" })]), ["acct-1111-2222"]);
|
|
289
|
+
const beforeLine = censusLine();
|
|
290
|
+
censusLogs.length = 0;
|
|
291
|
+
await auditFireRateCensus(censusDriver([censusRow(), actionRow({ eventId: "evt-b" })]), ["acct-1111-2222"]);
|
|
292
|
+
expect(beforeLine).toContain("agentRoutines=2");
|
|
293
|
+
expect(beforeLine).toContain("agentFiresPerDay=48");
|
|
294
|
+
expect(beforeLine).toContain("actionRoutines=0");
|
|
295
|
+
expect(censusLine()).toContain("agentRoutines=1");
|
|
296
|
+
expect(censusLine()).toContain("agentFiresPerDay=24");
|
|
297
|
+
expect(censusLine()).toContain("actionRoutines=1");
|
|
298
|
+
expect(censusLine()).toContain("actionFiresPerDay=24");
|
|
299
|
+
});
|
|
300
|
+
it("counts a plugin-without-tool row on neither rail", async () => {
|
|
301
|
+
// chooseDispatchMode answers kind:"none" for it, so crediting the action
|
|
302
|
+
// rail would report a fire rate for work that never fires.
|
|
303
|
+
await auditFireRateCensus(censusDriver([censusRow(), actionRow({ eventId: "evt-half", actionTool: null })]), ["acct-1111-2222"]);
|
|
304
|
+
expect(censusLine()).toContain("agentRoutines=1");
|
|
305
|
+
expect(censusLine()).toContain("actionRoutines=0");
|
|
306
|
+
});
|
|
307
|
+
it("counts a channel-without-destination row on neither rail", async () => {
|
|
308
|
+
await auditFireRateCensus(censusDriver([censusRow(), censusRow({ eventId: "evt-part", agentDestination: null })]), ["acct-1111-2222"]);
|
|
309
|
+
expect(censusLine()).toContain("agentRoutines=1");
|
|
310
|
+
expect(censusLine()).toContain("actionRoutines=0");
|
|
311
|
+
});
|
|
312
|
+
it("fails the vacuity guard when only action rows exist and none is counted", async () => {
|
|
313
|
+
await auditFireRateCensus(censusDriver([actionRow({ eventStatus: "suspended" })]), [
|
|
314
|
+
"acct-1111-2222",
|
|
315
|
+
]);
|
|
316
|
+
expect(censusLine()).toContain("agentRoutines=0");
|
|
317
|
+
expect(censusLine()).toContain("actionRoutines=0");
|
|
318
|
+
expect(censusLine()).toContain("ok=false");
|
|
319
|
+
});
|
|
320
|
+
it("passes the vacuity guard when one rail counts and the other is empty", async () => {
|
|
321
|
+
// actionRoutines=0 is the state of every install today. A permanently red
|
|
322
|
+
// line is how a warning stops being read.
|
|
323
|
+
await auditFireRateCensus(censusDriver([censusRow()]), ["acct-1111-2222"]);
|
|
324
|
+
expect(censusLine()).toContain("actionRoutines=0");
|
|
325
|
+
expect(censusLine()).toContain("ok=true");
|
|
326
|
+
});
|
|
255
327
|
});
|
|
256
328
|
//# sourceMappingURL=schedule-audit.test.js.map
|
package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/schedule-audit.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-audit.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schedule-audit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schedule-audit.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/schedule-audit.test.ts"],"names":[],"mappings":"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"}
|
package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/workflow-census.test.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-census.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/workflow-census.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// Task 2405 — the workflow engine had no census at all. Across three brands on
|
|
2
|
+
// 2026-08-04 it held one :Workflow node and had produced zero :WorkflowRun rows
|
|
3
|
+
// since it shipped, and nothing in the tree could say so. `ok=false` marks
|
|
4
|
+
// exactly one condition: an active workflow that has never run.
|
|
5
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
6
|
+
import { auditWorkflowCensus } from "../schedule-audit.js";
|
|
7
|
+
const NOW = Date.parse("2026-08-04T12:00:00Z");
|
|
8
|
+
/** Captures the params the audit binds, so the 30-day cutoff can be asserted
|
|
9
|
+
* on its exact string shape rather than on the audit's own output. */
|
|
10
|
+
const bound = [];
|
|
11
|
+
function workflowDriver(rows, failWith) {
|
|
12
|
+
return {
|
|
13
|
+
session: () => ({
|
|
14
|
+
run: vi.fn(async (_cypher, params) => {
|
|
15
|
+
bound.push(params);
|
|
16
|
+
if (failWith)
|
|
17
|
+
throw new Error(failWith);
|
|
18
|
+
return {
|
|
19
|
+
records: rows.map((r) => ({
|
|
20
|
+
get: (k) => r[k] ?? null,
|
|
21
|
+
})),
|
|
22
|
+
};
|
|
23
|
+
}),
|
|
24
|
+
close: vi.fn(async () => { }),
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const workflowRow = (over = {}) => ({
|
|
29
|
+
accountId: "acct-1111-2222",
|
|
30
|
+
workflowId: "wf-3333",
|
|
31
|
+
status: "active",
|
|
32
|
+
runs30d: 0,
|
|
33
|
+
lastRunAt: null,
|
|
34
|
+
...over,
|
|
35
|
+
});
|
|
36
|
+
describe("auditWorkflowCensus (Task 2405)", () => {
|
|
37
|
+
let logs = [];
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
logs = [];
|
|
40
|
+
bound.length = 0;
|
|
41
|
+
vi.spyOn(console, "error").mockImplementation((...args) => {
|
|
42
|
+
logs.push(args.map(String).join(" "));
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
afterEach(() => vi.restoreAllMocks());
|
|
46
|
+
const line = () => logs.find((l) => l.includes("op=workflow-census "));
|
|
47
|
+
it("reports zeros and ok=true for an account with no workflows", async () => {
|
|
48
|
+
// Having none is not a fault, and a check that goes quiet when healthy
|
|
49
|
+
// cannot be told apart from one that stopped running.
|
|
50
|
+
await auditWorkflowCensus(workflowDriver([]), ["acct-1111-2222"], NOW);
|
|
51
|
+
expect(line()).toContain("workflows=0");
|
|
52
|
+
expect(line()).toContain("active=0");
|
|
53
|
+
expect(line()).toContain("runs30d=0");
|
|
54
|
+
expect(line()).toContain("lastRunAge=never");
|
|
55
|
+
expect(line()).toContain("ok=true");
|
|
56
|
+
});
|
|
57
|
+
it("fails on an active workflow that has never run", async () => {
|
|
58
|
+
// The dark-engine signature this audit exists to name.
|
|
59
|
+
await auditWorkflowCensus(workflowDriver([workflowRow()]), ["acct-1111-2222"], NOW);
|
|
60
|
+
expect(line()).toContain("workflows=1");
|
|
61
|
+
expect(line()).toContain("active=1");
|
|
62
|
+
expect(line()).toContain("runs30d=0");
|
|
63
|
+
expect(line()).toContain("lastRunAge=never");
|
|
64
|
+
expect(line()).toContain("ok=false");
|
|
65
|
+
});
|
|
66
|
+
it("passes on a draft workflow that has never run", async () => {
|
|
67
|
+
// A draft is not armed, so it is not expected to have run.
|
|
68
|
+
await auditWorkflowCensus(workflowDriver([workflowRow({ status: "draft" })]), ["acct-1111-2222"], NOW);
|
|
69
|
+
expect(line()).toContain("workflows=1");
|
|
70
|
+
expect(line()).toContain("active=0");
|
|
71
|
+
expect(line()).toContain("ok=true");
|
|
72
|
+
});
|
|
73
|
+
it("reports the age in whole days from the newest run across the account", async () => {
|
|
74
|
+
await auditWorkflowCensus(workflowDriver([
|
|
75
|
+
workflowRow({ workflowId: "wf-a", runs30d: 3, lastRunAt: "2026-07-30T12:00:00.000Z" }),
|
|
76
|
+
workflowRow({ workflowId: "wf-b", runs30d: 1, lastRunAt: "2026-08-02T12:00:00.000Z" }),
|
|
77
|
+
]), ["acct-1111-2222"], NOW);
|
|
78
|
+
expect(line()).toContain("workflows=2");
|
|
79
|
+
expect(line()).toContain("runs30d=4");
|
|
80
|
+
expect(line()).toContain("lastRunAge=2");
|
|
81
|
+
expect(line()).toContain("ok=true");
|
|
82
|
+
});
|
|
83
|
+
it("binds the 30-day cutoff as a Z-suffixed ISO string", async () => {
|
|
84
|
+
// The compare is lexical against `startedAt`, which workflow-execute writes
|
|
85
|
+
// as toISOString. A cutoff in any other shape would compare wrong.
|
|
86
|
+
await auditWorkflowCensus(workflowDriver([]), ["acct-1111-2222"], NOW);
|
|
87
|
+
expect(bound[0]).toMatchObject({ since30d: "2026-07-05T12:00:00.000Z" });
|
|
88
|
+
});
|
|
89
|
+
it("counts a neo4j Integer runs30d as a number", async () => {
|
|
90
|
+
await auditWorkflowCensus(workflowDriver([
|
|
91
|
+
workflowRow({ runs30d: { toNumber: () => 7 }, lastRunAt: "2026-08-04T00:00:00.000Z" }),
|
|
92
|
+
]), ["acct-1111-2222"], NOW);
|
|
93
|
+
expect(line()).toContain("runs30d=7");
|
|
94
|
+
});
|
|
95
|
+
it("emits the error line and no count line when the read fails", async () => {
|
|
96
|
+
// A silent zero is indistinguishable from a genuine one, which is the
|
|
97
|
+
// defect this task fixes.
|
|
98
|
+
await auditWorkflowCensus(workflowDriver([], "bolt down"), ["acct-1111-2222"], NOW);
|
|
99
|
+
expect(logs.find((l) => l.includes("op=workflow-census-error"))).toContain("bolt down");
|
|
100
|
+
expect(line()).toBeUndefined();
|
|
101
|
+
});
|
|
102
|
+
it("emits a line for every local account, not only those with rows", async () => {
|
|
103
|
+
await auditWorkflowCensus(workflowDriver([workflowRow()]), ["acct-1111-2222", "acct-9999-8888"], NOW);
|
|
104
|
+
expect(logs.filter((l) => l.includes("op=workflow-census ")).length).toBe(2);
|
|
105
|
+
expect(logs.find((l) => l.includes("acct=acct-999"))).toContain("workflows=0");
|
|
106
|
+
});
|
|
107
|
+
it("emits nothing when there are no local accounts", async () => {
|
|
108
|
+
await auditWorkflowCensus(workflowDriver([workflowRow()]), [], NOW);
|
|
109
|
+
expect(line()).toBeUndefined();
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
//# sourceMappingURL=workflow-census.test.js.map
|
package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/workflow-census.test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-census.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/workflow-census.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -115,7 +115,8 @@ export declare function noneForHours(entry: ConnectorStateEntry, nowMs: number):
|
|
|
115
115
|
*/
|
|
116
116
|
export declare function auditConnectorResolution(driver: Driver, localAccountIds: string[], accountsDir: string, statePath: string, nowMs: number): Promise<void>;
|
|
117
117
|
/**
|
|
118
|
-
* Task 2380 — the install's
|
|
118
|
+
* Task 2380, widened to both rails by Task 2405 — the install's fire rate on
|
|
119
|
+
* each dispatch rail, counted from the rows.
|
|
119
120
|
*
|
|
120
121
|
* `recurrencePrevious` records a change made through `schedule-update` and
|
|
121
122
|
* nothing else. A direct Cypher write, a restore, or a future editor changes the
|
|
@@ -125,15 +126,29 @@ export declare function auditConnectorResolution(driver: Driver, localAccountIds
|
|
|
125
126
|
* next tick. It is a census, not an alarm: its value is that the total is
|
|
126
127
|
* greppable across days.
|
|
127
128
|
*
|
|
129
|
+
* 2380 counted the agent rail alone: a numerator with no total, so the platform's
|
|
130
|
+
* shift toward running scheduled work without a model had nothing to be measured
|
|
131
|
+
* against. One query, one tally, one line covers both rails; a second census
|
|
132
|
+
* reading the same rows would let the two disagree about what a routine is.
|
|
133
|
+
*
|
|
134
|
+
* Which rail a row lands on is `chooseDispatchMode`'s rule verbatim
|
|
135
|
+
* (agent-turn-dispatch.ts:48-59): the agent rail needs `agentChannel` AND
|
|
136
|
+
* `agentDestination` AND `agentPrompt`, the action rail needs `actionPlugin` AND
|
|
137
|
+
* `actionTool`, and a row satisfying neither is counted on neither. Reading it
|
|
138
|
+
* any other way would report a fire rate for a row the dispatcher answers
|
|
139
|
+
* `kind:"none"` for, which never fires at all.
|
|
140
|
+
*
|
|
128
141
|
* Only `scheduled` rows are counted, because the sweep selects that literal by
|
|
129
142
|
* equality (check-due-events.ts:502, :567, :704, :768) and a suspended routine's
|
|
130
143
|
* fire rate is zero, not unknown. Each row is counted in its own timezone.
|
|
131
144
|
*
|
|
132
|
-
* `ok=false` in exactly one case: nothing counted
|
|
133
|
-
* at any status. That is the Task 2231 vacuity guard
|
|
134
|
-
* enumeration found nothing" must not read the same as
|
|
135
|
-
* is nothing". An install whose
|
|
136
|
-
* `ok=false`, and it clears the moment one is resumed.
|
|
145
|
+
* `ok=false` in exactly one case: nothing counted on EITHER rail while
|
|
146
|
+
* dispatch-bearing rows exist at any status. That is the Task 2231 vacuity guard
|
|
147
|
+
* — a zero that means "the enumeration found nothing" must not read the same as
|
|
148
|
+
* a zero that means "there is nothing". An install whose routines are all
|
|
149
|
+
* suspended reports `ok=false`, and it clears the moment one is resumed.
|
|
150
|
+
* `actionRoutines=0` alone is NOT a failure: it is the state of every install
|
|
151
|
+
* today, and a permanently red line is how a warning stops being read.
|
|
137
152
|
*
|
|
138
153
|
* A gate (Task 2378) does not reduce the count. The gate skips the INJECT; the
|
|
139
154
|
* fire still happens and still costs a headless tool call, so the rate this
|
|
@@ -142,6 +157,44 @@ export declare function auditConnectorResolution(driver: Driver, localAccountIds
|
|
|
142
157
|
* Never throws; the sweep's contract.
|
|
143
158
|
*/
|
|
144
159
|
export declare function auditFireRateCensus(driver: Driver, localAccountIds: string[]): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Task 2405 — whether the workflow engine has ever run.
|
|
162
|
+
*
|
|
163
|
+
* `auditFireRateCensus` counts the two dispatch rails a routine can sit on. The
|
|
164
|
+
* workflow engine is the third destination the platform is moving work toward
|
|
165
|
+
* and nothing in the tree counted it at all: across three brands on 2026-08-04
|
|
166
|
+
* it held one `:Workflow` node and zero `:WorkflowRun` rows, and three Cypher
|
|
167
|
+
* sessions across three bolt ports were the only way to learn it.
|
|
168
|
+
*
|
|
169
|
+
* `ok=false` in exactly one case: `active > 0` and `runs30d = 0`. An account
|
|
170
|
+
* with no workflows reports zeros and `ok=true`, because having none is not a
|
|
171
|
+
* fault. An account carrying an active workflow that has never run is the
|
|
172
|
+
* dark-engine signature this audit exists to name. A draft workflow never fails
|
|
173
|
+
* the check: it is not armed, so it is not expected to have run.
|
|
174
|
+
*
|
|
175
|
+
* The trash predicate matches every query the workflows plugin makes
|
|
176
|
+
* (workflow-list.ts:33, workflow-runs.ts:40-41); a trashed workflow counted as
|
|
177
|
+
* active would produce a permanent false `ok=false`.
|
|
178
|
+
*
|
|
179
|
+
* `r.startedAt` is a Z-suffixed `toISOString` (workflow-execute.ts:355), the
|
|
180
|
+
* only writer, so the lexical `>=` against the cutoff is exact, `max()` is
|
|
181
|
+
* genuinely the latest run, and `Date.parse` on the winner always parses.
|
|
182
|
+
*
|
|
183
|
+
* Every construct in the query below is copied from a live in-tree twin
|
|
184
|
+
* (workflow-runs.ts:49-57) EXCEPT `max()`, which appears in no other Cypher in
|
|
185
|
+
* this tree. That is a considered exception to the rule ROUTINE_COLS states,
|
|
186
|
+
* not an oversight: the rule there is a blast-radius argument — a syntax error
|
|
187
|
+
* in that shared projection 503s every routine query — and this audit is a
|
|
188
|
+
* single guarded read whose failure emits one named line and costs the sweep
|
|
189
|
+
* nothing else.
|
|
190
|
+
*
|
|
191
|
+
* One line per local account per tick, including every healthy one and every
|
|
192
|
+
* account with nothing. Never throws (honours the sweep's contract); an
|
|
193
|
+
* unreadable census emits `op=workflow-census-error` INSTEAD of the count line
|
|
194
|
+
* and never alongside it, so a database that is down is never read as an
|
|
195
|
+
* account with nothing in it.
|
|
196
|
+
*/
|
|
197
|
+
export declare function auditWorkflowCensus(driver: Driver, localAccountIds: string[], nowMs: number): Promise<void>;
|
|
145
198
|
/**
|
|
146
199
|
* Task 2383 — how the fleet's recurring agent routines answered the gate
|
|
147
200
|
* question.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule-audit.d.ts","sourceRoot":"","sources":["../../src/lib/schedule-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGjF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,OAAO,YAA2B,GACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpE;AAWD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Df;AAMD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,eAAe,CAAC;IAC3B;oBACgB;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,GAAG,SAAS,EACrC,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAGrB;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAwCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAwDf;AAED
|
|
1
|
+
{"version":3,"file":"schedule-audit.d.ts","sourceRoot":"","sources":["../../src/lib/schedule-audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAGjF;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,OAAO,YAA2B,GACvC,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpE;AAWD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CAyDf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,YAAY,EAAE,MAAM,EACpB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,IAAI,CAAC,CA4Df;AAMD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,eAAe,CAAC;IAC3B;oBACgB;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,mBAAmB,GAAG,SAAS,EACrC,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,GACZ,mBAAmB,CAGrB;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAwCD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAwDf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GlG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,EACzB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiEf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -331,7 +331,8 @@ export async function auditConnectorResolution(driver, localAccountIds, accounts
|
|
|
331
331
|
writeConnectorState(statePath, state);
|
|
332
332
|
}
|
|
333
333
|
/**
|
|
334
|
-
* Task 2380 — the install's
|
|
334
|
+
* Task 2380, widened to both rails by Task 2405 — the install's fire rate on
|
|
335
|
+
* each dispatch rail, counted from the rows.
|
|
335
336
|
*
|
|
336
337
|
* `recurrencePrevious` records a change made through `schedule-update` and
|
|
337
338
|
* nothing else. A direct Cypher write, a restore, or a future editor changes the
|
|
@@ -341,15 +342,29 @@ export async function auditConnectorResolution(driver, localAccountIds, accounts
|
|
|
341
342
|
* next tick. It is a census, not an alarm: its value is that the total is
|
|
342
343
|
* greppable across days.
|
|
343
344
|
*
|
|
345
|
+
* 2380 counted the agent rail alone: a numerator with no total, so the platform's
|
|
346
|
+
* shift toward running scheduled work without a model had nothing to be measured
|
|
347
|
+
* against. One query, one tally, one line covers both rails; a second census
|
|
348
|
+
* reading the same rows would let the two disagree about what a routine is.
|
|
349
|
+
*
|
|
350
|
+
* Which rail a row lands on is `chooseDispatchMode`'s rule verbatim
|
|
351
|
+
* (agent-turn-dispatch.ts:48-59): the agent rail needs `agentChannel` AND
|
|
352
|
+
* `agentDestination` AND `agentPrompt`, the action rail needs `actionPlugin` AND
|
|
353
|
+
* `actionTool`, and a row satisfying neither is counted on neither. Reading it
|
|
354
|
+
* any other way would report a fire rate for a row the dispatcher answers
|
|
355
|
+
* `kind:"none"` for, which never fires at all.
|
|
356
|
+
*
|
|
344
357
|
* Only `scheduled` rows are counted, because the sweep selects that literal by
|
|
345
358
|
* equality (check-due-events.ts:502, :567, :704, :768) and a suspended routine's
|
|
346
359
|
* fire rate is zero, not unknown. Each row is counted in its own timezone.
|
|
347
360
|
*
|
|
348
|
-
* `ok=false` in exactly one case: nothing counted
|
|
349
|
-
* at any status. That is the Task 2231 vacuity guard
|
|
350
|
-
* enumeration found nothing" must not read the same as
|
|
351
|
-
* is nothing". An install whose
|
|
352
|
-
* `ok=false`, and it clears the moment one is resumed.
|
|
361
|
+
* `ok=false` in exactly one case: nothing counted on EITHER rail while
|
|
362
|
+
* dispatch-bearing rows exist at any status. That is the Task 2231 vacuity guard
|
|
363
|
+
* — a zero that means "the enumeration found nothing" must not read the same as
|
|
364
|
+
* a zero that means "there is nothing". An install whose routines are all
|
|
365
|
+
* suspended reports `ok=false`, and it clears the moment one is resumed.
|
|
366
|
+
* `actionRoutines=0` alone is NOT a failure: it is the state of every install
|
|
367
|
+
* today, and a permanently red line is how a warning stops being read.
|
|
353
368
|
*
|
|
354
369
|
* A gate (Task 2378) does not reduce the count. The gate skips the INJECT; the
|
|
355
370
|
* fire still happens and still costs a headless tool call, so the rate this
|
|
@@ -362,21 +377,28 @@ export async function auditFireRateCensus(driver, localAccountIds) {
|
|
|
362
377
|
return;
|
|
363
378
|
const session = driver.session();
|
|
364
379
|
try {
|
|
365
|
-
// Every
|
|
380
|
+
// Every dispatch-bearing row on the account regardless of status or
|
|
366
381
|
// recurrence: the wider set is what makes the vacuity guard meaningful, and
|
|
367
382
|
// splitting it into a second query would let the two disagree.
|
|
368
383
|
const res = await session.run(`MATCH (e:Event)
|
|
369
384
|
WHERE e.accountId IN $localAccountIds
|
|
370
|
-
AND e.
|
|
371
|
-
AND e.agentDestination IS NOT NULL
|
|
372
|
-
AND e.agentPrompt IS NOT NULL
|
|
385
|
+
AND (e.agentPrompt IS NOT NULL OR e.actionPlugin IS NOT NULL)
|
|
373
386
|
RETURN e.accountId AS accountId, e.eventId AS eventId,
|
|
374
387
|
e.recurrence AS recurrence, e.timezone AS timezone,
|
|
375
|
-
e.eventStatus AS eventStatus
|
|
388
|
+
e.eventStatus AS eventStatus,
|
|
389
|
+
e.agentChannel AS agentChannel, e.agentDestination AS agentDestination,
|
|
390
|
+
e.agentPrompt AS agentPrompt,
|
|
391
|
+
e.actionPlugin AS actionPlugin, e.actionTool AS actionTool`, { localAccountIds });
|
|
376
392
|
const countedAt = new Date();
|
|
377
393
|
const tally = new Map();
|
|
378
394
|
for (const accountId of localAccountIds) {
|
|
379
|
-
tally.set(accountId, {
|
|
395
|
+
tally.set(accountId, {
|
|
396
|
+
bearing: 0,
|
|
397
|
+
agentRoutines: 0,
|
|
398
|
+
agentFires: 0,
|
|
399
|
+
actionRoutines: 0,
|
|
400
|
+
actionFires: 0,
|
|
401
|
+
});
|
|
380
402
|
}
|
|
381
403
|
for (const rec of res.records) {
|
|
382
404
|
const accountId = rec.get("accountId");
|
|
@@ -390,9 +412,25 @@ export async function auditFireRateCensus(driver, localAccountIds) {
|
|
|
390
412
|
const eventStatus = (rec.get("eventStatus") ?? null);
|
|
391
413
|
if (recurrence === null || eventStatus !== "scheduled")
|
|
392
414
|
continue;
|
|
415
|
+
// chooseDispatchMode's rule verbatim (agent-turn-dispatch.ts:48-59).
|
|
416
|
+
const prop = (k) => (rec.get(k) ?? null);
|
|
417
|
+
const rail = prop("agentChannel") && prop("agentDestination") && prop("agentPrompt")
|
|
418
|
+
? "agent"
|
|
419
|
+
: prop("actionPlugin") && prop("actionTool")
|
|
420
|
+
? "action"
|
|
421
|
+
: null;
|
|
422
|
+
if (rail === null)
|
|
423
|
+
continue;
|
|
393
424
|
try {
|
|
394
|
-
|
|
395
|
-
|
|
425
|
+
const fires = firesPerDay(recurrence, (rec.get("timezone") ?? null), countedAt);
|
|
426
|
+
if (rail === "agent") {
|
|
427
|
+
acc.agentFires += fires;
|
|
428
|
+
acc.agentRoutines++;
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
acc.actionFires += fires;
|
|
432
|
+
acc.actionRoutines++;
|
|
433
|
+
}
|
|
396
434
|
}
|
|
397
435
|
catch {
|
|
398
436
|
// Named rather than swallowed, and dropped from both figures: one row
|
|
@@ -403,13 +441,14 @@ export async function auditFireRateCensus(driver, localAccountIds) {
|
|
|
403
441
|
}
|
|
404
442
|
}
|
|
405
443
|
// Driven by localAccountIds, not by the result rows: an account with no
|
|
406
|
-
//
|
|
407
|
-
//
|
|
444
|
+
// routines returns none, and skipping it would make "healthy" and "not
|
|
445
|
+
// looked at" the same silence.
|
|
408
446
|
for (const accountId of localAccountIds) {
|
|
409
447
|
const c = tally.get(accountId);
|
|
410
|
-
const ok = !(c.
|
|
448
|
+
const ok = !(c.agentRoutines === 0 && c.actionRoutines === 0 && c.bearing > 0);
|
|
411
449
|
console.error(`[schedule-audit] op=fire-rate-census acct=${accountId.slice(0, 8)} ` +
|
|
412
|
-
`agentRoutines=${c.
|
|
450
|
+
`agentRoutines=${c.agentRoutines} agentFiresPerDay=${c.agentFires} ` +
|
|
451
|
+
`actionRoutines=${c.actionRoutines} actionFiresPerDay=${c.actionFires} ok=${ok}`);
|
|
413
452
|
}
|
|
414
453
|
}
|
|
415
454
|
catch (err) {
|
|
@@ -424,6 +463,103 @@ export async function auditFireRateCensus(driver, localAccountIds) {
|
|
|
424
463
|
}
|
|
425
464
|
}
|
|
426
465
|
}
|
|
466
|
+
/**
|
|
467
|
+
* Task 2405 — whether the workflow engine has ever run.
|
|
468
|
+
*
|
|
469
|
+
* `auditFireRateCensus` counts the two dispatch rails a routine can sit on. The
|
|
470
|
+
* workflow engine is the third destination the platform is moving work toward
|
|
471
|
+
* and nothing in the tree counted it at all: across three brands on 2026-08-04
|
|
472
|
+
* it held one `:Workflow` node and zero `:WorkflowRun` rows, and three Cypher
|
|
473
|
+
* sessions across three bolt ports were the only way to learn it.
|
|
474
|
+
*
|
|
475
|
+
* `ok=false` in exactly one case: `active > 0` and `runs30d = 0`. An account
|
|
476
|
+
* with no workflows reports zeros and `ok=true`, because having none is not a
|
|
477
|
+
* fault. An account carrying an active workflow that has never run is the
|
|
478
|
+
* dark-engine signature this audit exists to name. A draft workflow never fails
|
|
479
|
+
* the check: it is not armed, so it is not expected to have run.
|
|
480
|
+
*
|
|
481
|
+
* The trash predicate matches every query the workflows plugin makes
|
|
482
|
+
* (workflow-list.ts:33, workflow-runs.ts:40-41); a trashed workflow counted as
|
|
483
|
+
* active would produce a permanent false `ok=false`.
|
|
484
|
+
*
|
|
485
|
+
* `r.startedAt` is a Z-suffixed `toISOString` (workflow-execute.ts:355), the
|
|
486
|
+
* only writer, so the lexical `>=` against the cutoff is exact, `max()` is
|
|
487
|
+
* genuinely the latest run, and `Date.parse` on the winner always parses.
|
|
488
|
+
*
|
|
489
|
+
* Every construct in the query below is copied from a live in-tree twin
|
|
490
|
+
* (workflow-runs.ts:49-57) EXCEPT `max()`, which appears in no other Cypher in
|
|
491
|
+
* this tree. That is a considered exception to the rule ROUTINE_COLS states,
|
|
492
|
+
* not an oversight: the rule there is a blast-radius argument — a syntax error
|
|
493
|
+
* in that shared projection 503s every routine query — and this audit is a
|
|
494
|
+
* single guarded read whose failure emits one named line and costs the sweep
|
|
495
|
+
* nothing else.
|
|
496
|
+
*
|
|
497
|
+
* One line per local account per tick, including every healthy one and every
|
|
498
|
+
* account with nothing. Never throws (honours the sweep's contract); an
|
|
499
|
+
* unreadable census emits `op=workflow-census-error` INSTEAD of the count line
|
|
500
|
+
* and never alongside it, so a database that is down is never read as an
|
|
501
|
+
* account with nothing in it.
|
|
502
|
+
*/
|
|
503
|
+
export async function auditWorkflowCensus(driver, localAccountIds, nowMs) {
|
|
504
|
+
if (localAccountIds.length === 0)
|
|
505
|
+
return;
|
|
506
|
+
const session = driver.session();
|
|
507
|
+
try {
|
|
508
|
+
const since30d = new Date(nowMs - 30 * 24 * 60 * 60 * 1000).toISOString();
|
|
509
|
+
const res = await session.run(`MATCH (w:Workflow)
|
|
510
|
+
WHERE w.accountId IN $localAccountIds
|
|
511
|
+
AND (NOT w:Trashed AND w.deletedAt IS NULL)
|
|
512
|
+
OPTIONAL MATCH (r:WorkflowRun)-[:RUN_OF]->(w)
|
|
513
|
+
WHERE (NOT r:Trashed AND r.deletedAt IS NULL)
|
|
514
|
+
RETURN w.accountId AS accountId, w.workflowId AS workflowId, w.status AS status,
|
|
515
|
+
count(CASE WHEN r.startedAt >= $since30d THEN 1 END) AS runs30d,
|
|
516
|
+
max(r.startedAt) AS lastRunAt`, { localAccountIds, since30d });
|
|
517
|
+
const tally = new Map();
|
|
518
|
+
for (const accountId of localAccountIds) {
|
|
519
|
+
tally.set(accountId, { workflows: 0, active: 0, runs30d: 0, lastRunAt: null });
|
|
520
|
+
}
|
|
521
|
+
for (const rec of res.records) {
|
|
522
|
+
const accountId = rec.get("accountId");
|
|
523
|
+
const acc = tally.get(accountId);
|
|
524
|
+
if (!acc)
|
|
525
|
+
continue;
|
|
526
|
+
acc.workflows++;
|
|
527
|
+
if (rec.get("status") === "active")
|
|
528
|
+
acc.active++;
|
|
529
|
+
acc.runs30d += num(rec.get("runs30d"));
|
|
530
|
+
const lastRunAt = (rec.get("lastRunAt") ?? null);
|
|
531
|
+
// Both sides are Z-suffixed toISOString, so the string compare is the
|
|
532
|
+
// instant compare.
|
|
533
|
+
if (lastRunAt !== null && (acc.lastRunAt === null || lastRunAt > acc.lastRunAt)) {
|
|
534
|
+
acc.lastRunAt = lastRunAt;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
// Driven by localAccountIds, not by the result rows: an account with no
|
|
538
|
+
// workflows returns none, and skipping it would make "healthy" and "not
|
|
539
|
+
// looked at" the same silence.
|
|
540
|
+
for (const accountId of localAccountIds) {
|
|
541
|
+
const c = tally.get(accountId);
|
|
542
|
+
const lastRunAge = c.lastRunAt === null
|
|
543
|
+
? "never"
|
|
544
|
+
: String(Math.floor((nowMs - Date.parse(c.lastRunAt)) / 86_400_000));
|
|
545
|
+
const ok = !(c.active > 0 && c.runs30d === 0);
|
|
546
|
+
console.error(`[schedule-audit] op=workflow-census acct=${accountId.slice(0, 8)} ` +
|
|
547
|
+
`workflows=${c.workflows} active=${c.active} runs30d=${c.runs30d} ` +
|
|
548
|
+
`lastRunAge=${lastRunAge} ok=${ok}`);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
catch (err) {
|
|
552
|
+
console.error(`[schedule-audit] op=workflow-census-error detail=${err instanceof Error ? err.message : String(err)}`);
|
|
553
|
+
}
|
|
554
|
+
finally {
|
|
555
|
+
try {
|
|
556
|
+
await session.close();
|
|
557
|
+
}
|
|
558
|
+
catch {
|
|
559
|
+
// ignore
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
427
563
|
/**
|
|
428
564
|
* Task 2383 — how the fleet's recurring agent routines answered the gate
|
|
429
565
|
* question.
|