@zixt/host 0.0.43 → 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 +167 -8
  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.43",
34
+ version: "0.0.44",
35
35
  type: "module",
36
36
  exports: {
37
37
  ".": "./src/client.ts",
@@ -14648,7 +14648,15 @@ var ID_PREFIXES = {
14648
14648
  /** One file a person attached to a chat message ('att' is taken by attempt). */
14649
14649
  attachment: "atc",
14650
14650
  /** One curated memory entry an agent chose to keep ('mem' is taken by member). */
14651
- 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"
14652
14660
  };
14653
14661
  var idPattern = (prefix) => new RegExp(`^${prefix}_[0-9a-f]{32}$`);
14654
14662
  function newId(prefix) {
@@ -14671,6 +14679,9 @@ var OrgRoutineId = idSchema(ID_PREFIXES.orgRoutine, "organization routine id");
14671
14679
  var BrowserSessionId = idSchema(ID_PREFIXES.browserSession, "browser session id");
14672
14680
  var AttachmentId = idSchema(ID_PREFIXES.attachment, "attachment id");
14673
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");
14674
14685
 
14675
14686
  // ../../packages/contracts/src/browser.ts
14676
14687
  var BrowserViewport = external_exports.object({
@@ -14853,7 +14864,7 @@ var ApprovalDeliveryStatus = external_exports.enum(["pending", "delivered", "no_
14853
14864
  var ApprovalCategory = external_exports.union([ActionCategory, external_exports.literal("agent.question")]);
14854
14865
  var ApprovalRequestContext = external_exports.object({
14855
14866
  requester: external_exports.object({
14856
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]).nullable(),
14867
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]).nullable(),
14857
14868
  trust: external_exports.enum(["internal", "external"]).nullable(),
14858
14869
  contentTrust: PromptContentTrust.nullable(),
14859
14870
  requestedBy: external_exports.string().min(1).nullable(),
@@ -15801,7 +15812,7 @@ var TaskAttemptExecutionContext = external_exports.object({
15801
15812
  identity: external_exports.object({
15802
15813
  actingAgentId: AgentId,
15803
15814
  source: external_exports.object({
15804
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]),
15815
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]),
15805
15816
  trust: external_exports.enum(["internal", "external"]),
15806
15817
  /** Current attempt prompt authority; absent only on pre-TS-10 snapshots. */
15807
15818
  contentTrust: PromptContentTrust.optional(),
@@ -15830,7 +15841,7 @@ var MemberTaskAttemptExecutionContext = TaskAttemptExecutionContext.omit({
15830
15841
  identity: external_exports.object({
15831
15842
  actingAgentId: AgentId,
15832
15843
  source: external_exports.object({
15833
- source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff"]),
15844
+ source: external_exports.enum(["manual", "webhook", "message", "schedule", "agent", "handoff", "manager"]),
15834
15845
  trust: external_exports.enum(["internal", "external"]),
15835
15846
  contentTrust: PromptContentTrust.optional(),
15836
15847
  requestedBy: external_exports.null(),
@@ -15915,7 +15926,8 @@ var TaskStatus = external_exports.enum([
15915
15926
  "cancelled"
15916
15927
  ]);
15917
15928
  var TaskOrigin = external_exports.object({
15918
- 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"]),
15919
15931
  /** TS-10: external content is data, not instructions. */
15920
15932
  trust: external_exports.enum(["internal", "external"]),
15921
15933
  /** Member id, connector name, or agent id — whoever caused the task. */
@@ -15984,6 +15996,12 @@ var Task = external_exports.object({
15984
15996
  /** Higher runs first; FIFO within equal priority. */
15985
15997
  priority: external_exports.number().int().min(0).max(9),
15986
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),
15987
16005
  /** Formal human review is opt-in per Task; ordinary Chat defaults to none. */
15988
16006
  reviewMode: TaskReviewMode.default("none"),
15989
16007
  /** Assignment epoch — bumped every time the task is (re)assigned (PRD §7.4). */
@@ -16457,7 +16475,7 @@ var ListTasksResponse = external_exports.object({
16457
16475
  });
16458
16476
 
16459
16477
  // ../../packages/contracts/src/protocol.ts
16460
- var PROTOCOL_VERSION = 5;
16478
+ var PROTOCOL_VERSION = 6;
16461
16479
  var TASK_CANCEL_ACK_EVENT = "zixt.task.cancel.acknowledged";
16462
16480
  var TASK_CREDENTIAL_ROLLOVER_ACK_EVENT = "zixt.task.credential_rollover.acknowledged";
16463
16481
  var UnwoundAssignmentRef = external_exports.object({
@@ -16960,7 +16978,18 @@ var TaskAssign = external_exports.object({
16960
16978
  * so protocol-v5 outbox rows and hosts remain parseable during rollout;
16961
16979
  * current clouds always populate it for newly dispatched work.
16962
16980
  */
16963
- 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),
16964
16993
  /** Cloud-verified provider source; never inferred from provider-authored text. */
16965
16994
  provider: ProviderKind.optional(),
16966
16995
  /**
@@ -18553,6 +18582,134 @@ var LinearOAuthPopupMessage = external_exports.discriminatedUnion("ok", [
18553
18582
  LinearOAuthPopupFailure
18554
18583
  ]);
18555
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
+
18556
18713
  // ../../packages/contracts/src/slack.ts
18557
18714
  var SlackInstallationProjection = external_exports.object({
18558
18715
  id: external_exports.string(),
@@ -37694,6 +37851,8 @@ function taskSourceLabel(origin) {
37694
37851
  return "Message";
37695
37852
  case "webhook":
37696
37853
  return "Webhook";
37854
+ case "manager":
37855
+ return "Manager";
37697
37856
  default:
37698
37857
  return void 0;
37699
37858
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zixt/host",
3
- "version": "0.0.43",
3
+ "version": "0.0.44",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/client.ts",