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,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Solution bundle apply engine.
|
|
3
|
+
*
|
|
4
|
+
* Deploys a bundle template in one step, with progress:
|
|
5
|
+
*
|
|
6
|
+
* 1. `team` — create the team(s) with filled prompts (StorageService)
|
|
7
|
+
* 2. `norms` — write norms, review points and SOPs where the team's
|
|
8
|
+
* norms and SOPs live (`teams/<id>/norms`, `teams/<id>/sops`)
|
|
9
|
+
* 3. `skills` — install missing skills (marketplace, behind an interface)
|
|
10
|
+
* 4. `connectors` — report services not yet connected, with /connections links
|
|
11
|
+
* 5. `slack` — team channels + extra channels (SlackTeamChannelService),
|
|
12
|
+
* only when Slack is connected; otherwise pending
|
|
13
|
+
* 6. `schedules` — recurring tasks (CronTaskService)
|
|
14
|
+
* 7. `first_week` — day-0 tasks go to the orchestrator now (the chat path the
|
|
15
|
+
* onboarding first task uses); later days are delivered by
|
|
16
|
+
* {@link BundleApplyService.deliverDue}
|
|
17
|
+
*
|
|
18
|
+
* Idempotent and resumable: the deployment is persisted after every step;
|
|
19
|
+
* a re-run skips steps that are done, and each step skips items it already
|
|
20
|
+
* did (existing teams are kept, sent tasks are not re-sent, schedules and
|
|
21
|
+
* channels are recorded). One failing step never stops the others, except
|
|
22
|
+
* that everything needs the team.
|
|
23
|
+
*
|
|
24
|
+
* All collaborators are injected (`bundle-apply.factory.ts` wires the
|
|
25
|
+
* backend's; the CLI wires an offline set), so the engine is testable with
|
|
26
|
+
* plain fakes and works with or without a running backend.
|
|
27
|
+
*
|
|
28
|
+
* @module services/bundle/bundle-apply.service
|
|
29
|
+
*/
|
|
30
|
+
import type { Team } from '../../types/index.js';
|
|
31
|
+
import type { CreateCronTaskRequest } from '../../types/cron-task.types.js';
|
|
32
|
+
import type { BundleConnector, BundleConnectorState, BundleDeployment, BundleFirstWeekState, BundleStepState, LoadedBundle } from '../../types/solution-bundle.types.js';
|
|
33
|
+
import { type BundleAnswerProblem } from './bundle-placeholders.js';
|
|
34
|
+
import type { BundleDeploymentStore } from './bundle-state.store.js';
|
|
35
|
+
/** Installs skills. Switches to the skill-autoinstall runner when it lands. */
|
|
36
|
+
export interface BundleSkillInstaller {
|
|
37
|
+
/** Whether the skill is already usable (bundled or installed) */
|
|
38
|
+
isAvailable(skillId: string): Promise<boolean>;
|
|
39
|
+
/** Install it */
|
|
40
|
+
install(skillId: string): Promise<{
|
|
41
|
+
ok: boolean;
|
|
42
|
+
message: string;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
/** The Slack operations the engine needs. */
|
|
46
|
+
export interface BundleSlackApi {
|
|
47
|
+
isConnected(): boolean;
|
|
48
|
+
/** The team's own channel (SlackTeamChannelService.ensureTeamChannel) */
|
|
49
|
+
ensureTeamChannel(team: Team): Promise<{
|
|
50
|
+
slackChannelId: string;
|
|
51
|
+
slackChannelName: string;
|
|
52
|
+
}>;
|
|
53
|
+
/** An extra channel for some agents */
|
|
54
|
+
ensureAgentChannel(input: {
|
|
55
|
+
name: string;
|
|
56
|
+
purpose: string;
|
|
57
|
+
memberSessions: string[];
|
|
58
|
+
existingChannelId?: string;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
slackChannelId: string;
|
|
61
|
+
slackChannelName: string;
|
|
62
|
+
}>;
|
|
63
|
+
}
|
|
64
|
+
/** Creates recurring tasks (CronTaskService.create; idempotent). */
|
|
65
|
+
export interface BundleScheduleApi {
|
|
66
|
+
create(request: CreateCronTaskRequest): Promise<{
|
|
67
|
+
id: string;
|
|
68
|
+
}>;
|
|
69
|
+
}
|
|
70
|
+
/** Hands an owner message to the orchestrator (the chat path). */
|
|
71
|
+
export interface BundleOrchestratorApi {
|
|
72
|
+
send(content: string, metadata: Record<string, unknown>): Promise<{
|
|
73
|
+
conversationId: string | null;
|
|
74
|
+
forwarded: boolean;
|
|
75
|
+
queued: boolean;
|
|
76
|
+
error: string | null;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
/** Reads whether a connector is connected. */
|
|
80
|
+
export interface BundleConnectorApi {
|
|
81
|
+
check(connector: BundleConnector): Promise<BundleConnectorState['status']>;
|
|
82
|
+
}
|
|
83
|
+
/** Everything the engine uses. `null` collaborators mean "not available here" (e.g. the CLI without a backend). */
|
|
84
|
+
export interface BundleApplyDeps {
|
|
85
|
+
catalog: {
|
|
86
|
+
get(templateId: string): LoadedBundle | null;
|
|
87
|
+
};
|
|
88
|
+
store: BundleDeploymentStore;
|
|
89
|
+
/** Crewly home (norms and SOPs are written under `teams/<id>/`) */
|
|
90
|
+
crewlyHome: string;
|
|
91
|
+
teams: {
|
|
92
|
+
get(teamId: string): Promise<Team | null>;
|
|
93
|
+
save(team: Team): Promise<void>;
|
|
94
|
+
};
|
|
95
|
+
skills: BundleSkillInstaller;
|
|
96
|
+
slack: BundleSlackApi | null;
|
|
97
|
+
schedules: BundleScheduleApi | null;
|
|
98
|
+
orchestrator: BundleOrchestratorApi | null;
|
|
99
|
+
connectors: BundleConnectorApi | null;
|
|
100
|
+
/** Pick the runtime: the requested one, else a sensible default for this machine */
|
|
101
|
+
resolveRuntime(recommended: string, requested: string | undefined): Promise<string>;
|
|
102
|
+
now(): Date;
|
|
103
|
+
/** Job id factory (tests) */
|
|
104
|
+
newJobId?(): string;
|
|
105
|
+
}
|
|
106
|
+
/** What `POST /api/bundles/apply` sends. */
|
|
107
|
+
export interface BundleApplyRequest {
|
|
108
|
+
templateId: string;
|
|
109
|
+
/** Answers by question id; omitted on a re-run to reuse the stored ones */
|
|
110
|
+
answers?: unknown;
|
|
111
|
+
runtime?: string;
|
|
112
|
+
/** Deploy a `draft` bundle */
|
|
113
|
+
allowDraft?: boolean;
|
|
114
|
+
}
|
|
115
|
+
/** Error codes of the engine. */
|
|
116
|
+
export type BundleErrorCode = 'unknown_bundle' | 'bundle_not_ready' | 'invalid_runtime' | 'invalid_answers' | 'job_not_found';
|
|
117
|
+
/** A request the engine refuses before anything is written. */
|
|
118
|
+
export declare class BundleError extends Error {
|
|
119
|
+
readonly code: BundleErrorCode;
|
|
120
|
+
readonly details?: {
|
|
121
|
+
missing: BundleAnswerProblem[];
|
|
122
|
+
invalid: BundleAnswerProblem[];
|
|
123
|
+
} | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* @param code - Machine-readable code (mapped to an HTTP status by the controller)
|
|
126
|
+
* @param message - Owner-facing message
|
|
127
|
+
* @param details - Missing / invalid answers for `invalid_answers`
|
|
128
|
+
*/
|
|
129
|
+
constructor(code: BundleErrorCode, message: string, details?: {
|
|
130
|
+
missing: BundleAnswerProblem[];
|
|
131
|
+
invalid: BundleAnswerProblem[];
|
|
132
|
+
} | undefined);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* A fresh step list (all queued).
|
|
136
|
+
*
|
|
137
|
+
* @returns Steps in run order
|
|
138
|
+
*/
|
|
139
|
+
export declare function initialSteps(): BundleStepState[];
|
|
140
|
+
/**
|
|
141
|
+
* The overall status from the steps.
|
|
142
|
+
*
|
|
143
|
+
* @param steps - Steps
|
|
144
|
+
* @returns `done` when everything is done (or had nothing to do), `failed`
|
|
145
|
+
* when the team could not be created, else `partial`
|
|
146
|
+
*/
|
|
147
|
+
export declare function overallStatus(steps: BundleStepState[]): BundleDeployment['status'];
|
|
148
|
+
/**
|
|
149
|
+
* Markdown with YAML frontmatter, the shape get-team-norms / get-sops read.
|
|
150
|
+
*
|
|
151
|
+
* @param fields - Frontmatter fields (undefined values are dropped)
|
|
152
|
+
* @param body - Markdown body
|
|
153
|
+
* @returns File content
|
|
154
|
+
*/
|
|
155
|
+
export declare function withFrontmatter(fields: Record<string, string | undefined>, body: string): string;
|
|
156
|
+
/**
|
|
157
|
+
* The message a first-week task reaches the orchestrator as.
|
|
158
|
+
*
|
|
159
|
+
* @param task - Task state
|
|
160
|
+
* @param team - Team it is for
|
|
161
|
+
* @param memberName - Member it is for
|
|
162
|
+
* @param body - Filled task text
|
|
163
|
+
* @returns Message content
|
|
164
|
+
*/
|
|
165
|
+
export declare function buildFirstWeekMessage(task: BundleFirstWeekState, team: Pick<Team, 'id' | 'name'>, memberName: string, body: string): string;
|
|
166
|
+
/**
|
|
167
|
+
* The apply engine. See the module docs.
|
|
168
|
+
*/
|
|
169
|
+
export declare class BundleApplyService {
|
|
170
|
+
private readonly deps;
|
|
171
|
+
/** Deployments being applied right now, by template id */
|
|
172
|
+
private readonly running;
|
|
173
|
+
/** Starts still validating / preparing, by template id (so a double tap joins them) */
|
|
174
|
+
private readonly starting;
|
|
175
|
+
/** Serialises writes per template */
|
|
176
|
+
private readonly writes;
|
|
177
|
+
/**
|
|
178
|
+
* @param deps - Collaborators
|
|
179
|
+
*/
|
|
180
|
+
constructor(deps: BundleApplyDeps);
|
|
181
|
+
/**
|
|
182
|
+
* Validate a request and start applying it in the background.
|
|
183
|
+
*
|
|
184
|
+
* A second call while the same template is being applied returns that job
|
|
185
|
+
* (a double tap on a phone must not deploy twice). Answers left out reuse
|
|
186
|
+
* the ones stored by an earlier run.
|
|
187
|
+
*
|
|
188
|
+
* @param request - Template id, answers, runtime
|
|
189
|
+
* @returns The deployment snapshot with its `jobId`
|
|
190
|
+
* @throws BundleError `unknown_bundle` | `bundle_not_ready` | `invalid_runtime` | `invalid_answers`
|
|
191
|
+
*/
|
|
192
|
+
start(request: BundleApplyRequest): Promise<BundleDeployment>;
|
|
193
|
+
/**
|
|
194
|
+
* Apply and wait for the result (CLI, tests).
|
|
195
|
+
*
|
|
196
|
+
* @param request - Template id, answers, runtime
|
|
197
|
+
* @returns The finished deployment
|
|
198
|
+
* @throws BundleError like {@link start}
|
|
199
|
+
*/
|
|
200
|
+
applyAndWait(request: BundleApplyRequest): Promise<BundleDeployment>;
|
|
201
|
+
/**
|
|
202
|
+
* Progress of a job: the live deployment while it runs, else the stored one.
|
|
203
|
+
*
|
|
204
|
+
* @param jobId - Job id from {@link start}
|
|
205
|
+
* @returns The deployment
|
|
206
|
+
* @throws BundleError `job_not_found`
|
|
207
|
+
*/
|
|
208
|
+
getJob(jobId: string): Promise<BundleDeployment>;
|
|
209
|
+
/**
|
|
210
|
+
* The deployment of a template on this machine.
|
|
211
|
+
*
|
|
212
|
+
* @param templateId - Template id
|
|
213
|
+
* @returns The deployment, or null when it was never applied
|
|
214
|
+
*/
|
|
215
|
+
getDeployment(templateId: string): Promise<BundleDeployment | null>;
|
|
216
|
+
/**
|
|
217
|
+
* Deliver first-week tasks that are due (the backend calls this on a timer).
|
|
218
|
+
*
|
|
219
|
+
* @returns Number of tasks sent
|
|
220
|
+
*/
|
|
221
|
+
deliverDue(): Promise<number>;
|
|
222
|
+
/**
|
|
223
|
+
* Re-run deployments that were waiting on something that is now there:
|
|
224
|
+
* the backend (after a CLI deploy without one) or Slack.
|
|
225
|
+
*
|
|
226
|
+
* @returns Template ids that were restarted
|
|
227
|
+
*/
|
|
228
|
+
resumeWaiting(): Promise<string[]>;
|
|
229
|
+
/**
|
|
230
|
+
* Validate, prepare the deployment and start the run.
|
|
231
|
+
*
|
|
232
|
+
* @param request - Request
|
|
233
|
+
* @returns The deployment and a promise of the finished one
|
|
234
|
+
*/
|
|
235
|
+
private begin;
|
|
236
|
+
/**
|
|
237
|
+
* Validate the request, build and persist the deployment, start the run.
|
|
238
|
+
*
|
|
239
|
+
* @param request - Request
|
|
240
|
+
* @returns The deployment and a promise of the finished one
|
|
241
|
+
* @throws BundleError for a refused request
|
|
242
|
+
*/
|
|
243
|
+
private prepare;
|
|
244
|
+
/**
|
|
245
|
+
* Shared context for a deployment.
|
|
246
|
+
*
|
|
247
|
+
* @param entry - Loaded bundle
|
|
248
|
+
* @param deployment - Deployment
|
|
249
|
+
* @param answers - Answers
|
|
250
|
+
* @returns Context
|
|
251
|
+
*/
|
|
252
|
+
private contextFor;
|
|
253
|
+
/**
|
|
254
|
+
* Run every step that is not done, persisting after each.
|
|
255
|
+
*
|
|
256
|
+
* @param ctx - Context
|
|
257
|
+
* @returns The finished deployment
|
|
258
|
+
*/
|
|
259
|
+
private run;
|
|
260
|
+
/**
|
|
261
|
+
* Apply an outcome to a step.
|
|
262
|
+
*
|
|
263
|
+
* @param step - Step
|
|
264
|
+
* @param outcome - Outcome
|
|
265
|
+
*/
|
|
266
|
+
private finishStep;
|
|
267
|
+
/**
|
|
268
|
+
* Stamp and persist.
|
|
269
|
+
*
|
|
270
|
+
* @param deployment - Deployment
|
|
271
|
+
*/
|
|
272
|
+
private touch;
|
|
273
|
+
/**
|
|
274
|
+
* Persist a deployment; writes of one template never overlap.
|
|
275
|
+
*
|
|
276
|
+
* @param deployment - Deployment
|
|
277
|
+
*/
|
|
278
|
+
private persist;
|
|
279
|
+
/**
|
|
280
|
+
* The saved team for a bundle team key.
|
|
281
|
+
*
|
|
282
|
+
* @param ctx - Context
|
|
283
|
+
* @param key - Team key
|
|
284
|
+
* @returns The team
|
|
285
|
+
* @throws Error when it is missing (deleted since the team step)
|
|
286
|
+
*/
|
|
287
|
+
private savedTeam;
|
|
288
|
+
/**
|
|
289
|
+
* Placeholder values of a saved team.
|
|
290
|
+
*
|
|
291
|
+
* @param ctx - Context
|
|
292
|
+
* @param team - Saved team
|
|
293
|
+
* @returns Values (answers + team_name + lead_name)
|
|
294
|
+
*/
|
|
295
|
+
private valuesFor;
|
|
296
|
+
/**
|
|
297
|
+
* Resolve a member ref (default: the main team's lead).
|
|
298
|
+
*
|
|
299
|
+
* @param ctx - Context
|
|
300
|
+
* @param ref - `role` / `team/role`, or undefined
|
|
301
|
+
* @returns Team and member session / name
|
|
302
|
+
*/
|
|
303
|
+
private resolveRef;
|
|
304
|
+
/** Step `team`: create every team that does not exist yet. */
|
|
305
|
+
private stepTeam;
|
|
306
|
+
/** Step `norms`: norms, review points and SOPs into the teams' folders. */
|
|
307
|
+
private stepNorms;
|
|
308
|
+
/**
|
|
309
|
+
* The body of a norm / SOP: inline content or the referenced file.
|
|
310
|
+
*
|
|
311
|
+
* @param ctx - Context
|
|
312
|
+
* @param doc - Norm or SOP
|
|
313
|
+
* @returns Markdown body (unfilled)
|
|
314
|
+
*/
|
|
315
|
+
private docBody;
|
|
316
|
+
/**
|
|
317
|
+
* Write a file atomically, creating its folder.
|
|
318
|
+
*
|
|
319
|
+
* @param file - Absolute path
|
|
320
|
+
* @param content - Content
|
|
321
|
+
*/
|
|
322
|
+
private writeDoc;
|
|
323
|
+
/** Step `skills`: install what is missing. */
|
|
324
|
+
private stepSkills;
|
|
325
|
+
/** Step `connectors`: which services still need connecting. */
|
|
326
|
+
private stepConnectors;
|
|
327
|
+
/** Step `slack`: team channels and extra channels. */
|
|
328
|
+
private stepSlack;
|
|
329
|
+
/** Step `schedules`: recurring tasks through the cron-task scheduler. */
|
|
330
|
+
private stepSchedules;
|
|
331
|
+
/**
|
|
332
|
+
* A valid timezone from a (placeholder) value, the bundle's, or the default.
|
|
333
|
+
*
|
|
334
|
+
* @param ctx - Context
|
|
335
|
+
* @param values - Placeholder values
|
|
336
|
+
* @param override - Schedule's own timezone
|
|
337
|
+
* @returns IANA timezone
|
|
338
|
+
* @throws Error when the filled timezone is not valid
|
|
339
|
+
*/
|
|
340
|
+
private timezoneFor;
|
|
341
|
+
/** Step `first_week`: send today's tasks, schedule the rest. */
|
|
342
|
+
private stepFirstWeek;
|
|
343
|
+
/**
|
|
344
|
+
* Send one first-week task through the orchestrator and record the result.
|
|
345
|
+
*
|
|
346
|
+
* @param ctx - Context
|
|
347
|
+
* @param state - Task state (updated in place)
|
|
348
|
+
* @returns True when it was handed over
|
|
349
|
+
*/
|
|
350
|
+
private sendFirstWeekTask;
|
|
351
|
+
/**
|
|
352
|
+
* The first-week step's state from its tasks.
|
|
353
|
+
*
|
|
354
|
+
* @param deployment - Deployment
|
|
355
|
+
* @returns Outcome
|
|
356
|
+
*/
|
|
357
|
+
private firstWeekOutcome;
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=bundle-apply.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-apply.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/bundle/bundle-apply.service.ts"],"names":[],"mappings":"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"}
|