crewly 1.20.134 → 1.20.136

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.
Files changed (74) hide show
  1. package/config/skills/agent/core/block-task/SKILL.md +16 -3
  2. package/dist/backend/backend/src/constants.d.ts +4 -0
  3. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  4. package/dist/backend/backend/src/constants.js +4 -0
  5. package/dist/backend/backend/src/constants.js.map +1 -1
  6. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +6 -1
  7. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
  8. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +9 -2
  9. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  10. package/dist/backend/backend/src/index.d.ts.map +1 -1
  11. package/dist/backend/backend/src/index.js +21 -0
  12. package/dist/backend/backend/src/index.js.map +1 -1
  13. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +43 -7
  14. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  15. package/dist/backend/backend/src/services/agent/agent-registration.service.js +158 -51
  16. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  17. package/dist/backend/backend/src/services/agent/registration-flow-registry.d.ts +92 -0
  18. package/dist/backend/backend/src/services/agent/registration-flow-registry.d.ts.map +1 -0
  19. package/dist/backend/backend/src/services/agent/registration-flow-registry.js +121 -0
  20. package/dist/backend/backend/src/services/agent/registration-flow-registry.js.map +1 -0
  21. package/dist/backend/backend/src/services/agent/resumed-kickoff.d.ts +66 -0
  22. package/dist/backend/backend/src/services/agent/resumed-kickoff.d.ts.map +1 -0
  23. package/dist/backend/backend/src/services/agent/resumed-kickoff.js +72 -0
  24. package/dist/backend/backend/src/services/agent/resumed-kickoff.js.map +1 -0
  25. package/dist/backend/backend/src/services/reconciler/reconcile-rules.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js +9 -1
  27. package/dist/backend/backend/src/services/reconciler/reconcile-rules.js.map +1 -1
  28. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
  29. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +8 -0
  30. package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
  31. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts +14 -0
  32. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  33. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js +53 -1
  34. package/dist/backend/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  35. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +32 -0
  36. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +60 -1
  38. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  39. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +37 -0
  40. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  41. package/dist/backend/backend/src/types/v2/work-item.types.js +33 -0
  42. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  43. package/dist/backend/build-info.json +2 -2
  44. package/dist/cli/backend/src/constants.d.ts +4 -0
  45. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  46. package/dist/cli/backend/src/constants.js +4 -0
  47. package/dist/cli/backend/src/constants.js.map +1 -1
  48. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +43 -7
  49. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  50. package/dist/cli/backend/src/services/agent/agent-registration.service.js +158 -51
  51. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  52. package/dist/cli/backend/src/services/agent/registration-flow-registry.d.ts +92 -0
  53. package/dist/cli/backend/src/services/agent/registration-flow-registry.d.ts.map +1 -0
  54. package/dist/cli/backend/src/services/agent/registration-flow-registry.js +121 -0
  55. package/dist/cli/backend/src/services/agent/registration-flow-registry.js.map +1 -0
  56. package/dist/cli/backend/src/services/agent/resumed-kickoff.d.ts +66 -0
  57. package/dist/cli/backend/src/services/agent/resumed-kickoff.d.ts.map +1 -0
  58. package/dist/cli/backend/src/services/agent/resumed-kickoff.js +72 -0
  59. package/dist/cli/backend/src/services/agent/resumed-kickoff.js.map +1 -0
  60. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts +14 -0
  61. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.d.ts.map +1 -1
  62. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js +53 -1
  63. package/dist/cli/backend/src/services/slack/slack-typing-placeholder.service.js.map +1 -1
  64. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +32 -0
  65. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  66. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +60 -1
  67. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  68. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +37 -0
  69. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  70. package/dist/cli/backend/src/types/v2/work-item.types.js +33 -0
  71. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  72. package/frontend/dist/assets/{index-97bb17d4.js → index-2c7ee4a6.js} +30 -30
  73. package/frontend/dist/index.html +1 -1
  74. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AA2CA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAmMjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IACnF,gFAAgF;IAChF,OAAO,CAAC,iBAAiB,CAAC,CAAyD;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IAKpE,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,oFAAoF;IACpF,OAAO,CAAC,oBAAoB,CAAK;IACjC,2EAA2E;IAC3E,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAsE3C,OAAO,CAAC,kBAAkB;IAgjC1B,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,eAAe;IA4KvB,OAAO,CAAC,kBAAkB;IAwBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAi7C5B;;;OAGG;YACW,2BAA2B;IAkCzC;;;OAGG;YACW,8BAA8B;IAsB5C;;;OAGG;YACW,gCAAgC;IAsB9C;;;OAGG;YACW,8BAA8B;IAsB5C;;;;OAIG;YACW,8BAA8B;IAgM5C;;;;;;;;;;;;OAYG;YACW,6BAA6B;IAsB3C;;;;;OAKG;YACW,iCAAiC;IAoL/C;;;;OAIG;YACW,2BAA2B;YA0B3B,qBAAqB;IAsBnC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;YA6BZ,eAAe;YAoFf,kBAAkB;IAgBhC,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,sBAAsB;IAsC9B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;;;OAIG;YACW,+BAA+B;IA0C7C;;;;;;OAMG;YACW,kBAAkB;IA0BhC,OAAO,CAAC,qBAAqB;IAoC7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAoE1B;;;;;;;;;OASG;IACH;;;;;;;;;;;;;;OAcG;IACH,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAE1D;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;YAyBd,wBAAwB;IAWtC,OAAO,CAAC,qBAAqB;IAwH7B,OAAO,CAAC,cAAc;IActB;;;;;;;;OAQG;IACG,QAAQ,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2VpG,SAAS,IAAI,aAAa;CAG1B;AAmCD,eAAe,YAAY,CAAC"}
