crewly 1.20.133 → 1.20.134
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/dist/backend/backend/src/constants.d.ts +82 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +87 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/bundle/bundle.controller.d.ts +44 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.controller.js +122 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.routes.js +33 -0
- package/dist/backend/backend/src/controllers/bundle/bundle.routes.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +14 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +4 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/bundle/bundle-apply.factory.d.ts +62 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.factory.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.factory.js +173 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.factory.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.service.d.ts +359 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.service.js +888 -0
- package/dist/backend/backend/src/services/bundle/bundle-apply.service.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-catalog.d.ts +167 -0
- package/dist/backend/backend/src/services/bundle/bundle-catalog.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-catalog.js +248 -0
- package/dist/backend/backend/src/services/bundle/bundle-catalog.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-connectors.d.ts +43 -0
- package/dist/backend/backend/src/services/bundle/bundle-connectors.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-connectors.js +57 -0
- package/dist/backend/backend/src/services/bundle/bundle-connectors.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-deps.d.ts +37 -0
- package/dist/backend/backend/src/services/bundle/bundle-deps.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-deps.js +60 -0
- package/dist/backend/backend/src/services/bundle/bundle-deps.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-manifest.d.ts +93 -0
- package/dist/backend/backend/src/services/bundle/bundle-manifest.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-manifest.js +532 -0
- package/dist/backend/backend/src/services/bundle/bundle-manifest.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-placeholders.d.ts +100 -0
- package/dist/backend/backend/src/services/bundle/bundle-placeholders.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-placeholders.js +183 -0
- package/dist/backend/backend/src/services/bundle/bundle-placeholders.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-runtime.d.ts +36 -0
- package/dist/backend/backend/src/services/bundle/bundle-runtime.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-runtime.js +38 -0
- package/dist/backend/backend/src/services/bundle/bundle-runtime.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-skill-installer.d.ts +105 -0
- package/dist/backend/backend/src/services/bundle/bundle-skill-installer.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-skill-installer.js +144 -0
- package/dist/backend/backend/src/services/bundle/bundle-skill-installer.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-state.store.d.ts +48 -0
- package/dist/backend/backend/src/services/bundle/bundle-state.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-state.store.js +90 -0
- package/dist/backend/backend/src/services/bundle/bundle-state.store.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-team.builder.d.ts +81 -0
- package/dist/backend/backend/src/services/bundle/bundle-team.builder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-team.builder.js +172 -0
- package/dist/backend/backend/src/services/bundle/bundle-team.builder.js.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-time.d.ts +59 -0
- package/dist/backend/backend/src/services/bundle/bundle-time.d.ts.map +1 -0
- package/dist/backend/backend/src/services/bundle/bundle-time.js +98 -0
- package/dist/backend/backend/src/services/bundle/bundle-time.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js +5 -0
- package/dist/backend/backend/src/services/cloud/mobile-api-relay.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/teams-backup.service.js +4 -2
- package/dist/backend/backend/src/services/core/teams-backup.service.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.d.ts.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.js +2 -0
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.factory.js.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.d.ts +14 -2
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.js +37 -1
- package/dist/backend/backend/src/services/onboarding/onboarding-checklist.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +21 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +85 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +5 -2
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- 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 +4 -2
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/solution-bundle.types.d.ts +367 -0
- package/dist/backend/backend/src/types/solution-bundle.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/solution-bundle.types.js +17 -0
- package/dist/backend/backend/src/types/solution-bundle.types.js.map +1 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts +8 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +82 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +87 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/bundle/bundle-apply.service.d.ts +359 -0
- package/dist/cli/backend/src/services/bundle/bundle-apply.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-apply.service.js +888 -0
- package/dist/cli/backend/src/services/bundle/bundle-apply.service.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-catalog.d.ts +167 -0
- package/dist/cli/backend/src/services/bundle/bundle-catalog.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-catalog.js +248 -0
- package/dist/cli/backend/src/services/bundle/bundle-catalog.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-deps.d.ts +37 -0
- package/dist/cli/backend/src/services/bundle/bundle-deps.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-deps.js +60 -0
- package/dist/cli/backend/src/services/bundle/bundle-deps.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-manifest.d.ts +93 -0
- package/dist/cli/backend/src/services/bundle/bundle-manifest.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-manifest.js +532 -0
- package/dist/cli/backend/src/services/bundle/bundle-manifest.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-placeholders.d.ts +100 -0
- package/dist/cli/backend/src/services/bundle/bundle-placeholders.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-placeholders.js +183 -0
- package/dist/cli/backend/src/services/bundle/bundle-placeholders.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-runtime.d.ts +36 -0
- package/dist/cli/backend/src/services/bundle/bundle-runtime.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-runtime.js +38 -0
- package/dist/cli/backend/src/services/bundle/bundle-runtime.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-skill-installer.d.ts +105 -0
- package/dist/cli/backend/src/services/bundle/bundle-skill-installer.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-skill-installer.js +144 -0
- package/dist/cli/backend/src/services/bundle/bundle-skill-installer.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-state.store.d.ts +48 -0
- package/dist/cli/backend/src/services/bundle/bundle-state.store.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-state.store.js +90 -0
- package/dist/cli/backend/src/services/bundle/bundle-state.store.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-team.builder.d.ts +81 -0
- package/dist/cli/backend/src/services/bundle/bundle-team.builder.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-team.builder.js +172 -0
- package/dist/cli/backend/src/services/bundle/bundle-team.builder.js.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-time.d.ts +59 -0
- package/dist/cli/backend/src/services/bundle/bundle-time.d.ts.map +1 -0
- package/dist/cli/backend/src/services/bundle/bundle-time.js +98 -0
- package/dist/cli/backend/src/services/bundle/bundle-time.js.map +1 -0
- package/dist/cli/backend/src/services/core/storage.service.js +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/teams-backup.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/teams-backup.service.js +4 -2
- package/dist/cli/backend/src/services/core/teams-backup.service.js.map +1 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +72 -0
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +389 -0
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/index.d.ts +15 -0
- package/dist/cli/backend/src/services/messaging/index.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/index.js +20 -0
- package/dist/cli/backend/src/services/messaging/index.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +224 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +969 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/response-router.service.d.ts +110 -0
- package/dist/cli/backend/src/services/messaging/response-router.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/messaging/response-router.service.js +268 -0
- package/dist/cli/backend/src/services/messaging/response-router.service.js.map +1 -0
- package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.d.ts +14 -2
- package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.js +37 -1
- package/dist/cli/backend/src/services/onboarding/onboarding-checklist.service.js.map +1 -1
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts +133 -0
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.d.ts.map +1 -0
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js +232 -0
- package/dist/cli/backend/src/services/orchestrator/commitment-approval-guard.js.map +1 -0
- package/dist/cli/backend/src/services/skill/skill-catalog.service.d.ts +277 -0
- package/dist/cli/backend/src/services/skill/skill-catalog.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/skill/skill-catalog.service.js +708 -0
- package/dist/cli/backend/src/services/skill/skill-catalog.service.js.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.d.ts +243 -0
- package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.js +439 -0
- package/dist/cli/backend/src/services/skill-setup/skill-install-job.service.js.map +1 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +21 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +85 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/template/template.service.js +5 -2
- package/dist/cli/backend/src/services/template/template.service.js.map +1 -1
- package/dist/cli/backend/src/services/workflow/cron-task.service.d.ts +316 -0
- package/dist/cli/backend/src/services/workflow/cron-task.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/workflow/cron-task.service.js +1043 -0
- package/dist/cli/backend/src/services/workflow/cron-task.service.js.map +1 -0
- package/dist/cli/backend/src/types/cron-task.types.d.ts +95 -0
- package/dist/cli/backend/src/types/cron-task.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/cron-task.types.js +10 -0
- package/dist/cli/backend/src/types/cron-task.types.js.map +1 -0
- package/dist/cli/backend/src/types/solution-bundle.types.d.ts +367 -0
- package/dist/cli/backend/src/types/solution-bundle.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/solution-bundle.types.js +17 -0
- package/dist/cli/backend/src/types/solution-bundle.types.js.map +1 -0
- package/dist/cli/backend/src/types/team-template.types.d.ts +8 -0
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
- package/dist/cli/cli/src/commands/deploy-bundle.d.ts +160 -0
- package/dist/cli/cli/src/commands/deploy-bundle.d.ts.map +1 -0
- package/dist/cli/cli/src/commands/deploy-bundle.js +386 -0
- package/dist/cli/cli/src/commands/deploy-bundle.js.map +1 -0
- package/dist/cli/cli/src/commands/onboard.d.ts +32 -1
- package/dist/cli/cli/src/commands/onboard.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/onboard.js +80 -3
- package/dist/cli/cli/src/commands/onboard.js.map +1 -1
- package/dist/cli/cli/src/constants.d.ts +5 -0
- package/dist/cli/cli/src/constants.d.ts.map +1 -1
- package/dist/cli/cli/src/constants.js +5 -0
- package/dist/cli/cli/src/constants.js.map +1 -1
- package/dist/cli/cli/src/index.js +15 -0
- package/dist/cli/cli/src/index.js.map +1 -1
- package/frontend/dist/assets/{index-e6c403b6.js → index-97bb17d4.js} +274 -274
- package/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill install jobs — `install-skill` as a background job that reports back.
|
|
3
|
+
*
|
|
4
|
+
* An agent that lacks a capability runs `install-skill --id <skill>`. This
|
|
5
|
+
* service decides whether it may (trust rule), downloads the skill from the
|
|
6
|
+
* marketplace when it is not bundled (reusing the marketplace installer),
|
|
7
|
+
* runs its setup block, and — when the job ends — sends the requesting agent
|
|
8
|
+
* a message through the normal message queue (`system_event` to its
|
|
9
|
+
* session, the path event-bus notifications use). The agent is woken by that
|
|
10
|
+
* message and carries on: tells the user it is ready, then does the task it
|
|
11
|
+
* paused.
|
|
12
|
+
*
|
|
13
|
+
* ## Trust rule
|
|
14
|
+
*
|
|
15
|
+
* - **Official** skills (see skill-discovery.service) install without asking,
|
|
16
|
+
* including the system dependencies their setup block declares.
|
|
17
|
+
* - **Third-party** skills are refused unless the owner approved:
|
|
18
|
+
* - the owner acting from the dashboard (`X-Crewly-Caller: dashboard`, no
|
|
19
|
+
* agent header), or
|
|
20
|
+
* - an agent passing `approvedByOwner`, which is **verified**: there must be
|
|
21
|
+
* a genuine owner-authored chat message in the last
|
|
22
|
+
* OWNER_APPROVAL_LOOKBACK_MS that approves it — the same evidence the
|
|
23
|
+
* commitment-approval gate uses (chat-v2 `user` rows an agent cannot
|
|
24
|
+
* write). A claim with no such message is refused. If the chat cannot be
|
|
25
|
+
* read, the install is refused (fail closed: this runs someone else's code).
|
|
26
|
+
*
|
|
27
|
+
* @module services/skill-setup/skill-install-job.service
|
|
28
|
+
*/
|
|
29
|
+
import { randomUUID } from 'crypto';
|
|
30
|
+
import * as fs from 'fs';
|
|
31
|
+
import * as path from 'path';
|
|
32
|
+
import { SKILL_SETUP_CONSTANTS, MESSAGE_SOURCES } from '../../constants.js';
|
|
33
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
34
|
+
import { getInstallPath } from '../marketplace/marketplace.service.js';
|
|
35
|
+
import { installItem } from '../marketplace/marketplace-installer.service.js';
|
|
36
|
+
import { getMessageQueueInstance } from '../messaging/index.js';
|
|
37
|
+
import { containsApprovalToken } from '../orchestrator/commitment-approval-guard.js';
|
|
38
|
+
import { getChatV2Service } from '../chat-v2/chat-v2.singleton.js';
|
|
39
|
+
import { validateSetupManifest } from './skill-setup-manifest.js';
|
|
40
|
+
import { getSkillDiscoveryService } from './skill-discovery.service.js';
|
|
41
|
+
import { getSkillSetupRunner } from './skill-setup-runner.service.js';
|
|
42
|
+
/** Error with a machine-readable code for the REST layer. */
|
|
43
|
+
export class SkillInstallError extends Error {
|
|
44
|
+
code;
|
|
45
|
+
details;
|
|
46
|
+
/**
|
|
47
|
+
* @param code - `not_found`, `owner_approval_required`, `owner_approval_not_found`,
|
|
48
|
+
* `owner_approval_unverifiable`, `invalid_setup`, `job_not_found`
|
|
49
|
+
* @param message - Human-readable message, written for the agent
|
|
50
|
+
* @param details - Extra fields for the response
|
|
51
|
+
*/
|
|
52
|
+
constructor(code, message, details = {}) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.code = code;
|
|
55
|
+
this.details = details;
|
|
56
|
+
this.name = 'SkillInstallError';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Short affirmatives that approve an install when the message also names the skill. */
|
|
60
|
+
const SHORT_YES = [/\byes\b/i, /\bok(ay)?\b/i, /\bsure\b/i, /\binstall\b/i, /好/, /可以/, /行/, /装/, /同意/];
|
|
61
|
+
/** A question is never approval. */
|
|
62
|
+
const QUESTION = /[??]|吗\s*$|要不要|是否/;
|
|
63
|
+
/**
|
|
64
|
+
* Whether one owner message approves installing a skill.
|
|
65
|
+
*
|
|
66
|
+
* Counts a clear approval ("go ahead", "批准", "同意" — the commitment
|
|
67
|
+
* gate's tokens) or a short yes that names the skill ("ok install
|
|
68
|
+
* shady-ocr", "可以,装 shady-ocr"). A question never counts.
|
|
69
|
+
*
|
|
70
|
+
* @param message - Owner message text
|
|
71
|
+
* @param skill - Skill id and name
|
|
72
|
+
* @returns True when it approves
|
|
73
|
+
*/
|
|
74
|
+
export function isOwnerInstallApproval(message, skill) {
|
|
75
|
+
if (!message || QUESTION.test(message))
|
|
76
|
+
return false;
|
|
77
|
+
if (containsApprovalToken(message))
|
|
78
|
+
return true;
|
|
79
|
+
const lower = message.toLowerCase();
|
|
80
|
+
const names = [skill.id, skill.name].filter((n) => !!n && n.length >= 3).map((n) => n.toLowerCase());
|
|
81
|
+
return names.some((n) => lower.includes(n)) && SHORT_YES.some((re) => re.test(message));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Human duration.
|
|
85
|
+
*
|
|
86
|
+
* @param ms - Milliseconds
|
|
87
|
+
* @returns e.g. "4m 10s"
|
|
88
|
+
*/
|
|
89
|
+
function formatDuration(ms) {
|
|
90
|
+
const s = Math.max(0, Math.round(ms / 1000));
|
|
91
|
+
return s < 60 ? `${s}s` : `${Math.floor(s / 60)}m ${s % 60}s`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The message the requesting agent receives when a job ends.
|
|
95
|
+
*
|
|
96
|
+
* @param job - Finished job
|
|
97
|
+
* @param setup - Setup result (absent when the job failed before setup)
|
|
98
|
+
* @param durationMs - Job duration
|
|
99
|
+
* @returns Message text
|
|
100
|
+
*/
|
|
101
|
+
export function formatCompletionMessage(job, setup, durationMs) {
|
|
102
|
+
const H = SKILL_SETUP_CONSTANTS.COMPLETION_HEADERS;
|
|
103
|
+
const steps = setup?.steps.length
|
|
104
|
+
? setup.steps.map((s) => `${s.id} ${s.status === 'satisfied' ? 'already there' : s.status}`).join(' · ')
|
|
105
|
+
: '';
|
|
106
|
+
const resume = job.resumeNote ? `\nYou paused: "${job.resumeNote}"` : '';
|
|
107
|
+
if (job.state === 'succeeded') {
|
|
108
|
+
return [
|
|
109
|
+
`${H.SUCCEEDED} ${job.skillId} is installed and ready (job ${job.jobId}, ${formatDuration(durationMs)}).`,
|
|
110
|
+
...(steps ? [`Setup: ${steps}`] : []),
|
|
111
|
+
...(job.executePath ? [`Run it: bash ${job.executePath} (see SKILL.md next to it)`] : []),
|
|
112
|
+
].join('\n') + `${resume}\nNext: tell the user in one line that it is ready, then do the task you paused — now, without waiting to be asked.`;
|
|
113
|
+
}
|
|
114
|
+
return [
|
|
115
|
+
`${H.FAILED} ${job.skillId} (job ${job.jobId}, ${formatDuration(durationMs)}): ${job.message ?? 'unknown error'}`,
|
|
116
|
+
...(steps ? [`Setup: ${steps}`] : []),
|
|
117
|
+
...(job.logFile ? [`Log: ${job.logFile}`] : []),
|
|
118
|
+
].join('\n') + `${resume}\nNext: tell the user plainly what is missing and the fix quoted above (e.g. the command the owner can run). Do not retry the same install until something has changed.`;
|
|
119
|
+
}
|
|
120
|
+
/** Runs and tracks skill install jobs. */
|
|
121
|
+
export class SkillInstallJobService {
|
|
122
|
+
discovery;
|
|
123
|
+
runner;
|
|
124
|
+
installMarketplaceItem;
|
|
125
|
+
installPathFor;
|
|
126
|
+
recentOwnerMessages;
|
|
127
|
+
enqueue;
|
|
128
|
+
now;
|
|
129
|
+
idFactory;
|
|
130
|
+
jobs = new Map();
|
|
131
|
+
logger = LoggerService.getInstance().createComponentLogger('SkillInstallJobs');
|
|
132
|
+
/**
|
|
133
|
+
* @param deps - Injectable dependencies (all optional)
|
|
134
|
+
*/
|
|
135
|
+
constructor(deps = {}) {
|
|
136
|
+
this.discovery = deps.discovery ?? getSkillDiscoveryService();
|
|
137
|
+
this.runner = deps.runner ?? getSkillSetupRunner();
|
|
138
|
+
this.installMarketplaceItem = deps.installMarketplaceItem ?? installItem;
|
|
139
|
+
this.installPathFor = deps.installPathFor ?? ((item) => getInstallPath(item.type, item.id));
|
|
140
|
+
this.recentOwnerMessages = deps.recentOwnerMessages ?? ((since) => getChatV2Service().getRecentOwnerMessageContents(since));
|
|
141
|
+
// Resolved per job: the queue is created after this service at startup.
|
|
142
|
+
this.enqueue =
|
|
143
|
+
deps.enqueue !== undefined
|
|
144
|
+
? () => deps.enqueue ?? null
|
|
145
|
+
: () => {
|
|
146
|
+
const queue = getMessageQueueInstance();
|
|
147
|
+
return queue ? (input) => void queue.enqueue(input) : null;
|
|
148
|
+
};
|
|
149
|
+
this.now = deps.now ?? Date.now;
|
|
150
|
+
this.idFactory = deps.idFactory ?? (() => randomUUID().slice(0, 8));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Ask for a skill to be installed and set up.
|
|
154
|
+
*
|
|
155
|
+
* Returns at once: either the skill is already usable, or a job id. When
|
|
156
|
+
* a job for the same skill is running, its id is returned and the new
|
|
157
|
+
* requester is added to the completion message's recipients.
|
|
158
|
+
*
|
|
159
|
+
* @param input - Skill id, requester, approval flags
|
|
160
|
+
* @returns The job, or `already-ready`
|
|
161
|
+
* @throws SkillInstallError when the skill is unknown, untrusted, or its setup block is invalid
|
|
162
|
+
*/
|
|
163
|
+
async startInstall(input) {
|
|
164
|
+
const skill = await this.discovery.resolve(input.skillId);
|
|
165
|
+
if (!skill) {
|
|
166
|
+
throw new SkillInstallError('not_found', `No skill "${input.skillId}" is bundled with Crewly or listed in the marketplace. Run find-skill --query "<what you need>" to search.`);
|
|
167
|
+
}
|
|
168
|
+
// A job already running for this skill passed the trust check: join it.
|
|
169
|
+
this.pruneFinished();
|
|
170
|
+
const running = [...this.jobs.values()].find((j) => j.skillId === skill.id && j.state === 'running');
|
|
171
|
+
if (running) {
|
|
172
|
+
if (input.requesterSession && !running.requesterSessions.includes(input.requesterSession)) {
|
|
173
|
+
running.requesterSessions.push(input.requesterSession);
|
|
174
|
+
}
|
|
175
|
+
return { kind: 'job', job: this.toPublic(running) };
|
|
176
|
+
}
|
|
177
|
+
// Nothing to install: say so instead of making the agent wait for a message.
|
|
178
|
+
if (!input.force && skill.installed && !skill.manifestError) {
|
|
179
|
+
await this.discovery.probe(skill);
|
|
180
|
+
if (skill.ready) {
|
|
181
|
+
return { kind: 'already-ready', skill: { id: skill.id, executePath: skill.executePath, officialReason: skill.officialReason } };
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const evidence = this.checkTrust(skill, input);
|
|
185
|
+
if (skill.manifestError) {
|
|
186
|
+
throw new SkillInstallError('invalid_setup', `The setup block of ${skill.id} is invalid, so it was not run: ${skill.manifestError}`);
|
|
187
|
+
}
|
|
188
|
+
const record = {
|
|
189
|
+
jobId: this.idFactory(),
|
|
190
|
+
skillId: skill.id,
|
|
191
|
+
state: 'running',
|
|
192
|
+
official: skill.official,
|
|
193
|
+
officialReason: skill.officialReason,
|
|
194
|
+
estimatedMinutes: skill.setup.estimatedMinutes ?? SKILL_SETUP_CONSTANTS.DEFAULT_ESTIMATED_MINUTES,
|
|
195
|
+
startedAt: new Date(this.now()).toISOString(),
|
|
196
|
+
requesterSessions: input.requesterSession ? [input.requesterSession] : [],
|
|
197
|
+
...(input.resumeNote ? { resumeNote: input.resumeNote } : {}),
|
|
198
|
+
log: evidence
|
|
199
|
+
? `Third-party skill approved by the owner in chat: "${evidence.slice(0, 300)}"` +
|
|
200
|
+
(input.ownerClaim ? `\nThe agent cited: "${input.ownerClaim.slice(0, 300)}"` : '') + '\n'
|
|
201
|
+
: input.ownerDashboard && !skill.official
|
|
202
|
+
? 'Third-party skill installed by the owner from the dashboard.\n'
|
|
203
|
+
: '',
|
|
204
|
+
notified: false,
|
|
205
|
+
executePath: skill.executePath,
|
|
206
|
+
finishedAtMs: null,
|
|
207
|
+
done: null,
|
|
208
|
+
};
|
|
209
|
+
this.jobs.set(record.jobId, record);
|
|
210
|
+
this.logger.info('Skill install started', { jobId: record.jobId, skillId: skill.id, official: skill.official, requesters: record.requesterSessions });
|
|
211
|
+
record.done = this.execute(record, skill);
|
|
212
|
+
return { kind: 'job', job: this.toPublic(record) };
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Look up a job.
|
|
216
|
+
*
|
|
217
|
+
* @param jobId - Job id
|
|
218
|
+
* @returns The job
|
|
219
|
+
* @throws SkillInstallError `job_not_found`
|
|
220
|
+
*/
|
|
221
|
+
getJob(jobId) {
|
|
222
|
+
const record = this.jobs.get(jobId);
|
|
223
|
+
if (!record)
|
|
224
|
+
throw new SkillInstallError('job_not_found', `Install job not found: ${jobId}`);
|
|
225
|
+
return this.toPublic(record);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Wait for a job to finish (tests, CLI).
|
|
229
|
+
*
|
|
230
|
+
* @param jobId - Job id
|
|
231
|
+
* @returns The finished job
|
|
232
|
+
* @throws SkillInstallError `job_not_found`
|
|
233
|
+
*/
|
|
234
|
+
async waitForJob(jobId) {
|
|
235
|
+
const record = this.jobs.get(jobId);
|
|
236
|
+
if (!record)
|
|
237
|
+
throw new SkillInstallError('job_not_found', `Install job not found: ${jobId}`);
|
|
238
|
+
if (record.done)
|
|
239
|
+
await record.done;
|
|
240
|
+
return this.toPublic(record);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Apply the trust rule.
|
|
244
|
+
*
|
|
245
|
+
* @param skill - Resolved skill
|
|
246
|
+
* @param input - Request
|
|
247
|
+
* @returns The owner message that approved a third-party install (undefined for official / dashboard)
|
|
248
|
+
* @throws SkillInstallError when a third-party skill lacks owner approval
|
|
249
|
+
*/
|
|
250
|
+
checkTrust(skill, input) {
|
|
251
|
+
if (skill.official || input.ownerDashboard)
|
|
252
|
+
return undefined;
|
|
253
|
+
const who = `"${skill.id}" is a third-party skill (${skill.officialReason})`;
|
|
254
|
+
if (!input.approvedByOwner) {
|
|
255
|
+
throw new SkillInstallError('owner_approval_required', `${who}, so it is not installed automatically. Ask the owner in chat whether to install it (say what it is and who publishes it). ` +
|
|
256
|
+
`Only after they say yes, run: install-skill --id ${skill.id} --approved-by-owner`, { official: false, officialReason: skill.officialReason });
|
|
257
|
+
}
|
|
258
|
+
let messages;
|
|
259
|
+
try {
|
|
260
|
+
messages = this.recentOwnerMessages(this.now() - SKILL_SETUP_CONSTANTS.OWNER_APPROVAL_LOOKBACK_MS);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
throw new SkillInstallError('owner_approval_unverifiable', `${who}. --approved-by-owner could not be checked because the owner's chat history is unreadable (${error instanceof Error ? error.message : String(error)}); not installing.`);
|
|
264
|
+
}
|
|
265
|
+
const evidence = messages.find((m) => isOwnerInstallApproval(m, { id: skill.id, name: skill.name }));
|
|
266
|
+
if (!evidence) {
|
|
267
|
+
const hours = Math.round(SKILL_SETUP_CONSTANTS.OWNER_APPROVAL_LOOKBACK_MS / 3_600_000);
|
|
268
|
+
throw new SkillInstallError('owner_approval_not_found', `${who}. --approved-by-owner was passed, but no owner message in the last ${hours}h approves installing it. ` +
|
|
269
|
+
`Ask the owner in chat first (name the skill); run this again after they say yes.`);
|
|
270
|
+
}
|
|
271
|
+
this.logger.info('Third-party skill install approved by owner message', { skillId: skill.id, evidence: evidence.slice(0, 200), claim: input.ownerClaim });
|
|
272
|
+
return evidence;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Install (when needed), set up, then notify.
|
|
276
|
+
*
|
|
277
|
+
* @param record - Job record (mutated)
|
|
278
|
+
* @param skill - Resolved skill
|
|
279
|
+
*/
|
|
280
|
+
async execute(record, skill) {
|
|
281
|
+
const started = this.now();
|
|
282
|
+
let setup = null;
|
|
283
|
+
try {
|
|
284
|
+
let skillDir = skill.skillDir;
|
|
285
|
+
let manifest = skill.manifest;
|
|
286
|
+
if (!skill.installed || !skillDir) {
|
|
287
|
+
const item = skill.registryItem;
|
|
288
|
+
if (!item)
|
|
289
|
+
throw new Error('not installed and not in the registry');
|
|
290
|
+
this.append(record, `Downloading ${item.name} v${item.version} from the marketplace…\n`);
|
|
291
|
+
let installed = item;
|
|
292
|
+
let res = await this.installMarketplaceItem(item);
|
|
293
|
+
if (!res.success && item.fallback) {
|
|
294
|
+
// Premium archives can be missing from the CDN; the public copy of the same skill installs.
|
|
295
|
+
this.append(record, `${res.message}; trying the public registry copy…\n`);
|
|
296
|
+
installed = item.fallback;
|
|
297
|
+
res = await this.installMarketplaceItem(item.fallback);
|
|
298
|
+
}
|
|
299
|
+
if (!res.success)
|
|
300
|
+
throw new Error(`marketplace install failed: ${res.message}`);
|
|
301
|
+
this.append(record, `${res.message}\n`);
|
|
302
|
+
skillDir = this.installPathFor(installed);
|
|
303
|
+
record.executePath = path.join(skillDir, 'execute.sh');
|
|
304
|
+
// The downloaded skill.json is authoritative for setup.
|
|
305
|
+
const local = this.readSetup(skillDir);
|
|
306
|
+
if (local !== undefined) {
|
|
307
|
+
const v = validateSetupManifest(local);
|
|
308
|
+
if (!v.valid)
|
|
309
|
+
throw new Error(`the installed skill's setup block is invalid: ${v.errors.join('; ')}`);
|
|
310
|
+
manifest = v.manifest;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (manifest) {
|
|
314
|
+
setup = await this.runner.runSetup({
|
|
315
|
+
skillId: skill.id,
|
|
316
|
+
skillDir,
|
|
317
|
+
manifest,
|
|
318
|
+
onProgress: (e) => this.append(record, `[${e.stepId}] ${e.phase}: ${e.message}\n`),
|
|
319
|
+
});
|
|
320
|
+
record.logFile = setup.logFile;
|
|
321
|
+
if (!setup.success)
|
|
322
|
+
throw new Error(setup.error ?? 'setup failed');
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
this.append(record, 'No setup needed.\n');
|
|
326
|
+
}
|
|
327
|
+
record.state = 'succeeded';
|
|
328
|
+
record.message = `${skill.id} is installed and ready`;
|
|
329
|
+
}
|
|
330
|
+
catch (error) {
|
|
331
|
+
record.state = 'failed';
|
|
332
|
+
record.message = error instanceof Error ? error.message : String(error);
|
|
333
|
+
this.append(record, `FAILED: ${record.message}\n`);
|
|
334
|
+
}
|
|
335
|
+
record.finishedAtMs = this.now();
|
|
336
|
+
record.finishedAt = new Date(record.finishedAtMs).toISOString();
|
|
337
|
+
this.logger.info('Skill install finished', { jobId: record.jobId, skillId: record.skillId, state: record.state, message: record.message });
|
|
338
|
+
this.notify(record, setup, record.finishedAtMs - started);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Read the raw `setup` block of an installed skill.
|
|
342
|
+
*
|
|
343
|
+
* @param skillDir - Skill directory
|
|
344
|
+
* @returns The block, or undefined
|
|
345
|
+
*/
|
|
346
|
+
readSetup(skillDir) {
|
|
347
|
+
try {
|
|
348
|
+
return JSON.parse(fs.readFileSync(path.join(skillDir, 'skill.json'), 'utf-8')).setup;
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
return undefined;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Send the completion message to every requester.
|
|
356
|
+
*
|
|
357
|
+
* @param record - Finished job (mutated: notified)
|
|
358
|
+
* @param setup - Setup result
|
|
359
|
+
* @param durationMs - Duration
|
|
360
|
+
*/
|
|
361
|
+
notify(record, setup, durationMs) {
|
|
362
|
+
if (record.requesterSessions.length === 0)
|
|
363
|
+
return;
|
|
364
|
+
const enqueue = this.enqueue();
|
|
365
|
+
if (!enqueue) {
|
|
366
|
+
this.logger.warn('Message queue unavailable; install result not delivered', { jobId: record.jobId });
|
|
367
|
+
return;
|
|
368
|
+
}
|
|
369
|
+
const content = formatCompletionMessage(this.toPublic(record), setup, durationMs);
|
|
370
|
+
for (const session of record.requesterSessions) {
|
|
371
|
+
try {
|
|
372
|
+
enqueue({
|
|
373
|
+
content,
|
|
374
|
+
conversationId: SKILL_SETUP_CONSTANTS.COMPLETION_CONVERSATION_ID,
|
|
375
|
+
source: MESSAGE_SOURCES.SYSTEM_EVENT,
|
|
376
|
+
targetSession: session,
|
|
377
|
+
});
|
|
378
|
+
record.notified = true;
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
this.logger.warn('Failed to enqueue install result', { jobId: record.jobId, session, error: error instanceof Error ? error.message : String(error) });
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Append to a job log, keeping the tail.
|
|
387
|
+
*
|
|
388
|
+
* @param record - Job
|
|
389
|
+
* @param text - Text
|
|
390
|
+
*/
|
|
391
|
+
append(record, text) {
|
|
392
|
+
const next = record.log + text;
|
|
393
|
+
const max = SKILL_SETUP_CONSTANTS.JOB_LOG_MAX_CHARS;
|
|
394
|
+
record.log = next.length > max ? next.slice(next.length - max) : next;
|
|
395
|
+
}
|
|
396
|
+
/** Forget finished jobs after the retention window. */
|
|
397
|
+
pruneFinished() {
|
|
398
|
+
const cutoff = this.now() - SKILL_SETUP_CONSTANTS.JOB_RETENTION_MS;
|
|
399
|
+
for (const [id, job] of this.jobs) {
|
|
400
|
+
if (job.finishedAtMs !== null && job.finishedAtMs < cutoff)
|
|
401
|
+
this.jobs.delete(id);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Public view of a job.
|
|
406
|
+
*
|
|
407
|
+
* @param r - Record
|
|
408
|
+
* @returns Job
|
|
409
|
+
*/
|
|
410
|
+
toPublic(r) {
|
|
411
|
+
const view = { ...r, requesterSessions: [...r.requesterSessions] };
|
|
412
|
+
delete view.finishedAtMs;
|
|
413
|
+
delete view.done;
|
|
414
|
+
return view;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* One-line "I'm installing it" text the agent can relay to the user.
|
|
419
|
+
*
|
|
420
|
+
* @param job - Job
|
|
421
|
+
* @returns Message
|
|
422
|
+
*/
|
|
423
|
+
export function describeStartedJob(job) {
|
|
424
|
+
return (`Installing ${job.skillId} in the background (about ${job.estimatedMinutes} min). ` +
|
|
425
|
+
`Tell the user now, in one line, that you are installing it and roughly how long it takes; ` +
|
|
426
|
+
`you will get a ${SKILL_SETUP_CONSTANTS.COMPLETION_HEADERS.SUCCEEDED} or ${SKILL_SETUP_CONSTANTS.COMPLETION_HEADERS.FAILED} message when it ends — continue then.`);
|
|
427
|
+
}
|
|
428
|
+
let jobServiceSingleton = null;
|
|
429
|
+
/**
|
|
430
|
+
* The process-wide job service.
|
|
431
|
+
*
|
|
432
|
+
* @returns The service
|
|
433
|
+
*/
|
|
434
|
+
export function getSkillInstallJobService() {
|
|
435
|
+
if (!jobServiceSingleton)
|
|
436
|
+
jobServiceSingleton = new SkillInstallJobService();
|
|
437
|
+
return jobServiceSingleton;
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=skill-install-job.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-install-job.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/skill-setup/skill-install-job.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAkD,MAAM,8BAA8B,CAAC;AACxH,OAAO,EAAE,mBAAmB,EAA2C,MAAM,iCAAiC,CAAC;AAsD/G,6DAA6D;AAC7D,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAQ1B;IAQA;IAfjB;;;;;OAKG;IACH,YACiB,IAME,EAClB,OAAe,EACC,UAAmC,EAAE;QAErD,KAAK,CAAC,OAAO,CAAC,CAAC;QAVC,SAAI,GAAJ,IAAI,CAMF;QAEF,YAAO,GAAP,OAAO,CAA8B;QAGrD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACjC,CAAC;CACD;AAsBD,wFAAwF;AACxF,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACvG,oCAAoC;AACpC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,KAAoC;IAC3F,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,qBAAqB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAClH,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACzF,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,EAAU;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC;AAC/D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAoB,EAAE,KAAyB,EAAE,UAAkB;IAC1G,MAAM,CAAC,GAAG,qBAAqB,CAAC,kBAAkB,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM;QAChC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACxG,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO;YACN,GAAG,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,gCAAgC,GAAG,CAAC,KAAK,KAAK,cAAc,CAAC,UAAU,CAAC,IAAI;YACzG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,WAAW,4BAA4B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACzF,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,qHAAqH,CAAC;IAC/I,CAAC;IACD,OAAO;QACN,GAAG,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,SAAS,GAAG,CAAC,KAAK,KAAK,cAAc,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,OAAO,IAAI,eAAe,EAAE;QACjH,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,yKAAyK,CAAC;AACnM,CAAC;AAED,0CAA0C;AAC1C,MAAM,OAAO,sBAAsB;IACjB,SAAS,CAAwB;IACjC,MAAM,CAAmB;IACzB,sBAAsB,CAAiE;IACvF,cAAc,CAAoC;IAClD,mBAAmB,CAAgC;IACnD,OAAO,CAAwD;IAC/D,GAAG,CAAe;IAClB,SAAS,CAAe;IACxB,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IACpC,MAAM,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAEhG;;OAEG;IACH,YAAY,OAA4B,EAAE;QACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,wBAAwB,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,mBAAmB,EAAE,CAAC;QACnD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,WAAW,CAAC;QACzE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5H,wEAAwE;QACxE,IAAI,CAAC,OAAO;YACX,IAAI,CAAC,OAAO,KAAK,SAAS;gBACzB,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;gBAC5B,CAAC,CAAC,GAAG,EAAE;oBACL,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5D,CAAC,CAAC;QACL,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,YAAY,CAAC,KAAwB;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,IAAI,iBAAiB,CAC1B,WAAW,EACX,aAAa,KAAK,CAAC,OAAO,4GAA4G,CACtI,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QACrG,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC3F,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,6EAA6E;QAC7E,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC7D,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;YACjI,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,iBAAiB,CAAC,eAAe,EAAE,sBAAsB,KAAK,CAAC,EAAE,mCAAmC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACtI,CAAC;QAED,MAAM,MAAM,GAAc;YACzB,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;YACvB,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,IAAI,qBAAqB,CAAC,yBAAyB;YACjG,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;YAC7C,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzE,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,EAAE,QAAQ;gBACZ,CAAC,CAAC,qDAAqD,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;oBAC/E,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAuB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;gBAC1F,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,QAAQ;oBACxC,CAAC,CAAC,gEAAgE;oBAClE,CAAC,CAAC,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,IAAI;SACV,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACtJ,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,KAAa;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,iBAAiB,CAAC,eAAe,EAAE,0BAA0B,KAAK,EAAE,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,iBAAiB,CAAC,eAAe,EAAE,0BAA0B,KAAK,EAAE,CAAC,CAAC;QAC7F,IAAI,MAAM,CAAC,IAAI;YAAE,MAAM,MAAM,CAAC,IAAI,CAAC;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;;OAOG;IACK,UAAU,CAAC,KAAoB,EAAE,KAAwB;QAChE,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,6BAA6B,KAAK,CAAC,cAAc,GAAG,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC5B,MAAM,IAAI,iBAAiB,CAC1B,yBAAyB,EACzB,GAAG,GAAG,6HAA6H;gBAClI,oDAAoD,KAAK,CAAC,EAAE,sBAAsB,EACnF,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CACzD,CAAC;QACH,CAAC;QACD,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACJ,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC,0BAA0B,CAAC,CAAC;QACpG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CAC1B,6BAA6B,EAC7B,GAAG,GAAG,8FAA8F,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAC9K,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAAC;YACvF,MAAM,IAAI,iBAAiB,CAC1B,0BAA0B,EAC1B,GAAG,GAAG,sEAAsE,KAAK,4BAA4B;gBAC5G,kFAAkF,CACnF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qDAAqD,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1J,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,OAAO,CAAC,MAAiB,EAAE,KAAoB;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,KAAK,GAAuB,IAAI,CAAC;QACrC,IAAI,CAAC;YACJ,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;gBAChC,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,0BAA0B,CAAC,CAAC;gBACzF,IAAI,SAAS,GAAG,IAAI,CAAC;gBACrB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnC,4FAA4F;oBAC5F,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,sCAAsC,CAAC,CAAC;oBAC1E,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC1B,GAAG,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxD,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBACxC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC1C,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBACvD,wDAAwD;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,CAAC,CAAC,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtG,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACd,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAClC,OAAO,EAAE,KAAK,CAAC,EAAE;oBACjB,QAAQ;oBACR,QAAQ;oBACR,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC;iBAClF,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,MAAM,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,EAAE,yBAAyB,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;YACxB,MAAM,CAAC,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3I,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACK,SAAS,CAAC,QAAgB;QACjC,IAAI,CAAC;YACJ,OAAQ,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAyB,CAAC,KAAK,CAAC;QAC/G,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,MAAiB,EAAE,KAAyB,EAAE,UAAkB;QAC9E,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yDAAyD,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACrG,OAAO;QACR,CAAC;QACD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAClF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAChD,IAAI,CAAC;gBACJ,OAAO,CAAC;oBACP,OAAO;oBACP,cAAc,EAAE,qBAAqB,CAAC,0BAA0B;oBAChE,MAAM,EAAE,eAAe,CAAC,YAAY;oBACpC,aAAa,EAAE,OAAO;iBACtB,CAAC,CAAC;gBACH,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvJ,CAAC;QACF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,MAAM,CAAC,MAAiB,EAAE,IAAY;QAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;QAC/B,MAAM,GAAG,GAAG,qBAAqB,CAAC,iBAAiB,CAAC;QACpD,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,uDAAuD;IAC/C,aAAa;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;QACnE,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,GAAG,MAAM;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,QAAQ,CAAC,CAAY;QAC5B,MAAM,IAAI,GAAwE,EAAE,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxI,OAAO,IAAI,CAAC,YAAY,CAAC;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACtD,OAAO,CACN,cAAc,GAAG,CAAC,OAAO,6BAA6B,GAAG,CAAC,gBAAgB,SAAS;QACnF,4FAA4F;QAC5F,kBAAkB,qBAAqB,CAAC,kBAAkB,CAAC,SAAS,OAAO,qBAAqB,CAAC,kBAAkB,CAAC,MAAM,wCAAwC,CAClK,CAAC;AACH,CAAC;AAED,IAAI,mBAAmB,GAAkC,IAAI,CAAC;AAE9D;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACxC,IAAI,CAAC,mBAAmB;QAAE,mBAAmB,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC7E,OAAO,mBAAmB,CAAC;AAC5B,CAAC"}
|
|
@@ -433,6 +433,27 @@ export declare class SlackTeamChannelService {
|
|
|
433
433
|
ensureTeamChannel(team: Team, options?: {
|
|
434
434
|
slackChannelId?: string;
|
|
435
435
|
}): Promise<SlackTeamChannelMapping>;
|
|
436
|
+
/**
|
|
437
|
+
* Make sure an extra channel for a set of agents exists (solution bundles:
|
|
438
|
+
* e.g. an approvals channel with the lead and the writer). It is stored
|
|
439
|
+
* like an ad-hoc channel (`adhoc:<channelId>` with a member roster), so
|
|
440
|
+
* routing, outbound mirroring and room presence treat it the same way.
|
|
441
|
+
*
|
|
442
|
+
* Idempotent: `existingChannelId`, or an auto-created ad-hoc channel with
|
|
443
|
+
* the same derived name, is reused; its roster gains the given agents.
|
|
444
|
+
* The owner is invited on creation, and agents whose Slack bot is already
|
|
445
|
+
* installed are invited into it.
|
|
446
|
+
*
|
|
447
|
+
* @param input - Channel name, purpose, agent sessions, a known channel id
|
|
448
|
+
* @returns The mapping
|
|
449
|
+
* @throws Error when Slack is not connected or the channel cannot be created
|
|
450
|
+
*/
|
|
451
|
+
ensureAgentChannel(input: {
|
|
452
|
+
name: string;
|
|
453
|
+
purpose: string;
|
|
454
|
+
memberSessions: string[];
|
|
455
|
+
existingChannelId?: string;
|
|
456
|
+
}): Promise<SlackTeamChannelMapping>;
|
|
436
457
|
/**
|
|
437
458
|
* Remove a team's mapping. Optionally archives the Slack channel; the
|
|
438
459
|
* huddle is always archived (it is Crewly's own object).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-team-channel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-team-channel.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAUH,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EACV,oBAAoB,EAEpB,oBAAoB,EACpB,uBAAuB,EAEvB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EAEtB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAQ/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAM3F,mDAAmD;AACnD,MAAM,WAAW,mBAAmB;IAClC,WAAW,IAAI,OAAO,CAAC;IACvB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvD,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvE,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,kFAAkF;IAClF,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,qFAAqF;IACrF,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,UAAU,CAAC,OAAO,EAAE;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,yBAAyB,EACzB,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,KAAK,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAC9F,CAAC;AAEF,oDAAoD;AACpD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,aAAa,EACX,cAAc,GACd,kBAAkB,GAClB,qBAAqB,GACrB,yBAAyB,GACzB,qBAAqB,GACrB,qBAAqB,GACrB,qBAAqB,GACrB,YAAY,GACZ,IAAI,GACJ,KAAK,CACR,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5B,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,IAAI,CAAC;CACrF;AAED,+EAA+E;AAC/E,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,GACrF,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAE9D,gCAAgC;AAChC,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,qBAAqB,CAAC;IAC/B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,wBAAwB,GAAG,IAAI,CAAC;IACrD;;;OAGG;IACH,UAAU,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC3C,kEAAkE;IAClE,MAAM,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IAC/F,4FAA4F;IAC5F,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,8FAA8F;IAC9F,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACrC,oGAAoG;IACpG,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1F,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,iEAAiE;AACjE,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAC9E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzD,qDAAqD;AACrD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,uCAAuC;IACvC,OAAO,EAAE,uBAAuB,CAAC;IACjC,qCAAqC;IACrC,OAAO,EAAE,cAAc,CAAC;IACxB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mEAAmE;IACnE,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACvC,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,MAAM,CAWzE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAExF;AAED;;;;;;;;;;;GAWG;AACH,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD,6EAA6E;AAC7E,eAAO,MAAM,yBAAyB,iBAAiB,CAAC;AAExD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEjE;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkBpF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,EAAE,CAI3D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,WAAW,EAAE,MAAM,GAClB,IAAI,CAAC,oBAAoB,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC,CAalE;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8B;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,mBAAmB,CAA6B;IACxD,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IACjE,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAS;IACjC,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuD;IAEtF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAE5B;IACF,OAAO,CAAC,OAAO,CAAS;IACxB,kFAAkF;IAClF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuC;gBAEpD,IAAI,EAAE,2BAA2B;IAW7C;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B;;;;;;;;;;;;;;;;OAgBG;YACW,oBAAoB;IAmBlC;;;;;;OAMG;YACW,WAAW;IAqBzB;;;;;;;;;;;OAWG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9C;;;;;;;OAOG;IACG,iBAAiB,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAyB1E,0BAA0B;IAC1B,IAAI,IAAI,IAAI;IAcZ,yEAAyE;YAC3D,IAAI;YAiBJ,IAAI;IAMlB;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAKtD;;;;;OAKG;IACG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAoBjG;;;;;;;;;;OAUG;IACG,6BAA6B,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAwBnG;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAKxD;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAI5D;;;;;OAKG;IACH,oBAAoB,CAAC,cAAc,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAI5E;;;;;OAKG;IACH,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;IAI1E;;;;;OAKG;IACG,qBAAqB,IAAI,OAAO,CACpC,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAAA;KAAE,CAAC,CAC1G;IAaD;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IASnD;;;;;;;;;;OAUG;IACG,iBAAiB,CACrB,IAAI,EAAE,IAAI,EACV,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,GACxC,OAAO,CAAC,uBAAuB,CAAC;IAkFnC;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBnG;;;;;;;;;;;;;;;;;;;;;OAqBG;IACG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgC3F;;;;;;OAMG;IACG,eAAe,CACnB,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;IAkBzD;;;;;OAKG;IACG,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5D;;;;;;;;;;;;;;OAcG;IACG,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAkSrF;;;;;;;;;;;;;;;;OAgBG;YACW,YAAY;IA8C1B;;;;;;;;;;;;;;OAcG;YACW,YAAY;IAwC1B;;;;;;;;;;;;OAYG;IACG,eAAe,CAAC,KAAK,EAAE;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,aAAa,CAAC;IA+D1B;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAO1E;;;;;;;;;OASG;YACW,mBAAmB;IAQjC;;;;;;;;;;;;;;;;;;OAkBG;YACW,eAAe;IAmE7B;;;;;;;;;;;;OAYG;YACW,kBAAkB;IA0DhC;;;;;;;OAOG;IACG,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAwE3D;;;;;;;;;;OAUG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyD1E;;;;;;;OAOG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE;IAMhD;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;;OAKG;YACW,SAAS;IAiBvB;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI;IAO7E;;;;;;;;;OASG;YACW,iBAAiB;IAyB/B;;;;OAIG;IACH;;;;;;;;;;;;;;;;OAgBG;IACG,oBAAoB,CAAC,KAAK,EAAE;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAiCpG;;;;;;;;;;;;;;;;;OAiBG;IACG,kBAAkB,CAAC,KAAK,EAAE;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CACP;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,GAC7F;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAChC;IA4CD,OAAO,CAAC,uBAAuB;IAe/B;;;;;;;;;;OAUG;IACG,gBAAgB,CACpB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IA0D/F;;;;;OAKG;IACG,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAepE,iEAAiE;YACnD,SAAS;YAmBT,WAAW;YA0BX,sBAAsB;IA4BpC,yEAAyE;IACzE,OAAO,CAAC,UAAU;CAanB;AAmBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,uBAAuB,GAAG,IAAI,CAE3E"}
|
|
1
|
+
{"version":3,"file":"slack-team-channel.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/slack-team-channel.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -668,6 +668,83 @@ export class SlackTeamChannelService {
|
|
|
668
668
|
return mapping;
|
|
669
669
|
});
|
|
670
670
|
}
|
|
671
|
+
/**
|
|
672
|
+
* Make sure an extra channel for a set of agents exists (solution bundles:
|
|
673
|
+
* e.g. an approvals channel with the lead and the writer). It is stored
|
|
674
|
+
* like an ad-hoc channel (`adhoc:<channelId>` with a member roster), so
|
|
675
|
+
* routing, outbound mirroring and room presence treat it the same way.
|
|
676
|
+
*
|
|
677
|
+
* Idempotent: `existingChannelId`, or an auto-created ad-hoc channel with
|
|
678
|
+
* the same derived name, is reused; its roster gains the given agents.
|
|
679
|
+
* The owner is invited on creation, and agents whose Slack bot is already
|
|
680
|
+
* installed are invited into it.
|
|
681
|
+
*
|
|
682
|
+
* @param input - Channel name, purpose, agent sessions, a known channel id
|
|
683
|
+
* @returns The mapping
|
|
684
|
+
* @throws Error when Slack is not connected or the channel cannot be created
|
|
685
|
+
*/
|
|
686
|
+
async ensureAgentChannel(input) {
|
|
687
|
+
const store = await this.load();
|
|
688
|
+
const derived = slackChannelNameFor(input.name, store.channelPrefix);
|
|
689
|
+
return this.serialised(`agent-channel:${derived}`, async () => {
|
|
690
|
+
if (!this.deps.slack.isConnected())
|
|
691
|
+
throw new Error('Slack is not connected');
|
|
692
|
+
const current = await this.load();
|
|
693
|
+
let mapping = (input.existingChannelId ? current.mappings.find((m) => m.slackChannelId === input.existingChannelId) : undefined) ??
|
|
694
|
+
current.mappings.find((m) => isAdhocMapping(m) && m.autoCreated && (m.derivedName ?? m.slackChannelName) === derived);
|
|
695
|
+
const sessions = [...new Set(input.memberSessions.filter((s) => !!s))];
|
|
696
|
+
if (mapping) {
|
|
697
|
+
const roster = [...new Set([...(mapping.members ?? []), ...sessions])];
|
|
698
|
+
if (roster.length !== (mapping.members ?? []).length) {
|
|
699
|
+
mapping.members = roster;
|
|
700
|
+
this.deps.chat.setHuddleMembers(mapping.chatChannelId, roster);
|
|
701
|
+
await this.save();
|
|
702
|
+
this.deps.onRoomsChanged?.();
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
else {
|
|
706
|
+
const channel = await this.deps.slack.createChannel(derived);
|
|
707
|
+
const ownerInvited = await this.inviteOwner(channel.id, channel.name);
|
|
708
|
+
if (input.purpose.trim()) {
|
|
709
|
+
await this.deps.slack.setChannelPurpose(channel.id, input.purpose.trim()).catch((err) => {
|
|
710
|
+
this.logger.debug('setPurpose failed (non-critical)', { error: err instanceof Error ? err.message : String(err) });
|
|
711
|
+
});
|
|
712
|
+
}
|
|
713
|
+
const huddle = this.deps.chat.createHuddle({
|
|
714
|
+
name: `#${channel.name}`,
|
|
715
|
+
purpose: input.purpose.trim() || `Slack channel #${channel.name}`,
|
|
716
|
+
memberSessions: sessions.length > 0 ? sessions : [`channel:${channel.id}`],
|
|
717
|
+
principal: { userId: 'system', source: 'oss' },
|
|
718
|
+
});
|
|
719
|
+
mapping = {
|
|
720
|
+
teamId: `${SLACK_TEAM_CHANNEL_CONSTANTS.ADHOC_TEAM_PREFIX}${channel.id}`,
|
|
721
|
+
slackChannelId: channel.id,
|
|
722
|
+
slackChannelName: channel.name,
|
|
723
|
+
chatChannelId: huddle.id,
|
|
724
|
+
createdAt: (this.deps.now?.() ?? new Date()).toISOString(),
|
|
725
|
+
autoCreated: true,
|
|
726
|
+
derivedName: derived,
|
|
727
|
+
members: sessions,
|
|
728
|
+
...(ownerInvited ? { ownerInvited: true } : {}),
|
|
729
|
+
};
|
|
730
|
+
current.mappings.push(mapping);
|
|
731
|
+
await this.save();
|
|
732
|
+
this.deps.onRoomsChanged?.();
|
|
733
|
+
this.logger.info('Agent channel ready', { slackChannel: `#${channel.name}`, huddle: huddle.id, agents: sessions });
|
|
734
|
+
}
|
|
735
|
+
const identities = this.deps.identities;
|
|
736
|
+
if (identities?.isAvailable()) {
|
|
737
|
+
await identities.load();
|
|
738
|
+
for (const session of mapping.members ?? []) {
|
|
739
|
+
const record = identities.get(session);
|
|
740
|
+
if (record?.status === 'installed' && record.botUserId && !record.invitedTo.includes(mapping.slackChannelId)) {
|
|
741
|
+
await this.inviteBot(mapping, session, record.botUserId);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
return mapping;
|
|
746
|
+
});
|
|
747
|
+
}
|
|
671
748
|
/**
|
|
672
749
|
* Remove a team's mapping. Optionally archives the Slack channel; the
|
|
673
750
|
* huddle is always archived (it is Crewly's own object).
|
|
@@ -1958,6 +2035,14 @@ export class SlackTeamChannelService {
|
|
|
1958
2035
|
continue;
|
|
1959
2036
|
await this.inviteBot(mapping, agentSession, record.botUserId);
|
|
1960
2037
|
}
|
|
2038
|
+
// Channels Crewly created for a set of agents (ensureAgentChannel).
|
|
2039
|
+
for (const mapping of this.store?.mappings ?? []) {
|
|
2040
|
+
if (!isAdhocMapping(mapping) || !mapping.autoCreated)
|
|
2041
|
+
continue;
|
|
2042
|
+
if (!(mapping.members ?? []).includes(agentSession) || record.invitedTo.includes(mapping.slackChannelId))
|
|
2043
|
+
continue;
|
|
2044
|
+
await this.inviteBot(mapping, agentSession, record.botUserId);
|
|
2045
|
+
}
|
|
1961
2046
|
}
|
|
1962
2047
|
/** Invite one bot user into a mapped channel and remember it. */
|
|
1963
2048
|
async inviteBot(mapping, agentSession, botUserId) {
|