crewly 1.11.3 → 1.11.4

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 (171) hide show
  1. package/config/skills/agent/core/accept-task/SKILL.md +35 -7
  2. package/config/skills/agent/core/poll-tasks/execute.sh +44 -9
  3. package/config/skills/agent/core/poll-tasks/execute.test.sh +98 -0
  4. package/config/skills/agent/core/record-learning/execute.sh +92 -3
  5. package/config/skills/agent/core/register-self/SKILL.md +51 -8
  6. package/config/skills/agent/transcribe-audio/SKILL.md +110 -0
  7. package/config/skills/agent/transcribe-audio/execute.sh +223 -0
  8. package/config/skills/agent/transcribe-audio/instructions.md +92 -0
  9. package/config/skills/agent/transcribe-audio/skill.json +22 -0
  10. package/config/skills/orchestrator/assign-task/SKILL.md +40 -6
  11. package/config/skills/orchestrator/broadcast/SKILL.md +45 -8
  12. package/dist/backend/backend/src/constants.d.ts +0 -16
  13. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  14. package/dist/backend/backend/src/constants.js +0 -16
  15. package/dist/backend/backend/src/constants.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/memory/memory.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/memory/memory.controller.js +3 -10
  18. package/dist/backend/backend/src/controllers/memory/memory.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
  20. package/dist/backend/backend/src/controllers/system/system.controller.js +24 -5
  21. package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
  22. package/dist/backend/backend/src/index.d.ts +2 -0
  23. package/dist/backend/backend/src/index.d.ts.map +1 -1
  24. package/dist/backend/backend/src/index.js +124 -1
  25. package/dist/backend/backend/src/index.js.map +1 -1
  26. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  27. package/dist/backend/backend/src/routes/api.routes.js +0 -3
  28. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  29. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  30. package/dist/backend/backend/src/services/agent/agent-registration.service.js +56 -20
  31. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  32. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
  33. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  34. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
  35. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  36. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  37. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +2 -0
  38. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  39. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts +79 -0
  40. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.d.ts.map +1 -0
  41. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js +118 -0
  42. package/dist/backend/backend/src/services/ai/prompt-modules/sop-norm-distinction.module.js.map +1 -0
  43. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts +88 -0
  44. package/dist/backend/backend/src/services/boot/boot-announce.service.d.ts.map +1 -0
  45. package/dist/backend/backend/src/services/boot/boot-announce.service.js +119 -0
  46. package/dist/backend/backend/src/services/boot/boot-announce.service.js.map +1 -0
  47. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +14 -0
  49. package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
  50. package/dist/backend/backend/src/services/mcp-server.d.ts.map +1 -1
  51. package/dist/backend/backend/src/services/mcp-server.js +0 -6
  52. package/dist/backend/backend/src/services/mcp-server.js.map +1 -1
  53. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts +97 -0
  54. package/dist/backend/backend/src/services/memory/learning-format.validator.d.ts.map +1 -0
  55. package/dist/backend/backend/src/services/memory/learning-format.validator.js +209 -0
  56. package/dist/backend/backend/src/services/memory/learning-format.validator.js.map +1 -0
  57. package/dist/backend/backend/src/services/memory/memory.service.d.ts +78 -41
  58. package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
  59. package/dist/backend/backend/src/services/memory/memory.service.js +209 -127
  60. package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
  61. package/dist/backend/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  62. package/dist/backend/backend/src/services/memory/project-memory.service.js +37 -9
  63. package/dist/backend/backend/src/services/memory/project-memory.service.js.map +1 -1
  64. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.d.ts.map +1 -1
  65. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js +29 -0
  66. package/dist/backend/backend/src/services/orchestrator/orchestrator-heartbeat-monitor.service.js.map +1 -1
  67. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +9 -0
  69. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  70. package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts +86 -0
  71. package/dist/backend/backend/src/services/session/runtime-pid-registry.service.d.ts.map +1 -0
  72. package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js +214 -0
  73. package/dist/backend/backend/src/services/session/runtime-pid-registry.service.js.map +1 -0
  74. package/dist/backend/backend/src/services/sop/sop.service.d.ts +70 -2
  75. package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
  76. package/dist/backend/backend/src/services/sop/sop.service.js +93 -3
  77. package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
  78. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts +41 -0
  79. package/dist/backend/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  80. package/dist/backend/backend/src/services/task-pool/claim.service.js +72 -0
  81. package/dist/backend/backend/src/services/task-pool/claim.service.js.map +1 -1
  82. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
  83. package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  84. package/dist/backend/backend/src/services/task-pool/task-pool.service.js +20 -0
  85. package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  86. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.d.ts.map +1 -1
  87. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js +11 -0
  88. package/dist/backend/backend/src/services/telegram/telegram-orchestrator-bridge.js.map +1 -1
  89. package/dist/backend/backend/src/services/telegram/telegram.service.d.ts.map +1 -1
  90. package/dist/backend/backend/src/services/telegram/telegram.service.js +24 -2
  91. package/dist/backend/backend/src/services/telegram/telegram.service.js.map +1 -1
  92. package/dist/backend/backend/src/services/v3/mission-reminder.service.d.ts.map +1 -1
  93. package/dist/backend/backend/src/services/v3/mission-reminder.service.js +18 -18
  94. package/dist/backend/backend/src/services/v3/mission-reminder.service.js.map +1 -1
  95. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts +10 -0
  96. package/dist/backend/backend/src/services/v3/request-sla.subscriber.d.ts.map +1 -1
  97. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js +20 -12
  98. package/dist/backend/backend/src/services/v3/request-sla.subscriber.js.map +1 -1
  99. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -1
  100. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +12 -3
  101. package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -1
  102. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts +15 -5
  103. package/dist/backend/backend/src/services/wiki/wiki-query.service.d.ts.map +1 -1
  104. package/dist/backend/backend/src/services/wiki/wiki-query.service.js +31 -50
  105. package/dist/backend/backend/src/services/wiki/wiki-query.service.js.map +1 -1
  106. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +16 -0
  107. package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
  108. package/dist/backend/backend/src/services/wiki/wiki-search.service.js +20 -0
  109. package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
  110. package/dist/backend/backend/src/types/settings.types.d.ts +8 -0
  111. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  112. package/dist/backend/backend/src/types/settings.types.js +2 -0
  113. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  114. package/dist/backend/backend/src/types/v2/work-item.types.d.ts +23 -0
  115. package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  116. package/dist/backend/backend/src/types/v2/work-item.types.js +29 -0
  117. package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
  118. package/dist/cli/backend/src/constants.d.ts +0 -16
  119. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  120. package/dist/cli/backend/src/constants.js +0 -16
  121. package/dist/cli/backend/src/constants.js.map +1 -1
  122. package/dist/cli/backend/src/services/mcp-server.d.ts.map +1 -1
  123. package/dist/cli/backend/src/services/mcp-server.js +0 -6
  124. package/dist/cli/backend/src/services/mcp-server.js.map +1 -1
  125. package/dist/cli/backend/src/services/memory/memory.service.d.ts +78 -41
  126. package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
  127. package/dist/cli/backend/src/services/memory/memory.service.js +209 -127
  128. package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
  129. package/dist/cli/backend/src/services/memory/project-memory.service.d.ts.map +1 -1
  130. package/dist/cli/backend/src/services/memory/project-memory.service.js +37 -9
  131. package/dist/cli/backend/src/services/memory/project-memory.service.js.map +1 -1
  132. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts +41 -0
  133. package/dist/cli/backend/src/services/task-pool/claim.service.d.ts.map +1 -1
  134. package/dist/cli/backend/src/services/task-pool/claim.service.js +72 -0
  135. package/dist/cli/backend/src/services/task-pool/claim.service.js.map +1 -1
  136. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +16 -0
  137. package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
  138. package/dist/cli/backend/src/services/task-pool/task-pool.service.js +20 -0
  139. package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
  140. package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts +57 -0
  141. package/dist/cli/backend/src/services/wiki/schema-loader.service.d.ts.map +1 -0
  142. package/dist/cli/backend/src/services/wiki/schema-loader.service.js +183 -0
  143. package/dist/cli/backend/src/services/wiki/schema-loader.service.js.map +1 -0
  144. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts +100 -0
  145. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -0
  146. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js +212 -0
  147. package/dist/cli/backend/src/services/wiki/wiki-ingest.service.js.map +1 -0
  148. package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
  149. package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
  150. package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
  151. package/dist/cli/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
  152. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts +166 -0
  153. package/dist/cli/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
  154. package/dist/cli/backend/src/services/wiki/wiki-search.service.js +379 -0
  155. package/dist/cli/backend/src/services/wiki/wiki-search.service.js.map +1 -0
  156. package/dist/cli/backend/src/services/wiki/wiki.types.d.ts +84 -0
  157. package/dist/cli/backend/src/services/wiki/wiki.types.d.ts.map +1 -0
  158. package/dist/cli/backend/src/services/wiki/wiki.types.js +10 -0
  159. package/dist/cli/backend/src/services/wiki/wiki.types.js.map +1 -0
  160. package/dist/cli/backend/src/types/settings.types.d.ts +8 -0
  161. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  162. package/dist/cli/backend/src/types/settings.types.js +2 -0
  163. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  164. package/dist/cli/backend/src/types/v2/work-item.types.d.ts +23 -0
  165. package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
  166. package/dist/cli/backend/src/types/v2/work-item.types.js +29 -0
  167. package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
  168. package/frontend/dist/assets/{index-44266b5d.css → index-8205ea5e.css} +1 -1
  169. package/frontend/dist/assets/{index-4099a91c.js → index-890d3f9d.js} +289 -289
  170. package/frontend/dist/index.html +2 -2
  171. package/package.json +1 -1
