replicas-cli 0.3.308 → 0.3.310
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.cjs +76 -13
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -17147,6 +17147,7 @@ var init_linear = __esm({
|
|
|
17147
17147
|
linearSessionMetadataSchema = external_exports.object({
|
|
17148
17148
|
via_mothership: external_exports.boolean().optional(),
|
|
17149
17149
|
attached: external_exports.boolean().optional(),
|
|
17150
|
+
routing_chat_id: external_exports.string().optional(),
|
|
17150
17151
|
issue_id: external_exports.string(),
|
|
17151
17152
|
issue_identifier: external_exports.string(),
|
|
17152
17153
|
issue_title: external_exports.string(),
|
|
@@ -17587,6 +17588,7 @@ var init_replicas_mcp = __esm({
|
|
|
17587
17588
|
listWorkspaces: "list_workspaces",
|
|
17588
17589
|
linearStart: "start_linear_session",
|
|
17589
17590
|
linearSessionIntent: "register_linear_session_intent",
|
|
17591
|
+
routeLinearTicket: "route_linear_ticket",
|
|
17590
17592
|
listChannelSettings: "list_channel_settings",
|
|
17591
17593
|
saveChannelPreset: "save_channel_preset",
|
|
17592
17594
|
deleteChannelPreset: "delete_channel_preset",
|
|
@@ -17709,6 +17711,50 @@ var init_scout = __esm({
|
|
|
17709
17711
|
}
|
|
17710
17712
|
});
|
|
17711
17713
|
|
|
17714
|
+
// ../shared/src/default-skills/scout-settings.ts
|
|
17715
|
+
var SCOUT_SETTINGS_SKILL_NAME, CONTENT;
|
|
17716
|
+
var init_scout_settings = __esm({
|
|
17717
|
+
"../shared/src/default-skills/scout-settings.ts"() {
|
|
17718
|
+
"use strict";
|
|
17719
|
+
init_replicas_mcp();
|
|
17720
|
+
init_scout();
|
|
17721
|
+
SCOUT_SETTINGS_SKILL_NAME = "scout-settings";
|
|
17722
|
+
CONTENT = `---
|
|
17723
|
+
name: ${SCOUT_SETTINGS_SKILL_NAME}
|
|
17724
|
+
description: Use when someone asks Scout to change or explain how Replicas behaves in Slack or Linear (channel levels, "be quieter", "only reply when tagged", channel or team instructions, presets, monitored Linear teams, Slack Connect defaults, Slack agent defaults, "what can I change?"), when someone is annoyed that Scout replied unasked ("not you", "nobody asked", a thumbs-down), when making or answering a settings or automation offer, or when setting up an automation. Not for routing ordinary requests.
|
|
17725
|
+
---
|
|
17726
|
+
|
|
17727
|
+
# Scout settings
|
|
17728
|
+
|
|
17729
|
+
You own every Scout setting: each Slack channel's level, each channel's and Linear team's preset and instructions, the presets themselves, which Linear teams are monitored, Slack Connect defaults, the organization's level, and agent defaults for Slack tasks. Handle requests here, never by spawning a workspace.
|
|
17730
|
+
|
|
17731
|
+
## Tools
|
|
17732
|
+
Read presets, channel instructions, and levels with \`${REPLICAS_MCP_TOOLS.listChannelSettings}\`. Change them with \`${REPLICAS_MCP_TOOLS.updateChannelSettings}\`, \`${REPLICAS_MCP_TOOLS.saveChannelPreset}\`, \`${REPLICAS_MCP_TOOLS.deleteChannelPreset}\`, \`${REPLICAS_MCP_TOOLS.setOrganizationProactivity}\`, \`${REPLICAS_MCP_TOOLS.setSlackConnectDefaults}\`, or \`${REPLICAS_MCP_TOOLS.setSlackAgentDefaults}\`. Every change takes \`confirmation_*\` arguments: fill them with the requesting message's envelope \`channel_id\`, \`thread_ts\`, \`message_ts\`, and \`user_id\`. The server checks that exact Slack author is an organization member (and an admin where noted). If it refuses, say why briefly and change nothing.
|
|
17733
|
+
|
|
17734
|
+
## Changing settings
|
|
17735
|
+
- Settings also change outside your chat, often on purpose: read the current settings first, never trust earlier messages, and never re-apply an earlier request the current message doesn't ask for. Save only what the current message asks.
|
|
17736
|
+
- **Levels**, lowest to highest: \`tagged\` (only @Replicas pings reach you, not even messages naming Replicas), \`conservative\` (also messages naming Replicas or Scout, and follow-ups in threads with a workspace), \`balanced\` (the normal triage rules), \`proactive\` (also clear untagged questions and requests). People see these as Mentions only, Low, Balanced and High: use those names, never the setting values.
|
|
17737
|
+
- The organization has one level for its whole Slack workspace, which only an admin can set with \`${REPLICAS_MCP_TOOLS.setOrganizationProactivity}\`. A channel or group DM can override it with \`${REPLICAS_MCP_TOOLS.updateChannelSettings}\` and \`proactivity\`. 1:1 DMs are always addressed to you. Any member can lower a channel; raising one above \`tagged\` needs an admin.
|
|
17738
|
+
- A request that points at a channel ("here", "in #eng", "stop replying in #random") changes that channel only. One that doesn't ("only respond when I @ you", "don't auto-reply to Slack messages") means the organization level. When it names a channel, even without "#" ("make support-inbound quieter"), find it with \`conversations.list\` and change that one, not the one you were asked in; ask if none or several match. If a non-admin asks for an organization change, say an organization admin has to ask, and offer the channel-only change when they asked from a channel. Instructions don't substitute for a level.
|
|
17739
|
+
- **Instructions and presets:** prefer changing the channel's own instructions; edit a shared preset only when asked, since every channel using it changes. To set up a channel without being told how, read enough of it to propose short instructions or a fitting preset (customer, vendor, internal team), and save nothing until they confirm. Never infer a channel's purpose only because Slack marks it externally shared.
|
|
17740
|
+
- **Linear teams:** set \`monitored: true\` to start triaging a team (admin only) and \`monitored: false\` to stop. Teams take a preset or instructions like channels.
|
|
17741
|
+
- **Slack Connect** channels shared with another company follow the organization's shared-channel defaults (\`tagged\` with no preset unless an admin set them with \`${REPLICAS_MCP_TOOLS.setSlackConnectDefaults}\`) until they get their own settings, unless a Mothership is linked to one. A request about all shared or customer channels changes only those defaults: leave channels with their own settings as they are, list them, and offer to switch them too. Asked why you stay quiet in one, say it's external and an admin can raise its level here.
|
|
17742
|
+
- **Slack agent defaults:** to change the agent, model, thinking level, goal mode, or fast mode for tasks started from Slack ("use Codex for Slack tasks"), call \`${REPLICAS_MCP_TOOLS.setSlackAgentDefaults}\` (admin only).
|
|
17743
|
+
- **"What can I change?"** Read the current settings, then list what applies with each current value: how much you speak up here and in every channel (raising a channel above Mentions only and the every-channel default need an admin), instructions or a preset for this channel, sending this channel's requests to a Mothership, which Linear teams you triage (an admin starts one), and the Slack agent defaults (admin).
|
|
17744
|
+
- After any change, say what changed and its scope ("every channel", or "#eng only"). Confirm only after the tool succeeded and only what it changed; say so when it failed or did less than asked.
|
|
17745
|
+
|
|
17746
|
+
## Offers
|
|
17747
|
+
When the envelope has \`offers\`, it lists the offers you may still make in this channel (${SCOUT_CHANNEL_SETTINGS_OFFERS.map((offer) => `\`${offer}\``).join(", ")}); \`offers=none\` means none. Offer only what it lists, at most one per message. Claim the offer with \`${REPLICAS_MCP_TOOLS.claimSettingsOffer}\` right before posting it, and post only when the claim succeeds. When someone declines ("no", "it's fine", "leave it"), record it with \`declined: true\`; never repeat an ignored offer. When they accept, apply it with the tools above using the accepting message as confirmation, then confirm in one short line.
|
|
17748
|
+
- **Frustration.** When someone is clearly annoyed that you replied or acted unasked ("wtf why did replicas respond", "not you", "nobody asked", or a thumbs-down on a reply you posted unasked), claim \`proactivity\` and post one short apology offering to lower this channel exactly one step. From Balanced or High: "Sorry for jumping in. Want me to only reply here when someone mentions me by name?" From Low: "Sorry for jumping in. Want me to only reply here when someone @mentions me?" On a yes, set that level, nothing lower. Do nothing else in that thread. When the claim answers \`offer: organization\`, offer to set every channel's default to \`organization_target\` instead; when \`requester_is_admin\` is false, say an admin can change it for every channel and offer this channel. An explicit "stop replying in this thread" is still a thread mute.
|
|
17749
|
+
- **Having to tag you.** After doing what an earlier untagged message asked, claim \`raise_proactivity\` and end your reply with one line offering one step up. From Mentions only: "Want me to pick up messages here that name me, without an @mention? @mention me with your answer." From Low: "Want me to pick up requests like that here without a tag next time? I can raise this channel to Balanced." From Balanced: "Want me to jump in on requests like that here without being asked? I can raise this channel to High." When the claim answers \`offer: organization\`, offer to raise every channel's default to \`organization_target\` instead, and say channels with their own level keep it. Mention an admin only when the claim answers \`needs_admin: true\`, then offer this channel instead. On a yes, raise to that level only.
|
|
17750
|
+
- **Channel instructions.** When you join a channel or first act in one whose name or purpose points to a clear role (#triage, #bugs, #incidents, #support, #customer-*, a customer's shared channel), claim \`instructions\` and offer one concrete behavior in one line ("This looks like an incident channel. Want me to triage new reports here, check for duplicates, and post findings in the thread?"). Make the same kind of offer when you keep handling messages here the same way, or the channel clearly belongs to a Mothership (offer to send its actionable messages to it by name). On a yes, save it as the channel's instructions, or its preset when one fits exactly.
|
|
17751
|
+
|
|
17752
|
+
## Automations
|
|
17753
|
+
When someone accepts an offer to automate a repeated request, set it up here instead of spawning. Infer the name, prompt, environment, repositories, schedule, and timezone from the conversation and the organization's configuration; ask one concise follow-up only for a missing detail that changes when or where it runs. Create it with \`${REPLICAS_MCP_TOOLS.createAutomation}\`, filling \`confirmation_*\` from the accepting message's envelope. The server checks that author is an organization member with automation write access; never create it if that fails. Post the result in the same thread.
|
|
17754
|
+
`;
|
|
17755
|
+
}
|
|
17756
|
+
});
|
|
17757
|
+
|
|
17712
17758
|
// ../shared/src/workspace-attention.ts
|
|
17713
17759
|
var WORKSPACE_ATTENTION_REASONS, CHAT_ATTENTION_REASONS;
|
|
17714
17760
|
var init_workspace_attention = __esm({
|
|
@@ -20602,10 +20648,12 @@ function defaultReplicasAgentAbilities() {
|
|
|
20602
20648
|
function hasAllReplicasAgentAbilities(abilities) {
|
|
20603
20649
|
return REPLICAS_AGENT_ABILITIES.every((key) => typeof abilities[key] === "boolean");
|
|
20604
20650
|
}
|
|
20605
|
-
var EMPTY_AGENT_DEFAULT_SETTINGS, DEFAULT_SUBAGENT_MCP_PROVIDERS, ALERT_SOUND_FAMILIES, ALERT_SOUNDS, PUSH_WHEN_ACTIVE_COPY, DEFAULT_USER_PREFERENCES, DEFAULT_DEFAULT_SKILLS;
|
|
20651
|
+
var EMPTY_AGENT_DEFAULT_SETTINGS, DEFAULT_SUBAGENT_MCP_PROVIDERS, ALERT_SOUND_FAMILIES, ALERT_SOUNDS, PUSH_WHEN_ACTIVE_COPY, DEFAULT_USER_PREFERENCES, DEFAULT_DEFAULT_SKILLS, LINEAR_ROUTING_SKILL_MAX_LENGTH, linearRoutingSkillSchema;
|
|
20606
20652
|
var init_preferences = __esm({
|
|
20607
20653
|
"../shared/src/routes/preferences.ts"() {
|
|
20608
20654
|
"use strict";
|
|
20655
|
+
init_zod();
|
|
20656
|
+
init_uuid();
|
|
20609
20657
|
init_agent();
|
|
20610
20658
|
init_push();
|
|
20611
20659
|
init_registry();
|
|
@@ -20675,6 +20723,11 @@ var init_preferences = __esm({
|
|
|
20675
20723
|
abilities: defaultReplicasAgentAbilities()
|
|
20676
20724
|
}
|
|
20677
20725
|
};
|
|
20726
|
+
LINEAR_ROUTING_SKILL_MAX_LENGTH = 5e4;
|
|
20727
|
+
linearRoutingSkillSchema = external_exports.union([
|
|
20728
|
+
external_exports.object({ name: external_exports.string().min(1), content: external_exports.string().trim().min(1).max(LINEAR_ROUTING_SKILL_MAX_LENGTH) }),
|
|
20729
|
+
external_exports.object({ name: external_exports.string().min(1), repository_id: external_exports.string().regex(UUID_RE), path: external_exports.string().min(1) })
|
|
20730
|
+
]);
|
|
20678
20731
|
}
|
|
20679
20732
|
});
|
|
20680
20733
|
|
|
@@ -20695,7 +20748,7 @@ function removeTag(text4, tag) {
|
|
|
20695
20748
|
function stripReplicasInstructionBlock(text4) {
|
|
20696
20749
|
return removeTag(text4, REPLICAS_INSTRUCTIONS_TAG);
|
|
20697
20750
|
}
|
|
20698
|
-
var REPLICAS_INSTRUCTIONS_TAG, MOTHERSHIP_INSTRUCTIONS_TAG, BOARD_RULES, MOTHERSHIP_INSTRUCTIONS_BLOCK,
|
|
20751
|
+
var REPLICAS_INSTRUCTIONS_TAG, MOTHERSHIP_INSTRUCTIONS_TAG, BOARD_RULES, MOTHERSHIP_INSTRUCTIONS_BLOCK, T, SCOUT_LINEAR_RULES, SCOUT_MUTED_RULES, SCOUT_PRIOR_UNTAGGED_RULES, SCOUT_JOINED_RULES, SCOUT_REACTION_RULES;
|
|
20699
20752
|
var init_prompts = __esm({
|
|
20700
20753
|
"../shared/src/prompts.ts"() {
|
|
20701
20754
|
"use strict";
|
|
@@ -20704,6 +20757,7 @@ var init_prompts = __esm({
|
|
|
20704
20757
|
init_types4();
|
|
20705
20758
|
init_replicas_mcp();
|
|
20706
20759
|
init_scout();
|
|
20760
|
+
init_scout_settings();
|
|
20707
20761
|
init_preferences();
|
|
20708
20762
|
init_registry();
|
|
20709
20763
|
init_replicas_agent();
|
|
@@ -20714,18 +20768,20 @@ var init_prompts = __esm({
|
|
|
20714
20768
|
BOARD_RULES = `- The board, a live status page you keep with \`${REPLICAS_MCP_TOOLS.updateBoard}\` in the Ships pane beside this chat, is the user's one view of the work: keep it covering every ship, pull request, deploy, blocker and ask. Show ships, pull requests and Linear tickets as ship, pr and linear blocks, which stay current on their own, instead of describing their status. Start with sections Needs you, Ready to review, Working, Shipping and Done, and add blocks and buttons whenever they help the user act.
|
|
20715
20769
|
- A ship with open pull requests is not done when it sends \`finished\`: Replicas fixes their CI failures and review comments automatically, then sends \`ready\` or \`needs_attention\`. On \`needs_attention\`, direct the ship, or put the decision to the user if it needs one.
|
|
20716
20770
|
- On every ship event, update the board, act with tools if other work waits on it, such as starting the next task once a pull request merges, and end your turn with no text at all. Never write an acknowledgement such as "Noted.", even if earlier turns did.
|
|
20717
|
-
-
|
|
20771
|
+
- The chat is like texting an assistant: the user sees only your last message of each turn, never your tool calls or earlier text. Write there only to answer the user, to ask a decision only they can make in a line or two, or to say in a line, with links, that work they asked for is done. Everything else, especially progress, goes on the board: spend your effort there, not in chat. Put each decision on the board too, as a choice when it has clear options, and ask it in chat once. Never restate the board in chat: no status tables, per-ship lists or summaries of what ships did.
|
|
20718
20772
|
- When the user picks a choice or clicks a button that messages or merges, Replicas removes that item from the board for you. Add it back, or a new item, only if the user is still needed.
|
|
20719
20773
|
`;
|
|
20720
20774
|
MOTHERSHIP_INSTRUCTIONS_BLOCK = new RegExp(`\\s*<${MOTHERSHIP_INSTRUCTIONS_TAG}>\\n([\\s\\S]*?)\\n</${MOTHERSHIP_INSTRUCTIONS_TAG}>`);
|
|
20721
|
-
|
|
20722
|
-
|
|
20723
|
-
|
|
20724
|
-
|
|
20725
|
-
|
|
20726
|
-
|
|
20727
|
-
|
|
20728
|
-
|
|
20775
|
+
T = REPLICAS_MCP_TOOLS;
|
|
20776
|
+
SCOUT_LINEAR_RULES = `Linear issue triage: team instructions define what is actionable. Use \`replicas.linear.graphql\` from \`@replicas/sdk\` for every Linear read and mutation, never a Replicas CLI command. Choose exactly one:
|
|
20777
|
+
1. **Ignore** issues the team instructions leave to humans or that should not start work: do nothing and write nothing to Linear. If \`agent_session_id\` is set because you asked a question earlier, create a \`response\` Agent Activity on it with one short closing response.
|
|
20778
|
+
2. **Ask** when the issue is likely actionable but lacks a requirement, reproduction, or other information needed to start safely. With \`agent_session_id=none\`, create a Linear comment on \`issue_id\` containing only one concise question, register the \`ask\` intent for it with \`${T.linearSessionIntent}\` (\`comment_id\`, \`action\`), then call \`agentSessionCreateOnComment\`. With a session, create an \`elicitation\` Agent Activity with the question; never create another comment or session.
|
|
20779
|
+
3. **Start** when the issue is clear and the team instructions permit work. With \`agent_session_id=none\`, comment only a one-line handoff such as "Picking this up.", register the \`start\` intent for it, then call \`agentSessionCreateOnComment\`. With a session, call \`${T.linearStart}\` with \`issue_id\`, \`agent_session_id\`, and the latest request in its author's words, so a coding workspace takes over that session. Never create a second session or do the work yourself.
|
|
20780
|
+
Check every mutation and tool call succeeded. Never put routing metadata in visible Linear text, invent a session ID, or change the issue's labels, priority, assignee, project, or state. Decide each issue separately, and start no second workspace when \`issue_has_workspace=true\`.`;
|
|
20781
|
+
SCOUT_MUTED_RULES = `This thread is muted (\`muted=true\`). With \`directed=false\`, ignore the message even when it names Replicas, asks for urgent work, or answers a workspace question; the only exception is an explicit request to unmute, come back, or respond again, which you record with \`${T.setThreadMuted}\` and \`muted: false\` and then triage normally. Never infer an unmute from ordinary conversation. A \`directed=true\` ping may be handled normally, but it does not end the mute. Your own latest \`${T.setThreadMuted}\` call for this thread overrides this flag.`;
|
|
20782
|
+
SCOUT_PRIOR_UNTAGGED_RULES = `\`prior_untagged_ignored=<ts>\`: the untagged message with that \`ts\`, just before this ping, never reached you. If this ping points back at it ("do the above", "^", "see above", "why didn't you pick this up") and it was a question or request for you, read it (\`conversations.replies\` in a thread, \`conversations.history\` at the top level), do what it asked, then follow **Having to tag you** in the \`${SCOUT_SETTINGS_SKILL_NAME}\` skill to offer picking up messages like it without a tag. Offer nothing when this ping is its own fresh request or that message was chatter or meant for someone else.`;
|
|
20783
|
+
SCOUT_JOINED_RULES = `\`event=joined\`: you were just added to this channel; reply in this envelope's thread. If the channel's name or purpose points to a clear role (#triage, #bugs, #incidents, #support, #customer-*, a customer's shared channel), follow **Channel instructions** in the \`${SCOUT_SETTINGS_SKILL_NAME}\` skill to offer one concrete behavior. Otherwise do nothing at all.`;
|
|
20784
|
+
SCOUT_REACTION_RULES = `\`event=reaction:\u2026\`: someone reacted to a message you posted. A thumbs-down or similar on a reply you posted unasked is frustration: follow **Frustration** in the \`${SCOUT_SETTINGS_SKILL_NAME}\` skill. On a reply someone asked for, it is about the answer: leave it. Otherwise do nothing.`;
|
|
20729
20785
|
}
|
|
20730
20786
|
});
|
|
20731
20787
|
|
|
@@ -31798,6 +31854,7 @@ var init_default_skills = __esm({
|
|
|
31798
31854
|
"../shared/src/default-skills/index.ts"() {
|
|
31799
31855
|
"use strict";
|
|
31800
31856
|
init_replicas_agent();
|
|
31857
|
+
init_scout_settings();
|
|
31801
31858
|
}
|
|
31802
31859
|
});
|
|
31803
31860
|
|
|
@@ -31872,7 +31929,7 @@ var CLI_VERSION;
|
|
|
31872
31929
|
var init_cli_version = __esm({
|
|
31873
31930
|
"../shared/src/cli-version.ts"() {
|
|
31874
31931
|
"use strict";
|
|
31875
|
-
CLI_VERSION = "0.3.
|
|
31932
|
+
CLI_VERSION = "0.3.310";
|
|
31876
31933
|
}
|
|
31877
31934
|
});
|
|
31878
31935
|
|
|
@@ -32109,7 +32166,7 @@ var init_slack2 = __esm({
|
|
|
32109
32166
|
});
|
|
32110
32167
|
|
|
32111
32168
|
// ../shared/src/routes/scout.ts
|
|
32112
|
-
var SCOUT_LINEAR_ACTIONS, scoutLinearSessionIntentRequestSchema, scoutLinearStartRequestSchema, slackChannelIdSchema, slackThreadTsSchema, scoutSlackSpawnRequestSchema, scoutSlackSpawnInNewThreadRequestSchema, scoutSlackRelayRequestSchema, scoutSlackSetThreadMutedRequestSchema, scoutListWorkspacesRequestSchema, scoutSlackConfirmationSchema, scoutAutomationToolInputSchema, scoutSaveChannelPresetToolInputSchema, scoutUpdateChannelSettingsToolInputSchema, scoutSetSlackConnectMutedToolInputSchema, scoutSetSlackConnectDefaultsToolInputSchema, scoutSetOrganizationProactivityToolInputSchema, scoutDeleteChannelPresetToolInputSchema, RESET_TO_DEFAULT, resettable, scoutSetSlackAgentDefaultsToolInputSchema, scoutClaimSettingsOfferToolInputSchema;
|
|
32169
|
+
var SCOUT_LINEAR_ACTIONS, scoutLinearSessionIntentRequestSchema, scoutLinearStartRequestSchema, scoutRouteLinearTicketRequestSchema, slackChannelIdSchema, slackThreadTsSchema, scoutSlackSpawnRequestSchema, scoutSlackSpawnInNewThreadRequestSchema, scoutSlackRelayRequestSchema, scoutSlackSetThreadMutedRequestSchema, scoutListWorkspacesRequestSchema, scoutSlackConfirmationSchema, scoutAutomationToolInputSchema, scoutSaveChannelPresetToolInputSchema, scoutUpdateChannelSettingsToolInputSchema, scoutSetSlackConnectMutedToolInputSchema, scoutSetSlackConnectDefaultsToolInputSchema, scoutSetOrganizationProactivityToolInputSchema, scoutDeleteChannelPresetToolInputSchema, RESET_TO_DEFAULT, resettable, scoutSetSlackAgentDefaultsToolInputSchema, scoutClaimSettingsOfferToolInputSchema;
|
|
32113
32170
|
var init_scout2 = __esm({
|
|
32114
32171
|
"../shared/src/routes/scout.ts"() {
|
|
32115
32172
|
"use strict";
|
|
@@ -32128,6 +32185,11 @@ var init_scout2 = __esm({
|
|
|
32128
32185
|
agent_session_id: external_exports.string().describe("Existing Linear agent session id from the envelope's `agent_session_id`."),
|
|
32129
32186
|
prompt: external_exports.string().trim().min(1).describe("The latest request, in its author's words. The workspace already receives the issue and its comments.")
|
|
32130
32187
|
});
|
|
32188
|
+
scoutRouteLinearTicketRequestSchema = external_exports.object({
|
|
32189
|
+
agent_session_id: external_exports.string().trim().min(1).describe("The ticket's `agent_session_id` from the envelope."),
|
|
32190
|
+
environment_id: external_exports.string().trim().min(1).optional().describe("Start the ticket in this environment."),
|
|
32191
|
+
mothership_id: external_exports.string().trim().min(1).optional().describe("Hand the ticket to this Mothership instead.")
|
|
32192
|
+
}).refine((args) => !(args.environment_id && args.mothership_id), "Pass environment_id or mothership_id, not both.");
|
|
32131
32193
|
slackChannelIdSchema = external_exports.string().describe("Slack channel id from the envelope's `channel_id`.");
|
|
32132
32194
|
slackThreadTsSchema = external_exports.string().describe("Slack thread timestamp from the envelope's `thread_ts`.");
|
|
32133
32195
|
scoutSlackSpawnRequestSchema = external_exports.object({
|
|
@@ -42565,6 +42627,7 @@ var init_mothership_board = __esm({
|
|
|
42565
42627
|
type: external_exports.literal("section"),
|
|
42566
42628
|
id: blockId.optional(),
|
|
42567
42629
|
title: label(120),
|
|
42630
|
+
tone: tone.optional(),
|
|
42568
42631
|
collapsed: external_exports.boolean().optional(),
|
|
42569
42632
|
get children() {
|
|
42570
42633
|
return external_exports.array(block).max(100);
|