@zixt/host 0.0.130 → 0.0.132
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/index.js +505 -15
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { homedir as homedir4 } from "node:os";
|
|
|
28
28
|
// package.json
|
|
29
29
|
var package_default = {
|
|
30
30
|
name: "@zixt/host",
|
|
31
|
-
version: "0.0.
|
|
31
|
+
version: "0.0.132",
|
|
32
32
|
type: "module",
|
|
33
33
|
exports: {
|
|
34
34
|
".": "./src/client.ts",
|
|
@@ -14699,7 +14699,13 @@ var ID_PREFIXES = {
|
|
|
14699
14699
|
/** One durable caller-transcript or Manager-speech delivery. */
|
|
14700
14700
|
voiceTurn: "vtr",
|
|
14701
14701
|
/** One signed voice-provider webhook receipt. */
|
|
14702
|
-
voiceWebhookEvent: "vwe"
|
|
14702
|
+
voiceWebhookEvent: "vwe",
|
|
14703
|
+
/** Org-singleton Company setup record (PRD OB-5). */
|
|
14704
|
+
companySetup: "cst",
|
|
14705
|
+
/** One durable set of teammate-proposed Automations awaiting an Admin (OB-12). */
|
|
14706
|
+
automationProposalSet: "aps",
|
|
14707
|
+
/** One product-feedback report passed to the Zixt team (MG-23). */
|
|
14708
|
+
productFeedback: "pfb"
|
|
14703
14709
|
};
|
|
14704
14710
|
var idPattern = (prefix) => new RegExp(`^${prefix}_[0-9a-f]{32}$`);
|
|
14705
14711
|
function newId(prefix) {
|
|
@@ -14707,6 +14713,7 @@ function newId(prefix) {
|
|
|
14707
14713
|
}
|
|
14708
14714
|
var idSchema = (prefix, name) => external_exports.string().regex(idPattern(prefix), `invalid ${name}`);
|
|
14709
14715
|
var OrgId = idSchema(ID_PREFIXES.org, "org id");
|
|
14716
|
+
var CompanySetupId = idSchema(ID_PREFIXES.companySetup, "company setup id");
|
|
14710
14717
|
var MemberId = idSchema(ID_PREFIXES.member, "member id");
|
|
14711
14718
|
var AgentId = idSchema(ID_PREFIXES.agent, "agent id");
|
|
14712
14719
|
var AgentAvatarId = idSchema(ID_PREFIXES.agentAvatar, "agent avatar id");
|
|
@@ -14724,6 +14731,10 @@ var IntegrationLogoId = idSchema(ID_PREFIXES.integrationLogo, "Integration logo
|
|
|
14724
14731
|
var ApprovalId = idSchema(ID_PREFIXES.approval, "approval id");
|
|
14725
14732
|
var ScheduleId = idSchema(ID_PREFIXES.schedule, "schedule id");
|
|
14726
14733
|
var WebhookAutomationId = idSchema(ID_PREFIXES.webhookAutomation, "Webhook Automation id");
|
|
14734
|
+
var AutomationProposalSetId = idSchema(
|
|
14735
|
+
ID_PREFIXES.automationProposalSet,
|
|
14736
|
+
"automation proposal set id"
|
|
14737
|
+
);
|
|
14727
14738
|
var WebhookDeliveryId = idSchema(ID_PREFIXES.webhookDelivery, "webhook delivery id");
|
|
14728
14739
|
var OrgSkillId = idSchema(ID_PREFIXES.orgSkill, "organization skill id");
|
|
14729
14740
|
var OrgRoutineId = idSchema(ID_PREFIXES.orgRoutine, "organization routine id");
|
|
@@ -15193,9 +15204,12 @@ var LinearProviderTaskOrigin = external_exports.object({
|
|
|
15193
15204
|
// ../../packages/contracts/src/skills.ts
|
|
15194
15205
|
var TeammateRoleTemplate = external_exports.enum([
|
|
15195
15206
|
"developer",
|
|
15207
|
+
"website",
|
|
15196
15208
|
"marketing",
|
|
15197
15209
|
"product",
|
|
15198
15210
|
"sales",
|
|
15211
|
+
"support",
|
|
15212
|
+
"operations",
|
|
15199
15213
|
"custom"
|
|
15200
15214
|
]);
|
|
15201
15215
|
var SkillId = external_exports.enum([
|
|
@@ -15235,7 +15249,14 @@ var SkillId = external_exports.enum([
|
|
|
15235
15249
|
"review-pipeline-risk",
|
|
15236
15250
|
"identify-expansion-opportunities",
|
|
15237
15251
|
"synthesize-customer-objections",
|
|
15238
|
-
"prepare-proposals"
|
|
15252
|
+
"prepare-proposals",
|
|
15253
|
+
"maintain-website-content",
|
|
15254
|
+
"keep-website-healthy",
|
|
15255
|
+
"resolve-customer-requests",
|
|
15256
|
+
"maintain-faq-answers",
|
|
15257
|
+
"coordinate-schedules",
|
|
15258
|
+
"prepare-daily-briefs",
|
|
15259
|
+
"maintain-records"
|
|
15239
15260
|
]);
|
|
15240
15261
|
var SkillReferenceId = external_exports.union([SkillId, OrgSkillId]);
|
|
15241
15262
|
var EnabledSkillIds = external_exports.array(SkillReferenceId).max(200).refine((items) => new Set(items).size === items.length, "duplicate skill").default([]);
|
|
@@ -15274,6 +15295,7 @@ var ListOrgSkillsResponse = external_exports.object({
|
|
|
15274
15295
|
builtInCustomizations: external_exports.array(OrgBuiltInSkillCustomization)
|
|
15275
15296
|
});
|
|
15276
15297
|
var RoutineTemplateCadence = external_exports.discriminatedUnion("kind", [
|
|
15298
|
+
external_exports.object({ kind: external_exports.literal("every"), minutes: external_exports.number().int().min(5).max(1440) }),
|
|
15277
15299
|
external_exports.object({
|
|
15278
15300
|
kind: external_exports.literal("daily"),
|
|
15279
15301
|
hour: external_exports.number().int().min(0).max(23),
|
|
@@ -15290,14 +15312,26 @@ var RoutinePresetId = external_exports.enum([
|
|
|
15290
15312
|
"developer-weekly-architecture-review",
|
|
15291
15313
|
"developer-weekly-dependency-review",
|
|
15292
15314
|
"developer-weekly-release-review",
|
|
15315
|
+
"developer-hourly-service-health-check",
|
|
15293
15316
|
"product-daily-triage",
|
|
15294
15317
|
"product-weekly-feedback-review",
|
|
15295
15318
|
"product-weekly-roadmap-review",
|
|
15296
15319
|
"marketing-weekly-campaign-review",
|
|
15297
15320
|
"marketing-weekly-editorial-review",
|
|
15321
|
+
"marketing-daily-review-check",
|
|
15322
|
+
"marketing-daily-ad-spend-check",
|
|
15323
|
+
"marketing-daily-social-inbox-check",
|
|
15298
15324
|
"sales-daily-follow-up-review",
|
|
15299
15325
|
"sales-weekly-pipeline-review",
|
|
15300
|
-
"sales-weekly-objection-review"
|
|
15326
|
+
"sales-weekly-objection-review",
|
|
15327
|
+
"sales-daily-inbound-lead-check",
|
|
15328
|
+
"website-weekly-site-audit",
|
|
15329
|
+
"website-daily-uptime-check",
|
|
15330
|
+
"support-daily-inbox-triage",
|
|
15331
|
+
"support-weekly-question-review",
|
|
15332
|
+
"support-hourly-urgent-check",
|
|
15333
|
+
"operations-daily-schedule-brief",
|
|
15334
|
+
"operations-weekly-records-review"
|
|
15301
15335
|
]);
|
|
15302
15336
|
var RoutineTemplateReferenceId = external_exports.union([RoutinePresetId, OrgRoutineId]);
|
|
15303
15337
|
var OrgRoutine = external_exports.object({
|
|
@@ -16830,6 +16864,14 @@ var ScheduleCadence = external_exports.discriminatedUnion("kind", [
|
|
|
16830
16864
|
dayOfWeek: external_exports.number().int().min(0).max(6),
|
|
16831
16865
|
hourUtc: external_exports.number().int().min(0).max(23),
|
|
16832
16866
|
minuteUtc: external_exports.number().int().min(0).max(59).default(0)
|
|
16867
|
+
}),
|
|
16868
|
+
external_exports.object({
|
|
16869
|
+
kind: external_exports.literal("monthly"),
|
|
16870
|
+
/** 1–28 (UTC) so the occurrence exists in every month; 29–31 is refused
|
|
16871
|
+
* rather than sliding to a guessed last day (SCH-1). */
|
|
16872
|
+
dayOfMonth: external_exports.number().int().min(1).max(28),
|
|
16873
|
+
hourUtc: external_exports.number().int().min(0).max(23),
|
|
16874
|
+
minuteUtc: external_exports.number().int().min(0).max(59).default(0)
|
|
16833
16875
|
})
|
|
16834
16876
|
]);
|
|
16835
16877
|
var ScheduleSkipReason = external_exports.enum([
|
|
@@ -16913,6 +16955,77 @@ var ListSchedulesResponse = external_exports.object({
|
|
|
16913
16955
|
schedules: external_exports.array(Schedule)
|
|
16914
16956
|
});
|
|
16915
16957
|
|
|
16958
|
+
// ../../packages/contracts/src/automation-proposals.ts
|
|
16959
|
+
var ItemKey = external_exports.string().regex(/^[a-z][a-z0-9_-]{0,63}$/);
|
|
16960
|
+
var AutomationProposalTrigger = external_exports.discriminatedUnion("kind", [
|
|
16961
|
+
/** A recurring schedule; cadence hours are UTC exactly like `schedule_task`. */
|
|
16962
|
+
external_exports.object({ kind: external_exports.literal("schedule"), cadence: ScheduleCadence }),
|
|
16963
|
+
/**
|
|
16964
|
+
* An external system pushes events to a Webhook Automation endpoint (SCH-6).
|
|
16965
|
+
* `source` names who is expected to call ("Grafana"); the bearer secret is
|
|
16966
|
+
* cloud-generated at acceptance and never passes through the proposing run.
|
|
16967
|
+
*/
|
|
16968
|
+
external_exports.object({
|
|
16969
|
+
kind: external_exports.literal("webhook"),
|
|
16970
|
+
source: external_exports.string().trim().min(1).max(120).nullable()
|
|
16971
|
+
})
|
|
16972
|
+
]);
|
|
16973
|
+
var AutomationProposalItemStatus = external_exports.enum(["proposed", "created", "dismissed"]);
|
|
16974
|
+
var AutomationProposalItem = external_exports.object({
|
|
16975
|
+
key: ItemKey,
|
|
16976
|
+
name: external_exports.string().trim().min(1).max(120),
|
|
16977
|
+
instructions: external_exports.string().trim().min(1).max(1e4),
|
|
16978
|
+
trigger: AutomationProposalTrigger,
|
|
16979
|
+
/** Honest one line: why this check helps this business. */
|
|
16980
|
+
why: external_exports.string().trim().min(1).max(300),
|
|
16981
|
+
status: AutomationProposalItemStatus,
|
|
16982
|
+
createdScheduleId: ScheduleId.nullable(),
|
|
16983
|
+
createdWebhookAutomationId: WebhookAutomationId.nullable()
|
|
16984
|
+
});
|
|
16985
|
+
var AutomationProposalSetStatus = external_exports.enum(["pending", "decided"]);
|
|
16986
|
+
var AUTOMATION_PROPOSAL_MAX_ITEMS = 10;
|
|
16987
|
+
var AutomationProposalSet = external_exports.object({
|
|
16988
|
+
id: AutomationProposalSetId,
|
|
16989
|
+
orgId: OrgId,
|
|
16990
|
+
agentId: AgentId,
|
|
16991
|
+
/** Joined for display; "a removed AI teammate" when the Agent is gone. */
|
|
16992
|
+
agentName: external_exports.string().min(1).max(120).nullable(),
|
|
16993
|
+
taskId: TaskId,
|
|
16994
|
+
/** What was explored / why these, in the teammate's words. */
|
|
16995
|
+
summary: external_exports.string().trim().min(1).max(600),
|
|
16996
|
+
items: external_exports.array(AutomationProposalItem).max(AUTOMATION_PROPOSAL_MAX_ITEMS),
|
|
16997
|
+
status: AutomationProposalSetStatus,
|
|
16998
|
+
originTrust: external_exports.enum(["internal", "external"]),
|
|
16999
|
+
createdAt: IsoDate,
|
|
17000
|
+
decidedAt: IsoDate.nullable(),
|
|
17001
|
+
decidedBy: MemberId.nullable()
|
|
17002
|
+
});
|
|
17003
|
+
var ListAutomationProposalsResponse = external_exports.object({
|
|
17004
|
+
proposals: external_exports.array(AutomationProposalSet)
|
|
17005
|
+
});
|
|
17006
|
+
var DecideAutomationProposalsRequest = external_exports.object({
|
|
17007
|
+
accept: external_exports.array(ItemKey).max(AUTOMATION_PROPOSAL_MAX_ITEMS).default([]),
|
|
17008
|
+
dismiss: external_exports.array(ItemKey).max(AUTOMATION_PROPOSAL_MAX_ITEMS).default([])
|
|
17009
|
+
}).refine(
|
|
17010
|
+
(value) => value.accept.length + value.dismiss.length > 0,
|
|
17011
|
+
"name at least one proposal to accept or dismiss"
|
|
17012
|
+
).refine(
|
|
17013
|
+
(value) => value.accept.every((key) => !value.dismiss.includes(key)),
|
|
17014
|
+
"a proposal cannot be both accepted and dismissed"
|
|
17015
|
+
);
|
|
17016
|
+
var CreatedWebhookSetup = external_exports.object({
|
|
17017
|
+
itemKey: ItemKey,
|
|
17018
|
+
webhookAutomationId: WebhookAutomationId,
|
|
17019
|
+
endpointUrl: external_exports.string().url(),
|
|
17020
|
+
/** Cloud-generated bearer secret, or null when a raced/recovered acceptance already consumed the one showing. */
|
|
17021
|
+
bearerToken: external_exports.string().min(8).max(200).nullable()
|
|
17022
|
+
});
|
|
17023
|
+
var DecideAutomationProposalsResponse = external_exports.object({
|
|
17024
|
+
proposalSet: AutomationProposalSet,
|
|
17025
|
+
createdScheduleIds: external_exports.array(ScheduleId),
|
|
17026
|
+
createdWebhooks: external_exports.array(CreatedWebhookSetup)
|
|
17027
|
+
});
|
|
17028
|
+
|
|
16916
17029
|
// ../../packages/contracts/src/reviews.ts
|
|
16917
17030
|
var TaskReviewMode = external_exports.enum(["none", "required"]);
|
|
16918
17031
|
var TaskReviewStatus = external_exports.enum(["unreviewed", "accepted", "changes_requested"]);
|
|
@@ -18179,6 +18292,24 @@ var AgentOp = external_exports.union([
|
|
|
18179
18292
|
}),
|
|
18180
18293
|
external_exports.object({ kind: external_exports.literal("schedule.list") }),
|
|
18181
18294
|
external_exports.object({ kind: external_exports.literal("schedule.delete"), scheduleId: ScheduleId }),
|
|
18295
|
+
/**
|
|
18296
|
+
* OB-12: record recurring Automations this teammate recommends, without
|
|
18297
|
+
* creating anything. The set becomes a durable Needs-attention obligation an
|
|
18298
|
+
* Admin decides; `schedule_task` stays the path for work a person asked for.
|
|
18299
|
+
* Zero items is an honest "explored; nothing recurring needed".
|
|
18300
|
+
*/
|
|
18301
|
+
external_exports.object({
|
|
18302
|
+
kind: external_exports.literal("automation.propose"),
|
|
18303
|
+
summary: external_exports.string().trim().min(1).max(600),
|
|
18304
|
+
items: external_exports.array(
|
|
18305
|
+
external_exports.object({
|
|
18306
|
+
name: external_exports.string().trim().min(1).max(120),
|
|
18307
|
+
instructions: external_exports.string().trim().min(1).max(1e4),
|
|
18308
|
+
trigger: AutomationProposalTrigger,
|
|
18309
|
+
why: external_exports.string().trim().min(1).max(300)
|
|
18310
|
+
})
|
|
18311
|
+
).max(AUTOMATION_PROPOSAL_MAX_ITEMS)
|
|
18312
|
+
}),
|
|
18182
18313
|
external_exports.object({
|
|
18183
18314
|
kind: external_exports.literal("secret.put"),
|
|
18184
18315
|
name: SecretName,
|
|
@@ -19555,6 +19686,11 @@ var ManagerConfigProjection = external_exports.object({
|
|
|
19555
19686
|
* switch for each surface without disconnecting the workspace.
|
|
19556
19687
|
*/
|
|
19557
19688
|
slack: external_exports.object({ answerMentions: external_exports.boolean(), answerDirectMessages: external_exports.boolean() }).strict(),
|
|
19689
|
+
/**
|
|
19690
|
+
* Index into the bundled Manager portrait set shown wherever the Manager
|
|
19691
|
+
* speaks; every organization starts on the deployment default (0).
|
|
19692
|
+
*/
|
|
19693
|
+
portrait: external_exports.number().int().min(0).max(63).default(0),
|
|
19558
19694
|
revision: external_exports.number().int().min(0),
|
|
19559
19695
|
updatedAt: external_exports.string().nullable()
|
|
19560
19696
|
}).strict();
|
|
@@ -19569,10 +19705,11 @@ var UpdateManagerRequest = external_exports.object({
|
|
|
19569
19705
|
answerMentions: external_exports.boolean().optional(),
|
|
19570
19706
|
answerDirectMessages: external_exports.boolean().optional()
|
|
19571
19707
|
}).strict().optional(),
|
|
19708
|
+
portrait: external_exports.number().int().min(0).max(63).optional(),
|
|
19572
19709
|
/** Optimistic concurrency: refuse when another admin saved first. */
|
|
19573
19710
|
expectedRevision: external_exports.number().int().min(0).optional()
|
|
19574
19711
|
}).strict().superRefine((value, ctx) => {
|
|
19575
|
-
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0) {
|
|
19712
|
+
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0 && value.portrait === void 0) {
|
|
19576
19713
|
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
19577
19714
|
}
|
|
19578
19715
|
});
|
|
@@ -20970,7 +21107,11 @@ var AttentionItemType = external_exports.enum([
|
|
|
20970
21107
|
/** An Automation paused itself and cannot resume without a person's decision. */
|
|
20971
21108
|
"automation_paused",
|
|
20972
21109
|
/** An Automation was kept running but its Machine preference changed. */
|
|
20973
|
-
"automation_moved"
|
|
21110
|
+
"automation_moved",
|
|
21111
|
+
/** A teammate proposed recurring Automations awaiting an Admin's decision (OB-12). */
|
|
21112
|
+
"automation_proposal",
|
|
21113
|
+
/** A previously seen Machine went offline; teammates may have no computer to work on. */
|
|
21114
|
+
"machine_offline"
|
|
20974
21115
|
]);
|
|
20975
21116
|
var AttentionCategory = external_exports.enum([
|
|
20976
21117
|
"answer_question",
|
|
@@ -21004,7 +21145,9 @@ var AttentionItem = external_exports.object({
|
|
|
21004
21145
|
"readiness",
|
|
21005
21146
|
"integration",
|
|
21006
21147
|
"schedule",
|
|
21007
|
-
"manager_questionnaire"
|
|
21148
|
+
"manager_questionnaire",
|
|
21149
|
+
"host",
|
|
21150
|
+
"automation_proposal_set"
|
|
21008
21151
|
]),
|
|
21009
21152
|
id: external_exports.string().min(1),
|
|
21010
21153
|
version: external_exports.string().min(1)
|
|
@@ -21020,7 +21163,9 @@ var AttentionItem = external_exports.object({
|
|
|
21020
21163
|
"retry",
|
|
21021
21164
|
"repair",
|
|
21022
21165
|
/** Choose a Machine for a paused Automation, or set it back to automatic. */
|
|
21023
|
-
"resume_automation"
|
|
21166
|
+
"resume_automation",
|
|
21167
|
+
/** Create or dismiss a teammate's proposed Automations (OB-12; Admin/Owner). */
|
|
21168
|
+
"decide_automation_proposals"
|
|
21024
21169
|
]),
|
|
21025
21170
|
allowed: external_exports.boolean()
|
|
21026
21171
|
})
|
|
@@ -22014,13 +22159,24 @@ var SetupGuideToolResult = external_exports.object({
|
|
|
22014
22159
|
result: external_exports.string().trim().min(1).max(4e3),
|
|
22015
22160
|
page: SetupGuidePageContext
|
|
22016
22161
|
});
|
|
22162
|
+
var SetupGuideMission = external_exports.object({
|
|
22163
|
+
id: external_exports.string().regex(/^[a-z][a-z0-9_.:-]{0,120}$/),
|
|
22164
|
+
kind: external_exports.enum(["machine", "teammate", "integration", "automation", "first_task"]),
|
|
22165
|
+
goal: external_exports.string().trim().min(1).max(600),
|
|
22166
|
+
targetHref: external_exports.string().startsWith("/").max(2e3),
|
|
22167
|
+
returnHref: external_exports.string().startsWith("/").max(2e3),
|
|
22168
|
+
facts: external_exports.array(SetupGuideContextFact).max(12).default([]),
|
|
22169
|
+
/** Never a secret; the Guide only fills visible non-secure fields with these. */
|
|
22170
|
+
prefills: external_exports.array(SetupGuideActionParameter).max(12).default([])
|
|
22171
|
+
});
|
|
22017
22172
|
var SetupGuideReplyRequest = external_exports.object({
|
|
22018
22173
|
message: GuideText,
|
|
22019
22174
|
history: external_exports.array(SetupGuideHistoryMessage).max(12).default([]),
|
|
22020
22175
|
page: SetupGuidePageContext,
|
|
22021
22176
|
onboarding: SetupGuideOnboardingState,
|
|
22022
22177
|
actions: external_exports.array(SetupGuideAvailableAction).max(128),
|
|
22023
|
-
toolResults: external_exports.array(SetupGuideToolResult).max(12).default([])
|
|
22178
|
+
toolResults: external_exports.array(SetupGuideToolResult).max(12).default([]),
|
|
22179
|
+
mission: SetupGuideMission.nullable().optional()
|
|
22024
22180
|
});
|
|
22025
22181
|
var SetupGuideProposedAction = external_exports.object({
|
|
22026
22182
|
actionId: external_exports.string().regex(/^[a-z][a-z0-9_.-]{0,79}$/),
|
|
@@ -22045,6 +22201,328 @@ var SetupGuideTranscriptionResponse = external_exports.object({
|
|
|
22045
22201
|
text: GuideText
|
|
22046
22202
|
});
|
|
22047
22203
|
|
|
22204
|
+
// ../../packages/contracts/src/roles.ts
|
|
22205
|
+
var CompanyToolKind = external_exports.enum([
|
|
22206
|
+
"github",
|
|
22207
|
+
"slack",
|
|
22208
|
+
"linear",
|
|
22209
|
+
"email",
|
|
22210
|
+
"mcp",
|
|
22211
|
+
"api",
|
|
22212
|
+
"whatsapp",
|
|
22213
|
+
"browser"
|
|
22214
|
+
]);
|
|
22215
|
+
var RoleRecommendedIntegration = external_exports.object({
|
|
22216
|
+
kind: CompanyToolKind,
|
|
22217
|
+
label: external_exports.string().trim().min(1).max(80),
|
|
22218
|
+
purpose: external_exports.string().trim().min(1).max(200)
|
|
22219
|
+
});
|
|
22220
|
+
|
|
22221
|
+
// ../../packages/contracts/src/company-setup.ts
|
|
22222
|
+
var Key = external_exports.string().regex(/^[a-z][a-z0-9_-]{0,63}$/);
|
|
22223
|
+
var CompanySetupStatus = external_exports.enum([
|
|
22224
|
+
/** No record exists yet. */
|
|
22225
|
+
"not_started",
|
|
22226
|
+
/** The page was opened and the first question prepared; nothing answered. */
|
|
22227
|
+
"offered",
|
|
22228
|
+
"interviewing",
|
|
22229
|
+
/** A plan exists and awaits edits or approval. */
|
|
22230
|
+
"planned",
|
|
22231
|
+
/** The team was created; required and recommended steps are tracked. */
|
|
22232
|
+
"approved"
|
|
22233
|
+
]);
|
|
22234
|
+
var CompanySetupOrgKind = external_exports.enum(["personal", "company"]);
|
|
22235
|
+
var InterviewAnswer = external_exports.discriminatedUnion("kind", [
|
|
22236
|
+
external_exports.object({ kind: external_exports.literal("text"), text: external_exports.string().trim().min(1).max(2e3) }),
|
|
22237
|
+
external_exports.object({ kind: external_exports.literal("skipped") }),
|
|
22238
|
+
/** "Not sure, suggest for me": the planner chooses a sensible default. */
|
|
22239
|
+
external_exports.object({ kind: external_exports.literal("suggest") })
|
|
22240
|
+
]);
|
|
22241
|
+
var InterviewQuestion = external_exports.object({
|
|
22242
|
+
id: Key,
|
|
22243
|
+
prompt: external_exports.string().trim().min(1).max(400),
|
|
22244
|
+
/** One-line explanation of a Zixt noun the first time it appears; null otherwise. */
|
|
22245
|
+
gloss: external_exports.string().trim().min(1).max(300).nullable(),
|
|
22246
|
+
examples: external_exports.array(external_exports.string().trim().min(1).max(120)).max(6),
|
|
22247
|
+
allowSuggest: external_exports.boolean()
|
|
22248
|
+
});
|
|
22249
|
+
var InterviewTurn = InterviewQuestion.extend({
|
|
22250
|
+
round: external_exports.number().int().min(1),
|
|
22251
|
+
answer: InterviewAnswer.nullable(),
|
|
22252
|
+
answeredAt: IsoDate.nullable(),
|
|
22253
|
+
/** Tailored options fetched by "Not sure, suggest for me"; the person picks, edits, then continues. */
|
|
22254
|
+
suggestions: external_exports.array(external_exports.string().trim().min(1).max(200)).max(8).default([]),
|
|
22255
|
+
/** The answer here was passed to the Zixt team as product feedback (MG-23); the transcript says so. */
|
|
22256
|
+
feedbackNoted: external_exports.boolean().default(false)
|
|
22257
|
+
});
|
|
22258
|
+
var CompanySetupInterview = external_exports.object({
|
|
22259
|
+
turns: external_exports.array(InterviewTurn).max(40),
|
|
22260
|
+
/** Increments each time the interview is re-run for an additive re-plan. */
|
|
22261
|
+
round: external_exports.number().int().min(1),
|
|
22262
|
+
complete: external_exports.boolean(),
|
|
22263
|
+
/** The next question is being generated; the interview is neither complete nor waiting on the person. */
|
|
22264
|
+
preparingQuestion: external_exports.boolean().default(false),
|
|
22265
|
+
minimumAnswers: external_exports.number().int().min(1),
|
|
22266
|
+
maximumQuestions: external_exports.number().int().min(1)
|
|
22267
|
+
});
|
|
22268
|
+
var PlannedToolAvailability = external_exports.enum([
|
|
22269
|
+
/** A connected Integration of this kind already exists. */
|
|
22270
|
+
"connected",
|
|
22271
|
+
/** The Integration catalog can connect it. */
|
|
22272
|
+
"connectable",
|
|
22273
|
+
/** Reachable through an API Integration (Custom API / discovery). */
|
|
22274
|
+
"api_catalog",
|
|
22275
|
+
/** The teammate uses the website through a saved sign-in in its Browser. */
|
|
22276
|
+
"browser",
|
|
22277
|
+
"not_yet"
|
|
22278
|
+
]);
|
|
22279
|
+
var PlannedTool = external_exports.object({
|
|
22280
|
+
key: Key,
|
|
22281
|
+
label: external_exports.string().trim().min(1).max(80),
|
|
22282
|
+
purpose: external_exports.string().trim().min(1).max(300),
|
|
22283
|
+
kind: CompanyToolKind,
|
|
22284
|
+
availability: PlannedToolAvailability,
|
|
22285
|
+
/** Catalog Integration name when `availability` is connectable or api_catalog. */
|
|
22286
|
+
catalogName: external_exports.string().trim().min(1).max(120).nullable(),
|
|
22287
|
+
why: external_exports.string().trim().min(1).max(300),
|
|
22288
|
+
enabled: external_exports.boolean()
|
|
22289
|
+
});
|
|
22290
|
+
var PlannedCadence = external_exports.discriminatedUnion("kind", [
|
|
22291
|
+
external_exports.object({
|
|
22292
|
+
kind: external_exports.literal("daily"),
|
|
22293
|
+
hour: external_exports.number().int().min(0).max(23),
|
|
22294
|
+
minute: external_exports.number().int().min(0).max(59)
|
|
22295
|
+
}),
|
|
22296
|
+
external_exports.object({
|
|
22297
|
+
kind: external_exports.literal("weekly"),
|
|
22298
|
+
dayOfWeek: external_exports.number().int().min(0).max(6),
|
|
22299
|
+
hour: external_exports.number().int().min(0).max(23),
|
|
22300
|
+
minute: external_exports.number().int().min(0).max(59)
|
|
22301
|
+
}),
|
|
22302
|
+
external_exports.object({
|
|
22303
|
+
kind: external_exports.literal("monthly"),
|
|
22304
|
+
/** 1–28, the window every month has (SCH-1); month-start work lives here. */
|
|
22305
|
+
dayOfMonth: external_exports.number().int().min(1).max(28),
|
|
22306
|
+
hour: external_exports.number().int().min(0).max(23),
|
|
22307
|
+
minute: external_exports.number().int().min(0).max(59)
|
|
22308
|
+
}),
|
|
22309
|
+
external_exports.object({ kind: external_exports.literal("every"), minutes: external_exports.number().int().min(5).max(1440) })
|
|
22310
|
+
]);
|
|
22311
|
+
var PlannedAutomationTrigger = external_exports.enum(["schedule", "webhook"]);
|
|
22312
|
+
var PlannedAutomation = external_exports.object({
|
|
22313
|
+
key: Key,
|
|
22314
|
+
name: external_exports.string().trim().min(1).max(120),
|
|
22315
|
+
instructions: external_exports.string().trim().min(1).max(4e3),
|
|
22316
|
+
presetId: RoutinePresetId.nullable(),
|
|
22317
|
+
/** Plans stored before OB-12 carry no trigger and read as schedules. */
|
|
22318
|
+
trigger: PlannedAutomationTrigger.default("schedule"),
|
|
22319
|
+
/** Null only for webhook triggers, which have no cadence. */
|
|
22320
|
+
cadence: PlannedCadence.nullable(),
|
|
22321
|
+
/** The external system expected to call, for webhook triggers ("Grafana"). */
|
|
22322
|
+
webhookSource: external_exports.string().trim().min(1).max(120).nullable().default(null),
|
|
22323
|
+
/** The Automation's work needs a person's decision before it acts. */
|
|
22324
|
+
requiresApproval: external_exports.boolean(),
|
|
22325
|
+
why: external_exports.string().trim().min(1).max(300),
|
|
22326
|
+
enabled: external_exports.boolean()
|
|
22327
|
+
});
|
|
22328
|
+
var PlannedExploration = external_exports.object({
|
|
22329
|
+
/** What to explore, in plain words ("the support inbox"). */
|
|
22330
|
+
target: external_exports.string().trim().min(1).max(160),
|
|
22331
|
+
/** The complete Task request, ready for the Manager composer. */
|
|
22332
|
+
request: external_exports.string().trim().min(1).max(1200),
|
|
22333
|
+
why: external_exports.string().trim().min(1).max(300),
|
|
22334
|
+
enabled: external_exports.boolean()
|
|
22335
|
+
});
|
|
22336
|
+
var PlannedTeammate = external_exports.object({
|
|
22337
|
+
key: Key,
|
|
22338
|
+
name: external_exports.string().trim().min(1).max(120),
|
|
22339
|
+
roleTemplate: TeammateRoleTemplate,
|
|
22340
|
+
title: external_exports.string().trim().min(1).max(80),
|
|
22341
|
+
purpose: external_exports.string().trim().min(1).max(600),
|
|
22342
|
+
dayToDay: external_exports.array(external_exports.string().trim().min(1).max(200)).max(6),
|
|
22343
|
+
instructions: external_exports.string().trim().min(1).max(5e4),
|
|
22344
|
+
escalation: external_exports.string().trim().max(1e4),
|
|
22345
|
+
skillIds: external_exports.array(SkillReferenceId).max(40),
|
|
22346
|
+
tools: external_exports.array(PlannedTool).max(8),
|
|
22347
|
+
automations: external_exports.array(PlannedAutomation).max(6),
|
|
22348
|
+
/** Present when the interview left this teammate's proactive needs unknown (OB-12). */
|
|
22349
|
+
exploration: PlannedExploration.nullable().default(null),
|
|
22350
|
+
/** Keys of other planned teammates (or created Agent ids) this teammate hands work to. */
|
|
22351
|
+
handsOffTo: external_exports.array(external_exports.string().trim().min(1).max(120)).max(6),
|
|
22352
|
+
/** Guardrail categories proposed as require_approval because the person said a human decides. */
|
|
22353
|
+
approvals: external_exports.array(ActionCategory).max(20),
|
|
22354
|
+
why: external_exports.string().trim().min(1).max(300),
|
|
22355
|
+
enabled: external_exports.boolean(),
|
|
22356
|
+
/**
|
|
22357
|
+
* Index into the bundled portrait set the person chose for this teammate;
|
|
22358
|
+
* null falls back to a stable name-matched default. Approval turns the
|
|
22359
|
+
* resolved portrait into the created Agent's avatar artwork.
|
|
22360
|
+
*/
|
|
22361
|
+
portrait: external_exports.number().int().min(0).max(63).nullable().default(null),
|
|
22362
|
+
/** Set once approval created the Agent; never cleared by a re-plan. */
|
|
22363
|
+
createdAgentId: AgentId.nullable()
|
|
22364
|
+
});
|
|
22365
|
+
var PlannedMachine = external_exports.object({
|
|
22366
|
+
why: external_exports.string().trim().min(1).max(400),
|
|
22367
|
+
suggestedName: external_exports.string().trim().min(1).max(120),
|
|
22368
|
+
operatingSystem: external_exports.enum(["windows", "macos", "linux", "unknown"])
|
|
22369
|
+
});
|
|
22370
|
+
var PlannedFirstTask = external_exports.object({
|
|
22371
|
+
title: external_exports.string().trim().min(1).max(160),
|
|
22372
|
+
request: external_exports.string().trim().min(1).max(1200),
|
|
22373
|
+
teammateKey: Key.nullable()
|
|
22374
|
+
});
|
|
22375
|
+
var CompanySetupPlan = external_exports.object({
|
|
22376
|
+
revision: external_exports.number().int().min(1),
|
|
22377
|
+
summary: external_exports.string().trim().min(1).max(1200),
|
|
22378
|
+
businessName: external_exports.string().trim().min(1).max(120).nullable(),
|
|
22379
|
+
teammates: external_exports.array(PlannedTeammate).min(1).max(8),
|
|
22380
|
+
machine: PlannedMachine,
|
|
22381
|
+
firstTask: PlannedFirstTask.nullable()
|
|
22382
|
+
});
|
|
22383
|
+
var ProposedTool = PlannedTool.omit({ enabled: true });
|
|
22384
|
+
var ProposedAutomation = PlannedAutomation.omit({ enabled: true }).extend({
|
|
22385
|
+
trigger: PlannedAutomationTrigger,
|
|
22386
|
+
webhookSource: external_exports.string().trim().min(1).max(120).nullable()
|
|
22387
|
+
});
|
|
22388
|
+
var ProposedExploration = PlannedExploration.omit({ enabled: true });
|
|
22389
|
+
var ProposedTeammate = PlannedTeammate.omit({
|
|
22390
|
+
createdAgentId: true,
|
|
22391
|
+
enabled: true,
|
|
22392
|
+
// The person picks portraits on the plan; the planner never proposes them.
|
|
22393
|
+
portrait: true
|
|
22394
|
+
}).extend({
|
|
22395
|
+
tools: external_exports.array(ProposedTool).max(8),
|
|
22396
|
+
automations: external_exports.array(ProposedAutomation).max(6),
|
|
22397
|
+
exploration: ProposedExploration.nullable()
|
|
22398
|
+
});
|
|
22399
|
+
var ProposedPlan = CompanySetupPlan.omit({ revision: true }).extend({
|
|
22400
|
+
teammates: external_exports.array(ProposedTeammate).min(1).max(8)
|
|
22401
|
+
});
|
|
22402
|
+
var CompanySetupStepKind = external_exports.enum([
|
|
22403
|
+
"machine",
|
|
22404
|
+
"teammate",
|
|
22405
|
+
"integration",
|
|
22406
|
+
"automation",
|
|
22407
|
+
/** OB-12: a bounded first Task that discovers what this teammate should watch. */
|
|
22408
|
+
"exploration",
|
|
22409
|
+
"first_task"
|
|
22410
|
+
]);
|
|
22411
|
+
var CompanySetupStepState = external_exports.enum(["open", "done", "skipped"]);
|
|
22412
|
+
var CompanySetupStep = external_exports.object({
|
|
22413
|
+
id: external_exports.string().regex(/^[a-z][a-z0-9_.:-]{0,120}$/),
|
|
22414
|
+
kind: CompanySetupStepKind,
|
|
22415
|
+
required: external_exports.boolean(),
|
|
22416
|
+
title: external_exports.string().trim().min(1).max(160),
|
|
22417
|
+
description: external_exports.string().trim().min(1).max(600),
|
|
22418
|
+
state: CompanySetupStepState,
|
|
22419
|
+
/** What was observed, when the state is done. */
|
|
22420
|
+
evidence: external_exports.object({ summary: external_exports.string().trim().min(1).max(300), at: IsoDate.nullable() }).nullable(),
|
|
22421
|
+
skip: external_exports.object({
|
|
22422
|
+
reason: external_exports.string().trim().min(1).max(500),
|
|
22423
|
+
at: IsoDate,
|
|
22424
|
+
by: MemberId.nullable()
|
|
22425
|
+
}).nullable(),
|
|
22426
|
+
/** The planned teammate this step belongs to, for Integration and Automation steps. */
|
|
22427
|
+
teammateKey: Key.nullable(),
|
|
22428
|
+
teammateName: external_exports.string().trim().min(1).max(120).nullable(),
|
|
22429
|
+
/** The plan item this step tracks (tool key or automation key). */
|
|
22430
|
+
planKey: Key.nullable(),
|
|
22431
|
+
mission: SetupGuideMission.nullable()
|
|
22432
|
+
});
|
|
22433
|
+
var CompanySetupProgress = external_exports.object({
|
|
22434
|
+
requiredTotal: external_exports.number().int().min(0),
|
|
22435
|
+
requiredDone: external_exports.number().int().min(0),
|
|
22436
|
+
recommendedTotal: external_exports.number().int().min(0),
|
|
22437
|
+
recommendedDone: external_exports.number().int().min(0),
|
|
22438
|
+
/** Every required step is done (skips do not count). */
|
|
22439
|
+
requiredComplete: external_exports.boolean(),
|
|
22440
|
+
/** Every recommended step is done or skipped. */
|
|
22441
|
+
recommendedSettled: external_exports.boolean()
|
|
22442
|
+
});
|
|
22443
|
+
var CompanySetupApproval = external_exports.object({
|
|
22444
|
+
at: IsoDate,
|
|
22445
|
+
by: MemberId.nullable(),
|
|
22446
|
+
createdAgentIds: external_exports.array(AgentId)
|
|
22447
|
+
});
|
|
22448
|
+
var CompanySetupView = external_exports.object({
|
|
22449
|
+
id: CompanySetupId.nullable(),
|
|
22450
|
+
orgId: OrgId,
|
|
22451
|
+
status: CompanySetupStatus,
|
|
22452
|
+
orgKind: CompanySetupOrgKind,
|
|
22453
|
+
interview: CompanySetupInterview.nullable(),
|
|
22454
|
+
/** The next unanswered question, when the interview is open. */
|
|
22455
|
+
currentQuestion: InterviewTurn.nullable(),
|
|
22456
|
+
plan: CompanySetupPlan.nullable(),
|
|
22457
|
+
/**
|
|
22458
|
+
* The plan is being proposed in the background (a planner call can take a
|
|
22459
|
+
* minute); the page polls until the plan lands or an error is recorded.
|
|
22460
|
+
*/
|
|
22461
|
+
planning: external_exports.object({ startedAt: IsoDate, error: external_exports.string().max(500).nullable() }).nullable(),
|
|
22462
|
+
approval: CompanySetupApproval.nullable(),
|
|
22463
|
+
steps: external_exports.array(CompanySetupStep),
|
|
22464
|
+
progress: CompanySetupProgress,
|
|
22465
|
+
/** Company facts the Guide carries into missions; empty before a plan exists. */
|
|
22466
|
+
contextFacts: external_exports.array(SetupGuideContextFact).max(12),
|
|
22467
|
+
homeCardDismissedAt: IsoDate.nullable(),
|
|
22468
|
+
/**
|
|
22469
|
+
* True only for an Admin of an organization with no record, no teammates, no
|
|
22470
|
+
* Machines, and no Tasks: Home may open the setup page once. Opening it
|
|
22471
|
+
* creates the record, so the redirect never repeats.
|
|
22472
|
+
*/
|
|
22473
|
+
suggestRedirect: external_exports.boolean(),
|
|
22474
|
+
viewerCanEdit: external_exports.boolean(),
|
|
22475
|
+
/** Absent when the deployment has no inference configured and no record exists. */
|
|
22476
|
+
interviewAvailable: external_exports.boolean(),
|
|
22477
|
+
startedAt: IsoDate.nullable(),
|
|
22478
|
+
updatedAt: IsoDate.nullable()
|
|
22479
|
+
});
|
|
22480
|
+
var AnswerCompanySetupQuestionRequest = external_exports.object({
|
|
22481
|
+
questionId: Key,
|
|
22482
|
+
answer: InterviewAnswer
|
|
22483
|
+
}).strict();
|
|
22484
|
+
var SuggestCompanySetupAnswersRequest = external_exports.object({
|
|
22485
|
+
questionId: Key
|
|
22486
|
+
}).strict();
|
|
22487
|
+
var UpdateCompanySetupPlanRequest = external_exports.object({
|
|
22488
|
+
/** The full edited plan; the revision must match the stored one. */
|
|
22489
|
+
plan: CompanySetupPlan
|
|
22490
|
+
}).strict();
|
|
22491
|
+
var ApproveCompanySetupRequest = external_exports.object({
|
|
22492
|
+
planRevision: external_exports.number().int().min(1)
|
|
22493
|
+
}).strict();
|
|
22494
|
+
var SkipCompanySetupStepRequest = external_exports.object({
|
|
22495
|
+
reason: external_exports.string().trim().min(1).max(500)
|
|
22496
|
+
}).strict();
|
|
22497
|
+
var ProposeTeammateRequest = external_exports.object({
|
|
22498
|
+
answers: external_exports.array(
|
|
22499
|
+
external_exports.object({
|
|
22500
|
+
question: external_exports.string().trim().min(1).max(400),
|
|
22501
|
+
answer: external_exports.string().trim().min(1).max(2e3)
|
|
22502
|
+
})
|
|
22503
|
+
).max(6),
|
|
22504
|
+
requestedRole: TeammateRoleTemplate.nullable().optional()
|
|
22505
|
+
}).strict();
|
|
22506
|
+
var ProposeTeammateResponse = external_exports.object({
|
|
22507
|
+
teammate: ProposedTeammate
|
|
22508
|
+
});
|
|
22509
|
+
var CompanySetupFunnel = external_exports.object({
|
|
22510
|
+
status: CompanySetupStatus,
|
|
22511
|
+
startedAt: IsoDate.nullable(),
|
|
22512
|
+
planProposedAt: IsoDate.nullable(),
|
|
22513
|
+
planApprovedAt: IsoDate.nullable(),
|
|
22514
|
+
requiredCompletedAt: IsoDate.nullable(),
|
|
22515
|
+
recommendedSettledAt: IsoDate.nullable(),
|
|
22516
|
+
teammatesCreated: external_exports.number().int().min(0),
|
|
22517
|
+
stepsSkipped: external_exports.number().int().min(0)
|
|
22518
|
+
});
|
|
22519
|
+
var TEAMMATE_PORTRAIT_COUNT = 16;
|
|
22520
|
+
var ALL_PORTRAITS = Array.from({ length: TEAMMATE_PORTRAIT_COUNT }, (_, index) => index);
|
|
22521
|
+
|
|
22522
|
+
// ../../packages/contracts/src/product-feedback.ts
|
|
22523
|
+
var ProductFeedbackKind = external_exports.enum(["frustration", "missing_capability", "feature_request"]);
|
|
22524
|
+
var ProductFeedbackSurface = external_exports.enum(["manager", "guide", "company_setup"]);
|
|
22525
|
+
|
|
22048
22526
|
// src/runners/mcp-client.ts
|
|
22049
22527
|
var REQUEST_TIMEOUT_MS = 1e4;
|
|
22050
22528
|
var MAX_BODY_BYTES = 4 * 1024 * 1024;
|
|
@@ -37455,8 +37933,8 @@ import { createServer as createServer2 } from "node:http";
|
|
|
37455
37933
|
var CADENCE_PROPS = {
|
|
37456
37934
|
cadence_kind: {
|
|
37457
37935
|
type: "string",
|
|
37458
|
-
enum: ["every", "daily", "weekly"],
|
|
37459
|
-
description: "every = every N minutes; daily/weekly run at a UTC time."
|
|
37936
|
+
enum: ["every", "daily", "weekly", "monthly"],
|
|
37937
|
+
description: "every = every N minutes; daily/weekly/monthly run at a UTC time."
|
|
37460
37938
|
},
|
|
37461
37939
|
minutes: {
|
|
37462
37940
|
type: "integer",
|
|
@@ -37464,9 +37942,16 @@ var CADENCE_PROPS = {
|
|
|
37464
37942
|
maximum: 10080,
|
|
37465
37943
|
description: "every-only: interval in minutes (1 to 10080)."
|
|
37466
37944
|
},
|
|
37467
|
-
hour_utc: { type: "number", description: "daily/weekly: hour 0-23 (UTC)." },
|
|
37468
|
-
minute_utc: {
|
|
37469
|
-
|
|
37945
|
+
hour_utc: { type: "number", description: "daily/weekly/monthly: hour 0-23 (UTC)." },
|
|
37946
|
+
minute_utc: {
|
|
37947
|
+
type: "number",
|
|
37948
|
+
description: "daily/weekly/monthly: minute 0-59 (UTC), default 0."
|
|
37949
|
+
},
|
|
37950
|
+
day_of_week: { type: "number", description: "weekly-only: 0 = Sunday \u2026 6 = Saturday." },
|
|
37951
|
+
day_of_month: {
|
|
37952
|
+
type: "number",
|
|
37953
|
+
description: "monthly-only: day 1-28 (UTC); 1-28 exists in every month."
|
|
37954
|
+
}
|
|
37470
37955
|
};
|
|
37471
37956
|
var TOOLS = [
|
|
37472
37957
|
{
|
|
@@ -37914,7 +38399,12 @@ function cadenceFrom(args) {
|
|
|
37914
38399
|
if (!Number.isFinite(dayOfWeek)) throw new Error('cadence "weekly" needs `day_of_week`');
|
|
37915
38400
|
return { kind: "weekly", dayOfWeek, hourUtc, minuteUtc };
|
|
37916
38401
|
}
|
|
37917
|
-
|
|
38402
|
+
if (kind === "monthly") {
|
|
38403
|
+
const dayOfMonth = Number(args["day_of_month"]);
|
|
38404
|
+
if (!Number.isFinite(dayOfMonth)) throw new Error('cadence "monthly" needs `day_of_month`');
|
|
38405
|
+
return { kind: "monthly", dayOfMonth, hourUtc, minuteUtc };
|
|
38406
|
+
}
|
|
38407
|
+
throw new Error("cadence_kind must be every | daily | weekly | monthly");
|
|
37918
38408
|
}
|
|
37919
38409
|
function opFor(name, args) {
|
|
37920
38410
|
const str = (key, required2 = true) => {
|