daycare-cli 0.0.10 → 0.0.12
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/dist/commands/channelAddMember.d.ts +2 -0
- package/dist/commands/channelAddMember.d.ts.map +1 -0
- package/dist/commands/channelAddMember.js +20 -0
- package/dist/commands/channelAddMember.js.map +1 -0
- package/dist/commands/channelCommands.spec.d.ts +2 -0
- package/dist/commands/channelCommands.spec.d.ts.map +1 -0
- package/dist/commands/channelCommands.spec.js +95 -0
- package/dist/commands/channelCommands.spec.js.map +1 -0
- package/dist/commands/channelCreate.d.ts +4 -0
- package/dist/commands/channelCreate.d.ts.map +1 -0
- package/dist/commands/channelCreate.js +20 -0
- package/dist/commands/channelCreate.js.map +1 -0
- package/dist/commands/channelList.d.ts +2 -0
- package/dist/commands/channelList.d.ts.map +1 -0
- package/dist/commands/channelList.js +28 -0
- package/dist/commands/channelList.js.map +1 -0
- package/dist/commands/channelRemoveMember.d.ts +2 -0
- package/dist/commands/channelRemoveMember.d.ts.map +1 -0
- package/dist/commands/channelRemoveMember.js +24 -0
- package/dist/commands/channelRemoveMember.js.map +1 -0
- package/dist/commands/channelSend.d.ts +2 -0
- package/dist/commands/channelSend.d.ts.map +1 -0
- package/dist/commands/channelSend.js +20 -0
- package/dist/commands/channelSend.js.map +1 -0
- package/dist/engine/agents/agent.d.ts +0 -1
- package/dist/engine/agents/agent.d.ts.map +1 -1
- package/dist/engine/agents/agent.js +27 -77
- package/dist/engine/agents/agent.js.map +1 -1
- package/dist/engine/agents/agentSystem.d.ts +9 -3
- package/dist/engine/agents/agentSystem.d.ts.map +1 -1
- package/dist/engine/agents/agentSystem.js +13 -8
- package/dist/engine/agents/agentSystem.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.js +7 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.spec.js +2 -1
- package/dist/engine/agents/ops/agentDescriptorLabel.spec.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorRead.js +1 -0
- package/dist/engine/agents/ops/agentDescriptorRead.js.map +1 -1
- package/dist/engine/agents/ops/agentDescriptorTypes.d.ts +1 -0
- package/dist/engine/agents/ops/agentDescriptorTypes.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentLoopRun.js +2 -1
- package/dist/engine/agents/ops/agentLoopRun.js.map +1 -1
- package/dist/engine/agents/ops/agentPermanentList.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentPermanentList.js +1 -0
- package/dist/engine/agents/ops/agentPermanentList.js.map +1 -1
- package/dist/engine/agents/ops/agentPromptFilesEnsure.d.ts +1 -1
- package/dist/engine/agents/ops/agentPromptFilesEnsure.d.ts.map +1 -1
- package/dist/engine/agents/ops/agentPromptFilesEnsure.js +2 -3
- package/dist/engine/agents/ops/agentPromptFilesEnsure.js.map +1 -1
- package/dist/engine/agents/ops/agentTypes.d.ts +1 -11
- package/dist/engine/agents/ops/agentTypes.d.ts.map +1 -1
- package/dist/engine/agents/system/_systemAgents.d.ts.map +1 -1
- package/dist/engine/agents/system/_systemAgents.js +5 -0
- package/dist/engine/agents/system/_systemAgents.js.map +1 -1
- package/dist/engine/agents/system/systemAgentPromptResolve.spec.js +6 -0
- package/dist/engine/agents/system/systemAgentPromptResolve.spec.js.map +1 -1
- package/dist/engine/channels/channelMessageBuild.d.ts +12 -0
- package/dist/engine/channels/channelMessageBuild.d.ts.map +1 -0
- package/dist/engine/channels/channelMessageBuild.js +92 -0
- package/dist/engine/channels/channelMessageBuild.js.map +1 -0
- package/dist/engine/channels/channelMessageBuild.spec.d.ts +2 -0
- package/dist/engine/channels/channelMessageBuild.spec.d.ts.map +1 -0
- package/dist/engine/channels/channelMessageBuild.spec.js +60 -0
- package/dist/engine/channels/channelMessageBuild.spec.js.map +1 -0
- package/dist/engine/channels/channelStore.d.ts +27 -0
- package/dist/engine/channels/channelStore.d.ts.map +1 -0
- package/dist/engine/channels/channelStore.js +147 -0
- package/dist/engine/channels/channelStore.js.map +1 -0
- package/dist/engine/channels/channelStore.spec.d.ts +2 -0
- package/dist/engine/channels/channelStore.spec.d.ts.map +1 -0
- package/dist/engine/channels/channelStore.spec.js +89 -0
- package/dist/engine/channels/channelStore.spec.js.map +1 -0
- package/dist/engine/channels/channelTypes.d.ts +31 -0
- package/dist/engine/channels/channelTypes.d.ts.map +1 -0
- package/dist/engine/channels/channelTypes.js +2 -0
- package/dist/engine/channels/channelTypes.js.map +1 -0
- package/dist/engine/channels/channels.d.ts +34 -0
- package/dist/engine/channels/channels.d.ts.map +1 -0
- package/dist/engine/channels/channels.js +269 -0
- package/dist/engine/channels/channels.js.map +1 -0
- package/dist/engine/channels/channels.spec.d.ts +2 -0
- package/dist/engine/channels/channels.spec.d.ts.map +1 -0
- package/dist/engine/channels/channels.spec.js +132 -0
- package/dist/engine/channels/channels.spec.js.map +1 -0
- package/dist/engine/cron/crons.d.ts.map +1 -1
- package/dist/engine/cron/crons.js +26 -18
- package/dist/engine/cron/crons.js.map +1 -1
- package/dist/engine/engine.d.ts +4 -0
- package/dist/engine/engine.d.ts.map +1 -1
- package/dist/engine/engine.js +35 -11
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/engine.spec.js +114 -0
- package/dist/engine/engine.spec.js.map +1 -1
- package/dist/engine/heartbeat/heartbeats.d.ts.map +1 -1
- package/dist/engine/heartbeat/heartbeats.js +18 -4
- package/dist/engine/heartbeat/heartbeats.js.map +1 -1
- package/dist/engine/ipc/client.d.ts +9 -1
- package/dist/engine/ipc/client.d.ts.map +1 -1
- package/dist/engine/ipc/client.js +84 -0
- package/dist/engine/ipc/client.js.map +1 -1
- package/dist/engine/ipc/server.d.ts.map +1 -1
- package/dist/engine/ipc/server.js +84 -0
- package/dist/engine/ipc/server.js.map +1 -1
- package/dist/engine/modules/connectors/types.d.ts +6 -4
- package/dist/engine/modules/connectors/types.d.ts.map +1 -1
- package/dist/engine/modules/tools/channelCreateTool.d.ts +4 -0
- package/dist/engine/modules/tools/channelCreateTool.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelCreateTool.js +34 -0
- package/dist/engine/modules/tools/channelCreateTool.js.map +1 -0
- package/dist/engine/modules/tools/channelCreateTool.spec.d.ts +2 -0
- package/dist/engine/modules/tools/channelCreateTool.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelCreateTool.spec.js +41 -0
- package/dist/engine/modules/tools/channelCreateTool.spec.js.map +1 -0
- package/dist/engine/modules/tools/channelHistoryTool.d.ts +4 -0
- package/dist/engine/modules/tools/channelHistoryTool.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelHistoryTool.js +37 -0
- package/dist/engine/modules/tools/channelHistoryTool.js.map +1 -0
- package/dist/engine/modules/tools/channelHistoryTool.spec.d.ts +2 -0
- package/dist/engine/modules/tools/channelHistoryTool.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelHistoryTool.spec.js +58 -0
- package/dist/engine/modules/tools/channelHistoryTool.spec.js.map +1 -0
- package/dist/engine/modules/tools/channelMemberTool.d.ts +5 -0
- package/dist/engine/modules/tools/channelMemberTool.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelMemberTool.js +73 -0
- package/dist/engine/modules/tools/channelMemberTool.js.map +1 -0
- package/dist/engine/modules/tools/channelMemberTool.spec.d.ts +2 -0
- package/dist/engine/modules/tools/channelMemberTool.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelMemberTool.spec.js +56 -0
- package/dist/engine/modules/tools/channelMemberTool.spec.js.map +1 -0
- package/dist/engine/modules/tools/channelSendTool.d.ts +4 -0
- package/dist/engine/modules/tools/channelSendTool.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelSendTool.js +63 -0
- package/dist/engine/modules/tools/channelSendTool.js.map +1 -0
- package/dist/engine/modules/tools/channelSendTool.spec.d.ts +2 -0
- package/dist/engine/modules/tools/channelSendTool.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/channelSendTool.spec.js +58 -0
- package/dist/engine/modules/tools/channelSendTool.spec.js.map +1 -0
- package/dist/engine/modules/tools/heartbeat.d.ts +0 -1
- package/dist/engine/modules/tools/heartbeat.d.ts.map +1 -1
- package/dist/engine/modules/tools/heartbeat.js +0 -37
- package/dist/engine/modules/tools/heartbeat.js.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.d.ts.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.js +10 -0
- package/dist/engine/modules/tools/permanentAgentToolBuild.js.map +1 -1
- package/dist/engine/modules/tools/permanentAgentToolBuild.spec.js +27 -0
- package/dist/engine/modules/tools/permanentAgentToolBuild.spec.js.map +1 -1
- package/dist/engine/modules/tools/permissionRequestRegistry.d.ts +13 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.d.ts.map +1 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.js +51 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.js.map +1 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.spec.d.ts +2 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.spec.js +47 -0
- package/dist/engine/modules/tools/permissionRequestRegistry.spec.js.map +1 -0
- package/dist/engine/modules/tools/permissions.d.ts.map +1 -1
- package/dist/engine/modules/tools/permissions.js +86 -16
- package/dist/engine/modules/tools/permissions.js.map +1 -1
- package/dist/engine/modules/tools/permissions.spec.d.ts +2 -0
- package/dist/engine/modules/tools/permissions.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/permissions.spec.js +244 -0
- package/dist/engine/modules/tools/permissions.spec.js.map +1 -0
- package/dist/engine/modules/tools/topologyToolBuild.d.ts +10 -0
- package/dist/engine/modules/tools/topologyToolBuild.d.ts.map +1 -0
- package/dist/engine/modules/tools/topologyToolBuild.js +157 -0
- package/dist/engine/modules/tools/topologyToolBuild.js.map +1 -0
- package/dist/engine/modules/tools/topologyToolBuild.spec.d.ts +2 -0
- package/dist/engine/modules/tools/topologyToolBuild.spec.d.ts.map +1 -0
- package/dist/engine/modules/tools/topologyToolBuild.spec.js +264 -0
- package/dist/engine/modules/tools/topologyToolBuild.spec.js.map +1 -0
- package/dist/engine/modules/tools/types.d.ts +2 -0
- package/dist/engine/modules/tools/types.d.ts.map +1 -1
- package/dist/engine/permissions/permissionApply.d.ts.map +1 -1
- package/dist/engine/permissions/permissionApply.js +3 -1
- package/dist/engine/permissions/permissionApply.js.map +1 -1
- package/dist/engine/permissions/permissionApply.spec.js +17 -14
- package/dist/engine/permissions/permissionApply.spec.js.map +1 -1
- package/dist/engine/permissions/permissionBuildCronSession.d.ts +7 -0
- package/dist/engine/permissions/permissionBuildCronSession.d.ts.map +1 -0
- package/dist/engine/permissions/permissionBuildCronSession.js +18 -0
- package/dist/engine/permissions/permissionBuildCronSession.js.map +1 -0
- package/dist/engine/permissions/permissionBuildCronSession.spec.d.ts +2 -0
- package/dist/engine/permissions/permissionBuildCronSession.spec.d.ts.map +1 -0
- package/dist/engine/permissions/permissionBuildCronSession.spec.js +27 -0
- package/dist/engine/permissions/permissionBuildCronSession.spec.js.map +1 -0
- package/dist/engine/permissions/permissionBuildDefault.d.ts.map +1 -1
- package/dist/engine/permissions/permissionBuildDefault.js +1 -2
- package/dist/engine/permissions/permissionBuildDefault.js.map +1 -1
- package/dist/engine/skills/skillListUser.d.ts +8 -0
- package/dist/engine/skills/skillListUser.d.ts.map +1 -0
- package/dist/engine/skills/skillListUser.js +31 -0
- package/dist/engine/skills/skillListUser.js.map +1 -0
- package/dist/engine/skills/skillListUser.spec.d.ts +2 -0
- package/dist/engine/skills/skillListUser.spec.d.ts.map +1 -0
- package/dist/engine/skills/skillListUser.spec.js +38 -0
- package/dist/engine/skills/skillListUser.spec.js.map +1 -0
- package/dist/engine/skills/skillResolve.js +3 -0
- package/dist/engine/skills/skillResolve.js.map +1 -1
- package/dist/engine/skills/skillTypes.d.ts +4 -1
- package/dist/engine/skills/skillTypes.d.ts.map +1 -1
- package/dist/main.js +35 -0
- package/dist/main.js.map +1 -1
- package/dist/paths.d.ts +1 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +1 -1
- package/dist/paths.js.map +1 -1
- package/dist/plugins/telegram/connector.d.ts.map +1 -1
- package/dist/plugins/telegram/connector.js +6 -11
- package/dist/plugins/telegram/connector.js.map +1 -1
- package/dist/plugins/telegram/connector.spec.js +10 -2
- package/dist/plugins/telegram/connector.spec.js.map +1 -1
- package/dist/plugins/whatsapp/connector.d.ts.map +1 -1
- package/dist/plugins/whatsapp/connector.js +6 -10
- package/dist/plugins/whatsapp/connector.js.map +1 -1
- package/dist/prompts/ACTORS.md +12 -4
- package/dist/prompts/CRON.md +8 -0
- package/dist/prompts/MEMORY.md +0 -1
- package/dist/prompts/PERMISSIONS.md +5 -4
- package/dist/prompts/SYSTEM.md +33 -27
- package/dist/skills/skills/scheduling/SKILL.md +2 -2
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentPermanentList.js","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPermanentList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAIzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc;IACrD,IAAI,OAAO,GAAwD,EAAE,CAAC;IACtE,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,IAAI,UAAU,GAAoD,IAAI,CAAC;QACvE,IAAI,KAAK,GAA+C,IAAI,CAAC;QAC7D,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxD,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC5B,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC1C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE;gBAC5C,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9E;YACD,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
1
|
+
{"version":3,"file":"agentPermanentList.js","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPermanentList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAIzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc;IACrD,IAAI,OAAO,GAAwD,EAAE,CAAC;IACtE,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,IAAI,UAAU,GAAoD,IAAI,CAAC;QACvE,IAAI,KAAK,GAA+C,IAAI,CAAC;QAC7D,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxD,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7D,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,OAAO;YACP,UAAU,EAAE;gBACV,GAAG,UAAU;gBACb,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC5B,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC1C,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE;gBAC5C,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9E;YACD,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ensures the default prompt files (SOUL, USER,
|
|
2
|
+
* Ensures the default prompt files (SOUL, USER, AGENTS, TOOLS, MEMORY) exist on disk.
|
|
3
3
|
* Expects: caller wants bundled defaults written when missing.
|
|
4
4
|
*/
|
|
5
5
|
export declare function agentPromptFilesEnsure(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentPromptFilesEnsure.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPromptFilesEnsure.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agentPromptFilesEnsure.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPromptFilesEnsure.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5D"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { DEFAULT_AGENTS_PATH,
|
|
3
|
+
import { DEFAULT_AGENTS_PATH, DEFAULT_MEMORY_PATH, DEFAULT_SOUL_PATH, DEFAULT_TOOLS_PATH, DEFAULT_USER_PATH } from "../../../paths.js";
|
|
4
4
|
import { agentPromptBundledRead } from "./agentPromptBundledRead.js";
|
|
5
5
|
/**
|
|
6
|
-
* Ensures the default prompt files (SOUL, USER,
|
|
6
|
+
* Ensures the default prompt files (SOUL, USER, AGENTS, TOOLS, MEMORY) exist on disk.
|
|
7
7
|
* Expects: caller wants bundled defaults written when missing.
|
|
8
8
|
*/
|
|
9
9
|
export async function agentPromptFilesEnsure() {
|
|
10
10
|
await promptFileEnsure(DEFAULT_SOUL_PATH, "SOUL.md");
|
|
11
11
|
await promptFileEnsure(DEFAULT_USER_PATH, "USER.md");
|
|
12
|
-
await promptFileEnsure(DEFAULT_ACTORS_PATH, "ACTORS.md");
|
|
13
12
|
await promptFileEnsure(DEFAULT_AGENTS_PATH, "AGENTS.md");
|
|
14
13
|
await promptFileEnsure(DEFAULT_TOOLS_PATH, "TOOLS.md");
|
|
15
14
|
await promptFileEnsure(DEFAULT_MEMORY_PATH, "MEMORY.md");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentPromptFilesEnsure.js","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPromptFilesEnsure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"agentPromptFilesEnsure.js","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentPromptFilesEnsure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,gBAAgB,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IACvD,MAAM,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,WAAmB;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context, ToolCall } from "@mariozechner/pi-ai";
|
|
2
|
-
import type { ConnectorMessage, FileReference, MessageContext,
|
|
2
|
+
import type { ConnectorMessage, FileReference, MessageContext, Signal, SessionPermissions, ToolExecutionResult } from "@/types";
|
|
3
3
|
import type { AgentDescriptor } from "./agentDescriptorTypes.js";
|
|
4
4
|
export type AgentMessage = {
|
|
5
5
|
id: string;
|
|
@@ -78,10 +78,6 @@ export type AgentInboxItem = {
|
|
|
78
78
|
type: "reset";
|
|
79
79
|
message?: string;
|
|
80
80
|
context?: MessageContext;
|
|
81
|
-
} | {
|
|
82
|
-
type: "permission";
|
|
83
|
-
decision: PermissionDecision;
|
|
84
|
-
context: MessageContext;
|
|
85
81
|
} | {
|
|
86
82
|
type: "restore";
|
|
87
83
|
};
|
|
@@ -100,9 +96,6 @@ export type AgentInboxReset = Extract<AgentInboxItem, {
|
|
|
100
96
|
export type AgentInboxRestore = Extract<AgentInboxItem, {
|
|
101
97
|
type: "restore";
|
|
102
98
|
}>;
|
|
103
|
-
export type AgentInboxPermission = Extract<AgentInboxItem, {
|
|
104
|
-
type: "permission";
|
|
105
|
-
}>;
|
|
106
99
|
export type AgentInboxResult = {
|
|
107
100
|
type: "message";
|
|
108
101
|
responseText: string | null;
|
|
@@ -119,9 +112,6 @@ export type AgentInboxResult = {
|
|
|
119
112
|
} | {
|
|
120
113
|
type: "restore";
|
|
121
114
|
ok: boolean;
|
|
122
|
-
} | {
|
|
123
|
-
type: "permission";
|
|
124
|
-
ok: boolean;
|
|
125
115
|
};
|
|
126
116
|
export type AgentInboxCompletion = {
|
|
127
117
|
resolve: (result: AgentInboxResult) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"agentTypes.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/ops/agentTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_systemAgents.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/system/_systemAgents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,
|
|
1
|
+
{"version":3,"file":"_systemAgents.d.ts","sourceRoot":"","sources":["../../../../sources/engine/agents/system/_systemAgents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAgBzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_systemAgents.js","sourceRoot":"","sources":["../../../../sources/engine/agents/system/_systemAgents.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D;QACE,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,cAAc;QAC1B,mBAAmB,EAAE,KAAK;KAC3B;IACD;QACE,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,cAAc;QAC1B,mBAAmB,EAAE,IAAI;KAC1B;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"_systemAgents.js","sourceRoot":"","sources":["../../../../sources/engine/agents/system/_systemAgents.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAqC;IAC7D;QACE,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,cAAc;QAC1B,mBAAmB,EAAE,KAAK;KAC3B;IACD;QACE,GAAG,EAAE,MAAM;QACX,UAAU,EAAE,SAAS;QACrB,mBAAmB,EAAE,KAAK;KAC3B;IACD;QACE,GAAG,EAAE,WAAW;QAChB,UAAU,EAAE,cAAc;QAC1B,mBAAmB,EAAE,IAAI;KAC1B;CACF,CAAC"}
|
|
@@ -7,6 +7,12 @@ describe("systemAgentPromptResolve", () => {
|
|
|
7
7
|
expect(heartbeat?.systemPrompt.length).toBeGreaterThan(0);
|
|
8
8
|
expect(heartbeat?.replaceSystemPrompt).toBe(false);
|
|
9
9
|
});
|
|
10
|
+
it("resolves cron prompt without replacing base system prompt", async () => {
|
|
11
|
+
const cron = await systemAgentPromptResolve("cron");
|
|
12
|
+
expect(cron?.tag).toBe("cron");
|
|
13
|
+
expect(cron?.systemPrompt.length).toBeGreaterThan(0);
|
|
14
|
+
expect(cron?.replaceSystemPrompt).toBe(false);
|
|
15
|
+
});
|
|
10
16
|
it("resolves architect prompt with full prompt replacement enabled", async () => {
|
|
11
17
|
const architect = await systemAgentPromptResolve("architect");
|
|
12
18
|
expect(architect?.tag).toBe("architect");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"systemAgentPromptResolve.spec.js","sourceRoot":"","sources":["../../../../sources/engine/agents/system/systemAgentPromptResolve.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"systemAgentPromptResolve.spec.js","sourceRoot":"","sources":["../../../../sources/engine/agents/system/systemAgentPromptResolve.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,MAAM,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ChannelSignalData } from "@/types";
|
|
2
|
+
/**
|
|
3
|
+
* Formats a channel signal payload into a readable system message for agents.
|
|
4
|
+
* Expects: data fields have already been validated.
|
|
5
|
+
*/
|
|
6
|
+
export declare function channelMessageBuild(data: ChannelSignalData): string;
|
|
7
|
+
/**
|
|
8
|
+
* Safely parses channel signal data from a generic signal payload.
|
|
9
|
+
* Returns: null when payload shape does not match ChannelSignalData.
|
|
10
|
+
*/
|
|
11
|
+
export declare function channelSignalDataParse(data: unknown): ChannelSignalData | null;
|
|
12
|
+
//# sourceMappingURL=channelMessageBuild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelMessageBuild.d.ts","sourceRoot":"","sources":["../../../sources/engine/channels/channelMessageBuild.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAenE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAgE9E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats a channel signal payload into a readable system message for agents.
|
|
3
|
+
* Expects: data fields have already been validated.
|
|
4
|
+
*/
|
|
5
|
+
export function channelMessageBuild(data) {
|
|
6
|
+
const mentionText = data.mentions.length > 0
|
|
7
|
+
? data.mentions.map((mention) => `@${mention}`).join(", ")
|
|
8
|
+
: "none";
|
|
9
|
+
const lines = [
|
|
10
|
+
`[Channel: #${data.channelName}] @${data.senderUsername}: ${data.text}`,
|
|
11
|
+
`mentions: ${mentionText}`
|
|
12
|
+
];
|
|
13
|
+
const recentHistory = historyContextBuild(data.history, data.messageId);
|
|
14
|
+
if (recentHistory.length > 0) {
|
|
15
|
+
lines.push("recent:");
|
|
16
|
+
lines.push(...recentHistory.map((line) => `- ${line}`));
|
|
17
|
+
}
|
|
18
|
+
return lines.join("\n");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Safely parses channel signal data from a generic signal payload.
|
|
22
|
+
* Returns: null when payload shape does not match ChannelSignalData.
|
|
23
|
+
*/
|
|
24
|
+
export function channelSignalDataParse(data) {
|
|
25
|
+
if (!isRecord(data)) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
if (typeof data.channelName !== "string" ||
|
|
29
|
+
typeof data.messageId !== "string" ||
|
|
30
|
+
typeof data.senderUsername !== "string" ||
|
|
31
|
+
typeof data.text !== "string" ||
|
|
32
|
+
typeof data.createdAt !== "number" ||
|
|
33
|
+
!Array.isArray(data.mentions) ||
|
|
34
|
+
!Array.isArray(data.history)) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const mentions = [];
|
|
38
|
+
for (const mention of data.mentions) {
|
|
39
|
+
if (typeof mention !== "string") {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
mentions.push(mention);
|
|
43
|
+
}
|
|
44
|
+
const history = [];
|
|
45
|
+
for (const entry of data.history) {
|
|
46
|
+
if (!isRecord(entry)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
if (typeof entry.id !== "string" ||
|
|
50
|
+
typeof entry.channelName !== "string" ||
|
|
51
|
+
typeof entry.senderUsername !== "string" ||
|
|
52
|
+
typeof entry.text !== "string" ||
|
|
53
|
+
typeof entry.createdAt !== "number" ||
|
|
54
|
+
!Array.isArray(entry.mentions)) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const entryMentions = [];
|
|
58
|
+
for (const mention of entry.mentions) {
|
|
59
|
+
if (typeof mention !== "string") {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
entryMentions.push(mention);
|
|
63
|
+
}
|
|
64
|
+
history.push({
|
|
65
|
+
id: entry.id,
|
|
66
|
+
channelName: entry.channelName,
|
|
67
|
+
senderUsername: entry.senderUsername,
|
|
68
|
+
text: entry.text,
|
|
69
|
+
mentions: entryMentions,
|
|
70
|
+
createdAt: entry.createdAt
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
channelName: data.channelName,
|
|
75
|
+
messageId: data.messageId,
|
|
76
|
+
senderUsername: data.senderUsername,
|
|
77
|
+
text: data.text,
|
|
78
|
+
mentions,
|
|
79
|
+
createdAt: data.createdAt,
|
|
80
|
+
history
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function historyContextBuild(history, currentMessageId) {
|
|
84
|
+
return history
|
|
85
|
+
.filter((entry) => entry.id !== currentMessageId)
|
|
86
|
+
.slice(-5)
|
|
87
|
+
.map((entry) => `@${entry.senderUsername}: ${entry.text}`);
|
|
88
|
+
}
|
|
89
|
+
function isRecord(value) {
|
|
90
|
+
return typeof value === "object" && value !== null;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=channelMessageBuild.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelMessageBuild.js","sourceRoot":"","sources":["../../../sources/engine/channels/channelMessageBuild.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelMessageBuild.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/channels/channelMessageBuild.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { channelMessageBuild, channelSignalDataParse } from "./channelMessageBuild.js";
|
|
3
|
+
describe("channelMessageBuild", () => {
|
|
4
|
+
it("formats channel messages with mentions and history", () => {
|
|
5
|
+
const text = channelMessageBuild({
|
|
6
|
+
channelName: "dev",
|
|
7
|
+
messageId: "m3",
|
|
8
|
+
senderUsername: "alice",
|
|
9
|
+
text: "check this out",
|
|
10
|
+
mentions: ["bob", "carol"],
|
|
11
|
+
createdAt: 3,
|
|
12
|
+
history: [
|
|
13
|
+
{
|
|
14
|
+
id: "m1",
|
|
15
|
+
channelName: "dev",
|
|
16
|
+
senderUsername: "bob",
|
|
17
|
+
text: "hi",
|
|
18
|
+
mentions: [],
|
|
19
|
+
createdAt: 1
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: "m2",
|
|
23
|
+
channelName: "dev",
|
|
24
|
+
senderUsername: "carol",
|
|
25
|
+
text: "hello",
|
|
26
|
+
mentions: ["alice"],
|
|
27
|
+
createdAt: 2
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "m3",
|
|
31
|
+
channelName: "dev",
|
|
32
|
+
senderUsername: "alice",
|
|
33
|
+
text: "check this out",
|
|
34
|
+
mentions: ["bob", "carol"],
|
|
35
|
+
createdAt: 3
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
});
|
|
39
|
+
expect(text).toContain("[Channel: #dev] @alice: check this out");
|
|
40
|
+
expect(text).toContain("mentions: @bob, @carol");
|
|
41
|
+
expect(text).toContain("recent:");
|
|
42
|
+
expect(text).toContain("- @bob: hi");
|
|
43
|
+
expect(text).toContain("- @carol: hello");
|
|
44
|
+
expect(text).not.toContain("- @alice: check this out");
|
|
45
|
+
});
|
|
46
|
+
it("returns null when channel signal payload shape is invalid", () => {
|
|
47
|
+
expect(channelSignalDataParse(null)).toBeNull();
|
|
48
|
+
expect(channelSignalDataParse({ channelName: "dev" })).toBeNull();
|
|
49
|
+
expect(channelSignalDataParse({
|
|
50
|
+
channelName: "dev",
|
|
51
|
+
messageId: "m1",
|
|
52
|
+
senderUsername: "alice",
|
|
53
|
+
text: "hello",
|
|
54
|
+
mentions: [],
|
|
55
|
+
createdAt: Date.now(),
|
|
56
|
+
history: []
|
|
57
|
+
})).not.toBeNull();
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=channelMessageBuild.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelMessageBuild.spec.js","sourceRoot":"","sources":["../../../sources/engine/channels/channelMessageBuild.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,OAAO;YACvB,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YAC1B,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE;gBACP;oBACE,EAAE,EAAE,IAAI;oBACR,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,KAAK;oBACrB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,EAAE;oBACZ,SAAS,EAAE,CAAC;iBACb;gBACD;oBACE,EAAE,EAAE,IAAI;oBACR,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,OAAO;oBACvB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,CAAC,OAAO,CAAC;oBACnB,SAAS,EAAE,CAAC;iBACb;gBACD;oBACE,EAAE,EAAE,IAAI;oBACR,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,OAAO;oBACvB,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC1B,SAAS,EAAE,CAAC;iBACb;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,CAAC,sBAAsB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClE,MAAM,CACJ,sBAAsB,CAAC;YACrB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,IAAI;YACf,cAAc,EAAE,OAAO;YACvB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO,EAAE,EAAE;SACZ,CAAC,CACH,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Channel, ChannelMessage } from "@/types";
|
|
2
|
+
/**
|
|
3
|
+
* Normalizes and validates a channel name used for disk paths and signal keys.
|
|
4
|
+
* Expects: input name contains only a-z, 0-9, dot, underscore, or dash.
|
|
5
|
+
*/
|
|
6
|
+
export declare function channelNameNormalize(name: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Loads a channel definition from `<baseDir>/<name>/channel.json`.
|
|
9
|
+
* Returns: null when the channel file does not exist.
|
|
10
|
+
*/
|
|
11
|
+
export declare function channelLoad(baseDir: string, name: string): Promise<Channel | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Persists a channel definition to `<baseDir>/<name>/channel.json`.
|
|
14
|
+
* Expects: channel.name is a valid normalized channel name.
|
|
15
|
+
*/
|
|
16
|
+
export declare function channelSave(baseDir: string, channel: Channel): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Appends a channel message to `<baseDir>/<name>/history.jsonl`.
|
|
19
|
+
* Expects: message.channelName matches the target channel name.
|
|
20
|
+
*/
|
|
21
|
+
export declare function channelAppendMessage(baseDir: string, name: string, message: ChannelMessage): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Reads recent channel history from `<baseDir>/<name>/history.jsonl`.
|
|
24
|
+
* Returns: an empty array when no history file exists.
|
|
25
|
+
*/
|
|
26
|
+
export declare function channelReadHistory(baseDir: string, name: string, limit?: number): Promise<ChannelMessage[]>;
|
|
27
|
+
//# sourceMappingURL=channelStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelStore.d.ts","sourceRoot":"","sources":["../../../sources/engine/channels/channelStore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAmCvD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAiBzB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CASlF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,SAAK,GACT,OAAO,CAAC,cAAc,EAAE,CAAC,CAmC3B"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { atomicWrite } from "../../util/atomicWrite.js";
|
|
5
|
+
const CHANNEL_NAME_PATTERN = /^[a-z0-9][a-z0-9_-]{0,79}$/;
|
|
6
|
+
const channelMessageSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
id: z.string().min(1),
|
|
9
|
+
channelName: z.string().min(1),
|
|
10
|
+
senderUsername: z.string().min(1),
|
|
11
|
+
text: z.string(),
|
|
12
|
+
mentions: z.array(z.string().min(1)),
|
|
13
|
+
createdAt: z.number().int().nonnegative()
|
|
14
|
+
})
|
|
15
|
+
.strict();
|
|
16
|
+
const channelSchema = z
|
|
17
|
+
.object({
|
|
18
|
+
id: z.string().min(1),
|
|
19
|
+
name: z.string().min(1),
|
|
20
|
+
leader: z.string().min(1),
|
|
21
|
+
members: z.array(z
|
|
22
|
+
.object({
|
|
23
|
+
agentId: z.string().min(1),
|
|
24
|
+
username: z.string().min(1),
|
|
25
|
+
joinedAt: z.number().int().nonnegative()
|
|
26
|
+
})
|
|
27
|
+
.strict()),
|
|
28
|
+
createdAt: z.number().int().nonnegative(),
|
|
29
|
+
updatedAt: z.number().int().nonnegative()
|
|
30
|
+
})
|
|
31
|
+
.strict();
|
|
32
|
+
/**
|
|
33
|
+
* Normalizes and validates a channel name used for disk paths and signal keys.
|
|
34
|
+
* Expects: input name contains only a-z, 0-9, dot, underscore, or dash.
|
|
35
|
+
*/
|
|
36
|
+
export function channelNameNormalize(name) {
|
|
37
|
+
const normalized = name.trim().toLowerCase();
|
|
38
|
+
if (!CHANNEL_NAME_PATTERN.test(normalized)) {
|
|
39
|
+
throw new Error("Channel name must be Slack-style: lowercase letters, numbers, hyphen, underscore (max 80 chars).");
|
|
40
|
+
}
|
|
41
|
+
return normalized;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Loads a channel definition from `<baseDir>/<name>/channel.json`.
|
|
45
|
+
* Returns: null when the channel file does not exist.
|
|
46
|
+
*/
|
|
47
|
+
export async function channelLoad(baseDir, name) {
|
|
48
|
+
const channelName = channelNameNormalize(name);
|
|
49
|
+
const filePath = channelFilePathBuild(baseDir, channelName);
|
|
50
|
+
let raw = "";
|
|
51
|
+
try {
|
|
52
|
+
raw = await fs.readFile(filePath, "utf8");
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
if (error.code === "ENOENT") {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
const parsed = channelSchema.parse(JSON.parse(raw));
|
|
61
|
+
if (parsed.name !== channelName) {
|
|
62
|
+
throw new Error(`Channel file name mismatch: expected "${channelName}".`);
|
|
63
|
+
}
|
|
64
|
+
return parsed;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Persists a channel definition to `<baseDir>/<name>/channel.json`.
|
|
68
|
+
* Expects: channel.name is a valid normalized channel name.
|
|
69
|
+
*/
|
|
70
|
+
export async function channelSave(baseDir, channel) {
|
|
71
|
+
const channelName = channelNameNormalize(channel.name);
|
|
72
|
+
const payload = channelSchema.parse({ ...channel, name: channelName });
|
|
73
|
+
const directory = channelDirectoryPathBuild(baseDir, channelName);
|
|
74
|
+
await fs.mkdir(directory, { recursive: true });
|
|
75
|
+
await atomicWrite(channelFilePathBuild(baseDir, channelName), `${JSON.stringify(payload, null, 2)}\n`);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Appends a channel message to `<baseDir>/<name>/history.jsonl`.
|
|
79
|
+
* Expects: message.channelName matches the target channel name.
|
|
80
|
+
*/
|
|
81
|
+
export async function channelAppendMessage(baseDir, name, message) {
|
|
82
|
+
const channelName = channelNameNormalize(name);
|
|
83
|
+
const payload = channelMessageSchema.parse({
|
|
84
|
+
...message,
|
|
85
|
+
channelName
|
|
86
|
+
});
|
|
87
|
+
const directory = channelDirectoryPathBuild(baseDir, channelName);
|
|
88
|
+
await fs.mkdir(directory, { recursive: true });
|
|
89
|
+
await fs.appendFile(channelHistoryPathBuild(baseDir, channelName), `${JSON.stringify(payload)}\n`, "utf8");
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Reads recent channel history from `<baseDir>/<name>/history.jsonl`.
|
|
93
|
+
* Returns: an empty array when no history file exists.
|
|
94
|
+
*/
|
|
95
|
+
export async function channelReadHistory(baseDir, name, limit = 50) {
|
|
96
|
+
const channelName = channelNameNormalize(name);
|
|
97
|
+
const normalizedLimit = channelLimitNormalize(limit);
|
|
98
|
+
const filePath = channelHistoryPathBuild(baseDir, channelName);
|
|
99
|
+
let raw = "";
|
|
100
|
+
try {
|
|
101
|
+
raw = await fs.readFile(filePath, "utf8");
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error.code === "ENOENT") {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
const lines = raw.split("\n").filter((line) => line.trim().length > 0);
|
|
110
|
+
if (lines.length === 0) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
const start = Math.max(0, lines.length - normalizedLimit);
|
|
114
|
+
const recent = lines.slice(start);
|
|
115
|
+
const result = [];
|
|
116
|
+
for (const line of recent) {
|
|
117
|
+
let rawValue = null;
|
|
118
|
+
try {
|
|
119
|
+
rawValue = JSON.parse(line);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const parsed = channelMessageSchema.safeParse(rawValue);
|
|
125
|
+
if (!parsed.success) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
result.push(parsed.data);
|
|
129
|
+
}
|
|
130
|
+
return result;
|
|
131
|
+
}
|
|
132
|
+
function channelDirectoryPathBuild(baseDir, name) {
|
|
133
|
+
return path.join(baseDir, name);
|
|
134
|
+
}
|
|
135
|
+
function channelFilePathBuild(baseDir, name) {
|
|
136
|
+
return path.join(channelDirectoryPathBuild(baseDir, name), "channel.json");
|
|
137
|
+
}
|
|
138
|
+
function channelHistoryPathBuild(baseDir, name) {
|
|
139
|
+
return path.join(channelDirectoryPathBuild(baseDir, name), "history.jsonl");
|
|
140
|
+
}
|
|
141
|
+
function channelLimitNormalize(limit) {
|
|
142
|
+
if (!Number.isFinite(limit)) {
|
|
143
|
+
return 50;
|
|
144
|
+
}
|
|
145
|
+
return Math.min(500, Math.max(1, Math.floor(limit)));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=channelStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelStore.js","sourceRoot":"","sources":["../../../sources/engine/channels/channelStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channelStore.spec.d.ts","sourceRoot":"","sources":["../../../sources/engine/channels/channelStore.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
import { channelAppendMessage, channelLoad, channelNameNormalize, channelReadHistory, channelSave } from "./channelStore.js";
|
|
6
|
+
describe("channelStore", () => {
|
|
7
|
+
it("saves and loads channel definitions", async () => {
|
|
8
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-channel-store-"));
|
|
9
|
+
try {
|
|
10
|
+
const channel = {
|
|
11
|
+
id: "channel-1",
|
|
12
|
+
name: "dev",
|
|
13
|
+
leader: "agent-leader",
|
|
14
|
+
members: [
|
|
15
|
+
{ agentId: "agent-a", username: "alice", joinedAt: 1 }
|
|
16
|
+
],
|
|
17
|
+
createdAt: 1,
|
|
18
|
+
updatedAt: 2
|
|
19
|
+
};
|
|
20
|
+
await channelSave(dir, channel);
|
|
21
|
+
const loaded = await channelLoad(dir, "dev");
|
|
22
|
+
expect(loaded).toEqual(channel);
|
|
23
|
+
}
|
|
24
|
+
finally {
|
|
25
|
+
await rm(dir, { recursive: true, force: true });
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
it("appends and reads channel message history with limits", async () => {
|
|
29
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-channel-store-"));
|
|
30
|
+
try {
|
|
31
|
+
const channel = {
|
|
32
|
+
id: "channel-1",
|
|
33
|
+
name: "dev",
|
|
34
|
+
leader: "agent-leader",
|
|
35
|
+
members: [],
|
|
36
|
+
createdAt: 1,
|
|
37
|
+
updatedAt: 1
|
|
38
|
+
};
|
|
39
|
+
await channelSave(dir, channel);
|
|
40
|
+
await channelAppendMessage(dir, "dev", {
|
|
41
|
+
id: "m1",
|
|
42
|
+
channelName: "dev",
|
|
43
|
+
senderUsername: "alice",
|
|
44
|
+
text: "hello",
|
|
45
|
+
mentions: [],
|
|
46
|
+
createdAt: 10
|
|
47
|
+
});
|
|
48
|
+
await channelAppendMessage(dir, "dev", {
|
|
49
|
+
id: "m2",
|
|
50
|
+
channelName: "dev",
|
|
51
|
+
senderUsername: "bob",
|
|
52
|
+
text: "hi",
|
|
53
|
+
mentions: ["alice"],
|
|
54
|
+
createdAt: 20
|
|
55
|
+
});
|
|
56
|
+
const full = await channelReadHistory(dir, "dev");
|
|
57
|
+
const limited = await channelReadHistory(dir, "dev", 1);
|
|
58
|
+
expect(full).toHaveLength(2);
|
|
59
|
+
expect(full[0]?.id).toBe("m1");
|
|
60
|
+
expect(full[1]?.id).toBe("m2");
|
|
61
|
+
expect(limited).toHaveLength(1);
|
|
62
|
+
expect(limited[0]?.id).toBe("m2");
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
await rm(dir, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
it("returns null or empty history for missing channels", async () => {
|
|
69
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "daycare-channel-store-"));
|
|
70
|
+
try {
|
|
71
|
+
expect(await channelLoad(dir, "dev")).toBeNull();
|
|
72
|
+
expect(await channelReadHistory(dir, "dev")).toEqual([]);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
await rm(dir, { recursive: true, force: true });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
it("accepts slack-style channel names", () => {
|
|
79
|
+
expect(channelNameNormalize("dev-team")).toBe("dev-team");
|
|
80
|
+
expect(channelNameNormalize("ops_team_1")).toBe("ops_team_1");
|
|
81
|
+
expect(channelNameNormalize("Release_2026")).toBe("release_2026");
|
|
82
|
+
});
|
|
83
|
+
it("rejects non slack-style channel names", () => {
|
|
84
|
+
expect(() => channelNameNormalize("dev.team")).toThrow("Slack-style");
|
|
85
|
+
expect(() => channelNameNormalize("dev team")).toThrow("Slack-style");
|
|
86
|
+
expect(() => channelNameNormalize("")).toThrow("Slack-style");
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=channelStore.spec.js.map
|