@integrity-labs/agt-cli 0.28.512 → 0.28.514
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-Z7DMKSCU.js → chunk-GJ6U2XU6.js} +18 -15
- package/dist/chunk-GJ6U2XU6.js.map +1 -0
- package/dist/{chunk-M3ICTPSG.js → chunk-S5RR4UHQ.js} +55 -15
- package/dist/chunk-S5RR4UHQ.js.map +1 -0
- package/dist/{claude-pair-runtime-MNO6DCMX.js → claude-pair-runtime-YGKYLV4M.js} +2 -2
- package/dist/lib/manager-worker.js +10 -10
- package/dist/mcp/direct-chat-channel.js +53 -9
- package/dist/mcp/index.js +34 -5
- package/dist/mcp/origami.js +66 -11
- package/dist/mcp/slack-channel.js +53 -9
- package/dist/mcp/telegram-channel.js +53 -9
- package/dist/{persistent-session-HUKX54KL.js → persistent-session-RM5ZY2SB.js} +2 -2
- package/dist/{responsiveness-probe-HN7KBLJP.js → responsiveness-probe-C4KMTKWR.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-M3ICTPSG.js.map +0 -1
- package/dist/chunk-Z7DMKSCU.js.map +0 -1
- /package/dist/{claude-pair-runtime-MNO6DCMX.js.map → claude-pair-runtime-YGKYLV4M.js.map} +0 -0
- /package/dist/{persistent-session-HUKX54KL.js.map → persistent-session-RM5ZY2SB.js.map} +0 -0
- /package/dist/{responsiveness-probe-HN7KBLJP.js.map → responsiveness-probe-C4KMTKWR.js.map} +0 -0
|
@@ -100,7 +100,7 @@ async function spawnPairSession(session) {
|
|
|
100
100
|
return { ok: true };
|
|
101
101
|
} catch {
|
|
102
102
|
}
|
|
103
|
-
const { resolveClaudeBinary } = await import("./persistent-session-
|
|
103
|
+
const { resolveClaudeBinary } = await import("./persistent-session-RM5ZY2SB.js");
|
|
104
104
|
const claudeBin = resolveClaudeBinary();
|
|
105
105
|
const pairEnv = {
|
|
106
106
|
...process.env,
|
|
@@ -373,4 +373,4 @@ export {
|
|
|
373
373
|
startClaudePair,
|
|
374
374
|
submitClaudePairCode
|
|
375
375
|
};
|
|
376
|
-
//# sourceMappingURL=claude-pair-runtime-
|
|
376
|
+
//# sourceMappingURL=claude-pair-runtime-YGKYLV4M.js.map
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
safeWriteJsonAtomic,
|
|
54
54
|
setConfigHash,
|
|
55
55
|
tripClass
|
|
56
|
-
} from "../chunk-
|
|
56
|
+
} from "../chunk-GJ6U2XU6.js";
|
|
57
57
|
import {
|
|
58
58
|
getProjectDir as getProjectDir2,
|
|
59
59
|
getReadyTasks,
|
|
@@ -173,7 +173,7 @@ import {
|
|
|
173
173
|
toOpencodeModel,
|
|
174
174
|
transcriptActivityAgeSeconds,
|
|
175
175
|
writeEgressAllowlist
|
|
176
|
-
} from "../chunk-
|
|
176
|
+
} from "../chunk-S5RR4UHQ.js";
|
|
177
177
|
import {
|
|
178
178
|
reapOrphanChannelMcps
|
|
179
179
|
} from "../chunk-XWVM4KPK.js";
|
|
@@ -10071,7 +10071,7 @@ var agentRestartTimezoneInputs = /* @__PURE__ */ new Map();
|
|
|
10071
10071
|
var lastVersionCheckAt = 0;
|
|
10072
10072
|
var VERSION_CHECK_INTERVAL_MS = 5 * 60 * 1e3;
|
|
10073
10073
|
var lastResponsivenessProbeAt = 0;
|
|
10074
|
-
var agtCliVersion = true ? "0.28.
|
|
10074
|
+
var agtCliVersion = true ? "0.28.514" : "dev";
|
|
10075
10075
|
function resolveBrewPath(execFileSync2) {
|
|
10076
10076
|
try {
|
|
10077
10077
|
const out = execFileSync2("which", ["brew"], { timeout: 5e3 }).toString().trim();
|
|
@@ -11278,7 +11278,7 @@ function flushRestartedAgentDiagnostics(hostId, codeNames) {
|
|
|
11278
11278
|
if (codeNames.length === 0) return;
|
|
11279
11279
|
void (async () => {
|
|
11280
11280
|
try {
|
|
11281
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11281
|
+
const { collectDiagnostics } = await import("../persistent-session-RM5ZY2SB.js");
|
|
11282
11282
|
await api.post("/host/heartbeat", {
|
|
11283
11283
|
host_id: hostId,
|
|
11284
11284
|
agent_diagnostics: collectDiagnostics(codeNames, quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -11385,7 +11385,7 @@ async function pollCycle() {
|
|
|
11385
11385
|
}
|
|
11386
11386
|
try {
|
|
11387
11387
|
const { detectHostSecurity } = await import("../host-security-6PDFG7F5.js");
|
|
11388
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
11388
|
+
const { collectDiagnostics } = await import("../persistent-session-RM5ZY2SB.js");
|
|
11389
11389
|
const diagCodeNames = [...agentState.persistentSessionAgents];
|
|
11390
11390
|
const agentDiagnostics = diagCodeNames.length > 0 ? collectDiagnostics(diagCodeNames, quarantineEntriesFor, claudeMdSizeFor) : void 0;
|
|
11391
11391
|
let tailscaleHostname;
|
|
@@ -11500,7 +11500,7 @@ async function pollCycle() {
|
|
|
11500
11500
|
collectResponsivenessProbes,
|
|
11501
11501
|
collectPanelessActivityProbes,
|
|
11502
11502
|
getResponsivenessIntervalMs
|
|
11503
|
-
} = await import("../responsiveness-probe-
|
|
11503
|
+
} = await import("../responsiveness-probe-C4KMTKWR.js");
|
|
11504
11504
|
const probeIntervalMs = getResponsivenessIntervalMs();
|
|
11505
11505
|
if (now - lastResponsivenessProbeAt > probeIntervalMs) {
|
|
11506
11506
|
const probeCodeNames = [...agentState.persistentSessionAgents];
|
|
@@ -11564,7 +11564,7 @@ async function pollCycle() {
|
|
|
11564
11564
|
collectResponsivenessProbes,
|
|
11565
11565
|
livePendingInboundOldestAgeSeconds,
|
|
11566
11566
|
parkPendingInbound
|
|
11567
|
-
} = await import("../responsiveness-probe-
|
|
11567
|
+
} = await import("../responsiveness-probe-C4KMTKWR.js");
|
|
11568
11568
|
const { getProjectDir: wedgeProjectDir } = await import("../scheduler-engine-NDP36U7O.js");
|
|
11569
11569
|
const wedgeNow = /* @__PURE__ */ new Date();
|
|
11570
11570
|
const liveAgents = agentState.persistentSessionAgents;
|
|
@@ -15072,7 +15072,7 @@ async function handleRestartDoorbell(agentId, requestedAt, restartReason) {
|
|
|
15072
15072
|
void api.post("/host/restart-ack", { host_id: hostId, agent_id: agentId, restart_requested_at: requestedAt }).catch((err) => log(`[restart-lane] ack failed for '${codeName}': ${err.message}`));
|
|
15073
15073
|
void (async () => {
|
|
15074
15074
|
try {
|
|
15075
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15075
|
+
const { collectDiagnostics } = await import("../persistent-session-RM5ZY2SB.js");
|
|
15076
15076
|
await api.post("/host/heartbeat", {
|
|
15077
15077
|
host_id: hostId,
|
|
15078
15078
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15122,7 +15122,7 @@ async function respawnAgentAfterMcpStop(codeName, reason) {
|
|
|
15122
15122
|
}
|
|
15123
15123
|
try {
|
|
15124
15124
|
const hostId = await getHostId();
|
|
15125
|
-
const { collectDiagnostics } = await import("../persistent-session-
|
|
15125
|
+
const { collectDiagnostics } = await import("../persistent-session-RM5ZY2SB.js");
|
|
15126
15126
|
await api.post("/host/heartbeat", {
|
|
15127
15127
|
host_id: hostId,
|
|
15128
15128
|
agent_diagnostics: collectDiagnostics([codeName], quarantineEntriesFor, claudeMdSizeFor)
|
|
@@ -15640,7 +15640,7 @@ async function processClaudePairSessions(agents) {
|
|
|
15640
15640
|
killPairSession,
|
|
15641
15641
|
pairTmuxSession,
|
|
15642
15642
|
finalizeClaudePairOnboarding
|
|
15643
|
-
} = await import("../claude-pair-runtime-
|
|
15643
|
+
} = await import("../claude-pair-runtime-YGKYLV4M.js");
|
|
15644
15644
|
for (const pairId of pendingResp.cancelled_pair_ids ?? []) {
|
|
15645
15645
|
log(`[claude-pair] sweeping orphan tmux session for pair ${pairId.slice(0, 8)}`);
|
|
15646
15646
|
const killed = await killPairSession(pairTmuxSession(pairId));
|
|
@@ -30945,6 +30945,11 @@ var integration_metadata_v1_default = {
|
|
|
30945
30945
|
pattern: "^https://",
|
|
30946
30946
|
description: "Absolute HTTPS URL the broker uses as the vendor API root. Required when any tool descriptor relies on http_templater (i.e. whenever `tools[]` is non-empty)."
|
|
30947
30947
|
},
|
|
30948
|
+
auth_scheme: {
|
|
30949
|
+
type: "string",
|
|
30950
|
+
pattern: "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
|
|
30951
|
+
description: "Authorization scheme word placed before the credential, e.g. `Key` for Higgsfield's `Authorization: Key KEY_ID:KEY_SECRET` (ENG-8440). Omit for the `Bearer` default. Constrained to a single RFC 7230 token because it is concatenated straight into a header value."
|
|
30952
|
+
},
|
|
30948
30953
|
runtime_scopes: {
|
|
30949
30954
|
type: "object",
|
|
30950
30955
|
description: "Per-runtime-scope support map. Each slot is either null (the integration does not support installs at this scope) or an object describing how token resolution and auth work for that scope.",
|
|
@@ -32939,16 +32944,43 @@ var INTEGRATION_REGISTRY = [
|
|
|
32939
32944
|
id: "higgsfield",
|
|
32940
32945
|
name: "Higgsfield",
|
|
32941
32946
|
category: "media",
|
|
32942
|
-
description: "Generative media \u2014 image
|
|
32943
|
-
//
|
|
32944
|
-
//
|
|
32945
|
-
|
|
32947
|
+
description: "Generative media \u2014 Soul text-to-image with style presets and trained-character consistency, DoP image-to-video with motion presets, and lip-synced talking video. Uses Higgsfield's REST API with your own API key.",
|
|
32948
|
+
// ENG-8440: api_key, NOT the host-brokered MCP this used to be.
|
|
32949
|
+
//
|
|
32950
|
+
// Higgsfield MCP (`https://mcp.higgsfield.ai/mcp`) cannot be completed from
|
|
32951
|
+
// the console, and that is a vendor constraint rather than a gap in our
|
|
32952
|
+
// plumbing. Its `oauth-protected-resource` metadata offers two flows and
|
|
32953
|
+
// names the clients each is for: the redirect flow lists
|
|
32954
|
+
// ["anthropic","claude","claude-ai","claude-code"] and the device-code flow
|
|
32955
|
+
// lists ["openclaw","hermes","memoclaw"]. Our console appears in neither,
|
|
32956
|
+
// and the device authorization server
|
|
32957
|
+
// (`fnf-device-auth.higgsfield.ai/.well-known/oauth-authorization-server`)
|
|
32958
|
+
// still returns 404, so there is no discovery document to probe either.
|
|
32959
|
+
// The only client Higgsfield permits is Claude Code on the agent's own
|
|
32960
|
+
// host, driven by an operator in tmux — no console work removes that step.
|
|
32961
|
+
//
|
|
32962
|
+
// The REST API (`platform.higgsfield.ai`) has none of those constraints: a
|
|
32963
|
+
// static key pair the customer creates in their own Higgsfield account,
|
|
32964
|
+
// sent as `Authorization: Key KEY_ID:KEY_SECRET`. That makes this an
|
|
32965
|
+
// ordinary paste-a-key integration, and it means WE hold the credential —
|
|
32966
|
+
// storable, rotatable, revocable and auditable, none of which was true
|
|
32967
|
+
// under the MCP.
|
|
32968
|
+
//
|
|
32969
|
+
// Bring-your-own-key: generations bill to the customer's own Higgsfield
|
|
32970
|
+
// account, so an install is never metered by Augmented Team.
|
|
32971
|
+
//
|
|
32972
|
+
// NOTE: this entry carries no `remoteMcp`, so it contributes nothing to
|
|
32973
|
+
// `registryRemoteMcpKeys` and cannot prune the `higgsfield` key an older
|
|
32974
|
+
// host already wrote to `.mcp.json`. That pruning is why `'higgsfield'` is
|
|
32975
|
+
// a literal in `integrationDerivedKeys` in the claudecode adapter — do not
|
|
32976
|
+
// drop it while any host may still be carrying the retired MCP entry.
|
|
32977
|
+
supported_auth_types: ["api_key"],
|
|
32946
32978
|
capabilities: [
|
|
32947
|
-
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create
|
|
32948
|
-
{ id: "higgsfield:generate-video", name: "Generate Video", description: "
|
|
32949
|
-
{ id: "higgsfield:read-
|
|
32979
|
+
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create stills with Soul \u2014 style presets, plus trained-character consistency for a repeated face or product.", access: "write" },
|
|
32980
|
+
{ id: "higgsfield:generate-video", name: "Generate Video", description: "Animate a still into a short clip with DoP motion presets, or lip-sync a talking video from an image plus audio.", access: "write" },
|
|
32981
|
+
{ id: "higgsfield:read-jobs", name: "Poll Jobs & Presets", description: "Poll asynchronous generations to completion, and list the style and motion presets the generate tools accept.", access: "read" }
|
|
32950
32982
|
],
|
|
32951
|
-
docs_url: "https://higgsfield.ai/
|
|
32983
|
+
docs_url: "https://docs.higgsfield.ai/",
|
|
32952
32984
|
beta: true
|
|
32953
32985
|
},
|
|
32954
32986
|
{
|
|
@@ -33547,7 +33579,19 @@ var MB2 = 1024 * 1024;
|
|
|
33547
33579
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
33548
33580
|
|
|
33549
33581
|
// ../core/dist/direct-chat/notice-display.js
|
|
33550
|
-
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
33582
|
+
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
33583
|
+
"scheduled_task_nudge",
|
|
33584
|
+
"kanban_check",
|
|
33585
|
+
// ENG-8394. These two were originally cited BELOW as examples of user-facing
|
|
33586
|
+
// notices; reading their content builders shows the opposite. The manager
|
|
33587
|
+
// feedback notice opens "Your manager just completed a performance review of
|
|
33588
|
+
// your work" and closes "Please reflect on this feedback and act on it now";
|
|
33589
|
+
// the form-timeout notice ends "do NOT keep waiting for this form" and quotes
|
|
33590
|
+
// a raw request id and Slack channel id. Both are second-person instructions
|
|
33591
|
+
// to the agent and were being rendered verbatim to the customer.
|
|
33592
|
+
"manager_feedback",
|
|
33593
|
+
"form_timeout"
|
|
33594
|
+
];
|
|
33551
33595
|
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
33552
33596
|
|
|
33553
33597
|
// ../core/dist/direct-chat/cursor-advance.js
|
package/dist/mcp/index.js
CHANGED
|
@@ -21756,33 +21756,62 @@ function describeAssignHumanResult(resp, email2) {
|
|
|
21756
21756
|
}
|
|
21757
21757
|
|
|
21758
21758
|
// src/directory.ts
|
|
21759
|
+
function scopedCount(n, scope) {
|
|
21760
|
+
const org = orgLabel(scope);
|
|
21761
|
+
if (!org) return `${n}`;
|
|
21762
|
+
return `${n} in ${org} \u2014 this directory cannot see other organizations`;
|
|
21763
|
+
}
|
|
21764
|
+
function orgLabel(scope) {
|
|
21765
|
+
if (scope?.cross_org !== false) return null;
|
|
21766
|
+
const named = scope.organization_name?.trim();
|
|
21767
|
+
if (named) return named;
|
|
21768
|
+
return scope.organization_id ? "your organization" : null;
|
|
21769
|
+
}
|
|
21770
|
+
function scopeFooter(scope) {
|
|
21771
|
+
const org = orgLabel(scope);
|
|
21772
|
+
if (!org) return null;
|
|
21773
|
+
const visible = scope?.teams_visible;
|
|
21774
|
+
const total = scope?.teams_in_org;
|
|
21775
|
+
const teams = typeof visible === "number" && typeof total === "number" ? ` (${visible} of ${total} team${total === 1 ? "" : "s"} visible to you)` : "";
|
|
21776
|
+
return `Scope: ${org} only${teams}. Other organizations are not searchable from here, so one match is not proof it is the only one, and no match is not proof there is none.`;
|
|
21777
|
+
}
|
|
21759
21778
|
function formatDirectoryResult(data, query, slackUserId) {
|
|
21760
21779
|
const agents = data.agents ?? [];
|
|
21761
21780
|
const people = data.people ?? [];
|
|
21781
|
+
const footer = scopeFooter(data.scope);
|
|
21762
21782
|
if (agents.length === 0 && people.length === 0) {
|
|
21763
21783
|
if (slackUserId) {
|
|
21764
21784
|
return {
|
|
21765
|
-
text: `No agent or person in your directory matches Slack id ${slackUserId}. Either they are not someone you're authorised to see, or they haven't linked their Slack account. Do not guess who it is.`
|
|
21785
|
+
text: `No agent or person in your directory matches Slack id ${slackUserId}. Either they are not someone you're authorised to see, or they haven't linked their Slack account. Do not guess who it is.` + (footer ? `
|
|
21786
|
+
|
|
21787
|
+
${footer}` : "")
|
|
21766
21788
|
};
|
|
21767
21789
|
}
|
|
21768
21790
|
return {
|
|
21769
|
-
text: query ? `No agents or people match "${query}" in your directory.` : "No agents or people are visible in your directory."
|
|
21791
|
+
text: (query ? `No agents or people match "${query}" in your directory.` : "No agents or people are visible in your directory.") + (footer ? `
|
|
21792
|
+
|
|
21793
|
+
${footer}` : "")
|
|
21770
21794
|
};
|
|
21771
21795
|
}
|
|
21772
21796
|
const slackTag = (id) => id ? ` \u2014 Slack <@${id}>` : "";
|
|
21773
21797
|
const agentLines = agents.map((a) => {
|
|
21774
21798
|
const scope = a.same_team ? "your team" : `team ${a.team_slug}`;
|
|
21775
21799
|
const assignHint = a.same_team ? `kanban_assign target_agent="${a.code_name}"` : `kanban_assign target_agent="${a.code_name}" target_team="${a.team_slug}"`;
|
|
21776
|
-
return ` \u2022 ${a.code_name} (${a.display_name}) - ${scope} [${a.team_name}]${slackTag(a.slack_user_id)} \u2192 ${assignHint}`;
|
|
21800
|
+
return ` \u2022 ${a.code_name} (${a.display_name}) - ${scope} [team: ${a.team_name}]${slackTag(a.slack_user_id)} \u2192 ${assignHint}`;
|
|
21777
21801
|
});
|
|
21778
21802
|
const peopleLines = people.map(
|
|
21779
21803
|
(p) => ` \u2022 ${p.name ?? p.email} <${p.email}>${slackTag(p.slack_user_id)} \u2192 assign_kanban_to_human assignee_email="${p.email}"`
|
|
21780
21804
|
);
|
|
21781
21805
|
const sections = [];
|
|
21782
|
-
if (agents.length > 0)
|
|
21806
|
+
if (agents.length > 0) {
|
|
21807
|
+
sections.push(`Agents (${scopedCount(agents.length, data.scope)}):
|
|
21783
21808
|
${agentLines.join("\n")}`);
|
|
21784
|
-
|
|
21809
|
+
}
|
|
21810
|
+
if (people.length > 0) {
|
|
21811
|
+
sections.push(`People (${scopedCount(people.length, data.scope)}):
|
|
21785
21812
|
${peopleLines.join("\n")}`);
|
|
21813
|
+
}
|
|
21814
|
+
if (footer) sections.push(footer);
|
|
21786
21815
|
return { text: sections.join("\n\n") };
|
|
21787
21816
|
}
|
|
21788
21817
|
|
package/dist/mcp/origami.js
CHANGED
|
@@ -37100,6 +37100,11 @@ var integration_metadata_v1_default = {
|
|
|
37100
37100
|
pattern: "^https://",
|
|
37101
37101
|
description: "Absolute HTTPS URL the broker uses as the vendor API root. Required when any tool descriptor relies on http_templater (i.e. whenever `tools[]` is non-empty)."
|
|
37102
37102
|
},
|
|
37103
|
+
auth_scheme: {
|
|
37104
|
+
type: "string",
|
|
37105
|
+
pattern: "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
|
|
37106
|
+
description: "Authorization scheme word placed before the credential, e.g. `Key` for Higgsfield's `Authorization: Key KEY_ID:KEY_SECRET` (ENG-8440). Omit for the `Bearer` default. Constrained to a single RFC 7230 token because it is concatenated straight into a header value."
|
|
37107
|
+
},
|
|
37103
37108
|
runtime_scopes: {
|
|
37104
37109
|
type: "object",
|
|
37105
37110
|
description: "Per-runtime-scope support map. Each slot is either null (the integration does not support installs at this scope) or an object describing how token resolution and auth work for that scope.",
|
|
@@ -37254,7 +37259,7 @@ var FIXED_SECONDS = {
|
|
|
37254
37259
|
// ../core/dist/integrations/integration-broker/http-templater.js
|
|
37255
37260
|
var PLACEHOLDER_RE = /\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
|
|
37256
37261
|
function buildHttpRequest(input) {
|
|
37257
|
-
const { tool, args, baseUrl, bearerToken, requestId, extraHeaders } = input;
|
|
37262
|
+
const { tool, args, baseUrl, bearerToken, authScheme, requestId, extraHeaders } = input;
|
|
37258
37263
|
const { method, path_template, query_template, headers_template, body_template, idempotency_key_header } = tool.http;
|
|
37259
37264
|
const path = templatePath(path_template, args);
|
|
37260
37265
|
const query = query_template ? buildQueryString(query_template, args) : "";
|
|
@@ -37263,7 +37268,7 @@ function buildHttpRequest(input) {
|
|
|
37263
37268
|
Accept: "application/json"
|
|
37264
37269
|
};
|
|
37265
37270
|
if (bearerToken) {
|
|
37266
|
-
headers["Authorization"] =
|
|
37271
|
+
headers["Authorization"] = `${resolveAuthScheme(authScheme)} ${bearerToken}`;
|
|
37267
37272
|
}
|
|
37268
37273
|
if (method !== "GET") {
|
|
37269
37274
|
const headerName = idempotency_key_header ?? "Idempotency-Key";
|
|
@@ -37341,6 +37346,17 @@ function omitKeys(args, keys) {
|
|
|
37341
37346
|
}
|
|
37342
37347
|
return out;
|
|
37343
37348
|
}
|
|
37349
|
+
function resolveAuthScheme(scheme) {
|
|
37350
|
+
if (scheme === void 0)
|
|
37351
|
+
return "Bearer";
|
|
37352
|
+
const trimmed = scheme.trim();
|
|
37353
|
+
if (trimmed === "")
|
|
37354
|
+
return "Bearer";
|
|
37355
|
+
if (!isValidHeaderName(trimmed)) {
|
|
37356
|
+
throw new TemplateError(`invalid auth_scheme: ${trimmed}`);
|
|
37357
|
+
}
|
|
37358
|
+
return trimmed;
|
|
37359
|
+
}
|
|
37344
37360
|
function isValidHeaderName(name) {
|
|
37345
37361
|
return /^[A-Za-z0-9!#$%&'*+.^_`|~-]+$/.test(name);
|
|
37346
37362
|
}
|
|
@@ -39266,16 +39282,43 @@ var INTEGRATION_REGISTRY = [
|
|
|
39266
39282
|
id: "higgsfield",
|
|
39267
39283
|
name: "Higgsfield",
|
|
39268
39284
|
category: "media",
|
|
39269
|
-
description: "Generative media \u2014 image
|
|
39270
|
-
//
|
|
39271
|
-
//
|
|
39272
|
-
|
|
39285
|
+
description: "Generative media \u2014 Soul text-to-image with style presets and trained-character consistency, DoP image-to-video with motion presets, and lip-synced talking video. Uses Higgsfield's REST API with your own API key.",
|
|
39286
|
+
// ENG-8440: api_key, NOT the host-brokered MCP this used to be.
|
|
39287
|
+
//
|
|
39288
|
+
// Higgsfield MCP (`https://mcp.higgsfield.ai/mcp`) cannot be completed from
|
|
39289
|
+
// the console, and that is a vendor constraint rather than a gap in our
|
|
39290
|
+
// plumbing. Its `oauth-protected-resource` metadata offers two flows and
|
|
39291
|
+
// names the clients each is for: the redirect flow lists
|
|
39292
|
+
// ["anthropic","claude","claude-ai","claude-code"] and the device-code flow
|
|
39293
|
+
// lists ["openclaw","hermes","memoclaw"]. Our console appears in neither,
|
|
39294
|
+
// and the device authorization server
|
|
39295
|
+
// (`fnf-device-auth.higgsfield.ai/.well-known/oauth-authorization-server`)
|
|
39296
|
+
// still returns 404, so there is no discovery document to probe either.
|
|
39297
|
+
// The only client Higgsfield permits is Claude Code on the agent's own
|
|
39298
|
+
// host, driven by an operator in tmux — no console work removes that step.
|
|
39299
|
+
//
|
|
39300
|
+
// The REST API (`platform.higgsfield.ai`) has none of those constraints: a
|
|
39301
|
+
// static key pair the customer creates in their own Higgsfield account,
|
|
39302
|
+
// sent as `Authorization: Key KEY_ID:KEY_SECRET`. That makes this an
|
|
39303
|
+
// ordinary paste-a-key integration, and it means WE hold the credential —
|
|
39304
|
+
// storable, rotatable, revocable and auditable, none of which was true
|
|
39305
|
+
// under the MCP.
|
|
39306
|
+
//
|
|
39307
|
+
// Bring-your-own-key: generations bill to the customer's own Higgsfield
|
|
39308
|
+
// account, so an install is never metered by Augmented Team.
|
|
39309
|
+
//
|
|
39310
|
+
// NOTE: this entry carries no `remoteMcp`, so it contributes nothing to
|
|
39311
|
+
// `registryRemoteMcpKeys` and cannot prune the `higgsfield` key an older
|
|
39312
|
+
// host already wrote to `.mcp.json`. That pruning is why `'higgsfield'` is
|
|
39313
|
+
// a literal in `integrationDerivedKeys` in the claudecode adapter — do not
|
|
39314
|
+
// drop it while any host may still be carrying the retired MCP entry.
|
|
39315
|
+
supported_auth_types: ["api_key"],
|
|
39273
39316
|
capabilities: [
|
|
39274
|
-
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create
|
|
39275
|
-
{ id: "higgsfield:generate-video", name: "Generate Video", description: "
|
|
39276
|
-
{ id: "higgsfield:read-
|
|
39317
|
+
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create stills with Soul \u2014 style presets, plus trained-character consistency for a repeated face or product.", access: "write" },
|
|
39318
|
+
{ id: "higgsfield:generate-video", name: "Generate Video", description: "Animate a still into a short clip with DoP motion presets, or lip-sync a talking video from an image plus audio.", access: "write" },
|
|
39319
|
+
{ id: "higgsfield:read-jobs", name: "Poll Jobs & Presets", description: "Poll asynchronous generations to completion, and list the style and motion presets the generate tools accept.", access: "read" }
|
|
39277
39320
|
],
|
|
39278
|
-
docs_url: "https://higgsfield.ai/
|
|
39321
|
+
docs_url: "https://docs.higgsfield.ai/",
|
|
39279
39322
|
beta: true
|
|
39280
39323
|
},
|
|
39281
39324
|
{
|
|
@@ -39874,7 +39917,19 @@ var MB2 = 1024 * 1024;
|
|
|
39874
39917
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
39875
39918
|
|
|
39876
39919
|
// ../core/dist/direct-chat/notice-display.js
|
|
39877
|
-
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
39920
|
+
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
39921
|
+
"scheduled_task_nudge",
|
|
39922
|
+
"kanban_check",
|
|
39923
|
+
// ENG-8394. These two were originally cited BELOW as examples of user-facing
|
|
39924
|
+
// notices; reading their content builders shows the opposite. The manager
|
|
39925
|
+
// feedback notice opens "Your manager just completed a performance review of
|
|
39926
|
+
// your work" and closes "Please reflect on this feedback and act on it now";
|
|
39927
|
+
// the form-timeout notice ends "do NOT keep waiting for this form" and quotes
|
|
39928
|
+
// a raw request id and Slack channel id. Both are second-person instructions
|
|
39929
|
+
// to the agent and were being rendered verbatim to the customer.
|
|
39930
|
+
"manager_feedback",
|
|
39931
|
+
"form_timeout"
|
|
39932
|
+
];
|
|
39878
39933
|
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
39879
39934
|
|
|
39880
39935
|
// ../core/dist/direct-chat/cursor-advance.js
|
|
@@ -31170,6 +31170,11 @@ var integration_metadata_v1_default = {
|
|
|
31170
31170
|
pattern: "^https://",
|
|
31171
31171
|
description: "Absolute HTTPS URL the broker uses as the vendor API root. Required when any tool descriptor relies on http_templater (i.e. whenever `tools[]` is non-empty)."
|
|
31172
31172
|
},
|
|
31173
|
+
auth_scheme: {
|
|
31174
|
+
type: "string",
|
|
31175
|
+
pattern: "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
|
|
31176
|
+
description: "Authorization scheme word placed before the credential, e.g. `Key` for Higgsfield's `Authorization: Key KEY_ID:KEY_SECRET` (ENG-8440). Omit for the `Bearer` default. Constrained to a single RFC 7230 token because it is concatenated straight into a header value."
|
|
31177
|
+
},
|
|
31173
31178
|
runtime_scopes: {
|
|
31174
31179
|
type: "object",
|
|
31175
31180
|
description: "Per-runtime-scope support map. Each slot is either null (the integration does not support installs at this scope) or an object describing how token resolution and auth work for that scope.",
|
|
@@ -33161,16 +33166,43 @@ var INTEGRATION_REGISTRY = [
|
|
|
33161
33166
|
id: "higgsfield",
|
|
33162
33167
|
name: "Higgsfield",
|
|
33163
33168
|
category: "media",
|
|
33164
|
-
description: "Generative media \u2014 image
|
|
33165
|
-
//
|
|
33166
|
-
//
|
|
33167
|
-
|
|
33169
|
+
description: "Generative media \u2014 Soul text-to-image with style presets and trained-character consistency, DoP image-to-video with motion presets, and lip-synced talking video. Uses Higgsfield's REST API with your own API key.",
|
|
33170
|
+
// ENG-8440: api_key, NOT the host-brokered MCP this used to be.
|
|
33171
|
+
//
|
|
33172
|
+
// Higgsfield MCP (`https://mcp.higgsfield.ai/mcp`) cannot be completed from
|
|
33173
|
+
// the console, and that is a vendor constraint rather than a gap in our
|
|
33174
|
+
// plumbing. Its `oauth-protected-resource` metadata offers two flows and
|
|
33175
|
+
// names the clients each is for: the redirect flow lists
|
|
33176
|
+
// ["anthropic","claude","claude-ai","claude-code"] and the device-code flow
|
|
33177
|
+
// lists ["openclaw","hermes","memoclaw"]. Our console appears in neither,
|
|
33178
|
+
// and the device authorization server
|
|
33179
|
+
// (`fnf-device-auth.higgsfield.ai/.well-known/oauth-authorization-server`)
|
|
33180
|
+
// still returns 404, so there is no discovery document to probe either.
|
|
33181
|
+
// The only client Higgsfield permits is Claude Code on the agent's own
|
|
33182
|
+
// host, driven by an operator in tmux — no console work removes that step.
|
|
33183
|
+
//
|
|
33184
|
+
// The REST API (`platform.higgsfield.ai`) has none of those constraints: a
|
|
33185
|
+
// static key pair the customer creates in their own Higgsfield account,
|
|
33186
|
+
// sent as `Authorization: Key KEY_ID:KEY_SECRET`. That makes this an
|
|
33187
|
+
// ordinary paste-a-key integration, and it means WE hold the credential —
|
|
33188
|
+
// storable, rotatable, revocable and auditable, none of which was true
|
|
33189
|
+
// under the MCP.
|
|
33190
|
+
//
|
|
33191
|
+
// Bring-your-own-key: generations bill to the customer's own Higgsfield
|
|
33192
|
+
// account, so an install is never metered by Augmented Team.
|
|
33193
|
+
//
|
|
33194
|
+
// NOTE: this entry carries no `remoteMcp`, so it contributes nothing to
|
|
33195
|
+
// `registryRemoteMcpKeys` and cannot prune the `higgsfield` key an older
|
|
33196
|
+
// host already wrote to `.mcp.json`. That pruning is why `'higgsfield'` is
|
|
33197
|
+
// a literal in `integrationDerivedKeys` in the claudecode adapter — do not
|
|
33198
|
+
// drop it while any host may still be carrying the retired MCP entry.
|
|
33199
|
+
supported_auth_types: ["api_key"],
|
|
33168
33200
|
capabilities: [
|
|
33169
|
-
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create
|
|
33170
|
-
{ id: "higgsfield:generate-video", name: "Generate Video", description: "
|
|
33171
|
-
{ id: "higgsfield:read-
|
|
33201
|
+
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create stills with Soul \u2014 style presets, plus trained-character consistency for a repeated face or product.", access: "write" },
|
|
33202
|
+
{ id: "higgsfield:generate-video", name: "Generate Video", description: "Animate a still into a short clip with DoP motion presets, or lip-sync a talking video from an image plus audio.", access: "write" },
|
|
33203
|
+
{ id: "higgsfield:read-jobs", name: "Poll Jobs & Presets", description: "Poll asynchronous generations to completion, and list the style and motion presets the generate tools accept.", access: "read" }
|
|
33172
33204
|
],
|
|
33173
|
-
docs_url: "https://higgsfield.ai/
|
|
33205
|
+
docs_url: "https://docs.higgsfield.ai/",
|
|
33174
33206
|
beta: true
|
|
33175
33207
|
},
|
|
33176
33208
|
{
|
|
@@ -33769,7 +33801,19 @@ var MB2 = 1024 * 1024;
|
|
|
33769
33801
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
33770
33802
|
|
|
33771
33803
|
// ../core/dist/direct-chat/notice-display.js
|
|
33772
|
-
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
33804
|
+
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
33805
|
+
"scheduled_task_nudge",
|
|
33806
|
+
"kanban_check",
|
|
33807
|
+
// ENG-8394. These two were originally cited BELOW as examples of user-facing
|
|
33808
|
+
// notices; reading their content builders shows the opposite. The manager
|
|
33809
|
+
// feedback notice opens "Your manager just completed a performance review of
|
|
33810
|
+
// your work" and closes "Please reflect on this feedback and act on it now";
|
|
33811
|
+
// the form-timeout notice ends "do NOT keep waiting for this form" and quotes
|
|
33812
|
+
// a raw request id and Slack channel id. Both are second-person instructions
|
|
33813
|
+
// to the agent and were being rendered verbatim to the customer.
|
|
33814
|
+
"manager_feedback",
|
|
33815
|
+
"form_timeout"
|
|
33816
|
+
];
|
|
33773
33817
|
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
33774
33818
|
|
|
33775
33819
|
// ../core/dist/direct-chat/cursor-advance.js
|
|
@@ -31496,6 +31496,11 @@ var integration_metadata_v1_default = {
|
|
|
31496
31496
|
pattern: "^https://",
|
|
31497
31497
|
description: "Absolute HTTPS URL the broker uses as the vendor API root. Required when any tool descriptor relies on http_templater (i.e. whenever `tools[]` is non-empty)."
|
|
31498
31498
|
},
|
|
31499
|
+
auth_scheme: {
|
|
31500
|
+
type: "string",
|
|
31501
|
+
pattern: "^[A-Za-z0-9!#$%&'*+.^_`|~-]+$",
|
|
31502
|
+
description: "Authorization scheme word placed before the credential, e.g. `Key` for Higgsfield's `Authorization: Key KEY_ID:KEY_SECRET` (ENG-8440). Omit for the `Bearer` default. Constrained to a single RFC 7230 token because it is concatenated straight into a header value."
|
|
31503
|
+
},
|
|
31499
31504
|
runtime_scopes: {
|
|
31500
31505
|
type: "object",
|
|
31501
31506
|
description: "Per-runtime-scope support map. Each slot is either null (the integration does not support installs at this scope) or an object describing how token resolution and auth work for that scope.",
|
|
@@ -33487,16 +33492,43 @@ var INTEGRATION_REGISTRY = [
|
|
|
33487
33492
|
id: "higgsfield",
|
|
33488
33493
|
name: "Higgsfield",
|
|
33489
33494
|
category: "media",
|
|
33490
|
-
description: "Generative media \u2014 image
|
|
33491
|
-
//
|
|
33492
|
-
//
|
|
33493
|
-
|
|
33495
|
+
description: "Generative media \u2014 Soul text-to-image with style presets and trained-character consistency, DoP image-to-video with motion presets, and lip-synced talking video. Uses Higgsfield's REST API with your own API key.",
|
|
33496
|
+
// ENG-8440: api_key, NOT the host-brokered MCP this used to be.
|
|
33497
|
+
//
|
|
33498
|
+
// Higgsfield MCP (`https://mcp.higgsfield.ai/mcp`) cannot be completed from
|
|
33499
|
+
// the console, and that is a vendor constraint rather than a gap in our
|
|
33500
|
+
// plumbing. Its `oauth-protected-resource` metadata offers two flows and
|
|
33501
|
+
// names the clients each is for: the redirect flow lists
|
|
33502
|
+
// ["anthropic","claude","claude-ai","claude-code"] and the device-code flow
|
|
33503
|
+
// lists ["openclaw","hermes","memoclaw"]. Our console appears in neither,
|
|
33504
|
+
// and the device authorization server
|
|
33505
|
+
// (`fnf-device-auth.higgsfield.ai/.well-known/oauth-authorization-server`)
|
|
33506
|
+
// still returns 404, so there is no discovery document to probe either.
|
|
33507
|
+
// The only client Higgsfield permits is Claude Code on the agent's own
|
|
33508
|
+
// host, driven by an operator in tmux — no console work removes that step.
|
|
33509
|
+
//
|
|
33510
|
+
// The REST API (`platform.higgsfield.ai`) has none of those constraints: a
|
|
33511
|
+
// static key pair the customer creates in their own Higgsfield account,
|
|
33512
|
+
// sent as `Authorization: Key KEY_ID:KEY_SECRET`. That makes this an
|
|
33513
|
+
// ordinary paste-a-key integration, and it means WE hold the credential —
|
|
33514
|
+
// storable, rotatable, revocable and auditable, none of which was true
|
|
33515
|
+
// under the MCP.
|
|
33516
|
+
//
|
|
33517
|
+
// Bring-your-own-key: generations bill to the customer's own Higgsfield
|
|
33518
|
+
// account, so an install is never metered by Augmented Team.
|
|
33519
|
+
//
|
|
33520
|
+
// NOTE: this entry carries no `remoteMcp`, so it contributes nothing to
|
|
33521
|
+
// `registryRemoteMcpKeys` and cannot prune the `higgsfield` key an older
|
|
33522
|
+
// host already wrote to `.mcp.json`. That pruning is why `'higgsfield'` is
|
|
33523
|
+
// a literal in `integrationDerivedKeys` in the claudecode adapter — do not
|
|
33524
|
+
// drop it while any host may still be carrying the retired MCP entry.
|
|
33525
|
+
supported_auth_types: ["api_key"],
|
|
33494
33526
|
capabilities: [
|
|
33495
|
-
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create
|
|
33496
|
-
{ id: "higgsfield:generate-video", name: "Generate Video", description: "
|
|
33497
|
-
{ id: "higgsfield:read-
|
|
33527
|
+
{ id: "higgsfield:generate-image", name: "Generate Image", description: "Create stills with Soul \u2014 style presets, plus trained-character consistency for a repeated face or product.", access: "write" },
|
|
33528
|
+
{ id: "higgsfield:generate-video", name: "Generate Video", description: "Animate a still into a short clip with DoP motion presets, or lip-sync a talking video from an image plus audio.", access: "write" },
|
|
33529
|
+
{ id: "higgsfield:read-jobs", name: "Poll Jobs & Presets", description: "Poll asynchronous generations to completion, and list the style and motion presets the generate tools accept.", access: "read" }
|
|
33498
33530
|
],
|
|
33499
|
-
docs_url: "https://higgsfield.ai/
|
|
33531
|
+
docs_url: "https://docs.higgsfield.ai/",
|
|
33500
33532
|
beta: true
|
|
33501
33533
|
},
|
|
33502
33534
|
{
|
|
@@ -34095,7 +34127,19 @@ var MB2 = 1024 * 1024;
|
|
|
34095
34127
|
var DIRECT_CHAT_UPLOAD_MAX_BYTES = 10 * MB2;
|
|
34096
34128
|
|
|
34097
34129
|
// ../core/dist/direct-chat/notice-display.js
|
|
34098
|
-
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
34130
|
+
var AGENT_DIRECTED_NOTICE_KINDS = [
|
|
34131
|
+
"scheduled_task_nudge",
|
|
34132
|
+
"kanban_check",
|
|
34133
|
+
// ENG-8394. These two were originally cited BELOW as examples of user-facing
|
|
34134
|
+
// notices; reading their content builders shows the opposite. The manager
|
|
34135
|
+
// feedback notice opens "Your manager just completed a performance review of
|
|
34136
|
+
// your work" and closes "Please reflect on this feedback and act on it now";
|
|
34137
|
+
// the form-timeout notice ends "do NOT keep waiting for this form" and quotes
|
|
34138
|
+
// a raw request id and Slack channel id. Both are second-person instructions
|
|
34139
|
+
// to the agent and were being rendered verbatim to the customer.
|
|
34140
|
+
"manager_feedback",
|
|
34141
|
+
"form_timeout"
|
|
34142
|
+
];
|
|
34099
34143
|
var AGENT_DIRECTED_KIND_SET = new Set(AGENT_DIRECTED_NOTICE_KINDS);
|
|
34100
34144
|
|
|
34101
34145
|
// ../core/dist/direct-chat/cursor-advance.js
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
writeDirectChatSessionState,
|
|
38
38
|
writeEgressAllowlist,
|
|
39
39
|
writePersistentClaudeWrapper
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-S5RR4UHQ.js";
|
|
41
41
|
import "./chunk-XWVM4KPK.js";
|
|
42
42
|
export {
|
|
43
43
|
EGRESS_BASELINE_DOMAINS,
|
|
@@ -79,4 +79,4 @@ export {
|
|
|
79
79
|
writeEgressAllowlist,
|
|
80
80
|
writePersistentClaudeWrapper
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=persistent-session-
|
|
82
|
+
//# sourceMappingURL=persistent-session-RM5ZY2SB.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
paneLogPath
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-S5RR4UHQ.js";
|
|
4
4
|
import "./chunk-XWVM4KPK.js";
|
|
5
5
|
|
|
6
6
|
// src/lib/responsiveness-probe.ts
|
|
@@ -662,4 +662,4 @@ export {
|
|
|
662
662
|
readAndResetSlackReplyBindingClassifications,
|
|
663
663
|
readAndResetSlackReplyTargetClassifications
|
|
664
664
|
};
|
|
665
|
-
//# sourceMappingURL=responsiveness-probe-
|
|
665
|
+
//# sourceMappingURL=responsiveness-probe-C4KMTKWR.js.map
|