@zixt/host 0.0.42 → 0.0.44

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.
Files changed (2) hide show
  1. package/dist/index.js +240 -11
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ import { homedir } from "node:os";
31
31
  // package.json
32
32
  var package_default = {
33
33
  name: "@zixt/host",
34
- version: "0.0.42",
34
+ version: "0.0.44",
35
35
  type: "module",
36
36
  exports: {
37
37
  ".": "./src/client.ts",
@@ -14617,6 +14617,10 @@ var ID_PREFIXES = {
14617
14617
  timer: "tmr",
14618
14618
  event: "evt",
14619
14619
  schedule: "sch",
14620
+ /** Organization-owned reusable AI-teammate skill. */
14621
+ orgSkill: "skl",
14622
+ /** Organization-owned reusable Automation routine. */
14623
+ orgRoutine: "rtn",
14620
14624
  /** Slack workspace installation. */
14621
14625
  slackInstallation: "sli",
14622
14626
  /** Teammate <-> Slack account binding. */
@@ -14644,7 +14648,15 @@ var ID_PREFIXES = {
14644
14648
  /** One file a person attached to a chat message ('att' is taken by attempt). */
14645
14649
  attachment: "atc",
14646
14650
  /** One curated memory entry an agent chose to keep ('mem' is taken by member). */
14647
- memory: "mry"
14651
+ memory: "mry",
14652
+ /** Org-singleton Manager configuration (PRD §8.13). */
14653
+ manager: "mgr",
14654
+ /** One Manager conversation thread (MG-2). */
14655
+ conversation: "cnv",
14656
+ /** One immutable Conversation timeline entry. */
14657
+ conversationEvent: "cve",
14658
+ /** One Manager inference call's token-metering row (MG-8). */
14659
+ managerUsage: "mgu"
14648
14660
  };
14649
14661
  var idPattern = (prefix) => new RegExp(`^${prefix}_[0-9a-f]{32}$`);
14650
14662
  function newId(prefix) {
@@ -14662,9 +14674,14 @@ var TaskHandoffId = idSchema(ID_PREFIXES.handoff, "task handoff id");
14662
14674
  var ConnectionId = idSchema(ID_PREFIXES.connection, "connection id");
14663
14675
  var ApprovalId = idSchema(ID_PREFIXES.approval, "approval id");
14664
14676
  var ScheduleId = idSchema(ID_PREFIXES.schedule, "schedule id");
14677
+ var OrgSkillId = idSchema(ID_PREFIXES.orgSkill, "organization skill id");
14678
+ var OrgRoutineId = idSchema(ID_PREFIXES.orgRoutine, "organization routine id");
14665
14679
  var BrowserSessionId = idSchema(ID_PREFIXES.browserSession, "browser session id");
14666
14680
  var AttachmentId = idSchema(ID_PREFIXES.attachment, "attachment id");
14667
14681
  var MemoryId = idSchema(ID_PREFIXES.memory, "memory id");
14682
+ var ManagerId = idSchema(ID_PREFIXES.manager, "manager id");
14683
+ var ConversationId = idSchema(ID_PREFIXES.conversation, "conversation id");
14684
+ var ConversationEventId = idSchema(ID_PREFIXES.conversationEvent, "conversation event id");
14668
14685
 
14669
14686
  // ../../packages/contracts/src/browser.ts
14670
14687
  var BrowserViewport = external_exports.object({
@@ -14847,7 +14864,7 @@ var ApprovalDeliveryStatus = external_exports.enum(["pending", "delivered", "no_
14847
14864
  var ApprovalCategory = external_exports.union([ActionCategory, external_exports.literal("agent.question")]);
14848
14865
  var ApprovalRequestContext = external_exports.object({
14849
14866
  requester: external_exports.object({
14850
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]).nullable(),
14867
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]).nullable(),
14851
14868
  trust: external_exports.enum(["internal", "external"]).nullable(),
14852
14869
  contentTrust: PromptContentTrust.nullable(),
14853
14870
  requestedBy: external_exports.string().min(1).nullable(),
@@ -15036,6 +15053,10 @@ var SkillId = external_exports.enum([
15036
15053
  "maintain-technical-docs",
15037
15054
  "assess-dependencies",
15038
15055
  "review-release-readiness",
15056
+ "coordinate-shared-work",
15057
+ "deliver-with-git",
15058
+ "verify-live-behavior",
15059
+ "evolve-contracts-and-data",
15039
15060
  "plan-campaigns",
15040
15061
  "create-content",
15041
15062
  "protect-brand-voice",
@@ -15060,7 +15081,42 @@ var SkillId = external_exports.enum([
15060
15081
  "synthesize-customer-objections",
15061
15082
  "prepare-proposals"
15062
15083
  ]);
15063
- var EnabledSkillIds = external_exports.array(SkillId).max(SkillId.options.length).refine((items) => new Set(items).size === items.length, "duplicate skill").default([]);
15084
+ var SkillReferenceId = external_exports.union([SkillId, OrgSkillId]);
15085
+ var EnabledSkillIds = external_exports.array(SkillReferenceId).max(200).refine((items) => new Set(items).size === items.length, "duplicate skill").default([]);
15086
+ var SkillCategory = TeammateRoleTemplate;
15087
+ var OrgSkill = external_exports.object({
15088
+ id: OrgSkillId,
15089
+ orgId: OrgId,
15090
+ name: external_exports.string().trim().min(1).max(120),
15091
+ description: external_exports.string().trim().min(1).max(500),
15092
+ instructions: external_exports.string().trim().min(1).max(1e4),
15093
+ category: SkillCategory,
15094
+ clonedFrom: SkillReferenceId.nullable().default(null),
15095
+ createdAt: IsoDate,
15096
+ updatedAt: IsoDate
15097
+ });
15098
+ var CreateOrgSkillRequest = OrgSkill.pick({
15099
+ name: true,
15100
+ description: true,
15101
+ instructions: true,
15102
+ category: true,
15103
+ clonedFrom: true
15104
+ }).partial({ clonedFrom: true });
15105
+ var UpdateOrgSkillRequest = CreateOrgSkillRequest.omit({ clonedFrom: true }).partial().refine((value) => Object.keys(value).length > 0, "empty skill update");
15106
+ var ListOrgSkillsResponse = external_exports.object({ skills: external_exports.array(OrgSkill) });
15107
+ var RoutineTemplateCadence = external_exports.discriminatedUnion("kind", [
15108
+ external_exports.object({
15109
+ kind: external_exports.literal("daily"),
15110
+ hour: external_exports.number().int().min(0).max(23),
15111
+ minute: external_exports.number().int().min(0).max(59)
15112
+ }),
15113
+ external_exports.object({
15114
+ kind: external_exports.literal("weekly"),
15115
+ dayOfWeek: external_exports.number().int().min(0).max(6),
15116
+ hour: external_exports.number().int().min(0).max(23),
15117
+ minute: external_exports.number().int().min(0).max(59)
15118
+ })
15119
+ ]);
15064
15120
  var RoutinePresetId = external_exports.enum([
15065
15121
  "developer-weekly-architecture-review",
15066
15122
  "developer-weekly-dependency-review",
@@ -15074,6 +15130,31 @@ var RoutinePresetId = external_exports.enum([
15074
15130
  "sales-weekly-pipeline-review",
15075
15131
  "sales-weekly-objection-review"
15076
15132
  ]);
15133
+ var RoutineTemplateReferenceId = external_exports.union([RoutinePresetId, OrgRoutineId]);
15134
+ var OrgRoutine = external_exports.object({
15135
+ id: OrgRoutineId,
15136
+ orgId: OrgId,
15137
+ name: external_exports.string().trim().min(1).max(120),
15138
+ description: external_exports.string().trim().min(1).max(500),
15139
+ instructions: external_exports.string().trim().min(1).max(1e5),
15140
+ category: SkillCategory,
15141
+ skillIds: external_exports.array(SkillReferenceId).max(50).default([]),
15142
+ localCadence: RoutineTemplateCadence,
15143
+ clonedFrom: RoutineTemplateReferenceId.nullable().default(null),
15144
+ createdAt: IsoDate,
15145
+ updatedAt: IsoDate
15146
+ });
15147
+ var CreateOrgRoutineRequest = OrgRoutine.pick({
15148
+ name: true,
15149
+ description: true,
15150
+ instructions: true,
15151
+ category: true,
15152
+ skillIds: true,
15153
+ localCadence: true,
15154
+ clonedFrom: true
15155
+ }).partial({ clonedFrom: true, skillIds: true });
15156
+ var UpdateOrgRoutineRequest = CreateOrgRoutineRequest.omit({ clonedFrom: true }).partial().refine((value) => Object.keys(value).length > 0, "empty routine update");
15157
+ var ListOrgRoutinesResponse = external_exports.object({ routines: external_exports.array(OrgRoutine) });
15077
15158
 
15078
15159
  // ../../packages/contracts/src/domain.ts
15079
15160
  var IsoDate2 = external_exports.iso.datetime();
@@ -15559,8 +15640,8 @@ var Schedule = external_exports.object({
15559
15640
  agentId: AgentId,
15560
15641
  name: external_exports.string().min(1).max(120),
15561
15642
  instructions: external_exports.string().min(1).max(1e5),
15562
- /** Product-owned recommendation that created this row; null for custom work. */
15563
- presetId: RoutinePresetId.nullable().default(null),
15643
+ /** Reusable built-in or organization routine that created this row; null for one-off work. */
15644
+ presetId: RoutineTemplateReferenceId.nullable().default(null),
15564
15645
  cadence: ScheduleCadence,
15565
15646
  /** Exclusive occurrence cutoff. Null means the Automation never expires. */
15566
15647
  endsAt: IsoDate.nullable().default(null),
@@ -15731,7 +15812,7 @@ var TaskAttemptExecutionContext = external_exports.object({
15731
15812
  identity: external_exports.object({
15732
15813
  actingAgentId: AgentId,
15733
15814
  source: external_exports.object({
15734
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]),
15815
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]),
15735
15816
  trust: external_exports.enum(["internal", "external"]),
15736
15817
  /** Current attempt prompt authority; absent only on pre-TS-10 snapshots. */
15737
15818
  contentTrust: PromptContentTrust.optional(),
@@ -15760,7 +15841,7 @@ var MemberTaskAttemptExecutionContext = TaskAttemptExecutionContext.omit({
15760
15841
  identity: external_exports.object({
15761
15842
  actingAgentId: AgentId,
15762
15843
  source: external_exports.object({
15763
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]),
15844
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]),
15764
15845
  trust: external_exports.enum(["internal", "external"]),
15765
15846
  contentTrust: PromptContentTrust.optional(),
15766
15847
  requestedBy: external_exports.null(),
@@ -15845,7 +15926,8 @@ var TaskStatus = external_exports.enum([
15845
15926
  "cancelled"
15846
15927
  ]);
15847
15928
  var TaskOrigin = external_exports.object({
15848
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]),
15929
+ /** `manager` = delegated from a Manager Conversation (MG-4). */
15930
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]),
15849
15931
  /** TS-10: external content is data, not instructions. */
15850
15932
  trust: external_exports.enum(["internal", "external"]),
15851
15933
  /** Member id, connector name, or agent id — whoever caused the task. */
@@ -15914,6 +15996,12 @@ var Task = external_exports.object({
15914
15996
  /** Higher runs first; FIFO within equal priority. */
15915
15997
  priority: external_exports.number().int().min(0).max(9),
15916
15998
  origin: TaskOrigin,
15999
+ /**
16000
+ * The Manager thread this Task was delegated from (MG-4); null for
16001
+ * engine-born work (webhook, schedule, provider). Lets task lists tell
16002
+ * thread-backed work from standalone rows without a second lookup.
16003
+ */
16004
+ conversationId: ConversationId.nullable().default(null),
15917
16005
  /** Formal human review is opt-in per Task; ordinary Chat defaults to none. */
15918
16006
  reviewMode: TaskReviewMode.default("none"),
15919
16007
  /** Assignment epoch — bumped every time the task is (re)assigned (PRD §7.4). */
@@ -16387,7 +16475,7 @@ var ListTasksResponse = external_exports.object({
16387
16475
  });
16388
16476
 
16389
16477
  // ../../packages/contracts/src/protocol.ts
16390
- var PROTOCOL_VERSION = 5;
16478
+ var PROTOCOL_VERSION = 6;
16391
16479
  var TASK_CANCEL_ACK_EVENT = "zixt.task.cancel.acknowledged";
16392
16480
  var TASK_CREDENTIAL_ROLLOVER_ACK_EVENT = "zixt.task.credential_rollover.acknowledged";
16393
16481
  var UnwoundAssignmentRef = external_exports.object({
@@ -16890,7 +16978,18 @@ var TaskAssign = external_exports.object({
16890
16978
  * so protocol-v5 outbox rows and hosts remain parseable during rollout;
16891
16979
  * current clouds always populate it for newly dispatched work.
16892
16980
  */
16893
- origin: TaskOrigin.pick({ source: true, trust: true }).extend({
16981
+ origin: TaskOrigin.pick({ trust: true }).extend({
16982
+ /**
16983
+ * Trigger classification, kept as a lenient string on the wire on
16984
+ * purpose. The Host uses it for a display label and telemetry only,
16985
+ * never for behavior, while the enum on the durable Task keeps its
16986
+ * closed meaning. Parsing it strictly here made adding one source
16987
+ * (`manager`) a breaking wire change: a Host built against the older
16988
+ * enum failed the whole frame union and dropped `task.assign`
16989
+ * silently, so the work sat Assigned forever with no diagnosis. An
16990
+ * unknown value now degrades to an unlabeled source instead.
16991
+ */
16992
+ source: external_exports.string().min(1).max(64),
16894
16993
  /** Cloud-verified provider source; never inferred from provider-authored text. */
16895
16994
  provider: ProviderKind.optional(),
16896
16995
  /**
@@ -18483,6 +18582,134 @@ var LinearOAuthPopupMessage = external_exports.discriminatedUnion("ok", [
18483
18582
  LinearOAuthPopupFailure
18484
18583
  ]);
18485
18584
 
18585
+ // ../../packages/contracts/src/manager.ts
18586
+ var MANAGER_DISPLAY_NAME_MAX = 60;
18587
+ var MANAGER_INSTRUCTIONS_MAX = 2e4;
18588
+ var CONVERSATION_MESSAGE_MAX = 1e5;
18589
+ var CONVERSATION_LIST_LIMIT = 50;
18590
+ var ManagerReasoningEffort = external_exports.enum([
18591
+ "none",
18592
+ "minimal",
18593
+ "low",
18594
+ "medium",
18595
+ "high",
18596
+ "xhigh",
18597
+ "max"
18598
+ ]);
18599
+ var ManagerConfigProjection = external_exports.object({
18600
+ id: ManagerId,
18601
+ /** Shown in the UI and on chat channels; the persona carries the personality (MG-7). */
18602
+ displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX),
18603
+ /** Appended to the product-owned built-in system prompt; never replaces it. */
18604
+ instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX),
18605
+ model: external_exports.string().min(1).max(100),
18606
+ reasoningEffort: ManagerReasoningEffort,
18607
+ /**
18608
+ * Where the Manager answers on Slack. The workspace bot speaks for the
18609
+ * Manager (MG-1), so the per-teammate mention/DM switches that used to
18610
+ * decide this belong here now — an organization keeps a truthful off
18611
+ * switch for each surface without disconnecting the workspace.
18612
+ */
18613
+ slack: external_exports.object({ answerMentions: external_exports.boolean(), answerDirectMessages: external_exports.boolean() }).strict(),
18614
+ revision: external_exports.number().int().min(0),
18615
+ updatedAt: external_exports.string().nullable()
18616
+ }).strict();
18617
+ var ManagerMode = external_exports.enum(["openai", "demo", "unconfigured"]);
18618
+ var GetManagerResponse = external_exports.object({ manager: ManagerConfigProjection, mode: ManagerMode }).strict();
18619
+ var UpdateManagerRequest = external_exports.object({
18620
+ displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX).optional(),
18621
+ instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX).optional(),
18622
+ model: external_exports.string().min(1).max(100).optional(),
18623
+ reasoningEffort: ManagerReasoningEffort.optional(),
18624
+ slack: external_exports.object({
18625
+ answerMentions: external_exports.boolean().optional(),
18626
+ answerDirectMessages: external_exports.boolean().optional()
18627
+ }).strict().optional(),
18628
+ /** Optimistic concurrency: refuse when another admin saved first. */
18629
+ expectedRevision: external_exports.number().int().min(0).optional()
18630
+ }).strict().superRefine((value, ctx) => {
18631
+ if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0) {
18632
+ ctx.addIssue({ code: "custom", message: "nothing to update" });
18633
+ }
18634
+ });
18635
+ var ConversationChannel = external_exports.enum(["web", "slack", "whatsapp"]);
18636
+ var ConversationStatus = external_exports.enum(["idle", "thinking"]);
18637
+ var ConversationProjection = external_exports.object({
18638
+ id: ConversationId,
18639
+ /** First message prefix until the Manager supplies a concise title. */
18640
+ title: external_exports.string().min(1).max(200),
18641
+ channel: ConversationChannel,
18642
+ status: ConversationStatus,
18643
+ /** TS-10 origin trust of the channel; propagated into every delegated Task. */
18644
+ trust: external_exports.enum(["internal", "external"]),
18645
+ /** Subject of whoever opened the thread (member subject or provider actor). */
18646
+ createdBy: external_exports.string(),
18647
+ createdAt: external_exports.string(),
18648
+ lastActivityAt: external_exports.string(),
18649
+ archivedAt: external_exports.string().nullable()
18650
+ }).strict();
18651
+ var conversationEventBase = {
18652
+ id: ConversationEventId,
18653
+ at: external_exports.string()
18654
+ };
18655
+ var ConversationEventProjection = external_exports.discriminatedUnion("kind", [
18656
+ /** A human message into the Conversation. */
18657
+ external_exports.object({
18658
+ ...conversationEventBase,
18659
+ kind: external_exports.literal("user"),
18660
+ text: external_exports.string(),
18661
+ author: external_exports.object({ subject: external_exports.string(), displayName: external_exports.string().nullable() }).strict()
18662
+ }).strict(),
18663
+ /** The Manager's prose reply. */
18664
+ external_exports.object({ ...conversationEventBase, kind: external_exports.literal("manager"), text: external_exports.string() }).strict(),
18665
+ /** One Manager tool step: a delegation, follow-up, or status check. */
18666
+ external_exports.object({
18667
+ ...conversationEventBase,
18668
+ kind: external_exports.literal("tool"),
18669
+ tool: external_exports.string(),
18670
+ summary: external_exports.string(),
18671
+ taskId: TaskId.nullable(),
18672
+ agentId: AgentId.nullable()
18673
+ }).strict(),
18674
+ /** A mirrored child-Task event: what the teammate wrote or became. */
18675
+ external_exports.object({
18676
+ ...conversationEventBase,
18677
+ kind: external_exports.literal("task"),
18678
+ taskId: TaskId,
18679
+ agentId: AgentId.nullable(),
18680
+ eventKind: external_exports.enum(["response", "error", "status", "question"]),
18681
+ summary: external_exports.string(),
18682
+ taskStatus: TaskStatus.nullable()
18683
+ }).strict(),
18684
+ /** A Manager loop failure a person should see (provider outage, refusal). */
18685
+ external_exports.object({ ...conversationEventBase, kind: external_exports.literal("error"), message: external_exports.string() }).strict()
18686
+ ]);
18687
+ var CreateConversationRequest = external_exports.object({
18688
+ /** Stable client-generated key: retrying the same submission returns one Conversation. */
18689
+ requestId: external_exports.uuid(),
18690
+ message: external_exports.string().min(1).max(CONVERSATION_MESSAGE_MAX)
18691
+ }).strict();
18692
+ var PostConversationMessageRequest = external_exports.object({ message: external_exports.string().min(1).max(CONVERSATION_MESSAGE_MAX) }).strict();
18693
+ var UpdateConversationRequest = external_exports.object({
18694
+ title: external_exports.string().min(1).max(200).optional(),
18695
+ archived: external_exports.boolean().optional()
18696
+ }).strict().superRefine((value, ctx) => {
18697
+ if (value.title === void 0 && value.archived === void 0) {
18698
+ ctx.addIssue({ code: "custom", message: "nothing to update" });
18699
+ }
18700
+ });
18701
+ var ConversationResponse = external_exports.object({ conversation: ConversationProjection }).strict();
18702
+ var ListConversationsResponse = external_exports.object({ conversations: external_exports.array(ConversationProjection).max(CONVERSATION_LIST_LIMIT) }).strict();
18703
+ var ConversationDetailResponse = external_exports.object({
18704
+ conversation: ConversationProjection,
18705
+ events: external_exports.array(ConversationEventProjection)
18706
+ }).strict();
18707
+ var ManagerStreamFrame = external_exports.discriminatedUnion("type", [
18708
+ external_exports.object({ type: external_exports.literal("event"), event: ConversationEventProjection }).strict(),
18709
+ external_exports.object({ type: external_exports.literal("delta"), text: external_exports.string() }).strict(),
18710
+ external_exports.object({ type: external_exports.literal("conversation"), conversation: ConversationProjection }).strict()
18711
+ ]);
18712
+
18486
18713
  // ../../packages/contracts/src/slack.ts
18487
18714
  var SlackInstallationProjection = external_exports.object({
18488
18715
  id: external_exports.string(),
@@ -37624,6 +37851,8 @@ function taskSourceLabel(origin) {
37624
37851
  return "Message";
37625
37852
  case "webhook":
37626
37853
  return "Webhook";
37854
+ case "manager":
37855
+ return "Manager";
37627
37856
  default:
37628
37857
  return void 0;
37629
37858
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zixt/host",
3
- "version": "0.0.42",
3
+ "version": "0.0.44",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/client.ts",