@zixt/host 0.0.50 → 0.0.52
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 +326 -306
- 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.
|
|
34
|
+
version: "0.0.52",
|
|
35
35
|
type: "module",
|
|
36
36
|
exports: {
|
|
37
37
|
".": "./src/client.ts",
|
|
@@ -17929,6 +17929,304 @@ var CLOSE_CODES = {
|
|
|
17929
17929
|
revoked: 4004
|
|
17930
17930
|
};
|
|
17931
17931
|
|
|
17932
|
+
// ../../packages/contracts/src/manager.ts
|
|
17933
|
+
var MANAGER_DEFAULT_MODEL = "gpt-5.6-luna";
|
|
17934
|
+
var MANAGER_DISPLAY_NAME_MAX = 60;
|
|
17935
|
+
var MANAGER_INSTRUCTIONS_MAX = 2e4;
|
|
17936
|
+
var CONVERSATION_MESSAGE_MAX = 1e5;
|
|
17937
|
+
var CONVERSATION_LIST_LIMIT = 50;
|
|
17938
|
+
var ManagerReasoningEffort = external_exports.enum([
|
|
17939
|
+
"none",
|
|
17940
|
+
"minimal",
|
|
17941
|
+
"low",
|
|
17942
|
+
"medium",
|
|
17943
|
+
"high",
|
|
17944
|
+
"xhigh",
|
|
17945
|
+
"max"
|
|
17946
|
+
]);
|
|
17947
|
+
var ManagerConfigProjection = external_exports.object({
|
|
17948
|
+
id: ManagerId,
|
|
17949
|
+
/** Shown in the UI and on chat channels; the persona carries the personality (MG-7). */
|
|
17950
|
+
displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX),
|
|
17951
|
+
/** Appended to the product-owned built-in system prompt; never replaces it. */
|
|
17952
|
+
instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX),
|
|
17953
|
+
model: external_exports.string().min(1).max(100),
|
|
17954
|
+
reasoningEffort: ManagerReasoningEffort,
|
|
17955
|
+
/**
|
|
17956
|
+
* Where the Manager answers on Slack. The workspace bot speaks for the
|
|
17957
|
+
* Manager (MG-1), so the per-teammate mention/DM switches that used to
|
|
17958
|
+
* decide this belong here now — an organization keeps a truthful off
|
|
17959
|
+
* switch for each surface without disconnecting the workspace.
|
|
17960
|
+
*/
|
|
17961
|
+
slack: external_exports.object({ answerMentions: external_exports.boolean(), answerDirectMessages: external_exports.boolean() }).strict(),
|
|
17962
|
+
revision: external_exports.number().int().min(0),
|
|
17963
|
+
updatedAt: external_exports.string().nullable()
|
|
17964
|
+
}).strict();
|
|
17965
|
+
var ManagerMode = external_exports.enum(["openai", "demo", "unconfigured"]);
|
|
17966
|
+
var GetManagerResponse = external_exports.object({ manager: ManagerConfigProjection, mode: ManagerMode }).strict();
|
|
17967
|
+
var UpdateManagerRequest = external_exports.object({
|
|
17968
|
+
displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX).optional(),
|
|
17969
|
+
instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX).optional(),
|
|
17970
|
+
model: external_exports.string().min(1).max(100).optional(),
|
|
17971
|
+
reasoningEffort: ManagerReasoningEffort.optional(),
|
|
17972
|
+
slack: external_exports.object({
|
|
17973
|
+
answerMentions: external_exports.boolean().optional(),
|
|
17974
|
+
answerDirectMessages: external_exports.boolean().optional()
|
|
17975
|
+
}).strict().optional(),
|
|
17976
|
+
/** Optimistic concurrency: refuse when another admin saved first. */
|
|
17977
|
+
expectedRevision: external_exports.number().int().min(0).optional()
|
|
17978
|
+
}).strict().superRefine((value, ctx) => {
|
|
17979
|
+
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0) {
|
|
17980
|
+
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
17981
|
+
}
|
|
17982
|
+
});
|
|
17983
|
+
var ManagerMemoryKind = external_exports.enum([
|
|
17984
|
+
/** How recurring organization work is actually done ("releases ship Thursday"). */
|
|
17985
|
+
"process",
|
|
17986
|
+
/** A settled organization decision and, ideally, why. */
|
|
17987
|
+
"decision",
|
|
17988
|
+
/** A standing preference for how the organization wants to be served. */
|
|
17989
|
+
"preference",
|
|
17990
|
+
/** A durable organization fact that is not derivable from configuration. */
|
|
17991
|
+
"fact"
|
|
17992
|
+
]);
|
|
17993
|
+
var MANAGER_MEMORY_SUBJECT_MAX = 60;
|
|
17994
|
+
var MANAGER_MEMORY_TEXT_MAX = 300;
|
|
17995
|
+
var MANAGER_MEMORY_MAX_ITEMS = 60;
|
|
17996
|
+
var ManagerMemoryProjection = external_exports.object({
|
|
17997
|
+
id: ManagerMemoryId,
|
|
17998
|
+
kind: ManagerMemoryKind,
|
|
17999
|
+
/** Short normalized topic; (kind, subject) is the deduplication key. */
|
|
18000
|
+
subject: external_exports.string().min(1).max(MANAGER_MEMORY_SUBJECT_MAX),
|
|
18001
|
+
text: external_exports.string().min(1).max(MANAGER_MEMORY_TEXT_MAX),
|
|
18002
|
+
/** Thread the Manager learned it in, for provenance. */
|
|
18003
|
+
sourceConversationId: ConversationId.nullable(),
|
|
18004
|
+
createdAt: external_exports.string(),
|
|
18005
|
+
updatedAt: external_exports.string()
|
|
18006
|
+
}).strict();
|
|
18007
|
+
var ListManagerMemoriesResponse = external_exports.object({
|
|
18008
|
+
memories: external_exports.array(ManagerMemoryProjection).max(MANAGER_MEMORY_MAX_ITEMS),
|
|
18009
|
+
limit: external_exports.number().int().min(1)
|
|
18010
|
+
}).strict();
|
|
18011
|
+
var ConversationChannel = external_exports.enum(["web", "slack", "whatsapp", "phone"]);
|
|
18012
|
+
var ConversationStatus = external_exports.enum(["idle", "thinking"]);
|
|
18013
|
+
var ConversationProjection = external_exports.object({
|
|
18014
|
+
id: ConversationId,
|
|
18015
|
+
/** First-message prefix until the one creation-time Manager title call settles. */
|
|
18016
|
+
title: external_exports.string().min(1).max(200),
|
|
18017
|
+
channel: ConversationChannel,
|
|
18018
|
+
status: ConversationStatus,
|
|
18019
|
+
/** TS-10 origin trust of the channel; propagated into every delegated Task. */
|
|
18020
|
+
trust: external_exports.enum(["internal", "external"]),
|
|
18021
|
+
/** One-use override for the next Task delegated from this thread. */
|
|
18022
|
+
nextDelegationRunner: TaskRunnerSelection.nullable(),
|
|
18023
|
+
createdAt: external_exports.string(),
|
|
18024
|
+
lastActivityAt: external_exports.string(),
|
|
18025
|
+
/** Archived, but at least one executor has not yet proven it stopped. */
|
|
18026
|
+
archiveState: external_exports.literal("stopping").nullable().optional(),
|
|
18027
|
+
archivedAt: external_exports.string().nullable()
|
|
18028
|
+
}).strict().superRefine((conversation, ctx) => {
|
|
18029
|
+
if (conversation.archiveState === "stopping" && conversation.archivedAt === null) {
|
|
18030
|
+
ctx.addIssue({
|
|
18031
|
+
code: "custom",
|
|
18032
|
+
path: ["archivedAt"],
|
|
18033
|
+
message: "a stopping Manager Task must already be in Archived"
|
|
18034
|
+
});
|
|
18035
|
+
}
|
|
18036
|
+
});
|
|
18037
|
+
var conversationEventBase = {
|
|
18038
|
+
id: ConversationEventId,
|
|
18039
|
+
at: external_exports.string()
|
|
18040
|
+
};
|
|
18041
|
+
var ConversationEventProjection = external_exports.discriminatedUnion("kind", [
|
|
18042
|
+
/** A human message into the Conversation. */
|
|
18043
|
+
external_exports.object({
|
|
18044
|
+
...conversationEventBase,
|
|
18045
|
+
kind: external_exports.literal("user"),
|
|
18046
|
+
text: external_exports.string(),
|
|
18047
|
+
/** Display attribution only; authentication subjects remain internal. */
|
|
18048
|
+
author: external_exports.object({ displayName: external_exports.string().nullable() }).strict(),
|
|
18049
|
+
/** Transport that supplied this turn; legacy events omit it. */
|
|
18050
|
+
sourceChannel: ConversationChannel.optional(),
|
|
18051
|
+
/** Input affordance within the trusted transport; legacy/typed turns omit it. */
|
|
18052
|
+
inputModality: external_exports.literal("voice").optional(),
|
|
18053
|
+
attachments: external_exports.array(TaskAttachmentRef).max(TASK_MESSAGE_MAX_ATTACHMENTS).optional()
|
|
18054
|
+
}).strict(),
|
|
18055
|
+
/** The Manager's prose reply. */
|
|
18056
|
+
external_exports.object({ ...conversationEventBase, kind: external_exports.literal("manager"), text: external_exports.string() }).strict(),
|
|
18057
|
+
/** One Manager tool step: a delegation, follow-up, or status check. */
|
|
18058
|
+
external_exports.object({
|
|
18059
|
+
...conversationEventBase,
|
|
18060
|
+
kind: external_exports.literal("tool"),
|
|
18061
|
+
tool: external_exports.string(),
|
|
18062
|
+
summary: external_exports.string(),
|
|
18063
|
+
taskId: TaskId.nullable(),
|
|
18064
|
+
agentId: AgentId.nullable(),
|
|
18065
|
+
/** Present only for a confirmation card; OAuth authority never appears here. */
|
|
18066
|
+
integrationActionId: ManagerIntegrationActionId.nullable().optional()
|
|
18067
|
+
}).strict(),
|
|
18068
|
+
/** A mirrored child-Task event: what the teammate wrote or became. */
|
|
18069
|
+
external_exports.object({
|
|
18070
|
+
...conversationEventBase,
|
|
18071
|
+
kind: external_exports.literal("task"),
|
|
18072
|
+
taskId: TaskId,
|
|
18073
|
+
agentId: AgentId.nullable(),
|
|
18074
|
+
eventKind: external_exports.enum(["response", "error", "status", "question", "message"]),
|
|
18075
|
+
summary: external_exports.string(),
|
|
18076
|
+
taskStatus: TaskStatus.nullable(),
|
|
18077
|
+
/**
|
|
18078
|
+
* Opaque presentation key shared by the useful report and its synthetic
|
|
18079
|
+
* terminal wake-up. It is never shown to people; clients use it only to
|
|
18080
|
+
* render one outcome when recovery commits those records out of order.
|
|
18081
|
+
* Missing on legacy/non-terminal events.
|
|
18082
|
+
*/
|
|
18083
|
+
terminalGroup: external_exports.string().min(1).max(200).nullable().optional()
|
|
18084
|
+
}).strict(),
|
|
18085
|
+
/** A Manager loop failure a person should see (provider outage, refusal). */
|
|
18086
|
+
external_exports.object({ ...conversationEventBase, kind: external_exports.literal("error"), message: external_exports.string() }).strict()
|
|
18087
|
+
]);
|
|
18088
|
+
var ManagerIntegrationProvider = external_exports.enum(["slack"]);
|
|
18089
|
+
var ManagerIntegrationOperation = external_exports.enum(["connect", "reconnect", "check", "remove"]);
|
|
18090
|
+
var ManagerIntegrationActionStatus = external_exports.enum([
|
|
18091
|
+
"awaiting_confirmation",
|
|
18092
|
+
"working",
|
|
18093
|
+
"authorizing",
|
|
18094
|
+
"completed",
|
|
18095
|
+
"cancelled",
|
|
18096
|
+
"failed",
|
|
18097
|
+
"expired"
|
|
18098
|
+
]);
|
|
18099
|
+
var ManagerIntegrationActionProjection = external_exports.object({
|
|
18100
|
+
id: ManagerIntegrationActionId,
|
|
18101
|
+
conversationId: ConversationId,
|
|
18102
|
+
provider: ManagerIntegrationProvider,
|
|
18103
|
+
providerName: external_exports.string().min(1).max(80),
|
|
18104
|
+
operation: ManagerIntegrationOperation,
|
|
18105
|
+
status: ManagerIntegrationActionStatus,
|
|
18106
|
+
title: external_exports.string().min(1).max(200),
|
|
18107
|
+
description: external_exports.string().min(1).max(1e3),
|
|
18108
|
+
confirmLabel: external_exports.string().min(1).max(100),
|
|
18109
|
+
outcome: external_exports.string().max(1e3).nullable(),
|
|
18110
|
+
createdAt: external_exports.string(),
|
|
18111
|
+
expiresAt: external_exports.string()
|
|
18112
|
+
}).strict();
|
|
18113
|
+
var ManagerIntegrationOAuthStart = external_exports.object({
|
|
18114
|
+
authorizeUrl: external_exports.url().max(4e3),
|
|
18115
|
+
callbackOrigin: external_exports.url().max(2e3)
|
|
18116
|
+
}).strict();
|
|
18117
|
+
var ConfirmManagerIntegrationActionRequest = external_exports.object({ requestId: external_exports.string().uuid() }).strict();
|
|
18118
|
+
var ManagerIntegrationActionResponse = external_exports.object({
|
|
18119
|
+
action: ManagerIntegrationActionProjection,
|
|
18120
|
+
oauth: ManagerIntegrationOAuthStart.nullable()
|
|
18121
|
+
}).strict();
|
|
18122
|
+
var NonEmptyTaskRunnerSelection = TaskRunnerSelection.refine(
|
|
18123
|
+
(selection) => selection.type !== void 0 || selection.model !== void 0 || selection.effort !== void 0,
|
|
18124
|
+
"choose at least one runtime preference"
|
|
18125
|
+
);
|
|
18126
|
+
var CreateConversationRequest = external_exports.object({
|
|
18127
|
+
/** Stable client-generated key: retrying the same submission returns one Conversation. */
|
|
18128
|
+
requestId: external_exports.uuid(),
|
|
18129
|
+
message: external_exports.string().max(CONVERSATION_MESSAGE_MAX),
|
|
18130
|
+
attachmentIds: external_exports.array(AttachmentId).max(TASK_MESSAGE_MAX_ATTACHMENTS).refine((ids) => new Set(ids).size === ids.length, "duplicate attachment").optional(),
|
|
18131
|
+
/**
|
|
18132
|
+
* Teammate whose persistent Browser is selected beside this web turn.
|
|
18133
|
+
* This is bounded routing context for Browser-directed requests only; it
|
|
18134
|
+
* is never a general delegation preference.
|
|
18135
|
+
*/
|
|
18136
|
+
browserAgentId: AgentId.optional(),
|
|
18137
|
+
/**
|
|
18138
|
+
* One-time runtime override for the first Task this thread delegates.
|
|
18139
|
+
* Omission preserves the selected teammate's configured defaults.
|
|
18140
|
+
*/
|
|
18141
|
+
initialDelegation: external_exports.object({
|
|
18142
|
+
runner: NonEmptyTaskRunnerSelection
|
|
18143
|
+
}).strict().optional()
|
|
18144
|
+
}).strict().superRefine((value, ctx) => {
|
|
18145
|
+
if (!value.message.trim() && !value.attachmentIds?.length) {
|
|
18146
|
+
ctx.addIssue({
|
|
18147
|
+
code: "custom",
|
|
18148
|
+
path: ["message"],
|
|
18149
|
+
message: "a message needs text or an attachment"
|
|
18150
|
+
});
|
|
18151
|
+
}
|
|
18152
|
+
});
|
|
18153
|
+
var PostConversationMessageRequest = external_exports.object({
|
|
18154
|
+
/** Stable client-generated key: an ambiguous retry appends exactly once. */
|
|
18155
|
+
requestId: external_exports.uuid(),
|
|
18156
|
+
message: external_exports.string().max(CONVERSATION_MESSAGE_MAX),
|
|
18157
|
+
attachmentIds: external_exports.array(AttachmentId).max(TASK_MESSAGE_MAX_ATTACHMENTS).refine((ids) => new Set(ids).size === ids.length, "duplicate attachment").optional(),
|
|
18158
|
+
/** Selected Manager Browser teammate for Browser-directed requests only. */
|
|
18159
|
+
browserAgentId: AgentId.optional()
|
|
18160
|
+
}).strict().superRefine((value, ctx) => {
|
|
18161
|
+
if (!value.message.trim() && !value.attachmentIds?.length) {
|
|
18162
|
+
ctx.addIssue({
|
|
18163
|
+
code: "custom",
|
|
18164
|
+
path: ["message"],
|
|
18165
|
+
message: "a message needs text or an attachment"
|
|
18166
|
+
});
|
|
18167
|
+
}
|
|
18168
|
+
});
|
|
18169
|
+
var UpdateNextDelegationRuntimeRequest = external_exports.object({ runner: NonEmptyTaskRunnerSelection.nullable() }).strict();
|
|
18170
|
+
var UpdateConversationRequest = external_exports.object({
|
|
18171
|
+
title: external_exports.string().trim().min(1).max(200).optional(),
|
|
18172
|
+
archived: external_exports.boolean().optional()
|
|
18173
|
+
}).strict().superRefine((value, ctx) => {
|
|
18174
|
+
if (value.title === void 0 && value.archived === void 0) {
|
|
18175
|
+
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
18176
|
+
}
|
|
18177
|
+
});
|
|
18178
|
+
var ConversationResponse = external_exports.object({ conversation: ConversationProjection }).strict();
|
|
18179
|
+
var ListConversationsResponse = external_exports.object({
|
|
18180
|
+
conversations: external_exports.array(ConversationProjection).max(CONVERSATION_LIST_LIMIT),
|
|
18181
|
+
nextCursor: external_exports.string().nullable()
|
|
18182
|
+
}).strict();
|
|
18183
|
+
var ManagerTaskRailSummariesRequest = external_exports.object({
|
|
18184
|
+
conversationIds: external_exports.array(ConversationId).min(1).max(CONVERSATION_LIST_LIMIT),
|
|
18185
|
+
archived: external_exports.boolean(),
|
|
18186
|
+
agentId: AgentId.optional(),
|
|
18187
|
+
statuses: external_exports.array(TaskStatus).min(1).max(TaskStatus.options.length).optional()
|
|
18188
|
+
}).strict().superRefine((value, ctx) => {
|
|
18189
|
+
if (new Set(value.conversationIds).size !== value.conversationIds.length) {
|
|
18190
|
+
ctx.addIssue({
|
|
18191
|
+
code: "custom",
|
|
18192
|
+
path: ["conversationIds"],
|
|
18193
|
+
message: "conversationIds must be unique"
|
|
18194
|
+
});
|
|
18195
|
+
}
|
|
18196
|
+
if (value.statuses && new Set(value.statuses).size !== value.statuses.length) {
|
|
18197
|
+
ctx.addIssue({
|
|
18198
|
+
code: "custom",
|
|
18199
|
+
path: ["statuses"],
|
|
18200
|
+
message: "statuses must be unique"
|
|
18201
|
+
});
|
|
18202
|
+
}
|
|
18203
|
+
});
|
|
18204
|
+
var ManagerTaskRailRepresentative = external_exports.object({
|
|
18205
|
+
id: TaskId,
|
|
18206
|
+
agentId: AgentId,
|
|
18207
|
+
status: TaskStatus,
|
|
18208
|
+
gitSummary: TaskGitSummary.nullable(),
|
|
18209
|
+
createdAt: external_exports.string(),
|
|
18210
|
+
updatedAt: external_exports.string()
|
|
18211
|
+
}).strict();
|
|
18212
|
+
var ManagerTaskRailSummary = external_exports.object({
|
|
18213
|
+
conversationId: ConversationId,
|
|
18214
|
+
hasChildren: external_exports.boolean(),
|
|
18215
|
+
hasAgentMatch: external_exports.boolean(),
|
|
18216
|
+
hasStatusMatch: external_exports.boolean(),
|
|
18217
|
+
representative: ManagerTaskRailRepresentative.nullable()
|
|
18218
|
+
}).strict();
|
|
18219
|
+
var ManagerTaskRailSummariesResponse = external_exports.object({ summaries: external_exports.array(ManagerTaskRailSummary).max(CONVERSATION_LIST_LIMIT) }).strict();
|
|
18220
|
+
var ConversationDetailResponse = external_exports.object({
|
|
18221
|
+
conversation: ConversationProjection,
|
|
18222
|
+
events: external_exports.array(ConversationEventProjection)
|
|
18223
|
+
}).strict();
|
|
18224
|
+
var ManagerStreamFrame = external_exports.discriminatedUnion("type", [
|
|
18225
|
+
external_exports.object({ type: external_exports.literal("event"), event: ConversationEventProjection }).strict(),
|
|
18226
|
+
external_exports.object({ type: external_exports.literal("delta"), text: external_exports.string() }).strict(),
|
|
18227
|
+
external_exports.object({ type: external_exports.literal("conversation"), conversation: ConversationProjection }).strict()
|
|
18228
|
+
]);
|
|
18229
|
+
|
|
17932
18230
|
// ../../packages/contracts/src/api.ts
|
|
17933
18231
|
var ProblemCode = external_exports.enum([
|
|
17934
18232
|
"network_unavailable",
|
|
@@ -18033,6 +18331,19 @@ var CreateAgentRequest = external_exports.object({
|
|
|
18033
18331
|
workspaces: Agent.shape.workspaces.removeDefault().optional(),
|
|
18034
18332
|
requiredConnectionIds: Agent.shape.requiredConnectionIds.removeDefault().optional()
|
|
18035
18333
|
});
|
|
18334
|
+
var GenerateAgentInstructionDraftRequest = external_exports.object({
|
|
18335
|
+
target: external_exports.enum(["instructions", "escalation"]),
|
|
18336
|
+
name: external_exports.string().max(120),
|
|
18337
|
+
roleDescription: external_exports.string().max(2e3),
|
|
18338
|
+
roleTemplate: Agent.shape.roleTemplate.removeDefault(),
|
|
18339
|
+
existingText: external_exports.string().max(5e4),
|
|
18340
|
+
projectContext: external_exports.string().max(4e3)
|
|
18341
|
+
}).strict();
|
|
18342
|
+
var GenerateAgentInstructionDraftResponse = external_exports.object({
|
|
18343
|
+
text: external_exports.string().min(1).max(5e4),
|
|
18344
|
+
/** Evidence of the fixed product route; ordinary UI copy does not expose it. */
|
|
18345
|
+
model: external_exports.literal(MANAGER_DEFAULT_MODEL)
|
|
18346
|
+
}).strict();
|
|
18036
18347
|
var UpdateAgentRequest = external_exports.object({
|
|
18037
18348
|
name: Agent.shape.name,
|
|
18038
18349
|
roleDescription: external_exports.string().max(2e3),
|
|
@@ -18757,303 +19068,6 @@ var LinearOAuthPopupMessage = external_exports.discriminatedUnion("ok", [
|
|
|
18757
19068
|
LinearOAuthPopupFailure
|
|
18758
19069
|
]);
|
|
18759
19070
|
|
|
18760
|
-
// ../../packages/contracts/src/manager.ts
|
|
18761
|
-
var MANAGER_DISPLAY_NAME_MAX = 60;
|
|
18762
|
-
var MANAGER_INSTRUCTIONS_MAX = 2e4;
|
|
18763
|
-
var CONVERSATION_MESSAGE_MAX = 1e5;
|
|
18764
|
-
var CONVERSATION_LIST_LIMIT = 50;
|
|
18765
|
-
var ManagerReasoningEffort = external_exports.enum([
|
|
18766
|
-
"none",
|
|
18767
|
-
"minimal",
|
|
18768
|
-
"low",
|
|
18769
|
-
"medium",
|
|
18770
|
-
"high",
|
|
18771
|
-
"xhigh",
|
|
18772
|
-
"max"
|
|
18773
|
-
]);
|
|
18774
|
-
var ManagerConfigProjection = external_exports.object({
|
|
18775
|
-
id: ManagerId,
|
|
18776
|
-
/** Shown in the UI and on chat channels; the persona carries the personality (MG-7). */
|
|
18777
|
-
displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX),
|
|
18778
|
-
/** Appended to the product-owned built-in system prompt; never replaces it. */
|
|
18779
|
-
instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX),
|
|
18780
|
-
model: external_exports.string().min(1).max(100),
|
|
18781
|
-
reasoningEffort: ManagerReasoningEffort,
|
|
18782
|
-
/**
|
|
18783
|
-
* Where the Manager answers on Slack. The workspace bot speaks for the
|
|
18784
|
-
* Manager (MG-1), so the per-teammate mention/DM switches that used to
|
|
18785
|
-
* decide this belong here now — an organization keeps a truthful off
|
|
18786
|
-
* switch for each surface without disconnecting the workspace.
|
|
18787
|
-
*/
|
|
18788
|
-
slack: external_exports.object({ answerMentions: external_exports.boolean(), answerDirectMessages: external_exports.boolean() }).strict(),
|
|
18789
|
-
revision: external_exports.number().int().min(0),
|
|
18790
|
-
updatedAt: external_exports.string().nullable()
|
|
18791
|
-
}).strict();
|
|
18792
|
-
var ManagerMode = external_exports.enum(["openai", "demo", "unconfigured"]);
|
|
18793
|
-
var GetManagerResponse = external_exports.object({ manager: ManagerConfigProjection, mode: ManagerMode }).strict();
|
|
18794
|
-
var UpdateManagerRequest = external_exports.object({
|
|
18795
|
-
displayName: external_exports.string().min(1).max(MANAGER_DISPLAY_NAME_MAX).optional(),
|
|
18796
|
-
instructions: external_exports.string().max(MANAGER_INSTRUCTIONS_MAX).optional(),
|
|
18797
|
-
model: external_exports.string().min(1).max(100).optional(),
|
|
18798
|
-
reasoningEffort: ManagerReasoningEffort.optional(),
|
|
18799
|
-
slack: external_exports.object({
|
|
18800
|
-
answerMentions: external_exports.boolean().optional(),
|
|
18801
|
-
answerDirectMessages: external_exports.boolean().optional()
|
|
18802
|
-
}).strict().optional(),
|
|
18803
|
-
/** Optimistic concurrency: refuse when another admin saved first. */
|
|
18804
|
-
expectedRevision: external_exports.number().int().min(0).optional()
|
|
18805
|
-
}).strict().superRefine((value, ctx) => {
|
|
18806
|
-
if (value.displayName === void 0 && value.instructions === void 0 && value.model === void 0 && value.reasoningEffort === void 0 && value.slack === void 0) {
|
|
18807
|
-
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
18808
|
-
}
|
|
18809
|
-
});
|
|
18810
|
-
var ManagerMemoryKind = external_exports.enum([
|
|
18811
|
-
/** How recurring organization work is actually done ("releases ship Thursday"). */
|
|
18812
|
-
"process",
|
|
18813
|
-
/** A settled organization decision and, ideally, why. */
|
|
18814
|
-
"decision",
|
|
18815
|
-
/** A standing preference for how the organization wants to be served. */
|
|
18816
|
-
"preference",
|
|
18817
|
-
/** A durable organization fact that is not derivable from configuration. */
|
|
18818
|
-
"fact"
|
|
18819
|
-
]);
|
|
18820
|
-
var MANAGER_MEMORY_SUBJECT_MAX = 60;
|
|
18821
|
-
var MANAGER_MEMORY_TEXT_MAX = 300;
|
|
18822
|
-
var MANAGER_MEMORY_MAX_ITEMS = 60;
|
|
18823
|
-
var ManagerMemoryProjection = external_exports.object({
|
|
18824
|
-
id: ManagerMemoryId,
|
|
18825
|
-
kind: ManagerMemoryKind,
|
|
18826
|
-
/** Short normalized topic; (kind, subject) is the deduplication key. */
|
|
18827
|
-
subject: external_exports.string().min(1).max(MANAGER_MEMORY_SUBJECT_MAX),
|
|
18828
|
-
text: external_exports.string().min(1).max(MANAGER_MEMORY_TEXT_MAX),
|
|
18829
|
-
/** Thread the Manager learned it in, for provenance. */
|
|
18830
|
-
sourceConversationId: ConversationId.nullable(),
|
|
18831
|
-
createdAt: external_exports.string(),
|
|
18832
|
-
updatedAt: external_exports.string()
|
|
18833
|
-
}).strict();
|
|
18834
|
-
var ListManagerMemoriesResponse = external_exports.object({
|
|
18835
|
-
memories: external_exports.array(ManagerMemoryProjection).max(MANAGER_MEMORY_MAX_ITEMS),
|
|
18836
|
-
limit: external_exports.number().int().min(1)
|
|
18837
|
-
}).strict();
|
|
18838
|
-
var ConversationChannel = external_exports.enum(["web", "slack", "whatsapp", "phone"]);
|
|
18839
|
-
var ConversationStatus = external_exports.enum(["idle", "thinking"]);
|
|
18840
|
-
var ConversationProjection = external_exports.object({
|
|
18841
|
-
id: ConversationId,
|
|
18842
|
-
/** First-message prefix until the one creation-time Manager title call settles. */
|
|
18843
|
-
title: external_exports.string().min(1).max(200),
|
|
18844
|
-
channel: ConversationChannel,
|
|
18845
|
-
status: ConversationStatus,
|
|
18846
|
-
/** TS-10 origin trust of the channel; propagated into every delegated Task. */
|
|
18847
|
-
trust: external_exports.enum(["internal", "external"]),
|
|
18848
|
-
/** One-use override for the next Task delegated from this thread. */
|
|
18849
|
-
nextDelegationRunner: TaskRunnerSelection.nullable(),
|
|
18850
|
-
createdAt: external_exports.string(),
|
|
18851
|
-
lastActivityAt: external_exports.string(),
|
|
18852
|
-
/** Archived, but at least one executor has not yet proven it stopped. */
|
|
18853
|
-
archiveState: external_exports.literal("stopping").nullable().optional(),
|
|
18854
|
-
archivedAt: external_exports.string().nullable()
|
|
18855
|
-
}).strict().superRefine((conversation, ctx) => {
|
|
18856
|
-
if (conversation.archiveState === "stopping" && conversation.archivedAt === null) {
|
|
18857
|
-
ctx.addIssue({
|
|
18858
|
-
code: "custom",
|
|
18859
|
-
path: ["archivedAt"],
|
|
18860
|
-
message: "a stopping Manager Task must already be in Archived"
|
|
18861
|
-
});
|
|
18862
|
-
}
|
|
18863
|
-
});
|
|
18864
|
-
var conversationEventBase = {
|
|
18865
|
-
id: ConversationEventId,
|
|
18866
|
-
at: external_exports.string()
|
|
18867
|
-
};
|
|
18868
|
-
var ConversationEventProjection = external_exports.discriminatedUnion("kind", [
|
|
18869
|
-
/** A human message into the Conversation. */
|
|
18870
|
-
external_exports.object({
|
|
18871
|
-
...conversationEventBase,
|
|
18872
|
-
kind: external_exports.literal("user"),
|
|
18873
|
-
text: external_exports.string(),
|
|
18874
|
-
/** Display attribution only; authentication subjects remain internal. */
|
|
18875
|
-
author: external_exports.object({ displayName: external_exports.string().nullable() }).strict(),
|
|
18876
|
-
/** Transport that supplied this turn; legacy events omit it. */
|
|
18877
|
-
sourceChannel: ConversationChannel.optional(),
|
|
18878
|
-
/** Input affordance within the trusted transport; legacy/typed turns omit it. */
|
|
18879
|
-
inputModality: external_exports.literal("voice").optional(),
|
|
18880
|
-
attachments: external_exports.array(TaskAttachmentRef).max(TASK_MESSAGE_MAX_ATTACHMENTS).optional()
|
|
18881
|
-
}).strict(),
|
|
18882
|
-
/** The Manager's prose reply. */
|
|
18883
|
-
external_exports.object({ ...conversationEventBase, kind: external_exports.literal("manager"), text: external_exports.string() }).strict(),
|
|
18884
|
-
/** One Manager tool step: a delegation, follow-up, or status check. */
|
|
18885
|
-
external_exports.object({
|
|
18886
|
-
...conversationEventBase,
|
|
18887
|
-
kind: external_exports.literal("tool"),
|
|
18888
|
-
tool: external_exports.string(),
|
|
18889
|
-
summary: external_exports.string(),
|
|
18890
|
-
taskId: TaskId.nullable(),
|
|
18891
|
-
agentId: AgentId.nullable(),
|
|
18892
|
-
/** Present only for a confirmation card; OAuth authority never appears here. */
|
|
18893
|
-
integrationActionId: ManagerIntegrationActionId.nullable().optional()
|
|
18894
|
-
}).strict(),
|
|
18895
|
-
/** A mirrored child-Task event: what the teammate wrote or became. */
|
|
18896
|
-
external_exports.object({
|
|
18897
|
-
...conversationEventBase,
|
|
18898
|
-
kind: external_exports.literal("task"),
|
|
18899
|
-
taskId: TaskId,
|
|
18900
|
-
agentId: AgentId.nullable(),
|
|
18901
|
-
eventKind: external_exports.enum(["response", "error", "status", "question", "message"]),
|
|
18902
|
-
summary: external_exports.string(),
|
|
18903
|
-
taskStatus: TaskStatus.nullable(),
|
|
18904
|
-
/**
|
|
18905
|
-
* Opaque presentation key shared by the useful report and its synthetic
|
|
18906
|
-
* terminal wake-up. It is never shown to people; clients use it only to
|
|
18907
|
-
* render one outcome when recovery commits those records out of order.
|
|
18908
|
-
* Missing on legacy/non-terminal events.
|
|
18909
|
-
*/
|
|
18910
|
-
terminalGroup: external_exports.string().min(1).max(200).nullable().optional()
|
|
18911
|
-
}).strict(),
|
|
18912
|
-
/** A Manager loop failure a person should see (provider outage, refusal). */
|
|
18913
|
-
external_exports.object({ ...conversationEventBase, kind: external_exports.literal("error"), message: external_exports.string() }).strict()
|
|
18914
|
-
]);
|
|
18915
|
-
var ManagerIntegrationProvider = external_exports.enum(["slack"]);
|
|
18916
|
-
var ManagerIntegrationOperation = external_exports.enum(["connect", "reconnect", "check", "remove"]);
|
|
18917
|
-
var ManagerIntegrationActionStatus = external_exports.enum([
|
|
18918
|
-
"awaiting_confirmation",
|
|
18919
|
-
"working",
|
|
18920
|
-
"authorizing",
|
|
18921
|
-
"completed",
|
|
18922
|
-
"cancelled",
|
|
18923
|
-
"failed",
|
|
18924
|
-
"expired"
|
|
18925
|
-
]);
|
|
18926
|
-
var ManagerIntegrationActionProjection = external_exports.object({
|
|
18927
|
-
id: ManagerIntegrationActionId,
|
|
18928
|
-
conversationId: ConversationId,
|
|
18929
|
-
provider: ManagerIntegrationProvider,
|
|
18930
|
-
providerName: external_exports.string().min(1).max(80),
|
|
18931
|
-
operation: ManagerIntegrationOperation,
|
|
18932
|
-
status: ManagerIntegrationActionStatus,
|
|
18933
|
-
title: external_exports.string().min(1).max(200),
|
|
18934
|
-
description: external_exports.string().min(1).max(1e3),
|
|
18935
|
-
confirmLabel: external_exports.string().min(1).max(100),
|
|
18936
|
-
outcome: external_exports.string().max(1e3).nullable(),
|
|
18937
|
-
createdAt: external_exports.string(),
|
|
18938
|
-
expiresAt: external_exports.string()
|
|
18939
|
-
}).strict();
|
|
18940
|
-
var ManagerIntegrationOAuthStart = external_exports.object({
|
|
18941
|
-
authorizeUrl: external_exports.url().max(4e3),
|
|
18942
|
-
callbackOrigin: external_exports.url().max(2e3)
|
|
18943
|
-
}).strict();
|
|
18944
|
-
var ConfirmManagerIntegrationActionRequest = external_exports.object({ requestId: external_exports.string().uuid() }).strict();
|
|
18945
|
-
var ManagerIntegrationActionResponse = external_exports.object({
|
|
18946
|
-
action: ManagerIntegrationActionProjection,
|
|
18947
|
-
oauth: ManagerIntegrationOAuthStart.nullable()
|
|
18948
|
-
}).strict();
|
|
18949
|
-
var NonEmptyTaskRunnerSelection = TaskRunnerSelection.refine(
|
|
18950
|
-
(selection) => selection.type !== void 0 || selection.model !== void 0 || selection.effort !== void 0,
|
|
18951
|
-
"choose at least one runtime preference"
|
|
18952
|
-
);
|
|
18953
|
-
var CreateConversationRequest = external_exports.object({
|
|
18954
|
-
/** Stable client-generated key: retrying the same submission returns one Conversation. */
|
|
18955
|
-
requestId: external_exports.uuid(),
|
|
18956
|
-
message: external_exports.string().max(CONVERSATION_MESSAGE_MAX),
|
|
18957
|
-
attachmentIds: external_exports.array(AttachmentId).max(TASK_MESSAGE_MAX_ATTACHMENTS).refine((ids) => new Set(ids).size === ids.length, "duplicate attachment").optional(),
|
|
18958
|
-
/**
|
|
18959
|
-
* Teammate whose persistent Browser is selected beside this web turn.
|
|
18960
|
-
* This is bounded routing context for Browser-directed requests only; it
|
|
18961
|
-
* is never a general delegation preference.
|
|
18962
|
-
*/
|
|
18963
|
-
browserAgentId: AgentId.optional(),
|
|
18964
|
-
/**
|
|
18965
|
-
* One-time runtime override for the first Task this thread delegates.
|
|
18966
|
-
* Omission preserves the selected teammate's configured defaults.
|
|
18967
|
-
*/
|
|
18968
|
-
initialDelegation: external_exports.object({
|
|
18969
|
-
runner: NonEmptyTaskRunnerSelection
|
|
18970
|
-
}).strict().optional()
|
|
18971
|
-
}).strict().superRefine((value, ctx) => {
|
|
18972
|
-
if (!value.message.trim() && !value.attachmentIds?.length) {
|
|
18973
|
-
ctx.addIssue({
|
|
18974
|
-
code: "custom",
|
|
18975
|
-
path: ["message"],
|
|
18976
|
-
message: "a message needs text or an attachment"
|
|
18977
|
-
});
|
|
18978
|
-
}
|
|
18979
|
-
});
|
|
18980
|
-
var PostConversationMessageRequest = external_exports.object({
|
|
18981
|
-
/** Stable client-generated key: an ambiguous retry appends exactly once. */
|
|
18982
|
-
requestId: external_exports.uuid(),
|
|
18983
|
-
message: external_exports.string().max(CONVERSATION_MESSAGE_MAX),
|
|
18984
|
-
attachmentIds: external_exports.array(AttachmentId).max(TASK_MESSAGE_MAX_ATTACHMENTS).refine((ids) => new Set(ids).size === ids.length, "duplicate attachment").optional(),
|
|
18985
|
-
/** Selected Manager Browser teammate for Browser-directed requests only. */
|
|
18986
|
-
browserAgentId: AgentId.optional()
|
|
18987
|
-
}).strict().superRefine((value, ctx) => {
|
|
18988
|
-
if (!value.message.trim() && !value.attachmentIds?.length) {
|
|
18989
|
-
ctx.addIssue({
|
|
18990
|
-
code: "custom",
|
|
18991
|
-
path: ["message"],
|
|
18992
|
-
message: "a message needs text or an attachment"
|
|
18993
|
-
});
|
|
18994
|
-
}
|
|
18995
|
-
});
|
|
18996
|
-
var UpdateNextDelegationRuntimeRequest = external_exports.object({ runner: NonEmptyTaskRunnerSelection.nullable() }).strict();
|
|
18997
|
-
var UpdateConversationRequest = external_exports.object({
|
|
18998
|
-
title: external_exports.string().trim().min(1).max(200).optional(),
|
|
18999
|
-
archived: external_exports.boolean().optional()
|
|
19000
|
-
}).strict().superRefine((value, ctx) => {
|
|
19001
|
-
if (value.title === void 0 && value.archived === void 0) {
|
|
19002
|
-
ctx.addIssue({ code: "custom", message: "nothing to update" });
|
|
19003
|
-
}
|
|
19004
|
-
});
|
|
19005
|
-
var ConversationResponse = external_exports.object({ conversation: ConversationProjection }).strict();
|
|
19006
|
-
var ListConversationsResponse = external_exports.object({
|
|
19007
|
-
conversations: external_exports.array(ConversationProjection).max(CONVERSATION_LIST_LIMIT),
|
|
19008
|
-
nextCursor: external_exports.string().nullable()
|
|
19009
|
-
}).strict();
|
|
19010
|
-
var ManagerTaskRailSummariesRequest = external_exports.object({
|
|
19011
|
-
conversationIds: external_exports.array(ConversationId).min(1).max(CONVERSATION_LIST_LIMIT),
|
|
19012
|
-
archived: external_exports.boolean(),
|
|
19013
|
-
agentId: AgentId.optional(),
|
|
19014
|
-
statuses: external_exports.array(TaskStatus).min(1).max(TaskStatus.options.length).optional()
|
|
19015
|
-
}).strict().superRefine((value, ctx) => {
|
|
19016
|
-
if (new Set(value.conversationIds).size !== value.conversationIds.length) {
|
|
19017
|
-
ctx.addIssue({
|
|
19018
|
-
code: "custom",
|
|
19019
|
-
path: ["conversationIds"],
|
|
19020
|
-
message: "conversationIds must be unique"
|
|
19021
|
-
});
|
|
19022
|
-
}
|
|
19023
|
-
if (value.statuses && new Set(value.statuses).size !== value.statuses.length) {
|
|
19024
|
-
ctx.addIssue({
|
|
19025
|
-
code: "custom",
|
|
19026
|
-
path: ["statuses"],
|
|
19027
|
-
message: "statuses must be unique"
|
|
19028
|
-
});
|
|
19029
|
-
}
|
|
19030
|
-
});
|
|
19031
|
-
var ManagerTaskRailRepresentative = external_exports.object({
|
|
19032
|
-
id: TaskId,
|
|
19033
|
-
agentId: AgentId,
|
|
19034
|
-
status: TaskStatus,
|
|
19035
|
-
gitSummary: TaskGitSummary.nullable(),
|
|
19036
|
-
createdAt: external_exports.string(),
|
|
19037
|
-
updatedAt: external_exports.string()
|
|
19038
|
-
}).strict();
|
|
19039
|
-
var ManagerTaskRailSummary = external_exports.object({
|
|
19040
|
-
conversationId: ConversationId,
|
|
19041
|
-
hasChildren: external_exports.boolean(),
|
|
19042
|
-
hasAgentMatch: external_exports.boolean(),
|
|
19043
|
-
hasStatusMatch: external_exports.boolean(),
|
|
19044
|
-
representative: ManagerTaskRailRepresentative.nullable()
|
|
19045
|
-
}).strict();
|
|
19046
|
-
var ManagerTaskRailSummariesResponse = external_exports.object({ summaries: external_exports.array(ManagerTaskRailSummary).max(CONVERSATION_LIST_LIMIT) }).strict();
|
|
19047
|
-
var ConversationDetailResponse = external_exports.object({
|
|
19048
|
-
conversation: ConversationProjection,
|
|
19049
|
-
events: external_exports.array(ConversationEventProjection)
|
|
19050
|
-
}).strict();
|
|
19051
|
-
var ManagerStreamFrame = external_exports.discriminatedUnion("type", [
|
|
19052
|
-
external_exports.object({ type: external_exports.literal("event"), event: ConversationEventProjection }).strict(),
|
|
19053
|
-
external_exports.object({ type: external_exports.literal("delta"), text: external_exports.string() }).strict(),
|
|
19054
|
-
external_exports.object({ type: external_exports.literal("conversation"), conversation: ConversationProjection }).strict()
|
|
19055
|
-
]);
|
|
19056
|
-
|
|
19057
19071
|
// ../../packages/contracts/src/voice.ts
|
|
19058
19072
|
var VOICE_MAX_CALL_MINUTES = 30;
|
|
19059
19073
|
var VoiceE164Number = external_exports.string().regex(/^\+[1-9]\d{7,14}$/, "must be an international phone number");
|
|
@@ -24805,6 +24819,7 @@ async function nextSupervisorEntry(current) {
|
|
|
24805
24819
|
}
|
|
24806
24820
|
async function launchHostSupervisor(options = {}) {
|
|
24807
24821
|
const platform = options.platform ?? process.platform;
|
|
24822
|
+
const managedLifecycle = options.managedLifecycle ?? true;
|
|
24808
24823
|
const argv = options.argv ?? process.argv.slice(2);
|
|
24809
24824
|
const log2 = options.log ?? ((message) => console.error(message));
|
|
24810
24825
|
let entry = options.entry ?? process.argv[1] ?? "";
|
|
@@ -24949,18 +24964,21 @@ async function launchHostSupervisor(options = {}) {
|
|
|
24949
24964
|
const onTerm = () => stop("SIGTERM");
|
|
24950
24965
|
process.on("SIGINT", onInt);
|
|
24951
24966
|
process.on("SIGTERM", onTerm);
|
|
24952
|
-
let stdinIsPipe2 = false;
|
|
24953
|
-
|
|
24954
|
-
|
|
24955
|
-
|
|
24956
|
-
|
|
24967
|
+
let stdinIsPipe2 = options.parentStdinIsPipe ?? false;
|
|
24968
|
+
if (options.parentStdinIsPipe === void 0) {
|
|
24969
|
+
try {
|
|
24970
|
+
const stat3 = fstatSync(0);
|
|
24971
|
+
stdinIsPipe2 = !stat3.isCharacterDevice() && !stat3.isFile() && !process.stdin.isTTY;
|
|
24972
|
+
} catch {
|
|
24973
|
+
}
|
|
24957
24974
|
}
|
|
24975
|
+
const observesParentStdin = managedLifecycle && stdinIsPipe2;
|
|
24958
24976
|
const onStdinEnd = () => stop("SIGTERM");
|
|
24959
24977
|
const onStdinError = () => stop("SIGTERM");
|
|
24960
24978
|
const onStdinData = (chunk) => {
|
|
24961
24979
|
if (chunk.includes(3)) stop("SIGINT");
|
|
24962
24980
|
};
|
|
24963
|
-
if (
|
|
24981
|
+
if (observesParentStdin) {
|
|
24964
24982
|
process.stdin.on("end", onStdinEnd);
|
|
24965
24983
|
process.stdin.on("error", onStdinError);
|
|
24966
24984
|
process.stdin.on("data", onStdinData);
|
|
@@ -25086,7 +25104,7 @@ async function launchHostSupervisor(options = {}) {
|
|
|
25086
25104
|
if (stopEscalation) clearTimeout(stopEscalation);
|
|
25087
25105
|
process.off("SIGINT", onInt);
|
|
25088
25106
|
process.off("SIGTERM", onTerm);
|
|
25089
|
-
if (
|
|
25107
|
+
if (observesParentStdin) {
|
|
25090
25108
|
process.stdin.off("end", onStdinEnd);
|
|
25091
25109
|
process.stdin.off("error", onStdinError);
|
|
25092
25110
|
process.stdin.off("data", onStdinData);
|
|
@@ -36212,6 +36230,7 @@ function runCliProcess(options) {
|
|
|
36212
36230
|
let settled = false;
|
|
36213
36231
|
let terminalResult;
|
|
36214
36232
|
let forcedResult;
|
|
36233
|
+
let runnerReleased = !options.guardian;
|
|
36215
36234
|
let resolveChildExited;
|
|
36216
36235
|
const childExited = new Promise((resolveExited) => {
|
|
36217
36236
|
resolveChildExited = resolveExited;
|
|
@@ -36244,7 +36263,7 @@ function runCliProcess(options) {
|
|
|
36244
36263
|
if (settled || forcedResult) return;
|
|
36245
36264
|
forcedResult = result;
|
|
36246
36265
|
clearInterval(timer);
|
|
36247
|
-
child.stdin?.end();
|
|
36266
|
+
if (runnerReleased) child.stdin?.end();
|
|
36248
36267
|
void containmentReady.then(async () => {
|
|
36249
36268
|
if (windowsContainment) {
|
|
36250
36269
|
await windowsContainment.terminate();
|
|
@@ -36427,6 +36446,7 @@ function runCliProcess(options) {
|
|
|
36427
36446
|
child.stdin?.write(`${RUNNER_RELEASE_MARKER} ${release.byteLength}
|
|
36428
36447
|
`);
|
|
36429
36448
|
child.stdin?.write(release);
|
|
36449
|
+
runnerReleased = true;
|
|
36430
36450
|
} else {
|
|
36431
36451
|
}
|
|
36432
36452
|
if (parser.start) {
|