@integrity-labs/agt-cli 0.28.476 → 0.28.478
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/bin/agt.js +4 -4
- package/dist/{chunk-IGXBEU55.js → chunk-RBMN5KPX.js} +3 -3
- package/dist/{chunk-Q6RVMDAC.js → chunk-WANZSIX6.js} +17 -1
- package/dist/chunk-WANZSIX6.js.map +1 -0
- package/dist/{claude-pair-runtime-DYLJU6EV.js → claude-pair-runtime-UA3ZZQ2V.js} +2 -2
- package/dist/lib/manager-worker.js +19 -12
- package/dist/lib/manager-worker.js.map +1 -1
- package/dist/mcp/direct-chat-channel.js +16 -0
- package/dist/mcp/index.js +118 -0
- package/dist/mcp/origami.js +16 -0
- package/dist/mcp/slack-channel.js +16 -0
- package/dist/mcp/telegram-channel.js +16 -0
- package/dist/{persistent-session-QITF76DO.js → persistent-session-FQKD2RA6.js} +2 -2
- package/dist/{responsiveness-probe-BEA4J6IL.js → responsiveness-probe-JQUE3XQG.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-Q6RVMDAC.js.map +0 -1
- /package/dist/{chunk-IGXBEU55.js.map → chunk-RBMN5KPX.js.map} +0 -0
- /package/dist/{claude-pair-runtime-DYLJU6EV.js.map → claude-pair-runtime-UA3ZZQ2V.js.map} +0 -0
- /package/dist/{persistent-session-QITF76DO.js.map → persistent-session-FQKD2RA6.js.map} +0 -0
- /package/dist/{responsiveness-probe-BEA4J6IL.js.map → responsiveness-probe-JQUE3XQG.js.map} +0 -0
|
@@ -33505,6 +33505,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
|
|
|
33505
33505
|
var MB2 = 1024 * 1024;
|
|
33506
33506
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
33507
33507
|
|
|
33508
|
+
// ../core/dist/direct-chat/notice-display.js
|
|
33509
|
+
var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
|
|
33510
|
+
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
33511
|
+
|
|
33508
33512
|
// ../core/dist/onboarding/state-machine.js
|
|
33509
33513
|
var AREA_ORDER = [
|
|
33510
33514
|
"framing",
|
|
@@ -35287,6 +35291,18 @@ var FLAG_REGISTRY = [
|
|
|
35287
35291
|
// the sidebar renders inside the active-org cookie's scope, which is exactly
|
|
35288
35292
|
// the org whose brand should be shown.
|
|
35289
35293
|
public: true
|
|
35294
|
+
},
|
|
35295
|
+
{
|
|
35296
|
+
key: "agent-recruit",
|
|
35297
|
+
description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
|
|
35298
|
+
flagType: "boolean",
|
|
35299
|
+
// Declared safe value is `false`. The write is human-gated either way, but an
|
|
35300
|
+
// unbounded ask is still an unbounded demand on an owner's attention, so the
|
|
35301
|
+
// fail-closed direction on a flag-DB fault is "an agent cannot ask".
|
|
35302
|
+
defaultValue: false,
|
|
35303
|
+
// Turning this on lets agents originate proposals that create customer
|
|
35304
|
+
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35305
|
+
sensitive: true
|
|
35290
35306
|
}
|
|
35291
35307
|
];
|
|
35292
35308
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
package/dist/mcp/index.js
CHANGED
|
@@ -21357,6 +21357,64 @@ function describeFeatureRequestResult(resp) {
|
|
|
21357
21357
|
};
|
|
21358
21358
|
}
|
|
21359
21359
|
|
|
21360
|
+
// src/recruit-agent.ts
|
|
21361
|
+
function describeRecruitAgentResult(resp) {
|
|
21362
|
+
switch (resp.status) {
|
|
21363
|
+
case "proposed": {
|
|
21364
|
+
const name = resp.code_name ? `"${resp.code_name}"` : "the new agent";
|
|
21365
|
+
return {
|
|
21366
|
+
text: `Nothing has been created yet. Your request for ${name} was sent to an organization owner for approval` + (resp.expires_at ? ` and expires at ${resp.expires_at}` : "") + `.
|
|
21367
|
+
|
|
21368
|
+
` + (resp.request_id ? `Check on it with check_approval using request_id "${resp.request_id}".
|
|
21369
|
+
|
|
21370
|
+
` : "") + `Do NOT send this request again \u2014 a duplicate just puts a second card in front of the same person. Tell whoever asked that it is waiting on an owner's approval.`,
|
|
21371
|
+
isError: false
|
|
21372
|
+
};
|
|
21373
|
+
}
|
|
21374
|
+
case "feature_disabled":
|
|
21375
|
+
return {
|
|
21376
|
+
text: `${resp.message ?? "Recruiting teammates is not enabled for this organization."} This is a setting, not a fault \u2014 do not retry. Tell your operator what you need and why.`,
|
|
21377
|
+
isError: true
|
|
21378
|
+
};
|
|
21379
|
+
case "agent_limit_reached":
|
|
21380
|
+
return {
|
|
21381
|
+
text: `${resp.message ?? "Your organization's plan agent limit has been reached."} Retrying will not help: someone has to free a slot or upgrade the plan first.`,
|
|
21382
|
+
isError: true
|
|
21383
|
+
};
|
|
21384
|
+
case "name_reserved":
|
|
21385
|
+
return {
|
|
21386
|
+
text: `${resp.message ?? "That display name is reserved."} Pick a different display_name and try once more.`,
|
|
21387
|
+
isError: true
|
|
21388
|
+
};
|
|
21389
|
+
case "no_approver":
|
|
21390
|
+
return {
|
|
21391
|
+
text: `${resp.message ?? "No approval channel is configured for your organization."} Nothing was sent to anyone. Do not retry until an operator has set this up.`,
|
|
21392
|
+
isError: true
|
|
21393
|
+
};
|
|
21394
|
+
case "delivery_failed":
|
|
21395
|
+
return {
|
|
21396
|
+
text: `${resp.message ?? "The approval card could not be delivered."} The request was not left waiting \u2014 it has been closed, so a fresh attempt is needed once the messaging setup is fixed.`,
|
|
21397
|
+
isError: true
|
|
21398
|
+
};
|
|
21399
|
+
case "rate_limited": {
|
|
21400
|
+
const mins = resp.retry_after_seconds ? Math.ceil(resp.retry_after_seconds / 60) : null;
|
|
21401
|
+
return {
|
|
21402
|
+
text: (
|
|
21403
|
+
// Relay the server's own wording like every other branch does; it can
|
|
21404
|
+
// carry a specific quota detail the generic sentence would drop.
|
|
21405
|
+
`${resp.message ?? "Too many pending recruit proposals"}${mins ? ` Try again in about ${mins} minutes.` : ""} This limit exists to protect the person who has to read these \u2014 do not work around it.`
|
|
21406
|
+
),
|
|
21407
|
+
isError: true
|
|
21408
|
+
};
|
|
21409
|
+
}
|
|
21410
|
+
default:
|
|
21411
|
+
return {
|
|
21412
|
+
text: `Could not request a new teammate${resp.message ? `: ${resp.message}` : ""}. Nothing was created and nobody was asked. Fix what the message describes, or tell your operator \u2014 don't keep retrying.`,
|
|
21413
|
+
isError: true
|
|
21414
|
+
};
|
|
21415
|
+
}
|
|
21416
|
+
}
|
|
21417
|
+
|
|
21360
21418
|
// src/request-reconnect.ts
|
|
21361
21419
|
function describeReconnectRequestResult(resp) {
|
|
21362
21420
|
switch (resp.status) {
|
|
@@ -22541,6 +22599,62 @@ server.tool(
|
|
|
22541
22599
|
return { content: [{ type: "text", text }], ...isError ? { isError: true } : {} };
|
|
22542
22600
|
}
|
|
22543
22601
|
);
|
|
22602
|
+
server.tool(
|
|
22603
|
+
"recruit_agent",
|
|
22604
|
+
"Propose a NEW teammate agent for your organization when the work in front of you genuinely needs a different agent \u2014 a distinct role, a separate remit, or capacity you cannot cover yourself. This does NOT create anything: it sends a request to an organization owner, who approves or denies it. Use it sparingly and only when you can say concretely what the new agent is for; do not use it to duplicate yourself, to get around a tool you are missing (use request_feature), or because a single task is large. After calling this, stop and report that it is awaiting approval \u2014 poll with check_approval if you need the outcome.",
|
|
22605
|
+
{
|
|
22606
|
+
code_name: external_exports.string().min(1).max(64).regex(/^[a-z0-9]+(-[a-z0-9]+)*$/, "code_name must be kebab-case").describe(
|
|
22607
|
+
'kebab-case identifier for the proposed agent (lowercase, hyphen-separated), e.g. "invoice-helper". If the name is already taken in your team a numeric suffix is added automatically.'
|
|
22608
|
+
),
|
|
22609
|
+
display_name: external_exports.string().min(1).max(120).describe('Human-facing name for the proposed agent, e.g. "Invoice Helper".'),
|
|
22610
|
+
description: external_exports.string().min(20).max(2e3).describe(
|
|
22611
|
+
"What this teammate is FOR: its remit, the work it would take on, and why that work needs a separate agent. A human reads this to decide \u2014 be specific and honest. Vague descriptions get denied."
|
|
22612
|
+
),
|
|
22613
|
+
role: external_exports.string().max(200).optional().describe('Optional short role label for the proposed agent, e.g. "Accounts receivable".'),
|
|
22614
|
+
reason: external_exports.string().max(1e3).optional().describe(
|
|
22615
|
+
"Optional context for the approver: what prompted this now (a spike in volume, a user request, a gap you keep hitting). Shown as context only \u2014 the decision is made on the description above."
|
|
22616
|
+
),
|
|
22617
|
+
host_id: external_exports.string().uuid().optional().describe(
|
|
22618
|
+
"Optional host (UUID) to place the new agent on. Omit unless you have a specific reason \u2014 it defaults to your own host."
|
|
22619
|
+
)
|
|
22620
|
+
},
|
|
22621
|
+
async (params) => {
|
|
22622
|
+
if (!AGT_AGENT_CODE_NAME) {
|
|
22623
|
+
return {
|
|
22624
|
+
content: [{ type: "text", text: "Error: AGT_AGENT_CODE_NAME not configured." }],
|
|
22625
|
+
isError: true
|
|
22626
|
+
};
|
|
22627
|
+
}
|
|
22628
|
+
let resp;
|
|
22629
|
+
try {
|
|
22630
|
+
resp = await apiPost("/host/recruit-agent", {
|
|
22631
|
+
agent_code_name: AGT_AGENT_CODE_NAME,
|
|
22632
|
+
code_name: params.code_name,
|
|
22633
|
+
display_name: params.display_name,
|
|
22634
|
+
description: params.description,
|
|
22635
|
+
...params.role ? { role: params.role } : {},
|
|
22636
|
+
...params.reason ? { reason: params.reason } : {},
|
|
22637
|
+
...params.host_id ? { host_id: params.host_id } : {}
|
|
22638
|
+
});
|
|
22639
|
+
} catch (err) {
|
|
22640
|
+
process.stderr.write(
|
|
22641
|
+
`recruit_agent: POST /host/recruit-agent failed: ${err instanceof Error ? err.message : String(err)}
|
|
22642
|
+
`
|
|
22643
|
+
);
|
|
22644
|
+
return {
|
|
22645
|
+
content: [
|
|
22646
|
+
{
|
|
22647
|
+
type: "text",
|
|
22648
|
+
text: "Could not reach the recruiting service. It is not known whether the request was filed \u2014 do not send it again; tell your operator to check the logs."
|
|
22649
|
+
}
|
|
22650
|
+
],
|
|
22651
|
+
isError: true
|
|
22652
|
+
};
|
|
22653
|
+
}
|
|
22654
|
+
const { text, isError } = describeRecruitAgentResult(resp);
|
|
22655
|
+
return { content: [{ type: "text", text }], ...isError ? { isError: true } : {} };
|
|
22656
|
+
}
|
|
22657
|
+
);
|
|
22544
22658
|
server.tool(
|
|
22545
22659
|
"request_reconnect",
|
|
22546
22660
|
'Ask for one of YOUR OWN integrations to be reconnected when its tools fail with authentication/authorization errors (expired or revoked credentials, "needs re-auth", 401/403 from the provider). This notifies your human manager with a reconnect link \u2014 you cannot re-auth an integration yourself. Use it once per failing integration instead of retrying the failing tool; do NOT use it for tools you never had, for transient errors (timeouts, rate limits), or to request new integrations (use request_feature for that).',
|
|
@@ -23916,6 +24030,10 @@ var LOCAL_TOOL_NAMES = /* @__PURE__ */ new Set([
|
|
|
23916
24030
|
// ENG-7495: agent-requested integration reconnect (always registered). No
|
|
23917
24031
|
// API tool shares this name; listed here to keep the lockstep guard green.
|
|
23918
24032
|
"request_reconnect",
|
|
24033
|
+
// ENG-8159: propose a new teammate (always registered — the gate is the
|
|
24034
|
+
// server-side org-scoped agent-recruit flag, see the registration comment).
|
|
24035
|
+
// No API tool shares this name; listed here to keep the lockstep guard green.
|
|
24036
|
+
"recruit_agent",
|
|
23919
24037
|
// ENG-6686: self-service identity edit (always registered). Listed here to
|
|
23920
24038
|
// keep the lockstep guard green; no API tool shares this name.
|
|
23921
24039
|
"update_identity",
|
package/dist/mcp/origami.js
CHANGED
|
@@ -39832,6 +39832,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
|
|
|
39832
39832
|
var MB2 = 1024 * 1024;
|
|
39833
39833
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
39834
39834
|
|
|
39835
|
+
// ../core/dist/direct-chat/notice-display.js
|
|
39836
|
+
var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
|
|
39837
|
+
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
39838
|
+
|
|
39835
39839
|
// ../core/dist/onboarding/state-machine.js
|
|
39836
39840
|
var AREA_ORDER = [
|
|
39837
39841
|
"framing",
|
|
@@ -41234,6 +41238,18 @@ var FLAG_REGISTRY = [
|
|
|
41234
41238
|
// the sidebar renders inside the active-org cookie's scope, which is exactly
|
|
41235
41239
|
// the org whose brand should be shown.
|
|
41236
41240
|
public: true
|
|
41241
|
+
},
|
|
41242
|
+
{
|
|
41243
|
+
key: "agent-recruit",
|
|
41244
|
+
description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
|
|
41245
|
+
flagType: "boolean",
|
|
41246
|
+
// Declared safe value is `false`. The write is human-gated either way, but an
|
|
41247
|
+
// unbounded ask is still an unbounded demand on an owner's attention, so the
|
|
41248
|
+
// fail-closed direction on a flag-DB fault is "an agent cannot ask".
|
|
41249
|
+
defaultValue: false,
|
|
41250
|
+
// Turning this on lets agents originate proposals that create customer
|
|
41251
|
+
// infrastructure once approved — same posture as augmented-support-writes.
|
|
41252
|
+
sensitive: true
|
|
41237
41253
|
}
|
|
41238
41254
|
];
|
|
41239
41255
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -33727,6 +33727,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
|
|
|
33727
33727
|
var MB2 = 1024 * 1024;
|
|
33728
33728
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
33729
33729
|
|
|
33730
|
+
// ../core/dist/direct-chat/notice-display.js
|
|
33731
|
+
var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
|
|
33732
|
+
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
33733
|
+
|
|
33730
33734
|
// ../core/dist/onboarding/state-machine.js
|
|
33731
33735
|
var AREA_ORDER = [
|
|
33732
33736
|
"framing",
|
|
@@ -35512,6 +35516,18 @@ var FLAG_REGISTRY = [
|
|
|
35512
35516
|
// the sidebar renders inside the active-org cookie's scope, which is exactly
|
|
35513
35517
|
// the org whose brand should be shown.
|
|
35514
35518
|
public: true
|
|
35519
|
+
},
|
|
35520
|
+
{
|
|
35521
|
+
key: "agent-recruit",
|
|
35522
|
+
description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
|
|
35523
|
+
flagType: "boolean",
|
|
35524
|
+
// Declared safe value is `false`. The write is human-gated either way, but an
|
|
35525
|
+
// unbounded ask is still an unbounded demand on an owner's attention, so the
|
|
35526
|
+
// fail-closed direction on a flag-DB fault is "an agent cannot ask".
|
|
35527
|
+
defaultValue: false,
|
|
35528
|
+
// Turning this on lets agents originate proposals that create customer
|
|
35529
|
+
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35530
|
+
sensitive: true
|
|
35515
35531
|
}
|
|
35516
35532
|
];
|
|
35517
35533
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -34053,6 +34053,10 @@ var INSTALLABLE_NATIVE_INTEGRATION_IDS = INSTALLABLE_NATIVE_INTEGRATIONS.map((i)
|
|
|
34053
34053
|
var MB2 = 1024 * 1024;
|
|
34054
34054
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
34055
34055
|
|
|
34056
|
+
// ../core/dist/direct-chat/notice-display.js
|
|
34057
|
+
var AGENT_DIRECTED_NOTICE_KINDS = ["scheduled_task_nudge", "kanban_check"];
|
|
34058
|
+
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
34059
|
+
|
|
34056
34060
|
// ../core/dist/onboarding/state-machine.js
|
|
34057
34061
|
var AREA_ORDER = [
|
|
34058
34062
|
"framing",
|
|
@@ -35838,6 +35842,18 @@ var FLAG_REGISTRY = [
|
|
|
35838
35842
|
// the sidebar renders inside the active-org cookie's scope, which is exactly
|
|
35839
35843
|
// the org whose brand should be shown.
|
|
35840
35844
|
public: true
|
|
35845
|
+
},
|
|
35846
|
+
{
|
|
35847
|
+
key: "agent-recruit",
|
|
35848
|
+
description: "The `recruit_agent` MCP tool (ENG-8159): lets an ordinary managed agent PROPOSE a new teammate in its own org. The proposal is filed under the `agent.recruit` approval verb and routed to an org owner as a server-rendered card, so this gates the ASK \u2014 nothing is created until a human taps Approve. Deliberately distinct from augmented-support-writes, which gates the concierge's own create_agent surface: the two requesters are separately controllable because an org may well want its support concierge to propose agents without giving every agent in the fleet the same power. Ships dark.",
|
|
35849
|
+
flagType: "boolean",
|
|
35850
|
+
// Declared safe value is `false`. The write is human-gated either way, but an
|
|
35851
|
+
// unbounded ask is still an unbounded demand on an owner's attention, so the
|
|
35852
|
+
// fail-closed direction on a flag-DB fault is "an agent cannot ask".
|
|
35853
|
+
defaultValue: false,
|
|
35854
|
+
// Turning this on lets agents originate proposals that create customer
|
|
35855
|
+
// infrastructure once approved — same posture as augmented-support-writes.
|
|
35856
|
+
sensitive: true
|
|
35841
35857
|
}
|
|
35842
35858
|
];
|
|
35843
35859
|
var REGISTRY_BY_KEY = new Map(FLAG_REGISTRY.map((definition) => [definition.key, definition]));
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
writeDirectChatSessionState,
|
|
37
37
|
writeEgressAllowlist,
|
|
38
38
|
writePersistentClaudeWrapper
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-WANZSIX6.js";
|
|
40
40
|
import "./chunk-XWVM4KPK.js";
|
|
41
41
|
export {
|
|
42
42
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -77,4 +77,4 @@ export {
|
|
|
77
77
|
writeEgressAllowlist,
|
|
78
78
|
writePersistentClaudeWrapper
|
|
79
79
|
};
|
|
80
|
-
//# sourceMappingURL=persistent-session-
|
|
80
|
+
//# sourceMappingURL=persistent-session-FQKD2RA6.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WANZSIX6.js";
|
|
4
4
|
import "./chunk-XWVM4KPK.js";
|
|
5
5
|
|
|
6
6
|
// src/lib/responsiveness-probe.ts
|
|
@@ -596,4 +596,4 @@ export {
|
|
|
596
596
|
readAndResetSlackReplyBindingClassifications,
|
|
597
597
|
readAndResetSlackReplyTargetClassifications
|
|
598
598
|
};
|
|
599
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
599
|
+
//# sourceMappingURL=responsiveness-probe-JQUE3XQG.js.map
|