@@ -56,6 +56,7 @@ import { RequestStatusUpdateSubscriber } from './services/v3/request-status-upda
56
56
  import { RequestCascadeSubscriber } from './services/v3/request-cascade.subscriber.js';
57
57
  import { setRequestServiceEventBus, RequestService } from './services/v3/request.service.js';
58
58
  import { getSlackService } from './services/slack/slack.service.js';
59
+ import { getSlackTypingPlaceholderService } from './services/slack/slack-typing-placeholder.service.js';
59
60
  import { sendBootAnnouncement, isFirstBoot, markBooted } from './services/boot/boot-announce.service.js';
60
61
  import { SubAgentMessageQueue } from './services/messaging/sub-agent-message-queue.service.js';
61
62
  import { SUB_AGENT_QUEUE_CONSTANTS, CHAT_CONTEXT_CONSTANTS, SAFE_RESTART, PROCESS_EXIT_CODES, CLAUDE_STARTUP_CONSTANTS, WEB_CONSTANTS, TICKET_CONSTANTS, UNASSIGNED_ROUTE_CONSTANTS } from './constants.js';
@@ -1027,6 +1028,12 @@ export class CrewlyServer {
1027
1028
  // was mid-answer and never got a reply; the message was still
1028
1029
  // in the queue an hour later (2026-09-21, Ella).
1029
1030
  setImmediate(() => void this.flushQueuedAgentMessages(event.sessionName));
1031
+ // The turn ended: a "working on it" it never answered means it chose
1032
+ // not to reply (an "ok", "好"). Take it down rather than leave a
1033
+ // "still working — the reply will follow" that never follows.
1034
+ void getSlackTypingPlaceholderService()
1035
+ ?.settleTurnWithoutReply(event.sessionName)
1036
+ .catch(() => undefined);
1030
1037
  // Ticket loop Phase 2: an agent that finished its turn has answered
1031
1038
  // the tickets it replied in — submit them (待验收 or done).
1032
1039
  void getTicketReviewService()
@@ -3212,6 +3219,7 @@ export class CrewlyServer {
3212
3219
  sessions: agentSessions.map((s) => s.name),
3213
3220
  });
3214
3221
  let restored = 0;
3222
+ let alreadyRunning = 0;
3215
3223
  const failed = [];
3216
3224
  const RESTORE_DELAY_MS = 10_000; // 10 seconds between each session restore to avoid resource pressure
3217
3225
  for (let i = 0; i < agentSessions.length; i++) {
@@ -3226,6 +3234,18 @@ export class CrewlyServer {
3226
3234
  await new Promise((resolve) => setTimeout(resolve, RESTORE_DELAY_MS));
3227
3235
  }
3228
3236
  try {
3237
+ // PTYs live in this process, so none survive a restart: a session
3238
+ // that exists now was started this boot by another launcher (a
3239
+ // reconciler wake, a team start). forceRecreate would kill it and
3240
+ // resume the same conversation again — a second kickoff in one
3241
+ // chat (2026-09-25 startup-prompt loop). Leave it be.
3242
+ if (await this.apiController.agentRegistrationService.isSessionLiveOrLaunching(session.name)) {
3243
+ alreadyRunning++;
3244
+ this.logger.info('Skipping restore — session already started this boot by another launcher', {
3245
+ name: session.name,
3246
+ });
3247
+ continue;
3248
+ }
3229
3249
  const result = await this.apiController.agentRegistrationService.createAgentSession({
3230
3250
  sessionName: session.name,
3231
3251
  role: session.role || 'developer',
@@ -3262,6 +3282,7 @@ export class CrewlyServer {
3262
3282
  }
3263
3283
  this.logger.info('Agent session restore complete', {
3264
3284
  restored,
3285
+ alreadyRunning,
3265
3286
  total: agentSessions.length,
3266
3287
  failed: failed.length > 0 ? failed : undefined,
3267
3288
  });