@starlight-ai/discord-waifus 1.0.8 → 1.1.0

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.
@@ -145,9 +145,9 @@ async function stopCommand(dataRoot, options = {}) {
145
145
  return 0;
146
146
  }
147
147
  process.kill(pidState.pid, "SIGTERM");
148
- const stopped = await waitForExit(pidState.pid, 5_000);
148
+ const stopped = await waitForExit(pidState.pid, 10_000);
149
149
  if (!stopped) {
150
- console.error(`pid ${pidState.pid} did not stop within 5s`);
150
+ console.error(`pid ${pidState.pid} did not stop within 10s`);
151
151
  return 1;
152
152
  }
153
153
  await rm(appDataPath(dataRoot, "pid.json"), { force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC9H,OAAO,EAAa,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAiB;IAChD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5C,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,MAAM;YACT,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,KAAK,KAAK;YACR,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/B,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACxC,KAAK,QAAQ;YACX,OAAO,aAAa,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiB;IAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACtD,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7F,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;IAcV,aAAa;CAChB,CAAC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAAiB,EACjB,QAAgB,EAChB,IAAqB;IAErB,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;QACjE,OAAO,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAiB,EAAE,QAAgB;IACrE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,sDAAsD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE;QAClH,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,wDAAwD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,8CAA8C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IACtC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAiB,EACjB,QAAgB,EAChB,IAAqB;IAErB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,KAAK,EAAE,MAAsB,EAAE,EAAE;QAChD,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,2BAA2B,CAAC,CAAC;QAC3D,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAElC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,QAAgB;IAC3D,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9C,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,UAA+B,EAAE;IAC5E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,GAAG,0BAA0B,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,8BAA8B,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,CAAC,GAAG,CACT,IAAI,CAAC,SAAS,CACZ;QACE,OAAO;QACP,GAAG,EAAE,QAAQ,EAAE,GAAG;QAClB,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QAC7D,QAAQ;QACR,OAAO;KACR,EACD,IAAI,EACJ,CAAC,CACF,CACF,CAAC;IACF,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAgB;IAC3C,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,QAAQ,CACzC,qBAAqB,EACrB,6BAA6B,EAC7B,6BAA6B,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAClF,CAAC;IACF,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,QAAQ,CACxC,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,CAAC,KAAK,CAAC,yBAAyB,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAC3F,CAAC;IACF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG;QACb,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;YAC9B,EAAE,EAAE,SAAS,IAAI,EAAE;SACpB;QACD,QAAQ;QACR,MAAM;QACN,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACxD,OAAO,EAAE;YACP,sBAAsB,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,KAAK,SAAS;YACrE,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM;YACxC,QAAQ,EAAE;gBACR,8EAA8E;gBAC9E,6EAA6E;aAC9E;SACF;KACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAiB,EAAE,QAAgB;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,4CAA4C,QAAQ,+BAA+B,CACpF,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/B,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACvE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC7D,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACpE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;KACtG,CAAC,CAAC;IACH,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,aAAa;IAC1B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;uCAWyB,CAAC,CAAC;IACvC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAiC;IAChF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,SAAiB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,GAAW,EAAE,SAAiB;IACjF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,SAAS,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE,GAAG,KAAK,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAc;IACnC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
@@ -1,2 +1,6 @@
1
1
  export declare function splitWaifuReply(content: string): string[];
2
+ export declare function planWaifuReplyChunks(chunks: string[]): {
3
+ immediateChunks: string[];
4
+ cachedChunks: string[];
5
+ };
2
6
  export declare function typingDelayMs(chunk: string): number;
@@ -7,10 +7,25 @@ export function splitWaifuReply(content) {
7
7
  .map((chunk) => chunk.trim())
8
8
  .filter((chunk) => chunk.length > 0);
9
9
  }
10
+ const IMMEDIATE_CHUNK_LIMIT = 2;
11
+ const SHORT_THIRD_CHUNK_CHAR_LIMIT = 18;
12
+ export function planWaifuReplyChunks(chunks) {
13
+ const immediateLimit = chunks[IMMEDIATE_CHUNK_LIMIT] &&
14
+ characterCount(chunks[IMMEDIATE_CHUNK_LIMIT]) < SHORT_THIRD_CHUNK_CHAR_LIMIT
15
+ ? IMMEDIATE_CHUNK_LIMIT + 1
16
+ : IMMEDIATE_CHUNK_LIMIT;
17
+ return {
18
+ immediateChunks: chunks.slice(0, immediateLimit),
19
+ cachedChunks: chunks.slice(immediateLimit)
20
+ };
21
+ }
10
22
  const MS_PER_CHAR = 30;
11
23
  const MIN_DELAY_MS = 600;
12
24
  const MAX_DELAY_MS = 4500;
13
25
  export function typingDelayMs(chunk) {
14
26
  return Math.min(MAX_DELAY_MS, Math.max(MIN_DELAY_MS, chunk.length * MS_PER_CHAR));
15
27
  }
28
+ function characterCount(value) {
29
+ return Array.from(value).length;
30
+ }
16
31
  //# sourceMappingURL=messageSplit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"messageSplit.js","sourceRoot":"","sources":["../../src/orchestration/messageSplit.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO;SACX,KAAK,CAAC,eAAe,CAAC;SACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;AACpF,CAAC"}
1
+ {"version":3,"file":"messageSplit.js","sourceRoot":"","sources":["../../src/orchestration/messageSplit.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,OAAO;SACX,KAAK,CAAC,eAAe,CAAC;SACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,4BAA4B,GAAG,EAAE,CAAC;AAExC,MAAM,UAAU,oBAAoB,CAAC,MAAgB;IAInD,MAAM,cAAc,GAClB,MAAM,CAAC,qBAAqB,CAAC;QAC7B,cAAc,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,GAAG,4BAA4B;QAC1E,CAAC,CAAC,qBAAqB,GAAG,CAAC;QAC3B,CAAC,CAAC,qBAAqB,CAAC;IAE5B,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC;QAChD,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAClC,CAAC"}
@@ -8,6 +8,7 @@ export type RuntimeOrchestratorOptions = {
8
8
  discord: DiscordGatewayFacade;
9
9
  logger: Logger;
10
10
  maxAutomaticTurns?: number;
11
+ continuationIdleMs?: number;
11
12
  isPaused?: () => boolean;
12
13
  onActiveRunsChange?: (activeRuns: number) => void;
13
14
  createPipeline?: (modelId: string, credentials: PipelineCredentials) => ModelPipeline;
@@ -17,7 +18,9 @@ export declare class RuntimeOrchestrator {
17
18
  private readonly options;
18
19
  private readonly activeRuns;
19
20
  private readonly retriggerTimers;
21
+ private readonly continuationTimers;
20
22
  private readonly maxAutomaticTurns;
23
+ private readonly continuationIdleMs;
21
24
  private readonly createPipeline;
22
25
  private readonly sleep;
23
26
  private readonly recentSelfSentIds;
@@ -26,6 +29,7 @@ export declare class RuntimeOrchestrator {
26
29
  private readonly activeReviewerRuns;
27
30
  private readonly channelRunVersions;
28
31
  private static readonly SELF_SENT_TTL_MS;
32
+ private static readonly CONTINUATION_IDLE_MS;
29
33
  private unsubscribes;
30
34
  constructor(options: RuntimeOrchestratorOptions);
31
35
  start(): Promise<void>;
@@ -51,6 +55,14 @@ export declare class RuntimeOrchestrator {
51
55
  private clearLatestMessages;
52
56
  private applyStageManagerCalls;
53
57
  private scheduleRetrigger;
58
+ private sendCachedContinuationForSelection;
59
+ private sendCachedWaifuContinuation;
60
+ private sendCachedContinuationAfterIdle;
61
+ private cacheWaifuContinuation;
62
+ private clearCachedWaifuContinuation;
63
+ private scheduleContinuationTimer;
64
+ private setContinuationTimer;
65
+ private sendWaifuChunks;
54
66
  private setActivePipeline;
55
67
  private rememberSelfSent;
56
68
  private wasSelfSent;
@@ -68,6 +80,7 @@ export declare class RuntimeOrchestrator {
68
80
  private ensureChannelConfig;
69
81
  private channelHasWaifus;
70
82
  private ensureChannelSession;
83
+ private readChannelSession;
71
84
  private updateSession;
72
85
  private appendOrchestratorHistory;
73
86
  private appendStageManagerHistory;
@@ -2,7 +2,7 @@ import { randomUUID } from "node:crypto";
2
2
  import { readdir } from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { modelVisibleEmojiToken, stripLeakedContextHeader } from "../discord/normalization.js";
5
- import { splitWaifuReply, typingDelayMs } from "./messageSplit.js";
5
+ import { planWaifuReplyChunks, splitWaifuReply, typingDelayMs } from "./messageSplit.js";
6
6
  import { getModel } from "../providers/catalog.js";
7
7
  import { createModelPipeline, ProviderPipelineError } from "../providers/pipelines.js";
8
8
  import { AgentConfigSchema, DiscordBotsFileSchema, GuildEmojisFileSchema, MemoryStoreSchema, OrchestratorHistoryFileSchema, ProviderCredentialsFileSchema, ReviewerHistoryFileSchema, ServerConfigSchema, StageManagerHistoryFileSchema, WaifuConfigSchema, createEmptyRevisionedFile } from "../shared/schemas/domain.js";
@@ -13,7 +13,9 @@ export class RuntimeOrchestrator {
13
13
  options;
14
14
  activeRuns = new Map();
15
15
  retriggerTimers = new Map();
16
+ continuationTimers = new Map();
16
17
  maxAutomaticTurns;
18
+ continuationIdleMs;
17
19
  createPipeline;
18
20
  sleep;
19
21
  recentSelfSentIds = new Map();
@@ -22,10 +24,12 @@ export class RuntimeOrchestrator {
22
24
  activeReviewerRuns = new Map();
23
25
  channelRunVersions = new Map();
24
26
  static SELF_SENT_TTL_MS = 60_000;
27
+ static CONTINUATION_IDLE_MS = 120_000;
25
28
  unsubscribes = [];
26
29
  constructor(options) {
27
30
  this.options = options;
28
31
  this.maxAutomaticTurns = options.maxAutomaticTurns ?? 8;
32
+ this.continuationIdleMs = options.continuationIdleMs ?? RuntimeOrchestrator.CONTINUATION_IDLE_MS;
29
33
  this.createPipeline = options.createPipeline ?? createModelPipeline;
30
34
  this.sleep = options.sleep ?? defaultSleep;
31
35
  }
@@ -60,10 +64,16 @@ export class RuntimeOrchestrator {
60
64
  clearTimeout(timer);
61
65
  }
62
66
  this.retriggerTimers.clear();
67
+ const continuationTimers = [...this.continuationTimers.values()];
68
+ for (const entry of continuationTimers) {
69
+ clearTimeout(entry.timer);
70
+ }
71
+ this.continuationTimers.clear();
63
72
  for (const run of this.activeRuns.values()) {
64
73
  run.controller.abort(new Error("runtime paused"));
65
74
  }
66
75
  await Promise.allSettled([...this.activeRuns.values()].map((run) => run.promise));
76
+ await Promise.allSettled(continuationTimers.map((entry) => this.clearCachedWaifuContinuation(entry.guildId, entry.channelId, "runtime paused")));
67
77
  this.activeRuns.clear();
68
78
  this.options.onActiveRunsChange?.(0);
69
79
  }
@@ -76,6 +86,7 @@ export class RuntimeOrchestrator {
76
86
  if (event.authorBot && this.activeWaifuSendChannels.has(event.channelId)) {
77
87
  return;
78
88
  }
89
+ await this.clearCachedWaifuContinuation(event.guildId, event.channelId, "new Discord activity");
79
90
  if (this.options.isPaused?.()) {
80
91
  this.options.logger.info("Discord message ignored because runtime is paused", {
81
92
  guildId: event.guildId,
@@ -375,22 +386,33 @@ export class RuntimeOrchestrator {
375
386
  });
376
387
  continue;
377
388
  }
378
- if (!waifu.modelId) {
379
- this.options.logger.warn("Orchestrator selected a waifu without a configured model", {
389
+ if (!waifu.botId) {
390
+ this.options.logger.warn("Orchestrator selected a waifu without a linked Discord bot", {
380
391
  guildId,
381
392
  channelId,
382
393
  selectedWaifuId: selected.waifuId
383
394
  });
384
395
  continue;
385
396
  }
386
- if (!waifu.botId) {
387
- this.options.logger.warn("Orchestrator selected a waifu without a linked Discord bot", {
397
+ if (await this.sendCachedContinuationForSelection({
398
+ guildId,
399
+ channelId,
400
+ selectedWaifuId: selected.waifuId,
401
+ sceneDirection: selected.sceneDirection,
402
+ signal
403
+ })) {
404
+ sentCount += 1;
405
+ continue;
406
+ }
407
+ if (!waifu.modelId) {
408
+ this.options.logger.warn("Orchestrator selected a waifu without a configured model", {
388
409
  guildId,
389
410
  channelId,
390
411
  selectedWaifuId: selected.waifuId
391
412
  });
392
413
  continue;
393
414
  }
415
+ await this.clearCachedWaifuContinuation(guildId, channelId, "new waifu generation");
394
416
  await this.setActivePipeline(guildId, channelId, "waifu");
395
417
  const waifuMessages = await this.options.discord.fetchFreshContext({
396
418
  guildId,
@@ -456,6 +478,7 @@ export class RuntimeOrchestrator {
456
478
  waifuId: waifu.id
457
479
  });
458
480
  }
481
+ const plannedChunks = planWaifuReplyChunks(chunks);
459
482
  const replyToMessageId = replyTargetForFreshContext(selected.replyToMessageId, waifuMessages);
460
483
  if (selected.replyToMessageId && !replyToMessageId) {
461
484
  this.options.logger.info("Omitting reply target because it is the latest context message", {
@@ -465,37 +488,26 @@ export class RuntimeOrchestrator {
465
488
  replyToMessageId: selected.replyToMessageId
466
489
  });
467
490
  }
468
- this.activeWaifuSendChannels.add(channelId);
469
- try {
470
- for (let i = 0; i < chunks.length; i++) {
471
- throwIfAborted(signal);
472
- if (i > 0) {
473
- void this.options.discord
474
- .sendTyping({ guildId, channelId, senderBotId: waifu.botId })
475
- .catch(() => undefined);
476
- await this.sleep(typingDelayMs(chunks[i]), signal);
477
- }
478
- const sentResult = await this.options.discord.sendWaifuMessage({
479
- guildId,
480
- channelId,
481
- senderBotId: waifu.botId,
482
- content: chunks[i],
483
- replyToMessageId: i === 0 ? replyToMessageId : undefined,
484
- allowedUserMentionIds: activeAuthorIds
485
- });
486
- this.rememberSelfSent(sentResult.messageId);
487
- this.options.logger.info("Waifu message chunk sent", {
488
- guildId,
489
- channelId,
490
- waifuId: waifu.id,
491
- chunkIndex: i,
492
- chunkCount: chunks.length,
493
- chunkLength: chunks[i].length
494
- });
495
- }
496
- }
497
- finally {
498
- this.activeWaifuSendChannels.delete(channelId);
491
+ await this.sendWaifuChunks({
492
+ guildId,
493
+ channelId,
494
+ waifuId: waifu.id,
495
+ senderBotId: waifu.botId,
496
+ chunks: plannedChunks.immediateChunks,
497
+ totalChunkCount: chunks.length,
498
+ replyToMessageId,
499
+ allowedUserMentionIds: activeAuthorIds,
500
+ signal
501
+ });
502
+ if (plannedChunks.cachedChunks.length > 0) {
503
+ await this.cacheWaifuContinuation({
504
+ guildId,
505
+ channelId,
506
+ waifuId: waifu.id,
507
+ senderBotId: waifu.botId,
508
+ chunks: plannedChunks.cachedChunks,
509
+ allowedUserMentionIds: activeAuthorIds
510
+ });
499
511
  }
500
512
  }
501
513
  finally {
@@ -848,6 +860,164 @@ export class RuntimeOrchestrator {
848
860
  }, bounded * 1000);
849
861
  this.retriggerTimers.set(key, timer);
850
862
  }
863
+ async sendCachedContinuationForSelection(input) {
864
+ if (input.sceneDirection?.trim()) {
865
+ return false;
866
+ }
867
+ const state = await this.readChannelSession(input.guildId, input.channelId);
868
+ const cached = state.cachedWaifuContinuation;
869
+ if (!cached || cached.waifuId !== input.selectedWaifuId) {
870
+ return false;
871
+ }
872
+ return this.sendCachedWaifuContinuation(input.guildId, input.channelId, "same-waifu-no-scene-direction", input.signal);
873
+ }
874
+ async sendCachedWaifuContinuation(guildId, channelId, reason, signal) {
875
+ throwIfAborted(signal);
876
+ const state = await this.readChannelSession(guildId, channelId);
877
+ const cached = state.cachedWaifuContinuation;
878
+ if (!cached) {
879
+ return false;
880
+ }
881
+ await this.clearCachedWaifuContinuation(guildId, channelId, `sending cached continuation: ${reason}`);
882
+ this.options.logger.info("Sending cached waifu continuation", {
883
+ guildId,
884
+ channelId,
885
+ waifuId: cached.waifuId,
886
+ reason,
887
+ chunkCount: cached.chunks.length
888
+ });
889
+ await this.sendWaifuChunks({
890
+ guildId,
891
+ channelId,
892
+ waifuId: cached.waifuId,
893
+ senderBotId: cached.senderBotId,
894
+ chunks: cached.chunks,
895
+ totalChunkCount: cached.chunks.length,
896
+ allowedUserMentionIds: cached.allowedUserMentionIds,
897
+ signal
898
+ });
899
+ return true;
900
+ }
901
+ async sendCachedContinuationAfterIdle(guildId, channelId) {
902
+ if (this.options.isPaused?.()) {
903
+ await this.clearCachedWaifuContinuation(guildId, channelId, "runtime paused before cached continuation");
904
+ return;
905
+ }
906
+ if (this.activeRuns.has(runKey(guildId))) {
907
+ this.setContinuationTimer(guildId, channelId, Math.min(1000, Math.max(1, this.continuationIdleMs)));
908
+ return;
909
+ }
910
+ await this.sendCachedWaifuContinuation(guildId, channelId, "idle-timeout");
911
+ }
912
+ async cacheWaifuContinuation(input) {
913
+ if (input.chunks.length === 0) {
914
+ return;
915
+ }
916
+ const cachedAt = nowIso();
917
+ const idleAfter = new Date(Date.now() + this.continuationIdleMs).toISOString();
918
+ await this.updateSession(input.guildId, input.channelId, (current) => ({
919
+ ...current,
920
+ cachedWaifuContinuation: {
921
+ waifuId: input.waifuId,
922
+ senderBotId: input.senderBotId,
923
+ chunks: input.chunks,
924
+ allowedUserMentionIds: input.allowedUserMentionIds,
925
+ cachedAt,
926
+ idleAfter
927
+ }
928
+ }));
929
+ this.scheduleContinuationTimer(input.guildId, input.channelId, idleAfter);
930
+ this.options.logger.info("Cached unsent waifu continuation chunks", {
931
+ guildId: input.guildId,
932
+ channelId: input.channelId,
933
+ waifuId: input.waifuId,
934
+ chunkCount: input.chunks.length,
935
+ idleAfter
936
+ });
937
+ }
938
+ async clearCachedWaifuContinuation(guildId, channelId, reason) {
939
+ const key = timerKey(guildId, channelId);
940
+ const timer = this.continuationTimers.get(key);
941
+ if (timer) {
942
+ clearTimeout(timer.timer);
943
+ this.continuationTimers.delete(key);
944
+ }
945
+ const state = await this.readChannelSession(guildId, channelId);
946
+ if (!state.cachedWaifuContinuation) {
947
+ return;
948
+ }
949
+ const cached = state.cachedWaifuContinuation;
950
+ await this.updateSession(guildId, channelId, (current) => ({
951
+ ...current,
952
+ cachedWaifuContinuation: null
953
+ }));
954
+ this.options.logger.info("Cleared cached waifu continuation chunks", {
955
+ guildId,
956
+ channelId,
957
+ waifuId: cached.waifuId,
958
+ reason,
959
+ chunkCount: cached.chunks.length
960
+ });
961
+ }
962
+ scheduleContinuationTimer(guildId, channelId, idleAfter) {
963
+ const delayMs = Math.max(0, new Date(idleAfter).getTime() - Date.now());
964
+ this.setContinuationTimer(guildId, channelId, delayMs);
965
+ }
966
+ setContinuationTimer(guildId, channelId, delayMs) {
967
+ const key = timerKey(guildId, channelId);
968
+ const existing = this.continuationTimers.get(key);
969
+ if (existing) {
970
+ clearTimeout(existing.timer);
971
+ }
972
+ const timer = setTimeout(() => {
973
+ this.continuationTimers.delete(key);
974
+ void this.sendCachedContinuationAfterIdle(guildId, channelId).catch((error) => {
975
+ this.options.logger.error("Cached waifu continuation failed", {
976
+ guildId,
977
+ channelId,
978
+ message: error instanceof Error ? error.message : String(error)
979
+ });
980
+ });
981
+ }, delayMs);
982
+ this.continuationTimers.set(key, { guildId, channelId, timer });
983
+ }
984
+ async sendWaifuChunks(input) {
985
+ if (input.chunks.length === 0) {
986
+ return;
987
+ }
988
+ this.activeWaifuSendChannels.add(input.channelId);
989
+ try {
990
+ for (let i = 0; i < input.chunks.length; i++) {
991
+ throwIfAborted(input.signal);
992
+ if (i > 0) {
993
+ void this.options.discord
994
+ .sendTyping({ guildId: input.guildId, channelId: input.channelId, senderBotId: input.senderBotId })
995
+ .catch(() => undefined);
996
+ await this.sleep(typingDelayMs(input.chunks[i]), input.signal);
997
+ }
998
+ const sentResult = await this.options.discord.sendWaifuMessage({
999
+ guildId: input.guildId,
1000
+ channelId: input.channelId,
1001
+ senderBotId: input.senderBotId,
1002
+ content: input.chunks[i],
1003
+ replyToMessageId: i === 0 ? input.replyToMessageId : undefined,
1004
+ allowedUserMentionIds: input.allowedUserMentionIds
1005
+ });
1006
+ this.rememberSelfSent(sentResult.messageId);
1007
+ this.options.logger.info("Waifu message chunk sent", {
1008
+ guildId: input.guildId,
1009
+ channelId: input.channelId,
1010
+ waifuId: input.waifuId,
1011
+ chunkIndex: i,
1012
+ chunkCount: input.totalChunkCount,
1013
+ chunkLength: input.chunks[i].length
1014
+ });
1015
+ }
1016
+ }
1017
+ finally {
1018
+ this.activeWaifuSendChannels.delete(input.channelId);
1019
+ }
1020
+ }
851
1021
  async setActivePipeline(guildId, channelId, kind) {
852
1022
  await this.updateSession(guildId, channelId, (current) => ({
853
1023
  ...current,
@@ -975,7 +1145,7 @@ export class RuntimeOrchestrator {
975
1145
  const behaviorBlock = `<${behaviorTag}>\n${behaviorSections.join("\n")}\n</${behaviorTag}>`;
976
1146
  const currentTimeBlock = `<current_time>\n${formatTimestamp(new Date())} (UTC)\n</current_time>`;
977
1147
  const emojiBlock = `<available_server_emojis>\n${emojiList || "(none cached)"}\n</available_server_emojis>`;
978
- return `${behaviorBlock}\n${currentTimeBlock}\n${emojiBlock}`;
1148
+ return `${behaviorBlock}\n${emojiBlock}\n${currentTimeBlock}`;
979
1149
  }
980
1150
  buildOrchestratorSystemPrompt(orchestrator, server, availableWaifus) {
981
1151
  const activeWaifusContent = availableWaifus.length
@@ -995,16 +1165,16 @@ export class RuntimeOrchestrator {
995
1165
  "- Use reviewer only when you suspect the latest waifu message is hallucinating or leaking internals; the reviewer model makes the final judgment.",
996
1166
  "- retriggerAfterSeconds must be between 100 and 28800."
997
1167
  ].join("\n");
998
- const taskInstructions = orchestrator.prompt?.trim() || DEFAULT_ORCHESTRATOR_PROMPT;
1168
+ const taskInstructions = DEFAULT_ORCHESTRATOR_PROMPT;
999
1169
  const loopBreaking = [
1000
1170
  "The recent messages in context are your most important signal. If the waifus are circling the same topic, the same vibe, or the same back-and-forth, they will keep circling unless you actively redirect them — each waifu only sees her own persona and the chat, so only you can see the loop forming from the outside.",
1001
1171
  "When you notice a loop forming (even a soft one — two or three messages already feeling similar is enough), pick the waifu whose personality most naturally fits a hard pivot and write a concrete sceneDirection that lands a brand-new topic, observation, memory, callback, or non-sequitur. Name the specific new topic in the sceneDirection — \"ask about Kevin's dog\", \"bring up the snowstorm last week\", \"complain about being hungry\" — rather than vague instructions like \"change the subject\". A jarring shift that still feels in-character is better than letting the conversation stagnate."
1002
1172
  ].join("\n\n");
1003
1173
  const retriggerPacing = [
1004
1174
  "retriggerAfterSeconds decides when you wake yourself up to reconsider. Every wake-up costs another orchestrator call, so pace it to how alive the conversation actually is — read the timestamps on recent messages:",
1005
- "- Active chat (humans engaging within the last few minutes): short, ~100-300s.",
1175
+ "- Active chat (participants engaging within the last few minutes): short, ~100-300s.",
1006
1176
  "- Quiet but plausibly resuming (someone stepped away mid-thread): medium, ~600-1800s.",
1007
- "- Cold (last human message is hours old, or nobody has engaged with the bots in a while): long, ~3600-14400s, and keep growing each time you wake up to the same silence. Don't burn calls poking a dead channel."
1177
+ "- Cold (last participant message is hours old, or nobody has engaged with the bots in a while): long, ~3600-14400s, and keep growing each time you wake up to the same silence. Don't burn calls poking a dead channel."
1008
1178
  ].join("\n");
1009
1179
  const messageStructure = "Each message in the context is tagged with [index: #N], [timestamp: ISO-8601 UTC], and [sender: DisplayName] before its body, optionally followed by [reactions: ...] and [replying to: ...]. Reference messages by their #N index. replyToIndex must be one of the #N indices shown in the context.";
1010
1180
  const toolUse = [
@@ -1015,20 +1185,22 @@ export class RuntimeOrchestrator {
1015
1185
  "OR { \"action\": \"reviewer\", \"reasoning\": string }",
1016
1186
  "OR { \"action\": \"no_reply\", \"retriggerAfterSeconds\": number, \"reasoning\": string }."
1017
1187
  ].join("\n");
1188
+ const sections = orchestrator.promptSections;
1018
1189
  const behavior = [
1019
1190
  `<hard_rules>\n${hardRules}\n</hard_rules>`,
1020
1191
  `<task_instructions>\n${taskInstructions}\n</task_instructions>`,
1021
- `<loop_breaking>\n${loopBreaking}\n</loop_breaking>`,
1022
- `<retrigger_pacing>\n${retriggerPacing}\n</retrigger_pacing>`,
1023
- `<message_structure>\n${messageStructure}\n</message_structure>`,
1024
- `<tool_use>\n${toolUse}\n</tool_use>`
1025
- ].join("\n");
1192
+ sections.loopBreaking ? `<loop_breaking>\n${loopBreaking}\n</loop_breaking>` : null,
1193
+ sections.retriggerPacing ? `<retrigger_pacing>\n${retriggerPacing}\n</retrigger_pacing>` : null,
1194
+ sections.messageStructure ? `<message_structure>\n${messageStructure}\n</message_structure>` : null,
1195
+ sections.toolUse ? `<tool_use>\n${toolUse}\n</tool_use>` : null
1196
+ ]
1197
+ .filter((section) => Boolean(section))
1198
+ .join("\n");
1026
1199
  return [
1027
1200
  `<identity>\n${identity}\n</identity>`,
1028
1201
  `<behavior>\n${behavior}\n</behavior>`,
1029
1202
  `<discord_server_information>\n${server.name ?? server.guildId}\n</discord_server_information>`,
1030
- `<active_waifus>\n${activeWaifusContent}\n</active_waifus>`,
1031
- `<current_time>\n${formatTimestamp(new Date())} (UTC)\n</current_time>`
1203
+ `<active_waifus>\n${activeWaifusContent}\n</active_waifus>`
1032
1204
  ].join("\n");
1033
1205
  }
1034
1206
  async ensureServer(guildId) {
@@ -1074,6 +1246,9 @@ export class RuntimeOrchestrator {
1074
1246
  transform: (current) => current
1075
1247
  });
1076
1248
  }
1249
+ async readChannelSession(guildId, channelId) {
1250
+ return this.options.storage.withLocks([`session:${guildId}:${channelId}`], () => this.options.storage.readJson(sessionRelativePath(guildId, channelId), ChannelSessionStateSchema, createEmptyChannelSessionState(guildId, channelId)));
1251
+ }
1077
1252
  async updateSession(guildId, channelId, transform) {
1078
1253
  return this.options.storage.updateRevisionedJson({
1079
1254
  resourceKey: `session:${guildId}:${channelId}`,
@@ -1164,7 +1339,7 @@ function replyTargetForFreshContext(replyToMessageId, messages) {
1164
1339
  return latestMessage?.id === replyToMessageId ? undefined : replyToMessageId;
1165
1340
  }
1166
1341
  function throwIfAborted(signal) {
1167
- if (signal.aborted) {
1342
+ if (signal?.aborted) {
1168
1343
  throw signal.reason instanceof Error ? signal.reason : new Error("Request aborted.");
1169
1344
  }
1170
1345
  }
@@ -1222,11 +1397,19 @@ const DEFAULT_REVIEWER_PROMPT = [
1222
1397
  "The output must be the reviewer tool decision only."
1223
1398
  ].join("\n");
1224
1399
  const DEFAULT_ORCHESTRATOR_PROMPT = [
1225
- "You watch one Discord channel and orchestrate a small cast of waifu personas. On each new message decide, from outside the scene:",
1226
- "- which waifu (or, if a moment naturally calls for it, which subset) should speak next, judged by personality fit and the current flow of the chat — not by rules, ordering, or fairness",
1227
- "- whether to inject a sceneDirection because there is something specific you want her to address, or to leave it empty and let her improvise from her persona",
1228
- "- whether to instead pick stage_manager (something memorable just happened and should be persisted), reviewer (the latest waifu message looks like leaked internals), or no_reply (any answer right now would be intrusive, redundant, or aimed at no one)",
1229
- "The goal is a natural-feeling group chat — varied speakers, voices that match each waifu's persona, and silences when silence fits. You are the only agent that sees the whole picture, so when the chat is stalling it is your job to nudge it back into motion through sceneDirection."
1400
+ "You watch one Discord channel and orchestrate a small cast of waifu personas. On each new message, decide from outside the scene which (if any) waifu should speak next, in what order, and with what scene direction.",
1401
+ "",
1402
+ "Be natural. Real group chats do not require everyone to reply every time, and not every beat needs a response treat the room like a living scene, not a turn-taking queue. Pacing, silence, interruption, overlap, comedy, and escalation are all valid moves. Pick the waifu whose personality fits the moment based on her voice and the current flow; the same waifu may speak again, a different one may jump in, or two may chain if it feels right.",
1403
+ "",
1404
+ "Choose between the four actions based on what the room actually needs:",
1405
+ "- waifus when one or more waifus should respond now.",
1406
+ "- no_reply when answering right now would be intrusive, redundant, or aimed at no one — silence is a valid choice when the scene fits it.",
1407
+ "- stage_manager when something memorable has happened (a new fact about a user, a relationship change, an event worth remembering) and the memory pass should run before the next reply.",
1408
+ "- reviewer when the latest waifu message looks like leaked internals or hallucinated private model text.",
1409
+ "",
1410
+ "If a recent chat participant message or direct ping was missed while the room moved on, prefer steering a waifu to acknowledge it so the chat stays socially inclusive — unless silence is clearly the more natural choice.",
1411
+ "",
1412
+ "Reach for sceneDirection when the next reply needs steering that personality alone won't provide: redirecting topic, closing a beat, creating an interruption, shifting momentum, or deliberately starting something new even when it cuts against the current flow. Prefer a natural bridge when pivoting, but a jarring shift is fine if the scene needs it. Keep sceneDirection short, concrete, and immediately actionable — one sentence is usually enough. When you refer to a specific person, use their actual display name from the chat history, never generic phrases like \"the user\". Name intended participants explicitly when more than one person is involved; avoid ambiguous group references like \"us\", \"them\", or \"everyone\". If multiple waifus respond in the same turn, each may receive a different sceneDirection."
1230
1413
  ].join("\n");
1231
1414
  const TYPING_REFRESH_MS = 8000;
1232
1415
  const MAX_CLEAR_COUNT = 100;