crewly 1.4.38 → 1.4.39
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/config/skills/agent/core/complete-task/execute.sh +5 -3
- package/config/skills/agent/core/report-status/execute.sh +4 -2
- package/dist/backend/backend/src/constants.d.ts +5 -24
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +5 -28
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +20 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +80 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +28 -3
- package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +6 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +34 -18
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +25 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +4 -4
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +21 -9
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.d.ts +0 -4
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.js +0 -7
- package/dist/backend/backend/src/services/cloud/auth/auth.utils.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts +2 -0
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js +5 -0
- package/dist/backend/backend/src/services/cloud/device-auto-discovery.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/relay-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/relay-client.service.js +4 -0
- package/dist/backend/backend/src/services/cloud/relay-client.service.js.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.d.ts +10 -0
- package/dist/backend/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/memory/memory.service.js +27 -5
- package/dist/backend/backend/src/services/memory/memory.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts +9 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/message-queue.service.js +36 -2
- package/dist/backend/backend/src/services/messaging/message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +4 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +8 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +6 -1
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/utils/security.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/security.js +9 -6
- package/dist/backend/backend/src/utils/security.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +5 -24
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +5 -28
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.d.ts +10 -0
- package/dist/cli/backend/src/services/memory/memory.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/memory/memory.service.js +27 -5
- package/dist/cli/backend/src/services/memory/memory.service.js.map +1 -1
- package/frontend/dist/assets/{index-8aa61f2c.js → index-e8b8498d.js} +353 -352
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -216,15 +216,19 @@ export declare class AgentRegistrationService {
|
|
|
216
216
|
private loadRegistrationPrompt;
|
|
217
217
|
/**
|
|
218
218
|
* Write the registration prompt to a file on disk.
|
|
219
|
-
*
|
|
219
|
+
*
|
|
220
|
+
* For Claude Code agents (#207): writes to `{projectPath}/.claude/agents/{sessionName}.md`
|
|
221
|
+
* with YAML frontmatter so the `--agent` flag can load it as a custom agent definition.
|
|
222
|
+
* For other runtimes: writes to `~/.crewly/prompts/{sessionName}-init.md`.
|
|
220
223
|
*
|
|
221
224
|
* @param sessionName - Session name (used for filename)
|
|
222
225
|
* @param prompt - The full prompt content
|
|
226
|
+
* @param options - Optional: projectPath, runtimeType, and role for claude-code agent mode
|
|
223
227
|
* @returns The absolute path to the written file, or undefined on error
|
|
224
228
|
*/
|
|
225
229
|
private writePromptFile;
|
|
226
230
|
/**
|
|
227
|
-
* Build the unified init prompt path used by
|
|
231
|
+
* Build the unified init prompt path used by non-Claude-Code runtimes.
|
|
228
232
|
*/
|
|
229
233
|
private getInitPromptFilePath;
|
|
230
234
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registration.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-registration.service.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EACN,gBAAgB,EAMhB,WAAW,EAOX,MAAM,oBAAoB,CAAC;AA4B5B,MAAM,WAAW,kBAAkB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IACpC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,WAAW,CAA6B;IAGhD,OAAO,CAAC,oBAAoB,CAA4G;IAGxI,OAAO,CAAC,4BAA4B,CAAsC;IAG1E,OAAO,CAAC,yBAAyB,CAA+C;IAGhF,OAAO,CAAC,kBAAkB,CAAkC;IAI5D,OAAO,CAAC,kBAAkB,CAKpB;IAKN,OAAO,CAAC,oBAAoB,CAAoC;IAIhE,OAAO,CAAC,mBAAmB,CAAuD;IAIlF,OAAO,CAAC,iBAAiB,CAAgD;IAEzE,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB,CAA+E;IAKvG,OAAO,CAAC,MAAM,KAAK,wBAAwB,GAE1C;gBAGA,kBAAkB,EAAE,OAAO,EAAE,+CAA+C;IAC5E,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,cAAc,EAAE,cAAc;IAmB/B;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,EAAE;QAAE,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI;IAIpG;;;;;OAKG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IASpD;;OAEG;YACW,gBAAgB;IA2B9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;;;;;;;;OASG;YACW,yBAAyB;IA+BvC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,4BAA4B;IAsCpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;;;;;;;;OASG;YACW,mBAAmB;IA2DjC;;;;;;OAMG;YACW,iBAAiB;IAgB/B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAI/E;;;;;;;;OAQG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKtD;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;;OAGG;YACW,qBAAqB;IAkBnC;;;OAGG;YACW,oBAAoB;IAMlC;;;OAGG;IACG,+BAA+B,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,MAAoD,EAC7D,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,GAAE,WAAuC,EACpD,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,wBAAwB,CAAC,EAAE,MAAM,EAAE,GACjC,OAAO,CAAC;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAkFF;;;OAGG;YACW,qBAAqB;IA8CnC;;;OAGG;YACW,mBAAmB;IAmKjC;;;;;;;;;;;OAWG;YACW,uBAAuB;IA0CrC;;;;;;;;;;;;OAYG;YACW,0BAA0B;IAgDxC;;;;OAIG;YACW,2BAA2B;IA2CzC;;;OAGG;YACW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"agent-registration.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/agent-registration.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -527,12 +527,14 @@ export class AgentRegistrationService {
|
|
|
527
527
|
});
|
|
528
528
|
}
|
|
529
529
|
}
|
|
530
|
-
// Write prompt file before launching runtime so --append-system-prompt-file works
|
|
530
|
+
// Write prompt file before launching runtime so --agent (Claude Code) or --append-system-prompt-file works
|
|
531
531
|
let promptFilePath;
|
|
532
|
+
let agentName;
|
|
532
533
|
if (runtimeType === RUNTIME_TYPES.CLAUDE_CODE) {
|
|
533
534
|
try {
|
|
534
535
|
const prompt = await this.loadRegistrationPrompt(role, sessionName, memberId, runtimeType);
|
|
535
|
-
promptFilePath = await this.writePromptFile(sessionName, prompt);
|
|
536
|
+
promptFilePath = await this.writePromptFile(sessionName, prompt, { projectPath, runtimeType, role });
|
|
537
|
+
agentName = sessionName; // #207: pass agent name for --agent flag
|
|
536
538
|
}
|
|
537
539
|
catch (promptError) {
|
|
538
540
|
this.logger.warn('Failed to pre-write prompt file (non-fatal, will fall back to direct delivery)', {
|
|
@@ -542,10 +544,8 @@ export class AgentRegistrationService {
|
|
|
542
544
|
}
|
|
543
545
|
}
|
|
544
546
|
// Reinitialize runtime using the appropriate initialization script (always fresh start)
|
|
545
|
-
// runtimeService2: Fresh instance for runtime reinitialization after cleanup
|
|
546
|
-
// New instance ensures clean state without cached detection results
|
|
547
547
|
const runtimeService2 = this.createRuntimeService(runtimeType);
|
|
548
|
-
await runtimeService2.executeRuntimeInitScript(sessionName, projectPath, effectiveFlags, promptFilePath);
|
|
548
|
+
await runtimeService2.executeRuntimeInitScript(sessionName, projectPath, effectiveFlags, promptFilePath, agentName);
|
|
549
549
|
// Wait for runtime to be ready (simplified detection)
|
|
550
550
|
// Use shorter check interval in test environment, and reasonable interval in production
|
|
551
551
|
const checkInterval = this.getCheckInterval();
|
|
@@ -818,12 +818,14 @@ export class AgentRegistrationService {
|
|
|
818
818
|
});
|
|
819
819
|
}
|
|
820
820
|
}
|
|
821
|
-
// Write prompt file before launching runtime so --append-system-prompt-file works
|
|
821
|
+
// Write prompt file before launching runtime so --agent (Claude Code) or --append-system-prompt-file works
|
|
822
822
|
let promptFilePath;
|
|
823
|
+
let agentName;
|
|
823
824
|
if (runtimeType === RUNTIME_TYPES.CLAUDE_CODE) {
|
|
824
825
|
try {
|
|
825
826
|
const prompt = await this.loadRegistrationPrompt(role, sessionName, memberId, runtimeType);
|
|
826
|
-
promptFilePath = await this.writePromptFile(sessionName, prompt);
|
|
827
|
+
promptFilePath = await this.writePromptFile(sessionName, prompt, { projectPath, runtimeType, role });
|
|
828
|
+
agentName = sessionName;
|
|
827
829
|
}
|
|
828
830
|
catch (promptError) {
|
|
829
831
|
this.logger.warn('Failed to pre-write prompt file in full recreation (non-fatal)', {
|
|
@@ -840,7 +842,7 @@ export class AgentRegistrationService {
|
|
|
840
842
|
});
|
|
841
843
|
// Initialize runtime for orchestrator using script (always fresh start)
|
|
842
844
|
const runtimeService = this.createRuntimeService(runtimeType);
|
|
843
|
-
await runtimeService.executeRuntimeInitScript(sessionName, process.cwd(), effectiveFlags, promptFilePath);
|
|
845
|
+
await runtimeService.executeRuntimeInitScript(sessionName, process.cwd(), effectiveFlags, promptFilePath, agentName);
|
|
844
846
|
// Wait for runtime to be ready
|
|
845
847
|
const checkInterval = this.getCheckInterval();
|
|
846
848
|
// runtimeService3: Separate instance for orchestrator ready-state detection
|
|
@@ -886,7 +888,7 @@ export class AgentRegistrationService {
|
|
|
886
888
|
// For other roles, create basic session and initialize Claude (always fresh start)
|
|
887
889
|
await (await this.getSessionHelper()).createSession(sessionName, projectPath || process.cwd());
|
|
888
890
|
const runtimeService = this.createRuntimeService(runtimeType);
|
|
889
|
-
await runtimeService.executeRuntimeInitScript(sessionName, projectPath, effectiveFlags, promptFilePath);
|
|
891
|
+
await runtimeService.executeRuntimeInitScript(sessionName, projectPath, effectiveFlags, promptFilePath, agentName);
|
|
890
892
|
// Wait for runtime to be ready (simplified detection)
|
|
891
893
|
const checkInterval = this.getCheckInterval();
|
|
892
894
|
const isReady = await this.createRuntimeService(runtimeType)
|
|
@@ -1261,22 +1263,36 @@ After checking in, just say "Ready for tasks" and wait for me to send you work.`
|
|
|
1261
1263
|
}
|
|
1262
1264
|
/**
|
|
1263
1265
|
* Write the registration prompt to a file on disk.
|
|
1264
|
-
*
|
|
1266
|
+
*
|
|
1267
|
+
* For Claude Code agents (#207): writes to `{projectPath}/.claude/agents/{sessionName}.md`
|
|
1268
|
+
* with YAML frontmatter so the `--agent` flag can load it as a custom agent definition.
|
|
1269
|
+
* For other runtimes: writes to `~/.crewly/prompts/{sessionName}-init.md`.
|
|
1265
1270
|
*
|
|
1266
1271
|
* @param sessionName - Session name (used for filename)
|
|
1267
1272
|
* @param prompt - The full prompt content
|
|
1273
|
+
* @param options - Optional: projectPath, runtimeType, and role for claude-code agent mode
|
|
1268
1274
|
* @returns The absolute path to the written file, or undefined on error
|
|
1269
1275
|
*/
|
|
1270
|
-
async writePromptFile(sessionName, prompt) {
|
|
1271
|
-
const
|
|
1276
|
+
async writePromptFile(sessionName, prompt, options) {
|
|
1277
|
+
const isClaudeAgent = options?.runtimeType === RUNTIME_TYPES.CLAUDE_CODE && options?.projectPath;
|
|
1278
|
+
const promptFilePath = isClaudeAgent
|
|
1279
|
+
? path.join(options.projectPath, '.claude', 'agents', `${sessionName}.md`)
|
|
1280
|
+
: this.getInitPromptFilePath(sessionName);
|
|
1272
1281
|
const promptsDir = path.dirname(promptFilePath);
|
|
1282
|
+
// Quote YAML values to prevent injection via sessionName or role containing special chars
|
|
1283
|
+
const yamlSafeName = sessionName.replace(/"/g, '\\"');
|
|
1284
|
+
const yamlSafeRole = (options?.role || 'developer').replace(/"/g, '\\"');
|
|
1285
|
+
const fileContent = isClaudeAgent
|
|
1286
|
+
? `---\nname: "${yamlSafeName}"\ndescription: "${yamlSafeRole} agent for Crewly orchestration"\n---\n\n${prompt}`
|
|
1287
|
+
: prompt;
|
|
1273
1288
|
try {
|
|
1274
1289
|
await mkdir(promptsDir, { recursive: true });
|
|
1275
|
-
await writeFile(promptFilePath,
|
|
1290
|
+
await writeFile(promptFilePath, fileContent, 'utf8');
|
|
1276
1291
|
this.logger.debug('Wrote init prompt to file', {
|
|
1277
1292
|
sessionName,
|
|
1278
1293
|
promptFilePath,
|
|
1279
|
-
promptLength:
|
|
1294
|
+
promptLength: fileContent.length,
|
|
1295
|
+
mode: isClaudeAgent ? 'claude-agent' : 'legacy',
|
|
1280
1296
|
});
|
|
1281
1297
|
return promptFilePath;
|
|
1282
1298
|
}
|
|
@@ -1290,7 +1306,7 @@ After checking in, just say "Ready for tasks" and wait for me to send you work.`
|
|
|
1290
1306
|
}
|
|
1291
1307
|
}
|
|
1292
1308
|
/**
|
|
1293
|
-
* Build the unified init prompt path used by
|
|
1309
|
+
* Build the unified init prompt path used by non-Claude-Code runtimes.
|
|
1294
1310
|
*/
|
|
1295
1311
|
getInitPromptFilePath(sessionName) {
|
|
1296
1312
|
return path.join(os.homedir(), CREWLY_CONSTANTS.PATHS.CREWLY_HOME, 'prompts', `${sessionName}-init.md`);
|
|
@@ -3634,13 +3650,13 @@ After checking in, just say "Ready for tasks" and wait for me to send you work.`
|
|
|
3634
3650
|
return false;
|
|
3635
3651
|
}
|
|
3636
3652
|
// Step 2: Build the message to send.
|
|
3637
|
-
// Claude Code: prompt was already loaded via --
|
|
3638
|
-
// so the agent already has all instructions as
|
|
3653
|
+
// Claude Code: prompt was already loaded via --agent flag at launch (#207),
|
|
3654
|
+
// so the agent already has all instructions as its agent definition. Just send a short
|
|
3639
3655
|
// kickoff trigger — no need to ask it to read the file again.
|
|
3640
3656
|
// Gemini CLI / other runtimes: need the file-read instruction since the prompt
|
|
3641
3657
|
// was NOT loaded via system prompt.
|
|
3642
3658
|
const messageToSend = isClaudeCode
|
|
3643
|
-
? 'Begin your work now. Follow the instructions
|
|
3659
|
+
? 'Begin your work now. Follow the step-by-step instructions in your agent definition EXACTLY — start with Step 1, then Step 2, then Step 3 (register-self). Do NOT skip or reorder steps. Registration is required before the system will deliver messages to you.'
|
|
3644
3660
|
: `Read the file at ${promptFilePath} and follow all instructions in it.`;
|
|
3645
3661
|
// Single attempt for all runtimes. Retrying causes duplicate messages because:
|
|
3646
3662
|
// - Claude Code: returns to its prompt between tool calls, making retry
|