crewly 1.8.9 → 1.8.11
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/constants.d.ts.map +1 -0
- package/config/index.d.ts.map +1 -0
- package/config/roles/_common/memory-instructions.md +6 -5
- package/config/roles/_common/wiki-instructions.md +49 -0
- package/config/roles/architect/prompt.md +2 -2
- package/config/roles/backend-developer/prompt.md +2 -2
- package/config/roles/designer/prompt.md +2 -2
- package/config/roles/developer/prompt.md +2 -2
- package/config/roles/frontend-developer/prompt.md +2 -2
- package/config/roles/fullstack-dev/prompt.md +2 -2
- package/config/roles/generalist/prompt.md +2 -2
- package/config/roles/ops/prompt.md +2 -2
- package/config/roles/orchestrator/prompt.md +135 -11
- package/config/roles/product-manager/prompt.md +2 -2
- package/config/roles/qa/prompt.md +2 -2
- package/config/roles/qa-engineer/prompt.md +2 -2
- package/config/roles/researcher/prompt.md +15 -6
- package/config/roles/sales/prompt.md +2 -2
- package/config/roles/support/prompt.md +2 -2
- package/config/roles/team-leader/prompt.md +17 -2
- package/config/roles/tpm/prompt.md +2 -2
- package/config/roles/ux-designer/prompt.md +2 -2
- package/config/skills/orchestrator/wiki-cleanup/SKILL.md +89 -0
- package/config/skills/orchestrator/wiki-cleanup/execute.sh +139 -0
- package/config/skills/orchestrator/wiki-lint/SKILL.md +75 -0
- package/config/skills/orchestrator/wiki-lint/execute.sh +66 -0
- package/config/skills/orchestrator/wiki-migrate/SKILL.md +103 -0
- package/config/skills/orchestrator/wiki-migrate/execute.sh +82 -0
- package/config/skills/orchestrator/wiki-process-queue/SKILL.md +9 -1
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts +169 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js +1779 -0
- package/dist/backend/backend/src/controllers/task-management/task-management.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +18 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +63 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js +5 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +109 -0
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +418 -4
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +11 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +64 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/index.js.orc-bak-20260529 +3130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +513 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +1568 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts +86 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js +147 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-worker.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts +68 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js +131 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/api-client.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts +74 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js +140 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-trail.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts +29 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js +279 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/auditor-tools.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts +340 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +1176 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js +145 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/deepseek-sse-transform.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts +16 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js +16 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/index.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts +135 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js +185 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/mcp-tool-bridge.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts +141 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js +310 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/model-manager.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js +264 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/rate-limiter.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/smoke-test.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +135 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +1937 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-builder.service.js +1 -1
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts +429 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js +852 -0
- package/dist/backend/backend/src/services/autonomous/auto-assign.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts +171 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js +725 -0
- package/dist/backend/backend/src/services/project/task-tracking.service.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +50 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +45 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +34 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts +118 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js +326 -0
- package/dist/backend/backend/src/services/v3/project-task-watcher.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts +72 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js +186 -0
- package/dist/backend/backend/src/services/wiki/wiki-backlinks.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts +4 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js +24 -1
- package/dist/backend/backend/src/services/wiki/wiki-bookkeep-trigger.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts +74 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js +154 -0
- package/dist/backend/backend/src/services/wiki/wiki-chat-subscriber.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts +160 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +399 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts +182 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js +505 -0
- package/dist/backend/backend/src/services/wiki/wiki-lint.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts +232 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js +1416 -0
- package/dist/backend/backend/src/services/wiki/wiki-migrate.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts +51 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js +102 -0
- package/dist/backend/backend/src/services/wiki/wiki-recent.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts +84 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js +156 -0
- package/dist/backend/backend/src/services/wiki/wiki-reflect-trigger.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +90 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +190 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts +164 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +675 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +65 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/backend/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/auto-assign.types.js +136 -0
- package/dist/backend/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/backend/backend/src/types/cron-task.types.d.ts +16 -1
- package/dist/backend/backend/src/types/cron-task.types.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts +111 -0
- package/dist/backend/backend/src/utils/esm-require.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js +124 -0
- package/dist/backend/backend/src/utils/esm-require.utils.js.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts +220 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js +37 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-module.interface.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts +56 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js +91 -0
- package/dist/cli/backend/src/services/knowledge/fts5-search-strategy.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts +159 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js +304 -0
- package/dist/cli/backend/src/services/knowledge/learnings-index.service.js.map +1 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts +115 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js +215 -0
- package/dist/cli/backend/src/services/knowledge/wiki-compiler.service.js.map +1 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts +78 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.js +179 -0
- package/dist/cli/backend/src/services/memory/embedding-provider.js.map +1 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts +331 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.js +814 -0
- package/dist/cli/backend/src/services/memory/vector-store.service.js.map +1 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts +171 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.js +725 -0
- package/dist/cli/backend/src/services/project/task-tracking.service.js.map +1 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts +19 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +45 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/auto-assign.types.d.ts +271 -0
- package/dist/cli/backend/src/types/auto-assign.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/auto-assign.types.js +136 -0
- package/dist/cli/backend/src/types/auto-assign.types.js.map +1 -0
- package/dist/cli/cli/src/index.js +0 -0
- package/frontend/dist/assets/{index-db3f5041.css → index-068bb4f6.css} +10 -1
- package/frontend/dist/assets/index-c24ceb15.js +4960 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/config/skills/agent/core/query-knowledge/SKILL.md +0 -87
- package/config/skills/agent/core/query-knowledge/execute.sh +0 -30
- package/config/skills/orchestrator/query-knowledge/SKILL.md +0 -75
- package/config/skills/orchestrator/query-knowledge/execute.sh +0 -30
- package/frontend/dist/assets/index-cc115bb4.js +0 -4926
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Auditor Tool Registry
|
|
3
|
+
*
|
|
4
|
+
* Read-only tools for the Auditor agent. These tools allow the auditor
|
|
5
|
+
* to observe agent activity, read logs, check task alignment, and write
|
|
6
|
+
* structured bug reports — without any ability to modify system state.
|
|
7
|
+
*
|
|
8
|
+
* @module services/agent/crewly-agent/auditor-tools
|
|
9
|
+
*/
|
|
10
|
+
import { promises as fsPromises } from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { convertMarkdownToSlackMrkdwn } from './tool-registry.js';
|
|
14
|
+
/** Severity levels for audit findings */
|
|
15
|
+
const AUDIT_SEVERITIES = ['critical', 'high', 'medium', 'low'];
|
|
16
|
+
/**
|
|
17
|
+
* Create the auditor tool set for the Crewly Auditor agent.
|
|
18
|
+
*
|
|
19
|
+
* All tools are read-only except `write_audit_report` which appends
|
|
20
|
+
* to the audit log file.
|
|
21
|
+
*
|
|
22
|
+
* @param client - API client for Crewly REST API calls
|
|
23
|
+
* @param projectPath - Project root path for file operations
|
|
24
|
+
* @returns Object of named tools for the auditor agent
|
|
25
|
+
*/
|
|
26
|
+
export function createAuditorTools(client, projectPath) {
|
|
27
|
+
const auditDir = path.join(projectPath, '.crewly', 'audit');
|
|
28
|
+
const bugsFile = path.join(auditDir, 'bugs.md');
|
|
29
|
+
return {
|
|
30
|
+
get_team_status: {
|
|
31
|
+
description: 'Get status of all teams and their agents. Returns team names, member statuses, and runtime types.',
|
|
32
|
+
inputSchema: z.object({}),
|
|
33
|
+
execute: async () => {
|
|
34
|
+
const result = await client.get('/teams');
|
|
35
|
+
return result.success ? result.data : { error: result.error };
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
get_agent_logs: {
|
|
39
|
+
description: 'Get recent terminal output from an agent session. Use to inspect agent activity and detect errors.',
|
|
40
|
+
inputSchema: z.object({
|
|
41
|
+
sessionName: z.string().describe('Agent session name'),
|
|
42
|
+
lines: z.number().default(50).describe('Number of lines to retrieve'),
|
|
43
|
+
}),
|
|
44
|
+
execute: async (args) => {
|
|
45
|
+
const { sessionName, lines } = args;
|
|
46
|
+
const result = await client.get(`/terminal/${sessionName}/output?lines=${lines}`);
|
|
47
|
+
return result.success ? result.data : { error: result.error };
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
get_tasks: {
|
|
51
|
+
description: 'Get all tracked tasks for a project. Use to detect stale, failed, or orphaned tasks.',
|
|
52
|
+
inputSchema: z.object({
|
|
53
|
+
projectPath: z.string().describe('Project path'),
|
|
54
|
+
status: z.string().optional().describe('Filter by status (open, in_progress, done, failed)'),
|
|
55
|
+
}),
|
|
56
|
+
execute: async (args) => {
|
|
57
|
+
// V3-only as of spec 2026-05-06-task-management-v1-deprecation.md.
|
|
58
|
+
// The V3 task-pool is global; `projectPath` is no longer a filter.
|
|
59
|
+
const { status } = args;
|
|
60
|
+
const query = status ? `?status=${encodeURIComponent(status)}` : '';
|
|
61
|
+
const result = await client.get(`/task-pool/items${query}`);
|
|
62
|
+
return result.success ? result.data : { error: result.error };
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
recall_goals: {
|
|
66
|
+
description: 'Retrieve current project goals, OKRs, and objectives from memory. Use to check goal alignment.',
|
|
67
|
+
inputSchema: z.object({
|
|
68
|
+
context: z.string().default('current project goals OKR objectives priorities').describe('Search context'),
|
|
69
|
+
}),
|
|
70
|
+
execute: async (args) => {
|
|
71
|
+
const { context } = args;
|
|
72
|
+
const result = await client.post('/memory/recall', {
|
|
73
|
+
context,
|
|
74
|
+
scope: 'project',
|
|
75
|
+
});
|
|
76
|
+
return result.success ? result.data : { error: result.error };
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
heartbeat: {
|
|
80
|
+
description: 'System health check. Returns teams, projects, and queue status in one call.',
|
|
81
|
+
inputSchema: z.object({}),
|
|
82
|
+
execute: async () => {
|
|
83
|
+
const [teams, projects] = await Promise.all([
|
|
84
|
+
client.get('/teams'),
|
|
85
|
+
client.get('/projects'),
|
|
86
|
+
]);
|
|
87
|
+
return {
|
|
88
|
+
teams: teams.success ? teams.data : { error: teams.error },
|
|
89
|
+
projects: projects.success ? projects.data : { error: projects.error },
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
};
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
get_agent_status: {
|
|
95
|
+
description: 'Get the current status of a specific agent by session name.',
|
|
96
|
+
inputSchema: z.object({
|
|
97
|
+
sessionName: z.string().describe('Agent session name to check'),
|
|
98
|
+
}),
|
|
99
|
+
execute: async (args) => {
|
|
100
|
+
const { sessionName } = args;
|
|
101
|
+
const result = await client.get('/teams');
|
|
102
|
+
if (!result.success)
|
|
103
|
+
return { error: result.error };
|
|
104
|
+
const teams = result.data;
|
|
105
|
+
for (const team of teams) {
|
|
106
|
+
const member = team.members?.find(m => m.sessionName === sessionName);
|
|
107
|
+
if (member)
|
|
108
|
+
return member;
|
|
109
|
+
}
|
|
110
|
+
return { error: `Agent '${sessionName}' not found` };
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
subscribe_event: {
|
|
114
|
+
description: 'Subscribe to agent lifecycle events for monitoring. Read-only observation.',
|
|
115
|
+
inputSchema: z.object({
|
|
116
|
+
eventType: z.string().describe('Event type (e.g., "agent:idle", "agent:busy", "agent:status_changed")'),
|
|
117
|
+
filter: z.record(z.string()).optional().describe('Event filter criteria'),
|
|
118
|
+
oneShot: z.boolean().default(false).describe('Auto-unsubscribe after first event'),
|
|
119
|
+
}),
|
|
120
|
+
execute: async (args) => {
|
|
121
|
+
const { eventType, filter, oneShot } = args;
|
|
122
|
+
const result = await client.post('/events/subscribe', {
|
|
123
|
+
eventType,
|
|
124
|
+
filter,
|
|
125
|
+
oneShot,
|
|
126
|
+
target: 'crewly-auditor',
|
|
127
|
+
});
|
|
128
|
+
return result.success ? result.data : { error: result.error };
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
write_audit_report: {
|
|
132
|
+
description: 'Append a structured audit finding to the bugs.md file. Use when you detect a problem.',
|
|
133
|
+
inputSchema: z.object({
|
|
134
|
+
severity: z.enum(AUDIT_SEVERITIES).describe('Problem severity level'),
|
|
135
|
+
agents: z.array(z.string()).describe('Session names of involved agents'),
|
|
136
|
+
title: z.string().describe('Short problem title'),
|
|
137
|
+
description: z.string().describe('Detailed problem description'),
|
|
138
|
+
evidence: z.string().describe('Log excerpts or data supporting the finding'),
|
|
139
|
+
suggestion: z.string().describe('Recommended fix or action'),
|
|
140
|
+
}),
|
|
141
|
+
execute: async (args) => {
|
|
142
|
+
const { severity, agents, title, description, evidence, suggestion } = args;
|
|
143
|
+
const timestamp = new Date().toISOString();
|
|
144
|
+
const severityIcon = severity === 'critical' ? '🔴' : severity === 'high' ? '🟠' : severity === 'medium' ? '🟡' : '🔵';
|
|
145
|
+
const entry = [
|
|
146
|
+
'',
|
|
147
|
+
`### ${severityIcon} [${severity.toUpperCase()}] ${title}`,
|
|
148
|
+
`**Time:** ${timestamp}`,
|
|
149
|
+
`**Agents:** ${agents.join(', ')}`,
|
|
150
|
+
'',
|
|
151
|
+
description,
|
|
152
|
+
'',
|
|
153
|
+
'**Evidence:**',
|
|
154
|
+
'```',
|
|
155
|
+
evidence,
|
|
156
|
+
'```',
|
|
157
|
+
'',
|
|
158
|
+
`**Suggestion:** ${suggestion}`,
|
|
159
|
+
'',
|
|
160
|
+
'---',
|
|
161
|
+
'',
|
|
162
|
+
].join('\n');
|
|
163
|
+
// Ensure audit directory exists
|
|
164
|
+
await fsPromises.mkdir(auditDir, { recursive: true });
|
|
165
|
+
// Append to bugs.md (create with header if new)
|
|
166
|
+
let existing = '';
|
|
167
|
+
try {
|
|
168
|
+
existing = await fsPromises.readFile(bugsFile, 'utf8');
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
existing = '# Crewly Audit — Bug Reports\n\nAutomated findings from the Crewly Auditor agent.\n\n---\n';
|
|
172
|
+
}
|
|
173
|
+
await fsPromises.writeFile(bugsFile, existing + entry, 'utf8');
|
|
174
|
+
return {
|
|
175
|
+
success: true,
|
|
176
|
+
file: bugsFile,
|
|
177
|
+
severity,
|
|
178
|
+
title,
|
|
179
|
+
timestamp,
|
|
180
|
+
};
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
reply_slack: {
|
|
184
|
+
description: 'Send a message directly to a Slack thread. Use this to respond to user questions when SLACK_CONTEXT is present. Supports Slack mrkdwn formatting.',
|
|
185
|
+
inputSchema: z.object({
|
|
186
|
+
text: z.string().describe('Message text in Slack mrkdwn format'),
|
|
187
|
+
channelId: z.string().describe('Slack channel ID from SLACK_CONTEXT'),
|
|
188
|
+
threadTs: z.string().describe('Slack thread timestamp from SLACK_CONTEXT'),
|
|
189
|
+
}),
|
|
190
|
+
execute: async (args) => {
|
|
191
|
+
const { text, channelId, threadTs } = args;
|
|
192
|
+
// #181: Convert markdown to Slack mrkdwn format
|
|
193
|
+
const slackText = convertMarkdownToSlackMrkdwn(text);
|
|
194
|
+
const result = await client.post('/slack/send', { channelId, text: slackText, threadTs });
|
|
195
|
+
return result.success ? { sent: true } : { error: result.error };
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
create_github_issue: {
|
|
199
|
+
description: 'Create a GitHub issue for a bug or enhancement found during audit (#178). Deduplicates: checks existing open issues before creating. Requires gh CLI to be available.',
|
|
200
|
+
inputSchema: z.object({
|
|
201
|
+
title: z.string().describe('Issue title (include severity prefix like [Critical], [High], [Medium])'),
|
|
202
|
+
body: z.string().describe('Issue body in markdown format'),
|
|
203
|
+
labels: z.array(z.string()).default(['bug']).describe('GitHub labels (e.g., bug, enhancement)'),
|
|
204
|
+
}),
|
|
205
|
+
execute: async (args) => {
|
|
206
|
+
const { title, body, labels } = args;
|
|
207
|
+
const { execSync } = await import('child_process');
|
|
208
|
+
try {
|
|
209
|
+
// Dedup: search for existing open issues with similar title
|
|
210
|
+
const searchQuery = title.replace(/\[.*?\]\s*/, '').slice(0, 50);
|
|
211
|
+
let existingIssues = '';
|
|
212
|
+
try {
|
|
213
|
+
existingIssues = execSync(`gh issue list --state open --search "${searchQuery.replace(/"/g, '\\"')}" --json number,title --limit 5`, { encoding: 'utf-8', timeout: 15000 });
|
|
214
|
+
}
|
|
215
|
+
catch { /* gh not available or no repo */ }
|
|
216
|
+
if (existingIssues) {
|
|
217
|
+
const issues = JSON.parse(existingIssues);
|
|
218
|
+
const duplicate = issues.find((i) => i.title.toLowerCase().includes(searchQuery.toLowerCase().slice(0, 30)));
|
|
219
|
+
if (duplicate) {
|
|
220
|
+
return {
|
|
221
|
+
success: true,
|
|
222
|
+
created: false,
|
|
223
|
+
duplicate: true,
|
|
224
|
+
existingIssue: `#${duplicate.number}: ${duplicate.title}`,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Create the issue
|
|
229
|
+
const labelFlag = labels.map(l => `--label "${l}"`).join(' ');
|
|
230
|
+
const result = execSync(`gh issue create --title "${title.replace(/"/g, '\\"')}" --body "${body.replace(/"/g, '\\"')}" ${labelFlag}`, { encoding: 'utf-8', timeout: 30000 });
|
|
231
|
+
const issueUrl = result.trim();
|
|
232
|
+
return { success: true, created: true, url: issueUrl, title };
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
return {
|
|
236
|
+
success: false,
|
|
237
|
+
error: error instanceof Error ? error.message : String(error),
|
|
238
|
+
note: 'GitHub CLI (gh) may not be installed or authenticated',
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
read_audit_history: {
|
|
244
|
+
description: 'Read previous audit findings from bugs.md. Use to avoid duplicate reports.',
|
|
245
|
+
inputSchema: z.object({
|
|
246
|
+
lastN: z.number().default(10).describe('Number of recent findings to return'),
|
|
247
|
+
}),
|
|
248
|
+
execute: async (args) => {
|
|
249
|
+
const { lastN } = args;
|
|
250
|
+
try {
|
|
251
|
+
const content = await fsPromises.readFile(bugsFile, 'utf8');
|
|
252
|
+
// Split on --- separator, take last N entries
|
|
253
|
+
const entries = content.split('---').filter(e => e.trim());
|
|
254
|
+
const recent = entries.slice(-lastN);
|
|
255
|
+
return {
|
|
256
|
+
totalFindings: entries.length - 1, // subtract header
|
|
257
|
+
recentFindings: recent.join('---'),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return { totalFindings: 0, recentFindings: 'No audit history found.' };
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get the list of auditor tool names.
|
|
269
|
+
*
|
|
270
|
+
* @returns Array of auditor tool name strings
|
|
271
|
+
*/
|
|
272
|
+
export function getAuditorToolNames() {
|
|
273
|
+
return [
|
|
274
|
+
'get_team_status', 'get_agent_logs', 'get_tasks', 'recall_goals',
|
|
275
|
+
'heartbeat', 'get_agent_status', 'subscribe_event',
|
|
276
|
+
'write_audit_report', 'reply_slack', 'read_audit_history', 'create_github_issue',
|
|
277
|
+
];
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=auditor-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditor-tools.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/auditor-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Crewly Agent Runtime Service
|
|
3
|
+
*
|
|
4
|
+
* Concrete RuntimeAgentService subclass for the Crewly Agent.
|
|
5
|
+
* Supports two execution modes:
|
|
6
|
+
* - **In-process** (default): AgentRunner runs in the main Node.js process
|
|
7
|
+
* - **Worker process**: AgentRunner runs in a child process via fork(),
|
|
8
|
+
* enabling hot-reload and crash isolation
|
|
9
|
+
*
|
|
10
|
+
* @module services/agent/crewly-agent/crewly-agent-runtime.service
|
|
11
|
+
*/
|
|
12
|
+
import { RuntimeAgentService } from '../runtime-agent.service.abstract.js';
|
|
13
|
+
import { AgentRunnerService } from './agent-runner.service.js';
|
|
14
|
+
import { type RuntimeType } from '../../../constants.js';
|
|
15
|
+
import type { CrewlyAgentConfig, AgentRunResult } from './types.js';
|
|
16
|
+
import { SessionCommandHelper } from '../../session/index.js';
|
|
17
|
+
/**
|
|
18
|
+
* Crewly Agent runtime with optional worker process isolation.
|
|
19
|
+
*
|
|
20
|
+
* Supports two modes:
|
|
21
|
+
* - **In-process** (default): AgentRunner runs directly in the main process
|
|
22
|
+
* - **Worker process** (`useWorkerProcess: true`): AgentRunner runs in a
|
|
23
|
+
* forked child process, enabling hot-reload and crash isolation
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // In-process mode (default)
|
|
28
|
+
* const runtime = new CrewlyAgentRuntimeService(sessionHelper, projectRoot);
|
|
29
|
+
* await runtime.initializeInProcess('crewly-orc');
|
|
30
|
+
*
|
|
31
|
+
* // Worker process mode
|
|
32
|
+
* const runtime = new CrewlyAgentRuntimeService(sessionHelper, projectRoot);
|
|
33
|
+
* await runtime.initializeInProcess('crewly-orc', { useWorkerProcess: true });
|
|
34
|
+
*
|
|
35
|
+
* // Hot-reload: restart worker with fresh code, preserving session
|
|
36
|
+
* await runtime.hotReload();
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare class CrewlyAgentRuntimeService extends RuntimeAgentService {
|
|
40
|
+
private agentRunner;
|
|
41
|
+
private initialized;
|
|
42
|
+
private currentSessionName;
|
|
43
|
+
private currentMemberId;
|
|
44
|
+
private currentModelString;
|
|
45
|
+
private logBuffer;
|
|
46
|
+
private rateLimiter;
|
|
47
|
+
private heartbeatTimer;
|
|
48
|
+
/** AbortController for the currently executing message — enables external abort */
|
|
49
|
+
private messageAbortController;
|
|
50
|
+
/** Whether this instance uses a worker process instead of in-process execution */
|
|
51
|
+
private useWorkerProcess;
|
|
52
|
+
/** The forked worker child process */
|
|
53
|
+
private workerProcess;
|
|
54
|
+
/** Stored config for hot-reload — needed to re-init the worker */
|
|
55
|
+
private storedConfig;
|
|
56
|
+
/** Pending promise resolver for the current worker run */
|
|
57
|
+
private workerRunResolve;
|
|
58
|
+
/** Pending promise rejector for the current worker run */
|
|
59
|
+
private workerRunReject;
|
|
60
|
+
/** Whether the worker is currently processing a message */
|
|
61
|
+
private workerProcessing;
|
|
62
|
+
constructor(sessionHelper: SessionCommandHelper, projectRoot: string);
|
|
63
|
+
/**
|
|
64
|
+
* Get the runtime type identifier.
|
|
65
|
+
*
|
|
66
|
+
* @returns 'crewly-agent' runtime type constant
|
|
67
|
+
*/
|
|
68
|
+
protected getRuntimeType(): RuntimeType;
|
|
69
|
+
/**
|
|
70
|
+
* Detect if the Crewly Agent runtime is running.
|
|
71
|
+
* For in-process runtime, this checks if the AgentRunner is initialized.
|
|
72
|
+
*
|
|
73
|
+
* @param _sessionName - Session name (unused for in-process runtime)
|
|
74
|
+
* @returns True if the agent runner is initialized
|
|
75
|
+
*/
|
|
76
|
+
protected detectRuntimeSpecific(_sessionName: string): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Get patterns that indicate the runtime is ready.
|
|
79
|
+
* For in-process runtime, there are no terminal patterns — readiness is checked programmatically.
|
|
80
|
+
*
|
|
81
|
+
* @returns Empty array (no terminal output to match)
|
|
82
|
+
*/
|
|
83
|
+
protected getRuntimeReadyPatterns(): string[];
|
|
84
|
+
/**
|
|
85
|
+
* Get patterns that indicate runtime errors.
|
|
86
|
+
*
|
|
87
|
+
* @returns Empty array (errors are thrown as exceptions, not terminal patterns)
|
|
88
|
+
*/
|
|
89
|
+
protected getRuntimeErrorPatterns(): string[];
|
|
90
|
+
/**
|
|
91
|
+
* Get patterns that indicate the runtime has exited.
|
|
92
|
+
*
|
|
93
|
+
* @returns Empty array (in-process runtime doesn't exit via terminal)
|
|
94
|
+
*/
|
|
95
|
+
protected getRuntimeExitPatterns(): RegExp[];
|
|
96
|
+
/**
|
|
97
|
+
* Initialize the agent runtime.
|
|
98
|
+
*
|
|
99
|
+
* Loads the system prompt from config/roles/orchestrator/prompt.md,
|
|
100
|
+
* creates the AgentRunnerService (in-process or worker), and initializes the model.
|
|
101
|
+
*
|
|
102
|
+
* Onboarding v3 (B3): when the role is `'orchestrator'` and the cold-start
|
|
103
|
+
* detector ({@link OnboardingBootstrapService}) reports a fresh OSS install,
|
|
104
|
+
* the runtime swaps the role prompt for the onboarding-mode prompt
|
|
105
|
+
* ({@link loadOnboardingPrompt}) and flips persisted state to
|
|
106
|
+
* `mode: 'onboarding'`. The state-persistence checkpoint is saved before
|
|
107
|
+
* the AgentRunner initialises so a crash mid-init still resumes correctly.
|
|
108
|
+
*
|
|
109
|
+
* @param sessionName - Session name for this agent instance
|
|
110
|
+
* @param config - Optional partial config overrides. Set `useWorkerProcess: true` to run in a child process.
|
|
111
|
+
* @param roleName - Role name for system prompt lookup (default: 'orchestrator')
|
|
112
|
+
*/
|
|
113
|
+
initializeInProcess(sessionName: string, config?: Partial<CrewlyAgentConfig> & {
|
|
114
|
+
useWorkerProcess?: boolean;
|
|
115
|
+
}, roleName?: string): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Decide whether this orc bootstrap should enter onboarding mode.
|
|
118
|
+
*
|
|
119
|
+
* Returns false (no-op) for non-orchestrator roles, when the bootstrap
|
|
120
|
+
* service hasn't been wired yet, or when detection throws — fail-closed
|
|
121
|
+
* so transient errors never falsely trigger onboarding.
|
|
122
|
+
*
|
|
123
|
+
* Side effects: when true, flips the persisted orchestrator mode to
|
|
124
|
+
* `'onboarding'` and saves a checkpoint immediately, so a crash before
|
|
125
|
+
* the AgentRunner finishes initialising still resumes in onboarding mode.
|
|
126
|
+
*
|
|
127
|
+
* @param roleName - The resolved role name for this bootstrap
|
|
128
|
+
* @returns True iff cold-start fired and the prompt should be swapped
|
|
129
|
+
*/
|
|
130
|
+
private detectOnboardingMode;
|
|
131
|
+
/**
|
|
132
|
+
* Best-effort `firstLaunchedAt` marker write for the project at
|
|
133
|
+
* `projectPath`.
|
|
134
|
+
*
|
|
135
|
+
* Resolves the project record by matching `Project.path` against the
|
|
136
|
+
* given path, then delegates to `OnboardingBootstrapService.markProjectAsLaunched`.
|
|
137
|
+
* No-op if the bootstrap service isn't wired or if no project record
|
|
138
|
+
* matches (fresh installs without an explicit project bind never reach
|
|
139
|
+
* this branch — the orc bootstrap doesn't pass `projectPath` then).
|
|
140
|
+
*
|
|
141
|
+
* @param projectPath - Absolute filesystem path of the bound project
|
|
142
|
+
*/
|
|
143
|
+
private markFirstLaunchForCwd;
|
|
144
|
+
/**
|
|
145
|
+
* Handle an incoming message by routing it to the AgentRunner.
|
|
146
|
+
*
|
|
147
|
+
* This is the primary entry point for message delivery, replacing
|
|
148
|
+
* the PTY write path used by other runtimes.
|
|
149
|
+
*
|
|
150
|
+
* @param message - The message to process
|
|
151
|
+
* @param metadata - Optional metadata (e.g. Slack channelId, threadTs)
|
|
152
|
+
* @returns Agent run result with text response and tool call records
|
|
153
|
+
* @throws Error if the runtime is not initialized
|
|
154
|
+
*/
|
|
155
|
+
handleMessage(message: string, metadata?: Record<string, string>): Promise<AgentRunResult>;
|
|
156
|
+
/**
|
|
157
|
+
* Execute a single message against the AgentRunner.
|
|
158
|
+
*
|
|
159
|
+
* Separated from handleMessage to allow the rate limiter to wrap this
|
|
160
|
+
* with throttling, coalescing, and 429 retry logic.
|
|
161
|
+
*
|
|
162
|
+
* @param session - Session name
|
|
163
|
+
* @param cleanMessage - Message content (prefix already stripped)
|
|
164
|
+
* @param conversationId - Optional conversation ID
|
|
165
|
+
* @param metadata - Optional metadata
|
|
166
|
+
* @returns Agent run result
|
|
167
|
+
*/
|
|
168
|
+
private executeMessage;
|
|
169
|
+
/**
|
|
170
|
+
* Record token usage to the TokenUsageService if tracking is enabled in settings.
|
|
171
|
+
*
|
|
172
|
+
* @param session - Session name
|
|
173
|
+
* @param result - Agent run result containing usage data
|
|
174
|
+
*/
|
|
175
|
+
private recordTokenUsageIfEnabled;
|
|
176
|
+
/**
|
|
177
|
+
* Check if the runtime is initialized and ready to handle messages.
|
|
178
|
+
*
|
|
179
|
+
* @returns True if initializeInProcess() has been called successfully
|
|
180
|
+
*/
|
|
181
|
+
isReady(): boolean;
|
|
182
|
+
/**
|
|
183
|
+
* Abort the currently executing message processing.
|
|
184
|
+
*
|
|
185
|
+
* Cancels the active model call, terminates running tool processes,
|
|
186
|
+
* and returns partial results where possible. Safe to call at any time —
|
|
187
|
+
* returns false if no run is in progress.
|
|
188
|
+
*
|
|
189
|
+
* @returns True if an active run was aborted, false if nothing was running
|
|
190
|
+
*/
|
|
191
|
+
abortCurrentRun(): boolean;
|
|
192
|
+
/**
|
|
193
|
+
* Get the current agent runner instance (for inspection/testing).
|
|
194
|
+
*
|
|
195
|
+
* @returns The AgentRunnerService instance, or null if not initialized
|
|
196
|
+
*/
|
|
197
|
+
getAgentRunner(): AgentRunnerService | null;
|
|
198
|
+
/**
|
|
199
|
+
* Get the session name this runtime was initialized with.
|
|
200
|
+
*
|
|
201
|
+
* @returns Session name string, or null if not initialized
|
|
202
|
+
*/
|
|
203
|
+
getSessionName(): string | null;
|
|
204
|
+
/**
|
|
205
|
+
* Shut down the in-process runtime.
|
|
206
|
+
* Clears the agent runner and resets state.
|
|
207
|
+
*/
|
|
208
|
+
shutdown(): void;
|
|
209
|
+
/**
|
|
210
|
+
* Hot-reload the worker process.
|
|
211
|
+
*
|
|
212
|
+
* Kills the existing worker and spawns a fresh one with the stored config.
|
|
213
|
+
* This allows updating agent code without restarting the main backend.
|
|
214
|
+
* Conversation state is reset — use this when deploying new agent logic.
|
|
215
|
+
*
|
|
216
|
+
* @throws Error if not in worker mode or config is missing
|
|
217
|
+
*/
|
|
218
|
+
hotReload(): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Check if the runtime is using a worker process.
|
|
221
|
+
*
|
|
222
|
+
* @returns True if running in worker process mode
|
|
223
|
+
*/
|
|
224
|
+
isWorkerMode(): boolean;
|
|
225
|
+
/**
|
|
226
|
+
* Get the worker process PID (for monitoring/debugging).
|
|
227
|
+
*
|
|
228
|
+
* @returns Worker PID, or null if not in worker mode or worker is not running
|
|
229
|
+
*/
|
|
230
|
+
getWorkerPid(): number | null;
|
|
231
|
+
/**
|
|
232
|
+
* Initialize a worker child process via fork().
|
|
233
|
+
*
|
|
234
|
+
* Forks the agent-worker.ts entry point and sends the init message
|
|
235
|
+
* with the agent config. Waits for the 'ready' response before resolving.
|
|
236
|
+
*
|
|
237
|
+
* @param config - Full agent config to send to the worker
|
|
238
|
+
* @throws Error if worker fails to initialize within timeout
|
|
239
|
+
*/
|
|
240
|
+
private initializeWorker;
|
|
241
|
+
/**
|
|
242
|
+
* Execute a message via the worker process using IPC.
|
|
243
|
+
*
|
|
244
|
+
* Sends a 'run' message to the worker and waits for the 'result' or 'error'
|
|
245
|
+
* response. Streaming events are forwarded to the InProcessLogBuffer in real-time.
|
|
246
|
+
*
|
|
247
|
+
* @param session - Session name
|
|
248
|
+
* @param cleanMessage - Message content (prefix already stripped)
|
|
249
|
+
* @param conversationId - Optional conversation ID
|
|
250
|
+
* @param _metadata - Optional metadata (passed to worker)
|
|
251
|
+
* @returns Agent run result from the worker
|
|
252
|
+
*/
|
|
253
|
+
private executeMessageViaWorker;
|
|
254
|
+
/**
|
|
255
|
+
* Handle messages received from the worker process.
|
|
256
|
+
*
|
|
257
|
+
* Routes streaming events to the InProcessLogBuffer and resolves/rejects
|
|
258
|
+
* pending run promises on result/error messages.
|
|
259
|
+
*
|
|
260
|
+
* @param msg - Worker message received via IPC
|
|
261
|
+
*/
|
|
262
|
+
private handleWorkerMessage;
|
|
263
|
+
/**
|
|
264
|
+
* Send a typed message to the worker process.
|
|
265
|
+
*
|
|
266
|
+
* @param msg - Parent message to send
|
|
267
|
+
*/
|
|
268
|
+
private sendToWorker;
|
|
269
|
+
/**
|
|
270
|
+
* Terminate the worker process gracefully, with a forced kill fallback.
|
|
271
|
+
*/
|
|
272
|
+
private terminateWorker;
|
|
273
|
+
/**
|
|
274
|
+
* Get the path to the compiled worker entry file.
|
|
275
|
+
*
|
|
276
|
+
* @returns Absolute path to the agent-worker.js compiled file
|
|
277
|
+
*/
|
|
278
|
+
/**
|
|
279
|
+
* @internal Visible for testing — override to provide a custom worker path.
|
|
280
|
+
*/
|
|
281
|
+
_workerEntryPath: string | null;
|
|
282
|
+
private getWorkerEntryPath;
|
|
283
|
+
/**
|
|
284
|
+
* Start periodic heartbeat to keep the in-process agent marked as active.
|
|
285
|
+
*
|
|
286
|
+
* Unlike PTY-based agents that get implicit heartbeats from every API call
|
|
287
|
+
* via the middleware, in-process agents only touch the API during message
|
|
288
|
+
* processing. Between messages, this timer ensures the agent stays registered
|
|
289
|
+
* as active in teamAgentStatus.json and the PtyActivityTracker.
|
|
290
|
+
*
|
|
291
|
+
* @param sessionName - Session name to heartbeat for
|
|
292
|
+
*/
|
|
293
|
+
private startHeartbeat;
|
|
294
|
+
/**
|
|
295
|
+
* Stop the periodic heartbeat timer.
|
|
296
|
+
*/
|
|
297
|
+
private stopHeartbeat;
|
|
298
|
+
/**
|
|
299
|
+
* Load the base system prompt for a given role from file.
|
|
300
|
+
*
|
|
301
|
+
* @param roleName - Role name (maps to config/roles/{roleName}/prompt.md)
|
|
302
|
+
* @returns System prompt content, or a generic fallback if file is missing
|
|
303
|
+
*/
|
|
304
|
+
private loadSystemPrompt;
|
|
305
|
+
/**
|
|
306
|
+
* Build an enhanced system prompt that includes the base role prompt
|
|
307
|
+
* plus awareness of available skills and installed addons.
|
|
308
|
+
*
|
|
309
|
+
* Sections appended:
|
|
310
|
+
* 1. Available Skills - summary from AGENT_SKILLS_CATALOG.md
|
|
311
|
+
* 2. Installed Addons - names and versions from each addon's manifest.json
|
|
312
|
+
* 3. Instructions - basic behavioral guidance for the agent
|
|
313
|
+
*
|
|
314
|
+
* All file reads are wrapped in try/catch so missing files are gracefully skipped.
|
|
315
|
+
*
|
|
316
|
+
* @param roleName - Role name for the base prompt lookup
|
|
317
|
+
* @returns Combined system prompt string
|
|
318
|
+
*/
|
|
319
|
+
buildEnhancedSystemPrompt(roleName?: string): Promise<string>;
|
|
320
|
+
/**
|
|
321
|
+
* Load and summarize the agent skills catalog file.
|
|
322
|
+
*
|
|
323
|
+
* Reads ~/.crewly/skills/AGENT_SKILLS_CATALOG.md and extracts up to
|
|
324
|
+
* the first 50 lines as a summary. Returns null if the file is missing.
|
|
325
|
+
*
|
|
326
|
+
* @returns Skills summary string, or null if unavailable
|
|
327
|
+
*/
|
|
328
|
+
private loadSkillsCatalogSummary;
|
|
329
|
+
/**
|
|
330
|
+
* Scan installed addons and build a summary list.
|
|
331
|
+
*
|
|
332
|
+
* Reads manifest.json from each subdirectory under the addons directory
|
|
333
|
+
* and returns a markdown list of addon names, versions, and descriptions.
|
|
334
|
+
* Returns null if no addons are installed.
|
|
335
|
+
*
|
|
336
|
+
* @returns Addon list string, or null if no addons found
|
|
337
|
+
*/
|
|
338
|
+
private loadInstalledAddons;
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=crewly-agent-runtime.service.d.ts.map
|
package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewly-agent-runtime.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.ts"],"names":[],"mappings":"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"}
|