@@ -979,7 +979,19 @@ export class AgentRegistrationService {
979
979
  content = await readFile(templatePath, 'utf8');
980
980
  this.promptCache.set(templatePath, content);
981
981
  }
982
- await writeFile(config.outputPath, content, { flag: 'wx' }).catch(() => {
982
+ // Substitute path placeholders before writing (#209). The cache holds
983
+ // the RAW template; resolve into a per-project copy so skill-script and
984
+ // project paths in the provisioned config file point at real locations
985
+ // (mirrors the placeholder substitution done for the registration prompt).
986
+ const agentSkillsPath = path.join(this.projectRoot, 'config', 'skills', 'agent');
987
+ const orchestratorSkillsPath = path.join(this.projectRoot, 'config', 'skills', 'orchestrator');
988
+ const marketplaceSkillsPath = path.join(os.homedir(), '.crewly', 'marketplace', 'skills');
989
+ const resolved = content
990
+ .replace(/\{\{PROJECT_PATH\}\}/g, projectPath)
991
+ .replace(/\{\{AGENT_SKILLS_PATH\}\}/g, agentSkillsPath)
992
+ .replace(/\{\{ORCHESTRATOR_SKILLS_PATH\}\}/g, orchestratorSkillsPath)
993
+ .replace(/\{\{MARKETPLACE_SKILLS_PATH\}\}/g, marketplaceSkillsPath);
994
+ await writeFile(config.outputPath, resolved, { flag: 'wx' }).catch(() => {
983
995
  // File already exists — no action needed
984
996
  });
985
997
  }
@@ -3494,6 +3506,8 @@ Loop until done, blocked, or explicitly reassigned:
3494
3506
  await delay(CONFIRM_INTERVAL_MS);
3495
3507
  confirmAttempt++;
3496
3508
  const loopOutput = sessionHelper.capturePane(sessionName);
3509
+ const loopBottom = loopOutput.split('\n').slice(-10).join(' ').replace(/\s+/g, ' ');
3510
+ const textStuck = loopBottom.includes(confirmSnippet);
3497
3511
  // Spinner or working indicator → delivered
3498
3512
  if (containsSpinnerOrWorkingIndicator(loopOutput)) {
3499
3513
  this.logger.info('Confirmation loop: processing detected', {
@@ -3502,7 +3516,28 @@ Loop until done, blocked, or explicitly reassigned:
3502
3516
  claudeDelivered = true;
3503
3517
  break;
3504
3518
  }
3505
- // Fast-response detection: output changed since send delivered
3519
+ // Text still stuck Enter was dropped, NOT delivered. Try
3520
+ // Tab+Enter recovery and re-check next iteration. This is
3521
+ // checked BEFORE the output-change shortcut below: when our
3522
+ // own pasted message is echoed at the prompt the output DID
3523
+ // change vs the pre-send baseline, but that change is the
3524
+ // stuck echo, not a response — treating it as "delivered"
3525
+ // is the false-positive that masked the orc 假死 (#686
3526
+ // follow-up: a hung session looked "delivered" forever).
3527
+ if (textStuck) {
3528
+ this.logger.warn('Confirmation loop: text still stuck, pressing Tab+Enter', {
3529
+ sessionName, attempt, confirmAttempt,
3530
+ });
3531
+ await sessionHelper.sendKey(sessionName, 'Tab');
3532
+ await delay(200);
3533
+ await sessionHelper.sendEnter(sessionName);
3534
+ await delay(500);
3535
+ await sessionHelper.sendEnter(sessionName); // backup
3536
+ continue;
3537
+ }
3538
+ // Fast-response detection: output changed since send AND our
3539
+ // message text is NOT stuck at the prompt → a real response
3540
+ // landed and returned to prompt before we looked. Delivered.
3506
3541
  if (loopOutput !== beforeOutput) {
3507
3542
  this.logger.info('Confirmation loop: output changed from pre-send — fast response confirmed', {
3508
3543
  sessionName, attempt, confirmAttempt,
@@ -3511,25 +3546,13 @@ Loop until done, blocked, or explicitly reassigned:
3511
3546
  break;
3512
3547
  }
3513
3548
  // Not at prompt and text not stuck → delivered
3514
- const loopBottom = loopOutput.split('\n').slice(-10).join(' ').replace(/\s+/g, ' ');
3515
- if (!this.isClaudeAtPrompt(loopOutput, runtimeType) && !loopBottom.includes(confirmSnippet)) {
3549
+ if (!this.isClaudeAtPrompt(loopOutput, runtimeType)) {
3516
3550
  this.logger.info('Confirmation loop: prompt gone, text cleared', {
3517
3551
  sessionName, attempt, confirmAttempt,
3518
3552
  });
3519
3553
  claudeDelivered = true;
3520
3554
  break;
3521
3555
  }
3522
- // Text still stuck → Tab+Enter recovery
3523
- if (loopBottom.includes(confirmSnippet)) {
3524
- this.logger.warn('Confirmation loop: text still stuck, pressing Tab+Enter', {
3525
- sessionName, attempt, confirmAttempt,
3526
- });
3527
- await sessionHelper.sendKey(sessionName, 'Tab');
3528
- await delay(200);
3529
- await sessionHelper.sendEnter(sessionName);
3530
- await delay(500);
3531
- await sessionHelper.sendEnter(sessionName); // backup
3532
- }
3533
3556
  }
3534
3557
  if (!claudeDelivered) {
3535
3558
  this.logger.error('Confirmation loop exhausted — delivery unconfirmed', {
@@ -4390,12 +4413,12 @@ Loop until done, blocked, or explicitly reassigned:
4390
4413
  // Send the kickoff / file-read instruction
4391
4414
  await sessionHelper.sendMessage(sessionName, messageToSend);
4392
4415
  // Claude Code: rapid-check verification.
4393
- // Check every 1s for up to 8s whether Claude started processing.
4416
+ // Check every 1s for up to 24s (Claude v2 first-token can be slow: MCP/skill load) whether Claude started processing.
4394
4417
  // If Claude leaves the prompt at any point, the message was received.
4395
4418
  // This avoids the old length-comparison approach which was unreliable
4396
4419
  // (Claude's TUI redraws change output length unpredictably).
4397
4420
  if (isClaudeCode) {
4398
- for (let i = 0; i < 8; i++) {
4421
+ for (let i = 0; i < 24; i++) {
4399
4422
  await delay(1000);
4400
4423
  if (abortSignal?.aborted)
4401
4424
  return false;
@@ -4418,9 +4441,22 @@ Loop until done, blocked, or explicitly reassigned:
4418
4441
  // Claude still at prompt after 8s — message likely not received.
4419
4442
  // For Claude Code with --append-system-prompt-file, don't retry
4420
4443
  // (would cause duplicate). Log warning and return false.
4421
- this.logger.warn('Kickoff delivery unconfirmedClaude still at prompt after 8s (not retrying)', {
4422
- sessionName, runtimeType,
4423
- });
4444
+ // Still at prompt the kickoff was likely typed but not submitted (PTY submit
4445
+ // can be dropped). A missing agent costs far more than a duplicate kickoff
4446
+ // (idempotent: it just re-reads the prompt file), so resend ONCE and re-poll.
4447
+ this.logger.warn('Kickoff unconfirmed after 24s — resending once', { sessionName, runtimeType });
4448
+ await sessionHelper.sendMessage(sessionName, messageToSend);
4449
+ for (let j = 0; j < 12; j++) {
4450
+ await delay(1000);
4451
+ if (abortSignal?.aborted)
4452
+ return false;
4453
+ const out2 = sessionHelper.capturePane(sessionName);
4454
+ if (containsSpinnerOrWorkingIndicator(out2) || !this.isClaudeAtPrompt(out2, RUNTIME_TYPES.CLAUDE_CODE)) {
4455
+ this.logger.debug('Kickoff delivered on resend', { sessionName, checkIndex: j });
4456
+ return true;
4457
+ }
4458
+ }
4459
+ this.logger.warn('Kickoff delivery unconfirmed after resend — giving up', { sessionName, runtimeType });
4424
4460
  return false;
4425
4461
  }
4426
4462
  // Gemini CLI / other runtimes: trust the PTY delivery.